<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://7800.8bitdev.org/index.php?action=history&amp;feed=atom&amp;title=7800_PAL_BIOS</id>
		<title>7800 PAL BIOS - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://7800.8bitdev.org/index.php?action=history&amp;feed=atom&amp;title=7800_PAL_BIOS"/>
		<link rel="alternate" type="text/html" href="https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;action=history"/>
		<updated>2026-05-17T22:39:19Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1285&amp;oldid=prev</id>
		<title>MSaarna at 12:58, 5 August 2025</title>
		<link rel="alternate" type="text/html" href="https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1285&amp;oldid=prev"/>
				<updated>2025-08-05T12:58:13Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:58, 5 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot; &gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160;  1. Built-in Game: Includes a full version of Asteroids that runs if no&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160;  1. Built-in Game: Includes a full version of Asteroids that runs if no&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160; &amp;#160; &amp;#160; valid cartridge is detected.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160; &amp;#160; &amp;#160; valid cartridge is detected.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160;  2. No Encryption: Due to 1980s-era export laws, the complex &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;signature&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160;  2. No Encryption: Due to 1980s-era &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;encryption &lt;/ins&gt;export laws, the complex&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160; &amp;#160; &amp;#160; verification from the NTSC BIOS is absent. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Cartridge &lt;/del&gt;checks &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;are simpler&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&amp;#160; &amp;#160; &amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cart &lt;/ins&gt;verification from the NTSC BIOS is absent. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;7800 cartridge &lt;/ins&gt;checks&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;;&amp;#160; &amp;#160; &amp;#160; just confirm 7800 footer bytes and lack of 2600 ROM mirrors&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; The code must be assembled with DASM.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; The code must be assembled with DASM.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MSaarna</name></author>	</entry>

	<entry>
		<id>https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1284&amp;oldid=prev</id>
		<title>MSaarna at 12:52, 5 August 2025</title>
		<link rel="alternate" type="text/html" href="https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1284&amp;oldid=prev"/>
				<updated>2025-08-05T12:52:51Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:52, 5 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l221&quot; &gt;Line 221:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 221:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; This loop compares the same ROM regions using different base addresses. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; This loop compares the same ROM regions using different base addresses. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; If no cart is present, the bus will &amp;quot;float&amp;quot; with the last byte of the opcode&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; If no cart is present, the bus will &amp;quot;float&amp;quot; with the last byte of the opcode&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;which &lt;/del&gt;differs in our test. Therefore, if &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/del&gt;compared bytes differ, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;then &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(due to bus capacitance) and the last byte of the opcode &lt;/ins&gt;differs in our test. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;; If &lt;/del&gt;a cart IS NOT present.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;; &lt;/ins&gt;Therefore, if &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;our &lt;/ins&gt;compared bytes differ, a cart IS NOT present.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CartCheck_FloatingBus_Loop:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CartCheck_FloatingBus_Loop:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; LDA&amp;#160; &amp;#160;  $FE00,X&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; LDA&amp;#160; &amp;#160;  $FE00,X&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MSaarna</name></author>	</entry>

	<entry>
		<id>https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1263&amp;oldid=prev</id>
		<title>MSaarna at 17:11, 24 July 2025</title>
		<link rel="alternate" type="text/html" href="https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1263&amp;oldid=prev"/>
				<updated>2025-07-24T17:11:40Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 17:11, 24 July 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==7800 PAL BIOS==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==7800 PAL BIOS==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This reverse engineered 7800 PAL BIOS code contains helpful context-comments and builds &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/del&gt;1:1 with the official BIOS ROM. In DASM syntax.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This reverse engineered 7800 PAL BIOS code contains helpful context-comments and builds 1:1 with the official BIOS ROM. In DASM syntax.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MSaarna</name></author>	</entry>

	<entry>
		<id>https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1260&amp;oldid=prev</id>
		<title>MSaarna: Created page with &quot;==7800 PAL BIOS==  This reverse engineered 7800 PAL BIOS code contains helpful context-comments and builds a 1:1 with the official BIOS ROM. In DASM syntax.   &lt;pre&gt;  ; Disasse...&quot;</title>
		<link rel="alternate" type="text/html" href="https://7800.8bitdev.org/index.php?title=7800_PAL_BIOS&amp;diff=1260&amp;oldid=prev"/>
				<updated>2025-07-20T20:00:58Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;==7800 PAL BIOS==  This reverse engineered 7800 PAL BIOS code contains helpful context-comments and builds a 1:1 with the official BIOS ROM. In DASM syntax.   &amp;lt;pre&amp;gt;  ; Disasse...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==7800 PAL BIOS==&lt;br /&gt;
