<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Perihelion_tutorial_4</id>
	<title>Perihelion tutorial 4 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Perihelion_tutorial_4"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;action=history"/>
	<updated>2026-05-02T19:39:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16010&amp;oldid=prev</id>
		<title>&gt;Niceguyuk: Fixing unicode chars</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16010&amp;oldid=prev"/>
		<updated>2015-05-07T09:30:27Z</updated>

		<summary type="html">&lt;p&gt;Fixing unicode chars&lt;/p&gt;
&lt;a href=&quot;https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;amp;diff=16010&amp;amp;oldid=16009&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>&gt;Niceguyuk</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16009&amp;oldid=prev</id>
		<title>&gt;Wongck at 03:31, 19 February 2012</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16009&amp;oldid=prev"/>
		<updated>2012-02-19T03:31:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:31, 18 February 2012&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-l189&quot;&gt;Line 189:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 189:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br/&gt;&amp;lt;br/&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Go back to [[Perihelion tutorial 3]]&amp;lt;br/&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Proceed to [[Perihelion tutorial 5]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Perihelions Atari ST M68000 tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Perihelions Atari ST M68000 tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Wongck</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16008&amp;oldid=prev</id>
		<title>&gt;Wongck at 14:33, 12 October 2011</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16008&amp;oldid=prev"/>
		<updated>2011-10-12T14:33:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:33, 12 October 2011&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-l189&quot;&gt;Line 189:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 189:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Category &lt;/del&gt;Perihelions Atari ST M68000 tutorial&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programming]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;[[Category: Perihelions Atari ST M68000 tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Assembly Language&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Wongck</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16007&amp;oldid=prev</id>
		<title>&gt;Silver Surfer: clean up</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16007&amp;oldid=prev"/>
		<updated>2009-05-03T15:37:52Z</updated>

		<summary type="html">&lt;p&gt;clean up&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:37, 3 May 2009&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-l191&quot;&gt;Line 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Category Perihelions Atari ST M68000 tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Category Perihelions Atari ST M68000 tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Programming]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Programming]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Assembly Language]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Silver Surfer</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16006&amp;oldid=prev</id>
		<title>&gt;Silver Surfer: clean up</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16006&amp;oldid=prev"/>
		<updated>2009-05-03T15:32:15Z</updated>

		<summary type="html">&lt;p&gt;clean up&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:32, 3 May 2009&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=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Category Perihelions Atari ST M68000 tutorial]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''The Atari ST M68000 tutorial part 4 â€“ of the ways of addressing memory'''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''The Atari ST M68000 tutorial part 4 â€“ of the ways of addressing memory'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&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-l191&quot;&gt;Line 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 189:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last edited 2002-06-14&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Category Perihelions Atari ST M68000 tutorial]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Silver Surfer</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16005&amp;oldid=prev</id>
		<title>&gt;Muguk at 10:41, 1 February 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16005&amp;oldid=prev"/>
		<updated>2006-02-01T10:41:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;amp;diff=16005&amp;amp;oldid=16004&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>&gt;Muguk</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16004&amp;oldid=prev</id>
		<title>&gt;Admin at 18:58, 31 January 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_4&amp;diff=16004&amp;oldid=prev"/>
		<updated>2006-01-31T18:58:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Category Perihelions Atari ST M68000 tutorial]]&lt;br /&gt;
&lt;br /&gt;
The Atari ST M68000 tutorial part 4 â€“ of the ways of addressing memory&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
          So, finally; addressing! Before writing this, I read the first two chapters in Steve Williamâ€™s Programming the 68000, and it was very good reading. He explained some things that I did not really go into, and above all, he has extensive explanations of addressing, before going into any code. Well well, all I can say is that I have a bit more pragmatic approach, this is after all a tutorial, and the aim is for you to learn through learning. Theory will usually only be covered in connection with practice. With this in mind, I urge you to get your hands on some M68K book and study it, because it goes through things more in theory than I do. You will probably find some of these books on some dusty bookshelf in your local library.&lt;br /&gt;
&lt;br /&gt;
            You should have a pretty good idea what memory is, and also what the memory registers do. Memory is simply put the computers warehouse for storing numbers. Numbers are stored in binary format, that is, only 1â€™s and 0â€™s (refer to tutorial 2 for information on this). There are also standard formats for how many 1â€™s and 0â€™s are stored. The M68K has three; byte, word and longword. A byte is 8 1â€™s and 0â€™s, a word is 16 and a longword is 32. So the quantities have the following storage capacities.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
Name 	1â€™s and 0â€™s  	Capacity&lt;br /&gt;
byte 	8   	2^8 = 256&lt;br /&gt;
word 	16 	2^16 = 65536  &lt;br /&gt;
longword 	32 	2^32 = 4294967296  &lt;br /&gt;
&lt;br /&gt;
            So, move.w means move a value, with word size. If we move a value that is bigger than word size (value &amp;gt; 65536), the value will be truncated (cut off), since we tell the computer to only move 16 1â€™s and 0â€™s. The term â€œ1â€™s and 0â€™sâ€ is called a bit. So, a byte contains 8 bits, never ever never confuse bits with bytes. The capacity is also somewhat of a misnomer. Since computer start counting at 0, the maximum value containable in a byte is 255. Also, in order to have negative numbers, the range of a byte is usually -128 to +127. Arithmetic that does not deal with negative numbers is called unsigned, and when negative numbers are involved, itâ€™s called signed arithmetic.&lt;br /&gt;
&lt;br /&gt;
            Now, we can move on to addressing modes I think. Each address is a reference or pointer to a place in memory. An address does not point to specific bits, but rather to bytes, meaning that address $2 does not point to the second bit in memory, but rather points to the second byte, which begins with the 9th bit in memory.&lt;br /&gt;
&lt;br /&gt;
             &lt;br /&gt;
Address register 	Contains  &lt;br /&gt;
A0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	$2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Memory      	Contains  &lt;br /&gt;
$1  	%10101010  &lt;br /&gt;
$2 	%01010101  &lt;br /&gt;
$3 	%10101010  &lt;br /&gt;
&lt;br /&gt;
            If we moved the byte that address register a0 pointed to, we would get %01010101, but if we moved the word that a0 pointed to, we would get %0101010110101010. If we simply moved the value of a0, we would get $2. There is a great difference to getting the value an address register points to, and the value in the address register. When we want something the register points to, we use parentheses around the address register, like this (a0). So, (a0) means the value of the memory place that a0 points to, in this case %01010101, and simply a0 (without parentheses) means the value in a0 itself, in this case $2.&lt;br /&gt;
&lt;br /&gt;
            You can also put â€˜+â€™ and â€˜-â€˜ characters before or after the address, meaning that you wish to increase or decrease the address registers value, either before or after the operation has been performed (called post or pre increment or decrement). Therefore, move.b (a0)-,d0 means put the value of byte size that a0 points to in d0, then decrease a0 with one. The value that the address will be manipulated with, is dependent on the memory chunk size, if itâ€™s byte, then 1, if word 2 and longword 4, in order to keep up with the changes. This is ideal for moving large areas of memory, you put your move instruction with post increment in a big loop. Christ, it feel like Iâ€™ve explained this very poorly, but donâ€™t worry, it will become clear with time I think, and especially after this example.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
     	Memory      	Contains   	&lt;br /&gt;
  	$1 	%00000001   	&lt;br /&gt;
	$2   	%00000010   	&lt;br /&gt;
	$3  	%00000011   	&lt;br /&gt;
	$4  	%00000100   	&lt;br /&gt;
	$5  	%00000101   	&lt;br /&gt;
  	$6 	%00000110   	&lt;br /&gt;
	$7 	%00000111   	&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	$8&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	%00001000  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	a1 	$1   	&lt;br /&gt;
	a2 	$2   	&lt;br /&gt;
	a3  	$3   	&lt;br /&gt;
	a4 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	$4  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	Command  	Effect   	&lt;br /&gt;
	move.b 	(a1),d0   	d0 = %00000001   	&lt;br /&gt;
	move.w 	(a1),d1 	d1 = %0000000100000010 	&lt;br /&gt;
	move.b 	(a3)+,d2 	d2 = %00000011, a3 = $4   	&lt;br /&gt;
	move.b 	(a3),d2 	d2 = %00000100 	&lt;br /&gt;
	move.l 	#$3,a3 	a3 = 3   	&lt;br /&gt;
make a3 point to $3   			&lt;br /&gt;
	move.b    	$1,d0 	d0 = %00000001   	&lt;br /&gt;
put the value of $1 in d0   			&lt;br /&gt;
	move.w 	-(a3),d3 	a3 = 1, d3 = %0000000100000010   	&lt;br /&gt;
	move.l  	#$1,a1 	a1 = 1   	&lt;br /&gt;
	move.l  	#$5,a2 	a2 = 5   	&lt;br /&gt;
loop 4 times   				&lt;br /&gt;
	move.b  	(a1)+,(a2)+   		&lt;br /&gt;
end loop  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
				&lt;br /&gt;
	Result   			&lt;br /&gt;
	$1  	%00000001   		&lt;br /&gt;
	$2 	%00000010   		&lt;br /&gt;
	$3 	%00000011   		&lt;br /&gt;
	$4    	%00000100   		&lt;br /&gt;
	$5 	%00000001   		&lt;br /&gt;
	$6  	%00000010   		&lt;br /&gt;
	$7 	%00000011   		&lt;br /&gt;
	$8  	%00000100   		&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
            As you might have noticed, if you studied the example thoroughly, when you want an address register to point to a place, you use # when giving the address, but when you want the content of the address of a memory location, you donâ€™t use #. Thus, if you want a0 to point to $100, you use move.l #$100,a0. But if you want the value of memory address $100 to be put into d0, you use move.l $100,d0. So, with a â€˜#â€™, you have a value, but without â€˜#â€™, you have a pointer.&lt;br /&gt;
&lt;br /&gt;
            I think that should cover it nicely. These memory addressing modes are our main concern, however, there are some more. You can use two address registers in order to get index (place of pointer), or you can add either a data register or a fixed value to an address. These are pretty self explanatory and youâ€™ll see when they come by. For example move.b (a0,a1),d0 means move the memory value pointed to by a0 + a1 into d0.&lt;br /&gt;
&lt;br /&gt;
            Now, in order to get an even firmer grip on traps, which seem to be hard to grasp, Iâ€™ll explain a bit more about the stack pointer. The trap part is the one Iâ€™ve had to edit the most because it was unclear. The stack pointer works like any other address register, the only difference is that some functions have the stack pointer as default address pointer, for example, traps. The idea of the stack is something that you can put data in, the last data entered is the first data that comes out, like spring loaded platforms for plates in cafeterias. When you put data on the stack, itâ€™s called push, and when you retrieve it again, you pop. So if you push the numbers one and two onto the stack, and then pop two items, you will get two and one (last in, first out; LIFO).&lt;br /&gt;
&lt;br /&gt;
            When pushing (putting items on the stack), you address it using pre-decrement addressing mode, and when popping, post-increment. This means that if the stack from the beginning points to $100, it will point to lesser and lesser values as you push data, and will increase in value as you pop.  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
a7 	$100   	&lt;br /&gt;
move.w 	#10,-(a7)  	push 10 onto the stack  &lt;br /&gt;
a7 	$98   	 &lt;br /&gt;
move.w 	#8,-(a7) 	push 8 onto the stack  &lt;br /&gt;
a7 	$96 	&lt;br /&gt;
move.b 	#1,-(a7) 	push 1 onto the stack  &lt;br /&gt;
a7  	$95 	uneven address, be careful  &lt;br /&gt;
move.b 	(a7)+,d0 	pop stack into d0  &lt;br /&gt;
a7 	$96   	&lt;br /&gt;
move.w  	(a7)+,d1 	pop stack into d1  &lt;br /&gt;
a7 	$98   	&lt;br /&gt;
&lt;br /&gt;
                   As you see, the stack clears itself up when using push and pop instructions. However, when we use traps, the BIOS, XBIOS or GEMDOS wonâ€™t clear up the stack for us, so in order for the stack to keep the correct address, we have to add a certain number at the end of the trap call. If we donâ€™t do this, the stack will not point to the correct address, and when you start pushing and popping, everything will be out of alignment. Also, of interest to note, is that when you go into super mode, the user stack is replaced by the super stack, so it needs to be backed up in order to be restored later, when we switch back into user mode again.&lt;br /&gt;
&lt;br /&gt;
When we already are into talking about memory and addressing, I thought Iâ€™d cover how to make your own variables and what the text to the leftmost bit really is. As you must have noted, all instructions are one tab in, so to speak, while the name of subroutines and variables are at the leftmost in the text, well, there you have it :) Whet happens when you put text to the leftmost in your source code, is that you tell the assembler that that memory position, is also known as the text you entered. Every line of source code has its memory value, which of course is some hex value, so instead of trying to figure out that hex value, you tell the assembler that â€œhenceforth, this line shall be known as [whatever you write]â€. Also, any text written after the instruction, is treated as comments and are passed over by the assembler. You may also use a â€˜*â€™ to denote comments. Comments beginning with a â€˜*â€™ can be inserted everywhere. Disclaimer; the &amp;quot;actual memory position&amp;quot; values are purely for example and have nothing to do with real life (or computers).&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
Actual memory position 	Label  	Commands  	Comments  &lt;br /&gt;
$0  	first_line   	move.w   #10,d0  	easy as pie  &lt;br /&gt;
$2 		move.w   #$0,a0   	&lt;br /&gt;
$4  		bra     a0 	moves to $0&lt;br /&gt;
$6 		bra     first_line  	moves to $0  &lt;br /&gt;
$8   			&lt;br /&gt;
$a   	* a nice comment   		&lt;br /&gt;
&lt;br /&gt;
$c     &lt;br /&gt;
	exit 	clr      -(a7) 	never reached  &lt;br /&gt;
$e      		trap     #1  	clean exit  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
            The command bra, for Branch, is used to jump to different memory positions, what it does then is to alter the value of the program counter (PC). You remember, the address register that holds the position of the next instruction to be executed. Branching will be covered extensively in the next tutorial. Since variables are just chunks of data at a certain memory position, they are defined in almost the same way. You have a name for the variable, and then you say either dc.N, where N is either b, w or l for byte, word or longword, or ds.N. DC stands for Define Constant, and DS is Define Storage.&lt;br /&gt;
&lt;br /&gt;
            DC is a variable, while DS is a large storage area of memory. The number after DC is the initial value of the variable, and the number after DS is how many variables of the same type you want. DS is used for creating big memory spaces that you want to put stuff into later, like a bitmap or so, more on this in another tutorial. The DC area should be denoted by a &amp;quot;section data&amp;quot;, and the DS section should be denoted by a &amp;quot;section bss&amp;quot; (Block Storage Segment). Section data comes first, and section bss next, these areas are to be put last in the code.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
section data&lt;br /&gt;
		&lt;br /&gt;
temp 	dc.l 	0 	a longword sized chunk of memory, given value 0  &lt;br /&gt;
	section bss 		&lt;br /&gt;
storage 	ds.w 	4  	four words after one-another  &lt;br /&gt;
storage2   	ds.l  	2 	&lt;br /&gt;
&lt;br /&gt;
two longwords after one-another, since one longword is two word storage and storage2 have the same size&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
            I didnâ€™t come up with any creative way to use our new-found knowledge of addressing modes, so I just made some changes to the program we already have. For example, an unnecessary putting of the background colour memory in a0 instead of just accessing it directly, and moving the temp storage from d0 to the stack instead.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
	jsr 	initialise   	jump to initialise  &lt;br /&gt;
        	move.w  	$ffff8240,-(a7)  	push old colour to stack  &lt;br /&gt;
	move.l 	#$ffff8240,a0 	a0 points to colour 0  &lt;br /&gt;
	move.w  	#$700,(a0)  	put $700 where a0 points  &lt;br /&gt;
	move.w 	#7,-(a7) 	wait for a keypress  &lt;br /&gt;
	trap  	#1 	call gemdos  &lt;br /&gt;
	addq.l  	#2,a7  	clear up stack  &lt;br /&gt;
	move.w 	(a7)+,(a0) 	pop from stack  &lt;br /&gt;
	jsr 	restore 	jump to restore  &lt;br /&gt;
	clr.l 	-(a7) 	clean exit  &lt;br /&gt;
	trap&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#1  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	call gemdos  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
initialise&lt;br /&gt;
&lt;br /&gt;
* set supervisor  &lt;br /&gt;
		&lt;br /&gt;
	clr.l  	-(a7) 	clear stack  &lt;br /&gt;
	move.w 	#32,-(a7)   	prepare for user mode  &lt;br /&gt;
	trap  	#1  	call gemdos  &lt;br /&gt;
	addq.l 	#6,a7       	clean up stack  &lt;br /&gt;
	move.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	d0,old_stack &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	backup old stack pointer  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* end set supervisor&lt;br /&gt;
		&lt;br /&gt;
	rts 		restore  &lt;br /&gt;
&lt;br /&gt;
* set user mode again&lt;br /&gt;
		&lt;br /&gt;
	move.l 	old_stack,-(a7) 	restore old stack pointer  &lt;br /&gt;
	move.w 	#32,-(a7)  	back to user mode  &lt;br /&gt;
	trap 	#1 	call gemdos  &lt;br /&gt;
	addq.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#6,a7  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	clear stack  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* end set user   		&lt;br /&gt;
	rts  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
		&lt;br /&gt;
	section data 		&lt;br /&gt;
&lt;br /&gt;
old_stack&lt;br /&gt;
	dc.l  	0   	 &lt;br /&gt;
&lt;br /&gt;
                                          &lt;br /&gt;
&lt;br /&gt;
            That was that, I hope you know enough about addressing now to push on. In the next tutorial we will probably cover the graphics memory a bit, and what you can do with it. This means weâ€™ll finally get some action people! Iâ€™m starting to get bored of only changing the colour of the background, arenâ€™t you? We have covered most of the basic theory I think, which means that in the future there will be more practical coding, like techniques for scrollers, moving sprites, making rasters and stuff like that.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Warrior Munk of poSTmortem 2002-04-08    &lt;br /&gt;
&lt;br /&gt;
â€œTarget that explosion and fire.â€   &lt;br /&gt;
&lt;br /&gt;
- Star Trek VI, the Undiscovered Country    &lt;br /&gt;
&lt;br /&gt;
Last edited 2002-06-14&lt;/div&gt;</summary>
		<author><name>&gt;Admin</name></author>
	</entry>
</feed>