<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Dan’s MEGA65 Digest]]></title><description><![CDATA[THIS NEWSLETTER IS NO LONGER ON SUBSTACK. To subscribe by email or read all issues, see: https://dansanderson.com/mega65/]]></description><link>https://m65digest.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!SKOU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc825ca18-2775-4064-8097-b05053f8177d_300x300.png</url><title>Dan’s MEGA65 Digest</title><link>https://m65digest.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 10 Apr 2026 16:09:22 GMT</lastBuildDate><atom:link href="https://m65digest.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Dan Sanderson]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[m65digest@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[m65digest@substack.com]]></itunes:email><itunes:name><![CDATA[Dan Sanderson]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dan Sanderson]]></itunes:author><googleplay:owner><![CDATA[m65digest@substack.com]]></googleplay:owner><googleplay:email><![CDATA[m65digest@substack.com]]></googleplay:email><googleplay:author><![CDATA[Dan Sanderson]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Disassembling Crossroads, part 2]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for January 2025]]></description><link>https://m65digest.substack.com/p/disassembling-crossroads-part-2</link><guid isPermaLink="false">https://m65digest.substack.com/p/disassembling-crossroads-part-2</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Sat, 01 Feb 2025 04:22:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!F-ZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Dan&#8217;s MEGA65 Digest has moved! To subscribe, please visit: <a href="https://dansanderson.com/mega65/">https://dansanderson.com/mega65/</a></strong></em></p><div><hr></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F-ZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F-ZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 424w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 848w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 1272w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F-ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png" width="511" height="507" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:507,&quot;width&quot;:511,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:520689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F-ZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 424w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 848w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 1272w, https://substackcdn.com/image/fetch/$s_!F-ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F902773ef-e345-427d-9d6f-d8b78fae5acd_511x507.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The creatures of Crossroads, illustration from Compute!'s Gazette, December 1987.</figcaption></figure></div><p><a href="https://dansanderson.com/mega65/crossroads-part-1/">In last November&#8217;s Digest</a>, we started a project to dissect the classic C64 title <em>Crossroads</em>, published by Compute!&#8217;s Gazette magazine in December 1987. We got a handle on how the game works by playing it, and by inspecting the running game state in <a href="https://github.com/slajerek/RetroDebugger">Retro Debugger</a>, a C64 emulator with memory visualization features. In this issue, we&#8217;ll get up close and personal with the <em>Crossroads</em> machine code, using a tool called a <em>disassembler</em>. Combined with what we&#8217;ve learned, and some world knowledge of Commodore programs, we can begin to produce human-readable assembly language source code for the game.</p><p><em>Crossroads</em> was so popular that Compute! commissioned a sequel, <em>Crossroads II: Pandemonium</em>, which was published in December 1988. I did some searching to see if anyone has disassembled the <em>Crossroads</em> games already, and discovered <a href="https://github.com/hyphz/crossroads-2-disassembly/tree/master">an excellent disassembly of Crossroads II</a> by Github user hyphz. For the sake of the exercise, I did not look closely at this disassembly at first, but I do expect the original <em>Crossroads</em> to be similar in many ways.</p><p>We won&#8217;t do a full disassembly of <em>Crossroads</em> in a single newsletter, but we&#8217;ll answer some of the most important questions. Before we do that, let&#8217;s see what everyone else is up to!</p><h2>PET core pre-release</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2xyL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2xyL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 424w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 848w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 1272w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2xyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png" width="478" height="357.05151515151516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:493,&quot;width&quot;:660,&quot;resizeWidth&quot;:478,&quot;bytes&quot;:202211,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2xyL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 424w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 848w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 1272w, https://substackcdn.com/image/fetch/$s_!2xyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e0e6481-88ea-49da-b55d-9d4db018e75e_660x493.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Commodore PET core, running on the MEGA65.</figcaption></figure></div><p>Olaf &#8220;Rhialto&#8221; Seibert is working on a Commodore PET core for the MEGA65, and has <a href="https://files.mega65.org/?id=468325ae-7e27-475d-80e7-a0f0af409446">invited everyone to help test a pre-release version</a>. The Filehost download includes core builds for R3 and R6 boards, and a copy of the necessary ROM files that you install on the SD card in a folder named <code>pet/</code>.</p><p>Do keep in mind that this is a pre-release and may be missing features. Check out <a href="https://github.com/Rhialto/PET_MEGA65">the Commodore PET core on Github</a> to see source files and file bugs. Many thanks to Rhialto for this exciting project!</p><h2>Gaplus arcade core</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WAQe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WAQe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 424w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 848w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 1272w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WAQe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png" width="374" height="480.85714285714283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:224,&quot;resizeWidth&quot;:374,&quot;bytes&quot;:2500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WAQe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 424w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 848w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 1272w, https://substackcdn.com/image/fetch/$s_!WAQe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c992cef-1ce7-40d3-a45e-c099bfd5c33f_224x288.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Gaplus arcade game, by Namco</figcaption></figure></div><p>muse continues to deliver arcade core goodness! This month, it&#8217;s Gaplus, the third game in the Galaga series from Namco. As usual, you will need to <a href="https://files.mega65.org/?id=a87ab90e-06bc-40bb-8257-6988345d7784">download the Gaplus core</a>, locate MAME ROMs on the Internet, then <a href="https://github.com/sho3string/GaplusMEGA65_R3_R6/blob/master/README.md">follow the set-up instructions</a> to produce the files for the SD card. The Gaplus core is available for both R3 and R6 mainboards.</p><p>I encountered an issue with the R6 version when using HDMI video where after a few seconds the game video becomes a static screen of vertical bars. This does not occur over VGA, or with the version for the R3 mainboard. A fix is in progress.</p><h2>Goodwell&#8217;s QR code generator</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kb6w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kb6w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 424w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 848w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 1272w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kb6w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png" width="535" height="298.660394265233" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:623,&quot;width&quot;:1116,&quot;resizeWidth&quot;:535,&quot;bytes&quot;:753410,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kb6w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 424w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 848w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 1272w, https://substackcdn.com/image/fetch/$s_!kb6w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6da2b7d-09ad-4799-96d0-5e13274fe328_1116x623.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The 8 Bit Theory on developing QR code generators for Commodore computers.</figcaption></figure></div><p>Goodwell, aka <a href="https://www.youtube.com/@the8bittheory">The 8 Bit Theory on YouTube</a>, recently attempted an experiment to write a <a href="https://en.wikipedia.org/wiki/QR_code">QR code</a> generator for multiple vintage Commodore computers in multiple languages, including BASIC 2, BASIC 7, C, 6502 assembly language&#8212;and BASIC 65 for the MEGA65. <a href="https://www.youtube.com/watch?v=VD_FmrHzkIA">The video</a> about the experience discusses implementation techniques and performance characteristics of these implementations. Definitely check it out, it&#8217;s worth watching the whole thing.</p><p>Goodwell <a href="https://files.mega65.org/?id=1b586270-24e0-4800-b66b-89567c83541f">uploaded the MEGA65 version to Filehost</a>, and is continuing to refine it. It might even get added to the MEGA65 Intro Disk menu system, to make it easier to share URLs in the menu text. <a href="https://github.com/the8bittheory/qr128">The Github repo</a> for the QR code generator has all of the versions of the experiment, as source code.</p><p>Don&#8217;t miss Goodwell&#8217;s follow-up video about <a href="https://www.youtube.com/watch?v=1xj2Fj3SjUk">the MEGA65&#8217;s technical design</a>, based on his early experiences developing for the computer.</p><h2>MegaMage by SirGeldi</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UTg8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UTg8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 424w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 848w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 1272w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UTg8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png" width="520" height="357.7070063694268" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:628,&quot;resizeWidth&quot;:520,&quot;bytes&quot;:226262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UTg8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 424w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 848w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 1272w, https://substackcdn.com/image/fetch/$s_!UTg8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccab8053-792e-4bb7-afb8-d18d14b45e7c_628x432.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGAMage, by SirGeldi.</figcaption></figure></div><p>Hot off the presses! SirGeldi on Forum64.de has posted <a href="https://www.forum64.de/index.php?thread/153356-megamage/">MEGAMage</a>, a <a href="https://en.wikipedia.org/wiki/Roguelike">Roguelike</a> adventure game written entirely in BASIC. Adorable character graphics and fast map scrolling enhance the gameplay. Even better, SirGeldi built the tools used to develop the graphics, map, and object and monster metadata for the game on the MEGA65 in BASIC, and has included these tools on the disk!</p><p>Download the <code>.zip</code> file from SirGeldi&#8217;s message post, unpack it, and transfer the D81 disk image to your MEGA65. To start the game, mount the disk image, then:</p><pre><code><code>RUN "MEGAMAGE"</code></code></pre><h2>Even more Featured Files!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iyY0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iyY0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iyY0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png" width="463" height="378.2808510638298" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41677659-980e-4662-b358-a14d98dea24d_705x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:705,&quot;resizeWidth&quot;:463,&quot;bytes&quot;:3334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iyY0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!iyY0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41677659-980e-4662-b358-a14d98dea24d_705x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Soccer, by SirLazarus.</figcaption></figure></div><p><a href="https://files.mega65.org/?id=c7911dff-a85d-4be7-b205-8f4728d7185d">Soccer</a>, by SirLazarus, is a new soccer-themed paddle game. It is written in BASIC, and requires the <a href="https://files.mega65.org/?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">latest ROM beta version</a> 920409 because it uses recently added features. (This ROM update will be included in the next stable release package.) Grab your paddle controllers and check it out!</p><p><a href="https://files.mega65.org/?id=ba8f56fb-bace-4428-b828-ce2c9fdce379">Jotto 2020</a>, by ToneDeF, is a word puzzle game similar to Mastermind. It plays something like Wordle, though its invention pre-dates Wordle by a year. ToneDeF originally wrote this for other micros, and made this new version for the MEGA65 in BASIC.</p><p><a href="https://files.mega65.org/?id=925c3538-99a0-4f8f-9cc4-0f68d4f39549">Pac-man in BASIC demo</a>, by xlar54. This playable demo sports many features of the arcade classic, including music, sound, and polished graphics. xlar insists this is just a demo, but only a few features are missing (most notably power pellets). And yes, this too is implemented entirely in BASIC 65.</p><p><a href="https://files.mega65.org/?id=59f31c44-8664-4b6a-927b-b4cf6566a156">Opal Dance</a>, by lochmana, is a colorful puzzle and maze game. Match colored pieces by walking into them, but think before you move! Each match of two pieces replaces the first piece with a wall, and removes the second piece. Clear as much of the level as you can.</p><p><a href="https://files.mega65.org/?id=b1ba53df-1987-4789-9000-57690ef65678">Mega65 Perpetual Calendar</a>, by gcastel (MiddleAgedCoder on Discord). Generate calendars for any month of any year. Developed for BASIC 65 with Eleven, you can get <a href="https://github.com/gcastel/mega65-cal">the source code from Github</a>.</p><p><a href="https://files.mega65.org/html/main.php?id=444fb932-a9b9-4a2f-b114-69353e5ffa89">Xemu keyboard layout reference</a> for Windows, by Discord user Digger. Windows users, keep this handy app open alongside the Xemu emulator to remember how to replicate MEGA65 keystrokes on the PC keyboard. See also <a href="https://only8bit.de/xemukeyboard/">the project homepage</a> (in German), and the README file (in English) included with the download.</p><h2>mouSTer back in stock</h2><p><a href="https://retrohax.net/shop/modulesandparts/mouster/">mouSTer</a>, the USB-to-Commodore DB9 adapter for modern USB mice and game controllers, is back in stock after a long hiatus. This is one of the best ways to use a modern USB mouse with the MEGA65. It even works with wireless mice that use USB dongles. Get one while you can!</p><p>See <a href="https://retrohax.net/the-mouster-project-20-12-2024-update/">RetroHax&#8217;s update from December 30, 2024</a> for details.</p><h2>Digest administrative note</h2><p>I am considering migrating the Digest to a new email newsletter service. As Substack evolves their business model and practices, I want to make sure the Digest is hosted on services that remain open and compatible with the values of the MEGA65 project. I&#8217;ll let everyone know in advance before I make changes.</p><p>The change should be fully automatic, including migrating donations made through the Substack interface as paid subscriptions. Hopefully I can migrate the read-aloud podcast feed URL automatically as well, but this will depend on how your podcast app is subscribed. I&#8217;ll try to figure it out and let you know. If anyone has any feedback on this change, <a href="mailto:contact@dansanderson.com">please let me know</a>. I know a couple of you are using the Substack app to read it, which should be the only case affected by a migration.</p><p>You can always find all issues of the Digest <a href="https://dansanderson.com/mega65/">on my website</a> and <a href="https://dansanderson.com/mega65/index.xml">subscribe to it using an RSS feed reader</a>. You can also <a href="https://ko-fi.com/dddaaannn">become a patron of the Digest at ko-fi.com/dddaaannn</a>.</p><h2>The art of disassembly</h2><p>A quick recap: A computer&#8217;s CPU performs instructions encoded as bytes in the computer&#8217;s memory. This machine code is difficult to work with as a list of numbers, so when we humans want to write a program, we use a programming language, and a tool that converts that language to machine code for the computer to execute. Assembly language is a human language that most closely resembles the machine code, with human-readable names for each machine code instruction. The corresponding conversion tool is called an assembler.</p><p>There&#8217;s a simple assembler built into the MEGA65&#8217;s machine language monitor. You can start the monitor by entering the <code>MONITOR</code> command at the READY prompt. Try doing this now, and use the <code>A</code> command to assemble this short program:</p><pre><code><code>MONITOR
A1600 LDA #$01
STA $D020
LDA #$00
STA $D021
RTS</code></code></pre><p>After the last line, press <strong>Return</strong> on a line by itself to stop the assembler.</p><p>As you type each line, the monitor converts the instruction to the corresponding machine code. It stores the machine code at the requested address in memory, and also prints the address and machine code bytes to the screen, as hexadecimal values.</p><pre><code><code>A 1600  A9 01     LDA  #$01
A 1602  8D 20 D0  STA  $D020
A 1605  A9 00     LDA  #$00
A 1607  8D 21 D0  STA  $D021
A 160A  60        RTS</code></code></pre><p>The monitor can also reverse this process, to show you which instructions are represented by bytes in memory. This process is known as <em>disassembly.</em> Use the <code>D</code> command followed by the address:</p><pre><code><code>D1600</code></code></pre><p>Sure enough, the program you just entered is right where you put it, at address $1600. There&#8217;s also a bunch of other stuff after the last instruction you typed starting at address $160B, maybe garbage data or something left behind by another program. These bytes may or may not represent machine code instructions, but the disassembler diligently tries to interpret them as instructions either way. These instructions are what the CPU <em>would</em> perform if you told it to treat that memory as code.</p><p>The number of bytes used to encode an instruction differs depending on the instruction. Some instructions, like <code>RTS</code>, are encoded as a single byte. Others, like <code>LDA #$01</code>, use two bytes. Still others such as <code>STA $D020</code> require three bytes. Anything trying to interpret bytes as machine code&#8212;whether that&#8217;s a disassembler or the CPU itself&#8212;needs to know the address of the first byte of the first instruction, or it could get very confused.</p><p>Try using the disassemble (<code>D</code>) command again, this time with a starting address of $1601:</p><pre><code><code>D1601</code></code></pre><p>The monitor tries to disassemble some of the memory of the program you entered, but the result looks nothing like the program. $1601 is the address of the second byte of the <code>LDA</code> instruction, $01, which to the disassembler (and the CPU) looks like a version of the <code>ORA</code> instruction that uses two bytes. At address $1603, the next byte $20 looks like a three-byte <code>JSR</code> instruction. Coincidentally, the next incorrect instruction gets the disassembler back on track, aligned with the correct first instruction byte at address $1607. But by now, a CPU trying to execute this code will get very lost, and probably crash.</p><p>Disassemblers are not magic, and they need help from the operator&#8212;that&#8217;s you&#8212;to convert machine code back into human-readable assembly language. The disassembly process requires research, maybe some guessing and checking, taking notes, and labeling addresses and values once you&#8217;ve figured out what they mean. A modern disassembly tool can make this process surprisingly easy.</p><h2>Introducing Ghidra</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nCaT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nCaT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 424w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 848w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 1272w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nCaT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png" width="547" height="370.80288461538464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:987,&quot;width&quot;:1456,&quot;resizeWidth&quot;:547,&quot;bytes&quot;:189819,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nCaT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 424w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 848w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 1272w, https://substackcdn.com/image/fetch/$s_!nCaT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bf878b-7a08-4fa9-89e1-7d50bdf711b7_1497x1015.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ghidra logo.</figcaption></figure></div><p><a href="https://ghidra-sre.org/">Ghidra</a> is a powerful disassembler and reverse engineering multi-tool. It supports many types of CPU machine code, including the 6502, and supports extensions to add more. Ghidra was originally developed by the United States National Security Agency (NSA), and has been released as open source and free of cost.</p><p>I want to credit two YouTube videos on the topic of using Ghidra for reverse engineering Commodore 64 programs: <a href="https://youtu.be/3wW1una5Pgg?si=48McDKRrIA6kfK1D">Introduction to Ghidra</a> by David Youd, and <a href="https://www.youtube.com/watch?v=xNFswb9CVkg">How to start a new C64 project in Ghidra</a> by Jarkko Lehti. These are worth watching when you get a chance, and we&#8217;ll be using Lehti&#8217;s configuration files in a moment.</p><h2>Setting up Ghidra</h2><p>As of this writing, the latest version of Ghidra is v11.2.1. It&#8217;s a Java-based application, and it requires a recent version of <a href="https://www.oracle.com/java/technologies/downloads/">the Java runtime</a> (21 or later), which you may need to install or upgrade. Ghidra will tell you if your Java is too old. Properly installed, Windows users can double-click on <code>ghidraRun.bat</code> to start the program, and macOS and Linux users invoke the <code>ghidraRun</code> shell script.</p><p>As usual, macOS will refuse to run the scripts and tools until you have blessed them in the Privacy &amp; Security panel. You probably know the drill by now. Attempt to start <code>ghidraRun</code>, dismiss the complaint, open macOS Settings: Privacy &amp; Security, scroll down, click Open Anyway. If you use Ghidra for other stuff later, you&#8217;ll need to similarly bless some internal components, which you can do in the Terminal app on the command line:</p><pre><code><code>xattr -cr ./Ghidra/Features/FileFormats/os/mac_arm_64/lzfse
xattr -cr ./Ghidra/Features/Decompiler/os/mac_arm_64/decompile
xattr -cr ./Ghidra/Features/Decompiler/os/mac_arm_64/sleigh
xattr -cr ./GPL/DemanglerGnu/os/mac_arm_64/demangler_gnu_v2_*</code></code></pre><p>When you run Ghidra for the first time, it will ask for the path to the Java home directory. This will depend on your operating system. On macOS using Java 23 from Oracle, the path is:</p><pre><code><code>/Library/Java/JavaVirtualMachines/jdk-23.jdk/Contents/Home</code></code></pre><p>Ghidra opens its main window, from which you create or select a project, and open tools.</p><h2>Creating the project</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YaRN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YaRN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 424w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 848w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 1272w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YaRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png" width="569" height="444.219298245614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/431289b0-db05-4926-a3af-4a715ceaa748_912x712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:712,&quot;width&quot;:912,&quot;resizeWidth&quot;:569,&quot;bytes&quot;:110341,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YaRN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 424w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 848w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 1272w, https://substackcdn.com/image/fetch/$s_!YaRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431289b0-db05-4926-a3af-4a715ceaa748_912x712.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ghidra's project window, with no active project.</figcaption></figure></div><p>Let&#8217;s start a new project using the <code>crossroads.prg</code> file that we extracted from the disk image in last month&#8217;s Digest.</p><p>Create a new project:</p><ol><li><p>Open the File menu, select New Project.</p></li><li><p>Select &#8220;Non-Shared Project,&#8221; click Next.</p></li><li><p>Create a new folder for the project, and select it. Enter a project name, such as &#8220;Crossroads.&#8221; Click Finish. The dialog window closes, and the project is created.</p></li></ol><p>Next, import the <code>crossroads.prg</code> file:</p><ol><li><p>Open the File menu, select Import File.</p></li><li><p>Navigate to the file <code>crossroads.prg</code>, then Select File To Import.</p></li><li><p>Leave the Format set to &#8220;Raw Binary.&#8221;</p></li><li><p>Click the <code>...</code> button next to Language. Select &#8220;6502,&#8221; which is at the top of the list for this version of Ghidra. Click OK.</p></li><li><p>Leave everything else at default settings, then click OK. Another window opens with some information about the file. Dismiss this with OK.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-jV5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-jV5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 424w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 848w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 1272w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-jV5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png" width="612" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:612,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73429,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-jV5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 424w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 848w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 1272w, https://substackcdn.com/image/fetch/$s_!-jV5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57f55ecb-becc-44f9-b542-5fa3ec01faf2_612x399.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Ghidra file import dialog.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l5_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l5_O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 424w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 848w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 1272w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l5_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png" width="597" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:597,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97133,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l5_O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 424w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 848w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 1272w, https://substackcdn.com/image/fetch/$s_!l5_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc93b509c-da3a-4801-8dc3-dd85c056a53a_597x473.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Ghidra language select dialog.</figcaption></figure></div><p>Finally, double-click on the <code>crossroads.prg</code> file in the project to open it in the CodeBrowser tool. The first time you do this, Ghidra will offer to analyze the file. Say Yes. Leave the default set of analyzers selected, then click Analyze. The analysis doesn&#8217;t produce spectacular results just yet, but it&#8217;s usually worth doing.</p><p>Here is <code>crossroads.prg</code> in all its glory, in the CodeBrowser window. These are the same bytes we saw in the hex dump, but now they&#8217;re listed one per line. We will use this interface to massage the data as we learn what each part of it means.</p><h2>Commenting the code</h2><p>Let&#8217;s start by telling Ghidra the C64 memory address where this data gets loaded. Because this is a PRG file, it begins with two bytes that are not loaded into memory. We could have gone through an extra step to remove these bytes before importing the data, but for our purposes, it&#8217;s enough to just take these into account when telling Ghidra where everything lives.</p><p>This data gets loaded into a single block of memory that starts at address $0801. Minus the two PRG header bytes, we can tell Ghidra to start counting addresses at $07FF:</p><ol><li><p>In the Window menu of the CodeBrowser window, select Memory Map. The Memory Map window opens, showing one &#8220;RAM&#8221; segment that starts at address <code>0000</code>.</p></li><li><p>Select the &#8220;RAM&#8221; line, then locate the button whose tooltip reads &#8220;Move a block to another address,&#8221; a blue arrow-cross icon.</p></li><li><p>For the New Start Address, type <code>07ff</code>. Click OK.</p></li><li><p>Close the Memory Map window.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PoZS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PoZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 424w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 848w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 1272w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PoZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png" width="250" height="84" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd308a77-29be-4faa-b058-2dbde140fea1_250x84.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:84,&quot;width&quot;:250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10635,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PoZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 424w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 848w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 1272w, https://substackcdn.com/image/fetch/$s_!PoZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd308a77-29be-4faa-b058-2dbde140fea1_250x84.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The Memory Map toolbar, with the blue cross button: Move a block to another address.</figcaption></figure></div><p>Notice that the data is now lined up with the memory addresses. The first byte of the BASIC bootstrap is at $0801, and the two-byte end-of-BASIC terminator is at $080B. (We peeked at this in <a href="https://dansanderson.com/mega65/crossroads-part-1/">the previous Digest</a>.)</p><p>Let&#8217;s add a comment describing this data. Right-click on the line for $0801 to open the context menu. Select Comments &gt; Set EOL Comment&#8230; In the window that opens, type a useful description, such as: &#8220;Start of BASIC bootstrap.&#8221; You may wish to add a similar comment on $080C, for &#8220;End of BASIC bootstrap.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vbTA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vbTA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 424w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 848w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 1272w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vbTA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png" width="748" height="319" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:319,&quot;width&quot;:748,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45369,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vbTA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 424w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 848w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 1272w, https://substackcdn.com/image/fetch/$s_!vbTA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801d45c-f418-4ca3-bf84-adc7a921bfb7_748x319.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The BASIC bootstrap of Crossroads, aligned and commented.</figcaption></figure></div><h2>Initiating disassembly</h2><p>The BASIC bootstrap uses the <code>SYS</code> command to invoke machine code starting at decimal address 2300. Ghidra even shows the &#8220;2300&#8221; characters next to the byte listing, guessing that we might be interested in what these look like as ASCII characters. In hexadecimal, this address is $08FC.</p><p>Navigate to this address in the byte listing. Here&#8217;s a quick way: press &#8220;G&#8221; (for &#8220;go&#8221;), then enter the address in hexadecimal (<code>08fc</code>).</p><p>Start the disassembly at this address: press &#8220;D&#8221; (for &#8220;disassemble&#8221;).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kR0m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kR0m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 424w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 848w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 1272w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kR0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png" width="736" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64789,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kR0m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 424w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 848w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 1272w, https://substackcdn.com/image/fetch/$s_!kR0m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e65cc86-bc5a-4e1e-ad6f-b93f9fc8e3ca_736x376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Our first disassembly, starting at $08fc.</figcaption></figure></div><p>Ghidra has just done a bunch of work for us! It took our word for it that the bytes starting at $08fc are machine code: $a9 $ff represent the <code>LDA #$ff</code> instruction, which Ghidra spells <code>LDA #0xff</code>, and updated the code listing accordingly. It proceeded to the next instruction, and kept going as long as it was reasonably certain that the CPU would treat those bytes as instructions as it executed.</p><p>Scroll down, and notice that Ghidra stopped disassembly at address $0cab, where it found an <code>RTS</code> instruction. The bytes starting at $0cac may be more CPU instructions, but Ghidra doesn&#8217;t know this for sure. In fact, we can see evidence that it may be data and not instructions: the bytes from $0cb1 to $0cba spell out &#8220;CROSSROADS&#8221; in ASCII. Ghidra doesn&#8217;t know this is more likely to be PETSCII and not ASCII, but it displays the ASCII letters for our benefit, just in case.</p><p>Keep scrolling, down to $0dc5. Ghidra found more code! Starting with the first address we gave it, Ghidra decoded each instruction, and when it found a branching instruction or subroutine call, it continued disassembly at that location, filling everything in. It assigned some temporary labels for things that look like functions, such as <code>FUN_0dc5</code>. As we try to understand what the program does, we can replace these labels with more intuitive names. In the end, we&#8217;ll have a fully human-readable assembly language program. (Or as human readable as assembly language gets, anyway.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Wx7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Wx7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 424w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 848w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 1272w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Wx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png" width="717" height="324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9033379e-c477-4889-9fb1-256d76982d01_717x324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:324,&quot;width&quot;:717,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50225,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Wx7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 424w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 848w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 1272w, https://substackcdn.com/image/fetch/$s_!-Wx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9033379e-c477-4889-9fb1-256d76982d01_717x324.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ghidra found what might be a function definition at $0dc5.</figcaption></figure></div><p>Ghidra made similar attempts to highlight data locations referenced in the code, assigning labels such as <code>DAT_08b0</code>. Everything referenced by something else is annotated with the cross references. For example, the byte at address $08b0 is read by an instruction at address $0a7a, so it lists <code>0a7a(R)</code> (&#8220;R&#8221; for &#8220;read&#8221;) next to $08b0.</p><p>We can add our own labels. Let&#8217;s do this for our entry point, $08fc:</p><ol><li><p>Press &#8220;G&#8221; for go. Enter <code>08fc</code>.</p></li><li><p>Press &#8220;L&#8221; for label. Enter a label name of <code>start</code>. Because this is the entry point of the program, select the &#8220;Entry Point&#8221; property. Click OK.</p></li></ol><h2>Importing C64 symbols</h2><p>Ghidra has invented labels for all of the data and code referenced by the disassembled code. The addresses within the imported data range have blue labels and cross references.</p><p>Where the code references an address not in the imported range, Ghidra also generated a label, and colored it red. Consider the first few instructions of the program, starting at $08fc:</p><pre><code><code>LDA #0xff
STA DAT_d40e
STA DAT_d40f</code></code></pre><p>This loads $ff into the accumulator, and stores that value to addresses $d40e and $d40f. If these were just memory locations, we would assume that these are variables used by the game for storing game state, like the player&#8217;s position. In this case, we can apply some knowledge of how the Commodore 64 works: addresses in the range $d000-$dfff are input-output registers that control, or are controlled by, the computer&#8217;s hardware. We can look up what these registers do in <a href="https://sta.c64.org/cbm64mem.html">a Commodore 64 technical reference</a>.</p><p>In this case, these registers belong to the SID sound chip, specifically the frequency of the oscillator on voice #3. We don&#8217;t yet know why the program does this, but we do know that&#8217;s what it does. The next two instructions and a bit more knowledge of C64 programming gives us a hint:</p><pre><code><code>LDA #0x80
STA DAT_d412</code></code></pre><p>The technical reference says $d412 is the SID voice #3 control register. Setting bit 7 like this tells it to use the &#8220;noise&#8221; waveform. <em>Crossroads</em> is certainly a noisy game, but it&#8217;s probably setting this up to use as a random number generator, or at least a seed for one. We&#8217;ll have to keep our eye out for something that samples a value from voice #3.</p><p>Now that we&#8217;ve identified <code>DAT_d40e</code> et al., we could update the labels to something that describes their functions. To do this, you would right-click on the label and select Edit Label&#8230; (or move the cursor onto the label and press &#8220;L&#8221;).</p><p>Considering that the C64 I/O registers always do the same thing in every program, it would be nice if Ghidra could automatically recognize all of them and give them useful names. The following is one way to do this, based on <a href="https://voidhole.com/~grue/ghidra/c64_symbols/">the files supplied by Jarkko Lehti</a> to accompany <a href="https://www.youtube.com/watch?v=xNFswb9CVkg">his YouTube video</a> on the subject.</p><p>Download these C64 symbol files:</p><ul><li><p><a href="https://dansanderson.com/mega65/crossroads-part-2/IO.txt">IO.txt</a>: the I/O registers</p></li><li><p><a href="https://dansanderson.com/mega65/crossroads-part-2/KERNAL.txt">KERNAL.txt</a>: the KERNAL jump table subroutines</p></li><li><p><a href="https://dansanderson.com/mega65/crossroads-part-2/RAM.txt">RAM.txt</a>: commonly used C64 internal KERNAL variables</p></li><li><p><a href="https://dansanderson.com/mega65/crossroads-part-2/IO_d000.bin">IO_d000.bin</a>: a binary snapshot of the initial values of C64 I/O registers</p></li><li><p><a href="https://dansanderson.com/mega65/crossroads-part-2/kernal_e000.bin">kernal_e000.bin</a>: a binary snapshot of the C64 KERNAL</p></li></ul><p>The <code>.txt</code> files tell Ghidra to apply certain labels to certain addresses when they appear in the code. The <code>.bin</code> files fill in the memory ranges themselves in the Ghidra project, so you can get some idea of what&#8217;s actually there in the C64&#8217;s memory.</p><p>In your project, the <code>IO</code> and <code>KERNAL</code> data will exist as <em>overlays</em>. An overlay is a portion of memory that may contain different things at different times, based on system state. With the Commodore 64, I/O registers and KERNAL ROM occupy addresses that can also refer to RAM, based on the memory banking register. Ghidra can only see that an instruction accesses an address, not the memory map of the computer at the time the instruction is called. Telling Ghidra that these memory regions are overlays accounts for the possibility that a given reference to an address may refer either to I/O and ROM, or the underlying RAM.</p><p>To create the <code>IO</code> overlay:</p><ol><li><p>From the CodeBrowser window, open the File menu, Add To Program&#8230;</p></li><li><p>Select <code>IO_d000.bin</code>, click Add To Program.</p></li><li><p>In the Add To Program dialog, click Options&#8230; Select Overlay, use a Block Name of <code>IO</code>, and set the Base Address to <code>d000</code>. Click OK in the Options dialog, then click OK in the Add To Program dialog. Dismiss the Import Results window.</p></li></ol><p>To create the <code>KERNAL</code> overlay, repeat these steps with the <code>kernal_e000.bin</code> file, using a Block Name of <code>KERNAL</code> and a Base Address of <code>e000</code>.</p><p>Now we can import the symbols that describe addresses in these regions. Ghidra is a highly scriptable application environment, and we can use a script that comes with Ghidra to import the <code>.txt</code> symbols files.</p><p>To import the symbols:</p><ol><li><p>From the Window menu, select Script Manager.</p></li><li><p>Scroll down to find <code>ImportSymbolsScript.py</code>. Double-click it to run it.</p></li><li><p>When prompted, select the <code>IO.txt</code> file. Click &#8220;Go baby go!&#8221;</p></li><li><p>Repeat these steps for the <code>KERNAL.txt</code> file, and again for the <code>RAM.txt</code> file.</p></li></ol><p>Ghidra now knows about the I/O registers via an overlay with sensibly named symbols. Ghidra still doesn&#8217;t know which references refer to RAM and which refer to I/O. We have to tell it.</p><p>Go (&#8220;G&#8221;) back to the <code>STA</code> instruction at $08fe. Its destination is still the red symbol <code>DAT_d40e</code>. Click on it, then press &#8220;R&#8221; to edit the reference. In the pop-up window, double-click the reference, then change the dropdown menu that says &#8220;RAM:&#8221; to &#8220;IO:&#8221;. Click Update, and close the reference editor. The symbol has changed to <code>D40E_FRQ_3_LO</code>. That&#8217;s&#8230; better.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UbVn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UbVn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 424w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 848w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 1272w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UbVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png" width="399" height="208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:208,&quot;width&quot;:399,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UbVn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 424w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 848w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 1272w, https://substackcdn.com/image/fetch/$s_!UbVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5fbcf5d-f227-4e67-ac23-338e3e84d329_399x208.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Code near the entry point with I/O registers labeled.</figcaption></figure></div><p>It&#8217;s unusual for a C64 game to un-bank the I/O registers, so it&#8217;s a little inconvenient that each label needs to be applied like this. I haven&#8217;t found a good way to automatically declare all references to be for the <code>IO</code> overlay. One possibility might be to add <code>IO_d000.bin</code> as a non-overlay region, then edit the <code>IO.txt</code> symbols file to remove the <code>IO::</code> part of each address. For now, I like keeping <code>IO</code> as an overlay, because it accurately describes how the C64 works.</p><p>I did find a reasonably fast way to update all of the labels manually using Ghidra&#8217;s search feature. In the Search menu, select Program Text&#8230; Prepare a search for <code>DAT_d</code> in All Fields of the Listing Display, and click Search All. A window opens with the search results, and clicking on a result causes the Listing display to jump to that location. I got 38 results, and it only took me a few minutes to update all of the references to use the <code>IO</code> labels. It&#8217;s not the most fun I&#8217;ve ever had with a computer, but it didn&#8217;t take so long that I regretted not automating it.</p><h2>Getting some answers</h2><p>Now that we have at least some idea of what we&#8217;re looking at, let&#8217;s try to answer a few questions that will help us understand how <em>Crossroads</em> works. These are just questions that occurred to me, in the order I thought to ask them. They may not be the best questions, or in the best order. But let&#8217;s see what happens.</p><h3>Does the program call the KERNAL jump table?</h3><p>This is an easy one. A call to the KERNAL jump table would look like a <code>JSR</code> to a hexadecimal address beginning with an <code>f</code>. Ghidra will have generated a label like <code>FUN_ffd2</code> prior to me updating it to use the <code>KERNAL</code> overlay&#8217;s symbols, so just like we used a search of <code>DAT_d</code> to find I/O register references, we can search for <code>FUN_f</code> to find calls to KERNAL routines. I get no results from this search, so I&#8217;m fairly confident that <em>Crossroads</em> does not call KERNAL routines. Alas, we don&#8217;t get to use our <code>KERNAL</code> overlay. Maybe next time.</p><h3>Does the program use KERNAL vectors?</h3><p>As we&#8217;ve discussed in previous issues of the Digest, most games drive their game loop using <a href="https://dansanderson.com/mega65/racing-the-beam/">CPU interrupts</a>. There are two ways to set up an interrupt handler: replace the KERNAL&#8217;s interrupt handlers in $fffa-$ffff, or use a <a href="https://dansanderson.com/mega65/kernal-of-truth/">KERNAL vector</a> to add a custom subroutine to the KERNAL&#8217;s interrupt handler. Let&#8217;s check the latter option first, because it&#8217;s more common for simple C64 games.</p><p>The designers of the Commodore ROM wanted people to use the VECTOR KERNAL call to read and update the KERNAL vector table, and that&#8217;s still a best practice for MEGA65 programs. Even early on, C64 programmers skipped over that part of the manual, and just wrote to the C64 vector table at $0314-$0333. We can search for the string <code>0314</code> to find any direct references to the IRQ vector.</p><p>Yup, there it is. The instructions at $0ba8-$0bb1 are writing address $11c4 to the KERNAL IRQ vector $0314-$0315.</p><pre><code><code>LDA #0xc4
STA 0314_IRQ_VECTOR_LO
LDA #0x11
STA 0315_IRQ_VECTOR_HI</code></code></pre><p>This appears to be the only vector touched, and it is only set in this one location in the code that Ghidra has disassembled. Let&#8217;s go to the address being written to the vector and check it out: &#8220;G&#8221;, then <code>11c4</code>.</p><p>Hoo boy, Ghidra hasn&#8217;t disassembled this yet! This is because the main routine, which sets up the game and installs the IRQ vector, doesn&#8217;t actually call the IRQ handler directly. We have a bit more work to do. Press &#8220;D&#8221; to start disassembly from this address. Also, press &#8220;L&#8221; to add an entry point label, with a name such as <code>irq</code>.</p><p>We&#8217;ll have to re-do our searches for I/O register labels and KERNAL calls now that we have more disassembled code. That&#8217;s just how it goes. I found 8 more I/O registers, but still no KERNAL calls.</p><h3>Does the program do any C64 CPU bank switching?</h3><p>I mentioned that most games leave I/O registers banked to $d000-$dfff, the initial state of the C64. We can double-check that by looking for references to <a href="https://www.c64-wiki.com/wiki/Bank_Switching">the C64 bank switching register</a>, address $0001.</p><p>A search for <code>DAT_0001</code> does produce two results in the start-up routine, so it&#8217;s worth taking a closer look. Starting at address $09f9, the routine sets this to $73, or binary %01110011. According to C64 technical documentation, this setting makes sure the C64 character ROM&#8212;the graphics data for the PETSCII font&#8212;is visible at $d000-$dfff instead of the I/O registers. It&#8217;s not that way for long, though. Just below, at address $0a10, the banking register gets set to $77, or binary %01110111, which switches the I/O registers back in.</p><p>While the character ROM is visible, a short loop copies the first 472 bytes of PETSCII graphics data to address $2000.</p><pre><code><code>&#9;LDX #0x0
LAB_09ff:
&#9;LDA DAT_d000,X
&#9;STA 0x2000,X
&#9;LDA DAT_d0ec,X
&#9;STA 0x20ec,X
&#9;INX
&#9;CPX #0xec
&#9;BNE LAB_09ff</code></code></pre><p>Now that we know what this does, we can rename the <code>LAB_09ff</code> label to something like <code>copy_char_loop</code>, and add explanatory comments to the bank switching instructions. We can also relabel <code>DAT_0001</code> while we&#8217;re at it.</p><h3>Does the program use any self-modifying code?</h3><p>From our perspective as reverse engineers, one of the scariest things a program can do is modify its own code. The program is entirely within its right to do this&#8212;code is just data in memory&#8212;but it means that the disassembler may not be seeing the code in the form it is executed.</p><p>To find places where the program might be modifying itself, we have to look for attempts to store values in locations that Ghidra believes are inside subroutine code. I bet there&#8217;s a way to get Ghidra to make a list of such places, but I haven&#8217;t found one yet. I did notice, however, that Ghidra refers to such addresses by the name of the function, plus an offset, like this example near the entry point:</p><pre><code><code>LDA #0x0
STA FUN_0b4a+1
LDA #0x28
STA FUN_0b4a+2</code></code></pre><p>These address expressions appear in a grey color. From visual inspection, I found only a few examples of this. Thankfully, they were all short subroutines that were easy to understand, and all of the self-modifications were to addresses for <code>LDA</code> and <code>STA</code> instructions.</p><p>Several of these appear to be simple utility functions for using addresses from variables together with indirect addressing. For example, <code>FUN_0b4a</code> is simply the <code>STA</code> instruction in absolute Y-indexed addressing mode, followed by an <code>RTS</code>. To use this routine, the program writes an address into the <code>STA</code> instruction, sets the A and Y CPU registers, then calls the subroutine:</p><pre><code><code>FUN_0b4a
  STA 0x0000,Y
  RTS</code></code></pre><p>This probably saved the developer some headache, using a single self-modifying mechanism instead of having every subroutine modify its own instructions. The initialization routine near the entry point uses this mechanism as part of a loop to fill some memory with zeroes.</p><h3>Is there any more code?</h3><p>We found the entry point and the IRQ vector routine, and we identified self-modifying code and confirmed that it&#8217;s not doing something crazy like dynamically writing <code>JMP</code> instructions to memory at run time. It looks like Ghidra has found most of the code in the program. Are we safe to conclude that the remaining unidentified regions are static data, or perhaps initialized variable space?</p><p>This requires a bit of judgement, a bit of guesswork, and a willingness to change our minds later, but we can start to form some conclusions from a visual inspection of Ghidra&#8217;s analysis. Here&#8217;s what I see so far:</p><ul><li><p>$080d-$08fb: I see some repeating numeric patterns that are unlikely to be instructions. Ghidra found cross-references into this memory starting at $08b0, and they&#8217;re all read-only references from the initialization routine. The program must refer to some of this data with dynamically calculated addresses that Ghidra can&#8217;t see. It&#8217;s not conclusive, but with no obvious writes to this memory, this is probably static data, such as graphics patterns.</p></li><li><p>$0cac-$0dc4: Ghidra is displaying obvious patterns in the ASCII decoding that match text displayed on the game&#8217;s screen, with strings such as &#8220;CROSSROADS&#8221; and &#8220;1PLAYER,&#8221; and many space characters ($20). There are only a few explicit read-only references. This is probably character data for the static parts of the display.</p></li><li><p>$0f65-$11c3 and $15fe-$1693: These are less obvious to me just from staring at them. Some of it is clearly data, but I don&#8217;t yet know how to interpret patches of it. Once again, there are no explicit instructions writing to these areas.</p></li></ul><p>For now at least, I feel confident that these regions are static data and not code, and that Ghidra has found all of the code in the program.</p><h3>What&#8217;s in the data?</h3><p>We can learn more about the suspected data regions by double-clicking on the cross-references and digging around the code that refers to them. We can also make some guesses about how the data is encoded, and try to decode it to see if we recognize any patterns, similar to how we identified text strings with Ghidra&#8217;s built-in ASCII decoding.</p><p>I&#8217;m especially interested to find the character graphics data that gives <em>Crossroads</em> its special flair. This is likely to take the form of monochrome character pixel data, where each byte represents a row of 8 pixels, and consecutive bytes are stacked, usually in a square of 8 rows. If we visualized the bytes in suspicious data regions this way, would the <em>Crossroads</em> cast of characters jump out at us?</p><p>Ghidra has extensive features for visualizing data structures. Once we have a guess as to how data should be interpreted, we can paint data types onto the bytes and see if they make sense. For example, to visualize a byte as a binary number:</p><ol><li><p>Locate address $080f. The byte value is $44. Ghidra doesn&#8217;t know how to interpret this, so it displays a type of <code>??</code>, its hex value, and its ASCII value.</p></li><li><p>Right-click on it to open the context menu, navigate to Data, and select the <code>byte</code> type. Ghidra updates <code>??</code> to <code>db</code>.</p></li><li><p>Right-click again, navigate to Data, and now select the Settings&#8230; option that has appeared now that the value has a type. Change Format to &#8220;binary&#8221; and Padding to &#8220;padded.&#8221; Click OK. Ghidra updates the visualization to a padded binary value: <code>01000100b</code>.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xlaB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xlaB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 424w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 848w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 1272w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xlaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png" width="536" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66472,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xlaB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 424w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 848w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 1272w, https://substackcdn.com/image/fetch/$s_!xlaB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cbfb910-521b-491f-bec2-daa0c40b4549_536x356.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Data Settings dialog, as it appears on macOS.</figcaption></figure></div><p>Let&#8217;s try this for a chunk of the data region $080d-$08f9. (We can always undo it later.) Click-drag with the mouse, or move the cursor to the first line and hold Shift while cursoring down, to select lines. Use the Data context menu to make them all bytes displayed as padded binary.</p><pre><code><code>083d ff    db    11111111b    ; ########
083e 8f    db    10001111b    ; #   ####
083f ff    db    11111111b    ; ########
0840 3c    db    00111100b    ;   ####
0841 7e    db    01111110b    ;  ######
0842 7e    db    01111110b    ;  ######
0843 ee    db    11101110b    ; ### ###
0844 87    db    10000111b    ; #    ###
</code></code></pre><p>It&#8217;s a little difficult to make out when displayed as 0&#8217;s and 1&#8217;s, but I see some familiar faces. Going eight bytes at a time, I see two frames of animation for each of an enemy missile ($080d), a bullet ($081d), the Human/player ($082d), the Purple Rubberhead ($083d), and more. I have to squint to see the rest, but if each of the nine enemies gets 16 bytes starting at $083d, it feels safe to say these are graphics tiles up to at least $08cd.</p><h3>How does the program set up character graphics data?</h3><p>We have a rough idea that the game keeps its graphics assets starting at $080d, and establishes its custom character font at $2000 with some combination of this data and PETSCII characters from character ROM. We&#8217;ve already found where the set-up routine ($08fc) copies the character ROM to $2000. What else does it do?</p><p>It&#8217;s relatively easy to see that a big chunk of the set-up routine is messing around in the $2000 memory region. Starting from the beginning, it sets a few registers, then immediately dives into the work of rendering the character data, with various loops and <code>STA</code> instructions indexing into this memory.</p><p>The characters of <em>Crossroads</em> walk in four directions, with two frames of animation. We only found two frames of animation in the graphics data, with the characters facing to the right. Can you guess where it gets the graphics for the other three directions?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C0df!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C0df!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 424w, https://substackcdn.com/image/fetch/$s_!C0df!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 848w, https://substackcdn.com/image/fetch/$s_!C0df!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 1272w, https://substackcdn.com/image/fetch/$s_!C0df!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C0df!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png" width="570" height="80" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:80,&quot;width&quot;:570,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C0df!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 424w, https://substackcdn.com/image/fetch/$s_!C0df!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 848w, https://substackcdn.com/image/fetch/$s_!C0df!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 1272w, https://substackcdn.com/image/fetch/$s_!C0df!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffafb9cbb-6b6a-4f22-acd9-29e03af1407b_570x80.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The Purple Rubberhead character set, rendered from two 8x8 frames.</figcaption></figure></div><p>To achieve the full effect, the set-up loop takes the 8x8 right-facing creature graphics and writes it into character graphics memory. Then it flips each byte horizontally and writes the left-facing copy. Then it rotates it 90 degrees one way for up-facing, and 90 degrees the other way for down-facing.</p><p>Moreover, the second step of each character&#8217;s animation is drawn across <em>two</em> character tiles, for that slick grid-breaking animation. The creature takes up two characters on the 40x25 screen for this half step, and no other creature or item is allowed in either tile at this moment. The set-up routine renders these half-steps dynamically from the 8x8 pixel data, using bit shifting instructions to produce half-tile images. I see groups of four bit shifting instructions at $0a5d and $0a6d that might be involved in this process.</p><p>Just after setting up the character data at $2000, the program sets VIC register $d018 to $18. This establishes how the VIC uses memory, and indeed, it sets the character memory pointer to $2000. It also sets the screen memory location to $0400. The VIC-II can only see 16 KB of the address space at a time, and which 16 KB is selected by a register at $dd00. <em>Crossroads</em> does not appear to change this register from its default setting.</p><h2>Future possibilities with Ghidra</h2><p>That&#8217;s a good start, and plenty for a single newsletter. Ghidra is a very powerful tool and I&#8217;m still learning about all it can do.</p><p>Ghidra is highly extensible, and there is substantial potential for extensions and scripts to support C64 and MEGA65 development and reverse engineering. In <a href="https://www.youtube.com/watch?v=xNFswb9CVkg">his video</a>, Jarkko Lehti is using <a href="https://github.com/grue74/ghidra-c64helpers">his own Ghidra fork</a> with a few nice features such as PETSCII string visualization.</p><p>When I was squinting at the character set data, I was wishing for a bit of tool support for visualizing bitfields as graphics, much like how Retro Debugger lets you view memory contents in different ways. I wonder if Ghidra can do custom inline data visualizers like this, or if a feature like this is already available.</p><p>The annotated disassembly can be exported in multiple formats, but none of them resemble something that could be re-assembled by a tool such as Acme assembler. A custom export tool or post-processing script would be handy for that, and would be easy to write.</p><p>Of course, the thought naturally occurs to someday use Ghidra to disassemble MEGA65 machine code programs. It&#8217;d take some effort, but it is possible to write an extension to provide 45GS02 CPU support to the disassembler. Ghidra has an entire language for specifying new processors called <a href="https://spinsel.dev/assets/2020-06-17-ghidra-brainfuck-processor-1/ghidra_docs/language_spec/html/sleigh.html">SLEIGH</a>.</p><p>It&#8217;d also be good to generate symbols files and overlays for all of the MEGA65&#8217;s I/O register personalities. <a href="https://github.com/dansanderson/mega65-symbols">I already have symbol generator scripts</a> that could be tweaked to produce something that Ghidra can import.</p><p>In practice, most MEGA65 machine code programs that exist today have friendly authors that have open sourced their code. It&#8217;s still fun to think about.</p><div><hr></div><p>I chose <em>Crossroads</em> for this demonstration for a few reasons. For one, it really was one of my favorite games, so I was excited to play with it. But also, I had a suspicion that its internals were straightforward enough to understand through disassembly. As fast and seamless as <em>Crossroads</em> is to play, you only need to know a few things about C64 programming to start to make guesses about how it works just from looking at it.</p><p>Many C64 games and demos use data compression techniques to limit disk space and loading times. This can make disassembly more difficult, because you can&#8217;t just load the PRG into Ghidra directly. One possible technique is to run the program in Retro Debugger, let it decompress everything into memory, then take a snapshot of the memory of the running program. You can then apply disassembly techniques to the snapshot. I suspected that <em>Crossroads</em> did not use compression for code, and felt comfortable just loading the PRG file directly into Ghidra.</p><p>If you&#8217;re interested in writing programs for the MEGA65, it&#8217;s worth studying C64 programs. The Commodore 65 was designed as a true technological successor to the C64, and many C64 programming techniques apply to C65 and MEGA65 programs. The original source code for many C64 programs have been lost to time, but we can use tools like Retro Debugger and Ghidra to pull them apart and reconstruct their secrets.</p><p>There&#8217;s one more tool that we can use to reverse engineer C64 programs&#8212;and it&#8217;s sitting right beside you. The MEGA65 can run many C64 programs in its GO64 mode, and you can use the MEGA65 core&#8217;s serial debugger, along with a powerful frontend like <a href="https://github.com/MEGA65/m65dbg">m65dbg</a>, to analyze a running program. We&#8217;ll have to revisit this in a future Digest.</p><p>Onward into the new year!</p><p>&#8212; Dan</p>]]></content:encoded></item><item><title><![CDATA[Santa's Souped-Up MEGA65]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for December 2024]]></description><link>https://m65digest.substack.com/p/santas-souped-up-mega65</link><guid isPermaLink="false">https://m65digest.substack.com/p/santas-souped-up-mega65</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Fri, 13 Dec 2024 00:51:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6UD2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Dan&#8217;s MEGA65 Digest has moved! To subscribe, please visit: <a href="https://dansanderson.com/mega65/">https://dansanderson.com/mega65/</a></strong></em></p><div><hr></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B3WK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B3WK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 424w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 848w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 1272w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B3WK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png" width="296" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:296,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28784,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B3WK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 424w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 848w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 1272w, https://substackcdn.com/image/fetch/$s_!B3WK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40c52dd3-b8a0-46e8-8d0e-93e7f48a9d04_296x374.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Santa's Xmas Caper (1990) for the Commodore 64, by Zeppelin Games.</figcaption></figure></div><p>Hey everyone! I hope you&#8217;re all ready for some end-of-the-year relaxation, maybe some time off work, spent with family, in whatever temperature extreme you&#8217;re experiencing in your hemisphere. I also hope you&#8217;ll get some time to play with your MEGA65, because you&#8217;re gonna need it!</p><p>There are so many project announcements this month that I&#8217;ve decided to dedicate this entire issue to new downloads, to celebrate everyone&#8217;s talent and enthusiasm, and to give thanks for our wonderful community. We will finish our <em>Crossroads</em> disassembly project in January.</p><h2>SidPlay65</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6UD2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6UD2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 424w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 848w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 1272w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6UD2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png" width="540" height="341.16279069767444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:1032,&quot;resizeWidth&quot;:540,&quot;bytes&quot;:245553,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6UD2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 424w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 848w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 1272w, https://substackcdn.com/image/fetch/$s_!6UD2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff21f7500-c4f8-4185-bf31-023e92f1f494_1032x652.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">SidPlay65 by LightTangent.</figcaption></figure></div><p>There&#8217;s a new way to make music with your MEGA65, thanks to MEGA65 developer LightTangent! <a href="https://files.mega65.org/?id=04708d59-c6d0-4319-9728-b0dba44a878a">SidPlay65</a> is a MEGA65 program that re-implements the <a href="https://sidplayer.org/">SIDPlayer music system</a> from Compute! Publishing. It plays single-SID and dual-SID songs, and supports some advanced SIDPlayer format features like colorful PETSCII banner displays and karaoke lyrics.</p><p>SIDPlayer was one of several major tentpole products for the Commodore 64 from Compute!, along with <em>Crossroads</em> and the hit word processing package <em>SpeedScript</em>. The initial version of SIDPlayer appeared as a type-in in the book <em><a href="https://archive.org/details/All_About_the_Commodore_64_Volume_Two_1985_COMPUTE_Publications">All About the Commodore 64, Volume Two</a></em> by Craig Chamberlain. It included rudimentary music editing software, and a player routine that could be embedded in your BASIC or machine language programs. Chamberlain revised the system and published the Enhanced SIDPlayer in the book <em><a href="https://archive.org/details/Computes_Music_System_for_the_Commodore_128_and_64">COMPUTE!&#8217;s Music System for the Commodore 128 &amp; 64</a></em>, this time with a companion floppy disk instead of type-in code.</p><p>The SIDPlayer system was a huge hit in the United States, and C64 owners produced thousands of songs and shared them on online services like <a href="https://en.wikipedia.org/wiki/Delphi_(online_service)">Delphi</a> and <a href="https://en.wikipedia.org/wiki/Quantum_Link">Quantum Link</a>. Some SIDPlayer songs were written to be played on two SID chips simultaneously for a total of six simultaneous voices, made possible by either having two C64s, hacking a C64 to add a second SID chip, or using the <em>SID Symphony Stereo Cartridge</em> from Dr. Evil Laboratories. Today, this legacy lives on in the <a href="https://www.c64music.co.uk/">Compute!&#8217;s Gazette SID Collection</a> (CGSC). You can download the whole set to play on your C64 or MEGA65, or browse and play the collection in a web browser with the website <a href="https://deepsid.chordian.net/">DeepSID</a>.</p><p>LightTangent <a href="https://gitlab.com/fptech/rev-sidplayer">disassembled the original SIDPlayer program</a>, and used the findings to write SidPlay65. Many thanks to LightTangent for this ambitious project!</p><h2>Full-color full-motion video demos by MirageBD</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rQXI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rQXI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rQXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg" width="472" height="295" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:320,&quot;resizeWidth&quot;:472,&quot;bytes&quot;:77066,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rQXI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rQXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a7bef2-5c7d-4454-b0db-6e6aacae6c86_320x200.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">HyperBallad by Bjork, as rendered on the MEGA65 by MirageBD.</figcaption></figure></div><p>MirageBD has been researching methods for streaming full-color full-motion video from the SD card. So far, Mirage has produced two brilliant demos: <a href="https://files.mega65.org/?id=1b20b366-9177-4739-8420-c74f911a7202">HyperBallad</a>, the Bj&#246;rk music video masterpiece (1995), and <a href="https://files.mega65.org/?id=44fbe834-7f60-4134-956b-a2feff3eee34">Duel</a>, a scene from the movie <em><a href="https://www.imdb.com/title/tt0087197/">Electric Dreams</a></em> (1984). Both demos launch from a D81 disk image, and stream data directly from a large file on the SD card.</p><p><strong>Important note:</strong> Running these demos requires a fast SD card, very likely an SD card <em>faster</em> than the one that was included with your MEGA65. As lydon explained on Discord, the bundled cards are optimized for a longer lifespan, at the expense of some speed. If these demos glitch out after the first couple of seconds, consider getting a SanDisk Ultra brand microSD card.</p><h2>COPA65 by Bananzi</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WvRl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WvRl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 424w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 848w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WvRl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png" width="557" height="426.2755102040816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:784,&quot;resizeWidth&quot;:557,&quot;bytes&quot;:589580,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WvRl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 424w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 848w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WvRl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F546abbe5-08ad-4a67-8662-63d17f8917a0_784x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">COPA65 by Bananzi. (Image from the manual.)</figcaption></figure></div><p>Ever wanted to copy and paste text in the MEGA65 screen editor? Now you can, with this clever extension by Bananzi! <a href="https://files.mega65.org/?id=d9a62fc3-6881-4116-b7f1-66110ded147a">COPA65</a> adds a text clipboard to the built-in editor experience, as well as both keyboard and mouse methods for selecting text.</p><p>With COPA65 installed, simply press <strong>Ctrl</strong> + <strong>C</strong> to wake it up, then press one of the command keys. For example, use the <code>C</code> command (press <strong>Ctrl</strong> + <strong>C</strong>, then press <strong>C</strong>) to set the start of a selection, move the cursor to the end of the selection, then use the <code>C</code> command again to copy the text. Finally, move the cursor to where you wish to paste, then use the <code>V</code> command.</p><p>Other commands can quickly select characters, words, and lines, and can insert pasted text instead of overwriting. See the detailed manual included with the download for instructions on installation and use.</p><p>COPA65 requires ROM beta version 920398 or later, which is when we formalized the extension mechanism being used. This is newer than the ROM included in release package v0.96. You can <a href="https://files.mega65.org/?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">update to the latest ROM beta version</a>, or wait for the v0.97 release package, which hopefully will be out soon.</p><p>Really amazing work, Bananzi!</p><h2>Midnight Mega by nobruinfo</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vhc9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vhc9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 424w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 848w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 1272w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vhc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png" width="554" height="369.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:720,&quot;resizeWidth&quot;:554,&quot;bytes&quot;:12631,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vhc9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 424w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 848w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 1272w, https://substackcdn.com/image/fetch/$s_!vhc9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F603f37d6-6784-404e-a6ce-9825e3d91b94_720x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Midnight Mega by nobruinfo.</figcaption></figure></div><p>Bruno (nobruinfo on Discord) has been working on a powerful file browser, which he calls <a href="https://files.mega65.org/?id=f3cc7335-48ad-4099-ae99-d870e5dfc156">Midnight Mega</a>. You can use Midnight Mega to browse your SD card, mount disk images, and view and copy files.</p><p>Midnight Mega is still in a beta testing release, and it is recommended to back up your data regularly. Please <a href="https://github.com/nobruinfo/midnightmega/issues">report any issues you find</a>, and join the discussion on the <code>#midnight-mega</code> channel of the MEGA65 Discord. Also note that it only supports disk images and the internal floppy drive; it does not yet support external IEC drives.</p><h2>Gurce disassembles Sea Wolf</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EhDf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EhDf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 424w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 848w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 1272w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EhDf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png" width="564" height="461.45454545454544" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6b70f98-0357-411e-aec0-dda673816356_704x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:704,&quot;resizeWidth&quot;:564,&quot;bytes&quot;:70446,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EhDf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 424w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 848w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 1272w, https://substackcdn.com/image/fetch/$s_!EhDf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6b70f98-0357-411e-aec0-dda673816356_704x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Gurce&#8217;s version of Sea Wolf for the Commodore 64, modified to support four players.</figcaption></figure></div><p>My series on disassembling <em>Crossroads</em> is directly inspired by Gurce, who recently disassembled another classic C64 game, <em><a href="https://en.wikipedia.org/wiki/Sea_Wolf_(video_game)">Sea Wolf</a></em>. In this submarine battle game, you (and an optional second player) use paddle controls to maneuver submarines to fire missiles at battleships. The game&#8217;s lineage goes all the way back to the electro-mechanical arcade game <em><a href="https://en.wikipedia.org/wiki/Periscope_(arcade_game)">Periscope</a></em> by Sega (1966), followed by a similar electro-mechanical version by Midway called <em>Sea Devil</em>. Midway launched a video arcade version under the name <em>Sea Wolf</em> in 1976. Commodore International produced a home version for the VIC-20 and C64 in 1982.</p><p>Gurce made two videos about his disassembly project. <a href="https://www.youtube.com/watch?v=WwZNy4HIL0k">Part 1</a> introduces the game and the project, and presents a few findings. The extended <a href="https://youtu.be/2CkLBIRiCV0?si=iKYhKNXchjm1WT4E">part 2</a> presents the entire project, with live demos and slides. You can read <a href="https://github.com/gurcei/petwolf/blob/main/SEA%20WOLF%20DISASSEMBLY.txt">Gurce&#8217;s complete notes</a> and <a href="https://github.com/gurcei/petwolf/blob/main/seawolf.asm">the final disassembly</a> on Github. With disassembly in hand, Gurce was able to modify the game to support four players, with two paddles on each of the two joystick ports.</p><p>Disassembling classic games is a great way to learn about programming for the C64 and the MEGA65. What game would you disassemble?</p><h2>Featured Files Cornucopia!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9ly0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9ly0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 424w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 848w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 1272w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9ly0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png" width="568" height="388.15934065934067" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:995,&quot;width&quot;:1456,&quot;resizeWidth&quot;:568,&quot;bytes&quot;:469108,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9ly0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 424w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 848w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 1272w, https://substackcdn.com/image/fetch/$s_!9ly0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd28b1e6-950e-4cd8-9fc7-c8188fdf33ff_2152x1470.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Stargate (1981).</figcaption></figure></div><p>muse has given us another arcade core! <a href="https://files.mega65.org/?id=fb977a9b-3979-4420-99f2-c683f52070b7">Stargate</a> is the 1981 sequel to the arcade classic <em>Defender</em>, a fast-paced horizontal shooter. As with other arcade cores, you will need to search for ROM data files and follow <a href="https://github.com/sho3string/StargateMEGA65_R3_R6">the installation instructions</a>. The core is available for both R3 and R6 mainboards.</p><p><a href="https://files.mega65.org/?id=e824b00d-706b-4d1c-a5e9-3ffd94e326cb">Fireplace</a> is a short BASIC demo by Urban Lindeskog, featuring PETSCII flames and crackling sound effects. Drag your MEGA65 out to the living room and run this for the holidays to keep your family warm.</p><p>RobH developed an <a href="https://files.mega65.org/?id=1775e66c-d8b5-4af4-9c00-4ca03a6e681e">example of sprite to character collision detection</a> in BASIC, then followed up with <a href="https://files.mega65.org/?id=f52f6ecf-3ad3-463b-87c4-77423b26b03b">a Lode Runner-like ladder climbing demo</a>. These demos show off how to implement several game mechanics with this technique, including a player sprite, walls, collectibles, ladders, and doors. Both include well-commented BASIC source code.</p><p><a href="https://files.mega65.org/?id=99494f19-0605-4e52-96a3-20fad28e221e">Alpha Burst</a> is a brief graphics-only demo by Drex, with brilliant colors and a borderless display. Run this on real hardware for full effect.</p><p><a href="https://files.mega65.org/?id=81fd9a5d-1ced-4e13-af78-5ba90c81de80">Disk Doctor Mega</a> by tundra/C is a low-level disk viewer and editor for both physical floppy disks and virtual D81 disk images. Inspect your disk tracks and sectors, and potentially recover data from damaged disks.</p><p><a href="https://files.mega65.org/?id=77e4a95b-cfc1-4170-9b3b-b1f27bcf8d8a">Unelite Part 1</a> by mk9 is a text adventure game with PETSCII graphics. Use the joystick to select options in this branching sci-fi narrative.</p><h2>45GS02 Quick Reference, and other media</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jrPW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jrPW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 424w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 848w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 1272w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jrPW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png" width="666" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:666,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:383135,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jrPW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 424w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 848w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 1272w, https://substackcdn.com/image/fetch/$s_!jrPW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a181fc6-8d85-41c6-94f4-8b9224aee2ad_666x558.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">45GS02 quick reference, by dddaaannn (that&#8217;s me).</figcaption></figure></div><p>I brought a few gifts to the party as well. You can still <a href="https://www.zazzle.com/store/m65digest">buy the 45GS02 quick reference</a> as a mousepad or a poster. If you&#8217;d prefer a digital copy, you can now <a href="https://files.mega65.org/?id=ac9cf203-5276-430e-a491-dab7787ca79c">download the 45GS02 Quick Reference PDF</a> for free. I also uploaded the <a href="https://files.mega65.org/?id=b14f0473-5358-4460-b98f-4536dc732b36">BASIC65 Quick Reference PDF</a> from the User&#8217;s Guide for similar convenience.</p><p>When I took my MEGA65s to computer shows earlier this year, I made some paper items to keep at the table to help show it off. I have uploaded these designs to Filehost, in case anyone else wants to use them. The <a href="https://files.mega65.org/?id=1654a0b1-1117-4a9d-8a63-84830161f630">MEGA65 Conference Table standee design</a> is designed to be printed professionally on a 11" x 17" sign, and has facts and figures about the computer. The <a href="https://files.mega65.org/?id=c8143477-dded-470a-b719-a0a64c3e3e75">MEGA65 Demo Booklet</a> prints in landscape orientation on 8-1/2" x 11" paper, suitable for spiral binding on the top long edge, and features diagrams, screenshots, and very brief instructions intended for someone unfamiliar with the computer to try it out in just a few minutes. Accompany this with an SD card pre-loaded with the mentioned disk images for full effect.</p><div><hr></div><p>Here we are wrapping up another calendar year! I am grateful for everyone who has supported this newsletter over the previous two years, both with recurring donations and with kind words. If you haven&#8217;t already, please consider setting up a recurring donation to keep this resource sustainable. Visit: <a href="https://ko-fi.com/dddaaannn/">https://ko-fi.com/dddaaannn/</a></p><p>Have a great holiday! See you next year.</p><p>&#8212; Dan</p><blockquote><p>Santa called his elves together<br>To soup up his old sleigh<br>So Rudolph and the other reindeer<br>Could rest on Christmas day</p><p>He&#8217;s got a million miles to travel<br>And to do it in one day<br>And that&#8217;s why Santa Claus<br>Has a souped-up Santa sleigh</p><p>Got a rocket burnin&#8217; mighty quick<br>Turnin&#8217; Santa&#8217;s souped-up sleigh<br>Comes in like a streak of light<br>And it goes out the same way</p><p>When you hear that rocket roar<br>You know Santa&#8217;s on his way<br>But he&#8217;ll be back again next year<br>In his souped-up Santa sleigh</p><p>&#8212; &#8220;Santa&#8217;s Souped-up Sleigh,&#8221; <em>from the film</em> Melvin &amp; Howard, <em>dir. Jonathan Demme</em></p></blockquote><p></p>]]></content:encoded></item><item><title><![CDATA[Disassembling Crossroads, part 1]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for November 2024]]></description><link>https://m65digest.substack.com/p/disassembling-crossroads-part-1</link><guid isPermaLink="false">https://m65digest.substack.com/p/disassembling-crossroads-part-1</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Fri, 15 Nov 2024 09:18:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_jZ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Dan&#8217;s MEGA65 Digest has moved! To subscribe, please visit: <a href="https://dansanderson.com/mega65/">https://dansanderson.com/mega65/</a></strong></em></p><div><hr></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_jZ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_jZ_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 424w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 848w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 1272w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_jZ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png" width="613" height="366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:366,&quot;width&quot;:613,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:499527,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_jZ_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 424w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 848w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 1272w, https://substackcdn.com/image/fetch/$s_!_jZ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3134e36a-2951-405a-a2c0-7f47af36e740_613x366.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The title illustration for the game Crossroads, published by Compute!'s Gazette, December 1987.</figcaption></figure></div><p>One of my all-time favorite games for the Commodore 64&#8212;and I know I&#8217;m not alone in this&#8212;is <em>Crossroads,</em> the single-screen maze shoot&#8217;em&#8217;up by Steve Harter, published in <a href="https://en.wikipedia.org/wiki/Compute!%27s_Gazette">Compute!&#8217;s Gazette magazine</a> as a type-in program in December 1987. The game features dozens of enemies of a variety of types and colors, all fighting each other in a cacophony of attacks and explosions. You&#8217;re dropped into the fray to collect items called &#8220;spars,&#8221; which provide you some protection against attacks, and which the enemies also consume. The game supports one or two players on joysticks, and both players battle for survival simultaneously.</p><p>Some people like to say that typing in programs from magazines and books helped them learn how to write programs of their own. I can see how that might be true for BASIC programs, though I can&#8217;t honestly say I learned anything from type-ins when I was in grade school. For programs written in languages other than BASIC, Compute! offered no way to learn. In <a href="https://web.archive.org/web/20231231051645/https://kirk.is/2006/04/13">this interview with Steve Harter</a> by Kirk Israel, Steve says he wrote <em>Crossroads</em> in assembly language, but Compute! never published assembly language listings for full programs in magazines. Instead, Compute! published such programs as columns of numbers, along with a helper program that assisted with keying these values directly into memory. The most you could learn from these type-ins was data entry, and perseverance.</p><p>(As an aside: I&#8217;m aware of only two cases where Compute! published full assembly language program listings for the C64, both as books: the <a href="https://archive.org/details/sboml">LADS assembler</a> and the <a href="https://archive.org/details/Computes_Speedscript">SpeedScript word processor</a>. Steve wrote <em>Crossroads</em> using LADS.)</p><p>Over the next two issues of this Digest, we&#8217;ll crack open the original Crossroads program and see what we can learn, using two modern reverse engineering tools for your PC. This month, we&#8217;ll take a look at <a href="https://github.com/slajerek/RetroDebugger">Retro Debugger</a>, a C64 emulator with real-time memory visualization features. To keep this newsletter to a reasonable length (&#128556;) we&#8217;ll discuss just enough to get started, and ask a few specific questions of interest about the game.</p><p>As always, let us begin with some MEGA65 news!</p><div><hr></div><h2>New Filehost feature: high score tables</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EU8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EU8m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 424w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 848w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 1272w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EU8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png" width="689" height="142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:142,&quot;width&quot;:689,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11198,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EU8m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 424w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 848w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 1272w, https://substackcdn.com/image/fetch/$s_!EU8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d38b7c4-d0ee-4678-b278-9923314d445b_689x142.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Filehost high score tables.</figcaption></figure></div><p>Filehost has a fun new feature for competitive MEGA65 gaming: high score tables! When you upload your game to Filehost, you can choose to enable &#8220;Highscore submission.&#8221; This allows players to submit their high scores by clicking the plus ("+") button on your game&#8217;s Filehost detail page, uploading a screenshot as evidence. All score submissions must be approved by you before appearing on the page. You will receive a message when a player submits a score for your game.</p><p>Check out <a href="https://files.mega65.org/?id=3549b82b-b851-41ec-a8d9-918996a4d2ea">the high score table on Classy</a> as an example.</p><p>Thanks as always to Tayger for the Filehost innovations! Everyone go out and rack up those high scores!</p><h2>Galaga, Ghosts&#8217;n&#8217;Goblins, and Xevious now available for R6 boards; TI-99/4A now available for R3 boards</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kkmp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kkmp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 424w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 848w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 1272w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kkmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png" width="512" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:512,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20364,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kkmp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 424w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 848w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 1272w, https://substackcdn.com/image/fetch/$s_!kkmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24cefe83-8e0f-4982-9e59-3603a3c3ba6f_512x448.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ghosts&#8217;n&#8217;Goblins arcade core for the MEGA65, now available for R6 boards.</figcaption></figure></div><p>Over the last year or so, muse has given us alternate cores for the arcade games <a href="https://files.mega65.org/?id=8bc248e3-c29c-4ba8-b8c3-6018a995a9ea">Galaga</a>, <a href="https://dansanderson.com/mega65/crossroads-part-1/(https://files.mega65.org?id=e563df76-e12f-47de-9bb2-cca4ebe1e18d)">Ghosts&#8217;n&#8217;Goblins</a>, and <a href="https://files.mega65.org/?id=d32474e9-6f30-48f8-bba3-167cad4bbc4f">Xevious</a>, originally released for the R3 mainboard. Now, thanks to Robert Jaremczak (rjaremczak), there are R6 versions for these cores: <a href="https://files.mega65.org/?id=1672149c-66d3-4df7-9128-e9c83095c49a">Galaga R6</a>, <a href="https://files.mega65.org/?id=f66965dc-4006-4ebe-8fde-eed9bc60d3aa">Ghosts&#8217;n&#8217;Goblins R6</a>, and <a href="https://files.mega65.org/?id=c67076de-8dd5-4877-8c95-7a01d2cae441">Xevious R6</a>. See the original installation instructions for the R3 cores, which also apply to the R6 versions.</p><p>zeldin has updated the <a href="https://kugelblitz360.github.io/m65-altcores/computer-cores.html#ti-994a">TI-99/4A core</a> several times since its initial release, and as of version 1.3, the core is available for the R3 mainboard as well as R6. <a href="https://files.mega65.org/html/main.php?id=a25ce133-ed07-4ef7-8495-179d69c43ed0">Go grab the latest</a>, and be sure to <a href="https://github.com/zeldin/Mega99/issues">file any bugs you find</a>.</p><p>I had a few people respond to <a href="https://dansanderson.com/mega65/up-up-down-down/">last&#8217;s month&#8217;s Digest</a> to point out that core availability is currently a sticking point with regards to mainboard revisions, with some cores only available for R3 and others only for R6. Core developers must put in additional effort to support both mainboards, and not everybody owns both boards for testing. If you&#8217;re working on a core and need assistance building it for a board revision that you do not own, please reach out to the MEGA65 community on Discord or by email. We will eagerly connect you with resources for building and testing your core on both revisions.</p><p>Thank you Robert and zeldin for working on cores!</p><h2>Last call for R3 Real-Time Clock replacements (Grove RTC)</h2><p>Back in 2022, we noticed that a small but significant percentage of R3 mainboards had faulty Real-Time Clock (RTC) chips. Paul quickly put together a workaround involving a core update and an <a href="https://www.aliexpress.us/item/2251832636105970.html?algo_pvid=26a281a9-a207-475f-9c56-de8ce11cea57&amp;algo_exp_id=26a281a9-a207-475f-9c56-de8ce11cea57-0&amp;pdp_ext_f=%7B%22sku_id%22:%2210000000337849443%22%7D&amp;pdp_npi=2@dis!USD!2.27!2.0!!!!!@2101e9d116652918520047406e6ac3!10000000337849443!sea&amp;curPageLogUid=S6c2J0uTS2Tp&amp;gatewayAdapt=4itemAdapt">inexpensive RTC breakout board</a> and <a href="https://core-electronics.com.au/grove-4-pin-male-jumper-to-grove-4-pin-conversion-cable-5-pcs-per-pack.html">Grove connector</a>. This requires a soldering iron to put together, but no expertise: it&#8217;s just four wires. Nevertheless, I wanted to make sure that everyone who needed one could get one easily, so I built a bunch of them and <a href="https://files.mega65.org/?ar=ff484da0-d942-4e9b-adf1-3b5a77acaa25">made them available for the cost of shipping</a>. The MEGA65 team also supported this effort financially out of their own pockets.</p><p>I will be ending my distribution offer at the end of 2024. I have about a dozen units remaining, and am willing to send them out to anyone who needs them. If you have an R3 mainboard and believe your Real-Time Clock is faulty, please follow <a href="https://files.mega65.org/?ar=ff484da0-d942-4e9b-adf1-3b5a77acaa25">these instructions for testing your RTC and requesting a unit</a>. I will email you with instructions to send me the shipping cost by PayPal, then get one out to you, while supplies last.</p><p>Please do not request one if you don&#8217;t need one. Only a fraction of the MEGA65s delivered in 2022 have this issue. Follow the instructions to test your MEGA65 before requesting a replacement. If you discover you need one later than the end of this year, consider ordering the parts and cooking one up yourself. These are easy to build!</p><h2>The sega-adapter is great actually</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yLgU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yLgU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yLgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:603134,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yLgU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yLgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaeb774d-8f7b-48de-8eb2-7089cc527423_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Controlling a MEGA65 with a Switch Pro controller, 8bitDo Retro Receiver, and sega-adapter.</figcaption></figure></div><p>This isn&#8217;t news so much as just boasting, but last month I mentioned <a href="https://github.com/eyvind/sega-adapter/tree/master">the sega-adapter project</a> as a fun way to connect Sega Genesis-style game controllers to Commodore computers. Since I sent newsletter, I had some boards printed, got the parts together, and assembled a few. Chat, I can heartily recommend it, especially when used with the <a href="https://www.8bitdo.com/retro-receiver-genesis-mega-drive/">8bitDo Retro Receiver for Sega Genesis</a> (<a href="https://www.amazon.com/8Bitdo-Retro-Bluetooth-Receiver-Original-Genesis/dp/B07MSWGSJY">$16 on Amazon</a>). The 8bitDo Retro Receiver pairs with almost any modern Bluetooth game controller, including Nintendo, Playstation, and older Xbox controllers (but not newer Bluetooth LE Xbox controllers). 8bitDo also makes a Bluetooth Sega Genesis gamepad; be sure to get the <a href="https://www.amazon.com/dp/B07MSN1NPC">M30 Bluetooth model</a>, not the &#8220;M30 2.4G wireless&#8221; model. I got my Nintendo Switch Pro controller to be a 3-button game controller for my MEGA65!</p><p>The sega-adapter is a pretty simple project, with the following parts:</p><ul><li><p>A 9-pin male connector, for the incoming Sega Genesis controller signal (such as the 8bitDo Retro Receiver)</p></li><li><p>A PIC microcontroller</p></li><li><p>A capacitor</p></li><li><p>Header pins, and a &#8220;pigtail&#8221; cable for the 9-pin female connector that goes to the MEGA65 (or what have you)</p></li><li><p>Optional header pins and jumper to switch between C64 and Amiga modes&#8212;or you can just use solder to set it to C64 mode permanently</p></li></ul><p>That&#8217;s it. If you buy <a href="https://github.com/eyvind/sega-adapter/tree/master/kicad#bom">the exact parts recommended by the project</a>, everything goes together using a soldering iron, and something to apply crimping force to the pigtail&#8217;s ribbon cable. You also need an inexpensive PIC microcontroller programmer such as a generic &#8220;PICKit3&#8221; device; I bought one for <a href="https://www.amazon.com/dp/B07PHPBP3Y">$33 on Amazon</a>. I got the boards from <a href="https://oshpark.com/">OSHPark</a> and parts from <a href="https://www.digikey.com/">Digikey</a>, for a total unit cost of about $16 each for a batch of ten adapters. The recommended 9-pin connectors were the most expensive parts, and you might be able to find cheaper ones in different form factors.</p><p>I&#8217;d never worked with PIC microcontrollers before! For software, I only needed the free version of <a href="https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide">Microchip MPLAB X IDE</a> and the <a href="https://github.com/eyvind/sega-adapter/releases">pre-built release of the sega-adapter .hex file</a>.</p><p>To program the PIC, put it on a breadboard, then connect five of the wires of the PICKit3 to pins of the PIC, as described in the pinout diagrams (which I&#8217;m including below). Leave the sixth wire disconnected. You also need to apply about 5 volts of DC power across the PIC power pins. The PICKit3 does <em>not</em> supply power the microcontroller, and it needs to be powered to accept programming. You can use a little battery box, a wall wart of appropriate voltage, or a bench power supply.</p><p>I&#8217;m <em>not</em> selling these, I&#8217;m just showing off. It was a fun afternoon project, with a satisfying result, and because I made ten I have my holiday gifts all sorted.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bKUd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bKUd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 424w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 848w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 1272w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bKUd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png" width="367" height="252" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:252,&quot;width&quot;:367,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25255,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bKUd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 424w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 848w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 1272w, https://substackcdn.com/image/fetch/$s_!bKUd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3238adf4-5271-4196-8c94-fb70ee70b2b1_367x252.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pinout of the PIC 16F1847 microcontroller used by the sega-adapter.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7kku!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7kku!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 424w, https://substackcdn.com/image/fetch/$s_!7kku!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 848w, https://substackcdn.com/image/fetch/$s_!7kku!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 1272w, https://substackcdn.com/image/fetch/$s_!7kku!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7kku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png" width="565" height="279" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:279,&quot;width&quot;:565,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28583,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7kku!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 424w, https://substackcdn.com/image/fetch/$s_!7kku!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 848w, https://substackcdn.com/image/fetch/$s_!7kku!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 1272w, https://substackcdn.com/image/fetch/$s_!7kku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F111f877c-6601-4fbb-8365-d759ced2fe1a_565x279.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pinout of the PICKit3 connector, and how it connects to the PIC.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q5Hs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q5Hs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q5Hs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg" width="445" height="264" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:264,&quot;width&quot;:445,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60834,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q5Hs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q5Hs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd920a7e3-746b-443c-b172-56a9c32e3e4e_445x264.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The PIC microcontroller connected to the PICKit3 and 5V DC power for programming.</figcaption></figure></div><div><hr></div><h2>Playing Crossroads</h2><p>The first step to reverse engineering anything is to understand what the thing does. We can learn a lot about <em>Crossroads</em> just from playing it.</p><p><a href="https://archive.org/">Archive.org</a> has complete scans of Compute!&#8217;s Gazette magazine, and <em>Crossroads</em> is in <a href="https://archive.org/details/1987-12-computegazette">issue 54, December 1987</a>. An amusingly nostalgic way to acquire the <em>Crossroads</em> program would be to enter the &#8220;MLX&#8221; data entry program listed in the magazine, then use MLX to enter the 6,676 hexadecimal numbers for the game. (That&#8217;s 5,935 program bytes, plus error checking digits.) I recommend simply downloading <a href="https://commodore.software/downloads/download/732-compute-s-gazette-associated-disks/15337-compute-s-gazette-all-disk-images">the Compute!&#8217;s Gazette cover disk image archive</a>. The disk image for the December 1987 issue is named <code>1987-12.d64</code>. This disk image works great with the C64 core for the MEGA65. (Alas, I could not get it to run in GO64 mode. Maybe later we can figure out why.)</p><p>We can learn some useful things about Crossroads even before we run it. If we browse the disk directory, we can see that there are many files from this issue of the magazine, but the game likely consists of a single PRG file named <code>CROSSROADS</code>.</p><pre><code><code>LOAD "$",8
LIST</code></code></pre><p>We can load this file from disk into memory, using the <code>,8,1</code> arguments to <code>LOAD</code> to tell it to use whatever memory start address that <code>CROSSROADS</code> prefers:</p><pre><code><code>LOAD "CROSSROADS",8,1</code></code></pre><p>The program loads, and we&#8217;re back at the <code>READY.</code> prompt. Because the game didn&#8217;t do anything fancy to start automatically, we can guess that the program has loaded to the start of BASIC memory, and probably begins with a BASIC bootstrap program that invokes the machine code, like <a href="https://dansanderson.com/mega65/cross-development/">we&#8217;ve done for our own programs</a>. Let&#8217;s confirm this:</p><pre><code><code>LIST</code></code></pre><p>Sure enough, there is a one-line BASIC program in memory:</p><pre><code><code>10 SYS2300</code></code></pre><p>Connect a joystick to port 2 (first player), then start the program with the <code>RUN</code> command. The game starts without any further disk activity, which confirms our hypothesis that this is a single-file game.</p><p>If you&#8217;ve never played <em>Crossroads</em> before, take some time to enjoy it! Shoot bullets at monsters by pressing the fire button, and collect the white spinning &#8220;spars&#8221; to gain shields and progress to the end of the level. Connect a second joystick and invite a friend!</p><h2>Observing the game</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ws-m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ws-m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 424w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 848w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 1272w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ws-m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png" width="580" height="410.8333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:272,&quot;width&quot;:384,&quot;resizeWidth&quot;:580,&quot;bytes&quot;:5073,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ws-m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 424w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 848w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 1272w, https://substackcdn.com/image/fetch/$s_!ws-m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0f51ca-8f5b-4ef3-b918-c8ebd80bc858_384x272.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Crossroads, in "attract mode."</figcaption></figure></div><p>As you play, try to make some guesses about how the game works, and come up with some questions you would like answered. Your own questions and hypotheses will guide your reverse engineering process.</p><p>Here are just a few things I noticed that might be worth exploring:</p><p><strong>Program states.</strong> The game starts with an &#8220;attract mode&#8221; where a bunch of enemies duke it out on a maze without a player present, and with a scrolling message across the top of the screen. Like many vintage arcade games, attract mode appears very similar to gameplay, and likely reuses the game&#8217;s logic with minor changes. The game starts the first level when the player presses the fire button. Each level starts with an introductory animation where creatures appear with special graphical and sound effects. The players are the last to arrive. Then play begins. A level ends when a player collects a number of spars, at which point the game pauses until a key is pressed, and the game restarts at the next level. The game ends when both players are out of lives.</p><p><strong>Creature properties.</strong> Creatures and players have a number of shields that protect them from attacks. Each attack deducts a shield, and the creature is destroyed when attacked without shields. A creature or a player gains a shield by picking up a spar. The player&#8217;s shield count appears at the top of the screen, under the &#8220;S.&#8221; Other creatures also have shield counts, but these are not visible. Player actions are controlled by joystick inputs; creature actions are controlled by algorithms. Each creature is of one of nine types, and the type describes their action patterns, reactions to collisions with bullets and other creatures, and the initial number of shields.</p><p><strong>Character graphics.</strong> The maze and the creatures appear to occupy a grid in the same shape as the C64&#8217;s 40 x 25 character mode, and every element appears to be the size of a single character. It&#8217;s likely that at least some of these graphical elements are using VIC-II character graphics, where the glyphs of some letters, numbers, and symbols in the PETSCII typeface have been replaced with these designs. Each element is of a single color and high resolution, 8 x 8 pixels per character.</p><p><strong>Creature half-steps.</strong> Even though creatures are the size of a single grid tile, they appear to traverse the screen in half-tile steps! If creatures are implemented with character graphics, the game must be doing something interesting to allow a creature to appear this way.</p><p><strong>Sprites.</strong> There appear to be too many creatures and bullets on the screen at one time for the game to be using the eight VIC sprites to draw them. While advanced techniques like sprite multiplexing (which we <a href="https://dansanderson.com/mega65/racing-the-beam/">discussed previously</a>) could use sprites to draw more than eight objects at a time, there&#8217;s nothing in the design of this game that prevents more than eight objects from appearing on the same scan line, so this seems unlikely. However, there is an explosion effect that occurs when a creature takes damage, and this appears to overlay the character graphics. This suggests that this effect might be done with sprites.</p><p><strong>Sound.</strong> The soundscape of <em>Crossroads</em> consists entirely of sound effects that represent activity on the screen: creatures appearing at the start of the level, player bullets firing, enemy bullets firing, shields absorbing damage, creatures and bullets being destroyed, and spars getting collected. There&#8217;s so much going on early in the level that each sound may be difficult to pick out, and it&#8217;s a bit easier after the screen is mostly clear. I&#8217;ll be interested to see how sounds are allocated to the three SID channels, especially when there are more than three events causing sound at a time.</p><p>In <a href="https://web.archive.org/web/20231231051645/https://kirk.is/2006/04/13">that interview with the developer</a> that I mentioned earlier, Steve confirms that the creatures use character graphics, and the explosions use sprites. Steve also mentions that the sprite images for the explosion animations are generated randomly.</p><h2>Examining the PRG</h2><p>We want to use modern PC tools to examine the program, so we need to extract the PRG file from the disk image. Graphical tools like <a href="https://style64.org/dirmaster">DirMaster</a> (Windows only) or <a href="https://droid64.sourceforge.net/">DroiD64</a> (Java, multi-platform) work nicely, or you can use the c1541 command included with the <a href="https://vice-emu.sourceforge.io/">VICE emulator</a>:</p><pre><code><code>c1541 1987-12.d64 -read crossroads crossroads.prg</code></code></pre><p>You can use a tool called a <em>hex viewer</em> to examine the bytes of the PRG file. I like a terminal-based hex viewer called <a href="https://github.com/sharkdp/hexyl">hexyl</a>, and there are many others to choose from. We won&#8217;t spend more than a minute staring at raw bytes, but we can use this to get our bearings. Here are the first few dozen bytes of the PRG file:</p><pre><code><code>00000000  01 08 0b 08 0a 00 9e 32  33 30 30 00 00 00 00 00  |.......2300.....|
00000010  44 aa aa 11 00 00 00 00  11 aa aa 44 00 00 00 00  |D..........D....|
00000020  00 3c 3c 00 00 00 00 00  00 3c 3c 00 00 00 38 38  |.&lt;&lt;......&lt;&lt;...88|
00000030  30 7f be 68 ce ec 38 38  30 7f 76 30 30 38 ff 8f  |0..h..880.v008..|
...</code></code></pre><p><a href="https://dansanderson.com/mega65/cross-development/">As we&#8217;ve seen before</a>, a PRG file starts with two bytes that specify the load address for the program. In this case, the first two bytes are $01 and $08, specifying the Commodore 64 BASIC start address of $0801 hexadecimal, or 2049 decimal. The PRG address bytes are not written to memory, they only tell the BASIC command <code>LOAD "CROSSROADS",8,1</code> where to put the rest of the data.</p><p>The subsequent bytes describe the one-line BASIC program we saw earlier:</p><ul><li><p>$0b $08: The address of the next line. In this case, it&#8217;s the end-of-program marker: $080b.</p></li><li><p>$0a $00: The line number. $000a = 10 decimal.</p></li><li><p>$9e: The C64 BASIC token for <code>SYS</code>.</p></li><li><p>$32 $33 $30 $30: PETSCII for <code>2300</code>.</p></li><li><p>$00: End of line.</p></li><li><p>$00 $00: End of program. If you count from $0801, you&#8217;ll see this is at address $080b, from the first bytes of the first line.</p></li></ul><p>These 12 bytes start at address 2049, which means the rest of the program data starts at address 2061 ($080d). Interestingly, the <code>SYS</code> command uses address 2300 ($08fc). The data starting at address 2061 might be code, or it might be something else. We don&#8217;t know yet. We only know that the byte at address 2300 is the beginning of a machine code instruction, and that it&#8217;s the first instruction executed by the program.</p><p>It&#8217;s amusing to compare this hex dump to the listing in the magazine. (Well I think it&#8217;s amusing.) Note that Compute!&#8217;s Gazette program listings have nine bytes on a line, but only the first eight bytes are part of the program. The ninth byte is a <em>checksum</em>, which the MLX program uses to verify that you entered the line correctly. If it didn&#8217;t do this, entering these programs would be a nightmare, as opposed to merely a nuisance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EUPW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EUPW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 424w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 848w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 1272w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EUPW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png" width="248" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:248,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:269584,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EUPW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 424w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 848w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 1272w, https://substackcdn.com/image/fetch/$s_!EUPW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8875769-42f8-4e48-869e-1f5b59e709cb_248x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The beginning of the hexadecimal program listing of Crossroads, as it appears in the magazine.</figcaption></figure></div><h2>Introducing Retro Debugger</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qLCi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qLCi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 424w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 848w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 1272w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qLCi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png" width="1119" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:1119,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:219773,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qLCi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 424w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 848w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 1272w, https://substackcdn.com/image/fetch/$s_!qLCi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d18685-d45a-4924-aa95-889bc63e9315_1119x636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Retro Debugger.</figcaption></figure></div><p>If programming is the art of telling a computer what to do, debugging is the art of figuring out why it&#8217;s not doing what you meant. One of the best ways to do that is to peek inside the computer&#8217;s memory as it steps through your instructions, and try to line up the evolving state of the computer with your own mental model. This process is often so opaque and frustrating that I sometimes wish I could just rip the top off the chips and look inside as the program is running. Thanks to high fidelity emulators running on modern computers, this fantasy is now a reality.</p><p><a href="https://github.com/slajerek/RetroDebugger">Retro Debugger</a> by Marcin Skoczylas is an emulator for the C64, Atari XL/XE, and Nintendo Entertainment System, with some powerful real-time debugging tools. As the emulator runs, you see the C64 screen in one window, and use other windows to render the memory in different useful ways: as hex values, as machine code instructions, as graphics in common VIC-supported formats, and as a color-coded memory map. All of this is updated as the emulation runs at full speed, and you can pause execution and manipulate system state as a program runs.</p><p>Let&#8217;s use Retro Debugger to inspect <em>Crossroads</em>, and follow up on a few of our assumptions about how the game does graphics.</p><h2>Setting up Retro Debugger</h2><p><a href="https://github.com/slajerek/RetroDebugger/releases">Download the latest Retro Debugger release</a> for your platform (Windows, macOS, or Linux). You also need the original C64 ROM and 1541 DOS code. Retro Debugger opted not to include these in the distribution, but you can get them directly by installing the <a href="https://vice-emu.sourceforge.io/">VICE</a> emulator. You&#8217;ll have to dig around the VICE folder for the appropriate <code>.bin</code> files. On my Mac, I found them here:</p><pre><code><code>./VICE.app/Contents/Resources/share/vice/C64/
./VICE.app/Contents/Resources/share/vice/DRIVES/</code></code></pre><p>Retro Debugger needs the ROM files to be in a single folder, with specific filenames. Create a new folder for these (such as inside the Retro Debugger folder), make duplicates of the files from VICE, and rename them as shown:</p><ul><li><p><code>.../C64/basic-901226-01.bin</code> -&gt; <code>basic</code></p></li><li><p><code>.../C64/chargen-901225-01.bin</code> -&gt; <code>chargen</code></p></li><li><p><code>.../C64/kernal-901227-03.bin</code> -&gt; <code>kernal</code></p></li><li><p><code>.../DRIVES/dos1541-325302-01+901229-05.bin</code> -&gt; <code>dos1541</code></p></li><li><p><code>.../DRIVES/dos1541ii-251968-03.bin</code> -&gt; <code>dos1541II</code></p></li></ul><p>When you start Retro Debugger for the first time, you need to tell it where to find the ROM files. Open the Settings menu, select C64, then Select C64 ROMs folder. Navigate to the folder you created with the ROM files in it. Retro Debugger loads the ROMs and starts the emulation. If it complains, make sure the ROM files are in the right place and have been renamed as expected.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D8E7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D8E7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 424w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 848w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 1272w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D8E7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png" width="376" height="431" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43da9111-4edf-4400-9e51-45afa419d50f_376x431.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:431,&quot;width&quot;:376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87530,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D8E7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 424w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 848w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 1272w, https://substackcdn.com/image/fetch/$s_!D8E7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43da9111-4edf-4400-9e51-45afa419d50f_376x431.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Retro Debugger's C64 Disassembly window, with larger text.</figcaption></figure></div><p>Behold, the insides of the C64! You can see the CPU bouncing around the instructions for blinking the cursor at the READY prompt, and all of the memory and register updates that go with it. With the &#8220;C64 Screen&#8221; window active, you can interact with the C64 as you would with VICE, typing BASIC commands and whatnot.</p><p>Retro Debugger starts with some of its tools visible, but there are many more. With the cursor still at the READY prompt, open the VIC Editor menu, and select C64 Charset. The C64 Charset window opens. At this point, you should see what the VIC is currently using for its character set, which at the moment is standard C64 PETSCII. Resize the window to make the characters easier to see.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7YRL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7YRL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 424w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 848w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 1272w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7YRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png" width="528" height="155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:528,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:13959,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7YRL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 424w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 848w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 1272w, https://substackcdn.com/image/fetch/$s_!7YRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec6a1733-9e6e-40ff-9cfc-785b111f07e9_528x155.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Retro Debugger's C64 Charset window, with the PETSCII character set.</figcaption></figure></div><p>On my computer, I need to make the text bigger to be useful. Some windows, like the C64 Screen and Charset windows, have fixed-sized content, and you can drag the window corners to resize. In other windows, to increase the text size, right-click on the window, then adjust the Font Size slider. These windows can also be resized to display more information. The app will remember your window layout between sessions.</p><p>Retro Debugger is based on VICE, and has all of its debugging features. To pause the emulator, press <strong>F10</strong> (or open the Code menu, then select Pause). While paused, press <strong>F10</strong> repeatedly to advance by one instruction at a time. Press <strong>F11</strong> to resume full speed. You can also set <em>breakpoints</em> on instructions, set <em>watchpoints</em> on memory locations, and can navigate to instructions that access specific memory addresses. You can even rewind the emulation to the instruction that last accessed a memory address.</p><p>For more information on features and keyboard shortcuts, see <a href="https://github.com/slajerek/RetroDebugger/blob/master/docs/README-C64-65XE-NES-Debugger.txt">docs/README-C64-65XE-NES_Debugger.txt</a>, included with the program.</p><h2>Playing Crossroads in the emulator</h2><p>There are two ways to get <em>Crossroads</em> running in the emulator. One method is to open the D64 disk image, then type the BASIC commands to load and run the game, as you would on a C64. Because <em>Crossroads</em> is a single PRG file, you can also just open the PRG file that we extracted earlier. Opening the PRG is often faster, especially if you need to reset the program.</p><p>Open the File menu, then select Open. Select the <code>crossroads.prg</code> file. This will load and run the game immediately, so prepare your speaker or headphones volume for the game&#8217;s violent introduction.</p><p>Next, open the Settings menu, then Joystick #2, and select a configuration for the joystick. With the joystick set to &#8220;Keyboard,&#8221; the cursor keys move the stick, and the right Alt key is the fire button. Or you can connect any PC-compatible game controller. If a controller is connected, its device name will appear in the menu.</p><p>Select the C64 Screen window, then press fire to start a game. Good luck!</p><h2>Investigating character graphics</h2><p>We have a hypothesis about how <em>Crossroads</em> uses character graphics. Let&#8217;s see if we can confirm this hypothesis in Retro Debugger.</p><p>When you started the game, it installed a new character set and told the VIC to use it. The Charset window now shows new graphics tiles: a limited set of PETSCII letters and numbers, and nearly all of the graphics for the game. You can see four types of maze wall, the &#8220;spar,&#8221; and various images for each of the creature types and bullets facing all four directions. Each of these are unique <em>tiles</em> of 8-by-8 pixels, and the tiles can be placed anywhere on the 40-by-25 tile grid.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CEvv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CEvv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 424w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 848w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 1272w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CEvv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png" width="527" height="155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26b05b88-58e5-4519-9e68-30805bc26553_527x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:527,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15708,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CEvv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 424w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 848w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 1272w, https://substackcdn.com/image/fetch/$s_!CEvv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26b05b88-58e5-4519-9e68-30805bc26553_527x155.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The C64 Charset window, now with the Crossroads character set.</figcaption></figure></div><p>We&#8217;ve made a discovery! The spar appears to be animating directly inside the Charset window! While <em>Crossroads</em> animates creatures using multiple static tile definitions, it animates the spar simply by continuously updating its single tile definition. This conserves charset tiles, at the expense of some CPU time.</p><p>If we squint, we can start to see how the game achieves its &#8220;half step&#8221; effect for creatures. When a creature is standing fully on a tile position, it is drawn as a single tile based on which direction it is facing. When a creature is walking between two tile grid spaces, it occupies both space, with a tile for each half of the image. There is a tile pair for each of the four directions. Each creature has two animation frames, and it appears that <em>Crossroads</em> stores both frames as single tiles, and uses only the second frame for the half-step tiles, for a total of 16 tile definitions per creature.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZKiE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZKiE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 424w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 848w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 1272w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZKiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png" width="310" height="185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21271301-e776-46e2-b59e-098cc3bb363b_310x185.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:185,&quot;width&quot;:310,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6451,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZKiE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 424w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 848w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 1272w, https://substackcdn.com/image/fetch/$s_!ZKiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21271301-e776-46e2-b59e-098cc3bb363b_310x185.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Four right-facing tiles for Green Mashed Potato facing to the right.</figcaption></figure></div><h2>How the VIC finds character sets</h2><p>The Charset window determines the memory location of the character set data that the VIC is using based on hardware registers, then draws the data it finds as characters. We can use some Commodore 64 knowledge to figure out where in memory this character set is stored.</p><p>The way the VIC-II accesses memory is <a href="https://www.c64-wiki.com/wiki/VIC_bank">a little bit complicated</a>. The VIC can only access one of the four 16 KB banks at a time. Additionally, the C64 architecture makes a special accommodation so the VIC can access the PETSCII character set from an upper bank of ROM even when a lower bank is selected. This configuration for how the VIC sees memory is managed by the second of the C64&#8217;s two CIA chips. This is controlled by the lowest two bits of the CIA data register at $DD00.</p><p>In Retro Debugger, select the C64 Memory window. With this window selected, you can use either the Page Up/Page Down keys or your mouse&#8217;s scroll wheel to browse memory. You can also jump directly to an address by pressing Ctrl+G (or on macOS, Command+G), then typing the address in hexadecimal. Use this to jump to the register address $DD00.</p><p><strong>Tip:</strong> Be careful what you type when the Memory window is active. If the cursor is on a memory value, typing hexadecimal digits will modify memory. When you type Ctrl+G (or Command+G) to go to an address, double-check that the cursor has moved into the address column before typing the address.</p><p>With <em>Crossroads</em> running, the register at $DD00 is set to $C7, so the lowest two bits are %11. According to <a href="https://www.c64-wiki.com/wiki/VIC_bank">C64 technical documentation</a>, this points the VIC at bank 0, addresses $0000-$3FFF. It also tells the VIC to see the PETSCII character set at addresses $1000-$1FFF, hiding the RAM at these addresses from the VIC. This only hides the RAM from the VIC, not the CPU.</p><p>Still in the C64 Memory window, jump to register <a href="https://www.c64-wiki.com/wiki/53272">$D018 (53272 decimal)</a>. This register tells the VIC where to find screen memory within the selected bank, and where to find the character set. With the game running, this appears to be set to $19. This value is interpreted as follows:</p><ul><li><p>$19 = %0001 1001</p></li><li><p>The upper four bits specify the location of screen memory, as a multiple of 1024 ($0400) bytes. %0001 = 1, so screen memory starts at address $0400. This is an offset from the beginning of the selected bank, and in this case the bank is 0, so the final address is $0400.</p></li><li><p>The next three bits specify the location of character memory, as a multiple of 2048 ($0800) bytes. %100 = 4, so character memory starts at address $2000.</p></li><li><p>The last (least significant) bit is ignored.</p></li></ul><p>Be aware that the character memory offset gets described in manuals and online resources in different ways. I just described it the way the <a href="https://www.c64-wiki.com/wiki/53272">C64 wiki</a> does: a three-bit number times 2048. Other books, including the MEGA65 manual, describe it as the upper three bits of a four-bit number whose last bit is 0, times 1024. The math works out the same either way.</p><p>With the selected CIA configuration, a program could tell the VIC to use the PETSCII character set from ROM by setting the three bits to %010 = 2 times 2048 = address $1000. <em>Crossroads</em> tells the VIC to look at $2000 instead, which is RAM where Crossroads can install its custom character set.</p><p>Let&#8217;s confirm our understanding. In the C64 Memory window, go to address $2000.</p><p>The C64 Memory window doesn&#8217;t know what the values in memory mean, but it tries to help us out by displaying them in four different ways: as hex bytes, as PETSCII characters, as character graphics data, and as sprite graphics data. In this case, we&#8217;re looking at character graphics data, so that view makes the most sense, and the other views are mostly nonsense. Scroll down to address $21F8 to see the spar glyph data being animated by the program.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jmKn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jmKn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 424w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 848w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 1272w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jmKn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png" width="560" height="372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:372,&quot;width&quot;:560,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138148,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jmKn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 424w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 848w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 1272w, https://substackcdn.com/image/fetch/$s_!jmKn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc32079e6-786e-4676-bc2f-b33d4a78a928_560x372.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The C64 Memory window, positioned to inspect the Crossroads character set.</figcaption></figure></div><h2>Cheating at Crossroads</h2><p>The C64 Memory window lets us peek into the computer&#8217;s memory as it is running, and also lets us change memory as we like. If we knew where to look, we could change properties of the game, such as the number of lives the player has. So how do we know where to look?</p><p>Locating variables is such a common task that the debugger has a tool just for this. Open the C64 menu, then select the C64 Memory Monitor. (This is a new tool, not the C64 Memory window that we&#8217;ve been using.) Resize this innocuous-looking little window to make it bigger.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eBpz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eBpz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 424w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 848w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 1272w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eBpz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png" width="641" height="108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:108,&quot;width&quot;:641,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14564,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eBpz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 424w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 848w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 1272w, https://substackcdn.com/image/fetch/$s_!eBpz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbe5a670-3f61-4a21-8a89-10e93bcae428_641x108.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The C64 Memory Monitor window, before a capture.</figcaption></figure></div><p>Start a new single-player game by pressing the fire button on the joystick configured for port #2. The level clears, creatures spawn in, and finally the player arrives.</p><p>The player starts with 4 lives. We can know for sure that somewhere in the computer&#8217;s memory is a representation of this value, and this representation will change when the player loses a life. We don&#8217;t know where it is, or how the value is represented.</p><p>Let&#8217;s take a guess that the number of lives is stored as a byte, encoded as a non-negative integer. In other words, if we search the computer&#8217;s memory for a value of 4, there&#8217;s a chance that this might be how it stores the number of lives. This is just a guess! We can start with this, and refine our guess if it doesn&#8217;t work out.</p><p>With the emulation still running, in the C64 Memory Monitor, click the Capture button. Retro Debugger takes a snapshot of all of memory, and a giant list of memory addresses and values appears. Next, set the filter settings:</p><ol><li><p>Check the box next to &#8220;Changed.&#8221; The list updates to show only the memory that differs from the captured snapshot in the current state of the emulation.</p></li><li><p>Check the box next to &#8220;Matches prev.&#8221; Click the value box, type <code>04</code>, then press <strong>Enter</strong>. (It&#8217;s important to press <strong>Enter</strong> in this field, or the value won&#8217;t stick.) The Memory Monitor now lists all of the memory locations that were set to $04 when you clicked the Capture button, but currently contain something else.</p></li><li><p>Finally, check &#8220;Matches current,&#8221; and set its value to $03.</p></li></ol><p>The list narrows to just the memory addresses that were 4, and are now 3. You may see more than one row, but likely only a few. Of all 65,536 memory addresses in the computer, these are the only ones that meet the criteria. This list updates in real-time as the emulation runs, and some rows will flicker in and out as memory changes.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Brs7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Brs7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 424w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 848w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 1272w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Brs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png" width="639" height="220" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:639,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34838,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Brs7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 424w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 848w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 1272w, https://substackcdn.com/image/fetch/$s_!Brs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa393b0f-29aa-488e-95ea-4f9f8b28890d_639x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Retro Debugger's C64 Memory Monitor window, with a capture, and filter settings to find the player 1 life counter.</figcaption></figure></div><p>Select the C64 Screen window again, and use your gamepad or the keyboard to move the player into harm&#8217;s way until they run out of shields and lose a life. The number of lives shown in the top display reduces to 3. Press <strong>F10</strong> to pause the emulation.</p><p>One of the addresses that meet the filter criteria in the Memory Monitor is $0011. Let&#8217;s take another guess that this is player 1&#8217;s life count. This is a good guess for at least two reasons. It&#8217;s an address in the Zero Page (addresses $0000-$00FF), which is a common place to put variables. It&#8217;s also the only row that doesn&#8217;t flicker while the emulation is running.</p><p>On the row showing address $0011, click the &#8220;Memory&#8221; button. This updates the C64 Memory window to highlight that location. As expected, its value is currently $03. Now change this value: select the Memory window, then type <code>07</code>. Press the <strong>F11</strong> key to unpause the emulator.</p><p>Hmmm, the number of player lives on the screen still shows &#8220;3.&#8221; Was our guess incorrect? Try killing off the player one more time. Success! The life count now reads &#8220;6,&#8221; one less than the value we set. Double-check that the value at address $0011 is now $06.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MTI5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MTI5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 424w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 848w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 1272w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MTI5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png" width="263" height="81" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:81,&quot;width&quot;:263,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6862,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MTI5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 424w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 848w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 1272w, https://substackcdn.com/image/fetch/$s_!MTI5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2a060d-3434-4e7b-a6ce-e507ed96d68b_263x81.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Player 1 now has 6 lives.</figcaption></figure></div><p>When we dig deeper into the machine code next month, we should expect to find instructions that manipulate address $0011, and can probably assume that the code is related to the number of lives of player 1. We can use that information and some inductive reasoning to determine the purpose of the surrounding code, and figure out the rest of the program.</p><p>We got a bit lucky with our guesses in this example, though truthfully many games store the number of player lives this way. What if our guesses were wrong, and the number of lives wasn&#8217;t stored as a non-negative integer in a byte value? One possible strategy would be to locate the code that updated the &#8220;4&#8221; on the screen to a &#8220;3.&#8221; We could use the Memory Monitor against the screen codes for those characters, or we could locate the screen memory address and ask Retro Debugger to tell us which instruction last changed it. It might be possible to figure out from nearby code where it reads the value that it displays, and how the value is interpreted.</p><h2>More things to try</h2><p>Retro Debugger comes packed with plenty of toys for messing with the state of the emulator. Browse the menus and experiment! Most menu items open a new window with interesting features. Here are just a few ideas.</p><p><strong>Locate that first instruction.</strong> Recall that the BASIC bootstrap invokes the machine code at address 2300, or $08FC in hexadecimal. Pause the emulator by pressing <strong>F10</strong>. Select the C64 Disassembly window, type Ctrl+G (or Command+G for macOS) to go to address $08FC. We can see that the first few instructions initialize some hardware registers: $D40E, $D40F, $D412. You can look up these addresses in <a href="https://sta.c64.org/cbm64mem.html">C64 technical documentation</a> to see what they do. Researching all of the code this way is a bit tedious, but it&#8217;s fun to see the code sitting right there in memory. We&#8217;ll use a more powerful tool for investigating this code in next month&#8217;s Digest.</p><p><strong>Watch the SID chip make sound.</strong> Open the C64 menu, then the C64 SID sub-menu, then the C64 SID tool. The C64 SID window opens, showing information about the SID chip&#8217;s three sound voices. (Check out <a href="https://dansanderson.com/mega65/sounds-of-the-sid/">one of the earliest Digest issues</a> for an introduction to the SID chip.) Keep this window open, play the game for a bit, and watch the SID waveforms as the enemies duke it out.</p><p><strong>Draw on the screen.</strong> Open the VIC Editor menu, and select Show VIC Editor. This window resembles the screen, and by default shows the tile grid and the pixel grid. This is a powerful tool for updating the VIC data in real time, and there&#8217;s quite a bit of documentation of its features in <a href="https://github.com/slajerek/RetroDebugger/blob/master/docs/README-C64-65XE-NES-Debugger.txt">the text file</a>. For now, select the C64 VIC Editor window, then left-click on an empty space on the <em>Crossroads</em> maze. It fills in with a character. Try making a wall of characters in the maze. Another discovery! The characters block the path of creatures, and the player! It is likely that the game code reads screen memory directly to detect whether a creature is adjacent to a wall.</p><p><strong>Watch for sprites.</strong> The VIC Editor highlights sprites with a red box. If you zoom out in this window with the mouse scroll wheel, you can see that <em>Crossroads</em> keeps the sprites off screen when not in use. Play the game to cause explosion effects as shields and creatures are destroyed. Notice that the red boxes appear around the explosions in progress, then retreat out of view when no longer needed.</p><div><hr></div><p>We&#8217;ve only scratched the surface of what Retro Debugger can do, and we&#8217;ve already learned quite a bit about how <em>Crossroads</em> works. We&#8217;ll be able to apply this knowledge as we start investigating the code.</p><p>Next month, we&#8217;ll introduce <a href="https://ghidra-sre.org/">Ghidra</a>, a powerful tool for inspecting machine code. With some effort and ingenuity, we&#8217;ll be able to produce a complete human-readable assembly language source listing for the game&#8212;the listing that Compute!&#8217;s Gazette refused to print.</p><p>Before you ask: no, there is currently no real-time memory visualization tool like Retro Debugger for the MEGA65 or the <a href="https://github.com/lgblgblgb/xemu">Xemu emulator</a>. Yes, it would be cool. LGB tells me more work is needed on Xemu before it can support real-time memory visualization. In the short term, we&#8217;re more likely to see investment in the serial debugging protocol and tools like <a href="https://github.com/MEGA65/m65dbg">m65dbg</a>, which can be used with both the Xemu emulator and with real MEGA65 hardware over a <a href="https://dansanderson.com/mega65/welcome/using-jtag.html">JTAG connection</a>.</p><p>This Digest is made possible by an amazing group of supporters. Only supporters are allowed to complain when the feature article isn&#8217;t specifically about the MEGA65. To become a supporter, visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a></p><p>More next month!</p><p>&#8212;&nbsp;Dan</p><p></p>]]></content:encoded></item><item><title><![CDATA[Up Up Down Down Left Right Left Right B A Start]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for October 2024]]></description><link>https://m65digest.substack.com/p/up-up-down-down-left-right-left-right</link><guid isPermaLink="false">https://m65digest.substack.com/p/up-up-down-down-left-right-left-right</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Tue, 22 Oct 2024 02:14:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!O0jK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Dan&#8217;s MEGA65 Digest has moved! To subscribe, please visit: <a href="https://dansanderson.com/mega65/">https://dansanderson.com/mega65/</a></strong></em></p><div><hr></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O0jK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O0jK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O0jK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg" width="539" height="571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:571,&quot;width&quot;:539,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O0jK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O0jK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39d31cfa-8ec0-492d-9239-2f01d9aaabfb_539x571.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Atari CX40 joystick.</figcaption></figure></div><p>Everyone who owned a Commodore 64 had at least one joystick, a game controller consisting of a lever that could be pushed in eight directions and a single action button. Games based on this controller typically involved the player using the stick to move an avatar&#8212;a spaceship, a person, a creature&#8212;as well as pushing the action button to activate a weapon against some enemies. The button on this kind of joystick was almost universally referred to as the &#8220;fire&#8221; button for how often it was used to launch missiles or shoot bullets.</p><p>Then came the Nintendo Entertainment System with its gamepad controller, a plastic rectangle with a directional thumb pad, two action buttons, and two more business-like buttons intended for pausing the game and accessing menus. NES games, especially <a href="https://en.wikipedia.org/wiki/Super_Mario_Bros.">Super Mario Bros.</a> and <a href="https://en.wikipedia.org/wiki/The_Legend_of_Zelda">The Legend of Zelda</a>, popularized a new game design language based on the two action buttons. While Mario-like platform games were made for the C64 and its one-button joystick, expecting the player to shove the joystick forward (&#8220;up&#8221;) to jump, every generation of gamers that followed the NES expected to be able to jump in a platform game by pressing one of the two action buttons.</p><p>The vast majority of C64 games used the one-button joystick protocol. But there have been several attempts, both vintage and modern, to bring multi-button gaming to the C64, and to other computers with 9-pin joystick ports. This is of particular interest to modern retro game developers who want to use multi-button game design conventions while coding for the C64 and MEGA65.</p><p>In this Digest, we&#8217;ll explore a bit of the history of 9-pin game controllers, and investigate several methods used to implement multi-button schemes. We&#8217;ll look at the fundamentals of game controller electronics, and game controller programming. We&#8217;ll also take a closer look at several modern game controllers and controller adapters you can buy today for your MEGA65.</p><p>But first news!</p><h2>More MEGA65 parts available separately</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VSN_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VSN_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VSN_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg" width="1456" height="738" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:738,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:258413,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VSN_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VSN_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b8b93-7e1d-4ab1-b499-caf60d9b4446_1737x881.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGA65 replacement keyboard, one of several MEGA65 parts now available separately.</figcaption></figure></div><p><a href="https://dansanderson.com/mega65/chicagoland/">Last month</a>, we noticed that Trenz Electronic is now <a href="https://shop.trenz-electronic.de/en/TE0765-06-T002CK-MEGA65-Mainboard-without-housing?c=564">making the MEGA65 mainboard available for preorder</a> as a standalone part. Trenz has since added more MEGA65 parts to <a href="https://shop.trenz-electronic.de/en/Products/MEGA65/">their store</a>: the MEGA65 keyboard, the plastic case, the floppy drive, and the power supply. The keyboard is a sophisticated part, including the mechanical key switches, keycaps, cable, metal frame, and LEDs. The case includes other plastic bits such as the ALPS floppy drive eject button and reset button cap. You could, in theory, assemble a full MEGA65 from the spare parts available.</p><p>Math wizards may notice that the cost of the parts all together add up to more than the cost of a complete MEGA65. I can&#8217;t speak for Trenz, but this jibes with my limited understanding of the microeconomics of short-run niche electronics. Without economies of scale, Trenz has to account for labor, logistics, and potential lossage to support the individual items, even when pulling from the same stock they use to assemble full units. As deft puts it, &#8220;Imagine buying a car one piece at a time.&#8221;</p><p>I&#8217;m grateful that they&#8217;re making these available, so we have potential replacement parts, as well as options for other projects.</p><h2>&#8220;Should I upgrade my mainboard?&#8221;</h2><p>Did you receive your MEGA65 in 2022, or buy it second-hand from someone who did? Then your computer has the revision 3 (R3) mainboard. Starting in 2024, Trenz Electronic began shipping MEGA65s with the revision 6 (R6) mainboard, which has <a href="https://shop.trenz-electronic.de/media/pdf/ca/ca/31/Mega65-Pressemitteilung.pdf">several changes from R3</a>. If you&#8217;re unsure which MEGA65 mainboard you have, you can double-check which one you have in the MegaInfo panel: open the Freezer (hold Restore for one second, then release), then press <strong>Help</strong>. It&#8217;ll say which one you have next to &#8220;MEGA65 Model.&#8221;</p><p>Should owners of the R3 board upgrade to the R6? Probably not. It is unlikely that a difference between the R3 and R6 mainboards would be worth the cost of a new mainboard to most R3 owners. The differences may not even be noticeable.</p><p>There are a few notable categories of changes between the R3 and R6 boards: bidirectional cartridge and joystick I/O lines, an added SDRAM chip, and electrical fixes.</p><p><strong>Bidirectional cartridge lines.</strong> The original R3 mainboard supports the vast majority of cartridges made for the Commodore 64, which provide program data as input to the computer. It will also support cartridges made for the MEGA65 in the future. The cartridge port changes in the R6 board apply to a few electronically fancy cartridges that communicate with the computer using both input and output. For example, the <a href="https://www.mssiah.com/">MSSIAH MIDI interface cartridge</a> works with the C64 core, and requires the R6 mainboard. EasyFlash 3 is also known to require the R6. Notably, an EasyFlash 1 cartridge can be both read from and written to by an R3 MEGA65. That&#8217;s how we&#8217;ve been testing <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/36962324/MEGA65+Style+Cartridge+Work+in+Progress">the MEGA65 cartridge protocol</a>.</p><p><strong>Bidirectional joystick port lines.</strong> The original R3 mainboard also supports the vast majority of game controller peripherals for the C64, which provide input to the computer about how the user is manipulating the controller. A few unusual peripheral designs use the data lines for both input and output, to implement more buttons or other features with proprietary protocols. The R6 mainboard adds support for such protocols. See this month&#8217;s feature article for more on game controller protocols.</p><p><strong>SDRAM chip.</strong> The R6 adds an SDRAM chip that is intended to broaden the possibilities for alternate FPGA cores. It is possible that someday there could exist an alternate core that requires the R6 and doesn&#8217;t run on the R3. Personally, I think it&#8217;s worth tempering these expectations. I&#8217;ve discussed this with a bunch of people familiar with MiSTer-style core development, and they have all estimated that the most compelling alternate cores for the MEGA65&#8212;including an Amiga core&#8212;should fit the original R3 board. There may never be an alternate core that requires the SDRAM, even though it was added for this purpose. No core exists today that requires an R6, and I&#8217;m not aware of anyone working on one.</p><p>Most importantly, the MEGA65 core does <em>not</em> use the new SDRAM component. All software written for the MEGA65 will run on both R3 and R6 mainboards, now and in the foreseeable future. There are no plans to treat the SDRAM chip as a memory expansion for the MEGA65.</p><p><strong>Minor fixes.</strong> Lastly, the R6 board implements some minor fixes for known issues. If you are noticing these issues on an R3 board, you may be able to use inexpensive workarounds, such as <a href="https://www.amazon.com/gp/product/B0B28GR7XY">an HDMI repeater</a> or a <a href="https://files.mega65.org/?ar=ff484da0-d942-4e9b-adf1-3b5a77acaa25">replacement Real-Time Clock</a>. If you&#8217;re not noticing these issues, you won&#8217;t notice the fixes with an upgrade. This category also includes a few changes to accommodate the availability of components; these changes don&#8217;t affect the functionality of the computer.</p><p>I know I&#8217;ve spent a lot of money over the years indulging my <a href="https://en.wikipedia.org/wiki/Fear_of_missing_out">FOMO</a> by buying hobby computers &#8220;just in case&#8221; I want them later, and it&#8217;d be hypocritical of me to say an R6 is not a worthy upgrade to an R3 when I own one of each. But given that a new mainboard is more than half the cost of a new MEGA65, it&#8217;s worth resisting the temptation to think other people have all of those things and you have none of them. Really, R3 and R6 are mostly identical.</p><h2>Portland Retro Gaming Expo 2024</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TWJc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TWJc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TWJc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg" width="1280" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:867351,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TWJc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TWJc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd922fcf5-be87-4259-96c3-6e550436ce7d_1280x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 at the Portland Retro Gaming Expo 2024, prior to opening.</figcaption></figure></div><p>I took the MEGA65 to the <a href="https://www.retrogamingexpo.com/">Portland Retro Gaming Expo</a> in Portland, Oregon, mere weeks after getting back from Chicago. PRGE is another massive show, but with a different vibe from VCF Midwest. As the name implies, the show is dominated by vintage gaming, with free-to-play arcade and gaming console exhibits, gaming tournaments, several concurrent tracks of talks and panels, meet-and-greet booths with voice acting and YouTube celebrities, and a massive vendor floor with multiple eras of console games and related merchandise.</p><p>PRGE has always featured vintage home computing in its line-up, but representation of the home 8-bits on the vendor floor has waned as our vintage hardware has become more collectible. This year, PRGE established a &#8220;home computing&#8221; exhibit to keep some of our favorite computers in the show. My MEGA65 booth joined several large displays of Texas Instruments, Commodore, Atari, and Apple vintage equipment, as well as more obscure Z80-based computers. I sat closest to the tournament area, where competitors tore through <a href="https://en.wikipedia.org/wiki/Street_Fighter">Street Fighter</a> and <a href="https://rivalsofaether.com/">Rivals of Aether</a> as commentators hyped up the crowd. I was also across from the big surprise of the show, a large display by <a href="https://en.wikipedia.org/wiki/Blockbuster_(Bend,_Oregon)">The Last Blockbuster</a>, with Blockbuster video iconography, merch, and racks of VHS tapes.</p><p>My MEGA65 table was much larger and more welcoming to visitors than it was at VCF Midwest. I&#8217;m grateful to Hans, the show runner, for gifting me two tables, and for lending me a big screen TV. And I got to hang up the banner! Even in this back corner of the show floor, the MEGA65 drew a lot of attention, and I spent nearly all of the first day on my feet, answering questions, shaking hands, and handing out cards and mousepads. Several people from press outlets wanted interviews. If the fire alarm hadn&#8217;t gone off in the middle of the day, I may never have had a break for lunch. The second day was quieter, but I still had quite a few kids stop by for a round of <a href="https://files.mega65.org/?id=0f619bcf-63f0-43d5-b938-0ae6b87f4917">Unicone</a> or <em>First Shot</em>.</p><div id="youtube2-GUz5R3fmKuI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;GUz5R3fmKuI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/GUz5R3fmKuI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>It was especially gratifying to see young people take an interest in the MEGA65. Some of them already knew what it was and were excited to see it in person, some dragged their parents over to the table for a look, and several sat down at the computer for long stretches of time to peruse the demo disks and write short programs. I talked to MEGA65 owners and wannabe owners, and plenty of people simply intrigued by an 8-bit style computer that seemed familiar but unlike anything they&#8217;d seen before. I got to introduce many people to the stories of both the Commodore 65 and the MEGA65.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lhfp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lhfp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lhfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg" width="1280" height="1052" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1052,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:673974,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lhfp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Lhfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbbe727-8316-4adb-a60d-8e592eb06a01_1280x1052.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Last Blockbuster.</figcaption></figure></div><h2>New TI-99/4A core</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8X2e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8X2e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8X2e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg" width="960" height="1280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1280,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1296483,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8X2e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8X2e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b1afd52-6422-4499-95e9-9976720a6ec2_960x1280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mega99, a TI-99/4A core by zeldin.</figcaption></figure></div><p>My very first computer was a Texas Instruments TI-99/4A, and now thanks to zeldin, I can recreate those childhood memories! <a href="https://files.mega65.org/?id=a25ce133-ed07-4ef7-8495-179d69c43ed0">Mega99</a> is a TI-99/4A core, written from scratch exclusively for the MEGA65. The core needs <a href="https://ftp.whtech.com/System%20ROMs/MAME/">the ROM files from the MAME project</a> (<code>ti99_4a.zip</code>, <code>ti99_fdc.zip</code>, and <code>ti99_speech.zip</code>) as well as the provided <code>mega99sp.bin</code> file in the root of the SD card. Flash the core to a spare slot in the core selection menu.</p><p>As of this writing, the core is only available for the R6 boards. This is not a matter of hardware capacity, and hopefully zeldin can produce a build for R3 owners in the future.</p><p>Be sure to read the <code>README.md</code> file for installation and usage instructions. The core matches the 99/4A CPU timing by default, and can also run in a turbo mode. And get yourself <a href="http://dunfield.classiccmp.org/ti/usrguide.pdf">the TI-99/4A User&#8217;s Guide</a> to remind yourself how this thing works! Hint: the Mega key is the FUNC key, and many text entry features use it.</p><p>Thank you zeldin for this excellent and nostalgic core!</p><h2>Featured Files</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gc1i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gc1i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 424w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 848w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 1272w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gc1i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9babc91-e467-44c1-a206-32feac847205_1024x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:371956,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gc1i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 424w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 848w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 1272w, https://substackcdn.com/image/fetch/$s_!Gc1i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9babc91-e467-44c1-a206-32feac847205_1024x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Shodan, by Drex.</figcaption></figure></div><p>Here are some recent demos uploaded to Filehost worth checking out:</p><ul><li><p><a href="https://files.mega65.org/?id=26c503ff-571c-44a2-af02-46e8a5d8476d">Shodan</a>, by Drex.</p></li><li><p><a href="https://files.mega65.org/?id=ce0c4812-5eab-428b-b220-524f6324c507">3D functions</a> and <a href="https://files.mega65.org/?id=032a01e4-219c-450d-9dee-051dbd7c8133">Patterns</a>, by adorigatti.</p></li><li><p><a href="https://files.mega65.org/?id=1b20b366-9177-4739-8420-c74f911a7202">HyperBallad</a>, by MirageBD.</p></li></ul><h2>Joytest65</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U3ud!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U3ud!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 424w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 848w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 1272w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U3ud!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png" width="1040" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1040,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:311578,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U3ud!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 424w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 848w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 1272w, https://substackcdn.com/image/fetch/$s_!U3ud!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa947461c-d2ad-4893-9fb6-176fb6b776e4_1040x834.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">joytest65, a joystick and paddle tester for the MEGA65.</figcaption></figure></div><p>This month&#8217;s Digest is all about joystick and paddle programming, so I made a joystick and paddle tester app to go with it. It includes documentation and assembly language source code.</p><ul><li><p><a href="https://files.mega65.org/?id=671054f3-45ed-4b88-957c-fd7a55c67b2d">Download joytest65 from Filehost</a>.</p></li></ul><h2>The 9-pin connector</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zVu7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zVu7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zVu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg" width="1280" height="755" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:755,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:249077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zVu7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zVu7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46bb709-245f-4195-8e8d-233bf100534b_1280x755.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGA65 joystick ports, and a peripheral connector.</figcaption></figure></div><p>The C64 was one of several early computers that adopted the <a href="https://en.wikipedia.org/wiki/Atari_joystick_port">Atari joystick port</a> standard from the <a href="https://en.wikipedia.org/wiki/Atari_2600">Atari 2600</a> (1977), and supported the use of Atari game controllers to play C64 games. I&#8217;m most familiar with the classic <a href="https://en.wikipedia.org/wiki/Atari_CX40_joystick">Atari CX40 joystick</a>, but there were <a href="https://www.ataricompendium.com/game_library/controllers/controllers.html">many others</a>, and everyone has a favorite. Commodore used the Atari-style controller connector on everything from the VIC-20 to the Amiga, and they intended the C65 to have two 9-pin peripheral ports, just like the C64. The MEGA65 has two 9-pin peripheral ports on the left-hand side.</p><p>Nintendo released the NES in the USA with a proprietary controller connector and more buttons, and the game console arms race that followed produced more custom connectors, more buttons, and more evolutions in game design language. Commodore made two attempts to follow suit in their final years, both using new protocols over the original Atari-style connector: the <a href="https://en.wikipedia.org/wiki/Commodore_64_Games_System">C64GS</a> and the <a href="https://en.wikipedia.org/wiki/Amiga_CD32">Amiga CD32</a>. These protocols were backwards compatible with older Commodore computers, and the new consoles also supported the one-button controllers and ran compatible games.</p><p>Commodore also made several types of computer mice that used the 9-pin connector, especially the 1351 mouse for the 8-bit computers, and the Amiga mouse. As you probably know by now, your MEGA65 supports both types of mice, using built-in adapter logic to make the Amiga mouse appear to software as a 1351. See the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">User&#8217;s Guide, 2nd edition</a>, for information on how to configure the mouse emulation mode. We won&#8217;t cover the mice protocols in this issue of the Digest.</p><p>What follows is a description of how Atari and Commodore computers use the 9-pin connector for game controllers. Other 8-bit computers and early game consoles used the connector, but not necessarily the same wiring or protocols.</p><h2>Joystick fundamentals</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n8FW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n8FW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 424w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 848w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 1272w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n8FW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png" width="261" height="174" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:174,&quot;width&quot;:261,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10996,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n8FW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 424w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 848w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 1272w, https://substackcdn.com/image/fetch/$s_!n8FW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49b0211e-4c67-4de2-a903-4bac9ded564b_261x174.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The 9-pin connector and port, with pins numbered.</figcaption></figure></div><p>A standard 9-pin one-button joystick tells the computer that the action button is being pressed by connecting pin #6 to pin #8 (the ground pin, labeled &#8220;GND&#8221;). This doesn&#8217;t require any fancy electronics, it&#8217;s typically just a button connected to these two pins. When the player presses down on the button, two pieces of metal in the button make contact, completing an electronic circuit. When the player releases the button, a mechanical spring-like action separates the two pieces of metal, breaking the circuit and signaling to the computer that the button was released. This kind of button is also known as a <em>momentary switch.</em></p><p>Pins #1, #2, #3, and #4 work similarly, representing the joystick directions up, down, left, and right, respectively, when connected to pin #8. The joystick indicates a diagonal direction by completing two circuits simultaneously, such as up and left. Typically, there are no fancy electronics involved here either. The joystick is built such that when the user pushes on the stick, it closes one or two momentary switches wired to those pins.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YUtz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YUtz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YUtz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg" width="1213" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1213,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:275829,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YUtz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YUtz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81f32761-e6ff-4a56-877a-97366491301d_1213x560.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Inside an Atari CX40 joystick. It's just membrane switches.</figcaption></figure></div><p>Within the MEGA65, these pins are connected to the Complex Interface Adapter (CIA) chip, which translates these electronic signals into register values that can be read by a program. Try this: connect a joystick to port 2, and run the following simple program:</p><pre><code><code>10 PRINT PEEK($DC00)
20 GOTO 10</code></code></pre><p>The program prints the number 127 repeatedly. Move the joystick and press the fire button. The number changes depending on which buttons are pressed.</p><p>This register value is a bit field, where each button is assigned to a bit. If the button is not pressed, the bit is 1 (&#8220;high&#8221;). If the button is pressed, the bit is 0 (&#8220;low&#8221;). This is why the register value is 127 when no buttons are pressed: all of the bits associated with the buttons are &#8220;held high&#8221; until they are &#8220;pulled low&#8221; by the button presses. (The register has additional bits not connected to the joystick pins.)</p><p>The one-button 8-direction joystick protocol can be summarized as follows:</p><ul><li><p>Buttons connect pin to GND; CIA bit = 0 when pressed</p></li><li><p>Pin #1: Up, CIA bit 0</p></li><li><p>Pin #2: Down, CIA bit 1</p></li><li><p>Pin #3: Left, CIA bit 2</p></li><li><p>Pin #4: Right, CIA bit 3</p></li><li><p>Pin #6: Fire, CIA bit 4</p></li><li><p>Pin #8: Ground (GND)</p></li></ul><pre><code><code>%01111111 = 127

%01111110 = 126: up
%01111010 = 122: up and left
%01101010 = 106: up, left, and fire</code></code></pre><p>It is the program&#8217;s responsibility to read these register values, do the math, then change the game state appropriately, such as to move the player sprite around the screen.</p><p>Like the C64, the MEGA65 has two CIA chips. Only the first CIA is used to read the joystick ports. And yes, these are the same CIA chips that provide <a href="https://dansanderson.com/mega65/racing-the-beam/">timers and other features</a>.</p><h3>The CIA and port 1</h3><p>Register $DC00 represents joystick port 2. To read the status of joystick port 1, you read register $DC01.</p><p>C64 owners remember this one: with a joystick connected to port 1 and the cursor at the <code>READY</code> prompt, you can get junk to show up on the screen just by jiggling the stick around. This is no longer true with the MEGA65 in MEGA65 mode (as of release v0.96), but you can still reproduce this in <code>GO64</code> mode or the C64 core. Try it!</p><p>The C64 uses the CIA chip connected to the joystick ports for multiple purposes. This includes reading the keyboard. When you type on the keyboard, it pulls down the CIA bits in certain patterns, just like a joystick on port 1 does. This is why, when the C64 is expecting keyboard input, a joystick in port 1 moving around can seem like typing. Even though you can prevent this effect in code for a game, many C64 games simply assumed that most people would keep their joystick connected to port 2.</p><p>The MEGA65 is better behaved because its keyboard handling uses a different mechanism that is not as reliant on the CIA chip. A couple of specific functions still test the CIA for specific key presses, but in general, port 1 joystick events are much less likely to interfere with the keyboard.</p><h3>Reading the joystick from BASIC 65</h3><p>BASIC 65 provides a handy function for reading the state of the joysticks. The <code>JOY(port)</code> function returns a value that represents joystick activity on the requested port (1 or 2). Instead of a bit field, the <code>JOY()</code> function returns a number from 0 to 8, where 0 means the joystick is in the center, and 1 through 8 are the eight directions counting clockwise from &#8220;up.&#8221; When the button is pressed, it adds 128 to this value. See the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">User&#8217;s Guide</a> for a table and example program.</p><pre><code><code>10 PRINT JOY(2)
20 GOTO 10</code></code></pre><p>As of ROM beta version 920397, the <code>JOY()</code> function can also read both joystick ports simultaneously, and report a merged result. To request this, use a port number of &#8220;3&#8221;: <code>JOY(3)</code>. This is intended solely to allow a game to work with a single joystick in either port, so the player doesn&#8217;t have to change their joystick connections to play. It does not return a useful result when two joysticks are connected and moved simultaneously. If your game uses two joysticks, use <code>JOY(1)</code> and <code>JOY(2)</code> separately. This feature will be in the next MEGA65 stable release.</p><p>A machine code program can read the state of the joystick by accessing the CIA registers and interpreting the bits directly. For best results, such a program must take <a href="https://dansanderson.com/mega65/racing-the-beam/">interrupts</a> into account if it leaves the <a href="https://dansanderson.com/mega65/kernal-of-truth/">KERNAL interrupt handler</a> active.</p><p>The KERNAL interrupt handler messes with the CIA registers many times per second to process certain keyboard events. A program wanting a clean read of the CIA register must disable interrupts to prevent the handler from messing up the result.</p><p>The program has to tell the CIA chip to ignore the state of the keyboard when reading the joystick. I won&#8217;t cover how this works in detail, just know that the way to do this is to write the value $FF to the data register ($DC00 or $DC01) before reading it.</p><p>Here&#8217;s the complete sequence for a clean read of port 2 in assembly language:</p><pre><code><code>sei        ; Disable interrupts
lda #$ff
sta $dc00  ; Lock out the keyboard lines on port 2
lda $dc00  ; A = port 2 pin state
cli        ; Re-enable interrupts</code></code></pre><h2>Paddle pairs and potentiometers</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hmeL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hmeL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hmeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg" width="1456" height="529" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:529,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:266853,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hmeL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hmeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4b8a6c3-992d-441c-9681-107817e1a968_1584x575.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Paddles made by Commodore, and by Atari.</figcaption></figure></div><p>In addition to joysticks, the Atari controller standard also supports a <a href="https://en.wikipedia.org/wiki/Paddle_(game_controller)">paddle controller</a>. A paddle uses a dial-like wheel instead of a joystick. A game can detect how far the wheel is turned by reading more registers. This controller is called a &#8220;paddle&#8221; after the seminal home computer game <a href="https://en.wikipedia.org/wiki/Pong">Pong</a>, which used such a controller to manipulate a paddle in a virtual game of ping pong.</p><p>Each joystick port supports <em>two</em> paddles, each with its own dial and fire button. The MEGA65, Commodore 64, and Atari 2600 all have two joystick ports, for up to four paddle players. The two dial-like controls are also used together by peripherals such as light pens or mice, where the two inputs represent movement along X and Y axes.</p><p>The paddle protocol is different from the joystick protocol. Electronically, the fire buttons are wired to joystick port pins #2 for the first paddle and #3 for the second paddle, connecting them to pin #8 (GND) when pressed. A program can read these pins using the CIA data registers, just like reading the joystick. The register bits read 0 when the button is pressed.</p><p>The paddle dial itself is a <em>potentiometer</em>, also known as a <em>variable resistor</em> or &#8220;pot.&#8221; Instead of simply connecting or disconnecting the path between two pins like the fire button, the potentiometer forms an electrical connection between two pins through an amount of electrical resistance that the computer can measure. When the player turns the knob, the amount of resistance changes, indicating the position of the dial. The first paddle on a port connects signal pin #5 (&#8220;POTX&#8221;) to pin #7, where the computer provides a voltage of +5V. The second paddle on the port uses signal pin #9 (&#8220;POTY&#8221;) and pin #7.</p><p>The paddle protocol:</p><ul><li><p>Potentiometers connect pin to +5V</p></li><li><p>Buttons connect pin to GND; CIA bit = 0 when pressed</p></li><li><p>Pin #2: Paddle A button, CIA bit 1</p></li><li><p>Pin #3: Paddle B button, CIA bit 2</p></li><li><p>Pin #5: Paddle A analog (POTX)</p></li><li><p>Pin #7: +5V</p></li><li><p>Pin #8: Ground (GND)</p></li><li><p>Pin #9: Paddle B analog (POTY)</p></li></ul><h3>Resistor values and register values</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!opig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!opig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 424w, https://substackcdn.com/image/fetch/$s_!opig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 848w, https://substackcdn.com/image/fetch/$s_!opig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!opig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!opig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg" width="1297" height="843" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:1297,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:429325,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!opig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 424w, https://substackcdn.com/image/fetch/$s_!opig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 848w, https://substackcdn.com/image/fetch/$s_!opig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!opig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfffd878-3eab-4bbe-85c6-e91ec527b53d_1297x843.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The inside of Commodore and Atari paddles. My Commodore paddles appear to be unusual, with a 200 k&#937; potentiometer and a smoothing capacitor. My Atari paddles have a 1 M&#937; potentiometer, and no cap.</figcaption></figure></div><p>Strangely, Commodore used a different potentiometer in their own paddles compared to the ones by Atari, and the two paddle types produce different numbers when accessed from a Commodore program. It is <a href="https://www.atariarchives.org/ecp/chapter_4.php">generally understood</a>, and <a href="https://www.breadbox64.com/blog/paddle-battle/">some have measured</a>, that Commodore paddles use a potentiometer rated at 470 k&#937; (kilo-ohms), and Atari paddles are rated at 1 M&#937; (mega-ohms), with the measured resistance range a bit less but on that order of magnitude. This means that when an Atari paddle is connected to a Commodore, turning the knob goes from the minimum value to the maximum value in half the rotational distance (half the &#8220;throw&#8221;) than an official Commodore paddle. In practice, this can be both good and bad: shorter throw can result in faster play, but with less accuracy and a large &#8220;dead zone&#8221; where the resistance is above the maximum recognized by the computer.</p><p>I wanted to know the actual resistance value range recognized by the MEGA65, so I started by measuring the resistance of my Commodore and Atari paddles with an ohmmeter. What I discovered was a bit of a surprise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2vJS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2vJS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2vJS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg" width="1000" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:315805,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2vJS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2vJS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a14dbc8-aea3-4203-840f-9ef4d0b4f2e1_1000x800.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Measuring the resistance values of my Commodore and Atari paddles with an ohmmeter. My Commodore paddles measured from 44 &#937; to 166 k&#937;, and my Atari paddles measured from 124 &#937; to 782 k&#937;. I put a piece of tape on the dial to illustrate the turn range.</figcaption></figure></div><p>I took some ohmmeter measurements of my Commodore and Atari paddles, and also tested the values returned by the BASIC 65 <code>POT()</code> function, which returns a value from 0 to 255 based on the dial setting. Both paddles had a minimum resistance in the fully clockwise position, then increased counter-clockwise to their maximum. The Commodore paddles measured a minimum of 44 &#937; to a maximum of 166 k&#937;. The <code>POT()</code> function returned a value of 220 at the maximum, not the full 255. Atari paddles had a higher resistance of 124 &#937; at minimum to 782 k&#937; at maximum. Here, the <code>POT()</code> function returned the full 255 after only a third of a turn, with a whopping dead zone of two thirds of a rotation, returning 255 for that portion.</p><p>So I opened the cases of both sets of paddles, and discovered that my Commodore paddles have a potentiometer rated at 200 k&#937;, far less than the 470 k&#937; that others have reported. My Commodore paddles also have a capacitor in parallel with the signal lines, which smoothes out the signal and shouldn&#8217;t affect the DC resistance, but is notable because it is absent from other paddles. I asked some friends to open theirs and they all reported 470 k&#937; pots, so I must have some weird ones.</p><p>While it&#8217;s reasonable in the abstract that a Commodore program should be able to detect the full range of motion of the Commodore paddle knob, it may have turned out to be unreasonable in practice. A game expecting the full value range to represent a full turn of the knob might be unplayable with Atari paddles, and vice versa. Perhaps Commodore decided to split the difference at some point and changed to a 470 k&#937; potentiometer, and I just happen to have an earlier model of the paddles.</p><p>Of course, it's possible that a previous owner of my paddles replaced the pots with the unusual values and these didn't come from Commodore.</p><h3>Reading paddles from BASIC 65</h3><p>As with joysticks, BASIC 65 has a function for reading paddles: <code>POT(paddle)</code> returns a paddle position as a number between 0 and 255, and adds 256 if the paddle&#8217;s button is pressed. The paddles on joystick port 1 are #1 and #2, and the paddles on joystick port 2 are #3 and #4.</p><pre><code><code>10 PRINT POT(1), POT(2), POT(3), POT(4)
20 GOTO 10</code></code></pre><h3>The MEGA65 paddle registers</h3><p>The MEGA65 has dedicated circuitry and registers for reporting the four paddle values. A MEGA65 machine code program can read these values directly from registers.</p><ul><li><p>$D620: Port 1, paddle X</p></li><li><p>$D621: Port 1, paddle Y</p></li><li><p>$D622: Port 2, paddle X</p></li><li><p>$D623: Port 2, paddle Y</p></li></ul><p>The fire buttons on the two paddles work just like joystick buttons, and can be read directly from the CIA data register for the appropriate port.</p><p>That's all a MEGA65 programmer needs to know. On the C64, the process is a little more elaborate, and it's interesting to know why.</p><h3>Reading paddles the old-fashioned way</h3><p>The CIA chip only knows how to handle digital signals (1&#8217;s and 0&#8217;s), and can&#8217;t read a resistance value (an analog value in a range). Instead, it gets the help of another chip in the chipset more familiar with converting between analog and digital signals: the SID sound chip.</p><p>To read a paddle value, a program first tells the CIA to connect the SID to one of the joystick ports. The program must then wait briefly before reading the value from a SID register. The SID needs a small amount of time to read the resistance value and update the register. During this time, the SID charges an internal capacitor that is connected to the signal and voltage lines of the controller. Once it is charged, the SID flips to a different circuit that discharges it. The SID determines the resistance of the paddle controller from the amount of time it takes to perform this charge-discharge process. To convert this to a value between 0 and 255, the SID needs 512 CPU cycles. At the end of this time, the SID updates its register value.</p><p>512 machine cycles at a rate of 1 MHz takes about 1/1950th of a second. That doesn't sound like a lot, but it can be a long wait for an action game, over 10% of the time it takes to draw a frame of graphics. Of course, the program is welcome to do other things during this time. A game loop could set the CIA select bits at the beginning of the frame, then read the paddle values near the end of the game logic, adding a busy-wait at the end as needed.</p><p>The SID can only be connected to one joystick port at a time. To read paddles from both ports, a program must connect to the first port, wait the 512 cycles, read the SID registers, then connect to the second port, wait another 512 cycles, and read the SID registers again. A game that reads all four paddles may or may not need to be clever to use the waiting time wisely, depending on how much time the game needs per frame.</p><p>If the program leaves the SID connected to a single port and takes over the hardware interrupt vectors (such that the KERNAL interrupt handler isn&#8217;t messing with the CIA connections), it can skip the wait and just read the SID register at its convenience. The register will contain the last stable value.</p><p><a href="https://www.c64-wiki.com/wiki/Paddle">The C64 Wiki page on paddles</a> has a diagram of the <a href="https://en.wikipedia.org/wiki/RC_circuit">resistor-capacitor circuit</a> that the SID is using to measure the resistance value in the controller. I was confused at first because the diagram makes it look like the capacitor is provided by the paddle controller, outside of the joystick port. This is not the case: the SID provides the capacitor part of the RC circuit. The capacitor present in my Commodore paddles bridges the +5V and signal lines, and is there for smoothing purposes and is not part of the RC timing circuit. Other paddles don&#8217;t have the smoothing capacitor.</p><h3>The C64 way to read paddles from machine code</h3><p>A C64 machine code program must perform the full procedure to read an analog value from the SID chip: select the port to connect the SID chip, wait briefly, then read the result from a SID register.</p><p>To select the port, set bits 6 and 7 of register $DC00: for joystick port 1, set bit 6 = 1 and bit 7 = 0; for joystick port 2, set bit 6 = 0, bit 7 = 1. This is the same address as the CIA data register for reading joystick pins on port 2, but you use this address even when connecting the SID to joystick port 1. That's just how the CIA chip is wired.</p><p>The program then waits briefly for the SID to get the value. On a C64, this relatively easy: perform a busy-wait loop for some number of iterations. Based on a reference table of cycle counts per instruction, you probably only need 103 or so repetitions of a loop, but it doesn&#8217;t hurt to wait longer. The C64 CPU runs at 1 MHz, so 512 CPU cycles is sufficient.</p><p>(The MEGA65 normally runs its CPU at 40 MHz. To reproduce the SID reading procedure, you have two options: temporarily down-clock the CPU to 1 MHz for the busy-wait, or perform the busy-wait loop 40 times. Note that instruction cycle counts differ on the 45GS02 CPU than on the 6502.)</p><p>After the delay, the values of the two paddles can be read from SID registers $D419 and $D41A. The ROM code that implements the BASIC POT() function takes an additional step to <em>debounce</em> the register value, which just means to wait until two consecutive reads of the register return the same value.</p><p>Here is code for the complete procedure, reading the state of both paddles on port 2:</p><pre><code><code>    ; Disable interrupts
    sei

    ; Down-clock MEGA65 CPU to 1 MHz
    ; FAST $D031.6 -&gt; 0
    lda #$40
    trb $d031

    ; Connect SID to port 2 analog inputs
    lda #%10000000
    sta $dc00

    ; Wait for SID to read, ~512 1 MHz cycles
    ldx #$00
-   inx
    bne -

    ; Read port 2 paddles, with debounce
-   lda $d419
    cmp $d419
    bne -
    sta paddle2a

-   lda $d41a
    cmp $d41a
    bne -
    sta paddle2b

    ; Reset MEGA65 CPU to 40 MHz
    ; FAST $D031.6 -&gt; 1
    lda #$40
    tsb $d031

    ; Re-enable interrupts
    cli

; ...

paddle2a:  !byte $00
paddle2b:  !byte $00</code></code></pre><h2>Two buttons&#8212;and why not a third</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qVlQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qVlQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qVlQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg" width="1000" height="882" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:882,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:153800,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qVlQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qVlQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52279f58-8b7e-4fb7-b264-8f06c2ea6557_1000x882.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Cheetah Annihilator two-button joystick. Photo from c64-wiki.de.</figcaption></figure></div><p>The <a href="https://en.wikipedia.org/wiki/Commodore_64_Games_System">Commodore 64 Games System</a> (1990), aka the C64GS, repackaged the C64 into a keyboard-less console box. To enhance the console&#8217;s gaming potential, the <a href="https://www.c64-wiki.de/wiki/Cheetah_Annihilator">Cheetah Annihilator joystick</a> had two buttons: a trigger button in the joystick grip, and a second button that could be detected separately in the base. This two-button protocol worked over the 9-pin connector and could be supported by any C64 game that knew about it. Only a few games were written to support it.</p><p>Math wizards may notice that all nine of the joystick port pins have been assigned: up, down, left (or paddle A button), right (or paddle B button), paddle B (&#8220;POTY&#8221;), fire, +5V, GND, and paddle A (&#8220;POTX&#8221;). That&#8217;s nine. So how is the second button connected?</p><p>In the two-button protocol, the second button uses paddle A&#8217;s analog line (pin #9, &#8220;POTX&#8221;). Unlike the other joystick buttons that connect their respective pins to pin #8 (GND, &#8220;pulled low&#8221;), this button connects pin #9 to pin #7 (+5V, &#8220;pulled high&#8221;), with a current-limiting resistor to protect the sensitive CIA and SID chips. (One <a href="https://www.c64-wiki.com/wiki/Control_Port">recommended resistance value</a> I&#8217;ve seen is 270-330 ohms.) To a program, a button press looks like a paddle dial flipping between its minimum and maximum positions.</p><p>The Cheetah Annihilator only had two action buttons, but if someone were to add a third button to such a controller, it would have an easy way to connect: just use the other paddle line (pin #5, &#8220;POTY&#8221;). This three-button protocol was uncommon in vintage joysticks, but is <a href="http://wiki.icomp.de/wiki/DE-9_Joystick">generally accepted</a> by controller modders and homebrew controller makers, because it&#8217;s a natural extension of the two-button protocol, and doesn&#8217;t require fancy electronics beyond the button and safety resistor.</p><p>The three-button protocol:</p><ul><li><p>Pin #1: Up, CIA bit 0</p></li><li><p>Pin #2: Down, CIA bit 1</p></li><li><p>Pin #3: Left, CIA bit 2</p></li><li><p>Pin #4: Right, CIA bit 3</p></li><li><p>Pin #5: Button C, via POTX</p></li><li><p>Pin #6: Button A, CIA bit 4</p></li><li><p>Pin #7: +5V</p></li><li><p>Pin #8: Ground (GND)</p></li><li><p>Pin #9: Button B, via POTY</p></li></ul><p>To read the complete state of a three-button controller, simply combine the techniques for joysticks and paddles. Here&#8217;s an example of reading all buttons from port 2 in BASIC:</p><pre><code><code>10 J = JOY(2)
20 D = J AND 128     : REM: THE DIRECTION
30 A = J &gt; 127       : REM: BUTTON A
40 B = POT(3) &lt; 128  : REM: BUTTON B
50 C = POT(4) &lt; 128  : REM: BUTTON C</code></code></pre><p>Reading the additional buttons from machine code is similar to reading the paddle values. A C64 program must still connect the SID to the port, wait for the SID to sense the button value, then read the value from the SID register. A MEGA65 program can just read the paddle registers.</p><h2>Five buttons??</h2><p>An 8-way joystick with two or three action buttons brings Commodore gaming one step forward in 1980&#8217;s game design language. Math wizards may notice that the NES gamepad has not three but <em>four</em> buttons: A, B, Start, and Select. Can we support all four with minimal changes to the protocol?</p><p><a href="https://github.com/crystalct/5plusbuttonsJoystick">5plusbuttonsJoystick</a>, by crystalct, specifies a five-button protocol using a neat trick: button #4 triggers &#8220;up&#8221; and &#8220;down&#8221; simultaneously, and button #5 is &#8220;left&#8221; and &#8220;right.&#8221; A normal joystick can&#8217;t activate these opposing directions at the same time, so they uniquely identify the buttons. This scheme has the disadvantage of not being able to use buttons #4 and #5 simultaneously with the joystick&#8212;pressing button #4 and &#8220;up&#8221; at the same time would only register the button&#8212;but they can still plausibly be used as Start and Select buttons, which aren&#8217;t typically combined with other buttons during play.</p><p>crystalct has published the schematic and board design for a joystick that supports this protocol, and you can <a href="https://www.pcbway.com/project/shareproject/DIY_5_buttons_joystick_for_Commodore_64_Vic20_autofire_943caf84.html">order the board from PCBWay</a>. It would be easy to hack a NES-style gamepad to support this with just a few wires. The two buttons are easy to detect with the CIA data registers, though they won&#8217;t work with the current version of BASIC 65&#8217;s <code>JOY()</code> function, which interprets the directional buttons to direction values only.</p><p>The project includes a C64 joystick test program also useful for trying out three-button controllers (<a href="https://github.com/crystalct/5plusbuttonsJoystick/blob/main/Joystick5plus1Test.prg">PRG download</a>). It works with the C64 core; I had difficulty running it with the MEGA65 core in GO64 mode. crystalct also <a href="http://wiki.icomp.de/wiki/DE-9_Joystick#C64">personally modded dozens of games</a> to add multi-button features&#8212;though none use the 4th and 5th buttons, as far as I can tell.</p><h2>More buttons and bidirectional protocols</h2><p>Game consoles that followed the NES had seven or eight buttons in addition to the directional pad. How far can we go, using the same 9-pin joystick port?</p><p>The protocols we&#8217;ve discussed so far could all be considered <em>passive</em> protocols: the controller can report the state of the joystick and buttons to the computer by mechanically completing circuits across the connector pins, and the computer does all the work to interpret these input signals. To be able to report more sophisticated inputs using the same pins, we need an <em>active</em> protocol, where the computer not only reads signals from the controller, but also sends signals to the controller. Perhaps it&#8217;d be more accurate to call these <em>bidirectional</em> protocols, because the output signals could be manipulating otherwise &#8220;passive&#8221; digital electronics in the controller, such as a key matrix. These days, microcontrollers are cheap, and modern game controllers contain tiny computers of their own, capable of an active dialog with the host computer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OuPG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OuPG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OuPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg" width="1456" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5960116,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OuPG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OuPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99e2dc41-5831-4cb6-943a-b5fb1c4dbdfb_5460x2880.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Amiga CD32 game controller. Photo from Wikipedia.</figcaption></figure></div><p>The Amiga CD32 game controller provided seven buttons: red, blue, green, and yellow action buttons, left and right shoulder buttons, and one menu button. It used the same 9-pin connector, and did so in a way that allowed the CD32 to support all previous Commodore-compatible passive controllers <em>and</em> allowed the CD32 controller to be used as a passive two-button controller on other Commodores. This required the computer to treat pin #5 as an output pin to select either active or passive mode: the CD32 would hold this pin low relative to the +5V line to request the active protocol&#8212;something other Commodores wouldn&#8217;t do. When in active mode, the computer sends pulses to the controller on pin #6. With each pulse, the CD32 controller rotates through the seven buttons, reporting the status of each button on pin #9. This mechanism is called a <em>shift register</em> and is typically implemented with a common shift register chip in the controller.</p><p>While the backwards-and-forwards compatibility of this design is impressive, it rules out the ability for C64 programs to support a CD32 controller, because the C64 cannot treat pin #5 as an output. Perhaps someday we could add a CD32 controller mode to the MEGA65 core, but there just aren&#8217;t many CD32 controllers around. Would be a fun VHDL experiment, though.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xzcN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xzcN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xzcN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg" width="640" height="451" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43683,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xzcN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xzcN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515cb899-9df4-4563-b56e-a4f21882071b_640x451.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sega Genesis six-button controller. Photo from Wikipedia.</figcaption></figure></div><p>Sega game consoles also used a 9-pin connector, though they did not use Commodore-compatible pin assignments. The <a href="https://en.wikipedia.org/wiki/Master_System">Sega Master System</a> started with <a href="https://segaretro.org/Control_Pad_(Master_System)">a passive two-button controller</a> protocol, and the <a href="https://en.wikipedia.org/wiki/Sega_Genesis">Sega Genesis</a> (aka Mega Drive) added more buttons (first <a href="https://segaretro.org/Control_Pad_(Mega_Drive)">3+1</a> then <a href="https://segaretro.org/Six_Button_Control_Pad_(Mega_Drive)">6+1</a>) with an active protocol: one pin was a dedicated output from the console that marched through two, four, or eight cycles, alternating high and low, and the definition for each of six input pins changed for each cycle. The full state table is a bit complex, trying to be backwards compatible with previous standards. (This appears to be based on timing? I got a bit lost trying to read about it.)</p><p>I always feel obligated to mention: <strong>Do not connect a Sega Master System or Sega Genesis controller directly to a Commodore.</strong> The incompatible wiring protocol could damage the delicate CIA chip. The MEGA65 is a bit more robust in this regard, but the MEGA65 core won&#8217;t assign the pins in a way that matches the controller.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mwaP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mwaP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mwaP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg" width="640" height="648" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:648,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52682,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mwaP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mwaP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed8d83a-38f2-4178-a2de-3a75d9f21f6b_640x648.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">ColecoVision Hand Controller. Photo from Wikipedia.</figcaption></figure></div><p>These newer controllers weren&#8217;t the first to take advantage of bidirectional communication to support more buttons. The <a href="https://en.wikipedia.org/wiki/ColecoVision">ColecoVision Hand Controller</a> sported the usual 8-way joystick, and also a number pad with twelve buttons. Surprisingly, this protocol <a href="https://old.pinouts.ru/Game/colecovision_controller_pinout.shtml">only uses seven of the nine pins</a>, and the computer selects between one-button joystick mode or number pad mode by connecting one of two pins to power. In number pad mode, each button is represented as a combination of the pin signals. For example, when the &#8220;5&#8221; button is pressed in this mode, pins #2 and #3 are pulled low. When the &#8220;4&#8221; button is pressed, pins #1, #2, and #3 are pulled low. This means that only one button can be recognized reliably at a time. If &#8220;4&#8221; and &#8220;5&#8221; are both pressed, only &#8220;4&#8221; is recognized.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IuAc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IuAc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 424w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 848w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 1272w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IuAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif" width="438" height="365" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:365,&quot;width&quot;:438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:968671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IuAc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 424w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 848w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 1272w, https://substackcdn.com/image/fetch/$s_!IuAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F819ecf84-e75b-4310-b5e4-981bff0ccb57_438x365.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Protovision Protopad, conceptual rendering by Protovision.</figcaption></figure></div><p>None of these protocols work with the Commodore 64, and due to the lack of a prevalent commercial implementation, there is no real consensus on a common protocol for Commodore 8-bit computers that supports more than three buttons. One glimmer of hope is the <a href="https://www.protovision.games/shop/protopad/protopad.php">in-progress Protovision Protopad</a>, a project that intends to produce an eight-button controller (four action, two shoulder, two menu) with support for both the passive three-button protocol and a proprietary eight-button protocol, selectable by software. The active protocol uses an elegant and fast multiplexing technique compatible with the C64&#8217;s CIA bidirectional capabilities. It&#8217;s not clear if or when the hardware part of this project will come to fruition, but <a href="https://www.protovision.games/files/Protopad_Development_Guide.zip">the Protopad Development Guide</a> defines the protocol. It&#8217;s a fun read. (Well I think it&#8217;s fun.)</p><p>This brings us back to the topic of MEGA65 mainboard revisions. A Commodore-compatible active protocol game controller would use bidirectional communication over the joystick port data lines, and therefore would require an R6 mainboard. That is, if such a controller existed. I&#8217;m rooting for the Protopad, but in the meantime, I&#8217;m focusing on passive protocol controllers, which work with both R3 and R6 mainboards.</p><h2>Modern game controllers and adapters</h2><p>You can find plenty of vintage Commodore-compatible one-button 9-pin game controllers at flea markets, computer conventions, and online auction websites. Many are still in working order, and hobbyists refurbish and re-sell them. You can also get new 9-pin game controllers ranging from hand-assembled hobbyist projects to limited run Kickstarters to fully manufactured products.</p><p>There are also quite a few hobbyist electronics projects to make adapters for non-Commodore game controllers, both new and vintage, so that they work as Commodore 9-pin game controllers. A few of these implement the three-button protocol, or have a way to switch between multiple protocols. You can buy some of these pre-assembled; others are only available as schematics, and require ordering the parts separately and assembling them with a soldering iron.</p><p>The following are just a few examples of useful and interesting game controllers and adapters.</p><h3>Game controllers</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zc8k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zc8k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zc8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg" width="470" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:470,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29573,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zc8k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zc8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf1ce613-acf0-4a1f-bbab-82242aab9d27_470x292.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGA65-themed one-button + "up" gamepad controller, by RetroGameBoyz.com.</figcaption></figure></div><p><strong>RetroGameBoyz gamepads.</strong> Mike of <a href="https://retrogameboyz.com/">retrogameboyz.com</a> has been making new game controllers for vintage computers since 2017. Mike offers a wide variety of styles, platforms, and configurations. My favorites are the NES-style game pads, which include 9-pin connectors, long cables, and attractive decorative faceplates. Mike even makes <a href="https://retrogameboyz.com/products/mega-65-them-commodore-64-atari-2600-flashback-9-x-controller-joystick-up-to-jump-map-gamepad">a MEGA65-themed game pad</a>! This one supports the one-button protocol, and wires the second action button to &#8220;up,&#8221; which is used as &#8220;jump&#8221; in many C64 platform games. I&#8217;m working with Mike&#8212;well, I&#8217;ve asked Mike and he&#8217;s doing all the work&#8212;to produce a custom MEGA65-themed controller that supports the three-button protocol, for future MEGA65 multi-button games.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oiDA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oiDA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oiDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg" width="886" height="886" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:886,&quot;width&quot;:886,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217196,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oiDA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oiDA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03478f1f-5f12-4f18-8b97-adb8b1ec180c_886x886.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Commotron Gamepad Turbo 2000 Super wireless gamepad controller.</figcaption></figure></div><p><strong>The Commotron wireless gamepad.</strong> The <a href="https://shop.tentelian.com/Commotron-Gamepad-Turbo-2000-Super-p500731320">Commotron Gamepad Turbo 2000 Super</a> is a fully assembled gamepad with two unique properties. For one, it&#8217;s wireless, with a dongle and a range of six meters. And for two, it supports six remappable button layouts including the an &#8220;up&#8221; button in addition to the three-button protocol. It&#8217;s currently sold out in the Commotron store, but they&#8217;re taking pre-orders for more, and <a href="https://retro8bitshop.com/product/new-gamepad-c64-style-wireless/">third-party sellers still have some</a>.</p><p>The Commotron powers on into a mode compatible with the three-button protocol described above, where button &#8220;1&#8221; is the primary fire button. I couldn&#8217;t find the instructions for the Commotron online, so for the benefit of future web searchers:</p><ul><li><p>Buttons: directional pad (up, down, left, right), Map, Auto; and four action buttons, starting right-most going counterclockwise: 1, 2, 3, and &#8220;up.&#8221;</p></li><li><p>Button 1 is the primary fire button, for one-button games. In C64 mode, buttons 2 and 3 are POTX and POTY, respectively. The &#8220;up&#8221; button triggers the &#8220;up&#8221; direction signal, good for &#8220;jump&#8221; in one-button platform games.</p></li><li><p>The controller takes two AAA batteries. The dongle connects to the joystick port and is powered by the computer.</p></li><li><p>Both the controller and the dongle have a light on them:</p><ul><li><p>Off: no power, or in standby mode.</p></li><li><p>Blinking: waiting to connect.</p></li><li><p>On: connected.</p></li></ul></li><li><p>To connect, press the Auto button.</p></li><li><p>To select a preset, hold the Map button and press a direction:</p><ul><li><p>Left: Commodore/ZX Spectrum mode (the default). POTX and POTY connect to +5V when active, per the three-button protocol.</p></li><li><p>Up: Amiga and Atari ST mode. These computers connect these pins to GND when active.</p></li><li><p>Right: Atari 7800 mode. Buttons 1 and 2 are &#8220;right&#8221; fire; button 3 is &#8220;left&#8221; fire.</p></li></ul></li><li><p>You can swap the functions of button 1 and the &#8220;up&#8221; button. To swap, hold Map and press Down.</p></li><li><p>You can enable auto-fire to have the buttons trigger repeatedly while held down. To toggle auto-fire mode, press Auto. To change the fire rate, hold Map and press an action button:</p><ul><li><p>Button 1: 3 clicks per second</p></li><li><p>Button 2: 5 clicks per second</p></li><li><p>Button 3: 8 clicks per second</p></li><li><p>Button &#8220;up&#8221;: 13 clicks per second</p></li></ul></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jvTV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jvTV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jvTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg" width="750" height="750" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:750,&quot;width&quot;:750,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70522,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jvTV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jvTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5109abf7-f979-4789-bafb-4a57e62c7034_750x750.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Atari decanter set.</figcaption></figure></div><p><strong>Neo-Atari controllers.</strong> <a href="https://atari.com/">The modern-day company that owns the Atari trademark</a> has made a largely successful play for our nostalgia-filled hearts with recreations of vintage consoles with varying degrees of authenticity and modernity. This includes new versions of the classic 9-pin game controllers, including the <a href="https://atari.com/products/cx40-joystick">CX40+ joystick</a>, the <a href="https://atari.com/products/cx30-paddle-controller">CX30+ paddles</a>, and the <a href="https://atari.com/products/cx78-gamepad">CX78+ two-button gamepad</a>. (We didn&#8217;t get the Atari CX78 in the USA back in the day, so this is news to me!) <a href="https://atari.com/products/wireless-cx40-joystick-atari">Wireless models of the CX40+</a> and <a href="https://atari.com/products/wireless-cx78-gamepad-atari">the CX78+</a> are available for pre-order, and will include both 9-pin and USB-A wireless dongles, so you can use them with emulators on a PC <em>and</em> with vintage and retro hardware. I haven&#8217;t tested this model of paddles yet and would expect them to support the Atari resistance range.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VDo2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VDo2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VDo2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg" width="1000" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43399,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VDo2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VDo2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9ec8706-8c87-4523-8d9c-1f9fc2e310d0_1000x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Hyperkin Ranger one-button gamepad, with paddle knob.</figcaption></figure></div><p><strong>Hyperkin 9-pin controllers.</strong> <a href="https://hyperkin.com/">Hyperkin</a> makes a series of retro gaming consoles, as well as game controller peripherals for consoles old and new. Two of their controllers are compatible with Commodore and Atari computers. The <a href="https://www.amazon.com/Hyperkin-Trooper-Controller-not-machine-specific/dp/B07M5HYTZL">Hyperkin Trooper</a> most resembles the classic Atari CX40, with the fire button duplicated for left-handed and right-handed play. The <a href="https://www.amazon.com/Hyperkin-Premium-Gamepad-not-machine-specific/dp/B08227NQ3Z">Hyperkin Ranger</a> is a gamepad-style controller with one fire button, and even includes a single paddle wheel in a unique design. The Ranger also supports left-handed and right-handed play with a switch. Both the Trooper and the Ranger are in stock at Amazon.com.</p><p>Note: The Ranger&#8217;s paddle wheel is <em>useless</em> on Commodores. The potentiometer covers the full Atari range, 0 &#937; to 1 M&#937;. Less than a fifth of the throw registers between 0 and 255 with the SID, worse than an Atari paddle. I can barely get a middle value to register in my joystick-paddle tester, and can&#8217;t imagine using this paddle knob for Commodore gaming.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jfMY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jfMY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jfMY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg" width="1456" height="1335" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1335,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:319711,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jfMY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jfMY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e708730-29da-445e-a6fc-25b7132e6579_1992x1826.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The ArcadeR modern joystick, with arcade-quality parts.</figcaption></figure></div><p><strong>Ultimate ArcadeR Classic.</strong> The <a href="https://ultimatemister.com/product/ultimate-joystick-arcader-sanwa-db9-black/">ArcadeR</a> is a one-button protocol 9-pin joystick built to last. It uses arcade-quality parts and is designed to be repairable and moddable, including auto-fire options. The joystick has quite a bit of travel, for better and for worse, and the switches make satisfying click sounds.</p><h3>Controller adapters</h3><p><strong>Retro Rewind C64 Genesis adapter.</strong> This pre-assembled adapter <a href="https://retrorewind.ca/64-amiga-genesis-adapter">converts a Sega Genesis controller to a C64/Amiga controller</a>. It supports both the one-button + &#8220;up&#8221; button configuration and a C64GS-style two-button configuration, selectable by a jumper (a little metal piece you push onto some pins on the adapter). Another jumper changes which pin is used for the second action button: POTX for &#8220;C64&#8221; mode and POTY for &#8220;Amiga&#8221; mode. Use this with a vintage Sega Genesis controller, or combine it with the <a href="https://www.8bitdo.com/retro-receiver-genesis-mega-drive/">8BitDo wireless Genesis-compatible controller</a> for cable-free multi-button gaming.</p><p><strong>sega-adapter.</strong> If you&#8217;re handy with a soldering iron, the <a href="https://github.com/eyvind/sega-adapter">sega-adapter project</a> is a Sega Genesis controller adapter with some cool features. It supports both the one-button + &#8220;up&#8221; protocol and the three-button protocol, and you can switch between them by holding the Start button. This project was tested extensively with the <a href="https://www.8bitdo.com/retro-receiver-genesis-mega-drive/">8BitDo wireless Genesis-compatible controller</a>. The microcontroller code is open source, so you can customize it with your own features. Note the special instruction to invert the 2nd and 3rd button signals to comply with the C64 version of the three-button protocol.</p><p><strong>mouSTer.</strong> I would put the <a href="https://github.com/willyvmm/mouSTer?tab=readme-ov-file">mouSTer multi-function USB 9-pin adapter</a> at the top of my list for lots of reasons, except they&#8217;re sold out everywhere, and not available as a DIY board either. This clever versatile device is the best way to connect a modern USB mouse to the MEGA65 or other Commodores, and it also adapts USB gamepads and joysticks with support for the three-button protocol, as well as crystalct&#8217;s 5plusbuttonsJoystick protocol. It&#8217;s highly configurable: to upload new configuration, put <a href="https://github.com/willyvmm/mouSTer/blob/main/MOUSTER.INI">a configuration file</a> on a USB stick and shove the stick into the adapter. I love it, but yeah, it&#8217;s currently unavailable.</p><p><strong>Unijoysticle 2.</strong> <a href="https://github.com/ricardoquesada/unijoysticle2">This bare board project</a> connects to both joystick ports simultaneously, and pairs with any modern Bluetooth game controller. The C64 model supports the three-button protocol and the 5plusbuttonsJoystick protocol. Normally for sale on Tindie, this one is also <a href="https://www.tindie.com/products/riq/unijoysticle-2-c64-gamepad-for-commodore-64/">out of stock</a>, though designs are available under an open hardware license so you can make your own.</p><p><strong>SNES controller adapters.</strong> <a href="https://snes2c64.readthedocs.io/en/latest/">snes2c64</a> and <a href="https://github.com/Hojo-Norem/PadSwitcher64">PadSwitcher64</a> are two projects with interesting takes on multi-button support. snes2c64 adapts the six-button SNES controller to a three-button C64 controller, using a programmable Arduino Nano for custom button mapping and auto-fire options. PadSwitcher64 connects to <em>both</em> 9-pin joystick ports to support all six SNES buttons with a proprietary passive protocol.</p><div><hr></div><p>I&#8217;m most excited about the possibility of the three-button protocol for MEGA65 games. It&#8217;s relatively easy to find pre-assembled controllers, easy to implement in software and modified hardware, compatible with both R3 and R6 mainboards, and is the closest thing we have to an implemented standard for multi-button Commodore-compatible game controllers. I&#8217;ll let you know what Mike and I come up with for controllers and software support. If you can get your hands on a Commotron, or are handy enough to build a sega-adapter, those are also good options.</p><p>Give <a href="https://files.mega65.org/?id=671054f3-45ed-4b88-957c-fd7a55c67b2d">joytest65</a> a try and let me know how it works for your game controllers.</p><p>Happy gaming!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[Greetings from Chicagoland]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for September 2024]]></description><link>https://m65digest.substack.com/p/greetings-from-chicagoland</link><guid isPermaLink="false">https://m65digest.substack.com/p/greetings-from-chicagoland</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Mon, 16 Sep 2024 21:33:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e3UA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e3UA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e3UA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e3UA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:377795,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e3UA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e3UA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3fc8c51-0b09-46f8-a301-ca53d0800883_640x480.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Eat Pizza, from Giordano's in Schaumburg, Illinois</figcaption></figure></div><p>It&#8217;s a busy month! I just got back from the Vintage Computer Festival Midwest (VCFMW), the large-and-getting-larger-every-year vintage computer show. This was my first visit at this particular show, and it was great fun. I bring back a few photos, a few stories, and too much stuff from the free table.</p><p>But first, the news.</p><h2>Catching up on pre-orders; mainboards now available separately</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bLDd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bLDd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bLDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:175099,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bLDd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bLDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F948346cb-683c-4e68-9b7e-e8740fd4d826_1200x675.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 mainboard, now available separately</figcaption></figure></div><p>Trenz Electronic is making steady progress on shipping all of the pending MEGA65 preorders, on schedule to get everyone taken care of by the end of the calendar year. <a href="https://shop.trenz-electronic.de/en/TE0765-06-T001CK-MEGA65-highly-advanced-C64-and-C65-compatible-8-bit-computer?c=564">A new pre-order for a MEGA65 placed today</a> should have a lead time of only a few months. If you placed a pre-order and have received an email with an invoice, be sure to submit payment promptly. Invoiced but unpaid orders expire within a few weeks, to allocate inventory to others waiting on a pre-order. (Thankfully, you can just re-make your expired order, and you&#8217;ll receive it fairly soon.)</p><p>With this milestone comes some exciting news! Trenz Electronic is <a href="https://shop.trenz-electronic.de/en/TE0765-06-T002CK-MEGA65-Mainboard-without-housing?c=564">now accepting preorders for MEGA65 mainboards</a> without the enclosure, keyboard, or floppy drive. This is great for electronics projects, custom enclosures, or just keeping a spare. You can <a href="https://github.com/MEGA65/mega65-kbd-pcb">make your own keyboard</a> with some effort, and the floppy drive is a standard IDE drive and cable. The standalone mainboards are expected to ship in mid-2025.</p><p>Many owners of the 2022 edition of the MEGA65 (mainboard revision R3A) asked for the ability to replace the mainboard with the latest hardware revision (R6), and it&#8217;s great that Trenz is providing this option. This is just my opinion, but if you simply want a MEGA65 with the revised hardware, you might get a better result buying a complete new computer, and selling your 2022 edition on the secondary market. The mainboard is more than half the cost of the computer, and unless you want to keep the spare R3 board, you&#8217;re unlikely to recoup that cost after an upgrade. Of course, there are no guarantees on the secondary market, but it&#8217;s worth giving it a thought. Personally, I own two MEGA65s and a spare board, a Nexys dev board&#8212;and dozens of other computers. But you might not want to follow my example.</p><p>Speaking of owning lots of computers, Trenz has lifted the one-per-person limitation on MEGA65 pre-orders. If you want to outfit a classroom, hand out MEGA65s at parties, or just make a cool fort out of the boxes, now is your chance!</p><p>Thanks as always to everyone at Trenz Electronic for their partnership on the MEGA65 project.</p><h2>Filehost messaging feature</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Og6Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Og6Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 424w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 848w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 1272w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Og6Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png" width="96" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7d7223d-686b-425c-bba1-9879af7438a2_96x100.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:100,&quot;width&quot;:96,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7921,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Og6Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 424w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 848w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 1272w, https://substackcdn.com/image/fetch/$s_!Og6Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7d7223d-686b-425c-bba1-9879af7438a2_96x100.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Filehost new message notification</figcaption></figure></div><p><a href="https://files.mega65.org/">Filehost</a>, our community file and information sharing board, has a new feature! You can now receive private notifications from the system, and send and receive private messages with other users. If you have a pending notification or incoming message, a red dot will appear on the user icon in the upper right corner.</p><p>To receive incoming notifications and messages, you must enable them: go to User menu &gt; User Settings, check &#8220;Allow to receive messages from users&#8221; and &#8220;Inform me about comments on my entries,&#8221; then click Submit.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!huje!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!huje!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 424w, https://substackcdn.com/image/fetch/$s_!huje!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 848w, https://substackcdn.com/image/fetch/$s_!huje!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 1272w, https://substackcdn.com/image/fetch/$s_!huje!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!huje!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png" width="657" height="193" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00328498-a90c-48fb-8bb4-927593e1523e_657x193.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:193,&quot;width&quot;:657,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19759,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!huje!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 424w, https://substackcdn.com/image/fetch/$s_!huje!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 848w, https://substackcdn.com/image/fetch/$s_!huje!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 1272w, https://substackcdn.com/image/fetch/$s_!huje!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00328498-a90c-48fb-8bb4-927593e1523e_657x193.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Filehost message settings</figcaption></figure></div><p>To access your messages: User menu &gt; Messages.</p><p>To start a new private conversation with another user: click the plus sign next to Subjects, select the user, enter a subject, then enter the first message. Only users who have enabled incoming messages appear in the list of users.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F4p7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F4p7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 424w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 848w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 1272w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F4p7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png" width="466" height="260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:260,&quot;width&quot;:466,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F4p7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 424w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 848w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 1272w, https://substackcdn.com/image/fetch/$s_!F4p7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d49da2a-3e35-4eb9-b35a-00597268964d_466x260.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Starting a new conversation</figcaption></figure></div><p>To add to an existing conversation: select the subject from the list, then scroll to the bottom of the conversation and enter the next message.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aFVp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aFVp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 424w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 848w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 1272w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aFVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png" width="482" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:482,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aFVp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 424w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 848w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 1272w, https://substackcdn.com/image/fetch/$s_!aFVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7934db4c-d852-4606-95ef-ea20d3f9b5f2_482x436.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Adding to an existing conversation</figcaption></figure></div><p>Huge thanks to Tayger for this new feature, and all of his work on this essential community resource!</p><h2>New C64 core documentation</h2><p>Boris has been working on <a href="https://kugelblitz360.github.io/C64MEGA65DOCS/">extended documentation for the C64 core</a>. The docs are now &#8220;feature complete,&#8221; with coverage of every feature and common task, including how to install JiffyDOS or use the built-in RAM expansion unit (REU). Be sure to send Boris your feedback and thanks, via Discord or email. Thank you, Boris!</p><h2>Recent Filehost uploads</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FuC1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FuC1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FuC1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4448,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FuC1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!FuC1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc7b5c6-d3f8-46bc-8911-9f10164c8e7a_640x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pelota, a single-player paddle game, by SirLazarus</figcaption></figure></div><p>A few recent Filehost uploads for you to try:</p><ul><li><p><a href="https://files.mega65.org/?id=6b16a719-23f5-444d-8f5d-1c6e391e7220">Quadratic Equation Solver</a>, by fredrikr, an equation root finder</p></li><li><p><a href="https://files.mega65.org/?id=ea68dc29-314c-4bde-96d1-81f20ee41c80">3D 4-in-a-row</a>, by fredrikr, a 4x4x4 two-player tile placement game</p></li><li><p><a href="https://files.mega65.org/?id=e8a9c2f8-43e2-4ded-9333-0a9581186eba">Pelota</a>, by SirLazarus, a single-player paddle game; requires a recent ROM beta</p></li><li><p><a href="https://files.mega65.org/?id=25e387cb-0a49-46d1-b719-859cca9926e1">Hang the DJ</a>, by mk9, a Hangman-style word game</p></li><li><p><a href="https://files.mega65.org/?id=1d856de4-fa57-46cd-a993-b5d21a7b736c">romlister</a>, by nobruinfo, a small utility to list which ROMs you have on your SD card</p></li></ul><h2>Greetings from Chicagoland!</h2><p>I just flew back from <a href="https://vcfmw.org/">Vintage Computer Festival Midwest</a> and boy are my arms tired. Literally. I took my MEGA65, printed table displays, a bunch of backup equipment, and bundles of <a href="https://www.zazzle.com/store/m65digest">45GS02 mousepads</a> to give away. I use <a href="https://www.amazon.com/gp/product/B00SSFAPVI">this weatherproof hard case</a> when I travel with my MEGA65, and I always carry it onto the plane and put it in the overhead bin. For this trip, the less delicate stuff went into a large checked bag. Who knew 100 mousepads would be so heavy! Thankfully, everything made it there and back safely.</p><p>The event took place at the Renaissance Schaumburg Convention Center Hotel, in Schaumburg, Illinois, in the <a href="https://en.wikipedia.org/wiki/Chicago_metropolitan_area">Chicagoland</a> area. The show consumed an entire expo floor and a separate presentation space for talks. This venue is also a nice hotel, and many exhibitors and visitors stayed here or in a nearby Embassy Suites. I didn&#8217;t take enough photos to do justice to the scale of this show, but hopefully you can get a sense of it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i8st!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i8st!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i8st!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i8st!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i8st!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i8st!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg" width="480" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239003,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i8st!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i8st!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i8st!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i8st!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b027e50-527f-443c-a1a3-cfc73251543d_480x640.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Renaissance Schaumburg Convention Center Hotel, in Schaumburg, Illinois, USA</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qV2R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qV2R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qV2R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:343704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qV2R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qV2R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ff5d46-3f4e-48e6-9629-8b210fb69f95_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The hotel atrium</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DYku!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DYku!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DYku!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DYku!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DYku!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DYku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:394612,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DYku!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DYku!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DYku!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DYku!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80196efa-ccfa-41ad-b881-0050bff54898_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Entrance to the convention center expo floor</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YVnU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YVnU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YVnU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:471991,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YVnU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YVnU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35780021-f714-4885-bdc5-ab973e881145_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Setting up the expo floor, before opening</figcaption></figure></div><p>I prepared a bunch of table tchotchkes, more than I actually needed, including a colorful banner, an informational standee, a &#8220;demo&#8221; booklet that someone could use to launch and browse software on the SD card, and various boxed software and accessories. I didn&#8217;t have a good way to hang the banner, so it ended up being more of a tablecloth, but it still added some color. I also made business cards with a full-color photo on one side and links to resources on the other. And a custom t-shirt to wear, because why not.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6IO9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6IO9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6IO9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:522488,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6IO9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6IO9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f5d950-ecdc-47b0-8c65-84debbba2820_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My MEGA65 table at VCFMW, before opening</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M_Rj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M_Rj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M_Rj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195915,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M_Rj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M_Rj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe8b4c08-5b7c-4779-aafb-1c5834466131_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My MEGA65 demo booklet (cover)</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m1iy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m1iy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m1iy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263775,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m1iy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m1iy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b84a18-3961-48ad-9046-1fa0ded5a1b4_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My MEGA65 demo booklet, intro disk instructions</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8noS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8noS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8noS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8noS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8noS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8noS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:310738,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8noS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8noS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8noS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8noS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5591de-1b51-410f-b39c-a32cecc60c91_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My MEGA65 demo booklet, software catalog</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CArS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CArS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CArS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CArS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CArS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CArS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg" width="640" height="246" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:246,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CArS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CArS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CArS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CArS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe38a1337-1fb0-40d0-95c3-861e4d0b9eb5_640x246.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Info card giveaways</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IRvA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IRvA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IRvA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:553944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IRvA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IRvA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89dc9067-a0b8-490c-965f-674929d1d1d7_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Custom t-shirt for me to wear</figcaption></figure></div><h3>Ladies and gentlemen: the Commodore 65</h3><p>My table included my MEGA65, Jim Happel&#8217;s MEGA65, and two original Commodore 65 prototypes owned by Jim Brain. After having been on the MEGA65 project for two years, it was a real thrill to be able to see a C65 prototype and the MEGA65 side by side. It was also the best conversation starter: most passersby knew the C64 and never heard of the C65, so I could just point to the C65 first, then tell the rest of the story. Several people knew of the C65 and were excited to see it in person, taking selfies with the computer. I took a bunch of photos myself for future reference.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iN6o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iN6o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iN6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:376502,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iN6o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!iN6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b0c9830-d732-4f46-bbd5-68dc34ea44cf_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Commodore 65, developer unit #23, rev 2A mainboard</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8vsF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8vsF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8vsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:400542,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8vsF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8vsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a56b7d2-59a3-42f5-94f8-b37fc90be5f7_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Commodore 65, rear view</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!STnB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!STnB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!STnB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!STnB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!STnB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!STnB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:328636,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!STnB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!STnB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!STnB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!STnB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F654f103d-d27e-4c2e-890d-83e1d6efd2b4_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">C65 keyboard close-up</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NJvW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NJvW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NJvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:453999,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NJvW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NJvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085ff7f1-b0a9-4ca4-aea5-b59365553345_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The C65, powered on, at the READY prompt</figcaption></figure></div><p>I tried to spend some time with Jim Brain&#8217;s copies of the demo disks, both on the C65 and on the MEGA65. It was a sobering reminder of how the C65 prototypes were not ready to be software platforms that the demo disks were hard-coded to specific versions of the ROM. Disks were generally not working on the C65. I could list directories but not load files. I got the IFF slideshow disk to work on the MEGA65&#8212;and of course I forgot about the topless woman until it showed up right as some young kids were walking up to the table.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SmUD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SmUD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SmUD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:389167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SmUD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SmUD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f343b00-61af-4304-86f7-15048eabe0d3_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jim Brain's copies of the C65 demo disks</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ANm5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ANm5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ANm5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97f76193-0874-4478-b617-52887715c111_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:464806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ANm5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ANm5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f76193-0874-4478-b617-52887715c111_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The demos were hard-coded to specific versions of the C65 prototype ROM</figcaption></figure></div><p>One especially fun find was a message that Fred Bowen posted to the comp.sys.cbm Usenet group on September 17, 1993, subject line, &#8220;What&#8217;s a C-65???&#8221; Fred&#8217;s message puts the date of the liquidation sale around July 1993, and claims the prototypes numbered around 50. (According to Brian Bagnall&#8217;s <em>Commodore: The Final Years</em>, &#8220;By 1991, Commodore had at least 205 pilot production C65 machines. &#8216;We had a room full of them at one point,&#8217; says [chip designer Bill] Gardei. &#8216;If you counted all the variants, 205 would not be an unreasonable guess.&#8217;&#8221;) In the message that follows, &#8220;Grapevine&#8221; refers to The Grapevine Group Inc. of Suffern, New York, one of two companies known to have acquired and re-sold the prototypes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ckmv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ckmv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ckmv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:473310,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ckmv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ckmv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d760da-2449-4c5a-a5c5-49e2fc16040a_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A message from Fred Bowen, part 1</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0zcM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0zcM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0zcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:451267,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0zcM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0zcM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff1ad20-9025-4e10-892f-8b23da75f7ca_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A message from Fred Bowen, part 2</figcaption></figure></div><blockquote><p>From: <code>fred@cbmvax.cbm.commodore.com</code> (Fred Bowen)<br>Newsgroups: comp.sys.cbm<br>Subject: Re: What&#8217;s a C-65???<br>Date: 17 Sep 93 14:56:25 GMT<br>&#8230;</p><p>Apparently Grapevine picked up some C65&#8217;s during Commodore&#8217;s liquidation of its warehouse/storage areas a couple of months ago.</p><p>What is a C65? A product that almost made it out the door. What you&#8217;re seeing are &#8220;alpha&#8221; pilot-production units. There were only something like 50 units made, and a dozen or more of these were distributed around engineering, system developers, etc. Obviously, they were never meant to be sold to the public, but&#8230;</p><p>CPU CSG65CE02, running at 3.54MHz<br>RAM 128K, expansion to ~8MB<br>ROM 128K, including C65 mode (v10.0), C64 (v2.2) mode, &amp; DOS<br>Video CSG4567 &#8220;VIC-III&#8221;<br>I/O Built-in DMA/blitter<br>Built-in 6511-type UART, supports MIDI data rate.<br>All C64 ports: parallel, expansion, etc.<br>new RAM expansion port, accessible by DMA and video chips.</p><p>I guess that&#8217;s enough for now. But be warned- these boards are very out of date-the ROMs, PLA&#8217;s, etc. are pre-pre-preALPHA, there are absolutely NO spare parts (so if it breaks, that&#8217;s it!), all systems are PAL (but they display okay on regular 1084-type monitors in analog mode). Oh, and there aren&#8217;t any manuals. I&#8217;m surprised that Grapevine can sell them as &#8220;new&#8221; equipment. Buyer beware, and all that.</p><p>All things considered, not a bad machine, though. I still use mine :-)</p></blockquote><p>At some point during the conference, some guy I&#8217;d never met showed up at the table and started opening the C65 case. I politely but firmly discouraged him from touching it without Jim Brain&#8217;s permission. The guy smiled and introduced himself as Jim Brain. &#128517; We were having some difficulty with non-functioning keys on one of the C65s, and Jim noticed a small break in the keyboard ribbon cable that will need repair. Thankfully, and amazingly, Jim has two C65s, so we temporarily swapped the keyboards to form a fully functioning unit. Jim was careful to keep track of the fact that we swapped the keyboards, so they could be reunited with their original cases later.</p><p>The C65 prototype is held together with <em>one screw</em> in the front-right of the case near the floppy drive. The rest of the case is all plastic tabs, to make it easy to open and repair. I got to see and photograph the internals of both machines. Developer unit #23 contained the revision 2A mainboard, and a memory expansion module.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xn9e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xn9e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xn9e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:569648,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xn9e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xn9e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b82c28-7f48-435b-8abb-86e423dff93d_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jim Brain and C65 developer unit #23, with the case open</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!feWp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!feWp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!feWp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!feWp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!feWp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!feWp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:448429,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!feWp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!feWp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!feWp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!feWp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4706a38-e6dc-40be-a7f2-5165f76efecd_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The inside of D23, with the memory expansion module</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2e4E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2e4E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2e4E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:530021,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2e4E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2e4E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448ec2be-e07b-4da5-91d9-c0ab38775c24_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Another D23 internals close-up</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2JUT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2JUT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2JUT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:462314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2JUT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2JUT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd76b8f96-5d2d-46e5-a4c6-3c26318b5232_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An inside look at Jim's other C65, with a rev 2B board</figcaption></figure></div><p>As impressive as the C65 is as a historical artifact, I&#8217;m relieved to realize that I don&#8217;t want to own one. Not that that was ever an option, with working units <a href="https://gizmodo.com/commodore-65-prototype-ebay-30-000-dollars-1848823604">selling on eBay for $30,000</a>. A recent auction for a <em>broken</em> one ended north of $12,000. The prototype plastic is weird, the keyboards are mushy compared to a good condition production C128, and the working ones barely work and are difficult to maintain. I&#8217;m grateful for collectors like Jim for keeping them alive as long as possible and sharing them with the world. And I&#8217;m grateful for the MEGA65 for not only letting me access a piece of this history in my own home, but for being a satisfying instrument of recreational computing in its own right.</p><h2>Reactions</h2><p>Quite a few people saw the <code>READY.</code> prompt and wanted to type their own <code>GOTO 10</code> program. Several young kids took the time to write a longer program, though they did it all from memory and didn&#8217;t bother exploring the manual. I ended up standing in front of the table and doing guided demos for most of the time. <em>First Shot</em>, <em>Maniac Mansion</em>, and <em>Unicone</em> attracted attention. Nobody bothered with the &#8220;demo&#8221; booklet, even with encouragement. I&#8217;m still glad I made the demo book: the full-color screenshots made it something you could flip through in seconds, and get a glimpse without having to wait for software to load.</p><p>I had stacks of the mousepads on the table. At first I was concerned that if I gave away the mousepads for free that they would disappear quickly, and wouldn&#8217;t provide much promotional value, so I had intended to maybe sell them at cost, and even made a little for-sale sign for it. I figured out within the first few hours that this wasn&#8217;t going to be a problem. I took down my for-sale sign and just arbitrarily handed mousepads to people that seemed even remotely interested in programming. At the end of the last day, I ran around the floor looking for coders I admired by reputation, and used mousepad gifts as excuses to say hi.</p><p>I had many good conversations with many people with a wide variety of interests and backgrounds, and I handed out many business cards. Greetz to all the new newsletter subscribers!</p><h2>Expo highlights</h2><p>Many of the Commodore exhibits were colocated together in a common section. There ended up being so much diversity in the exhibits that you almost couldn&#8217;t tell they were related by platform. I was delighted that my table was next to the brilliant <a href="http://cityxen.net/">CityXen</a>, who were showing off &#8220;<a href="https://www.youtube.com/watch?v=ggbDzyFjCME">Whackadoodle</a>,&#8221; their C64-powered whack-a-mole game with giant colorful light-up arcade controller, along with a miniature version with <a href="http://cityxen.net/2024/08/whackadoodle-custom-controllers/">custom handheld controllers</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lBNL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lBNL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lBNL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:527040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lBNL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lBNL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545f6804-2cbf-48d8-9304-34349083d7da_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">CityXen table at VCFMW (photo taken during set-up day)</figcaption></figure></div><p>June of the excellent <a href="https://nybblesandbytes.net/">Nybbles &amp; Bytes</a> was also in my area, demoing and distributing her unique C128 game, <a href="https://nybblesandbytes.net/blog/vcfmw19.html">Nybbles: Legend of the Drunken Snake</a>. When you first start playing, Nybbles looks like a traditional snake game, until just moments later you eat something unusual and things get utterly wild. The game uses <em>two displays</em>, and manipulates both the VIC-II and the VDC in ways I have never seen before. I waited to the end of the show to buy one to give others a chance, and I did indeed end up with one of the last copies to be distributed on floppy disk. Be sure to subscribe to the <a href="https://www.youtube.com/nybblesandbytes">Nybbles &amp; Bytes YouTube channel</a> for future updates and technical details about the game.</p><p>Right around the corner, I met Craig of <a href="https://bitbinders.com/">BitBinders</a>, maker of 1581 clone floppy disk drives. I was especially impressed by his unique dual drive units, available in both vertically and horizontally arranged variants. I bought one of the horizontal units immediately. Craig already knew about the MEGA65, and we discussed the un-produced Commodore 1565 external drive, and how a modern clone would make a great MEGA65 accessory (along with the expansion board that provides the 1565 mini-DIN connector).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s3_j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s3_j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s3_j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:481568,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s3_j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s3_j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10a115d-76a6-4346-804a-364d0ed8d36a_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">1581 clone disk drives by BitBinders</figcaption></figure></div><p>There isn&#8217;t enough space to show all the photos of cool and unusual computers I saw throughout the show, but I had such a strong reaction to this one I have to include it. I&#8217;ve wanted a <a href="https://en.wikipedia.org/wiki/HERO_(robot)">Heathkit Hero 1 robot kit</a> all of my life, having only known it through advertisements in magazines. This is the first time I&#8217;ve ever seen a Hero in person. The Hero Jr., on its 40th anniversary, was sharing a table with two <a href="https://en.wikipedia.org/wiki/Topo_(robot)">Androbot Topo</a> robots.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pRM0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pRM0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pRM0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:542139,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pRM0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pRM0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddacba5a-90ba-4e63-afc8-99c985e15f37_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Heathkit Hero Jr. and two Topo Androbots</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!89J4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!89J4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!89J4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!89J4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!89J4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!89J4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg" width="480" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:453064,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!89J4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!89J4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!89J4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!89J4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdde6f839-209d-434b-b458-bca57f3cd4b7_480x640.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Hero Jr. close-up</figcaption></figure></div><p>VCFMW is as much a swap meet as a share-out, and about half of the show floor was for sale. Many exhibitors had new and vintage items for sale, and VCFMW also held an auction of unusual items donated by exhibitors to help fund the event. What really gives the convention a pervasive electric air is the ominous entity known as <em>the Free Table.</em> People leave stuff to give away, and other people take stuff they like, a waxing and waning of trash and treasure throughout the convention. The table is largely unsupervised, which gives the added thrill of worrying that something that isn&#8217;t free might get taken. (This has happened.) The table this year was well labeled, with a useful partition between the free table and the next table over, so it was pretty chill.</p><p>I knew I was flying home, and I&#8217;m kind of at my limit for hardware anyway, so pretty much nothing on the free table interested me. I saw some &#8217;90s-era Microsoft software in original boxes pass across the table. My big finds were all books, where at least one person was shedding a nerd&#8217;s bonanza of famous titles on computer science and programming. I grabbed what I could carry, and left behind some of my favorite books just because I know I already owned them. I was glad to see the good ones eventually found new owners.</p><p>Of course, with the bundles of mousepads, booth decor, and equipment, my luggage was already quite full and quite heavy. The books pushed my checked bag over the weight limit, and ended up costing me a $100 heavy bag fee. So not exactly free. Still a decent haul.</p><div><hr></div><p>I owe huge thanks to Jim Happel (jim_64 on Discord) for making my VCFMW trip possible. Jim encouraged me to make the trek in the first place, and provided logistical, technical, and moral support throughout the experience. Jim also introduced me to many excellent people in the community whom I&#8217;ve known only by reputation online and I now consider friends. This was such a good time, I&#8217;m eager to visit the other annual shows around the country as time and budget allows, with my MEGA65 in its carrying case.</p><p>Thanks to everyone for your kind words and feedback on <a href="https://github.com/dansanderson/easyasm65">EasyAsm</a> v0.1. I&#8217;ve only received a couple of bug reports&#8212;which just means you&#8217;re not trying hard enough to break it! I hope to start a revision as soon as I&#8217;m through this very busy month. I&#8217;m working on the draft of this year&#8217;s community survey, I&#8217;m dropping off a kid at college, and I still have the <a href="https://www.retrogamingexpo.com/">Portland Retro Gaming Expo</a> in a couple of weeks.</p><p>Special thanks to all of my supporters, who are making my promotional tours and other projects possible. If you like what I&#8217;m doing, please consider becoming a supporter. Visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dw9u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dw9u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dw9u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:535430,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dw9u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dw9u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44e7ff0a-cd67-4347-96ae-1f69eda619fa_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Portillo's, home of "unrivaled Chicago street food"</figcaption></figure></div><p>Cheers!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[EasyAsm]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for August 2024]]></description><link>https://m65digest.substack.com/p/easyasm</link><guid isPermaLink="false">https://m65digest.substack.com/p/easyasm</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Mon, 26 Aug 2024 19:19:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!h4W2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h4W2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h4W2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 424w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 848w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 1272w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h4W2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png" width="320" height="369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:369,&quot;width&quot;:320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:123584,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h4W2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 424w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 848w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 1272w, https://substackcdn.com/image/fetch/$s_!h4W2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43e0f6d-6845-4542-a713-41013cc13ff5_320x369.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A snippet of assembly language source code.</figcaption></figure></div><p>There&#8217;s tons of new stuff for you to download and try this month! kibo has launched a new implementation of a classic graphic adventure game engine capable of playing Maniac Mansion. The group Megastyle has released several new MEGA65 titles. And I&#8217;m launching a project of my own: an on-device assembly language programming tool for the MEGA65, called EasyAsm.</p><p>Much to discuss, let&#8217;s get started!</p><h2>SCUMM v2 player, by kibo</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MTis!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MTis!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MTis!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MTis!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MTis!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MTis!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg" width="1456" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:240516,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MTis!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MTis!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MTis!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MTis!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F398f271d-582b-489b-ba92-cbefe7a404b7_1990x812.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Maniac Mansion, running on a MEGA65 with kibo&#8217;s SCUMM v2 player.</figcaption></figure></div><p>You can now play the LucasArts graphic adventure-comedy game <em>Maniac Mansion</em> directly on your MEGA65!</p><p>kibo made <a href="https://files.mega65.org/?id=744279a9-7ee4-40c7-b34d-26d4c06d4685">a new implementation of the SCUMM v2 game engine</a> for the MEGA65 capable of playing the classic game, which he calls "MegaSPUTM." This hugely impressive project uses the game data files from the Amiga version, and supports full color graphics, digitized sound, and multiple input devices.</p><p>To play <em>Maniac Mansion,</em> you need to acquire the original game data files. If you own the disks, you can use Amiga disk management tools to extract the <code>.LFL</code> files. MegaSPUTM works with both the English and German versions of the data files.</p><p>The full procedure takes a few minutes. I got it up and running like so:</p><ol><li><p>Download <a href="https://files.mega65.org/?id=744279a9-7ee4-40c7-b34d-26d4c06d4685">kibo&#8217;s SCUMM v2 engine</a> from Filehost. Expand the <code>.zip</code> archive to produce D81 disk image files <code>mm1.d81</code> and <code>mm2.d81</code>.</p></li><li><p>Retrieve the <code>.LFL</code> files from the <code>rooms/</code> folder of the first disk of <em>Maniac Mansion</em> for the Amiga. If your media is in the form of an ADF disk image, there are several tools you can use. I found <a href="https://www.stef.be/adfviewer/">this cute browser-based ADF reader</a>, which does everything locally on your computer and doesn&#8217;t require uploading data to a remote server. It&#8217;s a bit obnoxious that you have to select and &#8220;download&#8221; each <code>.LFL</code> file individually, but it works, and doesn&#8217;t require installing anything.</p></li><li><p>Use a D81 disk image tool to place the <code>.LFL</code> files from the first ADF onto <code>mm1.d81</code>. Here too you have your choice of tools. I like <a href="https://droid64.sourceforge.net/">droid64</a>, a Java UI application. If you use <a href="https://style64.org/dirmaster">DirMaster</a> and possibly some others, you may need to rename the files to use lowercase <code>.lfl</code> before adding them to the disk. (droid64 will lowercase it in transit.)</p></li><li><p>Repeat steps 2 and 3 for the 2nd game disk and <code>mm2.d81</code>.</p></li><li><p>Transfer <code>mm1.d81</code> and <code>mm2.d81</code> to the root of your MEGA65&#8217;s SD card.</p></li></ol><p>Now on the MEGA65, <code>MOUNT</code> and <code>BOOT</code> the <code>mm1.d81</code> disk image. Crank those speakers, and use a joystick or a mouse!</p><p>The original Maniac Mansion game included a printed booklet entitled &#8220;Nuke&#8217;m Alarms Owner&#8217;s Disarmament Quick Reference Guide,&#8221; which was needed early in the game. Similar to SCUMM VM and Disney's own re-release of Maniac Mansion, this is not needed when playing the game with MegaSPUTM.</p><p>C programmers, don&#8217;t miss <a href="https://github.com/ki-bo/megasputm">the source code</a>, which is chock full of examples of how to do common and interesting things on the MEGA65 in C.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RsPV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RsPV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RsPV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:787088,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RsPV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RsPV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa0ec809-a091-4601-9194-8b95d3395899_4032x3024.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">kibo&#8217;s original Maniac Mansion game disks, with which his engine was tested.</figcaption></figure></div><h2>New titles from Megastyle</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ctBj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ctBj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 424w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 848w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 1272w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ctBj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png" width="880" height="713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:713,&quot;width&quot;:880,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152930,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ctBj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 424w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 848w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 1272w, https://substackcdn.com/image/fetch/$s_!ctBj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6f101b-9031-4ce2-a5b3-1fdafe0d381e_880x713.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mega Invaders, from Megastyle.</figcaption></figure></div><p>The group <a href="https://megastyle.itch.io/">Megastyle</a> has not one, not two, but <em>three</em> releases for the MEGA65 this month!</p><p><a href="https://files.mega65.org/?id=4aa0893b-ac22-4e8a-a0de-d01da76c9fe2">Mega Invaders</a> (<a href="https://megastyle.itch.io/mega-invaders">itch.io link</a>), an homage to Space Invaders, is a MEGA65 original with all of the nostalgic arcade game graphics and sounds you crave. Be sure to switch to PAL video mode before running the game. Joystick in port 2.</p><p><a href="https://files.mega65.org/?id=2fe95f8f-191d-4765-b81d-65b01ad506ea">Omega Race</a> (<a href="https://megastyle.itch.io/omega65-race">itch.io link</a>) is a direct port of the VIC-20 space war game to the MEGA65. Nearly all of the VIC-20 code is intact, with only small patches required to get it to run.</p><p>In <a href="https://files.mega65.org/?id=9d34a8a1-16b2-470f-92ae-61c642b3af30">Skramble</a>, also a VIC-20 port, you fly over a landscape, destroying enemies. Check out <a href="https://fgasking.wordpress.com/2006/05/24/game-spotlight-skramble/">the blog article</a> about the original game for the impressive technical details of how an unexpanded VIC could render such large levels.</p><p>Don&#8217;t miss all the great C64 and Amiga titles in <a href="https://megastyle.itch.io/">Megastyle&#8217;s catalog</a>. Their <a href="https://megastyle.itch.io/esb-by-megastyle">Empire Strikes Back</a> remake is one of my all-time C64 faves.</p><h2>Snake65, by piramania</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xEt1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xEt1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 424w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 848w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 1272w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xEt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png" width="704" height="573" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:573,&quot;width&quot;:704,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3737,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xEt1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 424w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 848w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 1272w, https://substackcdn.com/image/fetch/$s_!xEt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f619b9e-269c-475a-acc8-b7bf02b49d46_704x573.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Snake65, by piramania.</figcaption></figure></div><p><a href="https://files.mega65.org/?id=7953b089-a257-4b5c-844e-546266049ffc">Snake65</a> by piramania is a modern take on a classic. It features six levels of challenging snake gameplay and charming music, and is written entirely in BASIC 65. Use W, A, S, and D on the keyboard as controls.</p><h2>Mondrian Simulator, by Drex</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N7Il!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N7Il!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 424w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 848w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 1272w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N7Il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N7Il!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 424w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 848w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 1272w, https://substackcdn.com/image/fetch/$s_!N7Il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55ab4e6-9275-4565-9c9e-b46a5a86b2ea_1024x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mondrian Simulator, by Drex.</figcaption></figure></div><p><a href="https://files.mega65.org/?id=5ef96200-a884-4968-a447-cd1e9661031b">Mondrian Simulator</a>, by Drex, is a MEGA65 demo that generates artwork in the style of abstract artist <a href="https://en.wikipedia.org/wiki/Piet_Mondrian">Piet Mondrian</a>. Press S to start a meditative slideshow.</p><h2>MEGA65 Command Line Tools v1.0</h2><p>The MEGA65 project includes <a href="https://github.com/mega65/mega65-tools">a collection of command-line tools</a> for development and testing, using <a href="https://dansanderson.com/mega65/welcome/using-jtag.html">a JTAG adapter</a> to remotely control a MEGA65 from a PC. These tools have recently acquired new features for transferring files, ROMs, and programs over Ethernet, as well as a revised tool for core management. The <a href="https://dansanderson.com/mega65/welcome/transferring-files.html">M65Connect</a> desktop application uses these tools behind the scenes, and I use these tools regularly as part of a <a href="https://dansanderson.com/mega65/cross-development/">cross-development workflow</a>.</p><p>You can now download a formal release package of the latest command-line toolkit, version 1.0. Get it for <a href="https://files.mega65.org/?id=m65tools-windows">Windows</a>, <a href="https://files.mega65.org/?id=m65tools-macos">macOS</a>, and <a href="https://files.mega65.org/?id=m65tools-linux">Linux</a>. The tools in this package:</p><ul><li><p><code>m65</code> : A multi-tool for testing, debugging, and interacting with the MEGA65 over a JTAG/UART serial adapter.</p></li><li><p><code>mega65_ftp</code> : Transfer files to and from the MEGA65 SD card, via Ethernet or JTAG/UART.</p></li><li><p><code>etherload</code> : Send programs and ROMs to the MEGA65&#8217;s memory over Ethernet for testing.</p></li><li><p><code>coretool</code> : Convert MEGA65 bitstreams to cores, and manage core metadata. Requires Python 3.</p></li><li><p><code>romdiff</code> : A binary patch generator, used for producing ROM patches.</p></li></ul><p>Mac users, remember to remove the &#8220;quarantine&#8221; attribute of the tools before using them: <code>xattr -d com.apple.quarantine m65.osx</code></p><h2>New list of alternate cores</h2><p>Looking for alternate cores available for the MEGA65? Boris Schneider-Johne has taken over maintaining the cores list from sy2002, and it now has an easy-to-remember address. Visit <a href="https://cores.mega65.org/">cores.mega65.org</a> to be redirected to the new list. Thanks to Boris for preparing and maintaining this documentation!</p><h2>September conferences</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y5Vx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y5Vx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y5Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg" width="1280" height="544" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:544,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:370634,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y5Vx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y5Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce7e1e3-844c-4d67-aac0-66b5ebf3fcda_1280x544.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGA65 booth display banner, draped over my couch.</figcaption></figure></div><p>A quick update on those September conferences in the USA: I still plan to be at the <a href="https://vcfmw.org/">Vintage Computer Festival Midwest</a>, September 7-8 in Schaumburg, Illinois. For the first time in the show&#8217;s history, VCFMW received more talk proposals than available slots, and my proposal was not selected this year. I&#8217;m grateful that they have a presentation track at all, with a full-time volunteer staff to make quality recordings for YouTube. I have confirmed that we&#8217;ll have a table&#8212;and we might even have a real Commodore 65 next to the MEGA65!</p><p>I splurged on getting some fun booth display items printed professionally, something I&#8217;ve always wanted to try. The cloth banner and table signage turned out very nicely. I also placed a bulk order of 45GS02 CPU quick reference mousepads.</p><p>I, my MEGA65, and my mousepads will also be at the <a href="https://www.retrogamingexpo.com/">Portland Retro Gaming Expo</a>, September 28-29 in Portland, Oregon. Come say hi, if you can!</p><h2>Introducing EasyAsm</h2><p>EasyAsm is a new assembly language programming tool for the MEGA65. EasyAsm runs entirely on the computer, with no need for a separate PC. It is designed to work with the existing MEGA65 environment, to give you as much control and understanding of the computer as possible, and to take advantage of the MEGA65&#8217;s existing programming workflow. EasyAsm provides a powerful subset of the syntax and features of the <a href="https://sourceforge.net/projects/acme-crossass/">Acme cross-assembler</a>, so that you can use it with the assembly language programming examples in the documentation and in this Digest, as well as for larger programs.</p><ul><li><p><a href="https://files.mega65.org/html/main.php">Download EasyAsm from Filehost</a>.</p></li><li><p>See <a href="https://github.com/dansanderson/easyasm65/">the Github repo</a> for full documentation and source code, and to file bug reports and feature requests.</p></li><li><p><strong>Note:</strong> Assembling to disk requires a recent ROM beta version, 920401 or later. This will also work in the upcoming v0.97 MEGA65 platform release.</p></li></ul><p>I was inspired to write EasyAsm while playing with vintage on-device assemblers for the Commodore 64. Many of these used the C64&#8217;s built-in BASIC line editor for entering assembly language source code, giving the programmer a familiar environment for managing code without the overhead of a proprietary text editor application or file management system. I realized that not only was this possible on the MEGA65, the MEGA65 could do it better and more intuitively thanks to its powerful memory management architecture, and a little-known feature of the BASIC: <em>Edit mode.</em></p><h2>An important note</h2><p><strong>Save your work to disk, early and often.</strong></p><p>Writing a program for a microcomputer using the microcomputer itself comes with the inherent risk that a bug in your program will interfere with your programming environment. EasyAsm preserves your source code in memory while you are testing your program, but this cannot be guaranteed to work if the program does something unexpected.</p><p>By design, EasyAsm does <em>not</em> force you to save your work to disk before testing your program. Please remember to do this yourself.</p><p>With this announcement, I am releasing the first version of EasyAsm, which I&#8217;m calling &#8220;version 0.1.&#8221; I have tested it to the best of my ability, but it may still have bugs, including bugs that may lose data. If you find any bugs, <a href="https://github.com/dansanderson/easyasm65/issues">please report them</a>!</p><h2>A canonical first program</h2><p>To start an EasyAsm session, mount and boot the <code>EASYASM.D81</code> disk image:</p><pre><code><code>MOUNT "EASYASM.D81"
BOOT</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2M0C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2M0C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 424w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 848w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 1272w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2M0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png" width="948" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:948,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2M0C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 424w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 848w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 1272w, https://substackcdn.com/image/fetch/$s_!2M0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54f0db65-1a43-46a4-85d7-b2eceb4bb86f_948x304.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">EasyAsm loaded into memory, and the OK prompt.</figcaption></figure></div><p>Try entering the following program at the <code>OK</code> prompt. To enter the blank line on line 20, type <code>20</code> then press <strong>Shift</strong> + <strong>Space</strong>, then press <strong>Return</strong>.</p><pre><code><code>10 !TO "SIMPLE", RUNNABLE
20
30   INC $D020
40   RTS</code></code></pre><p>Type <code>LIST</code> to see the listing.</p><p>Before doing anything else, save this source file to disk:</p><pre><code><code>DSAVE "SIMPLE.S"</code></code></pre><p>Next, press the <strong>Help</strong> key to open the EasyAsm menu.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TkuO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TkuO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 424w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 848w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 1272w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TkuO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png" width="948" height="355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0a91183-8029-4681-80ab-64d16dd58c27_948x355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:355,&quot;width&quot;:948,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113905,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TkuO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 424w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 848w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 1272w, https://substackcdn.com/image/fetch/$s_!TkuO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a91183-8029-4681-80ab-64d16dd58c27_948x355.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The EasyAsm menu (as of v0.1).</figcaption></figure></div><p>Select option #1: Assemble and Test. (Press the <strong>1</strong> key.) EasyAsm assembles the program, then runs it. In this case, the program you entered does two things: it changes the color of the border (<code>inc $d020</code>), then ends the program (<code>rts</code>).</p><p>Type <code>LIST</code> again. The source code is in memory, and you can continue to make changes to the program.</p><p>Let&#8217;s make a small improvement. The register at hexadecimal address $D020 controls the border color, but this is not obvious from the program listing. It&#8217;d be better to assign a label to this value, so it&#8217;s easier to see what&#8217;s going on. Insert the label definition with line 25, and replace line 30:</p><pre><code><code>25 BORDER = $D020
30   INC BORDER</code></code></pre><p>Save the source file to disk again, this time using the <code>@</code> symbol to tell <code>DSAVE</code> to replace the existing file.</p><pre><code><code>DSAVE "@SIMPLE.S"</code></code></pre><p>Press <strong>Help</strong> then <strong>1</strong> to assemble and run the program again, to confirm that it still works.</p><h2>Using Edit mode</h2><p>Edit mode is very similar to the usual BASIC mode. You can type any BASIC command at the prompt, and it&#8217;ll do it right away. The main difference is that when you type a numbered line, instead of treating it as BASIC code, Edit mode treats it as PETSCII text. The DSAVE and DLOAD commands also have special behavior in Edit mode, operating on <em>sequential files</em> (type <code>SEQ</code>) instead of <em>program files</em> (type <code>PRG</code>). You can use Edit mode to write any kind of text file, like a (very) simple word processor. With EasyAsm, you can use it to write assembly language programs.</p><p>Editing works just like in BASIC. When you enter a new line, the program updates based on the line number, either inserting the line in sequence or replacing an existing line of that number. To delete a line, enter just the number, then press <strong>Return</strong>. All of the built-in tools for line editing, such as the <code>AUTO</code> and <code>RENUMBER</code> commands, are available in Edit mode. See the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">User&#8217;s Guide</a> for information about these commands.</p><p>Type <code>DIR</code> to see the list of files on the disk. Notice that the <code>SIMPLE.S</code> file you created is of type <code>SEQ</code>.</p><p>Type <code>NEW</code> to clear program memory. Type <code>LIST</code> again to confirm that the source code is no longer in memory. Then re-load the source file:</p><pre><code><code>DLOAD "SIMPLE.S"</code></code></pre><p>Type <code>LIST</code>. The source file is the same&#8212;but the line numbers have changed!</p><pre><code><code>1000 !TO "SIMPLE", RUNNABLE
1010
1020 BORDER = $D020
1030   INC BORDER
1040   RTS</code></code></pre><p>This is a notable difference between Edit mode and BASIC mode: Edit mode does not include the line numbers when it saves the file. This is usually what you want when editing a text file, and for EasyAsm, the line numbers don&#8217;t affect how the program is assembled. However, it does mean that if you try to organize your code using groups of line numbers like you might in a large BASIC program, that organization effort is not saved between sessions.</p><p>You&#8217;ll want to get familiar with the <code>RENUMBER</code> command, which can insert a range of unused line numbers in the middle of your source code. For example, to renumber all lines from 1030 onward so that they start at number 2000 counting by 10s, thereby leaving a gap of available line numbers between 1030 and 2000:</p><pre><code><code>RENUMBER 2000,10,1030-</code></code></pre><p>EasyAsm enables Edit mode automatically when you boot the disk. To disable Edit mode and return to BASIC mode, use this command: <code>EDIT OFF</code> To re-enable Edit mode: <code>EDIT ON</code></p><p>Remember that when you're in BASIC mode, the prompt says "READY," and when you're in Edit mode, the prompt says "OK." Take care to notice which mode you are in before typing in lines of a program, and before loading or saving source files. If you type a line of assembly language source while in BASIC mode, it will attempt to interpret the line as BASIC code, and produce incorrect results. And if you try to <code>DSAVE</code> the source file while in BASIC mode, it&#8217;ll save as a PRG file.</p><h2>Assembling to disk</h2><p>With the <code>SIMPLE</code> program&#8217;s source code in memory, press <strong>Help</strong> to open the EasyAsm menu. Now select option #2: Assemble to Disk. EasyAsm assembles the program, but instead of running it, it creates a new PRG file on disk, named <code>"SIMPLE"</code>. You specify the name of the program file using the <code>!to</code> directive in the code.</p><pre><code><code>10 !TO "SIMPLE", RUNNABLE</code></code></pre><p>Type <code>DIR</code> to see the <code>SIMPLE</code> program file of type <code>PRG</code> alongside the <code>SIMPLE.S</code> source file of type <code>SEQ</code>.</p><p>I like to use a <code>.S</code> suffix for source code filenames, then omit the suffix for the program name. Take care to not use the same name for the source file and the program file, so that EasyAsm does not overwrite your source file with the program file.</p><p>Let&#8217;s try out the new program. Switch back to BASIC mode, then load and run the <code>SIMPLE</code> program, like any other program:</p><pre><code><code>EDIT OFF
DLOAD "SIMPLE"
RUN</code></code></pre><p>The program changes the border color, then exits.</p><p>In <a href="https://dansanderson.com/mega65/cross-development/">a previous Digest</a>, we used the Acme cross-assembler to make a program like this, using a lengthy preamble to produce a runnable program:</p><pre><code><code>!cpu m65
!to "hello.prg", cbm

* = $2001

!8 $12,$20,$0a,$00,$fe,$02,$20,$30,$3a,$9e,$20
!pet "$2014"
!8 $00,$00,$00

&#9;inc $d020
&#9;rts</code></code></pre><p>This would work in EasyAsm just as well: EasyAsm supports the <code>cbm</code> output type similar to Acme. But EasyAsm has a feature that makes this easier. When you tell the <code>!to</code> directive to make a <code>runnable</code> file, EasyAsm generates this preamble for you, including setting the program counter. In fact, this <code>cbm</code> listing and the <code>runnable</code> version you typed produce exactly the same output.</p><p>The PRG file contains your program and only your program. Give it to your friends so they too can change the colors of their borders!</p><h2>How to stop a running program</h2><p>When you assemble-and-test your assembly language program, EasyAsm attempts to recreate the memory layout that your program will see when it runs from disk. To do this, it first copies your source code out of program memory, so it can replace it with the assembled program for testing. EasyAsm watches for the program to exit using the <code>rts</code> instruction, then copies the source file back into program memory so you can continue to edit it.</p><p>That&#8217;s nice, but it&#8217;s not always possible&#8212;or even desired. A typical machine code program never exits. A broken machine code program might get stuck before it can exit.</p><p>Try entering a slightly different program:</p><pre><code><code>10 !TO "FOREVER", RUNNABLE
20
30 LOOP:
40   INC $D020
50   JMP LOOP</code></code></pre><p>Assemble and run the program. This program changes the border color repeatedly, in an infinite loop. It does not exit.</p><p>To interrupt this program and return to BASIC, hold <strong>Run/Stop</strong> and press <strong>Restore</strong>. The program stops, and the MEGA65 Monitor starts. Type <code>X</code> then press <strong>Return</strong> to exit the Monitor and return to the <code>OK</code> prompt.</p><p>Now type <code>LIST</code>.</p><p>Uh oh, there&#8217;s something wrong with the first line! EasyAsm did not see the program exit with the <code>rts</code> instruction, so it didn&#8217;t get a chance to restore the source file. The assembled instructions are still in program memory, having overwritten the source.</p><p>When this happens&#8212;and it will happen often&#8212;use menu option #9 to tell EasyAsm to bring back the source file. Press <strong>Help</strong>, then press <strong>9</strong>. Type <code>LIST</code> again to see the restored source.</p><h2>How EasyAsm uses memory</h2><p>EasyAsm tries to maintain a minimal memory footprint while you are editing your source code, and while your program is running. This allows you to use all the tools at your disposal for editing, and allows your program to use most of the computer, while still retaining a useful on-device workflow.</p><p>Of course, EasyAsm has to live somewhere. This is what EasyAsm needs:</p><ul><li><p>EasyAsm reserves the memory ranges $1E00-$1EFF (256 bytes of bank 0) and $8700000-$87FFFFF (1 megabyte of Attic RAM). If your program overwrites any of this memory, you will need to reload EasyAsm, and any stashed source code data may not be recoverable.</p></li><li><p>EasyAsm reserves the right to overwrite $50000-$5FFFF (all 64KB of bank 5) when you invoke EasyAsm. Your program can use this memory while it is running, but the state of this memory may change when EasyAsm is running. Overwriting this memory may inhibit EasyAsm&#8217;s ability to return to the <code>OK</code> prompt on <code>rts</code>.</p></li></ul><p>EasyAsm will refuse to assemble to addresses $1E00-$1EFF when assembling to memory, or when assembling a <code>runnable</code> program to disk (because the bootstrap routine may use it in the future). This restriction does not apply when assembling to disk in <code>cbm</code> mode.</p><p>If your program needs to use $1E00-$1EFF for its own purposes, that&#8217;s entirely fine. Just be aware that it will interfere with the EasyAsm workflow.</p><h2>What&#8217;s next for EasyAsm?</h2><p>I&#8217;m fairly confident that I could have used this initial version of EasyAsm to write many of the programs I&#8217;ve written for the MEGA65 so far. There are a few features I want to add to really make it feel like a complete assembler:</p><ul><li><p><code>!binary</code>: embed a file of binary data into a program (such as graphics or sound assets)</p></li><li><p><code>!source</code>: use multiple source files to describe a program (such as with reusable libraries), and to produce programs larger than Edit mode&#8217;s 44 KB memory limit for a single source file</p></li><li><p>Inspect an annotated source listing with program counter and byte values next to the original source lines (Acme&#8217;s &#8220;report&#8221; feature)</p></li><li><p>Inspect a list of label definitions (Acme&#8217;s &#8220;symbol list&#8221; feature)</p></li></ul><p>I have a roadmap of other feature ideas that I&#8217;m considering, though they&#8217;ll take more substantial work and I want to see if anyone actually uses EasyAsm first. &#128519; To me, the most important of these would be <em>macros,</em> a feature of Acme and other assemblers that makes programs easier to write, test, and manage. It's possible to write substantial programs without macros&#8212;the MEGA65 ROM source has no macros in it at all&#8212;but macros are a powerful way to organize code, reuse common structures, and mitigate some of the fragility of the low-level language.</p><p>As clever as Edit mode is, it would be nice to have a more modern IDE-like text editor as an option. I have plenty of ideas and opinions, and would love to try implementing them. That said, I intentionally designed EasyAsm so that it could be integrated into other projects, so someone else could implement supplemental tools.</p><p>I wrote EasyAsm from scratch in pure assembly language. I learned a lot about assembly language from this experience, and will be <s>milking this for content</s> writing about this in future episodes of the Digest.</p><div><hr></div><p>I included a few sample programs on the D81 disk image based on previous Digest and blog articles. Try loading their source files and assembling them. The longest file on the disk right now is my assembly language implementation of <a href="https://dansanderson.com/mega65/robot-finds-kitten/">Robot Finds Kitten</a>, 35 KB of source that assembles in six seconds.</p><p>Want to see continued development of EasyAsm, or my other projects like this Digest? Please consider becoming a patron. Visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a></p><p>I hope you try EasyAsm, and I hope it makes it easier to get started with assembly language programming. Let me know how it goes!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[Let's paint!]]></title><description><![CDATA[Dan's MEGA65 Digest for July 2024]]></description><link>https://m65digest.substack.com/p/lets-paint</link><guid isPermaLink="false">https://m65digest.substack.com/p/lets-paint</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Thu, 18 Jul 2024 05:09:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r5nF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r5nF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r5nF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 424w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 848w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 1272w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r5nF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png" width="696" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:696,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r5nF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 424w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 848w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 1272w, https://substackcdn.com/image/fetch/$s_!r5nF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F925d24ed-4f98-4a05-b768-e23ffa173ae1_696x475.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A blank canvas.</figcaption></figure></div><p>I feel like painting today. Let&#8217;s paint!</p><p>Oh, uh, but first&#8230;</p><h2>The Silent Enigma</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LOCs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LOCs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 424w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 848w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 1272w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LOCs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png" width="655" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:655,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7498,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LOCs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 424w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 848w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 1272w, https://substackcdn.com/image/fetch/$s_!LOCs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6467dec9-0ac5-4fed-82f8-fa86c428634d_655x466.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Silent Enigma, by Gurce.</figcaption></figure></div><p><a href="https://files.mega65.org/?id=4003af71-8f8d-48ff-a303-f0eac34dd465">The Silent Enigma</a> is a new demo by Gurce, based on <a href="https://www.youtube.com/watch?v=_iCDTMkTduE">the song by Anathema</a>. Gurce wrote the demo in BASIC 65 with the Eleven IDE, with assembly language helper routines in <a href="https://files.mega65.org/?id=3b101d41-5128-4a21-879c-0cf7988edfec">Mega Assembler</a> and <a href="https://sourceforge.net/projects/acme-crossass/">Acme</a>, and an extended version of <a href="https://files.mega65.org/?id=a3b2c04a-2a22-4913-8005-308dfe9e7971">grim-fandango&#8217;s MEGAPLOT library</a>.</p><p>The current version of the demo requires customized versions of the MEGA65 core and ROM to run on MEGA65 hardware. Gurce discovered a need for a new feature of the KERNAL for combining BASIC and machine code routines, and also discovered a core bug while getting it to work. We&#8217;re working on getting these improvements into the core platform. In the meantime, Gurce is <a href="https://gurce.net/silent.zip">distributing modified core and ROM files with the demo</a>.</p><p>Check out <a href="https://youtu.be/FtYOagApWcM">retroComb&#8217;s video debuting The Silent Enigma</a>, along with an interview with Gurce. And don&#8217;t miss the Eleven and assembly language source files included on the disk!</p><h2>My talk at PaCommEx NW is online</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZrJj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZrJj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 424w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 848w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 1272w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZrJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png" width="1110" height="624" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:624,&quot;width&quot;:1110,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZrJj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 424w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 848w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 1272w, https://substackcdn.com/image/fetch/$s_!ZrJj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F995e7b44-8dd7-4766-8fa6-d0399565de14_1110x624.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My talk at Pacific Commodore Expo Northwest</figcaption></figure></div><p>My talk about the MEGA65 at Pacific Commodore Expo Northwest 2024, <a href="https://www.youtube.com/watch?v=QY1Zj5tIhL4">Lessons from My First Two Years with the MEGA65</a>, is now on YouTube. My thanks to Robert Bernardo for producing the event, to Stephen Jones and <a href="https://sdf.org/">SDF.org</a> for sponsoring, and to everyone who attended. We had three MEGA65s on the floor this year, including <a href="https://www.youtube.com/watch?v=HYT8zUi7axQ">a live unboxing</a> of a freshly delivered unit!</p><h2>C64 core v5.1 released</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2fle!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2fle!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2fle!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2fle!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2fle!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2fle!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg" width="1024" height="579" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:579,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263065,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2fle!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2fle!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2fle!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2fle!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc78d7a38-75aa-4eb3-8501-c153c6e262ea_1024x579.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Commodore 64 core for the MEGA65</figcaption></figure></div><p><a href="https://files.mega65.org/?id=896a012f-59e4-456c-b91f-7e989b958241">The C64 core for the MEGA65</a>, one of the best things you can do for your favorite computer, has a new update. Version 5.1 adds support for the R6 mainboard, the board in all MEGA65s being delivered this year, and can take advantage of the R6 board&#8217;s bidirectional expansion port lines for Kung Fu Flash, MSSIAH, and freezer cartridge support. This update also includes improvements for all mainboards, including the ability to share the MEGA65&#8217;s Real-Time Clock with GEOS, using an appropriate driver.</p><p>Don&#8217;t forget that the MEGA65 has a new feature that can select the C64 core automatically when a C64 cartridge is installed. If your MEGA65 was delivered this year, your firmware is already up to date with this feature. If you have an older MEGA65, you can update to the v0.96 release in &#8220;slot 0&#8221; to get this feature. See the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">User&#8217;s Guide, 2nd edition</a>, for upgrade instructions.</p><p>See <a href="https://github.com/MJoergen/C64MEGA65/blob/master/VERSIONS.md">the C64 core release notes</a> for details on all of the changes.</p><h2>retroCombs MEGA65 Video User&#8217;s Guide</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cxM8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cxM8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 424w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 848w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 1272w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cxM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png" width="1347" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1347,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1078899,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cxM8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 424w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 848w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 1272w, https://substackcdn.com/image/fetch/$s_!cxM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d4a1a8-8edf-424a-9285-4fc2aad3ebff_1347x758.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">retroCombs MEGA65 User&#8217;s Guide video series.</figcaption></figure></div><p>retroCombs is producing <a href="https://www.youtube.com/playlist?list=PLRVBh2hjFTomDGwIT7uPMJv4zH9JAUSVG">a video series based on the MEGA65 User&#8217;s Guide, 2nd edition</a>. Steven is going chapter by chapter, reviewing the material, and presenting it in an entertaining and easy-to-understand fashion. It&#8217;s the perfect video companion to the Guide, and a useful resource in its own right, with additional tips not mentioned in the book. Steven just released <a href="https://www.youtube.com/watch?v=C-PNB9rlzV4&amp;list=PLRVBh2hjFTomDGwIT7uPMJv4zH9JAUSVG&amp;index=5">the video for chapter 4</a>, and intends to complete the series for the entire book.</p><p><a href="https://www.youtube.com/@retroCombs">Subscribe to retroCombs</a> to make sure you don&#8217;t miss a video!</p><h2>Canvas</h2><p>I need a canvas to paint on. Something 320 pixels wide and 200 pixels tall is good enough to start. I just want to use the 32 built-in colors for now, so a bit depth of 5 is plenty. (Five binary bits can express up to 32 values: 2 x 2 x 2 x 2 x 2 = 32.) I&#8217;ll use screen number 0.</p><pre><code><code>SCREEN 0,320,200,5</code></code></pre><p>Yes, that&#8217;s fine. I can&#8217;t see what I&#8217;m typing now because the text is behind the painting, but I can hold <strong>Run/Stop</strong> and tap <strong>Restore</strong> to get back to the text screen.</p><p>Blank canvases are intimidating. Whenever I buy a new notebook, I always scribble nonsense on the first page, so I&#8217;m not afraid to make mistakes on the other pages. I&#8217;ll take a swipe with some white paint (color 1).</p><pre><code><code>PEN 1
LINE 20,30,300,180</code></code></pre><p>I can specify locations on the canvas using numbers, one for the distance in pixels across from the left (the X coordinate), and one for the distance down from the top (the Y coordinate). With a 320 x 200 screen, coordinate X=0 Y=0 is the top-left corner, and X=319 Y=199 is the bottom-right corner. I drew my line from the position X=20 Y=30 to X=300 Y=180.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VblN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VblN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 424w, https://substackcdn.com/image/fetch/$s_!VblN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 848w, https://substackcdn.com/image/fetch/$s_!VblN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 1272w, https://substackcdn.com/image/fetch/$s_!VblN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VblN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png" width="422" height="316" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:316,&quot;width&quot;:422,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30538,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VblN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 424w, https://substackcdn.com/image/fetch/$s_!VblN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 848w, https://substackcdn.com/image/fetch/$s_!VblN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 1272w, https://substackcdn.com/image/fetch/$s_!VblN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a2b1ff-24a3-4c9d-907f-fffb1d1c34e9_422x316.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 system palette of 32 colors.</figcaption></figure></div><p>The 32 colors of the built-in palette are listed in the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">MEGA65 User&#8217;s Guide, 2nd edition</a>, appendix E. The first 16 of these are also written on the fronts of the number keys on the keyboard from <strong>1</strong> to <strong>8</strong>, in two rows: colors 0 through 7 are the top row (&#8220;Blk&#8221; through &#8220;Yel&#8221;), and colors 8 through 15 are the bottom row (&#8220;Orng&#8221; through &#8220;L Gry&#8221;).</p><p>I need to switch back to the canvas to see my white line. I&#8217;ll set my screen 0 to be both the canvas I&#8217;m drawing on and the canvas I&#8217;m looking at.</p><pre><code><code>SCREEN SET 0,0</code></code></pre><p>I notice that typing <code>SCREEN 0,320,200,5</code> again will not switch back to the existing canvas, it&#8217;ll open a new blank one. Here&#8217;s a way to clear an already-opened canvas, by filling it with color #6 (blue):</p><pre><code><code>SCREEN CLR 6</code></code></pre><p>Flipping back and forth between the text screen and the canvas is a bit cumbersome. I think I&#8217;ll put all of my painting commands into a BASIC program. This way, the MEGA65 can recreate my picture by following my painting instructions, and I can save my program to a floppy disk.</p><pre><code><code>10 SCREEN 0,320,200,5
20 PEN 1
30 LINE 20,30,300,170

DSAVE "LINE"

RUN</code></code></pre><p>I can press <strong>Run/Stop</strong> + <strong>Restore</strong> to get back to text mode, make changes to the program, and <code>RUN</code> it again to see the result.</p><p>If I wanted to give this program to someone else, they might enjoy being able to exit back to text mode by pressing a key. Here&#8217;s a simple way to do that:</p><pre><code><code>9998 GETKEY A$
9999 SCREEN CLOSE 0</code></code></pre><p>In addition to lines, BASIC has commands for drawing dots, and drawing shapes of several kinds, both filled and unfilled. I&#8217;m just messing around, changing the numbers to see how they change the picture.</p><pre><code><code>40 PEN 2
50 DOT 4,4
60 DOT 5,5
70 DOT 6,4
80 DOT 7,5
90 DOT 8,4

100 PEN 3
110 BOX 180,10,240,50
120 BOX 200,30,260,70,1

130 PEN 4
140 CIRCLE 50,150,24
150 CIRCLE 70,130,24,1

160 PEN 5
170 ELLIPSE 180,150,50,20
180 ELLIPSE 160,130,50,20,1

190 PEN 6
200 POLYGON 250,100,40,40,5
210 POLYGON 270,120,40,40,5,,,,1</code></code></pre><p>Of course, the User&#8217;s Guide has more information on how these commands work, including some additional interesting features.</p><p>Here is a simple picture I made.</p><pre><code><code>5 BORDER 0
10 SCREEN 0,320,200,5
20 PEN 27:BOX 0,0,319,30,1
30 PEN 28:BOX 0,31,319,60,1
40 PEN 29:BOX 0,61,319,90,1
50 PEN 30:BOX 0,91,319,120,1
60 PEN 0:CIRCLE 220,280,200,1
70 BOX 200,60,240,60,230,90,210,90,1
80 BOX 200,48,240,48,250,60,190,60,1
90 BOX 210,42,213,42,213,48,210,48,1
100 PEN 7:BOX 222,65,227,65,226,72,223,72,1
110 PEN 11:CIRCLE 213,36,4,1
120 CIRCLE 223,33,3,1
130 CIRCLE 232,31,4,1</code></code></pre><h2>Computer art</h2><p>Wherever there&#8217;s a number in a computer program, there could also be some computation that produces a number. This can turn math formulas, variables, and flow control structures into their own kind of computational paintbrush.</p><p>I want to try a simple grid pattern with regularly spaced lines. Instead of writing out all of the coordinates for each line, I&#8217;ll have the MEGA65 figure it out for me.</p><pre><code><code>5 BORDER 0
10 SCREEN 0,320,200,5
20 PEN 1
30 FOR X=0 TO 319 STEP 20
40 LINE X,0,X,199
50 NEXT X
60 FOR Y=0 TO 199 STEP 20
70 LINE 0,Y,319,Y
80 NEXT Y</code></code></pre><p>I can tell the computer how to calculate a number. Or, I can just let the computer pick a number at random. The computer can use its own imagination to paint a picture, in accordance with my instructions. (well actually computers don&#8217;t have imaginations and random numbers aren&#8217;t really random and whatever it&#8217;s fun)</p><pre><code><code>5 BORDER 0
10 SCREEN 0,320,200,5
20 PEN RND(1)*32
30 LINE RND(1)*320,RND(1)*200,RND(1)*320,RND(1)*200
40 GOTO 20</code></code></pre><p>BASIC 65 has some mathematical functions that can help paint interesting pictures, if I can remember enough geometry.</p><pre><code><code>5 BORDER 0
10 SCREEN 0,320,200,5
20 FOR Z=0 TO 4
30 PEN RND(1)*32
40 R=RND(1)*40+20
50 CX=RND(1)*200+60
60 CY=RND(1)*80+60
70 FOR A=0 TO 2*&#960; STEP 2*&#960;/30
80 LINE CX,CY,CX+COS(A)*R,CY+SIN(A)*R
90 NEXT A
100 NEXT Z</code></code></pre><p>Those symbols on line 70 are the Greek letter pi (&#960;), which I typed with <strong>Shift</strong> + up-arrow. In BASIC 65, this is the geometric constant pi, defined as the circumference of a circle divided by its diameter. Someone check my math.</p><h2>Graphing calculator</h2><p>I keep my MEGA65 on my desk and sometimes just use it as a simple calculator, typing a question mark <code>?</code> followed by an arithmetic expression at the <code>READY.</code> prompt to get a quick answer. I wonder if I could make the MEGA65 into a graphing calculator.</p><pre><code><code>1 DEF FN Y(X) = SIN(X*9)+1.5
2 XL = -3 : XH = 3
3 YL = -1 : YH = 4
4 REM ======================
5 BORDER 0
10 SCREEN 0,320,200,5
20 REM ==== DRAW AXES
30 PEN 12
40 IF 0 &lt; XL OR XH &lt; 0 THEN 70
50 V = 0:L = XL:H = XH:SC = 320:GOSUB 1000:XC = C
60 LINE XC,0,XC,199
70 IF 0 &lt; YL OR YH &lt; 0 THEN 100
80 V = 0:L = YL:H = YH:SC = 200:GOSUB 1000:YC = 199-C
90 LINE 0,YC,319,YC
94 IF XC &gt; 351 THEN XC = 351
95 IF YC &gt; 192 THEN YC = 192
100 CHAR 0,YC+1,1,1,2,STR$(XL)
110 CHAR 39-LEN(STR$(XH)),YC+1,1,1,2,STR$(XH)
120 CHAR XC/8+1,0,1,1,2,STR$(YH)
130 CHAR XC/8+1,191,1,1,2,STR$(YL)
140 REM ==== DRAW FUNCTION
150 PEN 7
160 PX = 0
170 V = FN Y(XL):L = YL:H = YH:SC = 200:GOSUB 1000:PY = SC-C
180 FOR X = XL TO XH STEP (XH-XL)/160
190 V = X:L = XL:H = XH:SC = 320:GOSUB 1000:NX = C
200 V = FN Y(X):L = YL:H = YH:SC = 200:GOSUB 1000:NY = SC-C
210 LINE PX,PY,NX,NY
220 PX = NX : PY = NY
230 NEXT X
999 END
1000 REM ==== SCALE V TO C WITHIN RANGE (L,H) BY SC
1010 C = (V-L)/(H-L)*SC
1020 IF C &gt; SC THEN C = SC
1030 IF C &lt; 0 THEN C = 0
1040 RETURN</code></code></pre><p>Huh&#8230; That&#8217;s interesting&#8230;</p><p>I think I got the gist of this right. The first few lines define the function to be plotted, and the domain (<code>XL</code> to <code>XH</code>) and range (<code>YL</code> to <code>YH</code>) to use for the graph.</p><p>The subroutine starting on line 1000 scales a value <code>V</code> to screen coordinate <code>C</code> within value range (<code>L</code>,<code>H</code>) scaled by <code>SC</code>. For example, to convert an X value to a horizontal screen coordinate, I set <code>V</code> to the X value, <code>L</code> to <code>XL</code>, <code>H</code> to <code>XH</code>, and <code>SC</code> to 320 (the pixel width of the screen). The subroutine returns with <code>C</code> set to the horizontal screen coordinate.</p><pre><code><code>190 V = X:L = XL:H = XH:SC = 320:GOSUB 1000:NX = C</code></code></pre><p>I use this subroutine for every such conversion. Importantly, I need to invert the vertical coordinate that comes back from this, because math graphs go up as Y values increase, but screen coordinates go down. So <code>PX = C</code>, and <code>PY = SC-C</code>.</p><p>To keep this simple, I only draw a zero-axis if the zero is within the range/domain, and I don&#8217;t bother with tick marks. I use the <code>CHAR</code> command to print the range/domain values close to the zero-axis lines, if appropriate, making sure they stay on screen.</p><p>To draw the function itself, I calculate a starting point based on its value for the leftmost point on the screen, <code>FN Y(XL)</code>, then loop over 160 evenly spaced points between <code>XL</code> and <code>XH</code>. For each iteration, I draw a line from the previous point to the next. <code>PX</code>/<code>NX</code> and <code>PY</code>/<code>NY</code> are the previous and next horizontal and vertical screen coordinates.</p><p>Real graphing calculators are pretty sophisticated. They need to be to produce something useful under all circumstances. For example, I just allow a graph that goes off the top or bottom of the screen to squash up against the edge. The <code>LINE</code> command doesn&#8217;t mind receiving fractional coordinates, but it will complain if I give it values outside of the screen. This could be improved by calculating exactly where the graph crosses the edge. But I&#8217;m painting here, not building something useful.</p><p>Also my sine graphs have a bit of a cowlick in some spots, for some reason. I&#8217;m guessing this is hitting up against the range limits of BASIC 65 floating point numbers. Math is hard. &#129335; Moving on&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A5i7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A5i7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 424w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 848w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 1272w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A5i7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png" width="161" height="124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:124,&quot;width&quot;:161,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A5i7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 424w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 848w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 1272w, https://substackcdn.com/image/fetch/$s_!A5i7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4ee5085-321f-4d63-91f8-bb995252ec6f_161x124.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">A graph of the BASIC 65 sine function?</figcaption></figure></div><h2>Paintbrush</h2><p>Painting with code is fun, but this computer can do more than use hand-entered numbers or numbers derived from math and randomness. I can also write a program that changes numbers interactively based on keys I press on the keyboard. Here&#8217;s the simplest version of this idea:</p><pre><code><code>10 SCREEN 0,320,200,5
20 X=100:Y=100
30 PEN 1
40 DOT X,Y
50 GETKEY A$
60 IF A$=CHR$(17) AND Y&lt;199 THEN Y=Y+1
70 IF A$=CHR$(29) AND X&lt;319 THEN X=X+1
80 IF A$=CHR$(145) AND Y&gt;0 THEN Y=Y-1
90 IF A$=CHR$(157) AND X&gt;0 THEN X=X-1
100 GOTO 40</code></code></pre><p>This operates similarly to our <a href="https://dansanderson.com/mega65/robot-finds-kitten/">Robot Finds Kitten</a> experiment from a while back. The program maintains a cursor position in the X and Y variables. It waits for a keypress, then compares it to the PETSCII codes for the cursor keys. After it confirms the cursor position won&#8217;t leave the screen, it changes the cursor position, then draws a dot. I can move the dot around the screen, and it leaves a trail, like an <a href="https://en.wikipedia.org/wiki/Etch_A_Sketch">Etch-a-Sketch</a>.</p><p>I could also make this controllable with a joystick, with almost no changes:</p><pre><code><code>10 SCREEN 0,320,200,5
20 X=100:Y=100
30 PEN 1
40 J=JOY(2)
50 DOT X,Y
60 IF J=5 AND Y&lt;199 THEN Y=Y+1
70 IF J=3 AND X&lt;319 THEN X=X+1
80 IF J=1 AND Y&gt;0 THEN Y=Y-1
90 IF J=7 AND X&gt;0 THEN X=X-1
100 GOTO 40</code></code></pre><p>Whoa! Uh, slow down there, partner:</p><pre><code><code>55 SLEEP 0.01</code></code></pre><p>This only supports four directions of movement, and actually feels like it sticks when I accidentally press the joystick in a diagonal direction. The <code>JOY()</code> function returns different values for diagonals. (See the <a href="https://files.mega65.org/?id=a5081244-a976-4a21-9153-27cca13fd613">User&#8217;s Guide</a>.) This should work.</p><pre><code><code>60 IF (J=4 OR J=5 OR J=6) AND Y&lt;199 THEN Y=Y+1
70 IF (J=2 OR J=3 OR J=4) AND X&lt;319 THEN X=X+1
80 IF (J=8 OR J=1 OR J=2) AND Y&gt;0 THEN Y=Y-1
90 IF (J=8 OR J=7 OR J=6) AND X&gt;0 THEN X=X-1</code></code></pre><p>It&#8217;d be nice if I had more control over the paintbrush behavior. Maybe if it doesn&#8217;t draw unless I press the button?</p><pre><code><code>50 IF J AND 128 THEN DOT X,Y:J=J AND 127</code></code></pre><p><code>JOY()</code> returns a value 0 through 8 representing the joystick direction, plus 128 if the fire button is pressed. I&#8217;m using a bitwise <code>AND</code> both to test the button on its own, and to erase the button part of the value for the rest of the comparisons.</p><p>OK that works, but now I can&#8217;t really see what I&#8217;m doing. Before, it was always drawing, so I could usually see where it will draw next when I move. Now it&#8217;s only drawing when the button is pressed. I need some kind of cursor on the display that doesn&#8217;t draw into the image itself.</p><p>On Commodores, that&#8217;s what sprites are for. <a href="https://dansanderson.com/mega65/sprite-attack/">We covered sprites</a>, yeah? I&#8217;m just going to use the built-in arrow sprite for now:</p><pre><code><code>15 SPRITE 0,1

45 MOVSPR 0,X+24,Y+50</code></code></pre><p>Remember that the sprite coordinate system is not the same as the screen coordinate system inside the border. The upper corner for a sprite is X=24, Y=50, so I need to add these values to the <code>MOVSPR</code> command.</p><p>That&#8217;s pretty good&#8230; Looks like there might be <a href="https://github.com/MEGA65/mega65-core/issues/810">a bug in sprite coordinates over bitplanes</a>. We&#8217;ll have to look into that.</p><p>That arrow cursor reminds me, I could also write this to use the mouse. This simplifies the code quite a bit because the KERNAL does its own range checking on the mouse position. My program just needs to read the mouse position, check for the button press, and draw a dot there if it is pressed. I still need to offset the mouse coordinates when I draw, this time in the other direction because <code>X</code> and <code>Y</code> are set to sprite coordinates by the <code>RMOUSE</code> command.</p><pre><code><code>10 SCREEN 0,320,200,5
20 MOUSE ON,1
30 PEN 1
40 RMOUSE X,Y,B
50 IF B THEN DOT X-24,Y-50
60 GOTO 40</code></code></pre><p>That&#8217;s neat! The dots are a bit spread apart though. I wonder if I can combine this with the technique in the graphing calculator to get a smoother line while the button is pressed.</p><pre><code><code>10 SCREEN 0,320,200,5
20 MOUSE ON,1
30 PEN 1
40 PX=-1
50 RMOUSE X,Y,B
60 IF B&lt;&gt;128 THEN PX=-1:GOTO 50
70 X=X-24:Y=Y-50
80 IF PX=-1 THEN 100
90 LINE PX,PY,X,Y
100 PX=X:PY=Y
110 GOTO 50</code></code></pre><p>Hmmm&#8230;</p><pre><code><code>41 SPRITE 0,1,1

51 GET A$:IF A$&lt;"1" OR A$&gt;"9" THEN 60
52 PEN VAL(A$)
53 SPRITE 0,1,VAL(A$)</code></code></pre><p>Maybe&#8230;</p><pre><code><code>90 CIRCLE X+RND(1)*10-5,Y+RND(1)*10-5,RND(1)*5,1</code></code></pre><p>And what about&#8230;</p><pre><code><code>42 SC=1

61 SC=SC-1
62 IF SC&gt;0 THEN 70
63 SOUND 1,RND(1)*65535,5
64 SC=50</code></code></pre><p>Oh, here&#8217;s an idea&#8230;</p><pre><code><code>90 LINE PX,PY,X,Y
91 LINE 320-PX,PY,320-X,Y
92 LINE PX,200-PY,X,200-Y
93 LINE 320-PX,200-PY,320-X,200-Y</code></code></pre><div><hr></div><p>That was fun!</p><p>Did I forget to include screenshots of my paintings? Ah, well. I suppose you can always just type these in and see what happens.</p><p>If you liked this one, please consider supporting the Digest with a contribution. I hope to continue making more of these, and your support goes a long way to making that possible. Visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a></p><p>Happy painting! See you next month.</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[KERNAL of Truth]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for June 2024]]></description><link>https://m65digest.substack.com/p/kernal-of-truth</link><guid isPermaLink="false">https://m65digest.substack.com/p/kernal-of-truth</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Tue, 18 Jun 2024 05:06:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9FgT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9FgT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9FgT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9FgT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg" width="498" height="563.6703296703297" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1648,&quot;width&quot;:1456,&quot;resizeWidth&quot;:498,&quot;bytes&quot;:244947,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9FgT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9FgT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fdf5fc6-816a-499c-a3e0-5bed2699967d_1541x1744.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pallets of MEGA65 parts, courtesy Trenz Electronic</figcaption></figure></div><p>The Summer of MEGA65 begins! The latest delivery batch is in progress, and many preorder holders are receiving their new favorite computer.</p><p>If you&#8217;re new to this Digest, welcome! Here you&#8217;ll find news about the MEGA65 and community projects, and interactive feature articles of things you can try for yourself. Read the Digest while next to your MEGA65 and PC for the best experience.</p><p>Also, every Digest has a read-aloud audio edition. Click the audio player at the top of the email or website, or subscribe to &#8220;Dan&#8217;s MEGA65 Digest&#8221; in your podcast player. I don&#8217;t know how many people listen to it, but I enjoy making it.</p><p>In this Digest, we&#8217;ll start taking a look at the MEGA65 KERNAL, the main operating system of the computer. We&#8217;ll build off of last month&#8217;s discussion of interrupts and the CPU memory map, and try writing a MEGA65 version of a classic KERNAL extension: a desktop time-of-day clock.</p><p>Let&#8217;s get started!</p><h2>Batch #3 is arriving!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A2Aa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A2Aa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A2Aa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg" width="544" height="425.1868131868132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1138,&quot;width&quot;:1456,&quot;resizeWidth&quot;:544,&quot;bytes&quot;:377444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A2Aa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A2Aa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62b49a12-f5fd-497e-b9bf-de14328c71f0_2373x1854.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGA65s being tested, courtesy Trenz Electronic</figcaption></figure></div><p>MEGA65 home computers are now arriving with their new owners! Trenz Electronic has begun sending out the third manufacturing batch, and will continue to fulfill pre-orders steadily. Congrats and welcome to everyone receiving a new bundle of joy!</p><p>Back in January, we were able to confirm with Trenz that this manufacturing batch will be large enough to cover all preorders placed up to that point. I continue to use that as a conservative estimate. New preorders placed in the last few months may need to wait a bit longer&#8212;or maybe not. For all we know, Trenz may be able to make quick work of another batch and get everyone taken care of. Rest assured that everyone involved in this project <em>wants</em> you to have a MEGA65 as soon as possible.</p><p>Of course, <a href="https://shop.trenz-electronic.de/en/TE0765-06-T001CK-MEGA65-highly-advanced-C64-and-C65-compatible-8-bit-computer?c=564">you can still order the MEGA65</a> if you haven&#8217;t already. Tell your friends!</p><h2>MEGA65 at the Pacific Commodore Expo Northwest, June 22-23, 2024</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!efoX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!efoX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 424w, https://substackcdn.com/image/fetch/$s_!efoX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 848w, https://substackcdn.com/image/fetch/$s_!efoX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 1272w, https://substackcdn.com/image/fetch/$s_!efoX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!efoX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png" width="508" height="428.2378048780488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:553,&quot;width&quot;:656,&quot;resizeWidth&quot;:508,&quot;bytes&quot;:463633,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!efoX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 424w, https://substackcdn.com/image/fetch/$s_!efoX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 848w, https://substackcdn.com/image/fetch/$s_!efoX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 1272w, https://substackcdn.com/image/fetch/$s_!efoX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b19eee-3ba6-4c5e-bebe-a31f542da8fd_656x553.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pacific Commodore Expo Northwest.</figcaption></figure></div><p>If you&#8217;re near Seattle, Washington, USA this month, I will be presenting the MEGA65 at the <a href="https://portcommodore.com/dokuwiki/doku.php?id=pacommex:start">Pacific Commodore Expo Northwest</a>, June 22-23, 2024. Admission is free. The space is cozy and filled with Commodores, and this year we have access to additional space for presentations. I&#8217;ll have my MEGA65 at a table all weekend for people to try.</p><p>I gave <a href="https://www.youtube.com/watch?v=vYTTn3fLNxc">a talk on the MEGA65 at last year&#8217;s PaCommEx NW</a> that went reasonably well, despite being hastily planned. Here&#8217;s hoping that I&#8217;ll have this year&#8217;s talk figured out in time. &#128556;</p><h2>MEGA65 at the Vintage Computer Festival Midwest, September 7-8, 2024</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!isRx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!isRx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 424w, https://substackcdn.com/image/fetch/$s_!isRx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 848w, https://substackcdn.com/image/fetch/$s_!isRx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 1272w, https://substackcdn.com/image/fetch/$s_!isRx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!isRx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png" width="1262" height="1003" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1003,&quot;width&quot;:1262,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89634,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!isRx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 424w, https://substackcdn.com/image/fetch/$s_!isRx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 848w, https://substackcdn.com/image/fetch/$s_!isRx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 1272w, https://substackcdn.com/image/fetch/$s_!isRx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f0d5ef4-453f-4944-ac81-6b7f14dd625f_1262x1003.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Vintage Computer Festival Midwest.</figcaption></figure></div><p>I&#8217;m working up plans to be at the <a href="https://vcfmw.org/">Vintage Computer Festival Midwest</a>, September 7-8, 2024, at the Schaumburg Convention Center in Schaumburg, Illinois near Chicago. This large show attracts enthusiasts from all over the USA and Canada, and is a regular pilgrimage for collectors, computer clubs, YouTubers, and makers of modern retro computers and peripherals. Admission is free.</p><p>This year, I&#8217;ll be collaborating with Jim Happel (jim_64) on a MEGA65 table. I&#8217;ve also applied for a speaking slot, though those won&#8217;t be announced until next month, so, fingers crossed. &#129310;</p><h2>MEGA65 at the Portland Retro Gaming Expo, September 27-29, 2024</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m3Vx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m3Vx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 424w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 848w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 1272w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m3Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png" width="357" height="258" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:258,&quot;width&quot;:357,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154394,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m3Vx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 424w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 848w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 1272w, https://substackcdn.com/image/fetch/$s_!m3Vx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56972a6f-55cb-4cc4-9dd4-2d2b37a2105b_357x258.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Portland Retro Gaming Expo.</figcaption></figure></div><p>My MEGA65 and I will be at the <a href="https://retrogamingexpo.com/">Portland Retro Gaming Expo</a>, September 27-29, 2024, in Portland, Oregon, USA. PRGE is one of the largest vintage video gaming shows in the Pacific Northwest, and this year they&#8217;re doing a home computing exhibition. Come for the interactive volunteer-run computer exhibits, then stay for the weekend of talks, playable arcade games, and the vendor floor. I&#8217;m not doing a talk at this one, but I&#8217;ll have my own table in the home computing area.</p><p>PRGE is a <a href="https://checkout.conventions.leapevent.tech/eh/Portland_Retro_Gaming_Expo_2024?cc=F99">ticketed event</a> at the Oregon Convention Center. If you&#8217;re visiting from out of town, get your hotel rooms reserved early&#8212;and make sure to leave time to explore Portland!</p><h2>Lala The Magical (preview)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Vek!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Vek!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 424w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 848w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 1272w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Vek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png" width="640" height="384" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:384,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28195,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Vek!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 424w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 848w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 1272w, https://substackcdn.com/image/fetch/$s_!-Vek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb899a252-ad89-4e5a-99e5-0b11bd32430d_640x384.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Lala the Magical (preview) for the MEGA65, by Majikeyric</figcaption></figure></div><p>Majikeyric is previewing a new game for the MEGA65! <a href="https://files.mega65.org/?id=a0182829-1a5a-4e3a-a666-b52eafaa3ec9">Lala the Magical (preview)</a> is an adorable puzzle platformer, with parallax scrolling areas and tons of enemies and collectibles. It&#8217;s based on <a href="https://dosgames.com/game/lala-the-magical-prologue/">the PC DOS game by the Mojon Twins</a>.</p><blockquote><p>In the ancient ruins (province of Badajoz) lives Lala with her teacher. She is learning magic but still has a long way to go.</p><p>&#8220;Tell me about the Sky Palace&#8221; &#8211; asks Lala, and her teacher tells her again about the three Power Gems hidden inside. &#8220;I&#8217;d love to see them&#8221;, but Lala&#8217;s teacher would say no&#8230; &#8220;It&#8217;s too dangerous, and powerful magic is required to traverse the palace&#8221;.</p></blockquote><p>You can play the preview with a joystick. Sound, music, and polish are in progress. I&#8217;m looking forward to the final product!</p><h2>Wonder Boy core</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TheJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TheJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 424w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 848w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 1272w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TheJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png" width="165" height="294" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:294,&quot;width&quot;:165,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66450,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TheJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 424w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 848w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 1272w, https://substackcdn.com/image/fetch/$s_!TheJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49a1da51-d2fb-4e08-a40f-f6fc28acf843_165x294.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Wonder Boy, arcade core by muse</figcaption></figure></div><p>muse continues his series of arcade cores with <a href="https://files.mega65.org/?id=7365cb17-4375-45d3-a833-a89a38266c5e">Wonder Boy</a>. This colorful side-runner will have you running, jumping, and even skateboarding across the landscape, collecting fruit and dodging creatures.</p><p>This core is available for both R3 (2022) and R6 (2024) MEGA65s. Be sure to use the correct version for your system, and <a href="https://github.com/sho3string/SEGASYS1MEGA65">follow the installation instructions</a>.</p><p>Arcade cores use the MEGA65&#8217;s FPGA to fully recreate arcade game chipsets with a high degree of accuracy. Thanks to muse for his continued dedication to the arcade core library!</p><h2>The role of the KERNAL</h2><p>In computer architecture, the <em>kernel</em> is the center of a computer&#8217;s operating system. It manages access to hardware such as the keyboard, storage devices, and peripherals, as well as other common facilities. Programs&#8212;including the rest of the operating system&#8212;access these facilities by interacting with the kernel.</p><p>The Commodore KERNAL has played this role in Commodore 8-bit computers all the way back to the Commodore PET. The proper name, spelled with an &#8220;A&#8221; and all uppercase, <a href="https://en.wikipedia.org/wiki/KERNAL#The_name">is credited</a> to an honest misspelling of the word &#8220;kernel&#8221; by developer Robert Russell that made its way into the VIC-20 programmer&#8217;s manual. While the KERNAL has evolved substantially across the line all the way up to the Commodore 65, its role in the computer and many of its key features and interfaces have remained largely the same since 1977.</p><p>In total, a Commodore computer&#8217;s operating system consists of the KERNAL, the BASIC interpreter, and the screen editor. The machine code for the operating system is etched into a ROM chip, wired to be the first thing the CPU sees when it wakes up. If the KERNAL detects that a C64-style cartridge is connected, it passes control to the cartridge. Otherwise, the KERNAL starts the screen editor, from which the user can load and run programs, type other commands, or start programming in BASIC. These three components tend to share some responsibilities, and the distinctions between them can be a bit blurry in some places, but that&#8217;s the general idea.</p><p>(There&#8217;s an interesting historical exception to the start-up procedure. The Commodore 64 was designed with support for cartridges made for the Commodore MAX, aka &#8220;Ultimax&#8221; or &#8220;VC-10.&#8221; An Ultimax cartridge connects directly to the 6510 chip&#8217;s I/O lines in a way that causes the CPU to go directly to the cartridge for its first instructions. The Ultimax did not have its own operating system: it relied on the connected cartridge for everything.)</p><h2>Programming with the KERNAL</h2><p>There are three main ways the KERNAL participates in the execution of programs: KERNAL subroutine calls, the KERNAL IRQ handler, and vectors.</p><h3>KERNAL subroutines</h3><p>A program can call subroutines in the KERNAL code to perform tasks and interact with the KERNAL&#8217;s systems. Here&#8217;s a simple machine code program that writes a short message to the screen by calling the KERNAL subroutine BSOUT:</p><pre><code><code>bsout = $ffd2

    lda #'H'
    jsr bsout
    lda #'I'
    jsr bsout
    lda #13
    jsr bsout</code></code></pre><p>The BSOUT routine writes a single character to the current output device, which by default is the screen editor. The program sets the accumulator to the character to be written as a PETSCII code, then calls BSOUT with the JSR instruction to address $FFD2. The subroutine does all of the work to write the character, then returns.</p><p>The screen editor does a lot of work here. It maintains a text cursor&#8212;the same one that you type with at the READY prompt&#8212;that has a position on the screen, and a draw state including the text color and other attributes. When it receives a character from the program via BSOUT, the screen editor figures out what changes to make to screen and character attribute memory, moves the cursor position, and scrolls the screen up if the text runs off the bottom. (<a href="https://dansanderson.com/mega65/petscii-codes/">Other PETSCII codes</a> change the draw state or cursor position in other ways.)</p><p>The screen editor is a full-fledged built-in application that behaves like <a href="https://en.wikipedia.org/wiki/Computer_terminal">an input/output terminal</a>. Your program writes to and reads from this terminal using KERNAL subroutines.</p><h3>The KERNAL subroutine jump table</h3><p>$FFD2 is not actually the memory location of the BSOUT subroutine. Instead, the KERNAL keeps a JMP instruction at that address that goes to the actual subroutine code. Each KERNAL subroutine available to programs has one of these, in a fixed memory location called a <em>jump table</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9rHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9rHK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 424w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 848w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 1272w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9rHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png" width="277" height="372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:372,&quot;width&quot;:277,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27173,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9rHK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 424w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 848w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 1272w, https://substackcdn.com/image/fetch/$s_!9rHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde0e9577-166a-495a-ab60-ee3fb5e7ac44_277x372.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The program, KERNAL subroutine, and jump table, in memory.</figcaption></figure></div><p>The jump table provides a critical layer of compatibility across different versions of the KERNAL. Your program needs an explicit address to where it can jump, to invoke the subroutine. When the KERNAL developers inevitably need to relocate the subroutine code to a different address in a new version of the operating system, they can just update the address in the jump table, and your program (and everyone else&#8217;s) will continue to run correctly because the jump table itself doesn&#8217;t move.</p><p>I recently added an appendix to <a href="https://files.mega65.org/?id=d668168c-1fef-4560-a530-77e9e237536d">the MEGA65 Compendium</a> describing all of the KERNAL subroutines and how to use them, including jump table addresses, CPU register arguments, and example programs. Check it out, and let me know what you think!</p><h3>The KERNAL raster IRQ</h3><p>As we covered in detail <a href="https://dansanderson.com/mega65/racing-the-beam/">in last month&#8217;s Digest</a>, you can program the VIC video chip to tell the CPU when its raster beam is at a given vertical location on the screen. This triggers an <em>interrupt</em> that causes the CPU to call a special kind of subroutine known as an <em>interrupt handler.</em> A typical use of the vertical raster beam interrupt is to have a chunk of program code that gets called many times per second at regular intervals. This allows the program to be organized as if it is two programs running side by side: a main program that runs normally, and a short secondary program kicked along by the interrupt.</p><p>The KERNAL uses this raster interrupt in this way. It installs an interrupt handler that pays regular attention to KERNAL subsystems while the user&#8217;s program is running. The KERNAL IRQ handler drives behaviors of the screen editor such as blinking the cursor and checking for special keyboard combinations like <strong>Mega</strong> + <strong>Shift</strong>, and behaviors of BASIC such as sprite move animations (from the <code>MOVSPR</code> command) and music playback (from the <code>PLAY</code> command).</p><p>Most programs can just take for granted that the KERNAL is doing its own thing with the raster IRQ. As we saw last month, only one IRQ handler can be installed at a time, so a program that wants to take over the IRQ handler must disable the KERNAL. But the KERNAL has a way it can share its IRQ handler with a program, so they can both play&#8230;</p><h3>KERNAL vectors</h3><p>The KERNAL generously offers programs the ability to replace or extend some of the KERNAL&#8217;s own subroutines. In these cases, when the KERNAL wants to call one of its own subroutines, it looks up the address in a table. This table is initialized to the address of the KERNAL&#8217;s version of the subroutine, so without changes, everything behaves normally. A program can replace that address with an address of its own, so the KERNAL calls the program&#8217;s routine instead. This indirect address is called a <em>vector</em>, because of how it points to where the KERNAL will go.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YFpb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YFpb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 424w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 848w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 1272w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YFpb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png" width="594" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:594,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34856,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YFpb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 424w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 848w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 1272w, https://substackcdn.com/image/fetch/$s_!YFpb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37bc4470-4cc9-4a12-af9e-66962cb3fc57_594x472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How the KERNAL uses a vector table, before and after a customization.</figcaption></figure></div><p>A program can replace a KERNAL routine by re-pointing a vector, but this is a heavy task in most cases. Much more common is to extend the existing KERNAL routine with additional functionality. It works like this:</p><ol><li><p>Read the address of the original KERNAL routine from the vector table.</p></li><li><p>Write that address into a JMP instruction at the end of the program&#8217;s custom routine.</p></li><li><p>Re-point the vector to the beginning of the custom routine.</p></li></ol><p>Now when the KERNAL calls the vector, control goes to the custom routine. The custom routine does some custom things, then jumps to the KERNAL&#8217;s original routine. The KERNAL routine still does the heavy lifting, and the custom routine just adds a bit of extra functionality.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lUeL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lUeL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 424w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 848w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 1272w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lUeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png" width="594" height="224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a23a2413-461b-4069-bec8-66c731d4cead_594x224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:224,&quot;width&quot;:594,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22458,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lUeL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 424w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 848w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 1272w, https://substackcdn.com/image/fetch/$s_!lUeL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa23a2413-461b-4069-bec8-66c731d4cead_594x224.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">A custom vector routine returning to the KERNAL.</figcaption></figure></div><p>This is how the KERNAL can share its IRQ handler. In the middle of the KERNAL&#8217;s IRQ handler, it calls a vector that points right back at the rest of the IRQ handler. A program can use the vector to insert its own routine that gets called as part of the KERNAL&#8217;s raster IRQ. This way, the program can combine the KERNAL IRQ and its custom IRQ routine, all running alongside its main program code.</p><p>Custom vectors remain installed when your program returns to BASIC. This allows a program to extend KERNAL behaviors used by BASIC and the screen editor. The custom IRQ vector is especially fun for this. A game written in BASIC can invoke a small amount of machine code to install an IRQ vector that plays a SID music file, and this music plays in the background while BASIC runs the rest of the game. You could even listen to SID music while writing your BASIC program, with the playback routine running alongside the screen editor!</p><p>Note that <strong>Run/Stop</strong> + <strong>Restore</strong> will reset KERNAL vectors. There are ways to prevent this, but we won&#8217;t cover them here for now. In general, this is a good thing, so you can get the system back to normal when a bug in a vector routine gets out of control.</p><h2>The VECTOR accessor</h2><p>The KERNAL keeps its vector table in its own private memory location. To read from or write to the vector table, a program calls a KERNAL subroutine that copies the table to or from the program&#8217;s memory. The full procedure for installing an extension vector routine is:</p><ol><li><p>Call VECTOR, telling it to copy the vector table to program memory.</p></li><li><p>Copy the original vector address from the table into a JMP instruction at the end of the custom routine.</p></li><li><p>Write the address of the custom routine to the program&#8217;s copy of the vector table.</p></li><li><p>Call VECTOR again, telling it to copy the vector table from program memory into KERNAL memory.</p></li></ol><p>Some Commodore programmers are accustomed to reading and writing custom vector addresses directly from internal KERNAL memory, without using the VECTOR routine. For the MEGA65, it is important for programs to use the VECTOR accessor routine, and to not depend on the internal KERNAL memory address. Just like how the jump table protects your program from KERNAL subroutines jiggling around between ROM versions, the VECTOR accessor protects your program from the KERNAL vector table jiggling in the same way.</p><p>We&#8217;ll try an example below. See the entry for VECTOR in the &#8220;KERNAL Jump Table&#8221; appendix of the Compendium for a complete explanation, along with a description of the vector table.</p><h2>A bit more about the MAP</h2><p>Last month, we briefly considered the CPU memory map, just enough to understand that the KERNAL assigns itself into the $E000-$FFFF address range so it can take over the IRQ handler address stored at $FFFE-$FFFF. We ditched the KERNAL by zeroing out the memory map, so all 16-bit addresses referred to RAM in the MEGA65&#8217;s first (well, zeroth) 64K memory bank.</p><p>I will continue to avoid a complete description of the MAP register&#8212;see the &#8220;Memory&#8221; chapter of the Compendium for that&#8212;but it&#8217;s worth knowing a bit more about how the KERNAL uses MAP when integrating with it using jump table entries and vectors.</p><h3>Mapping 16-bit addresses to 28-bit addresses</h3><p>Recall that the CPU sees 64KB of memory at a time, using 16-bit addresses $0000 to $FFFF. The MEGA65 has a much larger 28-bit address space, $000.0000 to $FFF.FFFF. The memory map assigns 8KB regions of the 16-bit space to parts of the 28-bit space, and a program can reconfigure this map with the CPU instructions <code>map</code> and <code>eom</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Us9A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Us9A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 424w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 848w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 1272w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Us9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png" width="604" height="231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:231,&quot;width&quot;:604,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19578,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Us9A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 424w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 848w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 1272w, https://substackcdn.com/image/fetch/$s_!Us9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5601c48-4d87-4445-92e6-7945b7e9abcb_604x231.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The CPU MAP associates 16-bit addresses with 28-bit addresses.</figcaption></figure></div><p>There are actually a few ways the CPU can read and write memory using full 28-bit addresses without changing the map. Crucially, the CPU can only execute machine code instructions via 16-bit addresses. In other words, to execute code somewhere in the MEGA65&#8217;s memory, the memory map must have an 8KB region mapped to that location. Instructions like JMP use the 16-bit address into the memory map to find that code.</p><h3>Two KERNAL maps</h3><p>When the MEGA65 starts, it runs BASIC, the screen editor, and the KERNAL all together to power the familiar READY prompt, blinking cursor, program line editor, and library of BASIC commands. The operating system code that powers all of this lives in bank 3. There&#8217;s a lot of it, so in this mode, most of the memory map points to bank 3. Specifically, $2000 to $BFFF refer to $3.2000 to $3.BFFF, and $E000 to $FFFF refer to $3.E000 to $3.FFFF.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aPa3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aPa3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 424w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 848w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 1272w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aPa3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png" width="651" height="162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:162,&quot;width&quot;:651,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20943,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aPa3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 424w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 848w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 1272w, https://substackcdn.com/image/fetch/$s_!aPa3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfbee4e-ec7e-4361-bc50-f728ff4051bc_651x162.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The BASIC MAP.</figcaption></figure></div><p>If the operating system is hogging most of the 16-bit addresses, where does our program code live? The KERNAL has two tricks up its sleeve, one for BASIC, and one for machine code.</p><p>A BASIC program lives in RAM in bank 0, starting at address $0.2001. The BASIC interpreter uses the CPU&#8217;s ability to read from 28-bit addresses to access BASIC program code. The machine code for the interpreter lives in memory starting at $3.2000, and is mapped in to 16-bit addresses starting at $2000. The interpreter itself reads the BASIC code from MEGA65 RAM directly using 28-bit addresses starting at $0.2000. (You&#8217;ll get used to it.)</p><p>A typical standalone assembly language program, the kind we start with the <code>RUN</code> command, starts with a short BASIC program that consists of a <code>SYS</code> command and the address of the beginning of the machine code, such as $2014. The machine code lives right next to the BASIC starter code, in bank 0 from $0.2014 onward. The CPU can&#8217;t execute this machine code when the BASIC memory map is active. So how does <code>SYS</code> get to it?</p><p>The answer: <code>SYS</code> changes the map. In the new map, only $E000 to $FFFF are mapped to $3.E000 to $3.FFFF. This is the KERNAL, without the BASIC interpreter or the screen editor.</p><p>In both maps, the unmapped region $C000 to $DFFF connects to I/O registers and whatnot, using features of the memory system that we won&#8217;t discuss here. See the &#8220;Memory&#8221; chapter for details.</p><h3>So what?</h3><p>Understanding how the KERNAL uses the memory map is important when writing software that depends on the KERNAL.</p><p>If your machine code program is a game or demo that doesn&#8217;t need the KERNAL for anything, it can map out the KERNAL, take over the interrupt handlers, and run the whole show. The tradeoff is, if you want to do something like read a file from disk, you&#8217;ll have to provide your own driver routines that interface directly with hardware registers.</p><p>If your program calls KERNAL subroutines, or if it installs vectors but does not return to BASIC, the SYS map will work just fine. The KERNAL routines live in $E000 to $FFFF, and this is present in both the BASIC map and the SYS map. The KERNAL&#8217;s internal memory is in the $0000-$15FF region, in bank 0.</p><p>If your program installs vector routines then returns to BASIC, those routines must live in a region that&#8217;s accessible from the BASIC map, not just the SYS map. This means your vector routines must live within $1600 to $1EFF.</p><p>The vector routines themselves can do something fancy like disable interrupts, change the map, do something with code elsewhere in memory, then restore the map and re-enable interrupts before continuing on. See that &#8220;Memory&#8221; chapter again if you want to try to figure that out.</p><h2>Project: a desktop clock</h2><p>It&#8217;s 10 o&#8217;clock at night, the kids and spouse have gone to bed, and you finally have a bit of time to play with your MEGA65. You flip through the User&#8217;s Guide, scroll through some old Digests, and decide to try a little BASIC program. You type a few lines, run the program, get a satisfying result, then write some more code. Everything is going great. Then you look up and it&#8217;s 3 o&#8217;clock in the morning! And you have an important work meeting in five hours! If only you had a little clock display in the corner of the MEGA65&#8217;s screen, you wouldn&#8217;t be in this mess.</p><p>Let&#8217;s try extending the KERNAL with an IRQ routine that prints the current time of day in the corner of the screen. This program has two parts: an installer that sets up the IRQ vector to point to a clock printing routine, and the clock routine itself.</p><p>To keep the memory management simple, we will assemble everything starting at address $1600, leaving out the BASIC preamble of a traditional program assembled to $2001. This complicates the user instructions a bit: the user must load the program with the <code>BLOAD</code> command, and start it with <code>SYS $1600</code>. But this turns out to be somewhat convenient. If the user resets the KERNAL vectors with <strong>Run/Stop</strong> + <strong>Restore</strong>, they can re-install the clock by running <code>SYS $1600</code> again.</p><p>Here&#8217;s the full listing:</p><pre><code><code>!cpu m65
!to "clock.prg", cbm
!symbollist "clock.lst"

* = $1600

vector = $ff8d
scrnptr = $d060
attrmem = $d800
rtc = $fd7110    ; RTC registers at $0ffd7110
rtc_mb = $0f

    ; Read vector table into memory
    sec
    ldx #&lt;vectable
    ldy #&gt;vectable
    jsr vector

    ; Copy the iirq vector to custom_irq's
    ; jmp instruction
    lda vectable
    sta custom_irq_return+1
    lda vectable+1
    sta custom_irq_return+2

    ; Write custom_irq address to iirq
    lda #&lt;custom_irq
    sta vectable
    lda #&gt;custom_irq
    sta vectable+1

    ; Install updated vector table
    clc
    ldx #&lt;vectable
    ldy #&gt;vectable
    jsr vector

    ; Return to BASIC
    rts

custom_irq:
    lda #rtc_mb
    sta $ff
    lda #^rtc
    sta $fe
    lda #&gt;rtc
    sta $fd
    lda #&lt;rtc
    sta $fc

    ldx #0     ; X: output buffer position
    ldz #2     ; Z: 2=hours, 1=minutes,
               ;    0=seconds
-   lda [$fc],z
    cpz #2     ; Hours value needs truncation
    bne +
    and #$7f
+   tay
    ; Convert Binary Coded Decimal (BCD)
    ; to two screen codes
    lsr
    lsr
    lsr
    lsr
    clc
    adc #48
    sta clock_buf,x
    inx
    tya
    and #$0f
    clc
    adc #48
    sta clock_buf,x
    inx
    inx         ; Skip over colon
    dez
    bpl -

    ; Copy clock_buf to the screen
    lda #72     ; column of clock display
    ldx #0
    ldy #0
    ldz #0
    adcq scrnptr  ; screen memory address,
                  ;   plus column offset
    stq $fc       ; $fc-$ff = where the clock
                  ;   will go

    ldz #7
    ldx #7
-   lda clock_buf,x
    sta [$fc],z
    dez
    dex
    bpl -

    ; Reverse white
    ldx #7
    lda #33
-   sta attrmem+72,x
    dex
    bpl -

custom_irq_return:
    jmp $0000
custom_irq_end:

clock_buf:
    !byte 48,48,58,48,48,58,48,48  ; 00:00:00

vectable:
    !fill $30</code></code></pre><p>Things to notice:</p><p><code>* = $1600</code> : The installer assembles to address $1600, with the IRQ routine immediately following. The assembler creates the file <code>clock.prg</code> with this starting address. The user can load it with <code>BLOAD "CLOCK"</code>. Note that <code>DLOAD "CLOCK"</code> will not load it to the correct address and should not be used.</p><p><code>sta custom_irq_return+1</code> : The <code>jmp $0000</code> instruction at the end of the custom IRQ routine assembles to three bytes, one for the <code>jmp</code> instruction and two for the address. The installer copies the original KERNAL IRQ vector to the address portion of this instruction.</p><p><code>$0ffd7110</code> : The Real-Time Clock can be read from hardware registers starting at $0FFD7110. There are six byte registers: seconds, minutes, hours, day-date, month, year (from the year 2000). Each value is a two-digit Binary Coded Decimal (BCD), where each 4-bit nibble represents one decimal digit. This might seem like a crazy way to store a number, but it&#8217;s quite useful when the end goal is to display it as a decimal number. To read the left digit alone, shift right four times: <code>lsr</code>&#8230;. To read the right digit alone, mask out the upper four bits: <code>and #$0f</code>.</p><p><code>and #$7f</code> : The hours value needs its top bit masked out for some reason.</p><p><code>adcq scrnptr</code> : The address of screen memory where the clock should be drawn is calculated by adding 72 to the starting address of screen memory, read from the VIC SCRNPTR register ($D060-$D063). This is a 28-byte pointer, and using the Q virtual register to calculate column 72 allows this to support any text screen configuration, including 80x50 mode. Of course, on a 40x25 screen, an offset of 72 would put it on the second row. This could be improved by detecting the screen width. See the SCRORG KERNAL routine for one way to do this.</p><p><code>sta attrmem+72,x</code> : To make the clock stand out, it is drawn with character attributes for reverse mode and a white color. The VIC makes the first 2KB of attribute memory visible at $D800, which is sufficient to reach the top half of the screen. See the &#8220;Memory&#8221; chapter for an explanation of attribute memory. (Naturally, the &#8220;72&#8221; in this statement would also have to change to support the clock on the first row in 40-column mode.)</p><div><hr></div><p>Here&#8217;s a pre-assembled version of the clock program if you want to play with it:</p><ul><li><p><a href="https://dansanderson.com/mega65/kernal-of-truth/clock.d81">clock.d81</a></p></li></ul><p>A reminder of the instructions:</p><ol><li><p>To load the clock: <code>BLOAD "CLOCK"</code></p></li><li><p>To start the clock: <code>SYS $1600</code></p></li><li><p><strong>Run/Stop</strong> + <strong>Restore</strong> stops the clock. <code>SYS $1600</code> again to bring it back.</p></li></ol><div><hr></div><p>Did you enjoy this Digest? Consider supporting the Digest with money! Visit: <a href="https://ko-fi.com/dddaaannn/">ko-fi.com/dddaaannn</a></p><p>Oh, and be sure to <a href="mailto:contact@dansanderson.com">send me a photo</a> of your MEGA65 set-up! I might feature it in a future issue.</p><p>Cheers!</p><p>&#8212; Dan</p><p></p>]]></content:encoded></item><item><title><![CDATA[Racing the Beam]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for May 2024]]></description><link>https://m65digest.substack.com/p/racing-the-beam</link><guid isPermaLink="false">https://m65digest.substack.com/p/racing-the-beam</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Sat, 01 Jun 2024 06:35:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9sgM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At least once before in this Digest I&#8217;ve said something about how there&#8217;s a way to write a program to perform precisely timed actions, but the actual technique would have to wait until a future issue. In this issue, we&#8217;ll start looking into this, with a focus on synchronizing a program with a particularly useful hardware feature: the <em>raster beam</em>.</p><p>To do this effectively, we&#8217;ll introduce an important programming paradigm supported directly by a feature of the CPU, called <em>interrupts</em>. To get that to work, we&#8217;ll also take a brief look at how to uninstall the KERNAL operating system by changing the system&#8217;s memory map.</p><h2>Any news?</h2><p>Trenz Electronic is busily assembling new MEGA65s, still on track for delivering the next batch in the next few weeks. The Discord and Forum64 board have been quieter than usual, with everyone starting new projects or resting up from previous ones. I can&#8217;t wait for the rush of new people joining and asking questions!</p><p>If you have a project in progress that you&#8217;d like to see featured in the Digest, <a href="mailto:contact@dansanderson.com">let me know</a>! You can also announce your project in the <code>#announcements</code> channel on the Discord, and upload your work in progress to <a href="https://files.mega65.org/">Filehost</a> for others to try. Beginners welcome! Some of the coolest stuff we&#8217;ve seen for the MEGA65 has been written in BASIC by people like you just trying things out.</p><h2>The time keepers</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9sgM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9sgM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9sgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg" width="524" height="349.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:476,&quot;width&quot;:714,&quot;resizeWidth&quot;:524,&quot;bytes&quot;:27540,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9sgM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9sgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb229c94d-5091-4ad7-b42d-cf5ebdef43cd_714x476.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">16 MHz crystal oscillator.</figcaption></figure></div><p>Every computer contains <a href="https://en.wikipedia.org/wiki/Crystal_oscillator">a component</a> that generates a <em>clock signal,</em> a fast and precisely timed electronic pulse that drives the digital devices in the computer. Like turning the crank of a music box, these pulses advance the internal mechanisms of each device through their various stages to perform computations, and to generate signals of their own. The clock signal also synchronizes the devices with each other, so they can communicate with one another over their electronic connections.</p><p>MEGA65 programs can take advantage of three specific devices driven by the system clock to execute code with precise timing: the CPU, the VIC video chip, and the CIA chip.</p><h3>The CPU</h3><p>The CPU uses the clock signal to perform the machine code instructions of a program. Each instruction requires a certain number of <em>cycles</em> to perform, where each cycle takes a fixed amount of time based on the clock. For example, the <code>lda #$ff</code> instruction, which loads the byte value <code>$ff</code> from the program code into the accumulator register, takes two CPU cycles to complete. The cycle cost of an instruction depends on the instruction and addressing mode, but it&#8217;s typically between 1 and 6 cycles, and as many as 14 cycles for fancier operations like the 45GS02 Q-register instructions.</p><p>In its default MEGA65 mode, the MEGA65 CPU performs instructions at 40.5 million cycles per second, or 40.5 megahertz (MHz). The MEGA65 can also <em>underclock</em> its cycle rate to emulate a Commodore 64 (1 MHz), Commodore 128 (2 MHz), or Commodore 65 (3.5 MHz).</p><p>In theory, you can analyze the duration of a section of machine code by looking up the cycle costs of each instruction and adding them together. Commodore 64 programmers sometimes do this to optimize small sections of code, especially for advanced video effects that require precise coordination between the 1 MHz CPU and the VIC video chip. This is less necessary with the MEGA65&#8217;s 40.5 MHz CPU, which outpaces most of the signal frequencies that a program might care about.</p><p>A program can pause for a period of time by executing instructions and ignoring the results, simply to burn through cycles. This could be a series of instructions in memory, a loop with a counter, or a loop that exits when a hardware register changes. This technique is known as <em>busy-waiting</em> because the CPU can&#8217;t stop executing instructions: it has to twiddle its thumbs to keep busy&#8212;and also to figure out when to stop waiting and continue the program.</p><p>Try these examples of busy-waiting in BASIC:</p><pre><code><code>5 REM -- PAUSE BRIEFLY BY DOING NOTHING IN A LOOP
10 BORDER 0
20 FOR A=1 TO 20000
30 NEXT A
40 BORDER 1

5 REM -- WAIT FOR JOYSTICK FIRE BUTTON, PORT 1
10 BORDER 0
20 IF (JOY(1) AND 128)=0 THEN 20
30 BORDER 1</code></code></pre><h3>The VIC</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fR7z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fR7z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fR7z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg" width="550" height="375.375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:546,&quot;width&quot;:800,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:54866,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fR7z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fR7z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6053bdb7-ff7e-4c85-9e91-b7e0672d3bfd_800x546.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The VIC 6569 chip. (Image from c64-wiki.com)</figcaption></figure></div><p>The VIC video chip uses the system clock to generate a video signal with the precise timing expected by the display hardware. Such protocols are derived from old <a href="https://en.wikipedia.org/wiki/Cathode-ray_tube">cathode-ray tube (CRT)</a> displays that draw the entire screen with a beam of electrons. This <em>raster beam</em> sweeps across the screen in a fixed pattern of horizontal rows, or <em>raster lines</em>, from left to right, top to bottom. The video signal controls the intensity of the beam, and the beam leaves pixels in its wake that form the complete image. Once it reaches the bottom, the beam returns to the top of the screen, and the process repeats, many times per second.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4w_8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4w_8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 424w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 848w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 1272w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4w_8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png" width="324" height="231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:231,&quot;width&quot;:324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10783,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4w_8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 424w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 848w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 1272w, https://substackcdn.com/image/fetch/$s_!4w_8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fc9f720-2fec-4912-803c-43ffd31483a2_324x231.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Path of the raster beam: left to right, top to bottom.</figcaption></figure></div><p>The MEGA65 connects to modern <a href="https://en.wikipedia.org/wiki/Video_Graphics_Array">VGA analog</a> or <a href="https://en.wikipedia.org/wiki/Digital_Visual_Interface">HDMI digital</a> displays. Internally, it attempts to recreate the display parameters of one of two vintage analog video modes, either <a href="https://dansanderson.com/mega65/welcome/concepts.html#pal-and-ntsc">PAL or NTSC</a>, so that vintage software that depends on these parameters will run properly. The PAL video mode draws 312 raster lines 50 times per second, also known as a <em>refresh rate</em> of 50 Hz. NTSC draws 262 lines 60 times per second, or a refresh rate of 60 Hz. A full image consists of two interlaced sets of lines, so the actual image size and <em>frame rate</em> is twice as many lines and half the frequency: PAL video is 625 lines tall with a frame rate of 25 Hz.</p><p>Synchronizing a program&#8217;s behavior with the raster beam is a powerful way to perform advanced visual effects. By changing VIC control parameters at specific times during the drawing of the screen, a program can break away from some of the VIC&#8217;s numerical limitations. This is the basis for one of the most coveted of Commodore graphical techniques, called <em><a href="https://en.wikipedia.org/wiki/Sprite_multiplexing">sprite multiplexing</a>,</em> where the VIC&#8217;s eight hardware sprites are reused in different parts of a single screen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6as-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6as-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 424w, https://substackcdn.com/image/fetch/$s_!6as-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 848w, https://substackcdn.com/image/fetch/$s_!6as-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 1272w, https://substackcdn.com/image/fetch/$s_!6as-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6as-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png" width="674" height="443" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:443,&quot;width&quot;:674,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17548,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6as-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 424w, https://substackcdn.com/image/fetch/$s_!6as-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 848w, https://substackcdn.com/image/fetch/$s_!6as-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 1272w, https://substackcdn.com/image/fetch/$s_!6as-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cd81e5b-463d-4246-b8b6-ac57b5ca2486_674x443.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">easterbunnydemo3 by Nobato, from Intro Disk #3, demonstrating sprite multiplexing from BASIC.</figcaption></figure></div><h3>The CIAs</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HJLt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HJLt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HJLt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg" width="525" height="358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:525,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17193,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HJLt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HJLt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2710d56a-abd2-4667-b0ad-e83220c71f46_525x358.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The CIA 6526 chip. (Image from c64-wiki.com)</figcaption></figure></div><p>The Complex Interface Adapter (CIA) chip is a multi-purpose chip that manages device and serial communications, and also has a high-precision countdown timer feature. Each CIA chip contains two timers, and the MEGA65 (like the Commodore 64) has two CIA chips, each wired up a bit differently. The CIA counts pulses at a rate of 1 MHz, and your program can set a timer interval up to 65,535 of these pulses, for a delay of up to approximately 0.065 seconds. For example, to set a timer for 1/60th of a second, your program would set the timer value to 16,666.</p><p>We&#8217;ll save a complete discussion of the CIA chip for another time. For now, suffice it to say that you can use both busy-waiting and interrupt-based techniques with the CIA high-precision timers.</p><h3>Other clocks</h3><p>There are two other kinds of clock that are worth knowing about, but are less useful for high-precision timing. Each CIA chip contains a time-of-day (TOD) clock that counts tenths of seconds, seconds, minutes, and hours, up to a 24-hour period. In the Commodore 64, this clock powers the <code>TI</code> and <code>TI$</code> BASIC variables, and is reset to midnight when the computer is switched off. The MEGA65 contains a separate battery-backed Real-Time Clock (RTC) chip that can remember the time of day and calendar date even when power is disconnected. BASIC 65 uses the RTC chip for the <code>TI$</code> and <code>DT$</code> variables, and it uses the CIA TOD clock for the <code>TI</code> variable.</p><p>Just to complete the picture, here&#8217;s a simple BASIC program that busy-waits on the <code>TI</code> special variable for three seconds. Notice that the <code>TI</code> variable&#8217;s value changes over time, even though the BASIC program itself isn&#8217;t changing it.</p><pre><code><code>5 REM -- WAIT 3 SECONDS
10 BORDER 0
20 T=TI
30 IF (TI-T)&lt;3 THEN 30
40 BORDER 1</code></code></pre><h2>Finding the beam</h2><p>The VIC video chip generates a signal for the raster beam to draw onto the display, expecting the raster beam to follow a fixed pattern on a regular interval. The VIC keeps track of where the raster beam is located, and a program can access this information by reading a hardware register.</p><p>One way to synchronize a program&#8217;s behavior with the VIC&#8217;s raster beam is to busy-wait on its location. You can do this from BASIC 65, with the <code>VSYNC</code> command:</p><pre><code><code>10 BORDER 0
20 VSYNC 100
30 BORDER 1
40 VSYNC 200
50 GOTO 10</code></code></pre><p><code>VSYNC</code> pauses the BASIC program and busy-waits for the raster beam to reach a given vertical position (or <em>raster line</em>). The vertical position number can be between 0 and 311 in PAL video mode, or 6 and 261 in NTSC mode, where smaller numbers are further up the screen. Try adjusting the numbers on lines 20 and 40 in this example program. (Beware that there&#8217;s currently <a href="https://github.com/MEGA65/mega65-core/issues/362">a bug</a> that causes <code>VSYNC</code> to hang with a value less than 6 in NTSC mode.)</p><p>Here is an equivalent program in assembly language. Because the raster beam vertical position can be larger than 255, it takes up more than one byte of space across two register addresses. Bit 7 of register $D011 is high (1) if the raster beam is beyond line 255.</p><pre><code><code>vicii_rcl = $d012
vicii_rch = $d011  ; bit 7
border = $d020

loop:
    lda #0  ; black
    sta border

    lda #100
-   cmp vicii_rcl
    bne -
    bit vicii_rch
    bmi -  ; rch is high, not our stop

    lda #1  ; white
    sta border

    lda #200
-   cmp vicii_rcl
    bne -
    bit vicii_rch
    bmi -  ; rch is high, not our stop

    jmp loop</code></code></pre><p>$D011/$D012 are the VIC-II raster position registers. Indeed, this example will work on a Commodore 64 as well as the MEGA65. The MEGA65&#8217;s VIC-IV is also capable of doubling the vertical resolution of the screen, a mode known as &#8220;V400,&#8221; which uses twice as many raster lines. You can see this mode in action by activating the 80x50 text mode: press <strong>Esc</strong> then <strong>5</strong>. (Press <strong>Esc</strong> then <strong>8</strong> to return to 80x25 text mode.) In V400 mode, the $D011/$D012 VIC-II registers and the <code>VSYNC</code> command continue to use the raster position as if it were in the non-doubled mode, so the bottommost VIC-II raster position in PAL video mode is still &#8220;312,&#8221; even if V400 is active. If you want the actual mode-specific VIC-IV raster position, an 11-bit value, see the FNRASTERLSB register at $D052 (lower 8 bits) and FNRASTERMSB at $D053.0-2 (upper 3 bits).</p><p>Note that while the raster vertical position corresponds to pixel Y-coordinates, the beam starts well above the top edge of the usual background area inside the colored border&#8212;because the raster beam also draws the border! The outermost raster positions are outside of the visible area.</p><h2>Visualizing time</h2><p>The ability to synchronize our program with the raster beam gives us a clever way to visualize the duration of a section of program code&#8212;using the border color! Try this:</p><pre><code><code>10 N=30
20 DIM FB(N):FB(0)=0:FB(1)=1

60 FOR I=2 TO N
70 FB(I)=FB(I-2)+FB(I-1)
80 NEXT I</code></code></pre><p>This program allocates an array of 30 numbers, then fills it with the <a href="https://en.wikipedia.org/wiki/Fibonacci_sequence">Fibonacci sequence</a>. To see this in action, run the program, then type: <code>PRINT FB(5)</code></p><p>We can get a sense of how fast this code runs using a combination of <code>VSYNC</code> and <code>BORDER</code>, like so:</p><pre><code><code>10 N=30
20 DIM FB(N):FB(0)=0:FB(1)=1

30 BORDER 0
40 VSYNC 100
50 BORDER 1

60 FOR I=2 TO N
70 FB(I)=FB(I-2)+FB(I-1)
80 NEXT I

90 GOTO 30</code></code></pre><p>The Fibonacci code is the same, but now it runs repeatedly in a loop. For each repetition, the program changes the border color to black, synchronizes to raster line 100, changes the border to white, then performs the Fibonacci fill. When control loops back to line 30, the border is changed back to black. In other words, the border is only white for the time it takes to fill the array. The height of the white bars in the border represent how far the raster beam travels during the fill operation. The <code>VSYNC</code> command makes sure this happens when the raster beam is at the same spot on the screen every time, to hold the white bars steady.</p><p>Try changing <code>N</code> in line 10 to another number, such as <code>N=5</code> or <code>N=40</code>. This changes the size of the array, and therefore changes the amount of time it takes to fill it with Fibonacci numbers.</p><p><strong>Caution:</strong> This next step causes the screen to flicker. Change line 10 to <code>N=80</code>, then run the program. Press <strong>Run/Stop</strong> to stop the flickering.</p><p>Why does the screen flicker when <code>N=80</code>? Here&#8217;s what&#8217;s happening:</p><ol><li><p>The raster beam reaches position 100, the border changes to white, then the Fibonacci algorithm runs while the raster beam travels.</p></li><li><p>In the time it takes to calculate 80 Fibonacci numbers, the raster beam reaches the bottom of the screen, returns to the top, then goes just beyond position 100.</p></li><li><p>The Fibonacci fill completes, and the program changes the border back to black&#8212;but by now the raster beam has made it all the way through the screen and has drawn an entirely white border.</p></li><li><p>The program waits for the raster beam to reach 100 again, which requires the raster beam to travel through almost a full screen with the border color set to black. With each screenful alternating between black and white, the border flickers.</p></li></ol><p>Visualizing code duration using the border color is especially helpful when writing games and demos. To animate graphics smoothly, a game must update all of the screen data in less than the time it takes to draw a single screen, so the updated data is ready for the next pass of the raster beam. If the border flickers, it means the computation is taking up more than one screen&#8217;s worth of raster travel, and the programmer has some work to do.</p><h2>Wherefore interrupts?</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F1ih!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F1ih!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 424w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 848w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 1272w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F1ih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif" width="342" height="219" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:219,&quot;width&quot;:342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2810113,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F1ih!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 424w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 848w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 1272w, https://substackcdn.com/image/fetch/$s_!F1ih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87272512-b043-4ff5-b304-95007c5eabf0_342x219.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Interrupted.</figcaption></figure></div><p>A typical machine code program is a sequence of instructions performed one at a time by the CPU in the order the instructions are given. Branching instructions can change the flow of control to other instructions in memory, but otherwise the CPU just marches down the list.</p><p>An <em>interrupt</em> is an event in a computer that needs immediate attention from the software. The event can come from a peripheral, such as a key press or incoming serial communication, or an internal programmable device that isn&#8217;t the CPU, such as the VIC or CIA chip. (As a special case, an interrupt event can also be triggered directly by the software with the <code>brk</code> instruction, but we&#8217;ll ignore this for now.)</p><p>When an interrupt occurs, the CPU completes the current instruction (however many cycles are remaining), stops executing the program, then calls a software routine called an <em>interrupt handler</em>. A typical interrupt handler does a small amount of work to respond to the event, then resumes the main program where it left off.</p><p>Interrupts allow a program&#8217;s code to be organized as if it were two programs: a main program that runs as if it is unaware that special events are occurring, and a short program that runs whenever a special event occurs. Without interrupts, a program would have to be written in such a way as to check for the special condition periodically, in between doing everything else it needs to do. This can delay the program&#8217;s ability to respond to the event, or even cause it to miss the event entirely.</p><p>Here&#8217;s a quick demonstration in BASIC of what could go wrong in this scenario. The program loop does some &#8220;work&#8221; that takes time, in this case an empty loop, but imagine it&#8217;s doing something important. Once the program has a free moment, it checks to see if the fire button of the joystick in port 1 is pressed; if not, it goes and does some more work. It&#8217;s pretty difficult to get this program&#8217;s attention with the fire button. Only by holding the button down will it eventually notice and respond.</p><pre><code><code>10 BORDER 0
20 REM -- DO SOME "WORK"
30 FOR A=1 TO 50000
40 NEXT A
50 REM -- CHECK FOR FIRE BUTTON IN JOYSTICK PORT 1
60 IF (JOY(1) AND 128)=0 THEN 30
70 BORDER 1</code></code></pre><p>You can imagine a hypothetical computer that triggers an interrupt when the fire button is pressed, halting the &#8220;work&#8221; to respond immediately. Because interrupts are built into the hardware, only a few kinds of events are wired into the CPU interrupt system. A typical program would use one of the timing sources (VIC or CIA) to trigger an interrupt at fixed intervals many times a second, and the interrupt handler would check for things like joystick input and react accordingly. This is how the KERNAL moves sprites or plays music concurrently with a BASIC program, or blinks the cursor while waiting for keyboard input at the <code>READY.</code> prompt. The steady drumbeat of interrupts allows the program (or the KERNAL) to respond to user input quickly, and progress animation and music smoothly.</p><p>Custom interrupt handlers are exclusively the domain of machine code programs. While BASIC programs benefit from how the KERNAL uses interrupts, they can&#8217;t use interrupts directly. In most cases, the best a BASIC game program can do is keep the game loop logic short and fast, so it can respond to joystick input as soon as possible. So maybe don&#8217;t loop 50,000 times between checks for the fire button.</p><p>BASIC 65&#8217;s sprite <code>COLLISION</code> feature behaves like an interrupt handler, but it&#8217;s actually implemented by the BASIC interpreter, not the CPU&#8217;s interrupt system: the interpreter just checks for sprite collisions before executing each BASIC statement.</p><h2>IRQs and NMIs</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Ig7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Ig7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 424w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 848w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 1272w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Ig7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png" width="600" height="328" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe88b7b7-03ec-4919-a117-935c818d0914_600x328.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:328,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:237870,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Ig7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 424w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 848w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 1272w, https://substackcdn.com/image/fetch/$s_!7Ig7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe88b7b7-03ec-4919-a117-935c818d0914_600x328.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">IRQs can be disabled; NMIs can't.</figcaption></figure></div><p>The 6502 family of CPUs supports two kinds of interrupt: an <em>interrupt request</em> (IRQ), and a <em>non-maskable interrupt</em> (NMI). Some events trigger IRQs, and others trigger NMIs.</p><p>The difference between IRQs and NMIs is that certain CPU operations can temporarily disable IRQs, and a program can disable and re-enable IRQs as needed, while NMIs cannot be disabled. Disabling IRQs is like putting a &#8220;Do Not Disturb&#8221; sign on a hotel room door: it says that the main program is working on something that should not be interrupted, and interrupt requests should be ignored for the time being. NMIs are more like a hotel fire alarm: they must be handled immediately, no matter what. Both kinds of interrupt are necessary for a fully functioning system, but most programs can get away with only dealing with IRQs.</p><p>The following are possible sources of IRQ interrupts in the C64 and MEGA65:</p><ul><li><p>VIC raster beam location</p></li><li><p>VIC sprite collision</p></li><li><p>Timers on CIA #1</p></li><li><p>The <code>brk</code> instruction</p></li></ul><p>The following are possible sources of NMI interrupts in the C64 and MEGA65:</p><ul><li><p>Timers on CIA #2</p></li><li><p>RS-232 serial communication</p></li><li><p>Pressing the <strong>Restore</strong> key</p></li></ul><p>Yes, pressing the <strong>Restore</strong> key triggers the NMI handler! This is how <strong>Run/Stop</strong> + <strong>Restore</strong> works: the KERNAL&#8217;s NMI handler tests whether both keys are pressed, then resets BASIC and declines to continue the interrupted program. This works even if the program has disabled IRQs.</p><p>The CPU supports one interrupt handler for IRQs and one handler for NMIs. It&#8217;s up to the handler code to figure out the specific cause of the interrupt, and react appropriately.</p><p>The address of each interrupt handler is stored as two bytes, in little-endian order (low byte first), at a fixed 16-bit address: the IRQ handler address is stored at $FFFE-$FFFF, and the NMI handler address is stored at $FFFA-$FFFB. The MEGA65&#8217;s default memory map installs KERNAL ROM code in this location, and the KERNAL uses its own interrupt handlers, so you can&#8217;t just <code>POKE</code> new addresses here. One way that a program can install custom interrupt handlers is to uninstall the KERNAL, by changing the memory map.</p><p>It is possible to leave the KERNAL in place and ask it to call custom code during its own IRQ handler. We&#8217;re still formalizing and documenting KERNAL integration techniques, so this is best left alone for now when writing MEGA65 programs. This is probably the most popular KERNAL integration technique on the C64, so we&#8217;ll try to finish this soon. (Hint: use the &#8220;VECTOR&#8221; KERNAL routine.)</p><p>For the rest of this Digest, we&#8217;ll focus on the raster beam IRQ, and assume that the program will uninstall the KERNAL to install its own handler. We&#8217;ll save other interrupt types for another time.</p><h2>Interrupt handlers</h2><p>When the CPU encounters an IRQ, it finishes the current instruction, then pushes the 16-bit address of the next instruction onto the stack (two bytes). It also pushes the CPU flags onto the stack, as a single byte. It then disables IRQs, then jumps to the address stored in the IRQ vector.</p><p>The first thing the interrupt handler needs to do is preserve any additional CPU state that might get clobbered by the rest of the handler. The main program expects everything about the CPU to be just as it left it, including the values in other registers. For example, if the handler needs to use the accumulator (and it probably does), it needs to push the previous accumulator value to the stack beforehand, and restore it afterward.</p><p>For most kinds of IRQ interrupt, the device that triggers the interrupt stays in the &#8220;interrupt&#8221; state until it is told that the interrupt is handled. The program must interact with the device via a hardware register to <em>acknowledge</em> the interrupt, so that it doesn&#8217;t re-trigger once the interrupt handler resumes the program. Remember that an IRQ can have multiple causes, so if your program enables more than one cause, it will need to determine the cause and handle it appropriately.</p><p>When the interrupt handler is complete, it calls the <code>rti</code> instruction to resume the paused program. This restores the CPU flags and next code address from the stack (thereby re-enabling interrupts), and continues where it left off. This is kind of like how <code>jsr</code> jumps to a subroutine and <code>rts</code> returns from it, with minor differences. For example, normal subroutines don&#8217;t stash and restore the CPU flags.</p><pre><code><code>irq_handler:
    ; Preserve the Accumulator, X, Y, and Z registers
    ; on the stack.
    pha
    phx
    phy
    phz

    ; Test for and acknowledge the IRQ cause...
    
    ; Do something fun...

    ; Restore the CPU registers, pulling them off the
    ; stack in the reverse order they were pushed.
    plz
    ply
    plx
    pla

    ; Resume the program
    rti</code></code></pre><h2>Enabling and disabling IRQs</h2><p>The CPU keeps track of whether IRQs should be handled or ignored using the &#8220;IRQs disabled&#8221; CPU status flag (<code>I</code>). To disable IRQs, a program calls the <code>sei</code> instruction (&#8220;set IRQ disabled&#8221;). To re-enable IRQs, a program calls the <code>cli</code> instruction (&#8220;clear IRQ disabled&#8221;). I know, this set/clear definition feels like a double-negative; just think of how interrupts being enabled is the default case (0 or clear), and being disabled is the special case (1 or set).</p><p>The CPU will automatically disable IRQs when calling either the IRQ or NMI interrupt handler, so an IRQ handler can&#8217;t re-trigger while it is executing, nor can a handler be interrupted by something else. Interrupts get re-enabled automatically when the <code>rti</code> instruction restores the previous status flags from the stack. It&#8217;s possible to get fancy with this, and some advanced techniques make unusual exits from the interrupt handler or manipulate the stack.</p><p>Interrupts are also disabled automatically while updating the 45GS02 memory map registers. This is important because memory map adjustments require several instructions, and interrupting these instructions could be disastrous if the incomplete memory map leaves either the interrupt handler code or handler vectors in an inconsistent state.</p><p>This is an important hint for how a program and its interrupt handlers can communicate with each other. If the main program is updating the state of the system, and it&#8217;d be bad if the interrupt handler sees the state only partially updated, the main program should disable interrupts (<code>sei</code>), update the state, then re-enable interrupts (<code>cli</code>). Remember: with interrupts enabled, the handler could be called between any two instructions, including between an <code>lda</code> and an <code>sta</code>. Modern-day programmers might compare disabling interrupts to a &#8220;global lock&#8221; on memory and CPU state, albeit a simple one.</p><h2>Setting up hardware interrupt handlers</h2><p>Let&#8217;s try disabling the KERNAL and setting up our own interrupt handler. This requires a few steps.</p><p>We&#8217;re not going to cover memory mapping in detail in this issue. To learn more about it, download the latest version of <a href="https://files.mega65.org/?id=d668168c-1fef-4560-a530-77e9e237536d">The MEGA65 Compendium</a> and check out the &#8220;Memory&#8221; chapter. For now, we just need to know a few things:</p><ol><li><p>The MEGA65 has an <em>address space</em> of 28 bits, with addresses numbered from $000.0000 to $FFF.FFFF. Some of these addresses go to memory, some go to hardware registers, and some are unassigned.</p></li><li><p>The CPU sees 64KB of the MEGA65&#8217;s memory at a time, using 16-bit addresses numbered from $0000 to $FFFF.</p></li><li><p>The CPU maintains a <em>memory map</em> that assigns 8KB chunks of the 16-bit address space to the 28-bit address space. A program can adjust this memory map using CPU instructions.</p></li></ol><p>The MEGA65 KERNAL ROM code lives in the 28-bit address space from $2.0000 to $3.FFFF. While the KERNAL is running, it switches between a few memory maps to do various things. Most importantly, when interrupts are enabled, the 28-bit addresses $3.E000 to $3.FFFF are mapped to 16-bit addresses $E000 to $FFFF, which includes the IRQ and NMI vectors as well as the handler routines that they point to.</p><p>To take this over for our own purposes, we need to reset the memory map so that $E000 to $FFFF points to RAM at $0.E000 to $0.FFFF. The memory map consists of eight bytes of information. Without going into detail, we can accomplish our task by setting four of these bytes to zero. To do this, set the A, X, Y, and Z registers to zero, then use the <code>map</code> instruction, followed by the <code>eom</code> (&#8220;End Of Map&#8221;) instruction:</p><pre><code><code>    lda #0
    tax
    tay
    taz
    map  ; Disable IRQs and update the MAP register
    
    eom  ; End MAP adjustments, re-enable IRQs</code></code></pre><p>The <code>map</code> instruction transfers A, X, Y, and Z to the first four bytes of the MAP register. Simultaneously, the <code>map</code> instruction also disables IRQs (similar to <code>sei</code>). After the first <code>map</code> and before the <code>eom</code>, the program can call <code>map</code> a second time to set the second four bytes of the MAP register if needed, or otherwise set up any additional state needed by IRQ handlers in the new memory map. The <code>eom</code> instruction signifies that the MAP setting is complete, and re-enables IRQs.</p><p>The <code>map</code> and <code>eom</code> instructions are specific to the 65CE02 CPU on which the 45GS02 is based, so you'll want to use an assembler that supports them, like <a href="https://sourceforge.net/projects/acme-crossass/">Acme assembler</a>. If your assembler of choice only supports CPUs up to the 65C02, you can use the <code>aug</code> instruction for <code>map</code>, and <code>nop</code> for <code>eom</code>. If your assembler only supports 6502 instructions, get a better assembler.</p><p>The KERNAL keeps the VIC raster interrupt active for its own purposes, so we need to either disable this or set it up the way we want. In general, it&#8217;s a best practice to disable all sources of interrupt that your program doesn&#8217;t recognize when installing custom interrupt handlers.</p><p>Let&#8217;s use the gap between <code>map</code> and <code>eom</code> to install our own interrupt handlers, and disable the KERNAL&#8217;s raster interrupt. Even though we&#8217;re not discussing NMIs for now, we need an NMI handler because we&#8217;re replacing all of the KERNAL&#8217;s handlers. (We&#8217;ll look at a more thorough way to do this another time.)</p><pre><code><code>hw_nmi_vec = $fffa
hw_irq_vec = $fffe
vicii_irqmask = $d01a
ciaa_d = $dc0d
ciab_d = $dd0d

    lda #0
    tax
    tay
    taz
    map  ; (disables interrupts)
    
    ; Set the NMI handler vector
    lda #&lt;nmi_handler
    sta hw_nmi_vec
    lda #&gt;nmi_handler
    sta hw_nmi_vec+1
    
    ; Set IRQ handler vector
    lda #&lt;irq_handler
    sta hw_irq_vec
    lda #&gt;irq_handler
    sta hw_irq_vec+1
    
    ; Disable all VIC IRQs
    lda #0
    sta vicii_irqmask

    ; Disable all CIA IRQs, and acknowledge any pending timers
    lda #$7f
    sta ciaa_d
    sta ciab_d
    lda ciaa_d
    lda ciab_d

    ; Set up the interrupts we care about...
    
    eom  ; (re-enables interrupts)

    ; Main program...
-   bra -  ; (Just an empty busy-loop for now.)

irq_handler:
    pha

    ; Test for and acknowledge the IRQ cause...

    ; Do something fun...

    pla
    rti

nmi_handler:
    rti</code></code></pre><h2>Raster interrupts</h2><p>The VIC chip can trigger an IRQ when the raster beam is at a requested position. Setting this up requires two simple steps.</p><p>First, the program must tell the VIC what raster position to use. As with the BASIC 65 <code>VSYNC</code> command, the range of this value depends on the video mode: 0 to 311 for PAL, and 6 to 261 for NTSC. The program sets the desired location with the lower eight bits in register $D012, and the ninth bit as bit 7 of register $D011.</p><p>Astute readers may notice that this is the same register we used to read the raster position for busy-waiting! The VIC is clever enough to re-use this register location in this way: when you read the register, it returns the current raster position. When you write to the register, you set the raster interrupt position.</p><p>The second step is to set a flag that says the program wants the VIC to trigger the raster IRQ. Set bit 0 of register $d01a to 1 to enable the raster IRQ.</p><pre><code><code>vicii_rcl = $d012
vicii_rch = $d011  ; bit 7
vicii_irqmask = $d01a

    ; Enable raster interrupt at position 200
    lda #200
    sta vicii_rcl
    lda vicii_rch  ; clear bit 7 of $d011
    and #$7f
    sta vicii_rch
    lda #$01
    sta vicii_irqmask</code></code></pre><p>Within the IRQ handler, you can confirm that it was the raster IRQ that triggered the interrupt by testing bit 0 of register $D019. To acknowledge the interrupt and prevent the IRQ handler from re-triggering, write a 1 to this bit. This is another register that has unusual read and write behavior: reading it tests the IRQ trigger status, and writing a 1 to a bit &#8220;unlatches&#8221; the trigger.</p><pre><code><code>vicii_irq = $d019

irq_handler:
    pha

    ; Test for raster IRQ
    lda vicii_irq
    bit #$01
    beq +  ; not raster IRQ

    ; Acknowledge raster IRQ
    lda #$01  ; write a 1 to bit 0
    sta vicii_irq

    ; Do something fun...

+   pla
    rti</code></code></pre><p>I promised to limit this discussion to raster interrupts, but it won&#8217;t take more than two sentences to discuss the VIC-II&#8217;s other interrupt capabilities. The VIC can also trigger an IRQ when a sprite collides with the background, or with another sprite. To use these, simply use bits 1 and 2, respectively, of the $d019 and $d01a registers. Oh, and the VIC also uses an IRQ for managing input from a <a href="https://www.c64-wiki.com/wiki/Light_pen">light pen</a>, but I don&#8217;t have one of those so I can&#8217;t tell you anything about it.</p><p>As mentioned earlier, the VIC-IV uses twice as many raster lines in V400 mode as otherwise, but maintains the non-doubled raster line count in the $D011/$D012 registers. The raster vertical position IRQ uses the same value range, regardless of the V400 mode. There is not currently a way to set a more precise raster IRQ in V400 mode.</p><h2>Racing the beam</h2><p>In the time that it takes the raster beam to draw a single line, a 1 MHz Commodore 64 can execute about 64 cycles worth of instructions. (Check my math: PAL draws 312 lines 50 times per second; the C64 executes 1 million CPU cycles per second; 1,000,000 / (312 x 50) = 64.1. NTSC draws 262 lines 60 times per second; 1,000,000 / (262 x 60) = 63.6.) Just eyeballing the IRQ handler I wrote above, which doesn&#8217;t even do anything useful, it looks like I&#8217;ve already spent 26 cycles. A typical C64 interrupt handler will not complete until the raster beam is on the next line.</p><p>With high-speed C64 graphics programming, if each CPU cycle represents 1/64th of a line, every cycle matters, and getting the code to synchronize with the raster beam position can be challenging. Remember how I said that when the CPU receives the interrupt request from the VIC, it finishes the current instruction before calling the handler? The current instruction could have several cycles remaining, and the raster beam will have advanced across the screen for some distance before the handler is called. Moreover, the interrupt could be happening at any time during any instruction, so the runoff is likely to vary every time. On a C64, a simple raster IRQ handler that changes the background color results in a flickering fringe at the transition point. C64 programmers can use <a href="https://codebase64.org/doku.php?id=base:interrupts">complex techniques</a> to synchronize the CPU with the raster beam, typically by setting a raster interrupt just before the line that is needed, then performing tests and busy-waiting for very specific amounts of time to account for minute differences between C64 models and other conditions.</p><p>The MEGA65 doesn&#8217;t have that problem. At 40.5 MHz, the MEGA65 executes approximately 2,600 cycles per raster line, or less than a pixel per CPU instruction. In most cases, the small amount of cycle slop just before the interrupt handler is called won&#8217;t impact a program. A bit of fringing can still appear if you&#8217;re changing the border color, because the border is so close to the beginning of the raster line. In this case, just be sure to change the border color as early as possible in the handler routine.</p><p>Also note that if the interrupt handler exits before the beam has left the line that caused the IRQ to trigger, the VIC won&#8217;t re-trigger the IRQ for the same line. The VIC only triggers a vertical raster interrupt at the beginning (left-most position) of the line.</p><h2>Raster chaining</h2><p>If you want the raster IRQ to trigger once per frame in the same location, you can just leave the IRQ mask bit set, and leave the raster location registers alone. This is handy for simple game loops that stay in sync with the screen refresh.</p><p>Earlier, we were discussing special effects like multi-color borders and sprite multiplexing that involve changing VIC parameters at multiple raster positions. To do this with interrupts, you set the next raster position within the interrupt handler. After the handler returns, the VIC is ready to trigger it again at the new position. Of course, this means that your handler must test which position triggered the interrupt. It can do so by reading the raster position, as before.</p><p>Another option is for the interrupt handler to also update the IRQ handler vector address to point to a different routine to be called for the next raster interrupt. This avoids having to test the raster position. As long as all of the raster handlers correctly advance the raster interrupt position and handler address, you can set up distinct handlers for each raster position.</p><p>Here&#8217;s an example of using the first technique to draw the white border bar from 100 to 200:</p><pre><code><code>vicii_border = $d020

irq_handler:
    pha

    ; Test for raster IRQ
    lda vicii_irq
    bit #$01
    beq +  ; not raster IRQ

    ; Acknowledge raster IRQ
    lda #$01  ; write a 1 to bit 0
    sta vicii_irq

    ; White border bar from 100 to 200
    lda vicii_rcl
    cmp #101
    bcs ++

    ; This is the raster interrupt for line 100.
    ; Set the raster interrupt position to 200.
    lda #200
    sta vicii_rcl
    lda #1  ; white
    sta vicii_border
    bra +

    ; This is the raster interrupt for line 200.
    ; Set the raster interrupt position to 100.
++  lda #100
    sta vicii_rcl
    lda #0  ; black
    sta vicii_border

+   pla
    rti</code></code></pre><h2>The VIC-IV raster X position</h2><p>The traditional VIC-II raster position register and corresponding IRQ trigger are based on the vertical position of the beam, how far up or down the beam is. If you&#8217;re careful to consider the video mode, you can think of this as a raster Y coordinate, in correspondence with the VIC screen coordinates.</p><p>The MEGA65&#8217;s VIC-IV has an extra trick up its sleeve: it also reports and can trigger the IRQ on the raster horizontal position, as a raster X coordinate. This works similarly to the VIC-II vertical position: you can read the X position from a register, write an X position to this register to set the IRQ trigger, and enable and acknowledge the IRQ by setting bits in other registers.</p><p>To protect backwards compatibility, this IRQ is behind a master switch for all MEGA65-specific IRQ triggers that is off by default. To unlock new MEGA65 IRQs (currently just this one), set $D07A bit 6. The X position is a 14-bit value, readable at $D050 (lower eight bits) and $D051.0-5 (upper six bits). You write the IRQ trigger position to the same register. To enable the raster X IRQ, set bit 4 of $D01A. To acknowledge the raster X IRQ in the request handler, write a 1 to bit 4 of $D019.</p><p>This IRQ will trigger whenever the raster beam reaches the requested horizontal position, once for every raster line when this is enabled. To target a specific raster X-Y coordinate, leave the horizontal IRQ disabled, trigger a vertical IRQ for the Y coordinate, then in that handler, enable the horizontal IRQ for the X coordinate and return. The next interrupt will be at the requested position on the line. Remember that the beam travels while the handler is executing, so keep it tight.</p><h2>Playing SID music</h2><p>Let&#8217;s end with a musical experiment!</p><p><em>SID files</em> are the Commodore community&#8217;s method of creating and preserving music designed to be played by a Commodore 64 through its SID sound chip. Perhaps surprisingly, a typical SID file isn&#8217;t just data about the musical notes to be played, like a piano roll for a player piano. Instead, it contains 6502 machine code&#8212;the player mechanism itself! (I guess the SID is the piano? You get it.)</p><p>The playback code consists of two subroutines. One subroutine initializes the SID chip, and is expected to be called once before starting the song. The other subroutine plays the actual music, and is expected to be called many times per second, with precise timing. This makes it easy for a game or demo to play the SID file simply by loading it into memory, calling the initialization routine, then calling the playback subroutine from an interrupt handler. The music plays concurrently with whatever else the program does.</p><p><a href="https://files.commodore.software/reference-material/articles-and-guides/commodore-64-articles/sid-file-format-info.pdf">The complete SID file specification</a> has matured over multiple generations to cover many interesting cases. For our simple experiment, we can note just a few things: the file header tells us where in memory to load the file, and also provides the addresses of the initialization routine and the playback routine in memory when loaded appropriately. SID files expect a C64 memory map, so getting arbitrary SIDs to play on the MEGA65 can be tricky. (When you play a SID via <a href="https://dansanderson.com/mega65/welcome/transferring-files.html#m65connect">M65Connect</a>&#8212;did you know you can play SIDs via M65Connect?&#8212;it uploads a tiny player routine that runs in GO64 mode, which gets around this issue.)</p><p>Here&#8217;s an easy one to try that works with the MEGA65 memory map:</p><ul><li><p>Download <a href="https://dansanderson.com/mega65/racing-the-beam/Frogger.sid">Frogger.sid</a>.</p></li><li><p>Download <a href="https://dansanderson.com/mega65/racing-the-beam/FROGGERSID.d81">FROGGERSID.d81</a> (contains <code>frogger.sid</code>).</p></li></ul><p>If we open <code>Frogger.sid</code> in a hex editor and compare it to the SID file format spec, we can see:</p><ul><li><p>It&#8217;s a PSID file (not an RSID), version 2.</p></li><li><p>The data region starts at offset $7C in this file.</p></li><li><p>The load address is in the first two bytes of the data region, and not the header. This address is $5000.</p></li><li><p>The initialization routine starts at $5000.</p></li><li><p>The play routine starts at $59F0.</p></li><li><p>The play routine expects to be called 60 times per second.</p></li></ul><p>It seems like we should be able to load this file starting at address $5000 - $7C = $4F84, then call the subroutines at $5000 and $59F0 appropriately. Let&#8217;s forget about interrupts for a second and try this in BASIC!</p><pre><code><code>10 BLOAD "FROGGER.SID",P($4F84)
20 SYS $5000
30 BORDER 0
40 VSYNC 100
50 BORDER 1
60 SYS $59F0
70 GOTO 30</code></code></pre><p>This program loads the SID file such that the data region starts at $5000, calls the initialization routine, then runs the main loop in lines 30-70. The loop uses <code>VSYNC</code> in two ways: it makes sure that we&#8217;re calling the play routine as often as the screen updates, and it uses the border timing trick to see how long the playback routine takes to execute. If you want to use this tune in a BASIC game, the white bar tells you how much runtime is available for game logic and graphics.</p><p>Maybe this tune sounds familiar! And if you&#8217;re in PAL mode, maybe it sounds a bit too slow. If your display supports it, open the Freezer (hold <strong>Restore</strong> for one second then release), press <strong>V</strong> to switch video modes, then press <strong>F3</strong>, then re-run the program to hear the difference. The song plays as originally intended in the NTSC video mode, which updates the screen 60 times per second, and slower in the PAL video mode, at 50 times per second.</p><p>Music playing at the wrong speed is very familiar to Commodore enthusiasts sharing game software between the USA and Europe, where the two different video standards were used. Many C64 games use the raster interrupt for every aspect of their game loop including music playback, because it&#8217;s much more convenient to use a single interrupt for all timing purposes than to try to accommodate different intervals for graphics and music. One fix for this would be to use both a raster IRQ (50 Hz or 60 Hz, depending on video mode) and a CIA timer IRQ (set to 60 Hz), and write the interrupt handler to detect which device triggered the IRQ and perform either graphics or sound updates accordingly.</p><p>If you&#8217;d like to try playing this SID file from assembly language, I recommend using the feature of your assembler to include <code>frogger.sid</code> as binary data into your program, then have the program start by copying the data into the correct memory location. Everything else should look similar to the interrupt handling code from earlier. In a later Digest, we&#8217;ll revisit the subject of interrupts, and look at how to use the CIA chip to play music correctly in either video mode.</p><div><hr></div><p>By this time next month, new MEGA65s may be on their way to their new homes! Huge thanks to everyone who has been reading this Digest in anticipation of future ownership. The new <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/21331992/Documentation+-+Landing+Page">User&#8217;s Guide</a> contains everything you need to get started, and don&#8217;t miss <a href="https://dansanderson.com/mega65/welcome/intro.html">my MEGA65 Welcome Guide</a> with photos and additional tips. <a href="https://discord.gg/5DNvESf">Join the Discord</a> and let us know it arrived safely, and don&#8217;t forget to <a href="https://files.mega65.org/?ar=1a47ec2c-1b56-4bd9-8d89-5b12ab8b72ae">register for ownership status</a> in both the Discord and on Filehost.</p><p>Everything I do for the MEGA65 project, including this Digest, is made possible by supporters like you! If you&#8217;d like to support the Digest, visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a>.</p><p>Happy computing!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[Oh right, April!]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for, uh, April 2024]]></description><link>https://m65digest.substack.com/p/oh-right-april</link><guid isPermaLink="false">https://m65digest.substack.com/p/oh-right-april</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Wed, 01 May 2024 22:26:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dz7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Heyhey, all! I hope everyone is doing well.</p><p>I&#8217;ve been dealing with a family thing (not tragic, just time consuming) and haven&#8217;t been able to finish the feature article I planned for the April issue of the MEGA65 Digest. So instead, I&#8217;m going to push that article to the next issue, and just drop you a quick note. I&#8217;m also going to skip the audio issue for this month. (The audio issue for March was enough for two. &#128517;)</p><p>There has been a quiet burble of activity in the MEGA65 community as we all await the next delivery batch, including some promising incremental improvements to the audio system, and bug fixes for advanced graphics features. Only a couple of projects have proper announcements, but they&#8217;re fun and I don&#8217;t want to delay them!</p><h2>Pascal65</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dz7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dz7R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 424w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 848w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 1272w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dz7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png" width="701" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:701,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9284,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dz7R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 424w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 848w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 1272w, https://substackcdn.com/image/fetch/$s_!dz7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2eb411a2-aea3-4df6-a032-dd541fa631b0_701x572.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Pascal65, by TwoBitRetro</figcaption></figure></div><p>The MEGA65 speaks a new language! TwoBitRetro has just launched the first public beta of <a href="https://pascal65.org/">Pascal65</a>, a compiler and IDE of the Pascal programming language. The MEGA65 is just the first target. Ken says he intends to support other Commodore 8-bits in the future, as well as the Commander X16. The project is <a href="https://github.com/kenschenke/Pascal65">open source</a>.</p><p><a href="https://github.com/kenschenke/Pascal65/releases">Download the beta</a>, check out <a href="https://pascal65.org/blog/pascal65-first-beta-release">the beta release notes</a> and the <a href="https://pascal65.org/blog/pascal65-0-25-beta">0.25 update notes</a>, read <a href="https://docs.pascal65.org/en/latest/">the documentation</a>, and <a href="https://pascal65.org/blog">follow the dev blog for updates</a>.</p><pre><code><code>program hello;

var name: string;

begin
  write('What is your name? ');
  readln(name);
  writeln('Hi, ', name, ' nice to meet you!');
end.</code></code></pre><h2>mega65.h for llvm-mos</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q5OW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q5OW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 424w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 848w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 1272w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q5OW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png" width="659" height="423" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:423,&quot;width&quot;:659,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q5OW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 424w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 848w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 1272w, https://substackcdn.com/image/fetch/$s_!q5OW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576b39e0-e711-4970-9a6c-1ac942e641d7_659x423.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 plasma demo from the llvm-mos SDK.</figcaption></figure></div><p>The <a href="https://github.com/llvm-mos/llvm-mos-sdk/tree/main">llvm-mos SDK</a>, the LLVM backend for 6502-family microcomputers capable of compiling languages like C and C++, now includes <a href="https://github.com/llvm-mos/llvm-mos-sdk/tree/main/mos-platform/mega65">header files for using MEGA65 features</a>. This provides a common way to use the VIC-IV, SID, CIA, hardware math, and the Hypervisor from C and C++ programs. Check out <a href="https://github.com/llvm-mos/llvm-mos-sdk/blob/main/examples/mega65/plasma.cc">this example visual demo in C++</a>. These headers are also usable with the CC65 and Calypsi compilers.</p><p>Many thanks to wombat for his continued development and advocacy work bringing MEGA65 support to the llvm-mos project!</p><h2>Tell me what you think!</h2><p><a href="mailto:contact@dansanderson.com">I want to hear from you!</a> If you&#8217;re waiting for your MEGA65 to ship, what are you most looking forward to learning more about? If you&#8217;re already enjoying your MEGA65, what topics could the Digest cover that would make your experience more rewarding? If you&#8217;re still considering a purchase, what interests you about retro computing, and how are you hoping the MEGA65 or this Digest will scratch that itch?</p><p>You can <a href="mailto:contact@dansanderson.com">send me e-mail</a>, or <a href="https://ko-fi.com/dddaaannn">leave a comment on my Ko-fi page</a>. I&#8217;m considering doing the <a href="https://dansanderson.com/mega65/mega65-survey-2023-results/">Community Survey</a> again this year, too, so keep an eye out for that.</p><p>Thanks all! Back soon!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[The Justified Ancients of Mu Mu]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for March 2024]]></description><link>https://m65digest.substack.com/p/the-justified-ancients-of-mu-mu</link><guid isPermaLink="false">https://m65digest.substack.com/p/the-justified-ancients-of-mu-mu</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Fri, 15 Mar 2024 05:26:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FGew!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FGew!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FGew!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 424w, https://substackcdn.com/image/fetch/$s_!FGew!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 848w, https://substackcdn.com/image/fetch/$s_!FGew!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 1272w, https://substackcdn.com/image/fetch/$s_!FGew!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FGew!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png" width="866" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:866,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:585937,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FGew!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 424w, https://substackcdn.com/image/fetch/$s_!FGew!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 848w, https://substackcdn.com/image/fetch/$s_!FGew!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 1272w, https://substackcdn.com/image/fetch/$s_!FGew!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd62f1fe9-1d0b-4791-881e-0f911091ee6f_866x473.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The KLF, 3AM Eternal (Live at the S.S.L.) (1991)</figcaption></figure></div><p><em>[Did you know: All issues of the Digest have an audio version! Search for &#8220;<a href="https://podcasts.apple.com/us/podcast/dans-mega65-digest-podcast/id1656654132">Dan&#8217;s MEGA65 Digest</a>&#8221; in your favorite podcast app, or check out the audio player at the top of each issue. &#8212; Dan]</em></p><p>There are two methods for making sound and music with the MEGA65, as it is currently implemented. The first method is the four SID chips, programmable devices that generate waveforms with requested parameters using analog electronic components. We took a dive into the SID chips back in&#8212;<em><a href="https://dansanderson.com/mega65/sounds-of-the-sid/">November 2022</a>??</em> How long have I been doing this?? &#8230;</p><p>The MEGA65 can produce sound another way. <a href="https://en.wikipedia.org/wiki/Pulse-code_modulation">Pulse-Code Modulation</a> (PCM) describes a waveform as a sequence of values over time, literally the shape of the desired waveform as a series of high and low numbers, as if drawn on a graph. The computer feeds these numbers into a device called a Digital-Analog Converter (DAC) that produces the waveform in that shape, as if rapidly changing the position of a speaker membrane according to each value. The MEGA65 has four DACs, and these waveforms are mixed with the rest of the audio system to produce the stereo audio output of the computer.</p><p>With PCM, a computer can reproduce real-world sounds captured by a microphone, such as human speech or musical instruments. Today, we take this extremely for granted: modern computers generate pretty much all sound using PCM waveforms. We used to call this &#8220;digitized sound,&#8221; in contrast with &#8220;synthesized sound.&#8221; Now we just call it &#8220;sound.&#8221; While PCM gives a computer program much more control over the generated sound, the trade-off is memory: relative to the memory sizes of 1980&#8217;s computers, PCM sound data takes a huge amount of space, depending on the length and quality of the sounds.</p><p>In this issue, we&#8217;ll look at how to control the MEGA65&#8217;s DACs to play digitized sound, as well as techniques for wrangling sound data for use in your programs. As usual, we&#8217;ll spend a bit too much time nerding out on theory and file formats.</p><p>Are you ready? Here we go.</p><h2>Featured Files</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EF43!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EF43!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!EF43!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!EF43!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!EF43!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EF43!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png" width="557" height="455.0808510638298" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:705,&quot;resizeWidth&quot;:557,&quot;bytes&quot;:19647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EF43!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!EF43!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!EF43!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!EF43!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80d5bd2-73f4-4c51-ae5a-a92ec9edaab5_705x576.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Bomb'em All, by btoschi</figcaption></figure></div><p><a href="https://files.mega65.org/?id=99eb7f2b-ee95-421d-806f-32361a954448">Bomb&#8217;em All</a> by btoschi, an explosive action game for two to four players. Drop bombs, pick up items, and break through walls while trying to trap your opponents in the blast zone. The game supports the <a href="https://www.bit-zeal.com/product/4PlayerMEGA65/6">Four Fun joystick adapter</a> for four joysticks, or can be played with a mix of joystick and keyboard controls.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iduk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iduk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 424w, https://substackcdn.com/image/fetch/$s_!iduk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 848w, https://substackcdn.com/image/fetch/$s_!iduk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 1272w, https://substackcdn.com/image/fetch/$s_!iduk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iduk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png" width="622" height="393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:393,&quot;width&quot;:622,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iduk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 424w, https://substackcdn.com/image/fetch/$s_!iduk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 848w, https://substackcdn.com/image/fetch/$s_!iduk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 1272w, https://substackcdn.com/image/fetch/$s_!iduk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1d5cd8e-d593-4f95-bdd6-9ec494ed9b12_622x393.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">BASIC Star Galactica, by jim_64</figcaption></figure></div><p><a href="https://files.mega65.org/?id=8c0cdef8-ac11-47e0-b422-a209e1a6727b">BASIC Star Galactica</a> by jim_64, a space battle adventure. Destroy the Cylons and protect the fleet&#8212;and the future of humanity. Don&#8217;t miss the <a href="https://github.com/jim-64/BASIC-Star-G">downloadable, printable disk label and manual</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GiXv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GiXv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 424w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 848w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 1272w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GiXv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png" width="621" height="505.0565770862801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/192403d1-cbbc-4156-94ed-36199e539737_707x575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:707,&quot;resizeWidth&quot;:621,&quot;bytes&quot;:22677,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GiXv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 424w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 848w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 1272w, https://substackcdn.com/image/fetch/$s_!GiXv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192403d1-cbbc-4156-94ed-36199e539737_707x575.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 Z-code Text Adventure Collection Pack #4, edited by fredrikr</figcaption></figure></div><p>fredrikr has prepared <a href="https://files.mega65.org/?id=3c8e8567-0b03-49e3-81c6-e6b8b0360e64">the fourth in his series of text adventure game bundles</a> for the MEGA65, featuring modern classics from the interactive fiction community. This pack includes a variety of games released from 1995 to 2023, all playable on the MEGA65 thanks to the Ozmoo Z-machine player. (See <a href="https://dansanderson.com/mega65/mega65-adventures/">the Digest from October 2022</a> for more on Ozmoo and MEGA65 adventure gaming.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l-Sf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l-Sf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 424w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 848w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 1272w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l-Sf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif" width="573" height="614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:614,&quot;width&quot;:573,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171607,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l-Sf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 424w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 848w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 1272w, https://substackcdn.com/image/fetch/$s_!l-Sf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff201ad4-7c97-48e8-bed0-5655e936536e_573x614.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ghosts'n Goblins, arcade core by muse</figcaption></figure></div><p>Another arcade core from muse! In <a href="https://files.mega65.org/html/main.php">Ghosts&#8217;n Goblins</a> (1985), you are brave knight Sir Arthur, on a quest to save the Princess Prin-Prin. Don your armor&#8212;and take care not to lose it&#8212;while fighting waves of zombies, giants, demons, and other monsters. This classic from Capcom is considered one of <a href="https://en.wikipedia.org/wiki/List_of_video_games_considered_the_best">the best video games of all time</a>&#8212;and one of the most difficult. As with the other arcade cores, you will need to find the game ROM online, and <a href="https://github.com/sho3string/GnGMEGA65">follow the instructions</a> to install it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!og71!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!og71!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 424w, https://substackcdn.com/image/fetch/$s_!og71!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 848w, https://substackcdn.com/image/fetch/$s_!og71!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!og71!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!og71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg" width="446" height="446.92819979188346" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:963,&quot;width&quot;:961,&quot;resizeWidth&quot;:446,&quot;bytes&quot;:756260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!og71!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 424w, https://substackcdn.com/image/fetch/$s_!og71!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 848w, https://substackcdn.com/image/fetch/$s_!og71!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!og71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a960ba-b95e-45ed-b7a0-178368932abb_961x963.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Stranded, by Magnus Heidenborn</figcaption></figure></div><p>In <a href="https://files.mega65.org/?id=stranded">Stranded</a>, a graphical adventure game by Magnus Heidenborn, your boat has crashed and washed ashore a deserted island. Magnus wrote Stranded for the Commodore 64, specifically the modern <a href="https://retrogames.biz/products/thec64/">TheC64</a> clone. Gurce ported it to the MEGA65, and added original music. I especially appreciate the novel keyboard-based linear travel and exploration mechanic, which works around common issues with point-and-click adventure games. Check it out!</p><h2>Expansion board progress</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vEbx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vEbx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vEbx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg" width="504" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:504,&quot;bytes&quot;:337834,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vEbx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vEbx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe32122f8-42b8-4550-a73f-236a9a926c06_1280x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The latest expansion board prototype, from Paul</figcaption></figure></div><p>Paul is <a href="https://c65gs.blogspot.com/2024/02/expansion-board-revd-and-new-connector.html">making progress on the MEGA65 expansion board project</a>. As we <a href="https://dansanderson.com/mega65/exploring-hardware/">reviewed in a previous issue</a>, this project intends to produce an internal hardware expansion that adds component video output, a Commodore user port, a tape port, and a port for the never-released 1565 external floppy drive that was originally intended for the Commodore 65. The goal is for these expansion boards to be made entirely out of printed circuit boards (PCBs) and common components with open source designs, so anyone can order and assemble one from any PCB fabricator.</p><p>The latest prototype includes a way to connect an <a href="https://www.espressif.com/en/products/socs/esp32">ESP32 wireless Internet module</a> (!), and routes a path for the <a href="https://dansanderson.com/mega65/welcome/using-jtag.html">optional JTAG adapter</a> to a firmly mounted microUSB port accessible through the back of the computer. It also completes the 1565 disk drive port. Hopefully someday we&#8217;ll be able to make a <a href="https://www.m-e-g-a.org/commodore-1565/">modern recreation 1565 drive</a> with a plastic case that matches the MEGA65.</p><h2>KLF is gonna rock you</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C1I6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C1I6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 424w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 848w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 1272w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C1I6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png" width="570" height="311.3888888888889" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:864,&quot;resizeWidth&quot;:570,&quot;bytes&quot;:453262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C1I6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 424w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 848w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 1272w, https://substackcdn.com/image/fetch/$s_!C1I6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8768a1b-2cb4-4136-8cdb-5964b3d1ebb6_864x472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ricardo da Force using a mobile phone</figcaption></figure></div><p>Here is a visual representation of the waveform of the first few notes of &#8220;<a href="https://en.wikipedia.org/wiki/3_a.m._Eternal">3 am Eternal</a>&#8221; by <a href="https://en.wikipedia.org/wiki/The_KLF">The KLF</a>, performed by soul singer <a href="https://en.wikipedia.org/wiki/P._P._Arnold">P. P. Arnold</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RUuA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RUuA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 424w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 848w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 1272w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RUuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png" width="304" height="337" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:337,&quot;width&quot;:304,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41816,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RUuA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 424w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 848w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 1272w, https://substackcdn.com/image/fetch/$s_!RUuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43d9efc2-a100-4fe7-9dd8-ceb84a84f960_304x337.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Waveform diagram of P. P. Arnold's intro to The KLF's "3 a.m. Eternal"</figcaption></figure></div><p>Storing and replicating this waveform exactly as it was performed would require a device and a storage medium that could capture the infinitesimal changes of air pressure in the listener&#8217;s ear over time. Digital storage media is neither infinite nor infinitesimal, so we have to make some tradeoffs when <em>digitizing</em> audio. How can we represent this waveform as a collection of numbers, then use those numbers to reproduce an approximation of the waveform on a loudspeaker?</p><h3>Sample rate</h3><p>Pulse-code modulation describes the height of a waveform measured periodically, or <em>sampled</em>, over time. We can&#8217;t measure every infinitesimal point in time, so we have to choose a <em>sample rate</em> that says how often we take a sample. For audio, a typical sample rate is on the order of <em>kilohertz</em>, or thousands of times per second. A smooth curve in the original waveform is approximated by a stair-step pattern in the digitized waveform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VYGt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VYGt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 424w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 848w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 1272w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VYGt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png" width="600" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22389,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VYGt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 424w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 848w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 1272w, https://substackcdn.com/image/fetch/$s_!VYGt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca3f67f-baef-4960-8fe1-f74feac86a99_600x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Decreasing the sample rate reduces the accuracy of the digital waveform.</figcaption></figure></div><p>The sample rate for digital audio is a lot like the screen resolution of a digital image. The actual image of an object as seen by the eye could have infinitesimal detail, but to capture it and represent it on a screen, it must be digitized into pixels. The smaller and closer together the pixels, the more detail can be captured and represented. You can think of sample rate as the &#8220;horizontal resolution&#8221; of the waveform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rWH0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rWH0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 424w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 848w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 1272w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rWH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png" width="1080" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:199414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rWH0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 424w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 848w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 1272w, https://substackcdn.com/image/fetch/$s_!rWH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44d2a816-d12c-4b15-ad03-757bcf0f2147_1080x360.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An analogy with image resolution: decreasing resolution reduces the accuracy of the image.</figcaption></figure></div><h3>Bit depth</h3><p>We can&#8217;t measure the height of each waveform sample infinitesimally either, so this too needs a digital compromise. For example, we could store each sample as 8 bits (one byte) of data. This would give us 256 possible values for the sample. If the measured sample is between two adjacent values, it gets rounded&#8212;or <em>quantized</em>&#8212;to the closest value. The number of storage bits per sample is the <em>bit depth</em> of the sample (or <em>sample depth</em>). You can think of bit depth as the &#8220;vertical resolution&#8221; of the waveform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O2Gh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O2Gh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 424w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 848w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 1272w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O2Gh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png" width="600" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25280,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O2Gh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 424w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 848w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 1272w, https://substackcdn.com/image/fetch/$s_!O2Gh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb4b2748-2fe9-4020-9bf5-253bf821dfb9_600x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Decreasing the bit depth reduces the accuracy of the digital waveform.</figcaption></figure></div><p>Sample depth can also be understood by analogy with digital images. Each pixel of an image is stored with a digital value that represents its color. The number of possible colors it can use is limited by the bit depth of the color value. Naturally, the more colors the computer can use for a pixel, the more accurately it can represent the original image.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YB4x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YB4x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 424w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 848w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 1272w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YB4x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png" width="1080" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YB4x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 424w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 848w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 1272w, https://substackcdn.com/image/fetch/$s_!YB4x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d002515-8ecd-4792-a40a-754d7570592b_1080x360.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An analogy with image bit depth: decreasing depth reduces the accuracy of the image.</figcaption></figure></div><h3>Signed vs. unsigned samples</h3><p>Conceptually, an audio waveform is a variance in the regular air pressure of a silent room, wiggling positive and negative in a pattern until stabilizing back to zero. You can see the middle line on these waveform diagrams where this level lies. Based on this, waveform samples could be represented as a <em>signed</em> number, with some negative numbers and some positive numbers around a baseline of zero. Or, it could be represented as an <em>unsigned</em> number, where the baseline is the middle value of a range of positive numbers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z_2r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z_2r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 424w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 848w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 1272w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z_2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png" width="600" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/644887a2-0b51-4702-a14d-af8087a7df38_600x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25964,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z_2r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 424w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 848w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 1272w, https://substackcdn.com/image/fetch/$s_!Z_2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644887a2-0b51-4702-a14d-af8087a7df38_600x250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Signed vs. unsigned sample values; the effective waveform is the same.</figcaption></figure></div><p>A signed 16-bit sample has a range of -32,768 to +32,767. It is usually stored as a <a href="https://en.wikipedia.org/wiki/Two%27s_complement">two&#8217;s complement</a> value, $8000 (-32,768) up to $FFFF (-1), then $0000 (0) up to $7FFF (32,767). An unsigned 8-bit sample has a range of 0 to 255, where 128 is the baseline of the waveform. It is stored simply as its byte value, $00 (0) to $FF (255). If you&#8217;re messing with sample data, you need to know both its bit depth and whether it is signed or unsigned to interpret it correctly.</p><h2>Size vs. audio quality</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-nyi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-nyi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-nyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg" width="1456" height="968" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:968,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:412092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-nyi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-nyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02002d5c-9a12-43cb-9461-3eda51811ff0_1624x1080.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tower Records, on Sunset Blvd. in West Hollywood, California, USA. Photograph by Mike Dillon, May 10, 2006, seven months before the store closed permanently.</figcaption></figure></div><p>Both sample rate and bit depth explain how the amount of data relates to the quality of the reproduction of the original sound. The faster we sample, the more samples we collect, and the more accurate the data is to the original sound. The higher the bit depth of the sample, the more memory is required for each sample, and the more accurate the sample is to the waveform.</p><p>Before there were large hard drives, fast Internet transmission speeds, and data compression algorithms tuned for audio, digital music could only be practically distributed on optical fixed-storage <a href="https://en.wikipedia.org/wiki/Compact_disc">compact discs</a> (or &#8220;CDs,&#8221; as we called them). We purchased these discs at retail establishments with names such as &#8220;<a href="https://en.wikipedia.org/wiki/Tower_Records">Tower Records</a>,&#8221; and ordered them from printed catalogs to be delivered to our home via postal service from <a href="https://en.wikipedia.org/wiki/Columbia_House">Columbia House</a> at an introductory cost of 10 discs for 1 penny. A typical audio CD stored 74 minutes of uncompressed stereo sound data, using a sample rate of 44.1 kHz and a depth of 16 bits.</p><p>We can calculate the amount of sample data on an audio CD with a simple multiplication: 74 minutes x 60 seconds per minute x 44,100 samples per second x 2 bytes per sample x one sample for each stereo channel (2) = 783,216,000 bytes, or almost 747 MiB. Old-timers may remember that a CD-ROM, which uses the same type of disc for storing computer files, has a capacity of 650 MiB. CD-ROMs use the rest of the space for error correction and addressing, so computers can find files and make sure they read them correctly. When an audio CD player reads a sample incorrectly, it just pretends nothing happened and keeps going, so it can use more space for samples.</p><p>For perspective, at CD quality, the MEGA65&#8217;s 8 megabytes of Attic RAM can contain 45 seconds of audio. As we&#8217;ll soon see, we&#8217;re actually limited to 64 kilobytes at a time, which would last us 0.35 seconds at 44.1 kHz 16-bit. We&#8217;ll need to make some tradeoffs in quality and duration to make practical use of digitized sound.</p><p>The following are the durations of 64 kilobytes of sample data at various sample rates and bit depths:</p><ul><li><p>4000 Hz, 8-bit: 16.384 seconds</p></li><li><p>4000 Hz, 16-bit: 8.192 seconds</p></li><li><p>8000 Hz, 8-bit: 8.192 seconds</p></li><li><p>8000 Hz, 16-bit: 4.096 seconds</p></li><li><p>11025 Hz, 8-bit: 5.944 seconds</p></li><li><p>11025 Hz, 16-bit: 2.972 seconds</p></li><li><p>16000 Hz, 8-bit: 4.096 seconds</p></li><li><p>16000 Hz, 16-bit: 2.048 seconds</p></li></ul><h2>MEGA65 Audio DMAgic</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kHts!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kHts!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 424w, https://substackcdn.com/image/fetch/$s_!kHts!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 848w, https://substackcdn.com/image/fetch/$s_!kHts!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 1272w, https://substackcdn.com/image/fetch/$s_!kHts!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kHts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png" width="500" height="309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:309,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257123,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kHts!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 424w, https://substackcdn.com/image/fetch/$s_!kHts!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 848w, https://substackcdn.com/image/fetch/$s_!kHts!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 1272w, https://substackcdn.com/image/fetch/$s_!kHts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5826ab66-fd54-439d-8a73-f9853b6fa8fd_500x309.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The original C65 DMAgic chip, from a REV 2A board</figcaption></figure></div><p>Imagine we had a way to control the speaker membrane directly from a MEGA65 program using a hardware register. What would the program have to do to play back a short digitized sound? The program would write each PCM sample to the register, and it would have to do it at a consistent rate that matches the sample rate. If the sound was digitized at 8 kHz, this program would have to write sample data to the register 8,000 times per second, at even intervals. This is entirely possible with a 40 MHz CPU, but getting the timing right would be a significant programming challenge, especially if the program does other things besides play the sound.</p><p>Thankfully, the MEGA65 can help us with this. Reading a series of values from one memory location and writing them to another is the bread and butter of the Direct Memory Access (DMA) chip, a purpose-built chip in the Commodore 65 that the development team called &#8220;DMAgic.&#8221; DMA is typically used to copy one region of memory to another location very quickly, or fill a region with a value. Normally it does this as quickly as possible. The MEGA65 has enhanced DMAgic with a mechanism for playing audio samples to the DAC at a programmable sample rate, controlled with hardware registers. Your program can even do other things while the sample is playing: playback happens concurrently with program execution.</p><p>Because sample timing is managed for us by audio DMA, we don&#8217;t need to worry about our program being fast or accurately timed. You can even use audio DMA from BASIC!</p><h3>Audio DMA specs and techniques</h3><p>For audio DMA to work its &#8220;DMAgic,&#8221; a few things must be true:</p><ul><li><p>The CPU must be running at 40 MHz. (This is the default.)</p></li><li><p>Sample data must be in main memory, not Attic RAM.</p></li><li><p>Samples must use a bit depth of 16, 8, or 4. Values can be signed or unsigned.</p></li><li><p>The playback region cannot exceed 64 KB.</p></li></ul><p>At first glance, this seems a bit limiting, but it&#8217;s actually quite powerful with a few tricks. For example, while sample data must be in the first 384 KB of main memory during playback, your program can store its samples in the 8 MB of Attic RAM, then use a DMA copy operation to install it in main memory to be played.</p><p>4-bit samples are stored in an interesting way: the DMA must advance through memory by at least one byte per sample, so 4-bit samples use either the top four bits or the bottom four bits of each byte, and you tell audio DMA which bits to use when you play the sound. This means you can have two 4-bit sounds stored in the same bytes, one in the top bits and another in the bottom bits.</p><p>When you play a sound, you can tell audio DMA to stop at the end, or loop back to the beginning automatically and continue playing. Looping is great for short repeating waveforms, or long repeating patterns like drum beats or atmospheric sounds.</p><p>With a bit of cleverness, you can play sample data larger than 64 KB by taking advantage of the looping feature. Your program can copy new sample data into the memory region as the sound is being played, so when the playhead loops back to the beginning, it starts playing the new data.</p><p>Your program specifies the sample rate to use the play the samples. If you want the samples to sound like the original recording, you play the samples at the rate they were digitized. You can also play the samples at a slower or faster rate to change the pitch and speed of the sample, like spinning a record player at a faster or slower speed. &#8212;Oh, uh, records were another way to distribute music before CDs, as analog waveforms etched into grooves on vinyl discs. Sounds were reproduced mechanically by vibrating a needle called a <em>stylus,</em> by running it across the etched groove at a steady speed. Because retro is cool, <a href="https://nowspinning.co.uk/vinyl-and-cd-sales-a-deep-dive-into-the-current-trends/">vinyl album sales have seen a rapid resurgence</a> recently that is expected to grow in 2024, while sales of CDs have dropped in favor of online music streaming.</p><h2>A synthetic example</h2><p>Before we figure out how we get recorded sound data into the MEGA65, let&#8217;s try out the audio DMA system with some made-up numbers. We&#8217;ll use BASIC here, but the procedure is the same in assembly language: we&#8217;re just writing to memory and registers. (Try porting this example to assembly language!)</p><h3>The waveform</h3><p>To start, let&#8217;s draw a simple &#8220;sawtooth&#8221; waveform into some memory. This will just be the numbers 0 to 255 across 256 bytes of memory, which we will play looped.</p><pre><code>10 FOR X=0 TO 255 : POKE $50000+X,X : NEXT X</code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WRFl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WRFl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 424w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 848w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 1272w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WRFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png" width="548" height="166.17592592592592" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:131,&quot;width&quot;:432,&quot;resizeWidth&quot;:548,&quot;bytes&quot;:10044,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WRFl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 424w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 848w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 1272w, https://substackcdn.com/image/fetch/$s_!WRFl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc474a2-180d-4e4b-803b-8a3a292f695b_432x131.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The waveform generated by this code, looped.</figcaption></figure></div><h3>Channel registers</h3><p>Each of the four audio DMA channels has 16 bytes of registers. Channel 0&#8217;s registers are at addresses $D720 to $D72F, channel 1&#8217;s are at $D730 to $D73F, channel 2&#8217;s are at $D740 to $D74F, and channel 3&#8217;s are at $D750 to $D75F. I&#8217;ll refer to each register by its offset $0 through $F. Just know that the registers have the same layout for all four channels.</p><p>Switch off channel 0 while we&#8217;re setting it up, by writing a 0 to register $0:</p><pre><code><code>20 POKE $D720,0</code></code></pre><h3>Enabling the audio DMA system</h3><p>The audio DMA system must be enabled before it can be used. This is a global setting, address $D711 bit 7:</p><pre><code><code>30 SETBIT $D711,7</code></code></pre><h3>Sample addresses</h3><p>The starting address of the sample is a 24-bit value, across registers $1 to $3. We also want to set the channel 0 playhead, a 24-bit value across registers $A to $C. (Remember, these are all Little Endian.) The starting address is used for looping: when the playhead reaches the end, it&#8217;ll jump back to the start address.</p><pre><code><code>40 POKE $D721,$00:POKE $D722,$00:POKE $D723,$05 : REM SAMPLE STARTS AT $5.0000
50 POKE $D72A,$00:POKE $D72B,$00:POKE $D72C,$05 : REM SET PLAYHEAD TO BEGINNING</code></code></pre><p>The end of the sample is stored as a 16-bit value equal to the lower 16 bits of the last address, in registers $7 to $8. In our case, the end address is $5.00FF, so the register value is $00FF.</p><pre><code><code>60 POKE $D727,$FF:POKE $D728,$00</code></code></pre><h3>Channel volume</h3><p>Each audio DMA channel gets two volume settings, with the ability to pan the channel&#8217;s output to the Left DAC or the Right DAC in different proportions.</p><p>Channels 0 and 1 are considered &#8220;left&#8221; channels, and channels 2 and 3 are considered &#8220;right&#8221; channels. The $9 register in each channel&#8217;s register bank sets the volume of the signal that it outputs to its device, either the Left DAC or the Right DAC. The register value is between 0 and 255, with 255 being the loudest.</p><p>Another set of volume registers allow for each channel to also output to the opposing DAC. Registers $D71C and $D71D set the output of channels 0 and 1, respectively, to the Right DAC. Registers $D71E and $D71F set the output of channels 2 and 3, respectively, to the Left DAC.</p><p>This can get a little confusing because the user can subsequently pan the Left DAC or the Right DAC using the Audio &amp; Volume tool in the Freezer, and can even flip the stereo field entirely. If you want to experiment with this, I recommend opening the Freezer tool and setting the &#8220;Left Digi&#8221; volume up in the left output channel and all the way down in the right output channel, and the &#8220;Right Digi&#8221; volume down in the left and up in the right, so you can hear clearly through stereo speakers which DAC is being used.</p><p>Let&#8217;s just set channel 0 to output evenly to both DACs for now. This sawtooth wave is a bit obnoxious, so I'm using a low volume level:</p><pre><code><code>70 POKE $D71C,$22 : POKE $D729,$22</code></code></pre><p><strong>Headphone warning:</strong> If you are listening to your MEGA65 with headphones connected directly to the 3.5mm jack, I recommend reducing the master volume in the Audio &amp; Volume tool while you are testing digital audio samples. Incorrect sample data or erroneous register values could cause unexpectedly loud sounds. I prefer to use a set of speakers with an independent volume knob set to a low setting. (Headphones tend not to have their own volume control.)</p><h3>Sample rate</h3><p>The sample rate (frequency) is stored as a 24-bit value in registers $4 to $6. This one is a bit weird, but it&#8217;ll make sense, I promise.</p><p>The value is the 24-bit proportional value of the frequency relative to the CPU speed. For example, if the sample rate is 16 kHz, then the register value is 16 kHz divided by 40 MHz (a ratio), multiplied by 2 to the 24th power minus 1 (the largest 24-bit value). Watch those units when doing the math! The CPU is much faster than the sample rate, so you should get a very small ratio.</p><p>Here are the register values for some useful sample rates, pre-calculated for your convenience:</p><ul><li><p>4 kHz : 1,662 ($00067E)</p></li><li><p>8 kHz : 3,324 ($000CFC)</p></li><li><p>16 kHz : 6,648 ($0019F8)</p></li><li><p>32 kHz : 13,296 ($0033F0)</p></li></ul><p>For our experiment, we actually want to do something special with the frequency. We have a very short sawtooth waveform, capable of playing a musical note. The middle &#8220;A&#8221; key on a piano would play this pattern 440 times per second (440 Hz). We have 256 samples, so to achieve a middle A pitch, we need a sample rate of 440 x 256 = 112640 Hz = 112.64 kHz. Proportional to the 40 MHz CPU speed, the 24-bit value is: 47,244 decimal, or $00B88C (that&#8217;s &#8220;zero zero Baker eight eight Charlie&#8221;).</p><p>Someone check my math.</p><pre><code><code>80 POKE $D724,$8C:POKE $D725,$B8:POKE $D726,$00 : REM SAMPLE RATE 112.64 KHZ</code></code></pre><h3>Sample sign, bit depth, looping, and playback</h3><p>Finally, we can trigger the sample, with a few last settings in register $0. This register uses the following bits as flags:</p><ul><li><p>Bit 7: Play it.</p></li><li><p>Bit 6: Loop it. We want this to loop our very short sawtooth wave.</p></li><li><p>Bit 5: Set this to 0 if the sample value is signed. We&#8217;re using unsigned values in this example, so we set this to 1.</p></li><li><p>Bits 1-0: The bit depth: 11=16 bits, 10=8 bits (our choice), 01=upper 4 bits, 00=lower 4 bits.</p></li></ul><pre><code><code>90 POKE $D720, $80 + $40 + $20 + $02
100 GETKEY A$ : REM WAIT FOR A KEYPRESS
110 POKE $D720,0 : REM SWITCH IT OFF! SWITCH IT OFF!</code></code></pre><h3>Try it out!</h3><p>Run this to hear the tone. It&#8217;s a bit obnoxious, so press a key to switch it off. If you accidentally press Run/Stop with the sound still playing, use <code>POKE $D720,0</code> to disable the sound.</p><p>You can experiment with different waveforms by writing different values to $5.0000-$5.00FF. Try these:</p><pre><code><code>10 FOR X=0 TO 255 : POKE $50000+X,255*(SGN(X-128)+1) : NEXT X

10 FOR X=0 TO 255 : POKE $50000+X,X-(X-128)*(X&gt;128) : NEXT X

10 FOR X=0 TO 255 : POKE $50000+X,127*SIN(X/255*3.1415)+128 : NEXT X</code></code></pre><h2>Converting audio files to raw PCM data</h2><p>This little experiment to play triangle, sawtooth, and sine waveforms is fun, but not particularly impressive considering that the SID chips can already generate these waveforms on their own. To unleash the true power of audio DMA, we need PCM sample data for more interesting sounds. The MEGA65 does not have a built-in audio digitizer (at least not yet), so we must turn to our trusty modern computers.</p><p>There are many ways to record, produce, or otherwise acquire sound files with a modern computer and an Internet connection. Your computer&#8217;s operating system probably includes a free sound recording or editing program, and so does your mobile phone. Sound editing software like <a href="https://www.audacityteam.org/">Audacity</a> is free, and you can also download free sound files from <a href="https://freesound.org/">FreeSound.org</a>. Whatever software you&#8217;re using, be sure to edit your sound file to trim it to just the length you want your MEGA65 program to play.</p><h3>Audacity</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ieib!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ieib!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 424w, https://substackcdn.com/image/fetch/$s_!ieib!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 848w, https://substackcdn.com/image/fetch/$s_!ieib!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 1272w, https://substackcdn.com/image/fetch/$s_!ieib!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ieib!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png" width="539" height="475.03762662807526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27331382-15a2-47bc-be67-9b471caee1c1_691x609.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:609,&quot;width&quot;:691,&quot;resizeWidth&quot;:539,&quot;bytes&quot;:144280,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ieib!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 424w, https://substackcdn.com/image/fetch/$s_!ieib!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 848w, https://substackcdn.com/image/fetch/$s_!ieib!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 1272w, https://substackcdn.com/image/fetch/$s_!ieib!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27331382-15a2-47bc-be67-9b471caee1c1_691x609.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Audacity's audio export dialog, set to export monophonic PCM data, 8 kHZ 8-bit unsigned.</figcaption></figure></div><p>Our goal is to convert the sound file to raw PCM sample data at an appropriate sample rate, and at a bit depth supported by the MEGA65 audio DMA. Audacity can do all of this in a single export step:</p><ol><li><p>File menu, Export Audio.</p></li><li><p>Format: &#8220;Other uncompressed files&#8221;</p></li><li><p>Channels: Mono</p></li><li><p>Sample Rate: 8000 Hz or higher, or select &#8220;Other&#8221; and enter any rate in Hertz</p></li><li><p>Header: &#8220;RAW (header-less)&#8221;</p></li><li><p>Encoding: &#8220;Signed 16-bit PCM&#8221; or &#8220;Unsigned 8-bit PCM&#8221;</p></li><li><p>Click Export.</p></li></ol><p>Remember that sample rate and bit depth affect data size and sound quality, so choose wisely.</p><p>Other modern sound production software may not have all of the same export options. Some of the more expensive software packages on my computer can&#8217;t believe I would ever want to export at a sample rate lower than 44.1 kHz. If your software doesn&#8217;t export raw PCM sample data, or doesn&#8217;t offer the desired sample rate or bit depth, export a <code>.wav</code> file with high quality settings, then use Audacity for the final conversion to raw PCM data with the desired parameters.</p><p>It&#8217;s important to use the highest quality settings for every processing step until the last one. Because each digital audio file is an approximation of the original waveform, the conversion tool has to use some math to assume the gaps between the samples when converting from one sample rate to another. The more data that goes into that process, the better.</p><p>While preparing this Digest, I had occasional issues with Audacity trying to boost the volume of my samples, causing <a href="https://en.wikipedia.org/wiki/Clipping_(audio)">clipping</a> of the signal in some cases that added loud pops to the final sound effect. Notably, this clipping only happened on real hardware and not in Xemu, so be sure to test your samples.</p><h3>ffmpeg</h3><p>Audacity is fine, but I like command line tools so I can automate build workflows. The tool for this is <a href="https://ffmpeg.org/">ffmpeg</a>, an essential free media conversion tool for video and audio. It&#8217;s similar to how we used <a href="https://imagemagick.org/index.php">ImageMagick</a> to convert still images back in <a href="https://dansanderson.com/mega65/bitmap-bonanza/">a previous Digest</a>. ffmpeg is available for all platforms. On a Mac using <a href="https://brew.sh/">Homebrew</a>, install this with: <code>brew install ffmpeg</code></p><p>ffmpeg accepts most audio files as input, including <code>.wav</code> files. Specify the input file with the <code>-i</code> parameter. It&#8217;ll detect everything it needs to know about the input data from the file itself.</p><p>For the output file, we want something special, so we need to tell it what we want. The <code>-f</code> option selects the bit rate, selected from <a href="https://trac.ffmpeg.org/wiki/audio%20types">this list</a>:</p><ul><li><p><code>s16le</code> : signed 16-bit Little Endian</p></li><li><p><code>u16le</code> : unsigned 16-bit Little Endian</p></li><li><p><code>u8</code> : unsigned 8-bit</p></li></ul><p>To convert the file to a different sample rate, use the <code>-ar</code> option, and provide the value in Hertz. To convert a stereo sound to monophonic, specify <code>-ac 1</code>.</p><pre><code><code>ffmpeg -i klf.wav -f u8 -ar 8000 -ac 1 klf.raw</code></code></pre><p>You now have a raw PCM data file. Assuming it&#8217;s small enough, you can now copy this to a D81 disk image, and transfer the disk image to your MEGA65. See <a href="https://m65digest.substack.com/p/back-to-basics">a previous Digest</a> for more information on how to manage files and disk images.</p><h2>Playing the digitized sound</h2><p>The BASIC program above can be modified to play an arbitrary sample file. Replace line 10 with a <code>BLOAD</code> command that loads your sample file to address $50000:</p><pre><code><code>10 BLOAD "KLF.RAW",P($0050000)</code></code></pre><p>You will need to adjust the sample length (line 60) and the sample rate (line 80) as appropriate for your data. You might want to remove the loop flag (<code>$40</code>) from the playback command (line 90). Only include the &#8220;unsigned&#8221; flag (<code>$20</code> on line 90) if the sample data is unsigned.</p><p>Can you hear the sound, but it&#8217;s noisy or crackling? Double-check the &#8220;unsigned&#8221; bit. Using the unsigned bit when the sample data is signed (and vice versa) will cause transitions from negative to positive values to pop, in a bad way.</p><h2>What about 4-bit sample data?</h2><p>None of the audio processing programs I tried offer export of 4-bit samples. How can we make 4-bit samples, to take advantage of this feature of audio DMA?</p><p>Compared to something as complex as re-sampling at different sample rates, converting from an unsigned 8-bit sample to an unsigned 4-bit sample is quite easy. We just lop off the lower four bits, equivalent to dividing by 16. Here&#8217;s a simple Python program that does this:</p><pre><code><code>INPUT_FILE = 'klf_8b.raw'
OUTPUT_FILE = 'klf_4b.raw'

data_input = open(INPUT_FILE, 'rb').read()

with open(OUTPUT_FILE, 'wb') as outfile:
  for i in range(len(data_input)):
    samp = int(data_input) // 16
    outfile.write(samp)</code></code></pre><p>This takes the file <code>klf_8b.raw</code> containing unsigned 8-bit samples and produces the file <code>klf_4b.raw</code> containing unsigned 4-bit samples, with each sample in the lower four bits. We can modify our playback program to use this by setting the appropriate flags in the $0 register:</p><pre><code><code>90 POKE $D720, $80 + $20 : REM PLAY IT ONCE, UNSIGNED, 4-BIT LOW</code></code></pre><p>Audio DMA requires that each sample be at separate memory locations, so merely converting a sample from 8-bit to 4-bit doesn&#8217;t actually save any space. The space savings comes from storing two 4-bit samples on top of each other, and telling audio DMA to play either the bottom four bits or the top four bits. We can modify this Python script to store two samples together in this way:</p><pre><code><code>INPUT_FILE_ONE = 'klf_8b.raw'
INPUT_FILE_TWO = 'rockyou_8b.raw'
OUTPUT_FILE = 'klf_4b.raw'

data_one = open(INPUT_FILE_ONE, 'rb').read()
data_two = open(INPUT_FILE_TWO, 'rb').read()

# Pad the shorter sample with zeroes, so they are the same length
if len(data_one) &lt; len(data_two):
  data_one += b'\x00' * (len(data_two) - len(data_one))
elif len(data_two) &lt; len(data_one):
  data_two += b'\x00' * (len(data_one) - len(data_two))

with open(OUTPUT_FILE, 'wb') as outfile:
  for i in range(len(data_one)):
    samp_one = int(data_one[i]) // 16
    samp_two = int(data_two[i]) // 16
    result = samp_two * 16 + samp_one
    outfile.write(bytes([result]))</code></code></pre><p>This takes the two 8-bit sample files <code>klf_8b.raw</code> and <code>rockyou_8b.raw</code>, converts them both to 4-bit, then writes them to a single file <code>klf_4b.raw</code> with <code>klf</code> in the lower bits and <code>rockyou</code> in the upper bits.</p><p>To tell the playback program which sample to play, set bits 1 and 0 of $D720 accordingly:</p><pre><code><code>90 POKE $D720, $80 + $20 : REM PLAY IT ONCE, UNSIGNED, 4-BIT LOW

90 POKE $D720, $80 + $20 + $01 : REM PLAY IT ONCE, UNSIGNED, 4-BIT HIGH</code></code></pre><div><hr></div><p>I have a vivid memory of hearing The KLF&#8217;s &#8220;3 a.m. Eternal&#8221; played on my childhood Amiga 500. Like the MEGA65, the Amiga can play short digitized sounds over four audio DACs. Most Amiga owners didn&#8217;t have enough memory to store several minutes of digitized sound, so another kind of music was born. A <a href="https://en.wikipedia.org/wiki/MOD_(file_format)">MOD file</a> encodes music as short digitized sounds played in a pattern of frequencies and timings, saving memory by re-using samples throughout the song. The KLF&#8217;s music was largely sample-based and repetitive to begin with, and they even produced some of it on home computers like the Apple II and Atari ST. MOD files can come close to reproducing the original songs within the memory limitations of a vintage computer.</p><p>Your MEGA65 includes a MOD player on the Intro Disk, called &#8220;<a href="https://files.mega65.org/?id=73b398a2-d7fa-43fd-9dd5-7879cc824e46">Manche</a>,&#8221; that uses audio DMA to play sound samples. I found one person&#8217;s attempt at a MOD of &#8220;3 a.m. Eternal&#8221; and was able to play it in Manche on my MEGA65. I can&#8217;t say this particular MOD is my favorite remix, but it&#8217;s been fun to revive this memory.</p><p>Here are a few MOD arrangements of KLF songs for you to enjoy:</p><ul><li><p>Download: <a href="https://dansanderson.com/mega65/justified-ancients/3ametern.mod">3ametern.mod</a></p></li><li><p>Download: <a href="https://dansanderson.com/mega65/justified-ancients/whattime.mod">whattime.mod</a></p></li><li><p>Download: <a href="https://dansanderson.com/mega65/justified-ancients/doctorin.mod">doctorin.mod</a></p></li></ul><p>Put these in the root of your SD card, then start Intro Disk #1. Open the Music menu, select Manche, and press <strong>Return</strong> to run the program. Within Manche, press F1, type one of the filenames, then press <strong>Return</strong> to load the file. Press <strong>Space</strong> to start playback.</p><p>I also made this demonstration disk with the waveform generator program from this issue, as well as a program demonstrating the same sound at different sample rates and bit depths.</p><ul><li><p>Download: <a href="https://dansanderson.com/mega65/justified-ancients/KLF.D81">KLF.D81</a></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dYhT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dYhT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 424w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 848w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 1272w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dYhT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png" width="867" height="474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:474,&quot;width&quot;:867,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:550703,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dYhT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 424w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 848w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 1272w, https://substackcdn.com/image/fetch/$s_!dYhT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F422091cc-8325-40cb-bf7b-ea434cc14fc5_867x474.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Clarinet solo!</figcaption></figure></div><p>This Digest is made possible with support from justified ancients, like you! To contribute, visit <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a>.</p><p>See you next month!</p><p>&#8212;&nbsp;Dan</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Release day!]]></title><description><![CDATA[BREAKING: MEGA65 platform release v0.96 now available]]></description><link>https://m65digest.substack.com/p/release-day</link><guid isPermaLink="false">https://m65digest.substack.com/p/release-day</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Sun, 25 Feb 2024 21:33:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SKOU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc825ca18-2775-4064-8097-b05053f8177d_300x300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>MEGA65 platform release v0.96 is now available! This release is a culmination of 14 months of improvements to the FPGA core, the MEGA65 ROM, and system software. You can also now download the final version of the new User&#8217;s Guide PDF and Intro Disk software package. Everyone who owns a MEGA65 is encouraged to upgrade.</p><h3>For the MEGA65 delivered in 2022&#8230;</h3><p>If you own a MEGA65 delivered in 2022, <a href="https://files.mega65.org/">sign in to Filehost</a> with the account you used to redeem your owner code, then <a href="https://files.mega65.org/?id=a0276005-e71c-4b2d-8d17-2aa92e492c50">download MEGA65 release v0.96</a> for &#8220;R3&#8221; boards. If you don&#8217;t yet have a Filehost account, register for one, then select &#8220;Redeem Code&#8221; from the user menu and enter the nine character code printed on the piece of paper that was included with your MEGA65. This gives you access to the release packages &#8220;with ROM,&#8221; and a few other things.</p><p>Download <a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">The MEGA65 User&#8217;s Guide, 2nd edition</a> PDF, and follow the instructions in the chapter, &#8220;Upgrading the MEGA65.&#8221;</p><p>You will want to update the factory core in slot 0 to this release. Please see the &#8220;NOTE&#8221; in the User&#8217;s Guide about upgrading an R3A MEGA65 for the first time: there&#8217;s a little trick required to start the flasher from the v0.96 core in slot 1 to flash the v0.96 core to slot 0. Don&#8217;t worry, it&#8217;s easy, just don&#8217;t miss the note. For a more detailed version of these instructions with photos, see <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/83689488/Visual+Guide+to+Flashing+Slot+0+without+JTAG">Visual Guide to Flashing Slot 0 without JTAG</a>.</p><p>Lastly, download M65Connect v2.3 <a href="https://files.mega65.org/?id=d612d745-360e-4e86-8e15-14af525b6220">for Windows (Intel)</a>, <a href="https://files.mega65.org/?id=1b849d0a-2ceb-44aa-beb4-a2cdfa51eb19">for Windows (ARM)</a>, <a href="https://files.mega65.org/?id=5919a8b8-c23c-4616-9a52-37e077076638">for macOS (Universal)</a>, or <a href="https://files.mega65.org/?id=c1dbc7fe-89ad-4f1d-9e72-ad3f55cf02a1">for Linux (Intel)</a>. This powerful desktop application includes new features and enhancements for transferring files between your PC and your MEGA65, with support for a new feature in the v0.96 release: file transfer over Ethernet. See the User&#8217;s Guide for more information, as well as <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/48365569/M65Connect">the new M65Connect section of the Wiki</a>.</p><h3>For Xemu users&#8230;</h3><p>If you don&#8217;t yet own a MEGA65 and use <a href="https://github.lgb.hu/xemu/">the Xemu MEGA65 emulator</a>, you can upgrade the MEGA65 ROM to the release v0.96 version, ROM 920395. <a href="https://files.mega65.org/?id=fd2c40b9-f337-41f7-8a81-0254b1e09fb5">Download the ROM 920395 diff files</a>, then follow the instructions in the <a href="https://files.mega65.org/?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">ROM FAQ</a> to construct the <code>mega65.rom</code> file. The M65Connect app includes a built-in ROM patching tool for this purpose. See also the <a href="https://github.com/lgblgblgb/xemu/wiki/MEGA65-quickstart">Xemu MEGA65 Quickstart</a>.</p><p>The release v0.96 ROM requires a recent version of Xemu, dated December 2023 or later. If you haven&#8217;t updated Xemu in a while, get the latest &#8220;stable&#8221; version.</p><p><a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">The MEGA65 User&#8217;s Guide, 2nd edition</a> PDF has been fully updated with information about recently added features to BASIC 65.</p><h3>For DevKit owners&#8230;</h3><p>Release v0.96 is available for the MEGA65 DevKit. Download and install the <code>mega65r3</code> release package, as above.</p><p>An important note for this case: the v0.96 core flasher does <em>not</em> yet work on the DevKit. You can use the v0.95 core to flash the v0.96 core (such as in slot 1), but be sure to keep the v0.95 core around (such as in slot 0) for flashing other cores.</p><p>This shortcoming will be resolved in the next few months with a follow-up release.</p><h3>For Nexys dev boards&#8230;</h3><p>The v0.96 release is not yet available for FPGA development boards, such as the Nexys. This will be addressed in a follow-up release. Please continue to use v0.95 for now.</p><h3>For those who are about to rock&#8230;</h3><p>The MEGA65s that will be delivered in June 2024 will have this release installed at the factory. We plan to do another release before then, so you&#8217;ll want to check for newer versions and upgrade shortly after receiving your computer.</p><h2>Reminders of other things you can get</h2><p>As I mentioned in the previous newsletter, you can now <a href="https://www.lulu.com/shop/dan-sanderson-and-edilbert-kirk-and-paul-gardner-stephen/mega65-users-guide/paperback/product-dyrzzzy.html?page=1&amp;pageSize=4">purchase the MEGA65 User&#8217;s Guide, 2nd edition, in print form</a>. Orders so far have been arriving on doorsteps all over the world, and it turned out great! Don&#8217;t miss <a href="https://files.mega65.org/?ar=1c17f84a-2f10-4ad0-9168-6201331ece4b">the UG2 FAQ</a> that answers a few anticipated questions.</p><p><a href="https://www.zazzle.com/store/m65digest">The 45GS02 Quick Reference mousepad and poster</a> are still available. I added <a href="https://files.mega65.org/?ar=46e7054c-9740-4e85-9df3-05b4a0f34122">this article to Filehost</a> with a few action photos.</p><p>More MEGA65s will ship in June of this year, and they will include <a href="https://files.mega65.org/?id=all-intros-public">a massive new Intro Disk software bundle</a> (<a href="https://files.mega65.org/?id=all-intros">registered owner version</a>). Download this for your own computer and copy all of the files to your SD card. This is a superset of the software that was included in 2022, including updated versions of previous titles.</p><h2>What&#8217;s new?</h2><p>Notable changes in the MEGA65 firmware from release v0.95 to v0.96 (see <a href="https://github.com/MEGA65/mega65-core/blob/release-0.96/release-build/Changelog.md">the core changelog</a> for a complete list):</p><ul><li><p>Ethernet file transfer support; use the new M65Connect app (or command line tools), and see the User&#8217;s Guide, 2nd edition, for instructions</p></li><li><p>New core selection and flashing menu, capable of flashing slot 0 without a JTAG adapter</p><ul><li><p>Can configure core slots to be selected automatically when different types of cartridges are connected, so a C64 cart can auto-boot into the C64 core instead of the MEGA65 core</p></li><li><p>Core file selector supports long filenames</p></li></ul></li><li><p>New hardware typing event queue, enables faster and more accurate typing</p></li><li><p>Improvements to the chipset, Freezer, SD card utility, and Configuration utility</p><ul><li><p>Fixed mouse handling in port 2</p></li><li><p>Configuration utility now prompts to power cycle on exit, to avoid confusion</p></li></ul></li><li><p>Support for the upcoming R6 main board (and intermediate test versions R4 and R5)</p></li></ul><p>Notable changes in the MEGA65 ROM from release v0.95 to v0.96 (see <a href="https://github.com/MEGA65/mega65-rom-public/blob/main/CHANGELOG.md">the ROM changelog</a> for a complete list):</p><ul><li><p>Screen editor and KERNAL use the new hardware typing event queue, for faster and more accurate typing</p></li><li><p>80 x 50 text mode: press ESC then 5 (press ESC then 8 or 4 to select 80x25 and 40x25)</p></li><li><p>Default sprite images, including a mouse pointer in sprite slot 0</p></li><li><p>GO64 mode now displays a custom banner instead of the C64 banner, so it&#8217;s easier to distinguish between GO64 mode and the C64 core</p></li><li><p>Support for booting MEGA65 cartridges, based on the <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/36962324/MEGA65+Style+Cartridge+Work+in+Progress">MEGA65 cartridge protocol</a></p></li><li><p>Run/Stop-Restore now restores the character set</p></li><li><p>Improvements to the Monitor, Renumber, BASIC commands, DOS</p></li><li><p>For this release only: the ROM will detect whether it is being run with an older core or Xemu version, and halt with a message. Be sure to use the v0.96 core or a recent version of Xemu with this ROM.</p></li></ul><h2>What&#8217;s next?</h2><p>A big blow-out party! Or maybe just some rest and relaxation. It&#8217;s been a long haul, with some heroic efforts from the development and testing team in the last few weeks. Everyone has chipped in to make this release and the next delivery batch of MEGA65s the best as they can be.</p><p>The core team will proceed with working on a follow-up release, currently expected to be called v0.97 and released in a few months. This will include some clean-up tasks that were deferred from v0.96 to hit the batch #3 delivery schedule, including full support for DevKits and Nexys boards.</p><p>As for ROM development, there&#8217;s exciting news! We&#8217;ve been focusing primarily on bug fixes over the last year, mostly to ensure we&#8217;re making the best use of the very limited space we have for new ROM code. The next ROM beta test will include the results of a project I&#8217;ve been working on to make more code space available for new features. I have taken this opportunity to implement a bunch of features requested by the MEGA65 community over the last two years, and these will also be included in the next beta. Remember that beta releases may have bugs, so thanks in advance for your patience, and your bug reports! Stay tuned to <a href="https://mega65.org/chat">the Discord</a> for an announcement, very soon.</p><div><hr></div><p>And one last obligatory plug: My contributions to the MEGA65 project, including this newsletter, are made possible with support from retro computing enthusiasts like you! Please consider a monthly donation. Visit <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a>.</p><p>Thanks all! Back again in March with another full issue.</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[Sprite Attack!]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for February 2024]]></description><link>https://m65digest.substack.com/p/sprite-attack</link><guid isPermaLink="false">https://m65digest.substack.com/p/sprite-attack</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Fri, 16 Feb 2024 08:25:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BOlm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BOlm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BOlm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 424w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 848w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 1272w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BOlm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png" width="509" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:509,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BOlm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 424w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 848w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 1272w, https://substackcdn.com/image/fetch/$s_!BOlm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bab2ea6-9fa7-4e35-b01c-d50bf84fc19c_509x360.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A space ship sprite in the MEGA65 SpritEd sprite editor.</figcaption></figure></div><p>Spaceships. Aliens. Marios. Goombas. Bullets. Fireballs. Mouse pointers, text cursors. Any of these could be a <em><a href="https://en.wikipedia.org/wiki/Sprite_(computer_graphics)">sprite</a></em>, a feature of a computer graphics system dedicated to things that move. The sprite capabilities of the Commodore 64&#8217;s VIC-II chip super-charged video games and user interfaces beyond a single screenful of character text or a bitmap image. The MEGA65 includes support for VIC-II hardware sprites, and has sprite-related BASIC commands that make them easy to use in your programs.</p><p>In this Digest, we&#8217;ll review the VIC-II sprite system&#8217;s capabilities, try out the sprite features added to Commodore BASIC for the C128, C65, and MEGA65, and step through a development workflow for using sprites in BASIC games. And we&#8217;ll try putting these pieces together to make a simple arcade game.</p><p>But first&#8230;</p><h2>The User&#8217;s Guide, 2nd edition, now available</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YWKc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YWKc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YWKc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YWKc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YWKc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0beab9-6b79-4447-a29a-d577ec58577c_640x480.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 User's Guide, 2nd edition.</figcaption></figure></div><p>You can now <a href="https://www.lulu.com/shop/dan-sanderson-and-edilbert-kirk-and-paul-gardner-stephen/mega65-users-guide/paperback/product-dyrzzzy.html?page=1&amp;pageSize=4">buy a spiral-bound printed copy of the MEGA65 User&#8217;s Guide, 2nd edition</a>!</p><p>This new edition has been updated substantially from the 1st edition printing from two years ago. It covers the upcoming v0.96 release, with instructions for new features like Ethernet file transfer, and revised information on important topics like upgrading the firmware and using disks. The BASIC reference has been updated with corrections, polish, and material on new features. And there are handy new appendices on screen codes and system colors.</p><p>Whether you have the 1st edition and want to upgrade, or don&#8217;t yet have a MEGA65 and just want a useful book to go with Xemu, getting the 2nd edition in print is a great way to enhance your MEGA65 experience.</p><p>I <a href="https://files.mega65.org/?ar=1c17f84a-2f10-4ad0-9168-6201331ece4b">wrote a FAQ with more information</a>, including what&#8217;s happening with the manuals bundled with new MEGA65s. Let me know if you have any questions.</p><h2>Release testing update</h2><p>The v0.96 release package has been in public testing for a month, and we&#8217;ve been chasing down issues and polishing it up for factory installation on all of the new MEGA65s. This process should be complete a week or so after you read this. Many thanks to everyone who has contributed to the testing effort!</p><p>What happens next: the v0.96 release package will be made official and sent to Trenz for the factory installation on new machines. It will be declared the new stable release for R3A and R6 mainboards, and made available on Filehost. Everyone with the &#8220;retail&#8221; MEGA65 will be encouraged to upgrade.</p><p>DevKit and Nexys board owners will need to wait, just a bit. In order to meet the assembly schedule, we have had to defer preparing new cores for these boards until after this release. The plan is to immediately start work on these deferred tasks, and issue a v0.97 update within a couple of months that includes support for these boards. You&#8217;re always welcome to help test along the way, just be aware of known issues with slot 0 flashing on the older boards.</p><p>Upgrade party at lydon&#8217;s place! &#127881;</p><h2>New Intro Disks!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kaqv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kaqv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 424w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 848w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 1272w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kaqv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png" width="524" height="419.2" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:720,&quot;resizeWidth&quot;:524,&quot;bytes&quot;:4585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kaqv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 424w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 848w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 1272w, https://substackcdn.com/image/fetch/$s_!kaqv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc30fd3af-0a9e-480f-a7f1-913a8213c14c_720x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The new Intro Disk main menu</figcaption></figure></div><p>Gurce has put a ton of work into preparing the new software bundle for the SD card that will ship with the new MEGAs. Current owners are familiar with the &#8220;Intro Disk&#8221; menu that starts when you first switch on the computer, as well as other bonus goodies that come on the pre-installed memory card. The new bundle includes all of that and <em>much</em> more, a total of 191 (one hundred and ninety one!) menu entries. And that&#8217;s not even counting the disk menus themselves, with useful information and musical accompaniment. This compilation starts all new MEGA65 owners off with plenty to do on their first day. Huge thanks to Gurce for his meticulous work on this project, and of course to everyone who has written software for the MEGA65.</p><p>You can <a href="https://files.mega65.org/?id=all-intros-public">download the new software bundle on Filehost</a>. (There&#8217;s <a href="https://files.mega65.org/?id=all-intros">a separate download for registered owners</a> with a more complete version of GEOS.) If you don&#8217;t yet have a MEGA65, you can try it out in <a href="https://github.lgb.hu/xemu/">Xemu</a>&#8212;or save it as a surprise for when your MEGA65 arrives!</p><h2>New on Filehost</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_5FN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_5FN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 424w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 848w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 1272w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_5FN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png" width="555" height="455.2425106990014" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:701,&quot;resizeWidth&quot;:555,&quot;bytes&quot;:4100,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_5FN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 424w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 848w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 1272w, https://substackcdn.com/image/fetch/$s_!_5FN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c73214-ea4c-42b7-adf6-6a7403186122_701x575.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rocket Delivery Service, by fredrikr</figcaption></figure></div><p>Don&#8217;t miss these new titles on Filehost:</p><p><a href="https://files.mega65.org/?id=f051e4eb-c4f6-4831-968c-90e95ff39c53">Rocket Delivery Service, by fredrikr</a>, a new game for one or two players. Navigate your rocket man to pick up and deliver packages, for cash! Each player can use a joystick, or player one can use the keyboard while player two uses a joystick. Written entirely in BASIC!</p><p>MJoergen and sy2002 are updating their vintage platform cores for use on the new R6 mainboard. <a href="https://files.mega65.org/?id=bdaeb7e0-9fc8-4185-99de-104d01229f27">The ZX Spectrum core v1.2</a> is now available, and there is <a href="https://discord.com/channels/719326990221574164/801767398675316756/1200389851783114784">a beta test version of the C64 core v5.1</a> (link goes to Discord) to be released soon. The C64 core update also includes a few fixes for all mainboards, and support for using the MEGA65&#8217;s Real-Time Clock with the Commodore 64 version of GEOS.</p><p>muse has yet another arcade core, and he keeps picking my favorites! <a href="https://files.mega65.org/?id=e2ee129d-149c-4b59-9ced-d21185878091">Elevator Action</a> (1983), a spy thriller set in a multi-level top secret facility. Infiltrate the building from the roof, avoid the armed goons, collect the secret files, and escape through the parking garage. As with the other arcade cores, you must locate the arcade ROMs yourself, so be sure to <a href="https://github.com/sho3string/ElevatorActionMEGA65">follow the installation instructions</a>. Hold the button to jump.</p><p>Amiga fans: geehaf has published <a href="https://files.mega65.org/?id=00fab7dc-0dd1-4a43-b3e9-a904ee09e110">an ADF disk image utility</a> that can use the MEGA65&#8217;s physical floppy drive to make Amiga disks from ADF files, and vice versa. This is a beta release of the tool, so take care to back up important data.</p><h2>Exploring sprites</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e94w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e94w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 424w, https://substackcdn.com/image/fetch/$s_!e94w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 848w, https://substackcdn.com/image/fetch/$s_!e94w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 1272w, https://substackcdn.com/image/fetch/$s_!e94w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e94w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png" width="433" height="515.0421052631579" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da026863-2410-433c-8506-02a5faa7b0ea_285x339.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:339,&quot;width&quot;:285,&quot;resizeWidth&quot;:433,&quot;bytes&quot;:130011,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e94w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 424w, https://substackcdn.com/image/fetch/$s_!e94w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 848w, https://substackcdn.com/image/fetch/$s_!e94w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 1272w, https://substackcdn.com/image/fetch/$s_!e94w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda026863-2410-433c-8506-02a5faa7b0ea_285x339.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The balloon example sprite, from the Commodore 64 Users Guide.</figcaption></figure></div><p>The hardware sprites of the VIC-II chip should be familiar to anyone who has written a program for the Commodore 64. The Commodore 64 Users Guide that came with the machine included <a href="https://www.commodore.ca/manuals/c64_users_guide/c64-users_guide-06-sprite_graphics.pdf">a chapter on sprite graphics</a> with a type-in demo. C64 programmers may also remember drawing out pictures on graph paper, hand-coding them into decimal numbers, typing them into <code>DATA</code> statements, and messing about with dozens of arcane <code>POKE</code> statements. In later computers and later versions of BASIC, Commodore added a BASIC sprite subsystem with access to most of the VIC-II&#8217;s sprite features, driven by a new set of commands. No <code>POKE</code>-ing necessary.</p><p>From here on, when I say &#8220;sprites,&#8221; I&#8217;m referring to the built-in sprite features of the VIC-II chip that have carried forward from the Commodore 64 to the MEGA65. Experienced game programmers would want me to point out that the general term &#8220;sprite&#8221; could apply to any kind of moveable graphics object, and there are, in fact, other ways to accomplish sprite-like effects on the MEGA65. We&#8217;ll have to cover those in later issues of the Digest.</p><p>The best way to get to know Commodore sprites is to try out the commands! The new v0.96 release version of the MEGA65 ROM includes pre-defined sprite images for a mouse pointer and a simple line pattern, so you can get started without drawing any graphics. If you&#8217;re using the previous release, you can still switch on the sprites, you&#8217;ll just see a blob of pixels that represents uninitialized memory contents.</p><h3>Getting a sprite onto the screen</h3><p>The VIC chip can keep track of up to eight sprites at a time, numbered 0 through 7. Each sprite has a set of modes and flags, including a flag to enable or disable the sprite. You manage these flags with the <code>SPRITE</code> command.</p><p>To turn on sprite 0:</p><pre><code><code>SPRITE 0,1</code></code></pre><p>Nothing appears to happen because the sprite starts located off the screen. Let&#8217;s move it roughly to the middle of the screen so we can see it (X=160, Y=120):</p><pre><code><code>MOVSPR 0,160,120</code></code></pre><p>While many of BASIC 65&#8217;s sprite commands originate with BASIC 7 and the Commodore 128, there are subtle differences. For example, on the C128, sprites are numbered 1 through 8. I won&#8217;t describe every difference here, just be aware that they&#8217;re not exactly the same on both computers.</p><h3>Pixels and colors</h3><p>In the default sprite mode (sometimes called &#8220;high resolution&#8221; mode), each sprite is 24 pixels wide and 21 pixels high, using a single sprite-assignable color for each &#8220;on&#8221; pixel (bit 1) and treating each &#8220;off&#8221; pixel (bit 0) as transparent. This is encoded as three bytes per row (8 bits per byte x 3 bytes = 24 pixels), for a total of 63 bytes (21 rows x 3 bytes per row) per sprite image.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y4tx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y4tx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 424w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 848w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 1272w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y4tx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png" width="549" height="759" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:759,&quot;width&quot;:549,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y4tx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 424w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 848w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 1272w, https://substackcdn.com/image/fetch/$s_!y4tx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F379a26b0-505f-41e0-bb4e-f7fab266e8d8_549x759.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A VIC-II sprite, 24 x 21, monochrome. Each of the eight sprites can use its own color for the pixels.</figcaption></figure></div><p>You can set the color of a sprite with the <code>SPRITE</code> command. You can omit any argument you don&#8217;t want to change by specifying just a comma. The color value refers to the palette entry, in this case the default system palette. To turn sprite 0 red (palette entry 2):</p><pre><code><code>SPRITE 0,,2</code></code></pre><p>On the MEGA65, you can change the system palette using the <code>PALETTE COLOR</code> command. Each palette entry can be any of 4096 possible colors, with a red, green, and blue component each between 0 and 15. This changes the palette entry for <em>all</em> uses of the color on the screen, not just sprites. To replace the red color at entry 2 with a bright green:</p><pre><code><code>PALETTE COLOR 2,12,15,4</code></code></pre><p>To restore the default palette:</p><pre><code><code>PALETTE RESTORE</code></code></pre><h3>Multicolor mode</h3><p>If you&#8217;re willing to use a lower sprite resolution of 12 double-wide pixels per row instead of 24 single-wide pixels, you can set a sprite to multi-color mode, for two more additional colors. The two new colors must be shared by all sprites that are in multi-color mode. In this mode, sprite pixels are encoded as bit pairs: 00 for transparent, 10 for the sprite color, and 01 and 11 for the two shared colors.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XqhU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XqhU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 424w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 848w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 1272w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XqhU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png" width="551" height="759" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:759,&quot;width&quot;:551,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27299,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XqhU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 424w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 848w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 1272w, https://substackcdn.com/image/fetch/$s_!XqhU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe42a1588-6b13-472e-8191-cebfd85b96e0_551x759.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A VIC-II sprite, 12 x 21, multicolor. The colors of the hat and scarf must be shared across all eight sprites.</figcaption></figure></div><p>Let&#8217;s try setting sprite 0 to multi-color mode, using a value of 1 for the seventh argument to <code>SPRITE</code>:</p><pre><code><code>SPRITE 0,,,,,,1</code></code></pre><p>If you&#8217;re using a ROM beta version, the default mouse pointer image of sprite 0 might not look that impressive in multi-color mode. Try enabling sprite 1 and moving it to the middle of the screen, then put it in multicolor mode. The default image of sprite 1 is designed to illustrate multicolor mode, with a repeating pattern of 00, 01, 10, and 11 bit pairs. (If you&#8217;re using release v0.95&#8217;s ROM 920377 or earlier, you&#8217;re in luck: the garbage data that&#8217;s usually there typically has an interesting combination of bit pairs.)</p><p>To set the two shared colors for the multicolor sprites, use the <code>SPRCOLOR</code> command, with the two palette entry numbers:</p><pre><code><code>SPRCOLOR 4,5</code></code></pre><h3>Double width, double height</h3><p>Each sprite can be displayed normal size, double width, double height, or both double width and double height. The double modes don&#8217;t give you more pixels: instead, they stretch the existing sprite design in the requested dimension.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!38-P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!38-P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 424w, https://substackcdn.com/image/fetch/$s_!38-P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 848w, https://substackcdn.com/image/fetch/$s_!38-P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 1272w, https://substackcdn.com/image/fetch/$s_!38-P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!38-P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png" width="545" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/640f1320-9808-4efa-8283-401e331ecff7_545x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:545,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!38-P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 424w, https://substackcdn.com/image/fetch/$s_!38-P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 848w, https://substackcdn.com/image/fetch/$s_!38-P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 1272w, https://substackcdn.com/image/fetch/$s_!38-P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F640f1320-9808-4efa-8283-401e331ecff7_545x448.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A sprite displayed normally, double-wide, double-height, and double-wide double-height.</figcaption></figure></div><p>These modes can be selected per sprite, and are the fifth and sixth arguments to the <code>SPRITE</code> command, respectively. Try the combinations of 0 and 1 for these arguments:</p><pre><code><code>SPRITE 0,,,,1,1
</code></code></pre><h3>Sprite priority</h3><p>Each sprite can be set to appear above the character or bitmap layer, or below it. When above, you can see the character or bitmap through the sprite&#8217;s transparent pixels.</p><p>Use the cursor keys to move the text cursor to where the sprite is on the screen, then type some characters underneath it. On a blank line, set the fourth argument to <code>SPRITE</code> to 0 or 1, and see what happens:</p><pre><code><code>SPRITE 0,,,1</code></code></pre><p>When sprites overlap each other, lower numbered sprites are always in front of higher numbered sprites. This order cannot be changed. Use <code>SPRITE</code> to make sure two sprites are active, then use <code>MOVSPR</code> to locate them so that their images overlap.</p><pre><code><code>SPRITE 1,1
MOVSPR 1,160,120</code></code></pre><p>Overlapping sprites is a common way to draw a high resolution graphics object using more than one color: just use more than one sprite to represent the object, and allow pixels of lower sprites to shine through the transparent pixels of upper sprites.</p><h3>Location, location, location</h3><p>A sprite can be located at any pixel location on the screen. A sprite&#8217;s location is specified as coordinates on the screen, where the sprite&#8217;s top-left corner is placed at that location. Coordinates extend to locations under the screen border, and a sprite that overlaps the border will be obscured. This allows a sprite to glide off the screen smoothly until it disappears. (Note that double-width sprites won&#8217;t fit completely under the left border.)</p><p>To place a sprite exactly in the top-left corner of the screen just inside the border, set its coordinates to X=24 Y=50. If a sprite is in its normal display mode (with its double-width double-height features turned off), you can place the sprite&#8217;s bottom-right corner exactly at the bottom-right corner of the screen with coordinates X=321 Y=229.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iHsq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iHsq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 424w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 848w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 1272w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iHsq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png" width="676" height="341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:341,&quot;width&quot;:676,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27496,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iHsq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 424w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 848w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 1272w, https://substackcdn.com/image/fetch/$s_!iHsq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c932c8-9375-455b-99d4-fe88e31e8b1a_676x341.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The VIC-II sprite coordinate system</figcaption></figure></div><p>The VIC-II sprite coordinate system is independent of the resolution of the underlying screen mode. The MEGA65&#8217;s default 80-column text screen is actually 640 pixels wide. VIC-II sprite coordinates refer to the same locations regardless of the MEGA65 screen resolution. If you switch to the 40-column text mode, the sprites will remain where they are.</p><p>Sprite coordinates are the same for both NTSC and PAL video modes. Even though these modes use different dimensions for the full screen, the dimensions inside the border are the same.</p><p>We&#8217;ve already seen how the <code>MOVSPR</code> command can set a sprite to specific coordinates. This command has several other useful features. To move a sprite to a relative distance from its current location, use a <code>+</code> or <code>-</code> and an offset for the coordinate value (X, then Y):</p><pre><code><code>MOVSPR 0,+20,-10</code></code></pre><p>The <code>MOVSPR</code> command can animate the movement of a sprite at a given speed. This animation happens <em>asynchronously</em> to BASIC program execution, similar to the <code>PLAY</code> command for music: the animation occurs in the background while the rest of your code continues to run. To move a sprite from one coordinate pair to another, use the <code>TO</code> keyword, and provide a speed as a number of pixels per frame. Remember that PAL mode refreshes 50 frames per second, while NTSC mode refreshes 60 frames per second, so the movement speed differs based on video mode.</p><pre><code><code>MOVSPR 0,100,100 TO 250,200,5</code></code></pre><p>Note that the sprite needs to hit the end coordinate almost exactly for the sprite to stop. If the speed is not a multiple of the differences between the starting and ending coordinates, the sprite might overshoot its destination and wrap around the screen until it finally lands where it was told. If there&#8217;s a chance of this, you may need to resort to a loop that tests <code>RSPPOS()</code> and stops the sprite with another <code>MOVSPR</code> command when it is close enough.</p><p>A sprite can be set to move continuously, with no fixed end coordinate. To do this, provide an angle as a number of degrees, with 0 degrees being &#8220;up&#8221; and proceeding clockwise, so 90 is right, 180 is down, and so forth. Follow this with a <code>#</code> symbol and the speed.</p><pre><code><code>MOVSPR 0,135#1</code></code></pre><p>The sprite will continue to move at this angle and speed until you set its speed to 0 with another <code>MOVSPR</code> command, or until you switch it off with the <code>SPRITE</code> command.</p><pre><code><code>MOVSPR 0,0#0</code></code></pre><p>When a moving sprite leaves the screen, it will continue to move until its position wraps around to the other side of the screen. If you want to test the position of the moving sprite, such as to stop its motion after it is off screen, use the <code>RSPPOS()</code> function. This takes the sprite number, and an argument identifying the parameter to return: 0 for the X position, 1 for the Y position, 2 for the speed.</p><p>Here&#8217;s a short program that starts the sprite moving to the right, then stops it either when a key is pressed or the sprite leaves the screen:</p><pre><code><code>10 SPRITE 0,1
20 MOVSPR 0,100,100
30 MOVSPR 0,90#1
40 GET A$
50 X=RSPPOS(0,0)
60 IF A$="" AND X &lt; 345 THEN 40
70 MOVSPR 0,0#0</code></code></pre><h3>Collision detection</h3><p>The VIC chip can report when two sprites have non-transparent pixels on top of each other, or on top of the character or bitmap layer. Your program can use this to detect <em>collisions</em> between sprites, or between a sprite and the background, such as to know when a player&#8217;s bullet hits an alien ship, or when the player&#8217;s ship crashes into a mountain.</p><p>BASIC 7 on the Commdoore 128 introduced an interesting mechanism for handling sprite collisions. To tell BASIC that you care about sprite collisions, you use the <code>COLLISION</code> command to indicate the type of collision (1 = sprite on sprite, 2 = sprite on background), followed by a line number of your BASIC program. At some later point, when the VIC detects the requested collision type, BASIC will stop whatever it is doing and jump to the given line number as if it were a <code>GOSUB</code> subroutine. Your code at this line number should do whatever it needs to do to react to the collision, then use the <code>RETURN</code> command to resume where the program left off.</p><p>Your handler subroutine is called for any collision of the requested type. Your code will need to use other tests to determine which collision took place. The <code>BUMP()</code> function reports which sprites were involved in a collision since the last call to <code>BUMP()</code>. You can also use the <code>RSPPOS()</code> function to test individual sprite locations to further determine where the collision took place. See the User&#8217;s Guide for information on these functions.</p><p>Try to guess what this program does, then type it in and run it:</p><pre><code><code>100 SCNCLR
110 X=0
120 SPRITE 0,1
130 MOVSPR 0,100,100
140 MOVSPR 0,90#1
150 CURSOR 70,6
160 PRINT "XXX"
170 COLLISION 2,220
180 GET A$
190 IF A$="" AND X=0 THEN 180
200 MOVSPR 0,0#0
210 END
220 PRINT "BLAMMO!"
230 X=1
240 RETURN</code></code></pre><p>The VIC&#8217;s built-in collision detection is not always the most reliable way to detect game events. Depending on the shapes of your sprites and other factors, you may prefer a different method to detect collisions, such as by testing sprite positions relative to a <a href="https://www.pcgamer.com/how-hitboxes-work/">hitbox</a>. To do this, instead of a <code>COLLISION</code> handler, you&#8217;d make repeated tests of <code>RSPPOS()</code> in your game&#8217;s main loop.</p><p>Another caveat: There is <a href="https://github.com/MEGA65/mega65-core/issues/659">a known issue</a> with the VIC-IV core where sprite collisions are not detected with bitmap graphics (the BASIC 65 <code>SCREEN</code> system). Collisions are limited to sprite-to-sprite and sprite-to-text for now. Of course, there&#8217;s quite a bit you can do graphically in text mode using PETSCII graphics, and custom character sets with the <code>CHARDEF</code> command.</p><h3>Other sprite features?</h3><p>If you grew up with a Commodore 64, these sprite features probably feel quite familiar. The C128 sprite commands, and the C65 and MEGA65 additions, are handy, but the sprites themselves mostly look like they did on the VIC-II.</p><p>For the VIC-III video chip in the Commodore 65, Commodore added no new features to sprites. Sprite colors use the VIC-III system palette, and you can adjust the colors of the system palette to any of 4096 possible colors. Otherwise, they&#8217;re basically the same as they&#8217;ve always been.</p><p>The MEGA65&#8217;s VIC-IV adds advanced sprite features, such as a full-color mode with actual-size pixels, four palette banks, a 64-pixel width monochromatic mode, variable pixel height, and high resolution sprites that use the actual pixel width and coordinate system of a 640-wide (80-column) display. BASIC 65 does not yet support any of these features with the BASIC sprite commands. You can adjust VIC-IV registers directly with <code>POKE</code> statements, but this may interfere with the behavior of the BASIC commands. I&#8217;m currently working to extend BASIC 65 with official support for VIC-IV sprite features, so stay tuned for updates!</p><h2>Managing sprite image data</h2><p>Playing with the built-in sprites is fun and all, but for our own programs, we obviously want to draw our own sprite images.</p><h3>Using the Sprite Editor</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oVLG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oVLG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 424w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 848w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 1272w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oVLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png" width="550" height="450.46403712296984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67687de1-d021-474b-ae41-2f0a170acda5_862x706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:862,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:434042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oVLG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 424w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 848w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 1272w, https://substackcdn.com/image/fetch/$s_!oVLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67687de1-d021-474b-ae41-2f0a170acda5_862x706.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">SpritEd, the MEGA65 sprite editor</figcaption></figure></div><p>Did you know that the Commodore 128 has <a href="https://www.c64-wiki.com/wiki/SPRDEF">a built-in sprite editor</a>? The C128&#8217;s <code>SPRDEF</code> command opens a sprite editor that directly manipulates the BASIC sprite image data in memory. For whatever reason, Commodore removed <code>SPRDEF</code> for BASIC 10. The good news is, the MEGA65 has its own sprite editor, &#8220;SpritEd,&#8221; built into the Freezer.</p><p>Hold <strong>Restore</strong> for one second then release to open the Freezer, then press <strong>S</strong> to start the sprite editor. This utility edits sprite image data at the BASIC sprite locations in memory.</p><p><strong>A word of warning.</strong> SpritEd is currently unfinished software. Up to platform release v0.95, SpritEd crashes the machine if you press the <strong>Up Arrow</strong> key. I discovered this while writing this article, and I committed a fix to prevent this that will be in release v0.96. I recommend upgrading to release v0.96 before doing any serious work in SpritEd.</p><p>SpritEd is missing a bunch of its intended features, such as the ability to load and save images to disk. Even without these features, it is about as useful as the C128&#8217;s <code>SPRDEF</code> tool, and can edit sprite image data in memory. We&#8217;ll see how to get sprite image data from memory into your program in the next section.</p><p>Press the <strong>Help</strong> key for a list of keyboard controls. Briefly, these are as follows:</p><ul><li><p>To select a drawing tool: <strong>P</strong> for single pixels, <strong>L</strong> for a line, <strong>X</strong> for a box, <strong>Shift-X</strong> for a filled box.</p></li><li><p>Press <strong>Space</strong> to draw with the selected tool. <strong>Del</strong> uses the tool with the background component, such as to erase a pixel.</p></li><li><p>To erase the entire sprite: <strong>Ctrl+N</strong>.</p></li><li><p>To select a &#8220;component&#8221; (color) to draw with: <strong>+</strong> and <strong>-</strong> rotate through the choices. In monochrome mode, this is just the background (transparent) and foreground. In VIC-II double-width multi-color mode, there are two additional components for the shared sprite colors.</p></li><li><p>To change the color of the currently selected component: <strong>0</strong> through <strong>9</strong>, <strong>A</strong> through <strong>F</strong> assigns one of the sixteen palette entries to the component.</p></li><li><p>To select other sprites: comma (<strong>,</strong>) and period (<strong>.</strong>) rotate through the eight sprites.</p></li><li><p>To change the sprite mode: <strong>*</strong> rotates through monochrome, VIC-II multicolor, and VIC-IV multicolor modes. Remember that BASIC does not yet support VIC-IV multicolor mode directly, so this last mode won&#8217;t be useful until we finish the new features.</p></li><li><p>To see what your sprite looks like when expanded horizontally or vertically: use <strong>H</strong> and <strong>V</strong> to toggle these modes.</p></li></ul><p>SpritEd supports drawing with a mouse connected to port 1. I discovered <a href="https://github.com/MEGA65/mega65-freezemenu/issues/75">a small bug</a> where the mouse can&#8217;t draw in the rightmost column, which should be easy to fix in a future version.</p><p>To exit SpritEd, press <strong>F11</strong> to make sure the current sprite is saved to memory, then press <strong>F3</strong> to exit back to the Freezer menu. Each sprite image is saved to memory automatically when you flip between the sprites, so <strong>F11</strong> is only necessary on the current sprite, if it was modified. (That feels like something else we can improve pretty easily. Just know that&#8217;s how it works for now.)</p><h3>Storing sprite image data on disk</h3><p>The gorgeous sprite graphics we created in SpritEd are now in memory, but they&#8217;ll disappear forever if we don&#8217;t get them out of memory and onto disk. BASIC 65 makes this easy: <code>SPRITE SAVE "filename"</code> saves all eight sprite images to a file on disk. <code>SPRITE LOAD "filename"</code> loads them back in.</p><p>This provides a <code>POKE</code>-free workflow for managing sprites for BASIC programs:</p><ol><li><p>Create sprite images in the SpritEd utility. Press <strong>F11</strong>, then <strong>F3</strong> to exit back to the Freezer menu, then <strong>F3</strong> again to resume BASIC.</p></li><li><p>Execute the <code>SPRITE SAVE "filename"</code> command to save all eight sprite images to a file.</p></li><li><p>Then in the program, use the <code>SPRITE LOAD "filename"</code> command to load these images.</p></li></ol><h3>Animating sprite images</h3><p>For a game like Space Invaders, a ship can be a single sprite image whose only animation is to move around the screen, such as with the <code>MOVSPR</code> command. For a game like Pac Man, the player sprite should open and close its mouth, which means updating the sprite&#8217;s image data. We can&#8217;t exactly load a new Pac Man from disk each time he opens and closes his mouth, so we need another way to update sprite data within the program.</p><p>The <code>SPRSAV</code> command copies sprite data between sprite slots and BASIC string variables. It takes two arguments: the source and the destination. One or both of these can be a number between 0 and 7 to refer to the sprite image. If the other is a named string variable, the variable is used as either the source or destination.</p><p>For example, to copy the image data from sprite 2 to the string variable <code>C$</code>:</p><pre><code><code>SPRSAV 2,C$</code></code></pre><p>To copy that image to sprite 5:</p><pre><code><code>SPRSAV C$,5</code></code></pre><p>Combined with <code>SPRITE LOAD</code>, you can use <code>SPRSAV</code> to load all of your sprite patterns into string variables, then store them back into sprite slots during game play as needed.</p><p>You can also use string variables and <code>SPRSAV</code> along with disk operations as an alternative to <code>SPRITE LOAD</code>. For example, you can store more than eight patterns in a single file. Each pattern is 64 bytes in length. See any good reference on disk commands for more information.</p><h2>Putting it together</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PXzX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PXzX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 424w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 848w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 1272w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PXzX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png" width="550" height="241" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:241,&quot;width&quot;:550,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15837,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PXzX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 424w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 848w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 1272w, https://substackcdn.com/image/fetch/$s_!PXzX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25538927-6407-4f7b-b69b-e0d284f91d20_550x241.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Sprite Attack sprite set.</figcaption></figure></div><p><em>Sprite Attack</em> is a simple game I wrote to demonstrate how the sprite features can be used together. Get it here:</p><ul><li><p>Sprite Attack: <a href="https://dansanderson.com/mega65/sprite-attack/spratk.d81">spratk.d81</a></p></li></ul><p>Try it out with a joystick in port 2. It&#8217;s written entirely in BASIC, so type <code>LIST</code> to see the program listing. A few notes:</p><ul><li><p>I used SpritEd to draw eight multicolor sprites: the player&#8217;s spaceship, the player missiles, the space alien death ray, four frames of an explosion animation, and the space alien itself. I exited SpritEd and the Freezer, then used the command <code>SPRITE SAVE "SPRATK.DAT"</code> to save the sprite data to disk. The program starts by loading this file with <code>SPRITE LOAD</code>.</p></li><li><p>I keep the player&#8217;s X position in a variable so I can fine-tune the speed that the player moves. Pixel locations are always integers, but sometimes you want a sprite to move in non-integer increments, such as 1.8 pixels per frame. The variable holds the non-integer location, and this value is rounded to the nearest pixel when I pass it to the <code>MOVSPR</code> command.</p></li><li><p>The game loop tests for joystick movement, adjusts the variable, and updates the player location with <code>MOVSPR</code>. Because the player only moves left and right, I use <code>+0</code> as the Y coordinate argument to <code>MOVSPR</code> so that I don&#8217;t have to remember the ship&#8217;s vertical position after initializing it.</p></li><li><p>I use the <code>VSYNC</code> command to synchronize gameplay with the frame rate. This makes it easier to tune the movement speeds, and it prevents the sprites from &#8220;tearing&#8221; by making sure the location doesn&#8217;t change while the sprite is being drawn.</p></li><li><p>Player missiles use the movement animation system. The <code>RSPPOS()</code> with a second argument of <code>2</code> returns the current speed of a sprite, so I can test whether the missiles are moving. If the button is pressed and the missiles aren&#8217;t moving, I set their position to just above the player ship and set them moving in an upward motion, then I activate the missiles sprite. I also test once per loop if the missiles have gone off the top of the screen, and if so, I stop their motion by setting their speed to zero.</p></li><li><p>The alien also uses movement animation. If the space alien is ever stationary (speed is 0), the program chooses a new random location, and calls <code>MOVSPR</code> with the current location as the origin and the random location as the destination. This gives the alien an evasive behavior that still gives the player a chance to target it with missiles.</p></li><li><p>A collision handler detects when the missiles are in contact with the alien. When the alien is hit, the routine moves the explosion sprite to the alien&#8217;s location, disables the missiles sprite, then moves the alien sprite to another random starting point above the screen. It plays out the explosion animation using <code>SPRSAV</code> to copy in the explosion patterns we saved into string variables earlier, pausing between each frame. This causes all gameplay to pause while the explosion finishes. A more sophisticated game would handle explosion animations in the main game loop, so other events like player movement can take place during the animation.</p></li></ul><p>This game is a little unfair&#8212;to the alien. Try extending this program to have the alien shoot back at the player, using its death ray in sprite 2.</p><div><hr></div><p>VIC hardware sprites and the BASIC 65 sprite commands are a fun and easy way to code video game graphics. Combine them with PETSCII graphics to draw level maps, backgrounds, and informational displays, and you have all of the elements of a great looking game. Be sure to share your games with other MEGA65 owners by uploading them to <a href="https://files.mega65.org/">Filehost</a>!</p><p>There are some advanced sprite techniques I wanted to mention here, but they&#8217;ll have to wait for another issue. You can help make more issues possible by <a href="https://ko-fi.com/dddaaannn">supporting the Digest on Ko-Fi</a>.</p><p>As always, happy coding!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[The New Hotness]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for January 2024]]></description><link>https://m65digest.substack.com/p/the-new-hotness</link><guid isPermaLink="false">https://m65digest.substack.com/p/the-new-hotness</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Tue, 16 Jan 2024 23:49:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-CFn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-CFn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-CFn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 424w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 848w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 1272w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-CFn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png" width="1456" height="523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:523,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:682998,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-CFn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 424w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 848w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 1272w, https://substackcdn.com/image/fetch/$s_!-CFn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab4f8b68-ab6b-4f14-a6f2-b3602119afcc_2534x910.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Trenz Electronic expects the MEGA65 to be in stock by June 12th, 2024. Preorders ship June 1st.</figcaption></figure></div><p>It&#8217;s time! We have a shipping schedule for the next batch of MEGA65 computers, and a candidate for the next platform release. Everyone is invited to help with testing, so let&#8217;s get to it!</p><h2>Shipping update!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n1fG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n1fG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n1fG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:340002,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n1fG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!n1fG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F267bfe3e-726c-4182-b10c-92f54f0d45d7_1920x1080.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 retail packaging box. Your MEGA65 will ship with an outer box, with this inside it.</figcaption></figure></div><p>Trenz Electronic has announced that the next batch of MEGA65 computers will ship on <strong>June 1st, 2024.</strong></p><p>We currently expect that <em>all</em> preorders up to this point will be included in this batch. If you need to make adjustments to your preorder before then, <a href="mailto:sales@trenz-electronic.de">contact sales@trenz-electronic.de</a>.</p><p>Once we clear the preorders, remaining stock will become <a href="https://shop.trenz-electronic.de/en/TE0765-06-T001CK-MEGA65-highly-advanced-C64-and-C65-compatible-8-bit-computer?c=564">available for purchase in the Trenz Electronic store</a>, while supplies last.  </p><p>Please bear with us while we work through any last minute issues that might change these estimates. And thank you so much for your patience! I can&#8217;t wait for you to receive your MEGA65!</p><h2>v0.96 release candidate now available to test!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BhKc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BhKc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BhKc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82813,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BhKc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BhKc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd58dacdf-748d-485b-8966-5cb63e35f229_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Installing the new release candidate core.</figcaption></figure></div><p>To make the new delivery schedule, we need to hand over the gold masters of the next release of the MEGA65 firmware and system software, as well as the updated <em>User&#8217;s Guide,</em> to Trenz Electronic by January 31st. Release v0.96 of the firmware, ROM, and system software will be installed at the factory on all MEGA65s about to ship. Of course, it will also be available as a free upgrade for all existing MEGA65s. This next release has a ton of new features and bug fixes&#8212;and we need testers!</p><p>If you have a MEGA65, you can install the release candidate on your machine to help test. If you don&#8217;t have a MEGA65 yet, you can still help by testing the new version of the ROM with an updated version of the Xemu emulator.</p><h3>Testing the release candidate on a MEGA65</h3><p>To begin, be sure to back up your SD card, or use an alternate SD card, before proceeding with testing. I usually just move the SD card to my PC, then copy all of the files from the SD card into a folder on my desktop. This doesn&#8217;t back up the configuration or Freeze states, but personally I don't keep important freeze states around long term. Alternatively, you could also use a disk imaging utility to back up both the hidden configuration partition and the files partition.</p><p>If you&#8217;re using a fresh SD card for testing, remember to prepare the card first using the MEGA65&#8217;s SD Card Utility. Insert the card in your MEGA65, hold the <strong>Alt</strong> key while switching on the computer, then select the utility from the menu and follow the prompts. This erases all data on the card.</p><p>Here&#8217;s how to get the files for the release candidate:</p><ul><li><p><a href="https://builder.mega65.org/job/mega65-core/job/release-0.96/">Release v0.96 RC core and system software</a>. Select the latest build that begins with <code>mega65r3-r-0.96</code>, such as <code>mega65r3-r-0.96-build-5.7z</code>. The &#8220;r3&#8221; refers to all MEGA65s delivered up to this point. The MEGA65s shipping in June will be known as &#8220;r6.&#8221; Yes, we&#8217;re skipping R5 after all: we found one small non-electrical change needed for the board during R5 testing.</p></li><li><p><a href="https://files.mega65.org/?id=mega65-rom-beta">Release v0.96 RC ROM</a>. Sign in with your Filehost account with your owner code redeemed to access this. Download the most recent version: <code>920391.bin</code>.</p></li><li><p>MEGA65 command line tools: <a href="https://files.mega65.org/?id=658322fd-e586-4b4f-a991-89470b269b4a">Windows</a>, <a href="https://files.mega65.org/?id=7d96641c-b306-49cf-80ff-ea1e5d00c9d1">Mac</a>, or <a href="https://files.mega65.org?id=2b7bd912-1181-447c-a489-223f16b764c1">Linux</a>. These will be bundled with, and be the basis for, an upcoming version of the M65Connect app, and are generally useful on their own for the new Ethernet file transfer feature.</p></li><li><p><a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">The MEGA65 User&#8217;s Guide, 2nd edition</a> (PDF).</p></li></ul><p>Unpack the <code>mega65r3-r-0.96-build-5.7z</code> archive. Transfer the <code>.cor</code> file to the root of your SD card. Open the <code>sdcard-files</code> folder, and copy its contents (<code>.M65</code> files) to the root of the SD card as well.</p><p>Rename <code>920391.bin</code> to <code>mega65.rom</code>, and transfer it to the root of your SD card.</p><p>Install the SD card in your MEGA65. With the power switched off, hold <strong>No Scroll</strong> then switch on the computer. This opens the core selection menu. Hold the <strong>Ctrl</strong> key and press a number to select an appropriate core slot for the new core, then follow the prompts to select the <code>.cor</code> file and flash the core. See the <em>User&#8217;s Guide</em> for more information about upgrading cores.</p><h3>Using both the release candidate and the previous stable release with one MEGA65</h3><p>I recommend keeping both the release candidate and the previous stable release installed during testing. If you find any issues with the release candidate, it will be important to determine if those issues also exist with the previous stable release, or if they are new issues introduced by a recent change.</p><p>Choose one or the other to be the default for your computer. Flash the core you wish to be the default to core slot 1, and name the default ROM as <code>mega65.rom</code> on the SD card. For the non-default release, flash the core to slot 2, and name the ROM file as <code>mega652.rom</code>. To start the non-default release (whichever one you chose), hold <strong>No Scroll</strong> while switching on the computer to open the core selection menu, then press <em>and hold</em> the number <strong>2</strong> until you see the <code>READY.</code> prompt (and probably a bunch of 2&#8217;s). This selects core slot 2 and also selects <code>mega652.rom</code>.</p><p>There&#8217;s one tricky bit with a dual installation: you can only have one set of system software on the SD card. I have not had any issues running the new system software with the previous stable core and ROM, so my recommendation is to go ahead and use the release candidate system software as the system files on your SD card.</p><p>It&#8217;s important to note that the release candidate ROM only works with the release candidate core. If you accidentally select the release candidate ROM (version 920391) and the previous stable release core, typing won&#8217;t work correctly and you&#8217;ll see the cursor disappear. If this happens, switch off the computer, hold <strong>No Scroll</strong> while switching it back on, then select a matching core and ROM. You can use the previous ROM (version 920377) with the new core, just not the other way around.</p><p>You can confirm that you&#8217;re running the release that you intend with the new MEGAINFO utility. Open the Freezer&#8212;hold the <strong>Restore</strong> key for a second, then release&#8212;then press the <strong>Help</strong> key. This is a feature of the new system software, and it works with either release as long as the new release&#8217;s system software is on the SD card.</p><h3>Testing the candidate ROM in Xemu</h3><p>If you do not have a MEGA65, you can still help test the ROM in the Xemu emulator. Get these files:</p><ul><li><p><a href="https://files.mega65.org/?id=mega65-rom-beta-diff">Release v0.96 RC ROM patch</a>. Follow the instructions in <a href="https://files.mega65.org/html/main.php?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">the ROM FAQ</a> to put together the MEGA65 ROM 920391 using the free C64 Forever download from Cloanto.</p></li><li><p><a href="https://github.lgb.hu/xemu/">Xemu &#8220;next&#8221; release</a>. Look at the bottom of the page for &#8220;The &#8216;future next stable&#8217; still unstable (&#8220;next&#8221; branch) builds&#8221; for your platform. Download and install.</p></li><li><p><a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">The MEGA65 User&#8217;s Guide, 2nd edition</a> PDF.</p></li></ul><p>Run xmega65, and when prompted for a ROM, use the new ROM.</p><p>Just as the release candidate ROM (version 920391) depends on the release candidate core, it also depends on the &#8220;next&#8221; version of Xemu. If you try to use the new ROM with the previous stable version of Xemu, you will notice problems with typing.</p><h3>What to test</h3><p>This release is the culmination of 15 months of improvements and fixes across the board. Changes to the ROM are listed in <a href="https://github.com/MEGA65/mega65-rom-public/blob/main/CHANGELOG.md">the ROM change log</a>. Changes to the core are numerous and we&#8217;re still assembling <a href="https://github.com/MEGA65/mega65-core/blob/release-0.96/release-build/Changelog.md">the core change log</a>, but here are a few notable features:</p><ul><li><p><strong>Ethernet file transfer.</strong> See the updated User&#8217;s Guide or <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/29327361/Ethernet+tools+mega65+ftp+and+etherload">this wiki page</a> for instructions on how to transfer files between your PC and the MEGA65 using just an Ethernet cable. Notice that this requires flipping a small switch on the mainboard, so you will need to open your MEGA65&#8217;s case.</p></li><li><p><strong>Hardware accelerated typing.</strong> You should notice that typing at the <code>READY.</code> prompt and in most apps is more accurate, especially for fast typists. This should not affect MEGA65 software in any other way.</p></li><li><p><strong>Improvements to mouse handling,</strong> with smoother motion and support for mouse and paddles in port 2.</p></li><li><p><em>Coming soon:</em> <strong>New core flashing capabilities&#8212;and a way to flash slot 0.</strong> The special core slot 0 controls aspects of the MEGA65 boot process, and it is intentionally more difficult to flash so you always have the factory-installed MEGA65 core available. With this release, there will be a new way to update the core in slot 0 to claim the benefits of improvements made to the boot process. <em>As of this writing, this feature is not yet in the release candidate.</em> Stay tuned to the Discord for an announcement of when and how to test this.</p></li><li><p><em>Coming soon:</em> <strong>Configurable cartridge booting.</strong> Flashing this core to slot 0 enables the ability to configure the boot process to use a specific core when a type of Commodore cartridge is connected. This is primarily so you can assign C64 cartridges to the C64 core, instead of the less capable GO64 mode of the MEGA65 core and ROM. This change also introduces a new cartridge signature and boot protocol for MEGA65 cartridges, though you&#8217;ll need an EasyFlash 1CR cartridge and a test image to test it.</p></li></ul><p>In addition to testing new features, we want to know about anything that worked in the last stable release and appears to have stopped working in the new release candidate (called &#8220;regressions&#8221; in software engineering parlance). This includes, but is not limited to:</p><ul><li><p>Your favorite MEGA65 games, apps, and utilities</p></li><li><p>BASIC commands and features</p></li><li><p>The core menu, core flashing, configuration, &#8220;on-boarding,&#8221; and the SD card utility</p></li><li><p>The Freezer, and features accessible from the Freezer menu</p></li><li><p>Procedures and information described in the User&#8217;s Guide, 2nd edition</p></li><li><p>Anything that worked in GO64 mode with the previous stable release</p></li></ul><h3>How to report issues</h3><p>There are two ways to report any bugs you find. We have <a href="https://discord.com/channels/719326990221574164/1196590643007463459">an active thread on the Discord</a> for collecting release candidate bugs. Look for the <code>platform-testing</code> forum. Alternatively, you can file issues directly to the <a href="https://github.com/MEGA65/mega65-core/issues">Github repo for the core</a>, the <a href="https://github.com/MEGA65/mega65-rom-public/issues">repo for the ROM</a>, or <a href="https://github.com/MEGA65/mega65-user-guide/issues">the repo for the User&#8217;s Guide</a>. If you&#8217;re not sure where the bug goes, file it in the core repo, and we&#8217;ll triage.</p><p>If you find something that doesn&#8217;t look right, try to reproduce it in the previous release. File a bug either way, and make sure to note whether this only happens in the release candidate, or if it happens in both versions.</p><p>Many thanks to everyone who is available to test! We&#8217;re on a tight schedule, so anything you can do before the end of January would be a huge help.</p><h2>About that User&#8217;s Guide&#8230;</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bf_J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bf_J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bf_J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bf_J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Bf_J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193d3097-9d24-4cde-88a1-c029d1c0c255_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A test print of the MEGA65 User's Guide, 2nd edition.</figcaption></figure></div><p>Every MEGA65 includes a printed version of the <em>MEGA65 User&#8217;s Guide,</em> a book that includes set-up instructions, common procedures, an introduction to BASIC programming, and a BASIC command reference. We printed a large quantity of the 1st edition, and everyone who has received a MEGA65 so far has this edition. We can&#8217;t afford not to use the remaining stock, so we will be including copies of the 1st edition with some MEGA65s that will ship in June.</p><p>The <em>User&#8217;s Guide</em> has been revised with new material on new features like Ethernet file transfer, and a renewed focus on non-developer activities like using virtual disk images and upgrading the firmware. The entire Guide has been polished with corrections, and the BASIC reference has been updated to include the most recently added features. We&#8217;re calling this the &#8220;2nd edition,&#8221; and we will be printing new  <em>Guides</em> to include with MEGA65s after the stock of the 1st edition is depleted.</p><p>Do you want a printed copy of the 2nd edition? I know I do! I&#8217;m working on setting up the <em>User&#8217;s Guide, 2nd edition</em> with a print-on-demand service, so anyone who wants an updated printed <em>Guide</em> can get one. Whether you have the 1st edition and want to upgrade, or you&#8217;re just enjoying Xemu and want a book to go with it, you&#8217;ll be able to order a copy.</p><p>I&#8217;ll share the link to the purchase page in the next issue of this Digest. We&#8217;re using the release testing period to catch any last minute bugs in the Guide, and to make sure it matches the new slot 0 flashing procedure when it is finished. In the meantime, you can always download <a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">the latest draft PDF of The MEGA65 User&#8217;s Guide</a>. (And <a href="https://github.com/MEGA65/mega65-user-guide/issues">report bugs</a>!)</p><h2>The 8-Bit Guy, and me!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WfZb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WfZb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WfZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202876,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WfZb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WfZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d58d2f4-5da1-46f1-8935-8c79a52134d0_1920x1080.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The 8-Bit Guy David Murray (right) with Dan Sanderson (left).</figcaption></figure></div><p>YouTuber David Murray, aka &#8220;The 8-Bit Guy,&#8221; made <a href="https://youtu.be/OoHxDe3Gc9E?si=ls1od_Cf32gg0vtD">a video about the Commodore 65</a> last December, borrowing Bo Zimmerman&#8217;s vintage C65 prototype to try it out. At the end of the video, David mentioned the MEGA65, mostly to say that he knew about the project but didn&#8217;t know anything about it. There were multiple attempts to get a review unit to David that fizzled out for one reason or another. When I saw that, I thought to myself, what can I do to help? I suppose I could&#8230; just go down to Texas and bring my MEGA65 with me. So I did!</p><p>Behold, <a href="https://youtu.be/8qHdTKjPXww?si=ab-gXo1YpPdG9L3C">the 8-Bit Guy&#8217;s video about the MEGA65</a>, with special guest, me!</p><p>David is a co-founder of <a href="https://www.commanderx16.com/">the Commander X16 project</a>, a retro fantasy hardware project with similar interests to the MEGA65. Based on the 65C02 CPU, the X16 has a Commodore-like architecture and uses a Commodore-derived KERNAL and BASIC, while updating other aspects of the design to use readily available components and interfaces. Check out <a href="https://x16community.github.io/faq/faq.html">the X16 FAQ</a> for details, and <a href="https://www.commanderx16.com/webemu/x16emu.html">give the in-browser emulator a try</a>.</p><p>Many thanks to David for hosting me and for appreciating the MEGA65. Thanks also to my Ko-fi supporters and to the MEGA65 team who helped make this possible.</p><div><hr></div><p>Yes, your support of this Digest on Ko-fi is already making new things happen! If you would like to support the Digest and my involvement with the MEGA65 team, please visit: <a href="https://ko-fi.com/dddaaannn">ko-fi.com/dddaaannn</a></p><p>Back again next month with more news, and more fun things to do with your favorite computer. Cheers!</p><p>&#8212; Dan</p>]]></content:encoded></item><item><title><![CDATA[robotfindskitten, part 3]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for December 2023]]></description><link>https://m65digest.substack.com/p/robotfindskitten-part-3</link><guid isPermaLink="false">https://m65digest.substack.com/p/robotfindskitten-part-3</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Thu, 14 Dec 2023 22:05:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hTTD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hTTD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hTTD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 424w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 848w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hTTD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:798866,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hTTD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 424w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 848w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!hTTD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ceda5d5-2e36-446e-a167-6ec87891fee1_1500x500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Our robotfindskitten adventure continues! In <a href="https://dansanderson.com/mega65/robot-finds-kitten/">part 1</a>, we introduced the robotfindskitten experience, and described tools and techniques for building an rfk game in BASIC 65. In <a href="https://dansanderson.com/mega65/robot-finds-kitten-2/">part 2</a>, we started building a similar toolkit in assembly language, starting with KERNAL routines, memory access techniques, and screen memory registers. This month, we complete the toolkit, and I present my own attempt at an assembly language version of the game.</p><p>But first, a whole bunch of new stuff!</p><h2>R5 main board in testing!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kOGz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kOGz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kOGz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg" width="1280" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:269717,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kOGz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kOGz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca63fd0-2302-437f-a39e-d6de113126f5_1280x960.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A test unit of the R5 main board.</figcaption></figure></div><p>The new R5 main board test units have arrived and <a href="https://c65gs.blogspot.com/2023/12/r5-board-bring-up.html">Paul has started the &#8220;bring-up&#8221; process</a>, adapting the FPGA core to the design changes. With some minor corrections to the assembly, this should resemble the main boards that will ship with new MEGA65s going forward, including all pending pre-orders. Many thanks to Paul, Trenz Electronic, and the hardware testing team for the work they are doing.</p><h2>Unicone, by deathy</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GN1y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GN1y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GN1y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png" width="705" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GN1y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!GN1y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff089622e-7723-4738-bd82-8f5b0d5e7da4_705x576.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Unicode title screen.</figcaption></figure></div><p>deathy has another new game release! In <a href="https://files.mega65.org/?id=0f619bcf-63f0-43d5-b938-0ae6b87f4917">Unicone</a>, you are chasing a unicorn that poops ice cream. Move your ice cream cone left and right to catch falling ice cream scoops dropped by the unicorn. A fun game in the tradition of <a href="https://en.wikipedia.org/wiki/Kaboom!_(video_game)">Kaboom!</a> (or its lesser known ancestor, <a href="https://en.wikipedia.org/wiki/Avalanche_(video_game)">Avalanche</a>), Unicone features high resolution graphics, sampled sounds, a wide variety of control schemes, and a unique ice cream balancing mechanic for extra challenge in later levels. <a href="https://files.mega65.org/?id=0f619bcf-63f0-43d5-b938-0ae6b87f4917">Download Unicode from Filehost</a>.</p><p>Want to see how it works? deathy has generously released <a href="https://github.com/BAS-demogroup/unicone">the C source code to Unicone</a> using an open source license, and the assets using a Creative Commons license. The code builds with the <a href="https://github.com/hth313/Calypsi-tool-chains/releases/tag/5.1">Calypsi C cross-compiler</a>, a modern retro development suite by hth313 that recently added support for the MEGA65&#8217;s 45GS02 CPU. Check it out!</p><h2>The Ghosts of Blackwood Manor, by Stefan Vogt</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uHG2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uHG2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uHG2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg" width="1120" height="1120" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1120,&quot;width&quot;:1120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260533,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uHG2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uHG2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d25ffec-9a8b-41bf-8181-575955f8933d_1120x1120.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Ghosts of Blackwood Manor, by Stefan Vogt.</figcaption></figure></div><p>Stefan Vogt, the author of the adventure games <em>Hibernated</em> and <em>The Curse of Rabenstein</em>, has a new adventure out for multiple platforms including the MEGA65. <a href="https://8bitgames.itch.io/ghosts">The Ghosts of Blackwood Manor</a> is an interactive horror game with three possible outcomes, and each outcome fills out the story.</p><p>And of course, <em>Ghosts</em> is getting another gorgeous boxed release from poly.play! <a href="https://www.polyplay.xyz/The-Ghosts-of-Blackwood-Manor-MEGA65_1">Pre-order the boxed release</a>, and <a href="https://8bitgames.itch.io/ghosts">get it digitally right now</a> for a donation of your choice.</p><h2>Gurce&#8217;s BASIC 65 Dev Vlogs</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BEfp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BEfp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 424w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 848w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 1272w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BEfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png" width="674" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:674,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12827,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BEfp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 424w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 848w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 1272w, https://substackcdn.com/image/fetch/$s_!BEfp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f76a16-604c-4b98-8a4f-3a32fbfd0939_674x452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Way of the Imploding Foot, a game in progress by Gurce and the MEGA65 community.</figcaption></figure></div><p>Gurce has been doing a series of <a href="https://www.youtube.com/@IshiTheLastYihi/streams">live stream development vlogs</a> coding a game from scratch in BASIC 65, using the <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/34209812/Eleven+Walkthrough">Eleven programming environment</a>. The game, currently titled &#8220;Way of the Imploding Foot&#8221; (or just &#8220;MegaFoot&#8221; for short), is a side-view fighting game, featuring low resolution block character graphics, animated fighting characters, and parallax scrolling.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nEO1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nEO1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 424w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 848w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 1272w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nEO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png" width="677" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:677,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28265,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nEO1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 424w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 848w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 1272w, https://substackcdn.com/image/fetch/$s_!nEO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04c26a64-1908-454d-9715-3404ccd9e36d_677x444.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MegaFoot source code, in the Eleven IDE.</figcaption></figure></div><p>You can <a href="https://www.youtube.com/watch?v=pqqf2Ge4yWw">start with episode 1</a>, and subscribe to find out about new live streams. Also check out <a href="https://github.com/MEGA65/MegaFoot">the Github repository for the game</a>, or just try <a href="https://github.com/MEGA65/MegaFoot/raw/main/megafoot.d81">the latest D81 disk image</a>. When browsing the repo, be sure to locate the <code>.ELPC</code> files (such as <a href="https://github.com/MEGA65/MegaFoot/blob/main/FOOT.ELPC">FOOT.ELPC</a>), which contain the code in Eleven syntax viewable as a text file on a PC.</p><p>Gurce is welcoming contributions on this project! If you&#8217;d like to try implementing a feature in BASIC using Eleven, let Gurce know on the Discord.</p><h2>Discord upgrade!</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tgYp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tgYp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 424w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 848w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 1272w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tgYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png" width="237" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:237,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28501,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tgYp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 424w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 848w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 1272w, https://substackcdn.com/image/fetch/$s_!tgYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1110516c-463b-4ad3-8ac9-ae3f8f81ad14_237x308.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">One section of the newly remodeled MEGA65 Discord.</figcaption></figure></div><p><a href="https://mega65.org/chat">The MEGA65 Discord</a> is the MEGA65 community&#8217;s real-time meeting spot, a great place to ask questions, show off your projects, and meet other MEGA65 enthusiasts. Thanks to MEGA65 Discord moderator KiDra, the Discord now has a fresh new structure and some really cool new features! Here are just a few highlights:</p><ul><li><p><strong>New section layout.</strong> Channels and resources are now organized in sections based on how you engage with the project, such as regular use, programming, and platform development. Click or tap a section title to collapse sections you use less often.</p></li><li><p><strong>Discord forums.</strong> Sections now include Discord forums in addition to text chat channels. Forums are especially useful for asking technical questions: each question stays visible in a list, and answers and discussions stay organized by topic. Once you have the answer you need, you can close the discussion, and it stays in Discord search history for others to find.</p></li><li><p><strong>Voice/video rooms.</strong> Sometimes it&#8217;s just easier to talk, you know? Hop into a voice room to start an audio or video chat. Show off your work, collaborate on a project, or just hang out.</p></li><li><p><strong>The Pin-Board.</strong> All of the most important community resources in one well-organized section! Announcements, official project status, and links to resources.</p></li><li><p><strong>Events.</strong> Want to organize a club meeting, schedule an online conference, or throw a party? Let everyone know by posting an event! Everyone will be able to express interest in your event and request an automated reminder when the event draws near.</p></li><li><p><strong>Self-service posting roles.</strong> To help keep the announcements and events channels clean and on-topic, we ask that anyone who wishes to post to them read a brief description of how they are used, in the <code>#role-setup</code> channel. Acknowledging the description grants permission to post, automatically.</p></li><li><p><strong>Starred posts.</strong> Did someone post something you think more people should see? Give it a &#11088;&#65039; reaction emoji! If enough people star the post, it will be advertised in the <code>#starred-posts</code> channel. This works from any public channel.</p></li><li><p><strong>Project channels.</strong> These discussion channels for specific MEGA65 projects by the community can be used for collaboration, on-going user support, or just dev logging and <a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging">rubber ducking</a> by the project developers. Want a channel for your project? Propose one in the <code>#signup</code> channel.</p></li></ul><p>We will continue to evolve and improve the Discord based on the needs of the community. If you have any feedback or questions on the new layout and features, feel free to discuss it in the <code>#mega65</code> channel, or contact anyone on the admin team. Thanks again to KiDra for setting all of this up!</p><h2>Bad Apple&#8230; in BASIC?!?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tWs1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tWs1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tWs1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png" width="705" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3651,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tWs1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!tWs1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bb0aac2-84a7-4d5f-9220-a09fd908fb84_705x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Bad Basic65 Apple Demo, by Nobato.</figcaption></figure></div><p>As a follow-up to <a href="https://files.mega65.org/?id=2b32fbaf-f78b-47db-b919-564eba9ddab1">MEGApple</a>, MirageBD&#8217;s high fidelity Bad Apple demo for the MEGA65, Nobato has a new version, this time in BASIC65! <a href="https://files.mega65.org/?id=52e166b5-07f8-4a5b-92e5-33ffd4dd2d40">Bad Basic65 Apple Demo</a> comes on multiple D81 disk images and can swap disks automatically from the SD card. The music is an original SID arrangement, using BASIC65 <code>PLAY</code> statements.</p><p>Boot <code>B65APPL1.D81</code> to start. It takes a few minutes to load and decompress data into upper RAM&#8212;this is all in BASIC, remember&#8212;but once it begins, it runs smoothly, start to finish.</p><p>Don&#8217;t miss the Little Bad Basic65 Apple bonus disk, also included in the archive!</p><h2>45GS02 assembly language mousepads and posters</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m1ur!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m1ur!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m1ur!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:459669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m1ur!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m1ur!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35736057-72a9-46a3-a55b-ff90e98b36b9_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It's a mousepad! It's a quick reference! It's a mousepad *and* a quick reference!</figcaption></figure></div><p><a href="https://dansanderson.com/mega65/mousepads-and-kofi/">A couple of weeks ago</a>, I mentioned that I designed a 45GS02 assembly language quick reference, and you can <a href="https://www.zazzle.com/store/m65digest">purchase this design as a mousepad or a poster</a>. Many thanks to everyone who has ordered a mousepad or poster so far! Proceeds go to supporting this Digest and my other work on the MEGA65 project.</p><p>I especially like how the mousepad turned out. It&#8217;s fun to look at, I can keep it on my desk as a mousepad, and it&#8217;s actually useful as a quick reference for MEGA65 assembly language programming. I just used it a couple of days ago to remind myself how the stack-related instructions work.</p><p>I&#8217;m using Zazzle to make and distribute these. They ship worldwide, and the shipping rates seem reasonable, only about 10 euros to ship the mousepad to Germany. I&#8217;ve had one report that there were technical issues trying to pay with PayPal. They also support credit cards. If you have issues, let me know, and I can try to figure it out.</p><p>The mousepad is a perfect companion for our robotfindskitten project. Speaking of which&#8230;</p><h2>Finishing robotfindskitten in assembly language</h2><p>To complete our robotfindskitten program in assembly language, we need to accept keyboard input, generate random numbers, de-duplicate choices, pause to animate the (very simple) ending sequence, and select from the list of item descriptions.</p><h3>Accepting keyboard input from the KERNAL</h3><p>A common way for a program to accept keyboard input is another KERNAL routine, <code>getin</code> at $FFE4. This loads a PETSCII code into the Accumulator if a key has been pressed, or 0 if not. This isn&#8217;t necessarily the best method for using the keyboard as a game controller, because it includes typing features like key repeat. But it&#8217;s easy to use, and for rfk, the built-in key repeat is reasonable behavior.</p><pre><code><code>getin = $ffe4
; ...

-   jsr getin
    beq -
    cmp #17
    beq cursor_down
    ; ...

cursor_down:
    ; ...</code></code></pre><p>In older versions of the ROM, the <code>getin</code> routine uses CIA registers to scan the keyboard. With the latest beta test version of the core and ROM that I mentioned last month, <code>getin</code> uses a new typing event queue implemented in hardware for greater accuracy. Your program will get the same result from either version: the pre-conditions and post-conditions of <code>getin</code> have not changed.</p><p>A program that doesn&#8217;t use the KERNAL can access the new hardware registers directly, or can implement its own keyboard scanner based on the CIA chips. See a Commodore 64 reference for information on how to do that.</p><p><code>getin</code> also supports features like the function key macros and input redirection, which don&#8217;t apply to a game but could come in handy for other types of programs. <code>getin</code> and <code>chrout</code> are both part of the KERNAL&#8217;s input-output system, of which the screen and keyboard are only two possible devices.</p><h3>Chaos</h3><p>We need a way to select randomized locations and appearances for the items. In BASIC, we used the <code>RND()</code> function for this purpose. What can we do from assembly language?</p><p>The MEGA65 has a dedicated hardware register that produces random values. To use it, a program must loop to wait for a &#8220;not ready&#8221; flag to clear, then read the generated random number from a register. The act of reading the number restarts the process, setting the &#8220;not ready&#8221; flag while it works on a new number. Internally, the number generator is using a fluctuating oscillator to generate values, and it needs a brief amount of time between reads to produce good results.</p><pre><code><code>random = $d7ef
random_ready = $d7fe  ; bit 7
; ...

-   bit random_ready
    bmi -
    lda random
    ; A is a random number between 0 and 255</code></code></pre><p><strong>Important note:</strong> If you test your software in the Xemu emulator, be sure to use <a href="https://github.lgb.hu/xemu/">the &#8220;next&#8221; branch release</a>. As of this writing, the random number register implementation is not in the latest stable release, and the ready-wait loop will never exit.</p><p>The distribution of values returned by this register is even across all possible byte values 0 to 255. Because this distribution is over a range sized by a power of two, you can reduce the range to a smaller power of two by ignoring some of the bits. For example, to get a random value from an even distribution of 0 to 63, use the <code>and</code> instruction to set the upper two bits to 0:</p><pre><code><code>    and #%00111111
    ; A is a random number between 0 and 63</code></code></pre><p>If the range size is not a power of two, it is feasible to simply &#8220;re-roll&#8221; for a number within the desired range. This causes all picks outside the range to be distributed evenly across the desired range, so it does not skew the results. Of course, this can take an arbitrary number of tries to roll a value in range, so you can speed this up by combining both techniques: get a number 0 to 255, zero out the unused bits, then test whether the result is in range and re-roll if not.</p><pre><code><code>-   bit random_ready
    bmi -
    lda random      ; 0 to 255
    and #%01111111  ; 0 to 127
    cmp #80
    bcs -
    ; A is now a random number between 0 and 79</code></code></pre><p>To get a random number larger than 255, fetch two random numbers and treat them as a single 16-bit number. You can use similar techniques to narrow the range.</p><p>Another option is to implement a pseudorandom number generator in your own code. Such algorithms <a href="https://en.wikipedia.org/wiki/Pseudorandom_number_generator">range in power and complexity</a> and can be difficult to get right, but applications like simple games can often get by with something as simple as a <a href="https://en.wikipedia.org/wiki/Linear-feedback_shift_register">linear-feedback shift register</a> (LFSR). Pseudorandom number algorithms generate a sequence of numbers based a starting number, known as the <em>seed.</em> It can be an advantage during testing to use a known seed to get a predictable result. For the final program, you can use another source of randomness, such as the hardware random number register, to determine the seed.</p><p>If you&#8217;d like to try this, read <a href="https://en.wikipedia.org/wiki/Linear-feedback_shift_register">the Wikipedia page on LFSRs</a> carefully. See also <a href="https://www.youtube.com/watch?v=QGeLzCmUDDk">this video from Retro Game Mechanics Explained</a> on how the game Super Mario Bros. 3 nerfs its card shuffling algorithm by misusing an LFSR, apparently accidentally.</p><h3>Avoiding duplicates</h3><p>When we discussed random selection in BASIC last month, we put in some extra effort to store all previous choices in an array, and re-rolled the dice when we accidentally chose an already-selected character, location, or description. This ensured that no two items would be placed on the same location, which would not only appear as fewer items on the screen but might cause the kitten to be hidden by another item. Depending on how it was implemented, the robot might touch the location and only see the Non-Kitten Item even if the kitten was also at the same location. Ensuring diverse characters and descriptions also maintains variety in the gameplay, to avoid the disappointment of seeing the same description more than once in a game.</p><p>The assembly language version of this isn&#8217;t different, it&#8217;s just a bit more cumbersome than in BASIC. I allocated some array-like memory within the program&#8217;s memory space for this purpose, like so:</p><pre><code><code>num_items = 20  ; max 127
item_description: !fill num_items*2
item_screen_code: !fill num_items
item_x: !fill num_items
item_y: !fill num_items</code></code></pre><p>(Alternatively I could have put this on the base page, or elsewhere between $1700 and $19FF, which is available for program use.)</p><p>I wrote three assembly language routines that detect whether the value at position X is equal to the value at any position 0 through X-1, the idea being that as I fill the array from position 0 upward, I can check each item against the previous items. I needed three routines because each value is stored in a different way: characters are stored as one-byte screen codes, descriptions are stored as two-byte addresses (which we&#8217;ll see more of later in this article), and coordinates are stored as coordinate pairs in two separate lists.</p><p>Here&#8217;s the simplest of the three routines I came up with that checks for duplicate screen codes:</p><pre><code><code>addrl = $00
addrh = $01
vall = $02

is_unique_byte:
    ; Y,Z: starting address of byte set
    ; X: index of last item
    ; Returns: Carry Set if item at X appears elsewhere in the set
    cpx #0
    beq @is_unique
    sty addrl
    stz addrh
    txa
    tay
    lda (addrl),y
    sta vall
-   dey
    lda (addrl),y
    cmp vall
    beq @is_not_unique
    cpy #0
    bne -
@is_unique
    clc
    bra @end
@is_not_unique
    sec
@end
    rts</code></code></pre><p>A few notes:</p><ul><li><p>The routine accepts the starting address of <code>item_screen_code</code> in the Y and Z registers. I could have hard-coded the address into the routine, but this way I could potentially re-use it with a different array, or in another program.</p></li><li><p>It uses the Carry flag as the return value, where Carry is set if a duplicate is found. The routine is not responsible for choosing new random values or updating any memory. It&#8217;s important to separate responsibilities between routines to make code easier to write, test, and re-use.</p></li><li><p>It uses base page variables and indirect indexing (via the Y register) to access the array and remember the value under test. 6502-style CPUs have very few registers, so programs must rely on the base page (or the stack) to wrangle variables.</p></li><li><p>With the Acme assembler, a symbol whose name starts with an <code>@</code> character is a &#8220;cheap local:&#8221; it is only valid between two global symbols (such as <code>is_unique_byte</code>). This way I can re-use these symbol names in my other duplicate test routines.</p></li></ul><p>These routines were challenging to get right! The algorithm isn&#8217;t complicated, but one errant instruction can cause all kinds of havoc. I found it useful to insert a <code>brk</code> instruction early in my program so that it would open the <a href="https://dansanderson.com/lab-notes/mega65-monitor/">MEGA65 Monitor</a>. From here, I would test these routines by writing values into the arrays, setting the registers, calling the routines, and inspecting the Carry flag.</p><p>To do this, I needed to determine the raw addresses of the routines and the arrays assigned by the assembler. You can tell Acme to generate a report of all of the addresses it used throughout the program, using the <code>-r</code> command line argument:</p><pre><code><code>acme -r rfk_report.txt rfk.asm</code></code></pre><p>The monitor commands <code>r</code> and <code>m</code> inspect registers and memory, respectively. To update values, you can move the cursor up to the lines that these commands print, change a value, then press <strong>Return</strong>. (Remember that addresses and values are in hexadecimal.) To call a subroutine, use the <code>j</code> command. See <a href="https://dansanderson.com/lab-notes/mega65-monitor/">my tutorial on the MEGA65 Monitor</a>, as well as appendix M of <a href="https://mega65.org/docs">the manual</a>, for more information.</p><h3>Avoiding other bad choices</h3><p>There are two more cases of bad item placement worth considering, at least briefly.</p><p>The robot also appears on the playfield along with the items. We need to make sure that an item doesn&#8217;t land on the robot&#8217;s starting position. My solution is crude but effective: I put the robot in the upper left corner of the playfield, then limit item placement to be within a one-tile border. This way, there is never an item where the robot starts, and the robot can move unimpeded around the entire edge of the playfield.</p><p>With items placed entirely at random within the border, it is possible, however unlikely, that four items might surround a fifth item. And if that fifth item is the kitten, then the robot will never be able to find it! Tragedy! I admit, I did not bother to solve for this edge case in my implementations, but it&#8217;s worth thinking about how this might be solved. One way is to test a chosen item location for surrounding items, and re-roll if a bad case is noticed. A complete solution would have to handle extremely unlikely cases like 19 items forming a wall around the kitten, and would probably involve path finding algorithms or other magicks.</p><p>A simpler solution is to only place items on odd numbered rows and columns. For example, within an 80-column width, pick a number from 0 to 38, double it, then add one. This produces a column coordinate from 1 to 77 and guarantees at least a one-space gap between items. Do the same for the row coordinate, and the robot is assured a clear path to every item.</p><h3>Calm</h3><p>One of the responsibilities of the CIA chips is to keep track of time. For coarse-grained timing, the CIA has a built-in &#8220;time of day&#8221; clock that counts up by tenths of a second. If your main loop executes faster than ten times per second, you can count upwards by tenths of a second simply by testing for when register $DC08 changes. The bottom four bits are a &#8220;binary-coded decimal&#8221; value between 0 and 9, representing the tenths-of-seconds value of the CIA&#8217;s clock. This can be a bit crude because you might be testing the register just before it ticks, so the actual delay might be off by as much as one tenth of a second.</p><pre><code><code>todtenths = $dc08

wait_briefly:
    lda todtenths
    sta last_todtenths
-   lda todtenths
    cmp last_todtenths
    beq -
    sta last_todtenths
-   lda todtenths       ; Wait two ticks to pause between 1/10th
                        ; and 2/10ths of a second
    cmp last_todtenths
    beq -
    rts

last_todtenths: !byte $00</code></code></pre><p>You can achieve a more precise wait loop delay using a feature of the VIC video chip. The VIC uses a finely-tuned high speed mechanism to describe the entire screen to a connected display many times per second, one line at a time from top to bottom, known as the <a href="https://en.wikipedia.org/wiki/Raster_scan">raster scan</a>. The current raster line number is stored in the RC register, as nine bits: bits 0 through 7 are at address $D012, and bit 8 of the number is stored as bit 7 at address $D011. In the same way that you can wait for the CIA TOD tenths register to change, you can wait for these register values to change for much shorter durations.</p><pre><code><code>wait_very_briefly:
    ; Wait for bit 8 of the raster count to flip negative then positive,
    ; for a delay between 1 and 2 frames.
-   bit $d011
    bpl -
-   bit $d011
    bmi -
    rts</code></code></pre><p>The tricky bit (because there&#8217;s always a tricky bit) is that the number of raster lines and the rate at which the screen is drawn differs depending on the video mode of the MEGA65. Back in the day, <a href="https://en.wikipedia.org/wiki/PAL">PAL</a> and <a href="https://en.wikipedia.org/wiki/NTSC">NTSC</a> were competing standards for analog video signals, used for both transmission and rendering on cathode ray tube (CRT) displays. Commodore sold computers with different VIC chips in different regions to be compatible with the technical standard used in the region for televisions. As a result, Commodore games that used raster-based timing ran differently depending on which VIC chip was in the machine. A game might animate slower or faster than was intended, or it might play music at a different speed. In other cases, a game would only function correctly with one kind of VIC chip, and just trip over itself when running with mismatched VIC timing.</p><p>The MEGA65&#8217;s VIC-IV chip can generate PAL-like or NTSC-like video signals, as separate modes. Some MEGA65 owners are using displays (vintage or modern) that only support one of the modes. I asked everyone about their display modes in <a href="https://dansanderson.com/mega65/mega65-survey-2023-results/">the 2023 survey</a>, and 81% of the MEGA65 owners that responded have their video mode set to PAL by default, vs. 18% set to NTSC. Modern digital displays can often support both modes, but only 56% of owners were confident that their display could do this. A program can force the MEGA65 into one mode or the other using registers, but it&#8217;s best to leave it in the mode selected by the user in the configuration or Freezer menu.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gTUM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gTUM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 424w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 848w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 1272w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gTUM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png" width="1165" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1165,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55301,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gTUM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 424w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 848w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 1272w, https://substackcdn.com/image/fetch/$s_!gTUM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F154db1d9-69d9-4b85-8ecf-44afb9bd9c78_1165x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Video mode support among MEGA65 owners, from the MEGA65 Community Survey 2023.</figcaption></figure></div><p>The upshot is this:</p><ul><li><p>In PAL mode, the RC register counts up to 312 raster lines, at a rate of 50 times per second (50 Hz).</p></li><li><p>In NTSC mode, the RC register counts up to 263 raster lines, at a rate of 60 times per second (60 Hz).</p></li></ul><p>The actual image size is twice this many lines, fully refreshed at half these rates. The full image is drawn <em>interlaced,</em> with odd lines and even lines alternating with each refresh. 50 Hz or 60 Hz is the <em>refresh rate</em>; 25 Hz or 30 Hz is the <em>frame rate</em>.</p><p>It is possible for a program to achieve precision timing independently of video mode using the CIA chips and a system feature known as <em>interrupt handling.</em> Interrupts can also be used for raster-based timing. High speed games are most likely to use raster-based interrupts for timing because it makes it easier to control screen updates, and they will either live with the consequences of the different video modes, or use sophisticated techniques to work around them. Interrupts are a big topic, so we&#8217;ll leave that for another Digest.</p><p>robotfindskitten doesn&#8217;t need precise timing for anything, so raster timing is overkill in this case. I use CIA TOD tenths to add a simple delay to my found-kitten experience, and otherwise rely exclusively on keyboard events (and delays introduced by the key repeat handler) to drive the gameplay logic.</p><h3>Data</h3><p>We&#8217;re almost done! We have all the tools we need to display messages, choose and place items, animate the robot, move the robot based on keyboard input, and check for item interactions and the win condition. We just need a way to store, select, and display the 400+ possible item descriptions.</p><p>We&#8217;ve already seen how to add the bytes of a text message to the program in Acme, and to assign a label to its address:</p><pre><code><code>message: !pet "\"I pity the fool who mistakes me for kitten!\", sez Mr. T.",0</code></code></pre><p>What we need is a way to select from a table of messages by an index. For my robotfindskitten implementation, I used a <a href="https://www.python.org/">Python</a> script that reads the NKI descriptions from a text file, and generates <code>!pet</code> directives for all of them, with labels such as <code>i1</code>, <code>i2</code>, and so on. The script also generates an address look-up table with all of the generated labels in it. This puts the starting address of each description into memory at regular two-byte intervals. The program can find the description for a given index by multiplying the index by two (the <code>asl</code> instruction will do the trick), adding it to the address of the lookup table (<code>nki_table</code>), then reading the description start address from that location. Each description ends with a 0 byte, so the message printing routine knows where to stop.</p><pre><code><code>nki_desc_count_mask = $01ff
nki_desc_count = 401

nki_table:
!16 i0,i1,i2,i3,i4,i5,i6,i7
!16 i8,i9,i10,i11,i12,i13,i14,i15
; ...

i0: !pet "\"I pity the fool who mistakes me for kitten!\", sez Mr. T.",0
i1: !pet "That's just an old tin can.",0
i2: !pet "It's an altar to the horse god.",0
; ...</code></code></pre><p>Here&#8217;s the full procedure for assigning a unique description to a Non-Kitten Item, using the techniques we&#8217;ve discussed:</p><ol><li><p>For each item, use the random number register to generate 16 bits (two bytes).</p></li><li><p>Apply a bitmask to cut down this 16-bit value to a 9-bit value, the smallest mask that would account for the maximum number of descriptions (512 &gt; 401).</p></li><li><p>Compare the result to the actual maximum number of descriptions, and re-roll until the selected number is within range. This is the description index.</p></li><li><p>Multiply the index by two to get the offset into the lookup table. Add this to the lookup table&#8217;s starting address.</p></li><li><p>Read the description starting address from the lookup table at that location.</p></li><li><p>Store the description address in the <code>item_description</code> array, then test whether it is a duplicate. If so, start again from step 1.</p></li></ol><p>Using tools and scripts to generate data embedded in a machine code program like this is an essential skill, especially for games. Some assemblers have powerful directives that make embedding and manipulating data easy, such as Acme&#8217;s <code>!binary</code> directive that pulls in binary data from a file. <a href="http://theweb.dk/KickAssembler/Main.html#frontpage">Kick Assembler</a>&#8217;s inline scripting capabilities are especially impressive. I find it useful to know a modern scripting language like <a href="https://www.python.org/">Python</a> so I can write my own data conversion tools that generate either assembly code or binary data that can be embedded in my programs.</p><p>If you don&#8217;t want to write your own scripts to generate the NKI description table, you can borrow the source code for my version, linked below.</p><h3>The final robotfindskitten program</h3><p>Here are my final versions of robotfindskitten for the MEGA65, in both BASIC and assembly language:</p><ul><li><p><a href="https://dansanderson.com/mega65/robot-finds-kitten-2/rfk-bas.prg">rfk-bas.prg</a> : robotfindskitten in BASIC 65; <a href="https://dansanderson.com/mega65/robot-finds-kitten-2/rfk-bas.txt">BASIC source code</a> in petcat format</p></li><li><p><a href="https://dansanderson.com/mega65/robot-finds-kitten-3/rfk-asm.prg">rfk-asm.prg</a> : robotfindsktiten in MEGA65 assembly language; <a href="https://dansanderson.com/mega65/robot-finds-kitten-3/rfk.asm">assembly language source code</a> for the Acme assembler</p></li></ul><p>I don&#8217;t claim that either of these are the best possible versions of this program. If you find ways that either of these can be improved, or if you have used different designs or techniques in your program, <a href="mailto:contact@dansanderson.com">please let me know</a>!</p><div><hr></div><p>Whew! That&#8217;s a whirlwind of programming topics for three Digest issues. Hopefully this is enough for you to get started writing a robotfindskitten of your own, or extending these ideas to making other kinds of games. For example, you could add a system of walls or a maze generator to make locating items more challenging. Or, you could add other non-player robots that move when the player does, attempting to interfere with the search. Maybe when a non-player robot encounters an item, the item gets relocated on the playfield! It&#8217;d be a much less zen experience, but more like a game.</p><p>Huge thanks to everyone who has jumped in to support the Digest on Ko-fi so far! We&#8217;re off to a good start to funding the Digest through 2024. If you would like to become a supporter, visit: <a href="https://ko-fi.com/dddaaannn">https://ko-fi.com/dddaaannn</a></p><p>See you next year!</p>]]></content:encoded></item><item><title><![CDATA[MEGA65 mousepads, posters, and new ways to support the Digest]]></title><description><![CDATA[Two announcements!]]></description><link>https://m65digest.substack.com/p/mega65-mousepads-posters-and-new</link><guid isPermaLink="false">https://m65digest.substack.com/p/mega65-mousepads-posters-and-new</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Thu, 30 Nov 2023 01:04:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3ICW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey all! I hope you&#8217;re all having good holidays and a good time with your MEGA65.</p><p>We&#8217;ve all received a lot of email in the last week, so here&#8217;s the super-short version with two links to save some time:</p><ol><li><p><a href="https://www.zazzle.com/store/m65digest">New MEGA65 45GS02 Quick Reference mousepads and posters now available!</a> Order this week and get 25% off! Use code ZCYBERDEAL23 during checkout.</p></li><li><p><a href="https://ko-fi.com/dddaaannn">Support my work on the MEGA65 and the Digest with Ko-fi!</a></p></li></ol><p>Continue reading for photos and details!</p><h2>New MEGA65 mousepads and posters!</h2><p>During my recent experiences learning about MEGA65 assembly language, I&#8217;ve been wanting some kind of quick reference for all of the instructions supported by the 45GS02 CPU, something that sits on my desk that I can glance at to remind me of how it works. I originally thought it&#8217;d be fun to make a coffee mug, but as I iterated on a design, it became clear that it&#8217;d take several mugs to fit all of the instructions! So I wondered, what about a mousepad?</p><p>After some careful layout work and a heap of technical troubleshooting, I landed on this design, and I think it&#8217;s pretty snazzy:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ICW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ICW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ICW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:565766,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3ICW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ICW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff64b532e-7617-4c50-ab3a-331cf9e25836_640x480.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 45GS02 Quick Reference mousepad.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zIAm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zIAm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zIAm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:459669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zIAm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zIAm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dc44834-144d-4d64-9ce2-f74f423cafa4_640x480.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The mousepad performing one of its two functions.</figcaption></figure></div><p>I tried the same design as a 20" x 16" poster, and it&#8217;s pretty good too:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vmUg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vmUg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vmUg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:282409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vmUg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vmUg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb016d5f1-781d-4b57-a409-12afdb757b48_640x480.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The MEGA65 45GS02 Quick Reference poster.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cCjO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cCjO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cCjO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg" width="480" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:492790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cCjO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cCjO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40f3d16e-1b5e-4a0d-b80b-c6dcffdbd2e3_480x640.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Poster close-up.</figcaption></figure></div><p>I&#8217;m happy to announce that you can now <strong><a href="https://www.zazzle.com/store/m65digest">get a MEGA65 45GS02 Quick Reference mousepad and poster of your own</a></strong>, just in time for the holidays! Get one for yourself, and one for that special someone in your life that writes MEGA65 assembly language programs.</p><p>Features of the design:</p><ul><li><p>Every 6502, 65CE02 (4510), and 45GS02 instruction and addressing mode, color-coded by CPU</p></li><li><p>Status register side effects</p></li><li><p>Branch instruction flag behaviors</p></li><li><p>CMP instruction flag behaviors</p></li><li><p>Q virtual register layout</p></li><li><p>MAP register layout and call pattern</p></li><li><p>A fun colorful design that&#8217;s a joy to have on your desk or wall!</p></li><li><p>Mousepad is also a mousepad!</p></li></ul><p>Most of the cost goes to printing and distribution, by Zazzle. All remaining proceeds support my work on the MEGA65 and the Digest.</p><p>This week only, <strong>use code ZCYBERDEAL23 during checkout and get 25% off!</strong> This is Zazzle&#8217;s holiday promotion. I think the code is applied automatically. You&#8217;ll figure it out.</p><p>Here&#8217;s the store link again: <a href="https://www.zazzle.com/store/m65digest">https://www.zazzle.com/store/m65digest</a></p><h2>Support the MEGA65 Digest in 2024</h2><p>I have been writing the MEGA65 Digest monthly newsletter since August of 2022, fifteen full issues to date, with one more planned for this calendar year. I&#8217;m extremely grateful to have had the opportunity to donate my time to the MEGA65 project in this and other ways in the last year and a half.</p><p>Some members of our community have reached out to me to inquire about supporting my efforts through patronage. Several folks even figured out how to contribute through Substack without my ever having asked! (I think Substack asks on my behalf without my knowing, but still, that&#8217;s amazing!) Huge thanks to everyone who has contributed so far.</p><p>I am humbled to announce that you can now <strong><a href="https://ko-fi.com/dddaaannn">support the Digest and my other MEGA65 work through ko-fi.com</a></strong>. Ko-fi supports PayPal and Stripe as payment methods, which includes Apple Pay and major credit cards. I&#8217;m at a point where a small monthly contribution can make a <em>big</em> difference.</p><p>Important note: <em>The email Digest will always be free for all.</em> I consider the newsletter to be an essential community resource, especially for project announcements. Your contributions will benefit everyone. (My open source code contributions will also be for everyone, but I assume that goes without saying. &#128517;)</p><p>I am considering what fun things we can do with supporter exclusives or early access. In particular, I might re-tool the audio version of the Digest as a bonus feature, or as something else entirely. We can discuss it in the Ko-fi comments.</p><p>I will continue to welcome contributions via Substack. That&#8217;s not everybody&#8217;s favorite option and I have considered migrating to another email newsletter provider. For now, I&#8217;ll try to mention anything supporter-exclusive in both places.</p><p>A <em>huge</em> thank you again to everyone who has supported my efforts so far, and to everyone able to offer support going forward.</p><p>The ko-fi link: <a href="https://ko-fi.com/dddaaannn">https://ko-fi.com/dddaaannn</a></p><h2>My to-done list</h2><p>Wistfully reviewing my time here so far, here are some of the things (well, most of the things) I&#8217;ve been able to do in the last year or so thanks to everyone&#8217;s support:</p><ul><li><p>Wrote the <a href="https://dansanderson.com/mega65/welcome/">MEGA65 Welcome Guide</a></p></li><li><p>Wrote 15+ issues of <a href="https://m65digest.substack.com/">Dan&#8217;s MEGA65 Digest</a>, email newsletter and audio podcast</p></li><li><p>Assembled and distributed the <a href="https://files.mega65.org/?ar=ff484da0-d942-4e9b-adf1-3b5a77acaa25">Real-Time Clock replacement part</a> for batch #1 and batch #2 owners affected by the RTC issue</p></li><li><p><a href="https://mega65.org/docs">MEGA65 documentation</a> maintainer and author since late 2022</p></li><li><p>Wrote the new Memory chapter</p></li><li><p>Revised the User&#8217;s Guide for a 2nd edition, including all-new chapters and a revised and tested BASIC reference, to accompany the upcoming v0.96 release</p></li><li><p><a href="https://github.com/MEGA65/mega65-rom-public/blob/main/CHANGELOG.md">MEGA65 ROM</a> maintainer since version 920377</p></li><li><p>Tested and merged ROM contributions from the development branch</p></li><li><p>Implemented the &#8220;undo Home&#8221; feature; <a href="https://dansanderson.com/lab-notes/adding-a-feature-to-mega65/">blog write-up</a></p></li><li><p>Implemented 27 ROM bug fixes and changes, several core and Freezer fixes and changes</p></li><li><p>Completed the new hardware keyboard scanner in the MEGA65 core (originally started by Paul), and upgraded the ROM to use it from the KERNAL and screen editor</p></li><li><p>Wrote a semi-automated integration test driver capable of running everything uploaded to Filehost on a real MEGA65 to test outcomes with ROM and core changes</p></li><li><p>Implemented the <a href="https://tilde.zone/@mega65files">MEGA65 Files bot</a>, currently available via Mastodon and RSS</p></li><li><p>Wrote <a href="https://dansanderson.com/tags/mega65/">additional tutorials on MEGA65 programming</a></p></li><li><p>Wrote and hosted the <a href="https://dansanderson.com/mega65/mega65-survey-2023-results/">MEGA65 Community Survey 2023</a></p></li><li><p>Gave a talk about the MEGA65 at <a href="https://youtu.be/vYTTn3fLNxc?si=LpkB7KA_cF-qKqLx">Pacific Commodore Expo Northwest 2023</a></p></li><li><p>Other minor projects: <a href="https://github.com/dansanderson/mega65-symbols">symbols source generator</a>, <a href="https://files.mega65.org/?id=9a5390c1-3f97-4483-a42d-204844438b41">BF interpreter</a>, <a href="https://files.mega65.org/?ar=ce6ac468-b8d7-4d4d-b191-1feabb92946c">Welcome FAQ</a>, <a href="https://files.mega65.org/?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">ROM FAQ</a>, a <a href="https://dansanderson.com/lab-notes/autotools-in-2022/">weird detour I took with GNU Autotools</a> that didn&#8217;t amount to anything, some unimplemented designs I won&#8217;t otherwise mention</p></li></ul><p>Lots of ideas for 2024, looking forward to it! And thanks again!</p><p>&#8212; Dan</p><p></p>]]></content:encoded></item><item><title><![CDATA[robotfindskitten, part 2]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for November 2023]]></description><link>https://m65digest.substack.com/p/robotfindskitten-part-2</link><guid isPermaLink="false">https://m65digest.substack.com/p/robotfindskitten-part-2</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Tue, 14 Nov 2023 06:48:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KkNq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KkNq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KkNq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 424w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 848w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 1272w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KkNq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png" width="647" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:647,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KkNq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 424w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 848w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 1272w, https://substackcdn.com/image/fetch/$s_!KkNq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cac97-3620-4232-b7e2-a9c2885ad50b_647x421.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">robotfindskitten for the MEGA65 (BASIC version)</figcaption></figure></div><p><a href="https://dansanderson.com/mega65/robot-finds-kitten/">Last month&#8217;s Digest</a> introduced robotfindskitten, a programming exercise that unites several major concepts of game programming: updating the display, reading user input, generating random values, timing events, and including and manipulating large amounts of static game data. I offered examples of each of these tasks in BASIC 65, and proposed that these could be used to make a robotfindskitten experience for the MEGA65.</p><p>In this issue, I want to start reviewing these topics again in assembly language. Without BASIC&#8217;s help, the program will need to turn to hardware registers and low-level programming techniques to achieve similar effects. Some of these topics are too large for a single newsletter, so we&#8217;ll take this in two parts. I&#8217;ll try to keep things simple by limiting this to just the needs of a robotfindskitten program. Applications that require higher speed or more memory may need more sophisticated techniques.</p><p>This month&#8217;s Digest will focus on using the KERNAL, printing messages, and drawing characters to the screen&#8212;barely scratching the surface of the MEGA65&#8217;s graphics capabilities. Next month, we&#8217;ll finish robotfindskitten in assembly language with random values, user input, item descriptions, and a simple animation delay.</p><h2>Shipping update</h2><p>The work continues to finalize the new R5 main board hardware for the next delivery batch of computers. Getting the test hardware has taken longer than anticipated, and we are now expecting manufacturing lead times to put the batch #3 delivery in early 2024.</p><p>Importantly, the team has decided to proceed with the full verification process for the new design, and not skip any steps just to accelerate the schedule. The MEGA65 is manufactured in small volumes in a not-for-profit operation, so we can&#8217;t afford to rush the process and risk having to re-make and replace hardware. We want every computer delivered to be as high in quality as possible.</p><p>Some pre-orders have been pending for a <em>very</em> long time now, and we thank you for your patience! If you have a pending pre-order and need to make changes, contact Trenz Electronic customer support.</p><h2>Tristam Island</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lF_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lF_5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lF_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg" width="1120" height="1120" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1120,&quot;width&quot;:1120,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:256898,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lF_5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lF_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c594f5-92b0-493e-93c8-041cef81a77a_1120x1120.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tristam Island for the MEGA65.</figcaption></figure></div><p><em>Tristam Island</em>, by Hugo Labrande, is a new text adventure game for multiple platforms, including the MEGA65. You can get the <a href="https://www.polyplay.xyz/Tristam-Island-MEGA65_1">deluxe boxed edition</a>, from publisher poly.play for 35 EUR. The deluxe edition includes the game on 3.5" floppy disk and on microSD card, a hint book, immersive props such as a rock sample and a postcard, and more. You can also get <a href="https://hlabrande.itch.io/tristam-island">the digital-only edition</a> for $3.99 USD.</p><p>Thanks to Hugo for the great game and for supporting the MEGA65, and to poly.play for publishing fun collectible boxed software for our favorite platform!</p><h2>Updated ZX Spectrum core</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MMU0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MMU0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MMU0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg" width="680" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:680,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195973,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MMU0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MMU0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d0b50b-7eb4-4523-b3ad-cea93b309eba_680x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The ZX Spectrum.</figcaption></figure></div><p>Did you know that you can turn your MEGA65 into a ZX Spectrum? You can, with the ZX Spectrum core! This core just received a major overhaul to use the <a href="https://github.com/sy2002/MiSTer2MEGA65">MiSTer2MEGA65</a> framework, and now works with modern displays.</p><p><a href="https://files.mega65.org/?id=bdaeb7e0-9fc8-4185-99de-104d01229f27">Download the ZX Spectrum core from Filehost</a>, then <a href="https://github.com/sy2002/zxuno4mega65/wiki/Getting-Started">follow these detailed instructions</a> for set-up and enjoyment. The core expects certain files in specific locations on the SD card, and uses <a href="http://esxdos.org/index.html">ESXDOS v0.8.8</a> (not v0.8.9) for SD card access. It can load <code>.tap</code> and <code>.trd</code> files.</p><p>Once again thanks to sy2002 and MJoergen for their amazing work on setting up the MEGA65 for retro core success!</p><h2>More arcade cores!</h2><p>muse continues the great work of porting arcade game cores to the MEGA65. <a href="https://files.mega65.org/html/main.php?id=f3ddcbd5-a6c1-42cd-aa9c-db25dfd71c90">Bombjack</a> (1984) (<a href="https://github.com/sho3string/BombjackMEGA65">installation instructions</a>) and <a href="https://files.mega65.org/html/main.php?id=f3ddcbd5-a6c1-42cd-aa9c-db25dfd71c90">Bosconian</a> (1981) (<a href="https://github.com/sho3string/BosconianMEGA65">installation isntructions</a>) are both available.</p><p>The complete list of alternate cores for the MEGA65 so far:</p><p>Ports and enhancements by MJoergen and sy2002:</p><ul><li><p><a href="https://files.mega65.org/?id=896a012f-59e4-456c-b91f-7e989b958241">Commodore 64</a> v5</p></li><li><p><a href="https://files.mega65.org/?id=bdaeb7e0-9fc8-4185-99de-104d01229f27">ZX Spectrum</a> v1.0</p></li><li><p><a href="https://files.mega65.org/html/main.php?id=f3ddcbd5-a6c1-42cd-aa9c-db25dfd71c90">Game Boy</a> v0.8</p></li></ul><p>Ports and enhancements by muse (shoestring):</p><ul><li><p><a href="https://files.mega65.org/?id=8bc248e3-c29c-4ba8-b8c3-6018a995a9ea">Galaga</a> v0.5.1</p></li><li><p><a href="https://files.mega65.org/?id=96dd324b-d611-4252-bea4-0dbc4eb899ae">Bosconian</a> v0.5.0</p></li><li><p><a href="https://files.mega65.org/?id=d32474e9-6f30-48f8-bba3-167cad4bbc4f">Xevious</a> v0.5.0</p></li><li><p><a href="https://files.mega65.org/?id=f3ddcbd5-a6c1-42cd-aa9c-db25dfd71c90">Bombjack</a> v0.5.0</p></li></ul><p>Along with a MEGA65 development core in slot 1 and a factory-installed stable core in slot 0, that&#8217;s more cores than there are core slots on a MEGA65! Just keep the <code>.cor</code> files on your SD card and flash them as needed.</p><h2>Conference talks</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g6dV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g6dV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 424w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 848w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 1272w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g6dV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png" width="861" height="497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4449c715-0eaa-4a49-a160-d329d6824445_861x497.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:497,&quot;width&quot;:861,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:425134,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!g6dV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 424w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 848w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 1272w, https://substackcdn.com/image/fetch/$s_!g6dV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4449c715-0eaa-4a49-a160-d329d6824445_861x497.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jim Happel (jim_64) at Commodore Retro eXpo 2023.</figcaption></figure></div><p>MEGA65 enthusiasts have been giving talks at computer conferences this year, and several of them now have video online. Check these out!</p><ul><li><p><a href="https://media.ccc.de/v/vcfb2023_-_185_-_de_-_202310141545_-_mega65_-_oliver_graf">Oliver Graf (lydon) at Vintage Computing Festival Berlin 2023</a></p></li><li><p><a href="https://www.youtube.com/live/KUTamTXnWB4?si=Vo-NJiJu2j5G6mq9&amp;t=1990">Jim Happel (jim_64) at Commodore Retro eXpo 2023</a></p></li><li><p><a href="https://youtu.be/vYTTn3fLNxc?si=LpkB7KA_cF-qKqLx">Dan Sanderson (dddaaannn) at Pacific Commodore Expo Northwest 2023</a></p></li></ul><p>If you have given a presentation on the MEGA65, even just to your local computer club, and there&#8217;s video online, please let me know so I can feature it here!</p><h2>robotfindskitten in assembly language</h2><p>Let&#8217;s take a look at how you might implement robotfindskitten in MEGA65 assembly language. This month will focus on using the KERNAL API and manipulating the display. Next month, we&#8217;ll cover the remaining topics to get a robotfindskitten program working, similar to what we did in BASIC last month.</p><p><a href="https://dansanderson.com/mega65/cross-development/">As before</a>, I&#8217;ll be using <a href="https://sourceforge.net/projects/acme-crossass/">the Acme assembler</a>. Here&#8217;s a reminder of the starter code for an assembly language program that assembles to a PRG file that can be loaded and run. The <code>!8 ...</code> values describe a BASIC bootstrap program that invokes the first assembly language instruction.</p><pre><code><code>!cpu m65
!to "rfk.prg", cbm

* = $2001

!8 $12,$20,$0a,$00,$fe,$02,$20,$30,$3a,$9e,$20
!pet "$2014"
!8 $00,$00,$00

start:
    ; Program code will go here.</code></code></pre><h3>Introducing the KERNAL</h3><p>Every Commodore computer has a built-in operating system powered by machine code etched into the computer&#8217;s Read Only Memory (ROM). You see this code running as soon as you turn on the computer: the <code>READY</code> prompt, the blinking cursor, and the BASIC interpreter and all of the BASIC commands are all built-in code. Included in this code is a collection of machine code routines and subsystems for accessing hardware such as the keyboard, screen, and disk drives. In computer architecture terms, these routines are known as the <em>kernel,</em> the centerpiece of the system used by other components. Commodore employee Robert Russell originally misspelled the word &#8220;kernel&#8221; as &#8220;KERNAL&#8221; in the documentation, and this became a nickname for the software. For the sake of tradition, I&#8217;ll continue to refer to the Commodore kernel as the KERNAL, using uppercase letters.</p><p>A program can call KERNAL routines by way of a <em>jump table,</em> a list of <code>jmp</code> instructions built into the ROM at a fixed memory location. Each <code>jmp</code> instruction redirects to the actual location of the routine elsewhere in memory. The jump table exists to give programmers peace of mind that each <code>jmp</code> instruction will stay at a consistent address for all future revisions of the KERNAL. When changes in the KERNAL code inevitably push an internal routine to a new location, the jump table is updated accordingly, so programs that use the routine continue to function without needing an update.</p><p>Here&#8217;s a useful example. The KERNAL maintains a system for printing PETSCII codes to the screen. <a href="https://dansanderson.com/mega65/petscii-codes/">As we&#8217;ve seen before</a>, these codes manipulate a cursor that determines the location of the next printable character, and maintains other properties such as the text color and display attributes. The BASIC <code>PRINT</code> command uses this system to display strings of codes and characters. Machine code programs can also access this system using a routine called <code>chrout</code> (also called <code>bsout</code> in some documentation), available via the jump table entry at $FFD2.</p><pre><code><code>chrout = $ffd2

    lda #147      ; clear the screen
    jsr chrout

    lda #65       ; the letter "A"
    jsr chrout</code></code></pre><p>The <code>chrout</code> routine has a <em>pre-condition</em> that the PETSCII code to print is in the accumulator (CPU register &#8220;A&#8221;). The effect of calling the routine is to print the PETSCII code at the current cursor position. If the code is a printable character, it plots the character, moves the cursor, and performs other effects like scrolling the display as needed. If the code is some other PETSCII code, such as code 147 to clear the screen and move the cursor to the top-left corner, that code takes effect.</p><p>The jump table is part of the Application Programming Interface, or API, of the KERNAL. The API definition also includes the pre-conditions and post-conditions of each routine, and other important behavioral characteristics about what the routine does. All KERNAL jump table entries designed for the C64 and C128 are valid on the MEGA65&#8212;with some changes. While neither the C65 nor the MEGA65 have introduced new table entries, future versions of the MEGA65 ROM could extend the table further without changing any of the existing entries.</p><p>It&#8217;s important to remember that the MEGA65 ROM is an active construction zone, and only some of the KERNAL APIs borrowed from previous Commodores are considered officially supported for now. Some things that C64 programmers may be used to aren&#8217;t official APIs, even if they appear to function today. When the dust has settled on the major bug fixes, the MEGA65 team will formalize more of the KERNAL API surface, adding documentation about supported features to <a href="https://mega65.org/docs">the manuals</a> and building automated tests to ensure that the APIs work properly. The KERNAL jump table is officially supported, as are certain specific facts about the memory layout, such as $2001 being the start address for BASIC programs.</p><p>Once a machine code program is running, it is not obligated to use the KERNAL. In fact, many games and larger utilities jettison the KERNAL entirely, installing custom interrupt handler routines, defining a custom memory map, and manipulating the computer entirely through hardware registers. For such a program, the only API surface is the hardware itself, and there is no need to integrate with the KERNAL except to launch the program. If the program does use KERNAL routines and systems, it must honor the KERNAL&#8217;s documented pre-conditions, and stay out of its way.</p><h3>Printing a short message using the KERNAL</h3><p>The following code uses the KERNAL <code>chrout</code> routine to clear the screen and print a short message:</p><pre><code><code>    lda #147       ; clear the screen
    jsr chrout
    
    ldx #0
-   lda message,x  ; read a byte from message, offset by X
    beq +          ; if it's a zero, we have reached the end of the message
    jsr chrout     ; output the byte
    inx            ; increment X
    bra -          ; loop back
+   rts

message:
!pet 14,"robotfindskitten",0   ; Acme directive to generate PETSCII
                               ; bytes</code></code></pre><p>This example uses the &#8220;X indexing&#8221; addressing mode to access characters in the message stored in program memory. <code>lda message,x</code> takes the address of the message, via the assembler symbol <code>message</code>, and adds the value in the X register to it. The X register is one byte, with a range of possible values of 0 to 255. This limits the length of the message to 254 PETSCII codes and one 0 byte to indicate the end of the message.</p><p>There&#8217;s another way to print short messages, using another KERNAL routine. The <code>primm</code> routine at $FF7D will print a null-terminated message, with the message bytes immediately following the <code>jsr</code> instruction. It&#8217;s like having a <code>PRINT</code> command for assembly language!</p><pre><code><code>primm = $ff7d

    jsr primm
!pet 14,"robotfindskitten",0

    ; Program continues...</code></code></pre><p>It seems like a magic trick for the message bytes to be sitting in the middle of the code like this. How does the CPU know to skip over the message to the next instruction? The <code>primm</code> routine is quite clever. When the CPU encounters a <code>jsr</code> instruction, it remembers the address just after the instruction, so it can pick up where it left off when the subroutine exits with the <code>rts</code> instruction. The <code>primm</code> routine assumes that this address is the starting byte for the message and starts printing. When <code>primm</code> finds the 0, it updates the return address to just after the 0, then issues the <code>rts</code>. The CPU is blissfully unaware that <code>primm</code> has been messing with the return address and proceeds to execute the rest of the program. Pretty slick!</p><p>Note that <code>primm</code> is also limited to messages of 254 characters. To print a longer message, we need a different strategy.</p><h3>Printing longer messages</h3><p>In the code above, <code>message</code> is a symbol whose value is determined by the assembler and inserted into the code where the word appears. Wouldn&#8217;t it be great if we could update the value of the <code>message</code> symbol as the program executes, like a variable? The value of <code>message</code> is written into the machine code, and this code is just bytes in memory. One option is to update the address bytes within the code by writing to the appropriate memory locations, then execute the code. This technique, known as <em>self-modifying code</em>, is quite common, and not that difficult with a bit of care.</p><p>The following routine accepts the low byte and high byte of the message address in the Y and Z registers, and prints the message until it encounters a 0 byte. It relies on the knowledge that the <code>lda $0000,x</code> instruction assembles to three bytes: one for the instruction code, and two for the address. It uses the X register as before, but this time it tests whether X wraps around from 255 to 0, then increments the high byte of the address and continues printing. This gives us a maximum message length of 65,535 characters, which is more than enough.</p><pre><code><code>    ldy #&lt;intro_message
    ldz #&gt;intro_message
    jsr print_long_message

; ...

print_long_message:
    ; Y,Z = address
    sty .load_selfmod+1
    stz .load_selfmod+2
    ldx #0
.load_selfmod
    lda $0000,x
    beq .end
    jsr chrout
    inx
    bne .load_selfmod
    inc .load_selfmod+2
    bra .load_selfmod
.end
    rts

intro_message:
!pet 147,14,5,27,"8"  ; clear, lowercase, white, 80x25
!pet "robotfindskitten in MEGA65 assembly language",13
!pet "Based on the game by the illustrious Leonard Richardson (C) 1997, 2000",13
!pet "Press Return to start.",0</code></code></pre><h3>Changing the cursor location</h3><p>Another useful KERNAL routine for printing is the <code>plot</code> routine, at $FFF0. <code>plot</code> can do two things: it can either move the cursor to given coordinates, or it can report the coordinates of the cursor&#8217;s location. You use the carry flag to choose between the two actions. To move the cursor, clear the carry flag (<code>clc</code>), then set the X register to the column number and the Y register to the row number.</p><pre><code><code>plot = $fff0

    clc
    ldx #12
    ldy #1
    jsr plot</code></code></pre><p>To ask <code>plot</code> to report the current location, set the carry flag (<code>sec</code>) before calling it. Instead of changing the cursor position, <code>plot</code> will overwrite the values in the X and Y registers with the current cursor location.</p><p>A word of caution: When the KERNAL print system prints a character in the bottom-right corner of the screen, it assumes that more text needs to appear on the following line, and scrolls the text display to make room. When plotting characters for game graphics, this probably isn&#8217;t what you want. A simple albeit unsatisfying way to avoid this issue is to never print a character in the bottom-right corner.</p><h3>Accessing screen memory</h3><p>You could make a robotfindskitten game using just the KERNAL print system: use <code>plot</code> and <code>chrout</code> with PETSCII codes to draw items, and erase and draw the robot character as it moves across the screen. Most games don&#8217;t use the KERNAL print system to plot characters at all. Instead, they write directly to screen memory, color memory, and registers in the VIC-IV chip. This avoids issues like the KERNAL scrolling the text display, at the expense of doing other things manually, such as calculating memory locations for screen coordinates, and managing character attributes and colors.</p><p>If your program uses the KERNAL print routines, it&#8217;s best to let the KERNAL manage screen memory as much as possible. The KERNAL uses internal variables to keep track of some screen properties, and these need to be consistent with its own understanding of the state of the video hardware. If you change the screen mode or relocate screen memory via VIC-IV registers without telling the KERNAL, actions performed by PETSCII codes, such as clearing the screen, may not function correctly.</p><p>Handling screen memory is an essential skill for assembly language programmers. It&#8217;s also a deep topic. So let&#8217;s limit this discussion of screen memory to a few salient facts. To tell the KERNAL to set the screen mode to 80 x 25 text, print the <strong>Escape</strong> + <strong>8</strong> key sequence with <code>chrout</code>, as if you were typing it at the <code>READY</code> prompt:</p><pre><code><code>    lda #27  ; Escape
    jsr chrout
    lda #'8' ; PETSCII "8"
    jsr chrout</code></code></pre><p>If you&#8217;re not using the KERNAL, you can select the screen mode with flag registers at location $D031. To get 80 x 25, clear the V400 register (bit 3) and set the H640 register (bit 7). Without the KERNAL, you will need to write your own message printing routines that write directly to screen memory; you can&#8217;t use <code>chrout</code>.</p><p>The starting address of screen memory is in a VIC-IV register known as SCRNPTR, a 28-bit value stored at $D060-$D063, least significant byte first. The KERNAL will set this when you print the escape sequence for the screen mode. If you&#8217;re not using the KERNAL, you can set this to any address you like in the first 384K of memory by writing its address into the registers.</p><p>The KERNAL&#8217;s preferred memory location for a 40 x 25 or 80 x 25 screen is address $0800. Strictly speaking, this is not a documented fact: a program that relies on the KERNAL&#8217;s setting must read it from SCRNPTR, and never assume its value. For propriety, the examples below will read the SCRNPTR value instead of assuming it, but&#8212;at least for now&#8212;I&#8217;m also relying on the fact that the address is within bank 0 (addresses $0000 to $FFFF) so we can use 16-bit addressing modes and don&#8217;t have to worry about accessing upper memory. Note that this won&#8217;t work with 80 x 50 text mode, because the KERNAL relocates screen memory to bank 1 for this mode.</p><p>As with BASIC&#8217;s <code>T@&amp;()</code> special array, screen memory contains <a href="https://sta.c64.org/cbm64scr.html">screen codes</a> that represent the characters in the character set. The codes are organized in columns then rows, from top-left to bottom-right: the first 80 bytes are the top row, the next 80 bytes are the next row, and so on, for 80 x 25 = 2,000 bytes.</p><p>The following example uses the self-modifying code technique to store a value in screen memory. The <code>sta</code> instruction can only operate on 16-bit addresses, so it uses the lower two bytes of SCRNPTR, and assumes the upper bytes are zero (an address in bank 0).</p><pre><code><code>scrnptr = $d060

    ; Use self-modification to write to the (16-bit, bank 0)
    ; SCRNPTR address
    lda scrnptr
    sta store_screen_selfmod+1
    lda scrnptr+1
    sta store_screen_selfmod+2

    lda #1     ; Screen code for the letter A
store_screen_selfmod
    sta $0000</code></code></pre><h3>Color memory</h3><p>In the regular text mode, color memory stores the foreground color and attributes for each character on the screen, organized in the same way. One way to access color memory is starting at address $D800.</p><p>There&#8217;s one issue, though. By default, only the first 1K of color memory is visible here, from $D800 to $DBFF. That&#8217;s not enough for all 2,000 characters of a 80 x 25 display! This is solved by yet another of the MEGA65&#8217;s many modes. The CRAM2K register, bit 0 of $D030, swaps the registers from $DC00 to $DFFF with the remaining color memory. To do this, it hides other hardware registers normally at those locations, such as the CIA chip registers. The KERNAL expects to see the registers here and not color memory, so you must clear the bit before calling KERNAL routines. (The KERNAL IRQ is smart enough to stash and restore your CRAM2K setting, so you do not need to disable interrupts. That&#8217;s a topic for another time.)</p><pre><code><code>cram2k = $d030
color_mem = $d800

    lda #%00000001  ; Enable CRAM2K
    tsb cram2k
    
    lda #5          ; Paint the A green
    sta color_mem

    lda #%00000001  ; Restore registers
    trb cram2k</code></code></pre><h3>From coordinates to screen memory addresses</h3><p>Given screen coordinates of column X and row Y, the offset into screen memory for that coordinate is Y times 80, plus X. The CPU doesn&#8217;t have an instruction that can multiple any two numbers, but it does have a quick and easy way to multiply a number by two: it can shift the bits of a number to the left, using the Arithmetic Shift Left instruction (<code>asl</code>). If it&#8217;s not clear that shifting the bits of a number to the left multiply it by two, write out a binary number, then write a zero at the end. For example, the binary number %0110 is 2 + 4 = 6 in decimal. Write a zero at the end, and it becomes %01100, which is 4 + 8 = 12 in decimal. Just as writing a zero at the end of a decimal (base ten) number multiplies the number by ten, writing a zero at the end of a binary (base two) number multiplies it by two.</p><p>Using a combination of left-shift and addition operations, we can calculate the screen memory address for a given set of coordinates in three steps:</p><ol><li><p>Calculate the row offset from the Y coordinate, stored in a memory variable (<code>row_offset</code>), using bit shift and addition operations to multiply Y by 80.</p></li><li><p>Add the base address and the row offset, stored in the address part of a <code>sta ...,x</code> instruction (self-modifying code).</p></li><li><p>Use X-indexing with the X coordinate, to determine the final address and set the screen code.</p></li></ol><pre><code><code>row_offset: !byte 0,0

plot_char:
    ; Pre-condition:
    ; - A is the screen code
    ; - X register is the X coordinate
    ; - Y register is the Y coordinate
    
    taz         ; Stash the screen code in Z, so
                ; we can use A for other things
    
    lda scrnptr
    sta store_screen_selfmod+1
    lda scrnptr+1
    sta store_screen_selfmod+2

do_plot:
    ; - Z is the value to store in memory

    ; Calculate Y * 80 into row_offset memory variable
    lda #0
    sta row_offset+1 ; reset row_offset's high byte
    tya
    sta row_offset   ; store the row number as row_offset's low byte
    asl              ; x2
    asl              ; x4
    adc row_offset   ; x5
    sta row_offset
    asw row_offset   ; x10
    asw row_offset   ; x20
    asw row_offset   ; x40
    asw row_offset   ; x80

    ; Add row_offset to store_screen_selfmod+1
    lda store_screen_selfmod+1
    clc
    adc row_offset
    sta store_screen_selfmod+1
    lda store_screen_selfmod+2
    adc row_offset+1  ; add with carry
    sta store_screen_selfmod+2

store_screen_selfmod:
    stz $0000,x

    rts</code></code></pre><p>To update color memory, the only difference in this routine would be to use a different base address, and set CRAM2K while updating memory. I added a <code>do_plot</code> label above so I could share the common code between the two routines.</p><pre><code><code>color_char:
    ; Pre-condition:
    ; - A is the color
    ; - X register is the X coordinate
    ; - Y register is the Y coordinate

    taz        ; Stash the color code in Z, so
               ; we can use A for other things

    lda #&lt;color_mem
    sta store_screen_selfmod+1
    lda #&gt;color_mem
    sta store_screen_selfmod+2

    lda #%00000001  ; Enable CRAM2K
    tsb cram2k

    jsr do_plot
    
    lda #%00000001  ; Restore registers
    trb cram2k

    rts</code></code></pre><h3>Base Page Indirect Addressing</h3><p>Each machine code instruction that accesses memory can operate in one or more <em>addressing modes,</em> ways for the CPU to figure out what address to use. We&#8217;ve seen three addressing modes in the examples so far:</p><p><strong>Immediate mode:</strong> use the value given in the instruction. This example loads the number 7 from the instruction into the accumulator:</p><pre><code><code>    lda #7</code></code></pre><p><strong>Absolute mode:</strong> use the 16-bit address given in the instruction. This example loads the value stored at address $20CF into the accumulator:</p><pre><code><code>    lda $20cf</code></code></pre><p><strong>Absolute X-indexed mode:</strong> take the given 16-bit address, then add the value from the X register to it, and use that as the address. This example sets the X register to $2F, then loads the value stored at the address calculated as $20CF plus the value in the X register ($20CF + $2F = $20FE) into the accumulator:</p><pre><code><code>    ldx #$2f
    lda $20cf,x</code></code></pre><p>The X register can contain a value from 0 to 255, which limits the range of the X-indexed addressing mode. Earlier, I used self-modifying code to get around this problem, allowing for performing calculations on the entire address. The following example rewrites the 16-bit address portion of an instruction that&#8217;s using absolute mode addressing, then executes the modified instruction:</p><pre><code><code>    lda #$cf
    sta .selfmod+1
    lda #$20
    sta .selfmod+2

.selfmod:
    lda $0000</code></code></pre><p>Writing the address directly into an instruction like this is only really practical if only one instruction needs the address, and the modifying code knows exactly which address to modify. In many cases, it&#8217;d be better if we could store the address in one memory location like a variable, then tell the instructions where to find it.</p><p><strong>Base Page Indirect Addressing mode</strong> can do exactly that. This example stores a 16-bit address at memory location $10-$11, then accesses it using the Y register as an index:</p><pre><code><code>    lda #$cf
    sta $10
    lda #$20
    sta $11
  
    ldy #0
    lda ($10),y</code></code></pre><p>So why didn&#8217;t I do this earlier? Well, there&#8217;s a catch: the address must be written to the <em>base page,</em> a region of 256 bytes that gets special treatment. Commodore 64 programmers know this as the <em>zero page</em>, within the addresses $0000 to $00FF. The CPU uses special forms of its instructions to access these addresses faster and with more compact code than absolute 16-bit addresses, so the base page is a great place to put variables. It&#8217;s so useful, in fact, that the KERNAL claims <em>all</em> of the zero page for its own use. If your program uses the KERNAL, you must protect the zero page so that it&#8217;s the way the KERNAL left it by the time you call a KERNAL routine.</p><p>With the original 6502 CPU, the base page is always at address $0000 (hence the name &#8220;zero page&#8221;). The 65CE02 CPU (on which the MEGA65&#8217;s 45GS02 is based) adds a feature that lets you use any 256-byte page of the first 64K of memory as the base page. The B register holds the top two nibbles (two hexadecimal digits) of the address of the base page. Your program can stake out its own base page and set the B register to that location to use it. I recommend page B = $16 ($1600 to $16FF), which is reserved for use by your program.</p><p>You must change B back to $00 before calling a KERNAL routine. The base page being set to $00 is a pre-condition of all KERNAL routines. (The B register is preserved along with other registers during interrupt handling, so you don&#8217;t have to worry about confusing the KERNAL IRQ.)</p><p>To set the B register, put the desired value in the accumulator, then use the <code>tab</code> instruction (Transfer A to B). If you need to read the B register, transfer it back to the accumulator first, with <code>tba</code>. The requirement to go through A to set or read B sometimes requires a bit of register wrangling.</p><p>Another register consideration to keep in mind: Base Page Indirect Addressing always uses an index register. The <code>lda</code> instruction supports using the Y or Z registers as indexes for this mode. If you just want to use the address directly, you must set the index register to 0.</p><p>Here&#8217;s another version of the long message printer using Base Page Indirect addressing, preserving the zero page for the KERNAL and using page $16 for the program&#8217;s base page. Try to follow which register has which value:</p><pre><code><code>print_long_message_2:
    ; Y,Z = address
    lda #$16   ; A = $16
    tab        ; B = $16
    sty $00    ; $1600-$1601 = the message address
    stz $01
    ldy #0     ; Y = 0
.loop
    lda ($00),y  ; Load a character from the message address + Y
    beq .end     ; If the value is 0, end.
    tax          ; Stash the character in X so we can use A to set B.
    lda #0       ; A = 0
    tab          ; B = 0
    txa          ; A = the character
    jsr chrout
    lda #$16      ; A = 16
    tab          ; B = 16
    iny          ; Y = Y + 1
    bne .loop    ; If Y hasn't rolled over to 0, continue.
    inc $01      ; Y rolled over, so increment the high byte of
                 ; the message address.
    bra .loop    ; Continue.
.end
    lda #0
    tab
    rts</code></code></pre><p>This is not necessarily better than the earlier version using self-modifying code, especially with all the register flipping required. But it illustrates the use of base page variables as address pointers.</p><p>The 45GS02 CPU has another Base Page Indirect addressing mode, and it&#8217;s super useful: <strong>32-bit Base Page Indirect Addressing</strong> lets you use a 32-bit address instead of a 16-bit address. With the Acme assembler in MEGA65 mode, this is indicated using square brackets instead of parentheses. Only the Z register is supported as the index in this mode.</p><pre><code><code>    lda #$16
    tab

    ; Store the address $0001.F800 at base page address $00-$03
    lda #$00
    sta $00
    lda #$F8
    sta $01
    lda #$01
    sta $02
    lda #$00
    sta $03

    ; Store the value 7 at $0001.F800
    lda #7
    ldz #0
    sta [$00],z</code></code></pre><p>Notice that other addressing modes do not support 32-bit addresses, so we can&#8217;t use the self-modifying code method to access upper memory, at least not in the same way. We can adapt the second version of the printing routine to be able to print long messages from anywhere in the MEGA65&#8217;s memory with minimal changes, but we can&#8217;t adapt the first version as easily.</p><p>Earlier, I made a potentially unsafe assumption that the KERNAL used an address between $0000 and $FFFF for SCRNPTR in 80 x 25 mode, and I just ignored the upper bytes of the SCRNPTR address. With 32-bit base page indirect addressing, I don&#8217;t have to do that: I can just copy the entire address from SCRNPTR to a four-byte base page variable, then use 32-bit indirect addressing to access screen memory.</p><p>Incidentally, upper memory addresses $1.F800 through $1.FFFF are another way to access the first 2K of color memory, with no need to set the CRAM2K flag. In my implementation of robotfindskitten, I use base page $16 for variable storage, and base page indirect addressing for plotting characters with the full four-byte SCRNPTR address and for plotting colors to 1.F800. I set the B register to $16 at the beginning of the program, and wrap my KERNAL calls to set B to $00 before the call and set it back to $16 afterward.</p><p>As you can see, there are multiple ways to accomplish certain tasks. For high speed applications, you may need to make your choices based on the amount of CPU time each operation takes, measured in CPU cycles. Instruction cycle counts are listed in the manual. robotfindskitten is not speed critical, so I just went with what made my code easiest for me to understand.</p><div><hr></div><p>That&#8217;s a good start. With the KERNAL output routines and screen memory access, we have the tools to replicate BASIC&#8217;s <code>PRINT</code>, <code>T@&amp;()</code>, and <code>C@&amp;()</code> facilities in assembly language. Next month, we&#8217;ll look at another important KERNAL facility for accepting keyboard input, and some snazzy MEGA65 hardware features for generating random numbers and measuring time. We&#8217;ll close by designing data structures to access all of the item descriptions, and prevent two items from landing on the same place on the screen.</p><p>For comparison and enjoyment, here&#8217;s my BASIC version of robotfindskitten. It&#8217;s faithful to Leonard Richardson&#8217;s version, which is not particularly creative of me, but hopefully it serves as a useful reference implementation.</p><ul><li><p><a href="https://dansanderson.com/mega65/robot-finds-kitten-2/rfk-bas.prg">rfk-bas.prg</a> : robotfindskitten in BASIC 65; <a href="https://dansanderson.com/mega65/robot-finds-kitten-2/rfk-bas.txt">BASIC source code</a> in petcat format</p></li></ul><p>Happy coding! See you next month.</p><p>&#8212; Dan</p><p></p>]]></content:encoded></item><item><title><![CDATA[robotfindskitten, part 1]]></title><description><![CDATA[Dan&#8217;s MEGA65 Digest for October 2023]]></description><link>https://m65digest.substack.com/p/robotfindskitten-part-1</link><guid isPermaLink="false">https://m65digest.substack.com/p/robotfindskitten-part-1</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Fri, 13 Oct 2023 05:29:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q2A1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q2A1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q2A1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 424w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 848w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 1272w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q2A1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png" width="500" height="344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:344,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q2A1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 424w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 848w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 1272w, https://substackcdn.com/image/fetch/$s_!q2A1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d51d07-582b-482f-852a-4a37bc34ea85_500x344.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">robotfindskitten</figcaption></figure></div><p>A new month, a new feature, a new game, a new demo, and a coding exercise that really brings the room together. Let&#8217;s dig in!</p><h2>Available to test: New keyboard scanner</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J4vz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J4vz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J4vz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg" width="412" height="549.239010989011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:412,&quot;bytes&quot;:1932391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J4vz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J4vz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750d6528-2e83-4157-bc85-f84916ee87fd_3024x4032.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My new Linux PC for building MEGA65 cores.</figcaption></figure></div><p>We&#8217;re getting closer to having a complete release candidate, with features being finalized and bug fixes piling in. There&#8217;s one new feature that&#8217;s near and dear to my heart, and I&#8217;m thrilled to be able to share it with anyone up for early beta testing.</p><p>The very first thing I noticed when I got my MEGA65 is how the typing experience felt <em>nostalgic.</em> Even with the new mechanical key switches and the 40 MHz CPU, the ability for the computer to recognize key presses felt exactly like a Commodore 64 did back in the day: sluggish and imprecise. I like nostalgia as much as anybody, but I type much faster today than I did when I was nine years old. I wished my MEGA65 could handle fast typing more like a modern computer, so I could enjoy on-device composition without slowing myself down. It was one of the first feature requests that I filed with the MEGA65 team.</p><p>Paul and company started working on an idea for fast typing, and an early version of the chipset support required made it into the core last year. The feature wasn&#8217;t wired up to the KERNAL ROM, and only a few built-in applications used it. I brought it up again with the team this summer, and we had many design discussions and tried several ideas. I learned a bit of FPGA coding, and even built a high-speed Linux PC just to build and test new cores and ROMs.</p><p>I&#8217;m proud to present the all-new MEGA65 hardware-accelerated keyboard scanner. Using <a href="https://builder.mega65.org/job/mega65-core/job/development/">the latest development core</a> and <a href="https://files.mega65.org/?id=d4f6ef89-6dbf-4e5b-b23f-7822fc12ff24">ROM beta release</a>, you can now enjoy a typing experience that is more accurate and more reliable for fast typists throughout the BASIC screen editor and many applications. These changes will be in the v0.96 release, and you can test it today and <a href="https://github.com/MEGA65/mega65-rom-public/issues">file any bugs</a> you find. I also wrote <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/44204033/New+keyboard+scanner+v0.96+feature+candidate">a test plan and detailed description of how it works</a>.</p><p>I plastered this all over the instructions, but I'll repeat it here: the latest ROM beta versions (920387 or later) require the latest development core. If you use the newer ROM with an older core, typing won't work. You *can* safely use older ROMs with the newer core, so you can revert to the legacy keyboard scanner at any time if you encounter any issues just by going back to an older ROM (920386 or earlier). Also, the latest ROM betas will not work with the Xemu emulator until emulation for the new core feature has been added (hopefully soon), so stick with 920386 or earlier in Xemu for now.</p><p>For me, the difference with the enhanced typing quality is like night and day. On-device programming and other typing applications are much more usable, and I just enjoy using the computer much more, confident that I won&#8217;t have to struggle with missed keystrokes. Try it out, and let me know what you think!</p><h2>Classy, by deathy</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!glN-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!glN-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!glN-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!glN-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!glN-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!glN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png" width="705" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19305,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!glN-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 424w, https://substackcdn.com/image/fetch/$s_!glN-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 848w, https://substackcdn.com/image/fetch/$s_!glN-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 1272w, https://substackcdn.com/image/fetch/$s_!glN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b235626-bf88-4ffd-869e-c5f6565b827d_705x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Classy, by deathy.</figcaption></figure></div><p><a href="https://files.mega65.org/?id=3549b82b-b851-41ec-a8d9-918996a4d2ea">Classy</a>, by deathy, is a new match-3 game for the MEGA65. Careful with this one: it&#8217;s addictive! A joystick in either port or the keyboard sets you on your tile swapping journey. If the game is still running, it means you still have moves remaining. Keep looking!</p><h2>MEGApple, by MirageBD</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OBwE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OBwE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 424w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 848w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 1272w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OBwE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png" width="1108" height="919" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:919,&quot;width&quot;:1108,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97293,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OBwE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 424w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 848w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 1272w, https://substackcdn.com/image/fetch/$s_!OBwE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89f2fd73-c5f8-44a3-ab2c-94bec3a09d72_1108x919.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MEGApple, by MirageBD.</figcaption></figure></div><p>The MEGA65 gets its <a href="https://en.wikipedia.org/wiki/Bad_Apple!!">Bad Apple!!</a></p><p><a href="https://files.mega65.org/?id=2b32fbaf-f78b-47db-b919-564eba9ddab1">MEGApple</a> is MirageBD&#8217;s MEGA65 version of the popular demo challenge: recreate <a href="https://knowyourmeme.com/memes/bad-apple">the shadow-art music video</a> of the Japanese pop song, &#8220;Bad Apple!!&#8221; <a href="https://www.youtube.com/watch?v=FtutLA63Cp8">The original video</a> was a collaboration of animators on the Japanese website <a href="https://knowyourmeme.com/memes/sites/niconico">Nico Nico Douga</a>, based on the pop remix by <a href="https://en.wikipedia.org/wiki/Nomico">nomico</a> of a track from the video game <a href="https://en.touhouwiki.net/wiki/Lotus_Land_Story">Touhou Fantasy Land: Lotus Land Story</a>. Over a decade later, it persists as a popular meme to recreate the music video in unusual media, including (but not limited to) retro computers.</p><p>To run MEGApple, download and expand the archive, then copy the files to the root of your SD card. Start your MEGA65, then type: <code>MOUNT "MEGAPPLE.D81":RUN "*"</code> The program on the D81 disk image loads the data from the other larger files.</p><h2>Xevious, new arcade core by muse</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ORmI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ORmI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ORmI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg" width="317" height="507.2" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:625,&quot;resizeWidth&quot;:317,&quot;bytes&quot;:450985,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ORmI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ORmI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecd80b3b-6979-43ff-aa53-86102695c7ee_625x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Xevious (1982).</figcaption></figure></div><p>muse has a new arcade cabinet core for us! <a href="https://files.mega65.org/?id=d32474e9-6f30-48f8-bba3-167cad4bbc4f">Xevious</a> (1982) and Super Xevious (1984) are early vertical scrolling shooter games by Namco. Fly your Solvalou starship over the planet&#8217;s surface to stop the Xevious forces by both land and sky. muse&#8217;s version supports a one-button joystick with a clever adaptation: press the button quickly to shoot at airborne enemies, and hold the button to drop bombs on turrets.</p><p>As with the Galaga core, <a href="https://github.com/sho3string/XeviousMEGA65">the installation instructions</a> include searching for and downloading the original Xevious ROM files, running a Python script to validate the files and prepare a folder that you copy to your MEGA65&#8217;s SD card with the path <code>/arcade/xevious</code>, then installing the core in an available core slot. See <a href="https://discord.com/channels/719326990221574164/801767398675316756/1161247938543108116">the Discord announcement</a> for additional notes.</p><h2>robotfindskitten</h2><blockquote><p>&#8220;Yet another zen simulation.&#8221; &#8212; <a href="http://robotfindskitten.org/">robotfindskitten.org</a></p></blockquote><p>In robotfindskitten, you are a robot, who finds a kitten.</p><p><a href="https://en.wikipedia.org/wiki/Robotfindskitten">robotfindskitten</a> was originally written by <a href="https://www.crummy.com/self/">Leonard Richardson</a> in 1997 for DOS, as his submission to the robotfindskitten contest put on by the webzine &#8220;Nerth Pork.&#8221; It took first prize. There were no other entries, but there didn&#8217;t need to be. The theme had found its perfect expression on the first try.</p><p>In the decades that followed, many have made their own versions of the simulation, on many interactive platforms. And now, it is your turn.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mRiA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mRiA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 424w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 848w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 1272w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mRiA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png" width="484" height="316" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:316,&quot;width&quot;:484,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3160,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mRiA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 424w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 848w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 1272w, https://substackcdn.com/image/fetch/$s_!mRiA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ade640b-0c5c-4052-81ba-e34ae5605e32_484x316.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">robotfindskitten, by Leonard Richardson</figcaption></figure></div><p>Richardson&#8217;s version depicts the robot with a single colored ASCII character on a monospaced field that spans the screen. The field is populated sparsely with other colored ASCII characters that represent many Non-Kitten Items (NKIs), and one kitten. To the robot, all items, including the kitten, appear as random colored characters. The operator uses cursor keys to move the robot around the field. When the robot comes into contact with an item, a message is printed describing the item. If the item is the kitten, the experience ends in joyful celebration.</p><p>You can <a href="http://robotfindskitten.org/play/robotfindskitten/">play robotfindskitten in your browser</a>. Or, you can install a version for a modern terminal for Linux (<code>sudo apt install robotfindskitten</code>) or macOS (<code>brew install robotfindskitten</code>) or <a href="http://robotfindskitten.org/aw.cgi?main=software.rfk">many other platforms</a>. (Some versions are survived only by their <a href="http://robotfindskitten.org/shots/">archived screenshots</a>.) Or you can <a href="https://github.com/robotfindskitten/robotfindskitten">build the Linux version from source</a>. Or you can check out <a href="https://www.crummy.com/software/robotfindskitten/">the Ultimate robotfindskitten Fan Site</a>, by Leonard himself.</p><p>Or you can make your own. Here are some techniques that you might use to rise to this challenge in BASIC 65. Next month, we&#8217;ll look at how to do similar things in assembly language.</p><h3>Display</h3><p>You will need to control what is displayed on the screen, so the operator can see the robot and the items.</p><p>To clear the screen of all text, you can use the <code>SCNCLR</code> command. To set the color of text to be printed (from 0 to 31): <code>COLOR number</code>. Similarly, to change the color of the border or background: <code>BORDER number</code> or <code>BACKGROUND number</code>. To set the position of where the next text will be printed: <code>CURSOR column, row</code>. To print a string of text at the current cursor position: <code>PRINT string</code>.</p><p>One word of caution with <code>PRINT</code>: if the string you are printing extends beyond the right edge of the screen, the screen below that point will scroll down by one line. This probably isn&#8217;t what you want in this exercise, so take care with the length and position of your strings.</p><p>To plot a single character at a set of coordinates, you can assign the <a href="https://sta.c64.org/cbm64scr.html">screen code</a> of the character to the <code>T@&amp;</code> array, and its color to the <code>C@&amp;</code> array. These are two dimensional arrays, with the first index referring to the column and the second index referring to the row. <code>T@&amp;(0,0)=1</code> plots the letter <code>A</code> to the leftmost topmost position. (1 is the screen code for the <code>A</code> character. Notice that screen codes are not PETSCII codes.) <code>C@&amp;(0,0)=5</code> paints it green. You can read screen codes and colors from these arrays as well: <code>IF T@&amp;(0,0)=1 THEN ...</code> and so forth.</p><p>Recall that <a href="https://dansanderson.com/mega65/petscii-codes/">PETSCII codes in strings</a> give you further control of the display via the <code>PRINT</code> command. <code>PRINT CHR$(14)</code> switches the display to the lowercase character set. Be aware that not all PETSCII graphics characters are available in the lowercase set.</p><p>Here is a short program that clears the screen, switches to lowercase, and plots all of the available screen codes:</p><pre><code><code>100 COLOR 1
110 SCNCLR
120 PRINT CHR$(14)
130 FOR R=0 TO 3
140 FOR C=0 TO 63
150 T@&amp;(C,R)=R*64+C
160 NEXT C
170 NEXT R
180 CURSOR 0,5</code></code></pre><h3>Input</h3><p>To accept keyboard input, use either <code>GET variable</code> or <code>GETKEY variable</code>. These both take a variable name as their parameter. Given a string variable (such as <code>A$</code>), the key being pressed is loaded into the variable as a single-character string. Given a number variable (such as <code>A</code>), it is loaded as a PETSCII code. <code>GETKEY</code> pauses until a key is pressed. <code>GET</code> will not wait: if no key is pressed, it assigns an empty string or a zero, and moves on. If you want <code>GET</code> or <code>GETKEY</code> to provide the PETSCII code as a number, be sure to use a byte type variable, so that the number is in the range 0 to 255: <code>GET K&amp;</code>.</p><pre><code><code>10 GETKEY K&amp;
20 PRINT K&amp;
30 GOTO 10</code></code></pre><p>Alternatively, you can accept joystick input using the <code>JOY()</code> function. The function takes the port number as an argument (1 or 2), and returns a number 0 through 8 indicating the state of the joystick. 0 says the joystick is centered. All other numbers indicate a direction, starting with 1 for &#8220;up&#8221; and going clockwise: 2 for &#8220;up-right,&#8221; 3 for &#8220;right,&#8221; and so forth.</p><h3>Chaos</h3><p>The items are assigned random characters, colors, and positions, so you&#8217;ll need a way to generate randomness. The <code>RND()</code> function generates numbers using a pseudo-random number generation algorithm. The function takes an argument that determines the &#8220;seed&#8221; for the algorithm. For most purposes, an argument of 1 suffices: <code>RND(1)</code>. The function evaluates to a random fractional number between 0 and 1. To generate numbers within a range of integers, multiply the result by the size of the range, then take the <code>INT()</code> of the result to lop off the fractional part. <code>INT(RND(1)*80)</code> generates a random integer between 0 and 79.</p><p>If you want the range of possible values to start at a value other than zero, do the inner multiplication by the size of the range, then add the starting value. <code>INT(RND(1)*77)+1</code> generates a random integer between 1 and 77.</p><p>The following program plots randomly colored random characters when one of the cursor keys is pressed. See if you can figure out what the variables <code>CL</code>, <code>CH</code>, <code>RL</code>, and <code>RH</code> do.</p><pre><code><code>100 SCNCLR
110 CL=0:CH=79:RL=0:RH=24
120 GET K&amp;
130 IF K&amp;&lt;&gt;17 AND K&amp;&lt;&gt;29 AND K&amp;&lt;&gt;145 AND K&amp;&lt;&gt;157 THEN 120
140 IF K&amp;=17 THEN RL=12 : REM CURSOR DOWN
150 IF K&amp;=29 THEN CL=40 : REM CURSOR RIGHT
160 IF K&amp;=145 THEN RH=12 : REM CURSOR UP
170 IF K&amp;=157 THEN CH=40 : REM CURSOR LEFT
180 C=CL+INT(RND(1)*(CH-CL))
190 R=RL+INT(RND(1)*(RH-RL))
200 T@&amp;(C,R)=INT(RND(1)*256)
210 C@&amp;(C,R)=INT(RND(1)*16)
220 GOTO 110</code></code></pre><p>Like the Commodore 64, a positive argument generates a new number based on the previously generated number. Unlike the Commodore 64, the algorithm is initially seeded from the MEGA65&#8217;s Real-Time Clock during boot, so you are unlikely to see the same sequence twice with <code>RND(1)</code>.</p><p>Tip: For RFK, you probably want to prevent randomly selected values from repeating. A simple way to avoid this is to keep track of previously selected values, such as in an array, and scan the array each time a new value is chosen. If it&#8217;s in the array, restart the process to pick another value. Once a unique value is found, add it to the end of the array. In my version, I used this technique to avoid two items from appearing at the same location, and to ensure that each item uses a unique PETSCII character and a unique description.</p><h3>Calm</h3><p>To animate the joyful celebration at the end, you&#8217;ll need a way to pause between frames of an animation. The <code>SLEEP seconds</code> command pauses the program for the given number of seconds. The number can be fractional.</p><pre><code><code>10 FOR X=1 TO 5
20 PRINT CHR$(211);
30 SLEEP 0.6
40 NEXT X
50 PRINT</code></code></pre><h3>Data</h3><p>Each Non-Kitten Item in robotfindskitten gets assigned a description at random when the item is created. One way to put a large list of descriptions in a BASIC program is with <code>DATA</code> statements. These statements don&#8217;t do anything when encountered by control flow. Instead, they make values available to the <code>READ</code> statement, which finds the next unread value and puts it in a variable.</p><p>A traditional BASIC technique is to read the number of elements from the first <code>DATA</code> statement, <code>DIM</code>ension an array of that size, then <code>READ</code> that many elements into the array. The program can then access any string from the array by its number index. This is a bit wasteful. It keeps two copies of the list in memory: one in the BASIC program listing, and another in variable memory. It also introduces a delay at the beginning of the program to load all of the elements into the array. The primary advantage is that each element can be accessed instantly by index.</p><p>In BASIC 65 (and BASIC 7 for the Commodore 128), there&#8217;s a better way: use sequential line numbers for the <code>DATA</code> statements, then use the <code>RESTORE</code> command to set the <code>READ</code> pointer to a given line number. <code>RESTORE</code> accepts a number expression for the line number, so you can select a string programmatically by number.</p><pre><code><code>10 READ N
20 K=INT(RND(1)*N)+1
30 RESTORE 1000+K
40 READ NK$
50 PRINT NK$
60 GETKEY A$
70 GOTO 20
1000 DATA 5
1001 DATA "THAT'S JUST AN OLD TIN CAN."
1002 DATA "IT'S AN ALTAR TO THE HORSE GOD."
1003 DATA "A BOX OF DANCING MECHANICAL PENCILS. THEY DANCE! THEY SING!"
1004 DATA "IT'S AN OLD DUKE ELLIGTON RECORD."
1005 DATA "A BOX OF FUMIGATION PELLETS."</code></code></pre><p>A <code>DATA</code> statement has a special syntax to allow for string values that contain almost any character: values are separated with commas, and a value that starts with a double-quote contains every character (including commas) up to the next double-quote. This requires special handling if you want a string value to contain a double-quote character. Because NKI descriptions only use letters, numbers, and punctuation, one solution is to use a special character as a substitute for double-quotes, then replace it in code:</p><pre><code><code>41 FOR I=1 TO LEN(NK$)
42 IF MID$(NK$,I,1)="&#163;" THEN MID$(NK$,I,1)=CHR$(34)
43 NEXT I

1000 DATA 6

1006 DATA "IT'S A DVD OF &#163;CROUCHING MONKEY, HIDDEN KITTEN&#163;, REGION ENCODED FOR THE MOON."</code></code></pre><p>You can use <a href="https://www.crummy.com/software/robotfindskitten/nki/vanilla.nki">the original list of 406 NKI descriptions</a>, or write your own. The truly patient can type all of these into <code>DATA</code> statements by hand, a zen experience of its own. Or you can use one of these that I made for you:</p><ul><li><p><a href="https://dansanderson.com/mega65/robot-finds-kitten/nkis_upper.bas">nkis_upper.bas</a> / <a href="https://dansanderson.com/mega65/robot-finds-kitten/nkis_upper.prg">nkis_upper.prg</a> : uppercase character set</p></li><li><p><a href="https://dansanderson.com/mega65/robot-finds-kitten/nkis_lower.bas">nkis_lower.bas</a> / <a href="https://dansanderson.com/mega65/robot-finds-kitten/nkis_lower.prg">nkis_lower.prg</a> : lowercase character set</p></li></ul><h3>Structure</h3><p>Your program will have at least a few phases of operation, such as one to decide on the locations and appearances of the items, and another where the player is moving the robot. Each phase will be a section of lines in your program. BASIC executes lines in a given section to produce the experience of that phase. To transition from one phase to another, the program directs BASIC to <code>GOTO</code> a line in the appropriate section.</p><p>I based my RFK experience on Richardson&#8217;s version, which can be described as four phases:</p><ol><li><p><strong>Introduction.</strong> Display an intro message, then wait for a keypress. When a key is pressed, proceed to phase 2.</p></li><li><p><strong>Initialization.</strong> Set up and draw the items on the screen, set the initial robot position. When complete, proceed to phase 3.</p></li><li><p><strong>Game loop.</strong> Listen for player input, move the robot, display NKI descriptions. When the robot finds the kitten, proceed to phase 4.</p></li><li><p><strong>Ending.</strong> Animate the joyful experience, then wait for a keypress. When a key is pressed, return to phase 1.</p></li></ol><p>My program code also ends with the NKI descriptions as a fifth section of data statements. Control never reaches this section, because <code>DATA</code> statements do not need to be performed like other commands. (The <code>READ</code> statement in an earlier section accesses this data.)</p><p>One of the best things about BASIC is how it makes it easy to write and test each section separately. To start a section from the <code>READY.</code> prompt, provide the first line number to the <code>RUN</code> command:</p><pre><code><code>RUN 300</code></code></pre><p>You can temporarily add a <code>STOP</code> statement in the program to cause execution to return to the <code>READY.</code> prompt at that point. You can use commands to inspect the state of program variables, such as: <code>?NK$</code> When you are ready to resume execution of the program, type the <code>CONT</code> command. You can even assign new values to variables while paused, and it&#8217;ll use the new values when you continue the program. Don&#8217;t forget to remove the <code>STOP</code> statements when you no longer need them.</p><h3>When you&#8217;re finished</h3><p>As amusing as it would be for everyone to upload their RFK experiences to Filehost, that might not be the most polite use of the site. Let&#8217;s do this instead: <a href="mailto:contact@dansanderson.com">send me a photo or screenshot of your robotfindskitten experience</a>. I will try to feature a selection of submitted photos in an upcoming issue of the Digest.</p><p>If you have any questions about BASIC programming or would like to discuss the exercise, let&#8217;s meet up in the <code>#basic</code> channel of <a href="https://mega65.org/chat">the Discord chat</a>. I&#8217;m usually there.</p><div><hr></div><p>Next month, I&#8217;ll share my BASIC RFK implementation, and we&#8217;ll look at similar tools for making an RFK game in assembly language. See you then!</p><p>&#8212;&nbsp;Dan</p>]]></content:encoded></item><item><title><![CDATA[Survey 2023 Results]]></title><description><![CDATA[Dan's MEGA65 Digest for September 2023]]></description><link>https://m65digest.substack.com/p/survey-2023-results</link><guid isPermaLink="false">https://m65digest.substack.com/p/survey-2023-results</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Sat, 16 Sep 2023 09:14:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wCHR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wCHR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wCHR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 424w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 848w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 1272w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wCHR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png" width="500" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20047,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wCHR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 424w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 848w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 1272w, https://substackcdn.com/image/fetch/$s_!wCHR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F895a0894-f1d7-482a-9722-f972ed46e53a_500x343.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Survey 2023 Results</figcaption></figure></div><p>The MEGA65 Community Survey 2023 is now complete! It opened on August 14, ran for three weeks, and received 509 submissions. <em>A HUGE thank you</em> to everyone who submitted!</p><p>Let&#8217;s do a quick update, then onto the results!</p><h2>Release testing update</h2><p>We do not yet have a formal release candidate for the upcoming v0.96 release, which is intended to be the factory installed release for the next delivery batch. We are still waiting on test hardware for the revision 5 main board to arrive. Once it does, we will clean up the changes and document a formal test process that you can try on your own computer.</p><p>In the meantime, we&#8217;re sharing out early test plans for some major features. Before I get you all excited about early availability, please know that what&#8217;s currently available is <em>not</em> the release candidate. By definition, development versions are riskier than release candidates, and do not necessarily represent what will be in the release candidate.</p><p>In particular, <em>do not attempt to flash a development core to slot 0</em> unless you own a JTAG adapter and know how to use it to recover from a broken state. Keep a stable core in slot 0, and use any other slot for the development core. We&#8217;re working on making it safer to upgrade slot 0 without a JTAG adapter, but this is not yet ready for testing by people that don&#8217;t actually have one.</p><p>While it is possible to have multiple MEGA65 cores installed and switch between them, this is not the case for system software files (<code>.M65</code> files) on the SD card. We haven&#8217;t noticed any issues using newer system software with the earlier stable core, but keep this in mind while troubleshooting issues.</p><p>Here are the development builds of the platform components:</p><ul><li><p><a href="https://builder.mega65.org/job/mega65-core/job/development/">mega65-core development builds</a>; the <code>mega65r3</code> build is for production units and DevKits</p></li><li><p><a href="https://builder.mega65.org/job/mega65-tools/job/development/">mega65-tools development builds</a>; macOS versions can be built from <a href="https://github.com/mega65/mega65-tools/tree/development">the development branch of the repo</a></p></li><li><p><a href="https://files.mega65.org/?id=d4f6ef89-6dbf-4e5b-b23f-7822fc12ff24">Latest ROM beta release</a> (owner registration required); <a href="https://files.mega65.org/?id=22f1eb6c-3df5-43c4-a584-e8212fc80b9d">patch files</a> (free access, <a href="https://files.mega65.org/?ar=145591dd-deb6-4bd0-aa89-8e39cd021470">patching instructions</a>)</p></li></ul><h3>Available to test: Ethernet file transfer</h3><p>You are invited to help test Ethernet file transfer, a feature in the development version of the core and tools. See <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/29327361/Ethernet+tools+mega65+ftp+and+etherload">these instructions for testing Ethernet-based file transfer</a>. You&#8217;ll want to be familiar with your PC&#8217;s command line interface, as the file transfer tools are currently only available in command line form.</p><p>A few things to notice:</p><p>The core download includes a new system software file, <code>ETHLOAD.M65</code>, so be sure to copy that file to the SD card.</p><p>This feature exposes the MEGA65 to be controlled remotely by another computer over a network. As a safety measure, the feature is locked by a DIP switch on the main board. You will need to open the case to set DIP switch #2 to the &#8220;on&#8221; position.</p><p>You can connect your MEGA65 to your local network router, or directly to a PC using an Ethernet cable. You provide the file transfer tool with an available IP address on your local network, so you will need to know how your local network or PC networking settings are configured. Typically, the IP address of your computer&#8217;s network interface and the subnet mask together indicate the IP address range for the local network. When using a router, you will need to configure your router to reserve an IP address for the MEGA65, so that it doesn&#8217;t assign it to another device. (The MEGA65 doesn&#8217;t support DHCP directly.)</p><p>You enable a remote control session on the MEGA65 by pressing the <strong>Shift</strong> + <strong>Pound</strong> key combination. The power light will blink to indicate that it is listening to the network. You can then run the <code>mega65_ftp</code> command-line tool to transfer files.</p><p>Give it a go, and ask questions in the <a href="https://discord.com/channels/719326990221574164/1141635435702014014">Ethernet Tools Testing thread</a> on Discord.</p><h3>Available for review: User&#8217;s Guide, 2nd edition</h3><p>The next delivery batch will include a fresh printing of the User&#8217;s Guide. We&#8217;ve taken this opportunity to overhaul the Guide, update it with new information for the v0.96 release and R5 main board, and do a cover-to-cover editing pass over the whole thing including the BASIC reference. The BASIC quick reference card has also been updated, and there&#8217;s a snazzy new cover image. There are a few remaining to-do items related to features that are still in progress.</p><p><a href="https://builder.mega65.org/job/mega65-user-guide/job/master/lastSuccessfulBuild/artifact/mega65-userguide.pdf">Download the latest User&#8217;s Guide PDF</a>, <a href="https://github.com/MEGA65/mega65-user-guide/issues">file documentation issues on Github</a>, and discuss in the <a href="https://discord.com/channels/719326990221574164/720355877701550131">#manual channel</a> on the Discord.</p><h2>MEGA65 Community Survey 2023 Results</h2><p>The following report attempts to summarize results while preserving the anonymity of respondents. Free text responses will be kept private and will not be quoted verbatim in this report. I will be summarizing based on my own judgement, and I will withhold outliers to preserve privacy. Please know that even if your opinion doesn&#8217;t seem represented in the report, your free text responses will still be read by the MEGA65 team.</p><p>I will attempt to base conclusions on numerical data where possible. Interpretation of free text responses will inevitably be biased. This bias reflects on me and not the opinions of the MEGA65 team. Similarly, I designed the survey and am solely responsible for flaws and biases in the way questions were structured and worded. This will be pretty casual.</p><h2>Owners and non-owners</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d95N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d95N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 424w, https://substackcdn.com/image/fetch/$s_!d95N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 848w, https://substackcdn.com/image/fetch/$s_!d95N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 1272w, https://substackcdn.com/image/fetch/$s_!d95N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d95N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png" width="1001" height="319" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:319,&quot;width&quot;:1001,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33054,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d95N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 424w, https://substackcdn.com/image/fetch/$s_!d95N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 848w, https://substackcdn.com/image/fetch/$s_!d95N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 1272w, https://substackcdn.com/image/fetch/$s_!d95N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea16cd4a-9ccd-49ff-91e5-6b72e0a706b1_1001x319.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The survey asked respondents whether they currently own a MEGA65, have one on preorder, are still considering placing an order, are not considering an order, or may have previously owned a MEGA65 and no longer do. Owners were shown additional questions about the configuration of their machine. Non-owners were given additional opportunities to explain their interests and concerns.</p><p>This is a control question for interpreting other responses, and is not a useful indicator of a single population on its own. The relative sizes of the categories only describe the response pool, not the MEGA65 community at large. The survey was promoted in various channels that tend to skew variously towards owners (such as the Digest, Discord) or non-owners (such as Commodore user groups), and non-owners were encouraged to reply, with the rough guidance that anyone who has heard about the MEGA65 is invited.</p><p>When the survey was sent, approximately 900 MEGA65s had been delivered. This helps extrapolate potential population counts from a sample of the owner category. 218 respondents said they own a MEGA65, which is 24% of all owners. In contrast, there is no good way to extrapolate answers from a sample of non-owners to a larger population.</p><p>For some questions asked of all respondents, ownership status has a natural influence on responses. Someone is more likely to engage with community resources after they have received their computer. For example, 86% of current owners said they are aware of the Xemu emulator, compared to 58% of respondents who have not yet placed an order.</p><p>I will try to separate results by ownership status where there appears to be significant difference. <em>This does not intend to imply that responses from any particular group are more or less important.</em> There are many non-owners that make major contributions to the community, as well as owners that have not yet engaged with the project. Grouping is merely a crude way to control for differences in sampling.</p><h2>What&#8217;s interesting about the MEGA65</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N5Wb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N5Wb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 424w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 848w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 1272w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N5Wb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png" width="1415" height="1135" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1135,&quot;width&quot;:1415,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N5Wb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 424w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 848w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 1272w, https://substackcdn.com/image/fetch/$s_!N5Wb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f16d97-62d5-47da-b504-d62da0eea809_1415x1135.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The survey offered a list of possible reasons why someone might be interested in the MEGA65 project, and asked for zero or more selections. Raw data from multi-select questions can be difficult to interpret, especially when the question is phrased like a buffet of ideas or desires. The survey could have asked respondents to rank these, or pick a primary reason, but that felt too limiting.</p><p>Many respondents are interested in collecting vintage computers, reproducing the experience of the Commodore 65 prototype, and leveraging the MEGA65&#8217;s FPGA to reproduce the experiences of other Commodore 8-bit computers. The MEGA65 project&#8217;s goal of staying connected to history has always been a balancing act between recreating an incomplete, unreleased, and ultimately canceled design, and completing and extending that design to be practical and fun to use in the 21st century. As invigorating as it is to see the MEGA65 as an opportunity to design a new 8-bit computer, it is important to the community that the MEGA65 project values historical preservation.</p><p>Several of the options discuss programming, which is also repeated later in the survey. Many respondents want to run MEGA65 software written by others, write programs for their own enjoyment, and/or write programs for others to use. I&#8217;m personally gratified to see 19% said they want to use the MEGA65 as a platform for learning how to program computers in general. I&#8217;m also excited to see 19% said they want to learn FPGA programming. There&#8217;s a lot of potential for the MEGA65 to be an all-in-one FPGA learning platform, especially with the <a href="https://github.com/sy2002/MiSTer2MEGA65">MiSTer2MEGA65 template</a> as a starting point.</p><p>We can try to relate interest in recreating Commodore computers and interest in programming. 68% selected at least one of the Commodore recreation options. 72% selected at least one programming-related option. 50% of all respondents selected at least one option in both of the re-creation and programming categories.</p><p>This section included a free-text prompt for mentioning other interests and motivations. Many took this opportunity to elaborate on their interest in using the MEGA65 as a Commodore 64, and potentially other Commodore computers, with several people appreciating that new hardware is more available and less likely to fail than vintage hardware. Others gave details about their interests in programming, with some specifically interested in FPGA development. Quite a few people praised the project for its nostalgic feel, and called out wanting to participate in the MEGA65 community.</p><p>The survey asked follow-up questions to people who said they don&#8217;t use their MEGA65 or are not interested in ordering. The most common concerns are the price being too high and software being too scarce. (The survey phrased this as &#8220;Not enough software,&#8221; which was intended as &#8220;Not enough new third-party MEGA65-platform software.&#8221;) I won&#8217;t share specifics on these questions publicly due to low response rates in these categories, but all individual concerns will be seen by the team.</p><h2>Platform versions</h2><p>The survey asked owners to identify when they received their computers, to determine which delivery batch they received. We know that batch 1 (from mid-2022) and batch 2 (from early 2023) each delivered 400 units. Of these, 35% of batch 1 owners and 16% of batch 2 owners responded to the survey. This might indicate that batch 2 recipients are less engaged with our communication channels than batch 1 recipients.</p><p>(This is not to be confused with the proportions within the responses. Among respondents who said they owned a MEGA65, 64% said batch 1, and 29% said batch 2.)</p><p>I asked owners how often they use their MEGA65s. Batch 2 owners are slightly more likely to be using their computers more frequently than batch 1 owners, which would make sense if batch 1 owners have had more time to move on to other projects.</p><ul><li><p>&#8220;More than once per week:&#8221; 19% of batch 1, 23% of batch 2</p></li><li><p>&#8220;A few times per month:&#8221; 37% of batch 1, 32% of batch 2</p></li><li><p>&#8220;Less often than once per month, but occasionally:&#8221; 29% of batch 1, 37% of batch 2</p></li><li><p>&#8220;I used it some when I first got it, but I don&#8217;t use it any more:&#8221; 13% of batch 1, 6% of batch 2</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pvsb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pvsb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 424w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 848w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 1272w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pvsb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png" width="1181" height="631" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58290,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pvsb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 424w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 848w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 1272w, https://substackcdn.com/image/fetch/$s_!pvsb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb933fc33-53bd-4ead-a28a-b24e5155beca_1181x631.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The MEGA65 platform (core, ROM, and system software) is upgradable, and the MEGA65 team continues to improve the platform and issue new releases to be installed at the factory for each delivery batch, and made available to everyone as upgrades. Batch 1 owners started out with Release v0.9 and were invited to upgrade to Release v0.95, which was the default for batch 2. We&#8217;ve tried to make upgrading as easy a process as possible, but it&#8217;s not clear how easy it is to learn that new versions are available, or learn how to upgrade.</p><p>I&#8217;m pleased to see that 72% of owners have upgraded their MEGA65 at least once. Naturally, more batch 1 owners upgraded than batch 2 owners, because batch 2 owners started with the current stable release. Quite a few batch 2 owners reported having upgraded, likely to help beta test new features. Excellent!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kaMk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kaMk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 424w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 848w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 1272w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kaMk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png" width="1181" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44586,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kaMk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 424w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 848w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 1272w, https://substackcdn.com/image/fetch/$s_!kaMk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9371ac-720a-413a-b2e5-e7c007cc3d29_1181x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>17% of batch 1 owners report having not upgraded. The survey didn&#8217;t ask why they did not upgrade, but given the benefits of upgrading, it&#8217;s worth taking this as an indication that these owners may not know about the newer releases, or may not know how to upgrade.</p><p>Everyone who said they have upgraded was asked what they have for their default core and MEGA65 ROM. Options included the MEGA65 stable release cores and ROMs, newer test versions of each, non-MEGA65 cores, and MEGA65-compatible ROMs such as the C65 prototype ROMs or the MEGA65 Open ROM project. In the following charts, I have included people who said they did not upgrade (and so were not asked which core or ROM they are running) in the results for the stable releases based on their reported delivery batch.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y7zV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y7zV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 424w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 848w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 1272w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y7zV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png" width="1262" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1262,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59019,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y7zV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 424w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 848w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 1272w, https://substackcdn.com/image/fetch/$s_!y7zV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba527c2a-0f06-48cd-aa2c-39286709949b_1262x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NiJ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NiJ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 424w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 848w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 1272w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NiJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png" width="1313" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1313,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60028,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NiJ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 424w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 848w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 1272w, https://substackcdn.com/image/fetch/$s_!NiJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60784921-2f51-4c42-b91b-b9a05d391550_1313x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>21% of owners admitted that they do not know which core or ROM (or both) that they have installed. I would guess many of these might be people who were not in a position to check their version numbers when they took the survey. This could also suggest that we can do a better job making this information easier to find. While it&#8217;s an authentic retro experience to not know or care about the chipset and ROM version of a vintage Commodore, it&#8217;s important that we help everyone keep up with updates so that they get the most out of their machines.</p><p>The survey also asked which cores everyone has installed, regardless of slot. 54% of owners have the C64 for MEGA65 core installed. Once again aggregating responses from people who said they have never upgraded:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BQMQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BQMQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 424w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 848w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 1272w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BQMQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png" width="1332" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1332,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73395,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BQMQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 424w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 848w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 1272w, https://substackcdn.com/image/fetch/$s_!BQMQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761b3279-af1d-4a45-a754-9d586de9a5a7_1332x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h2>Video and audio configuration</h2><p>Owners were asked several questions about their video and audio configuration, and peripherals they are using.</p><p>81% reported using the PAL video mode as their primary mode. Of these, 17% reported that their display <em>only</em> supports PAL.</p><p>Similarly, 18% reported using the NTSC video mode as their primary mode. Of these, 24% reported that their display <em>only</em> supports NTSC.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VpCM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VpCM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 424w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 848w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 1272w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VpCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png" width="1165" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1165,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55301,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VpCM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 424w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 848w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 1272w, https://substackcdn.com/image/fetch/$s_!VpCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaed966d-adc4-49d5-b10a-7bdeabffcd0b_1165x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>56% of owners reported that their display supports both PAL and NTSC display modes, so they can run software that switches to either mode. 24% reported that they do not know whether their display supports both modes.</p><p>The survey asked which video and audio outputs you used primarily. Some displays support more than one input. (I actually keep both DVI and VGA connected so I can switch between them as needed.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WZJ6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WZJ6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 424w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 848w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 1272w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WZJ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png" width="1168" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31651,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WZJ6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 424w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 848w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 1272w, https://substackcdn.com/image/fetch/$s_!WZJ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d59e1d-9f1b-41e4-8d69-521630c155ce_1168x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nLHA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nLHA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 424w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 848w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 1272w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nLHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png" width="1168" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33817,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nLHA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 424w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 848w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 1272w, https://substackcdn.com/image/fetch/$s_!nLHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aaef976-5145-416c-acc3-ec09eddc9eb2_1168x433.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I asked everyone to name the make and model of their display, as free-text. Not everyone knew their make or model, but many attempted to answer. I was hoping to compile a list of recommendations of displays that support both PAL and NTSC. Not surprisingly, almost everyone was using a different model of display.</p><p>The most reported single model was the <a href="https://www.dell.com/en-us/shop/dell-19-monitor-p1917s/apd/210-aiij/monitors-monitor-accessories">Dell P1917S</a>, a 19" 5:4 flat panel LCD display that has both DVI and VGA inputs and supports both PAL and NTSC, and you can still buy it new. It doesn&#8217;t have built-in sound, so get a pair of powered computer speakers with a 3.5 mm audio input. Note that the Dell soundbar for this model is USB audio only and won&#8217;t work with the MEGA65. I have used this model, as well as a vintage Dell 2001FP with an older soundbar with a 3.5 mm audio jack. I can report that the P1917S handles the VGA signal much better than the 2001FP, and the P1917S doesn&#8217;t freak out about sound over HDMI either the way the 2001FP does for DVI video.</p><p>I also asked about video capture equipment. Only a few people said they use it, primarily for making or streaming video of their MEGA65. Generic HDMI-to-USB capture devices seem to work just fine. I use an <a href="https://www.elgato.com/us/en/p/cam-link-4k">Elgato Cam Link</a> for this purpose, and I got a <a href="https://www.cloner-alliance.com/cloneralliance-box-pro/">ClonerAlliance Box Pro</a> based on a recommendation from <a href="https://www.youtube.com/channel/UCjdKGdIl5leQfhJZiHUYFbQ">retroCombs</a> which I also like a lot.</p><h2>Peripherals and supplies</h2><p>I asked everybody (not just owners) about what&#8217;s in their closet, in an attempt to survey what people can be expected to own that would extend their MEGA65 experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wHMo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wHMo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 424w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 848w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 1272w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wHMo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png" width="1389" height="895" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:895,&quot;width&quot;:1389,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86328,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wHMo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 424w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 848w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 1272w, https://substackcdn.com/image/fetch/$s_!wHMo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e5486e-2ebb-41ba-b0dc-c63f6a916eb8_1389x895.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In general, lots of respondents have joysticks, and quite a few have mice and paddles. 11% reported not having any of these.</p><p>Of the paddle owners, 57% have Commodore paddles, and 41% have Atari paddles. Great job knowing what paddles you have! It was only last year that I learned there was a difference. As a kid I used Atari paddles with my Commodore and didn&#8217;t understand why my paddles had about half a turn of dead space.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vAgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vAgb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 424w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 848w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 1272w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vAgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png" width="1318" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1318,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64578,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vAgb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 424w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 848w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 1272w, https://substackcdn.com/image/fetch/$s_!vAgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef03decb-a11f-4b3a-bc61-a206c7bf3640_1318x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Many respondents, 68%, own a vintage 5-1/4" Commodore disk drive. I included a free-text field for other IEC devices, and plenty of people reminded me that SD2IEC devices are popular. Zero respondents reported owning a vintage dual drive unit, such as the Commodore 4040.</p><p>I asked how many floppy disks you own, of any type and for any purpose. 62% said they have more than 20. 14% have none. I intended this as a rough measure of how many people might use the built-in floppy drive. Of course, the drive could still be used with a future purchase of MEGA65 software distributed on 3-1/2" floppy.</p><h2>Connectivity and development hardware</h2><p>88% of overall respondents said they could connect a MEGA65 to their local network via Ethernet from where they use a MEGA65, or from where would use one if they had one. Those new networking features of the MEGA65 will be a game changer for transferring files without extracting the SD card, and for doing cross-development. Anyone without convenient access to an Ethernet connection might be able to use <a href="https://mega65.atlassian.net/wiki/spaces/MEGA65/pages/24576037/VONETS+WiFi-Ethernet+Bridge+adaptor">a Wifi-ethernet bridge</a>.</p><p>29% of owners have a JTAG adapter for their MEGA65. 11% of owners have a UART serial adapter. <a href="https://dansanderson.com/mega65/welcome/using-jtag.html">JTAG and UART serial</a> are powerful tools for programmers doing cross development and contributing to the MEGA65 platform, and some have used them just to transfer files back and forth between their PC and their MEGA65. The new Ethernet-based tools can move files and programs at much faster speeds, and are likely to eliminate the need to buy extra hardware for most people. JTAG is still needed for testing bitstreams, and JTAG/UART are still useful for remote debugging tasks, at least until someone makes a similar feature that works over Ethernet.</p><p>Small but non-zero percentages of respondents own a MEGA65 DevKit, and/or a Nexys or Wukong FPGA development board, all of which are alternative ways of running the MEGA65 platform.</p><h2>Software</h2><p>The survey asked how many MEGA65 software titles have you downloaded off of the Internet. It asked this of all respondents, not just MEGA65 owners, because some people use the Xemu MEGA65 emulator as a temporary or permanent substitute for MEGA65 hardware.</p><p>12% of owners say they have never downloaded MEGA65 software. 71% of non-owners have never downloaded software, which makes sense. The non-owner sub-categories break down as you would expect, with greater degrees of interest in the project correlating with more software downloaded.</p><p>Retro software publisher poly.play currently prints two commercial titles for the MEGA65: <a href="https://www.polyplay.xyz/Hibernated-1-Directors-Cut-MEGA65_1">Hibernated 1</a> by Stefan Vogt, and <a href="https://www.polyplay.xyz/Showdown-Collectors-Edition-MEGA65_1">Showdown</a> by Badger Punch Games. 14% of respondents have purchased at least one of these. 6% of respondents have purchased both titles. 40% knew about them but did not purchase either, and 45% did not know about one or both.</p><h2>Xemu</h2><p>The <a href="https://github.lgb.hu/xemu/">Xemu MEGA65 emulator</a> by G&#225;bor L&#233;n&#225;rt (LGB) is the definitive PC emulator for the MEGA65 platform. 74% of respondents knew there was an emulator before taking the survey. Of the people who said they knew about Xemu, 48% said they use it.</p><p>There are several reasons people use Xemu, so the survey asked about them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BJWS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BJWS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 424w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 848w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 1272w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BJWS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png" width="1246" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58732,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BJWS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 424w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 848w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 1272w, https://substackcdn.com/image/fetch/$s_!BJWS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f1b8ac8-85f9-47b0-a91b-de45247e8d8c_1246x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Selecting just for people who already own a MEGA65, the proportions of uses don&#8217;t actually change much except, of course, for respondents stating they use Xemu because they don&#8217;t own hardware.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wmKl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wmKl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 424w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 848w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 1272w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wmKl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png" width="1246" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wmKl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 424w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 848w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 1272w, https://substackcdn.com/image/fetch/$s_!wmKl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad828193-8f1c-4b0f-9e24-61a918951ff3_1246x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The survey gave everyone an opportunity to provide feedback on Xemu. We collected dozens of excellent suggestions and feedback in a wide variety of categories. Xemu is a well-loved tool and a cornerstone of the MEGA65 project, and we&#8217;re all grateful to LGB for working on it!</p><h2>Documentation</h2><p>Every MEGA65 ships with a first edition printed User&#8217;s Guide. 28% of owners use it regularly, 44% refer to it occasionally, and 26% rarely or never use it.</p><p>The User&#8217;s Guide is just one of <a href="http://mega65.org/docs">a set of books in progress</a> that form the complete documentation for the project. The latest versions are available as PDF files, free for anyone to download. The survey asked all respondents how often they use the PDFs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UCLu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UCLu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 424w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 848w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 1272w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UCLu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png" width="1309" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1309,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UCLu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 424w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 848w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 1272w, https://substackcdn.com/image/fetch/$s_!UCLu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01dc2c4d-64dd-4ad6-b5e6-8e22582f5f70_1309x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When I first got my MEGA65 in May of 2022, I wrote <a href="https://dansanderson.com/mega65/welcome/">Dan&#8217;s MEGA65 Welcome Guide</a> as a supplement to the official documentation, intending to patch over the gaps between the intended experience and the first delivery batch that I knew would be fixed in later versions. It ended up being a generally useful resource for many. 62% of respondents were aware of the Welcome Guide.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u3q9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u3q9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 424w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 848w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 1272w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u3q9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png" width="1242" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1242,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55783,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u3q9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 424w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 848w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 1272w, https://substackcdn.com/image/fetch/$s_!u3q9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1db362f-59a5-4f76-8724-f0c432165d1e_1242x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The survey asked about what medium you prefer your documentation. My personal preference would be professionally printed manuals, and the MEGA65 documentation was set up to maybe someday become a multi-volume printed set, similar to the printed User&#8217;s Guide. I wanted to gauge interest in crowdfunding a professional print run. Crowdfunding can be tricky with a small population, especially one that&#8217;s difficult to reach. Print-on-demand services are easy to use with no up-front or on-going monetary investment, and they have significant advantages for global fulfillment, but they&#8217;re lower quality than what I have in mind. My favored option for printing would require a minimum print run.</p><p>In the survey, I proposed a hypothetical version of this project where an &#8220;entire set&#8221; (with the actual content to be determined) might cost $150 USD, and individual volumes might cost $35 USD. I asked everyone their preference: the entire set, a couple of volumes, print-on-demand, or digital only.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sv0e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sv0e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 424w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 848w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 1272w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sv0e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png" width="1456" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68265,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sv0e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 424w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 848w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 1272w, https://substackcdn.com/image/fetch/$s_!sv0e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7702b07-c3f4-43d1-92bc-1ec5eee4d138_1524x631.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If the responses are representative of the preferences of everyone who will own a MEGA65 by the end of 2023 <em>and</em> enough of them could be reached to announce a crowdfunding campaign <em>and</em> at least half of them backed the project, we could make fancy books a reality. It&#8217;d be a limited print run, followed up by a secondary print-on-demand version available in perpetuity. I like these odds well enough. Even if the crowdfunding campaign never happens, investing in content will improve the digital versions and we can easily do an official print-on-demand offering when we feel they&#8217;re in a state worth printing.</p><p>I&#8217;m also going to try to get a web version of the documentation working. No promises&#8212;it&#8217;ll be a chunk of work to clear up the LaTeX for web export&#8212;but it&#8217;s a worthy goal.</p><h2>Dan&#8217;s MEGA65 Digest</h2><p>If you&#8217;re reading this, you&#8217;re probably aware of my monthly email newsletter, <a href="https://m65digest.substack.com/">Dan&#8217;s MEGA65 Digest</a>. I initially announced the survey in the Digest, so it&#8217;s not surprising that 60% of respondents were aware of the Digest before the survey. I&#8217;m <em>delighted</em> to see that 39% of respondents were unaware, because that means two things: 1) there are more people out there who might be interested, and 2) our efforts to promote the survey reached beyond people already aware of the Digest.</p><p>Of the people aware of the Digest, 67% read the text version by email. 15% go to my website directly, and a few use RSS or the Substack website. It&#8217;s good to see that I could migrate the Digest to another newsletter provider if needed and probably nobody would miss it.</p><p>Did you know that there&#8217;s an audio podcast version of the Digest? 42% of people familiar with the Digest did not know. 18% listen to at least some issues by audio. 51% of listeners use the Substack service to do so (because clicking on the email takes you there), and 37% of listeners use a podcast app. I enjoy making the audio version and I&#8217;m grateful that some find it entertaining.</p><p>Thank you all for the generous comments in the free-text field! Some people asked for more advanced technical topics, and others asked for less advanced technical topics. &#128522; Several people mentioned interest in a print anthology, or just a printed zine. I&#8217;m not sure I could fill a print zine each month&#8212;at least not without collaborators.</p><h2>Community resources</h2><p>62% of all respondents are aware of the <a href="https://files.mega65.org/">MEGA65 Filehost</a>, an essential community resource. 91% of owners who responded to the survey know about it.</p><p>Of those who are aware, almost everyone has used the Files section to browse and download files. 47% of respondents who own a MEGA65 have redeemed their owner code, which is surprisingly low! You need to redeem your owner code to access release packages containing the closed ROM (though there are other ways to get the closed ROM). The survey asks about other features of Filehost, and it generally looks like people use them proportional to the amount of material posted in those categories. No surprises here.</p><p>83% of all respondents are aware of the <a href="https://mega65.org/chat">MEGA65 Discord</a>, and 54% have an account. Of those that have an account, 29% visit it daily.</p><p>76% of all respondents are aware of the <a href="https://www.forum64.de/index.php?board/457-mega65/&amp;l=2">MEGA65 section of Forum64.de</a>, and 33% have an account. Of those that have an account, 18% visit it daily.</p><p>25% of all respondents have both a Discord account and a Forum64 account. 75% of them visit the Discord at least once a month. 28% of them (7% of all respondents) visit the Discord daily.</p><h2>Programming</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mPx6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mPx6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 424w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 848w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 1272w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mPx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png" width="1256" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01170101-8d49-4373-ace0-35cd3338b735_1256x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1256,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mPx6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 424w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 848w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 1272w, https://substackcdn.com/image/fetch/$s_!mPx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01170101-8d49-4373-ace0-35cd3338b735_1256x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The majority of respondents have more than 10 years of experience writing computer programs. The survey purposefully did not make a distinction between professional vs. hobbyist programming: the survey used phrases like &#8220;writing computer programs&#8221; to be inclusive of both.</p><p>79% of all respondents said they are interested in writing their own programs for the MEGA65. Those that expressed interest were presented additional questions about programming tools.</p><p>Of those that want to program, 75% are interested in assembly language, and 75% are interested in BASIC 65.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qi8s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qi8s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 424w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 848w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 1272w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qi8s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png" width="1246" height="976" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:976,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63127,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qi8s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 424w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 848w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 1272w, https://substackcdn.com/image/fetch/$s_!Qi8s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F130eb2a0-c511-4a67-ab46-ad70fb256734_1246x976.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The survey offered a free-text box to express interest in other programming languages. Python was mentioned multiple times. In my experiences with Python and with retro computing, I&#8217;ve seen many people wonder aloud if <a href="https://micropython.org/">MicroPython</a> could be ported to a vintage computer. In those discussions, the quality of C compilers that target retro platforms has been mentioned as an issue, so I wonder if it&#8217;s a topic worth revisiting in the context of <a href="https://llvm-mos.org/wiki/Welcome">llvm-mos</a>. Pascal also got multiple mentions, which is more likely to be built from scratch for the MEGA65 by an enterprising hobbyist.</p><p>The survey listed a bunch of popular cross-development tools and let everyone pick their favorites. Visual Studio Code, <a href="https://www.ajordison.co.uk/">CBM prg Studio</a>, <a href="http://theweb.dk/KickAssembler/Main.html#frontpage">Kick Assembler</a>, and <a href="https://cc65.github.io/">cc65</a> were top of mind for most people. Several people mentioned <a href="https://github.com/GeorgRottensteiner/C64Studio/">C64 Studio</a> in the free-text responses.</p><p>I know people that love cross development, writing programs for the MEGA65 using a modern computer. I also know people that love on-device development, preferring to shut off the modern computer and use the MEGA65 as its own programming environment. The survey asked for your preference, and results were split three ways: on-device development, cross development, and &#8220;depends on the project&#8221; all got roughly the same proportion of responses.</p><h2>Demographics</h2><p>65% of respondents are between 45 and 54 years old. Remaining respondents are roughly split between 35-44 years old and 55 years or older, with only a few respondents in other age groups.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8SB0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8SB0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 424w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 848w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 1272w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8SB0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png" width="1239" height="648" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:648,&quot;width&quot;:1239,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202290,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8SB0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 424w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 848w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 1272w, https://substackcdn.com/image/fetch/$s_!8SB0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ed80daf-22f9-4fa1-8b4e-dbcfc6cf3986_1239x648.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!331X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!331X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 424w, https://substackcdn.com/image/fetch/$s_!331X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 848w, https://substackcdn.com/image/fetch/$s_!331X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 1272w, https://substackcdn.com/image/fetch/$s_!331X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!331X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png" width="563" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:563,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105216,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!331X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 424w, https://substackcdn.com/image/fetch/$s_!331X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 848w, https://substackcdn.com/image/fetch/$s_!331X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 1272w, https://substackcdn.com/image/fetch/$s_!331X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269fada2-7a72-4dc5-a60b-f764c57e7552_563x640.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The MEGA65 community is international, with strong contingents in Germany and the United States.</p><p>Discussion about the MEGA65 on Forum64.de is almost entirely in the German language, and making MEGA65 programming resources available in the German language is a frequent topic of discussion. For the survey, I asked two questions about spoken language: in what language(s) do you prefer to socialize online, and in what language(s) do you prefer to consume technical information?</p><p>86% of everyone who answered these questions answered both questions with the same language or languages. 80% of these said English. 7% said they preferred German exclusively for both. 10% offered both English and German as their answer in both categories.</p><p>14% of respondents gave different answers for preferred languages for socializing vs. technical information. Of those that gave different answers, 85% said English was preferable or at least acceptable for consuming technical information. 13% preferred technical information in German.</p><p>Danish, Dutch, English, Finnish, French, German, Hungarian, Italian, Norwegian, Polish, Portuguese, Scandinavian, Spanish, and Swedish were all mentioned at least once. I won&#8217;t draw any conclusions due to sample size, but it&#8217;s exciting to list them all out!</p><p>The survey asked for everyone&#8217;s preferred social media service. This is a bad question. Outside of the Digest, the survey was promoted almost exclusively on social media, and so response rates are most likely to correspond to visibility of the survey announcements on those platforms. Nevertheless, it&#8217;s good to know that Facebook and X.com (n&#233;e Twitter) are still important ways to reach people.</p><p>Despite how the survey was promoted, 22% of respondents say they do not use a social networking service. There was some ambiguity in the question about whether Discord qualifies as social media. The survey did not include it in the list, but it included a free-text prompt for other services and many used it to mention Discord. Combining social media non-users and users of services the survey did not list, that&#8217;s 28% of respondents.</p><h2>Other vintage and modern-retro computers</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZTXM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZTXM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 424w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 848w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 1272w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZTXM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png" width="1327" height="1397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1397,&quot;width&quot;:1327,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZTXM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 424w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 848w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 1272w, https://substackcdn.com/image/fetch/$s_!ZTXM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab161735-6a21-42b7-88ed-47909fea69fe_1327x1397.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nearly every respondent has owned or used a Commodore 64 in their lifetime. 76% of respondents currently own a Commodore 64. Only 2% of respondents have never owned or used a Commodore computer.</p><p>45% of respondents own an <a href="https://www.c64-wiki.com/wiki/SD2IEC">SD2IEC</a> device. 35% own an <a href="https://ultimate64.com/">Ultimate 1541</a> (any model). Of potential interest to future MEGA65 cartridge authors, 21% of respondents own an <a href="https://www.go4retro.com/products/easyflash-3/">EasyFlash 3</a>, and 10% own an <a href="https://www.electromaker.io/project/view/easyflash-1cr-cartridge-for-commodore-64">EasyFlash 1 or 1CR</a> (<a href="https://www.sellmyretro.com/offer/details/61882">purchase link</a>).</p><p>34% own, have preordered, or intend to order at least one of several retro-style modern computers that the survey listed. The breakdown between the models isn&#8217;t interesting, mostly corresponding to the current availability of those machines.</p><h2>Modern computers</h2><p>53% of respondents use a Windows computer. 22% use an Apple laptop or desktop. 20% use a Linux laptop or desktop.</p><p>Of the Windows users, 44% are using Windows 11, and 52% are using Windows 10. Several people are using Windows 7.</p><p>Of the Apple users, 73% have an Apple Silicon (M1 or M2) processor, and 26% have an Intel processor. 53% are using macOS 13 Ventura, the latest stable release. 31% are on the macOS 14 Sonoma public beta. 13% are using older versions of macOS.</p><p>I did not ask about Linux distributions or variants, nor did I ask about Intel vs. ARM for Linux or Windows. Tablets (iOS, Android), BSD variants, Windows Subsystem for Linux, AmigaOS 4.1, and MorphOS were represented in the minority replies.</p><h2>MEGA65 project feedback</h2><p>The survey concluded with an invitation to provide free-text feedback to the MEGA65 project. I will try to summarize common themes and provide my own commentary based on my experiences with the project in the last year. This will naturally reflect my own biases.</p><p><strong>Enthusiasm.</strong> Nearly everyone took this opportunity to express words of encouragement and praise for the project. Thank you all for your kindness and generosity! It is gratifying to know there are so many people out there who believe in the MEGA65 project and are enthusiastic about the community and what everyone has accomplished so far.</p><p><strong>Price and shipping cost.</strong> As of this writing, the MEGA65 production model, with the mechanical keyboard, injection molded plastic case, and built-in 3.5" floppy disk drive, has <a href="https://shop.trenz-electronic.de/en/Products/MEGA65/">a retail price</a> of 666.66 &#8364; ($722.38 USD), not including taxes or shipping costs. The total cost to buy one delivered to where I am in the United States is 790.20 &#8364; ($856.79 USD). This price alienates some people who are interested in the project, due either to the value proposition or the ability to pay. Less expensive options include running the MEGA65 core on a Nexys Artix A7 FPGA development board, or running the MEGA65 ROM in the Xemu emulator. The central FPGA chip dominates the price, and burning the chipset design into cheaper ASICs would require several orders of magnitude more people interested. (And of course, ASIC-based computers would not be upgradeable.) Counterintuitively, eliminating the floppy drive does not meaningfully reduce the cost, and new plastic case shapes would require an up-front investment in new moulds.</p><p><strong>Shipping delays and shipping updates.</strong> Many who have preordered a MEGA65 have experienced shipping waits longer than one year. Estimating shipping dates has been nearly impossible over the past two years due to the unavailability of essential components, and a reliable estimate is only possible after all parts have been acquired by our assembly and distribution partner Trenz Electronic. Trenz has been great about responding to customer service inquiries with rough guesses, but it is not currently a regular practice to send periodic emails to pre-order customers during the process. Some survey respondents expressed concern about the lack of proactive order status communication. Due to privacy laws in Germany, Trenz Electronic is not allowed to share their list of pre-order customers with the project team. The best we&#8217;ve been able to offer so far is to use other communication channels to encourage everyone to <a href="https://m65digest.substack.com/">subscribe to the newsletter</a> or follow project announcement channels on the <a href="https://mega65.org/chat">Discord</a>, <a href="https://www.youtube.com/channel/UCEz3CQ343r4ssvIdmhDauMQ">YouTube</a>, or <a href="https://c65gs.blogspot.com/">Paul&#8217;s developer blog</a>. It has been a challenge to make sure pre-order customers are aware of these resources.</p><p><strong>Sources of technical information.</strong> The MEGA65 has a substantial amount of technical documentation available, but this can be difficult to notice given how that information is stored and disseminated. Survey respondents pointed out that having information spread over PDF manuals, a Confluence Wiki, and Filehost articles is inconvenient, and it&#8217;s unclear where to find each kind of information. Sometimes the easiest way to get an answer to a technical question is to ask the Discord chat, but answers to questions previously asked are difficult to find, and both the community and its discussion archives are only available to Discord users. Discord is an ephemeral medium and does not function as a technical resource, at least not a passive one, and it&#8217;s unreasonable to expect all users to read every discussion. Moreover, <em>none</em> of these resources are reliably indexed by search engines, either by design (Discord cannot be crawled; Confluence blocks crawlers) or by unintended technical limitations. Multiple survey respondents wished for a more traditional open-access web forum, and some are disappointed that only a subset of the community participates on Forum64.de.</p><p><strong>Better software.</strong> Many MEGA65 owners want to use their computer to run games and applications written by others. Without a large library of quality titles (for some relative definition of &#8220;quality&#8221;), the MEGA65 is mostly useful for learning to program, writing programs from scratch, or running C64 software via the C64 core (or GO64 mode). Some respondents emphasized that they would be willing to pay for quality MEGA65 software. Some respondents said they are waiting for the software library to grow before investing in a purchase.</p><p><strong>German-language technical resources.</strong> Multiple respondents used the free-text feedback field to emphasize the need for German-language technical information. There is <a href="https://65site.de/downloads/MEGA65_BASIC_65_Referenzhandbuch.pdf">a German MEGA65 handbook</a> that is highly valued. The topic of German-language video tutorials, livestreams, and classes comes up occasionally on Forum64.de.</p><p><strong>Technical issues.</strong> Several respondents mentioned some of the common technical issues we have experienced in the first year, both in the electrical hardware and in the core and ROM. The new main board revision will help with some of these, and the core and ROM are active projects that welcome contributors. Many respondents expressed gratitude for everyone who is contributing fixes, and are excited to see the work continue.</p><p><strong>Feature areas.</strong> Many respondents were excited about the potential for new features, including networking applications, D64 disk image support, more alternate cores, and more on-device programming environments and tools. Several respondents wished for more programming tutorials and recipes. Several respondents expressed an interest in a more compact version of the keyboard case without the floppy drive. Others reminded us that some owners of R3A boards would be interested in buying a bare R5 board as an upgrade. (I considered asking about interest in an R5 upgrade as a survey question, but we don&#8217;t know how much such an upgrade would cost. We don&#8217;t realize economies of scale in the hundreds of units, so it doesn&#8217;t help to forecast sales.)</p><p><strong>More community events and publications.</strong> Respondents expressed an interest in more live streams like the <a href="https://www.youtube.com/live/wifYmhIRAEs?si=ww0UcfTGzBhaAf43">MEGAVISION</a> live stream that took place earlier this year. Conferences were also mentioned. There were multiple suggestions for a print magazine.</p><h2>Reach</h2><p>One of the biggest questions I wanted to answer with the survey was, how effective have we been at connecting the MEGA65 community with the project, and how can we improve? Communities around projects tend to form layers of engagement, and we want to foster the growth of all of those layers and reach as many people as possible that would benefit from the project. We have known issues with making resources available in search engines and providing information to pre-order customers. We can only hope that as people get more interested, they look for community resources more aggressively.</p><p>The first test was simply, how many people can we get to take the survey? 509 respondents feels downright miraculous considering that only 900 people currently own a MEGA65 (DevKit or production model). We aren&#8217;t privy to the number of pending pre-orders but we believe it is over 1,000. The survey promotion reached quite a few people who are interested enough in the project to take the survey but have not yet pre-ordered, but it&#8217;s impossible to guess the size of that population from the survey alone.</p><p>Our limited ability to reach out to the community makes it difficult to promote resources like <a href="https://m65digest.substack.com/">Dan&#8217;s MEGA65 Digest</a>, and difficult to promote community projects that require financial support. A small number of free-text responses in the survey ask for things that already exist, which suggests that we could be doing more to promote the resources we already have.</p><p>The survey asked about several specific community resources, projects, and concepts, and made a distinction between &#8220;I know about that resource but don&#8217;t use it&#8221; vs. &#8220;I didn&#8217;t know about that resource.&#8221; These replies are a useful indicator of how well information about the project has disseminated. The following numbers are shown as percentages of owners. Owners are more likely to be familiar with resources, and have a known population size as a basis for the sample. This is not meant to exclude non-owners from consideration, only to have a basis for comparison.</p><ul><li><p>10% of <strong>owners</strong> replied that they did not know about the JTAG or UART serial adapter.</p></li><li><p>4% did not know about the DevKit.</p></li><li><p>13% did not know about the Nexys FPGA dev board.</p></li><li><p>34% did not know abut the Wukong FPGA dev board.</p></li><li><p>20% did not know about <em>Hibernated 1</em> by Stefan Vogt. The numbers were similar for <em>Showdown</em> by Badger Punch Games.</p></li><li><p>13% were unaware of the Xemu emulator.</p></li><li><p>5% were unaware of the PDF manuals.</p></li><li><p>16% were unaware of the MEGA65 Welcome Guide.</p></li><li><p>22% were unaware of Dan&#8217;s MEGA65 Digest.</p></li><li><p>8% were unaware of Filehost.</p></li><li><p>7% were unaware of the MEGA65 Discord.</p></li><li><p>14% were unaware of Forum64.de.</p></li></ul><h2>Conclusions and next steps</h2><p>The MEGA65 is an open source volunteer-run project. It doesn&#8217;t have <em>development resources</em> so much as <em>interested parties.</em> Nevertheless, many people who work on the project want the project as a whole to succeed, and want to work on important things, so seeing which tasks can have the most impact can influence contributors.</p><p>I can&#8217;t speak for anyone else, but personally, I&#8217;m more motivated to work on <em>information visibility.</em> This was already my area of focus with the Digest. I have ideas for making our information easier to find in search engines, and I hope to use my web development background to improve our web-based resources and community tools. I also want to evolve the Digest to make it more visible and interesting to a larger audience. The Digest is our primary tool for disseminating news and project status&#8212;including best available information on shipping updates&#8212;and I want everyone who is interested in the project (at any level) to at least be aware of it.</p><p>I&#8217;m excited to see that we might be able to afford a high-quality print run of the manuals, if we can finish them. Print books are a fun addition to the retro experience, and they&#8217;re one of my favorite things to make. It&#8217;s good to be reminded by the data that many people would prefer browser and e-reader-friendly resources, and hopefully we can produce both print and web resources using the same content.</p><p>There&#8217;s an opportunity for German content creators to fill a need. Bloggers, YouTubers, and live streamers capable of producing tutorials and walkthroughs in German&#8212;at any level of technical complexity or production value&#8212;could have a big impact. I&#8217;ve seen people ask for German-language BASIC programming introductions on Forum64.de. You don&#8217;t need to know a ton about the internals of the machine to help others with their first steps, and simply blogging your own learning adventure can attract a grateful audience. We can also consider crowdfunding a professional German translation of the manuals once they are reasonably complete.</p><p>There&#8217;s no shortage of interest in improving the platform or the hardware, just a shortage of time. I believe our open source processes are in decent shape, so if anyone is interested in helping out, please reach out on the Discord. Bug reports are always welcome, even if you are unable to submit bug fixes.</p><p>As for growing the software library, the number of owners is expected to more than double by the end of the year. It&#8217;ll be exciting to see what everyone comes up with!</p><div><hr></div><p>That&#8217;s it for this year&#8217;s survey! Thanks again to everyone who responded. Let me know if you have any feedback on the survey itself or this report. We might do this again next year.</p>]]></content:encoded></item><item><title><![CDATA[MEGA65 Survey Reminder!]]></title><description><![CDATA[Survey closes August 31st]]></description><link>https://m65digest.substack.com/p/mega65-survey-reminder</link><guid isPermaLink="false">https://m65digest.substack.com/p/mega65-survey-reminder</guid><dc:creator><![CDATA[Dan Sanderson]]></dc:creator><pubDate>Mon, 21 Aug 2023 01:44:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SPTa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi again! This is not a new issue of the Digest, just a reminder email.</p><p>If you haven&#8217;t yet, please take the <a href="https://tally.so/r/mDk4pZ">MEGA65 Community Survey</a>. We&#8217;re <em>extremely close</em> to hitting our goal for the number of responses and just need a few more to get it over the line.</p><p>The survey will close <strong>August 31st, 2023</strong>. We&#8217;ll have a public report of the results next month. All responses are anonymous, and free-text responses will remain private to the MEGA65 Steering Committee.</p><p>The link to the survey: <a href="https://tally.so/r/mDk4pZ">https://tally.so/r/mDk4pZ</a></p><p>Thanks very much to everyone who has responded so far!</p><p>&#8212;&nbsp;Dan</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SPTa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SPTa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 424w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 848w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 1272w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SPTa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png" width="500" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20047,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SPTa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 424w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 848w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 1272w, https://substackcdn.com/image/fetch/$s_!SPTa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6fb5aae-9217-407b-9936-b35737c05a8f_500x343.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item></channel></rss>