&lt;br /&gt;
This reverse engineered 7800 PAL BIOS code contains helpful context-comments and builds a 1:1 with the official BIOS ROM. In DASM syntax.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Disassembly of the Atari 7800 PAL BIOS&lt;br /&gt;
;&lt;br /&gt;
; - Daniel Boris &amp;lt;dboris@home.com&amp;gt;&lt;br /&gt;
; - Mike Saarna&lt;br /&gt;
; - Gemini 2.5 Pro&lt;br /&gt;
;&lt;br /&gt;
; Key differences from the NTSC BIOS:&lt;br /&gt;
;   1. Built-in Game: Includes a full version of Asteroids that runs if no&lt;br /&gt;
;      valid cartridge is detected.&lt;br /&gt;
;   2. No Encryption: Due to 1980s-era export laws, the complex signature&lt;br /&gt;
;      verification from the NTSC BIOS is absent. Cartridge checks are simpler.&lt;br /&gt;
;&lt;br /&gt;
; The code must be assembled with DASM.&lt;br /&gt;
&lt;br /&gt;
 processor 6502&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
;&lt;br /&gt;
; I. HARDWARE AND MEMORY EQUATES&lt;br /&gt;
;&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
STACKPTR  EQU     $FF&lt;br /&gt;
REGION    EQU     $FE&lt;br /&gt;
&lt;br /&gt;
; --- TIA (Television Interface Adapter) Registers ---&lt;br /&gt;
INPTCTRL  EQU     $01                    ; Input Control Register. Controls memory mapping (BIOS, RAM, Cart) and TIA access.&lt;br /&gt;
TIAWSYNC  EQU     $02                    ; TIA's WSYNC, not Maria's&lt;br /&gt;
CXP0FB    EQU     $02                    ; TIA Collision Register&lt;br /&gt;
CXP1FB    EQU     $03                    ; TIA Collision Register&lt;br /&gt;
COLUP0    EQU     $06                    ; TIA P0 Color&lt;br /&gt;
COLUBK    EQU     $09                    ; TIA Background Color&lt;br /&gt;
INPT4     EQU     $0C                    ; Input Port 4 (Joystick Triggers)&lt;br /&gt;
INPT5     EQU     $0D                    ; Input Port 5 (Joystick Triggers)&lt;br /&gt;
AUDC0     EQU     $15                    ; Audio Control 0&lt;br /&gt;
AUDC1     EQU     $16                    ; Audio Control 1&lt;br /&gt;
AUDF0     EQU     $17                    ; Audio Frequency 0&lt;br /&gt;
AUDF1     EQU     $18                    ; Audio Frequency 1&lt;br /&gt;
AUDV0     EQU     $19                    ; Audio Volume 0&lt;br /&gt;
AUDV1     EQU     $1A                    ; Audio Volume 1&lt;br /&gt;
&lt;br /&gt;
; --- Maria (Custom Graphics Chip) Registers ---&lt;br /&gt;
BACKGRND  EQU     $20                    ; Background Color&lt;br /&gt;
P0C1      EQU     $21                    ; Palette 0, Color 1&lt;br /&gt;
P0C2      EQU     $22                    ; Palette 0, Color 2&lt;br /&gt;
P0C3      EQU     $23                    ; Palette 0, Color 3&lt;br /&gt;
WSYNC     EQU     $24                    ; Maria Wait for Sync (halts CPU until horizontal blank)&lt;br /&gt;
P1C1      EQU     $25                    ; Palette 1, Color 1&lt;br /&gt;
P1C2      EQU     $26                    ; Palette 1, Color 2&lt;br /&gt;
P1C3      EQU     $27                    ; Palette 1, Color 3&lt;br /&gt;
MSTAT     EQU     $28                    ; Maria Status Register (VBLANK, etc.)&lt;br /&gt;
P2C1      EQU     $29                    ; Palette 2, Color 1&lt;br /&gt;
P2C2      EQU     $2A                    ; Palette 2, Color 2&lt;br /&gt;
P2C3      EQU     $2B                    ; Palette 2, Color 3&lt;br /&gt;
DPPH      EQU     $2C                    ; Display List Pointer High Byte&lt;br /&gt;
P3C1      EQU     $2D                    ; Palette 3, Color 1&lt;br /&gt;
P3C2      EQU     $2E                    ; Palette 3, Color 2&lt;br /&gt;
P3C3      EQU     $2F                    ; Palette 3, Color 3&lt;br /&gt;
DPPL      EQU     $30                    ; Display List Pointer Low Byte&lt;br /&gt;
P4C1      EQU     $31                    ; Palette 4, Color 1&lt;br /&gt;
P4C2      EQU     $32                    ; Palette 4, Color 2&lt;br /&gt;
P4C3      EQU     $33                    ; Palette 4, Color 3&lt;br /&gt;
CHARBASE  EQU     $34                    ; Character Mode High Pointer&lt;br /&gt;
P5C1      EQU     $35                    ; Palette 5, Color 1&lt;br /&gt;
P5C2      EQU     $36                    ; Palette 5, Color 2&lt;br /&gt;
P5C3      EQU     $37                    ; Palette 5, Color 3&lt;br /&gt;
OFFSET    EQU     $38                    ; Not used by BIOS&lt;br /&gt;
P6C1      EQU     $39                    ; Palette 6, Color 1&lt;br /&gt;
P6C2      EQU     $3A                    ; Palette 6, Color 2&lt;br /&gt;
P6C3      EQU     $3B                    ; Palette 6, Color 3&lt;br /&gt;
CTRL      EQU     $3C                    ; Maria Control Register (DMA, graphics mode)&lt;br /&gt;
P7C1      EQU     $3D                    ; Palette 7, Color 1&lt;br /&gt;
P7C2      EQU     $3E                    ; Palette 7, Color 2&lt;br /&gt;
P7C3      EQU     $3F                    ; Palette 7, Color 3&lt;br /&gt;
&lt;br /&gt;
; --- RAM Address Equates ---&lt;br /&gt;
RAM_BASE_1    EQU $2000&lt;br /&gt;
RAM_BASE_2    EQU $2100&lt;br /&gt;
RAM_CODE_BASE EQU $2300&lt;br /&gt;
RAM_DLL_BASE  EQU $2700&lt;br /&gt;
RAM_DLL_START EQU $2707&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
;&lt;br /&gt;
; II. BUILT-IN ASTEROIDS GAME DATA&lt;br /&gt;
;&lt;br /&gt;
;=============================================================================&lt;br /&gt;
	ORG     $C000&lt;br /&gt;
        ; This directive includes the 15,933 byte ROM image for the built-in&lt;br /&gt;
        ; Asteroids game. To generate this file from a PAL BIOS ROM on Mac OS&lt;br /&gt;
        ; or Linux, do the following...&lt;br /&gt;
        ;&lt;br /&gt;
        ;   dd if=7800pal.rom of=ASTEROID.BIN bs=1 count=15933&lt;br /&gt;
        &lt;br /&gt;
        INCBIN &amp;quot;ASTEROID.BIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
;&lt;br /&gt;
; III. MAIN BIOS LOGIC (EXECUTED FROM ROM)&lt;br /&gt;
;&lt;br /&gt;
;=============================================================================&lt;br /&gt;
        ORG     $FE3D&lt;br /&gt;
&lt;br /&gt;
; --- Data for Initial Display List ---&lt;br /&gt;
; This data is copied to RAM at RAM_DLL_BASE ($2700) during initialization.&lt;br /&gt;
DisplayList_InitialData:&lt;br /&gt;
        .byte     $00	; DL entry - this is copied to $2700&lt;br /&gt;
        .byte     $40&lt;br /&gt;
        .byte     $F0&lt;br /&gt;
        .byte     $1F&lt;br /&gt;
        .byte     $BB&lt;br /&gt;
        .byte     $00&lt;br /&gt;
        .byte     $00&lt;br /&gt;
&lt;br /&gt;
        .byte     $8F	; DLL entry - this is copied repeatedly at $2707&lt;br /&gt;
        .byte     &amp;gt;RAM_DLL_BASE&lt;br /&gt;
DisplayList_InitialData_End:&lt;br /&gt;
        .byte     &amp;lt;RAM_DLL_BASE&lt;br /&gt;
&lt;br /&gt;
; --- BIOS Entry Point on Power-On/Reset ---&lt;br /&gt;
Bios_EntryPoint_Reset:&lt;br /&gt;
          SEI                            ; Disable interrupts.&lt;br /&gt;
          CLD                            ; Clear decimal mode.&lt;br /&gt;
&lt;br /&gt;
          LDA     #$02                   ; Enable Maria and map BIOS into memory.&lt;br /&gt;
          STA     INPTCTRL&lt;br /&gt;
&lt;br /&gt;
          LDX     #STACKPTR&lt;br /&gt;
          TXS                            ; Set stack pointer.&lt;br /&gt;
&lt;br /&gt;
          LDA     #$7F&lt;br /&gt;
          STA     CTRL                   ; Turn off Maria DMA.&lt;br /&gt;
          LDA     #$00&lt;br /&gt;
          STA     BACKGRND               ; Set background color to black.&lt;br /&gt;
&lt;br /&gt;
          LDX     #$7F                   ; Copy 2600 mode initialization code to RIOT RAM.&lt;br /&gt;
Bios_Copy2600InitToRam_Loop:&lt;br /&gt;
          LDA     TiaInitCode_2600Mode,X ; Move from ROM...&lt;br /&gt;
          STA     $480,X                 ; ...to RIOT RAM at $0480.&lt;br /&gt;
          DEX&lt;br /&gt;
          BPL     Bios_Copy2600InitToRam_Loop&lt;br /&gt;
&lt;br /&gt;
        ; Copy the main cartridge checking logic from ROM to system RAM.&lt;br /&gt;
        ; This is done so the system can disable the BIOS ROM to read the&lt;br /&gt;
        ; cartridge, while still executing the necessary checker code from RAM.&lt;br /&gt;
        LDX     #[TiaInitCode_2600Mode - RamCode_Start]&lt;br /&gt;
Bios_CopyCartCheckToRam_Loop:&lt;br /&gt;
        LDA     RamCode_Start-1,X&lt;br /&gt;
        STA     RAM_CODE_BASE-1,X&lt;br /&gt;
        DEX&lt;br /&gt;
        BNE     Bios_CopyCartCheckToRam_Loop&lt;br /&gt;
&lt;br /&gt;
        LDA     #0                     ; Zero out all TIA registers.&lt;br /&gt;
        TAX&lt;br /&gt;
Bios_ClearTiaRegs_Loop:&lt;br /&gt;
        STA     1,X&lt;br /&gt;
        INX&lt;br /&gt;
        CPX     #$2C&lt;br /&gt;
        BNE     Bios_ClearTiaRegs_Loop&lt;br /&gt;
        LDA     #$02                   ; Switch back into Maria mode.&lt;br /&gt;
        STA     INPTCTRL&lt;br /&gt;
&lt;br /&gt;
        ; Initialize the first 64 bytes of both RAM chips to $FF.&lt;br /&gt;
        LDA     #$FF&lt;br /&gt;
        LDX     #$3F&lt;br /&gt;
Bios_InitRam_Loop:&lt;br /&gt;
        STA     RAM_BASE_1,X&lt;br /&gt;
        STA     RAM_BASE_2,X&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     Bios_InitRam_Loop&lt;br /&gt;
&lt;br /&gt;
        ; Copy the initial Display List data to its location in RAM.&lt;br /&gt;
        LDX     #(DisplayList_InitialData_End - DisplayList_InitialData)&lt;br /&gt;
Bios_CopyDisplayList_Loop:&lt;br /&gt;
        LDA     DisplayList_InitialData,X&lt;br /&gt;
        STA     RAM_DLL_BASE,X&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     Bios_CopyDisplayList_Loop&lt;br /&gt;
&lt;br /&gt;
        ; Replicate the last 3 bytes of the DL data to fill out the list.&lt;br /&gt;
        INX&lt;br /&gt;
        LDY     #80&lt;br /&gt;
Bios_FillDisplayList_Loop:&lt;br /&gt;
        LDA     RAM_DLL_START,X&lt;br /&gt;
        STA     RAM_DLL_START+3,X&lt;br /&gt;
        INX&lt;br /&gt;
        DEY&lt;br /&gt;
        BNE     Bios_FillDisplayList_Loop&lt;br /&gt;
&lt;br /&gt;
        ; Jump to the cartridge test routine, now located in RAM.&lt;br /&gt;
        JMP     [CartCheck_Start - RamCode_Start + RAM_CODE_BASE]&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
;&lt;br /&gt;
; IV. RAM-EXECUTED CODE (COPIED FROM ROM)&lt;br /&gt;
;&lt;br /&gt;
; This block of code is not executed from its ROM address. It is copied to&lt;br /&gt;
; system RAM starting at RAM_CODE_BASE ($2300) and executed from there.&lt;br /&gt;
;&lt;br /&gt;
;=============================================================================&lt;br /&gt;
RamCode_Start: ; (Base address for relative calculations, starts at $FEBD in ROM)&lt;br /&gt;
CartCheck_RunInternalGame:&lt;br /&gt;
        LDA     #$13                   ; Enable BIOS ROM and Maria.&lt;br /&gt;
        STA     INPTCTRL&lt;br /&gt;
        JMP     StartInternalAsteroidsGame ; Jump to the built-in game.&lt;br /&gt;
&lt;br /&gt;
CartCheck_Start:&lt;br /&gt;
        LDA     #$16                   ; Enable external cartridge ROM and Maria.&lt;br /&gt;
        STA     INPTCTRL&lt;br /&gt;
&lt;br /&gt;
        LDY     #$FF&lt;br /&gt;
        LDX     #$7F&lt;br /&gt;
; --- Cartridge Presence Test (Floating Bus Check) ---&lt;br /&gt;
; This loop compares the same ROM regions using different base addresses. &lt;br /&gt;
; If no cart is present, the bus will &amp;quot;float&amp;quot; with the last byte of the opcode&lt;br /&gt;
; which differs in our test. Therefore, if the compared bytes differ, then &lt;br /&gt;
; If a cart IS NOT present.&lt;br /&gt;
CartCheck_FloatingBus_Loop:&lt;br /&gt;
        LDA     $FE00,X&lt;br /&gt;
        CMP     $FD80,Y&lt;br /&gt;
        BNE     CartCheck_RunInternalGame&lt;br /&gt;
        DEY&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     CartCheck_FloatingBus_Loop&lt;br /&gt;
&lt;br /&gt;
; --- Cartridge Reset Vector Test ---&lt;br /&gt;
; A valid cart must have a valid reset vector. $FFFF or $0000 indicates an&lt;br /&gt;
; empty socket or a problem.&lt;br /&gt;
          LDA     $FFFC&lt;br /&gt;
          AND     $FFFD&lt;br /&gt;
          CMP     #$FF&lt;br /&gt;
          BEQ     CartCheck_RunInternalGame ; All lines high -&amp;gt; No cart.&lt;br /&gt;
&lt;br /&gt;
          LDA     $FFFC&lt;br /&gt;
          ORA     $FFFD&lt;br /&gt;
          BEQ     CartCheck_RunInternalGame ; All lines low -&amp;gt; No cart.&lt;br /&gt;
&lt;br /&gt;
; --- Simple 7800 Signature Checks ---&lt;br /&gt;
          LDA     $FFF8                  ; Check region verification byte.&lt;br /&gt;
          ORA     #REGION&lt;br /&gt;
          CMP     #$FF&lt;br /&gt;
          BNE     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
        LDA     $FFF8&lt;br /&gt;
        EOR     #$F0&lt;br /&gt;
        AND     #$F0&lt;br /&gt;
        BNE     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
        LDA     $FFF9                  ; Check Maria signature byte.&lt;br /&gt;
        AND     #$0B                   ; $07 or $03 are valid values.&lt;br /&gt;
        CMP     #$03&lt;br /&gt;
        BNE     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
        LDA     $FFF9                  ; Get bottom of cart address range.&lt;br /&gt;
        AND     #$F0&lt;br /&gt;
        CMP     #$40                   ; Make sure it is not below $4000.&lt;br /&gt;
        BCC     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
        SBC     #$01                   ; Check that start vector is within cart range.&lt;br /&gt;
        CMP     $FFFD&lt;br /&gt;
        BCS     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
; --- Final Header Check ---&lt;br /&gt;
; This appears to be a final, simple checksum or signature validation.&lt;br /&gt;
        LDA     $1BEA&lt;br /&gt;
        EOR     #$FF&lt;br /&gt;
        STA     $1BEA&lt;br /&gt;
&lt;br /&gt;
        TAY&lt;br /&gt;
        LDX     #$05&lt;br /&gt;
CartCheck_HeaderValidation_Loop:&lt;br /&gt;
        LDA     $FFFA,X&lt;br /&gt;
        CMP     $DFFA,X&lt;br /&gt;
        BNE     CartCheck_HeaderValidation_Fail&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     CartCheck_HeaderValidation_Loop&lt;br /&gt;
&lt;br /&gt;
        CPY     $1BEA&lt;br /&gt;
        BNE     CartCheck_7800Fail_Try2600&lt;br /&gt;
&lt;br /&gt;
CartCheck_HeaderValidation_Fail:&lt;br /&gt;
        LDA     #$02&lt;br /&gt;
        STA     INPTCTRL&lt;br /&gt;
&lt;br /&gt;
        JSR     [Util_WaitForVblank - RamCode_Start + RAM_CODE_BASE]&lt;br /&gt;
&lt;br /&gt;
        LDA     #&amp;gt;(RAM_DLL_START)&lt;br /&gt;
        STA     DPPH&lt;br /&gt;
        LDA     #&amp;lt;(RAM_DLL_START)&lt;br /&gt;
        STA     DPPL                   ; Set Display List pointer.&lt;br /&gt;
        LDA     #$43&lt;br /&gt;
        STA     $78&lt;br /&gt;
        STA     CTRL                   ; Turn graphics on.&lt;br /&gt;
        LDX     #$01&lt;br /&gt;
Util_WaitTwoFrames:&lt;br /&gt;
        JSR     [Util_WaitForVblank - RamCode_Start + RAM_CODE_BASE]&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     Util_WaitTwoFrames&lt;br /&gt;
&lt;br /&gt;
        LDA     #$60                   ; Turn off graphics DMA.&lt;br /&gt;
        STA     CTRL&lt;br /&gt;
&lt;br /&gt;
; --- Boot into 7800 Mode ---&lt;br /&gt;
Boot_Enter7800Mode:&lt;br /&gt;
        LDX     #$16                   ; Enable cartridge ROM and Maria.&lt;br /&gt;
        STX     INPTCTRL&lt;br /&gt;
        TXS                            ; Set stack pointer.&lt;br /&gt;
        SED                            ; Set decimal mode.&lt;br /&gt;
        JMP     ($FFFC)                ; Jump to the cartridge's reset vector.&lt;br /&gt;
&lt;br /&gt;
; --- Boot into 2600 Mode ---&lt;br /&gt;
CartCheck_7800Fail_Try2600:&lt;br /&gt;
Boot_Enter2600Mode_FromRam:&lt;br /&gt;
        LDA     #$02                   ; Enable BIOS ROM.&lt;br /&gt;
        STA     INPTCTRL               ; Lock cart in 2600 mode.&lt;br /&gt;
        JMP     $480                   ; Execute 2600 init code from RIOT RAM.&lt;br /&gt;
&lt;br /&gt;
; --- Utility: Wait for Vertical Blank ---&lt;br /&gt;
Util_WaitForVblank:&lt;br /&gt;
        BIT     MSTAT                  ; Is VBLANK ended yet?&lt;br /&gt;
        BMI     Util_WaitForVblank&lt;br /&gt;
Util_WaitForVblank_Start:&lt;br /&gt;
        BIT     MSTAT                  ; Is VBLANK started yet?&lt;br /&gt;
        BPL     Util_WaitForVblank_Start&lt;br /&gt;
        RTS&lt;br /&gt;
&lt;br /&gt;
; --- 2600 TIA Setup Code (Copied to and executed from RIOT RAM at $0480) ---&lt;br /&gt;
TiaInitCode_2600Mode:&lt;br /&gt;
        LDA     #0&lt;br /&gt;
        TAX&lt;br /&gt;
        STA     INPTCTRL&lt;br /&gt;
TiaInit_ClearLoop:&lt;br /&gt;
        STA     $03,X&lt;br /&gt;
        INX&lt;br /&gt;
        CPX     #$2A&lt;br /&gt;
        BNE     TiaInit_ClearLoop&lt;br /&gt;
        STA     TIAWSYNC&lt;br /&gt;
        LDA     #4&lt;br /&gt;
        NOP&lt;br /&gt;
        BMI     TiaInit_SetColors1&lt;br /&gt;
        LDX     #4&lt;br /&gt;
TiaInit_DelayLoop:&lt;br /&gt;
        DEX&lt;br /&gt;
        BPL     TiaInit_DelayLoop&lt;br /&gt;
        TXS&lt;br /&gt;
        STA     $110&lt;br /&gt;
        JSR     [TiaInit_DummyLabel+1 - TiaInitCode_2600Mode + $480]&lt;br /&gt;
        JSR     [TiaInit_DummyLabel+1 - TiaInitCode_2600Mode + $480]&lt;br /&gt;
        STA     $11&lt;br /&gt;
        STA     $1B&lt;br /&gt;
        STA     $1C&lt;br /&gt;
        STA     $F&lt;br /&gt;
        NOP&lt;br /&gt;
        STA     TIAWSYNC&lt;br /&gt;
        LDA     #$00&lt;br /&gt;
        NOP&lt;br /&gt;
        BMI     TiaInit_SetColors1&lt;br /&gt;
        BIT     CXP1FB&lt;br /&gt;
        BMI     TiaInit_SetColors2&lt;br /&gt;
TiaInit_SetColors1:&lt;br /&gt;
        LDA     #2&lt;br /&gt;
        STA     COLUBK&lt;br /&gt;
        STA     $F112&lt;br /&gt;
        BNE     TiaInit_Finalize&lt;br /&gt;
TiaInit_SetColors2:&lt;br /&gt;
        BIT     CXP0FB&lt;br /&gt;
        BMI     TiaInit_SetColors3&lt;br /&gt;
        LDA     #2&lt;br /&gt;
        STA     COLUP0&lt;br /&gt;
        STA     $F118&lt;br /&gt;
TiaInit_DummyLabel:&lt;br /&gt;
        STA     $F460&lt;br /&gt;
        BNE     TiaInit_Finalize&lt;br /&gt;
TiaInit_SetColors3:&lt;br /&gt;
        STA     $2C&lt;br /&gt;
        LDA     #$08&lt;br /&gt;
        STA     $1B&lt;br /&gt;
        JSR     [TiaInit_DummyLabel+1 - TiaInitCode_2600Mode + $480]&lt;br /&gt;
        NOP&lt;br /&gt;
        BIT     CXP0FB&lt;br /&gt;
        BMI     TiaInit_SetColors1&lt;br /&gt;
TiaInit_Finalize:&lt;br /&gt;
        LDA     #$FD&lt;br /&gt;
        STA     8&lt;br /&gt;
        JMP     ($FFFC)&lt;br /&gt;
&lt;br /&gt;
; --- Internal Asteroids Game Startup Logic ---&lt;br /&gt;
; This routine is only called from inside the Asteroids game code.&lt;br /&gt;
Asteroids_InternalSubroutine_Equate = $F444&lt;br /&gt;
Asteroids_InternalSubroutine:&lt;br /&gt;
        JSR     Asteroids_InternalSubroutine_Equate&lt;br /&gt;
        LDA     $82&lt;br /&gt;
        BPL     Asteroids_Sub_SkipZero&lt;br /&gt;
        LDA     #$00&lt;br /&gt;
Asteroids_Sub_SkipZero:&lt;br /&gt;
        ASL&lt;br /&gt;
        ASL&lt;br /&gt;
        CLC&lt;br /&gt;
        ADC     $83&lt;br /&gt;
        STA     $55&lt;br /&gt;
        LDA     #$01&lt;br /&gt;
        RTS&lt;br /&gt;
&lt;br /&gt;
StartInternalAsteroidsGame:&lt;br /&gt;
        JSR     Util_WaitForVblank&lt;br /&gt;
StartInternalGame_WaitFrame1:&lt;br /&gt;
        BIT     MSTAT&lt;br /&gt;
        BMI     StartInternalGame_WaitFrame1&lt;br /&gt;
        LDA     #$9E&lt;br /&gt;
        LDY     #$00&lt;br /&gt;
        LDX     #$00&lt;br /&gt;
StartInternalGame_WaitFrame2:&lt;br /&gt;
        BIT     MSTAT&lt;br /&gt;
        BMI     StartInternalGame_SyncWaitDone&lt;br /&gt;
        STA     WSYNC&lt;br /&gt;
        STA     WSYNC&lt;br /&gt;
        DEX&lt;br /&gt;
        BNE     StartInternalGame_WaitFrame2&lt;br /&gt;
StartInternalGame_SyncWaitDone:&lt;br /&gt;
        CPX     #$78&lt;br /&gt;
        BCS     StartInternalGame_SetDPPL&lt;br /&gt;
        LDA     #$98&lt;br /&gt;
        LDY     #$2B&lt;br /&gt;
StartInternalGame_SetDPPL:&lt;br /&gt;
        STA     DPPL&lt;br /&gt;
        STY     $2001&lt;br /&gt;
        JMP     $D000                  ; Jump into the Asteroids game code.&lt;br /&gt;
&lt;br /&gt;
        .byte     0,0,0,0,0,0,0,0&lt;br /&gt;
        .byte     0,0&lt;br /&gt;
&lt;br /&gt;
; --- Equates for Asteroids Game Vectors ---&lt;br /&gt;
ASTEROIDS_NMI_VECTOR   EQU     $D2E9&lt;br /&gt;
ASTEROIDS_IRQ_VECTOR   EQU     $D329&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
;&lt;br /&gt;
; V. 6502 HARDWARE VECTORS&lt;br /&gt;
;&lt;br /&gt;
;=============================================================================&lt;br /&gt;
        .word   ASTEROIDS_NMI_VECTOR	; NMI (DLI handler for Asteroids)&lt;br /&gt;
        .word   Bios_EntryPoint_Reset	; RESET&lt;br /&gt;
        .word   ASTEROIDS_IRQ_VECTOR	; IRQ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>MSaarna</name></author>	</entry>

	</feed>