<?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_14</id>
	<title>Perihelion tutorial 14 - 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_14"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_14&amp;action=history"/>
	<updated>2026-05-02T11:47:17Z</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_14&amp;diff=15971&amp;oldid=prev</id>
		<title>&gt;Wongck at 03:37, 19 February 2012</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_14&amp;diff=15971&amp;oldid=prev"/>
		<updated>2012-02-19T03:37:22Z</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:37, 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-l219&quot;&gt;Line 219:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 219:&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;Warrior Munk of poSTmortem, 2003-02-20   &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;Warrior Munk of poSTmortem, 2003-02-20   &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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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 13]]&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 15]]&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_14&amp;diff=15970&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_14&amp;diff=15970&amp;oldid=prev"/>
		<updated>2011-10-12T14:33:27Z</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-l220&quot;&gt;Line 220:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 220:&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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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; 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;[[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:Programming]]&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;[[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_14&amp;diff=15969&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_14&amp;diff=15969&amp;oldid=prev"/>
		<updated>2009-05-03T15:37:02Z</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-l222&quot;&gt;Line 222:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 222:&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_14&amp;diff=15968&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_14&amp;diff=15968&amp;oldid=prev"/>
		<updated>2009-05-03T15:30:31Z</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:30, 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 14 â€“ of using the gramophone&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 14 â€“ of using the gramophone&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-l221&quot;&gt;Line 221:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 219:&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;Warrior Munk of poSTmortem, 2003-02-20   &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;Warrior Munk of poSTmortem, 2003-02-20   &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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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;''They fought like warrior poets. They fought like Scotsmen and won their freedom forever''  - Braveheart&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;&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: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_14&amp;diff=15967&amp;oldid=prev</id>
		<title>&gt;Muguk at 16:57, 1 February 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_14&amp;diff=15967&amp;oldid=prev"/>
		<updated>2006-02-01T16:57:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_14&amp;amp;diff=15967&amp;amp;oldid=15966&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_14&amp;diff=15966&amp;oldid=prev</id>
		<title>&gt;Admin at 19:07, 31 January 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_14&amp;diff=15966&amp;oldid=prev"/>
		<updated>2006-01-31T19:07:50Z</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 14 â€“ of using the gramophone&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Wow, it really was a long time since the last tutorial. Iâ€™ve had more and more to do in school and other things have popped up, maybe I just needed a break to. Now I really feel up to writing again, thanks to some encouragement on the Atari forum ( http://www.atari-forum.com ). This here tutorial will be the follow up of the previous one, in which I promised to tell you how to play the .ym files of the ST-sound format from Arnaud CarrÃ©. It will be quite easy and a bit of a soft start actually. The focus lies not so much on the code, but how to find and apply knowledge. Like I always say, I am no musician, neither am I an artist, so therefore, I need to rip stuff or have it made for me. I have loads of .ym files on my PC, which can be played by using a plugin for Winamp. Wouldnâ€™t it be nice to be able to use this wealth of music? Yes it would, I wonder how that can be achieved, hereâ€™s how. &lt;br /&gt;
                    In order to use the files, we need information on the file format. See tutorial 6 for a quick refresh on files if thatâ€™s needed. Load up a good search engine in the browser, I used Google ( www.google.com ). Now we want to find info on the .ym file format, so a search string of â€œym file formatâ€ would seem appropriate. Would you look at that, the first find seems good, taking us to http://leonard.oxg.free.fr/ymformat.html. Quickly browsing the side, we judge it seems to hold what we need. We also discover the file format is freeware, so thereâ€™s no need to worry about the cops. &lt;br /&gt;
                     Hum hum, there seem to be different versions of the file format, didnâ€™t know that â€¦ hum hum, this information only applies to YM6, the latest version. â€œSo YM6 is just a register dump fileâ€, this is an important key, it tells us how the file format works. It seems that a .ym file is simply a dump of the data used to play a song, but thatâ€™s not enough, we need to know how the data is organized. Reading on â€¦ Ah, .ym files are packed using LHA, so thatâ€™s why they are so small. Using the freeware UltimateZip (http://www.ultimatezip.com), a .ym file can be unpacked, or any other LHA packer, but UltimateZip is my choice of program. &lt;br /&gt;
                     Reading ever further down the page â€¦ ah, here it comes. The .ym file contains 16 bytes of data for each frame, interleaved. Sure, the sound chip has 16 registers, so by just putting the data into the registers of the sound chip, music should be played. Lastly, thereâ€™s some info on the file header. Some files have headers that tell of important information for the rest of the file, here for example, itâ€™s nice to know how long a song actually is. Thereâ€™s some talk about didigrums and so, that will not be covered in this tutorial and you are welcome to explore it yourself. &lt;br /&gt;
                     So, now we have all the information we need, we just have to structure it and go through it. Load up the included .ym file JAMBLV1.YM in your favourite hexeditor. Itâ€™s also possible to put it in an otherwise empty source file, assemble it and go into the debugger like this&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	nop&lt;br /&gt;
incbin jamblv1.ym&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                     It seems that every program starts with two bytes of data that would overwrite the data in jamblv1.ym, thatâ€™s what the nop is there for. By hitting tab once to get into the memory window, you can use the arrow keys to scroll up and down in the jamblv1.ym file. Now weâ€™ll traverse the file and see if it corresponds to the information we have on what the file should look like. It starts with the values $59, $4d and $21, which identifies the file as a YM6 file. When interpreted as ASCII (numbers to letters), these numbers become the letters Y, M and !. Next follows a test string, â€œLeOnArD!â€, all good so far. &lt;br /&gt;
                     After the initial check-things come the interesting information, a long (4 bytes) that tells us the number of frames in the file. In this case, itâ€™s a value of $0000bea, which corresponds to 3050 in decimal. Note that I wrote out the leading two bytes that for now only contain zeros, but they are important to count otherwise youâ€™ll loose yourself. What does this mean exactly? Well, frame of music is just like a frame of graphics, the ST usually operates at 50 Hertz which equals 50 frames per second. So we divide 3050 by 50 and get the value 61, indicating the tune should be 1:01 long. Load it up in Winamp to test, yep, seems to be right. &lt;br /&gt;
                     Next comes four bytes of song attributes, that I have no idea what it is, but zero seems to be a safe value, and two bytes of digidrums, which are also zero. Some files have a song attribute of one, and they seem to work fine to. Youâ€™ll have to experiment with these yourself if you find songs that should use digidrums, or mail LeOnArD! Another uninteresting value, $001e8480, or 2000000, which seems to indicate this is indeed an Atari tune. Then two bytes, telling us the tune is operating at a frequency of 50 Hz. Lastly an additional six bytes of zero data. &lt;br /&gt;
                     Right, you with me so far? Itâ€™s just a question of slowly going through the file and check that everything is in order and corresponds to the information we have. Of course it is in order, otherwise the file wouldnâ€™t work in Winamp, but I want to make sure for myself. Now comes some text again, according to Leonardâ€™s page, these are the song name, author name and song comment. The data is in null terminated string format. This means the strings can be variable in length, and ends with the value zero. Quite true, after each little string, we can see zeroes shining through. After these strings, the real sound data begins, also of unknown length. However, since we know that there are 3050 frames of data, and each frame holds 16 bytes of sound data, there are 3050 * 16 = 48800 bytes of data here, this calculation also seems correct since this is roughly the file size. At the end, there are also four bytes forming the string â€œEnd!â€. &lt;br /&gt;
                      Sow what do we really need here? Two things, the number of frames, to know how long the music file is, so we know when to terminate play, or loop the song, and the start address of the music data. We know the address of the number of frames, so thatâ€™s easy to just store in a variable. Getting to the music data is trickier, since we donâ€™t know exactly where it is. Sure, we can hexedit the file and then hardcode the address into the program, but a more general way of finding the music start data would be nice, so that we easily can play many different .ym files without having to check the start address of the sound data for each file. &lt;br /&gt;
                      What we want is to get to the end of the three text strings, because this is where the sound data begins (if you donâ€™t have any digidrums). To do this, we put ourselves at the beginning of the text field, which always start at the same place, then we check each byte for a zero, since this means the end of a string, and do this three times. In so doing, we will have passed by all the three text strings, like so&lt;br /&gt;
	move.l  	#ym_file,a0 	start of ym file&lt;br /&gt;
	move.l 	12(a0),frames 	store number of frames&lt;br /&gt;
	add.l 	#34,a0 	beginning of text&lt;br /&gt;
song_name 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne 	song_name 	&lt;br /&gt;
comment 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne 	comment 	&lt;br /&gt;
song_data 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne 	song_data 	&lt;br /&gt;
	move.l 	a0,music 	skipped 3 zero, store address&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                       Now we have the length of the tune in frames, and the start address for the sound data in music. What was that about interleaved data? The thing is, that many registers of the sound chip are all zero. In order to compress better, it would be nice to have all these zeros in one long row. Therefore, the data is not presented in the order itâ€™s supposed to be inserted in the sound chip, rather, the data is presented one full register after another. Thus, in our file, there is 3050 bytes of register 0 data, then 3050 bytes of register 1 data and so on. &lt;br /&gt;
                       When we put the sound data in the yammy, we have to add the number of frames for each input. In this way, we will first input data from register 0, then we skip the number of frames to reach the data for the next register and so on. Hereâ€™s the entire code, the code for the VU bars has already been discussed and is only included here for fun, so there is very little new code&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	jsr 	initialise 	&lt;br /&gt;
	move.l 	#palette,a0 	pointer to palette&lt;br /&gt;
	movem.l 	(a0)+,d0-d7 	palette in d0-d7&lt;br /&gt;
	movem.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	d0-d7,$ff8240&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	apply palette&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	move.l 	#ym_file,a0 	start of ym file&lt;br /&gt;
	move.l &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	12(a0),frames&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	store number of frames&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	add.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#34,a0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	beginning of text&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
song_name 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne 	song_name 	&lt;br /&gt;
comment 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne 	comment 	&lt;br /&gt;
song_data 			&lt;br /&gt;
	cmp.b 	#0,(a0)+ 	search for 0&lt;br /&gt;
	bne&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	song_data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	move.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	a0,music&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	skipped 3 zero, store address&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	move.l 	$70,-(a7) 	backup $70&lt;br /&gt;
	move.l  	#main,$70 	start main routine&lt;br /&gt;
	move.w 	#7,-(a7) 	&lt;br /&gt;
	trap  	#1 	&lt;br /&gt;
	addq.l 	#2,a7  	wait keypress&lt;br /&gt;
	move.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	(a7)+,$70&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	restore $70&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	jsr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	restore&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	clr.l 	-(a7) 	&lt;br /&gt;
	trap&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
main 			&lt;br /&gt;
	movem.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	d0-d7/a0-a6,-(a7)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	backup registers&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	move.l  	music,a0 	pointer to current music data&lt;br /&gt;
	moveq.l  	#0,d0 	first yammy register&lt;br /&gt;
play 			&lt;br /&gt;
	move.b 	d0,$ff8800 	write to register&lt;br /&gt;
	move.b 	(a0),$ff8802 	write music data&lt;br /&gt;
	add.l 	frames,a0 	jump to next register in data&lt;br /&gt;
	addq.b 	#1,d0 	next register&lt;br /&gt;
	cmp.b 	#16,d0 	see if last register&lt;br /&gt;
	bne 	play 	 if not, write next one&lt;br /&gt;
	addq.l 	#1,music 	next set of registers&lt;br /&gt;
	addq.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#1,play_time&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	1/50th second play time&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	move.l 	frames,d0  	&lt;br /&gt;
	move.l 	play_time,d1 	&lt;br /&gt;
	cmp.l 	d0,d1  	see if at end of music file&lt;br /&gt;
	bne 	no_loop 	&lt;br /&gt;
	sub.l  	d0,music 	beginning of music data&lt;br /&gt;
	move.l 	#0,play_time 	reset play time&lt;br /&gt;
no_loop 			&lt;br /&gt;
	jsr  	vu_bars 	paint the vu bars&lt;br /&gt;
	movem.l 	(a7)+,d0-d7/a0-a6 	restore registers&lt;br /&gt;
	rte&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
		&lt;br /&gt;
* put in VU bars 			&lt;br /&gt;
vu_bars 			&lt;br /&gt;
	move.l 	$44e,a0  	get screen address&lt;br /&gt;
	add.l 	#160*199-(15*2)*160,a0 	bottom area of screen&lt;br /&gt;
	move.l &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#bar,a1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	point to bar colours&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	rept 	15  	15 max volume&lt;br /&gt;
	movem.l 	(a1)+,d0-d1 	VU bar colour in d1-d2a&lt;br /&gt;
	movem.l 	d0-d1,(a0)  	first VU bar&lt;br /&gt;
	addq.l 	#8,a0 	next VU bar&lt;br /&gt;
	movem.l 	d0-d1,(a0) 	second VU bar&lt;br /&gt;
	addq.l 	#8,a0 	next VU bar&lt;br /&gt;
	movem.l 	d0-d1,(a0) 	third VU bar&lt;br /&gt;
	add.w 	#320-16,a0 	two lines down, two bars left&lt;br /&gt;
	endr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
		&lt;br /&gt;
* delete VU bars depending on volume 	&lt;br /&gt;
	move.l 	$44e,a0  	get screen address&lt;br /&gt;
	add.l&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#160*199-(15*2)*160,a0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	bottom area of screen&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	moveq.l 	#0,d0 	clear d0&lt;br /&gt;
	move.b 	#8,$ff8800 	chanenl a volume&lt;br /&gt;
	move.b 	$ff8800,d0 	put volume in d0&lt;br /&gt;
	jsr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	del_bar&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	moveq.l 	#0,d0  	clear d0&lt;br /&gt;
	move.b 	#9,$ff8800 	channel b volume&lt;br /&gt;
	move.b 	$ff8800,d0 	put volume in d0&lt;br /&gt;
	add.l 	#8,a0 	next VU bar&lt;br /&gt;
	jsr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	del_bar&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	moveq.l 	#0,d0 	clear d0&lt;br /&gt;
	move.b 	#10,$ff8800 	channel c volume&lt;br /&gt;
	move.b 	$ff8800,d0 	put volume in d0&lt;br /&gt;
	add.l  	#8,a0 	next VU bar&lt;br /&gt;
	jsr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	del_bar&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	rts 		&lt;br /&gt;
del_bar 			&lt;br /&gt;
* screen address of top line in a0 		&lt;br /&gt;
* volume in d0, gets detroyed 		&lt;br /&gt;
	move.l 	a0,-(a7) 	backup a0&lt;br /&gt;
	move.l  	a1,-(a7) 	backup a1&lt;br /&gt;
	and.b&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	#%1111,d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	keep only lowest 4 bits&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	move.l 	#delete,a1 	beginning of delete blocks&lt;br /&gt;
	mulu 	#12,d0 	length of one delete block&lt;br /&gt;
	add.l  	d0,a1 	skip some delete instructions&lt;br /&gt;
	jmp&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	(a1)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	jump to correct delete position&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
delete 			&lt;br /&gt;
	rept 	15 	&lt;br /&gt;
	clr.l 	(a0) 	clear two bit planes&lt;br /&gt;
	clr.l 	4(a0) 	clear two bit planes&lt;br /&gt;
	add.l 	#320,a0 	hop two lines down&lt;br /&gt;
	endr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
		&lt;br /&gt;
	move.l 	(a7)+,a1 	restore a1&lt;br /&gt;
	move.l 	(a7)+,a0 	restore a0 &lt;br /&gt;
	rts&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
		&lt;br /&gt;
	include&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	initlib.s&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
	section data 		&lt;br /&gt;
music 	dc.l  	0 	address of music data&lt;br /&gt;
frames 	dc.l  	0 	how many frames of music data&lt;br /&gt;
play_time&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	dc.l &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	how many VBL's has elapsed&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
ym_file&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	incbin&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	jamblv1.ym&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
bar 			&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* colour data for each line of VU bar&lt;br /&gt;
	dc.w 	$00ff,$00ff,$00ff,$00ff&lt;br /&gt;
	dc.w 	$0000,$00ff,$00ff,$00ff&lt;br /&gt;
	dc.w 	$00ff,$0000,$00ff,$00ff&lt;br /&gt;
	dc.w 	$0000,$0000,$00ff,$00ff&lt;br /&gt;
	dc.w 	$00ff,$00ff,$0000,$00ff&lt;br /&gt;
	dc.w 	$0000,$00ff,$0000,$00ff&lt;br /&gt;
	dc.w 	$00ff,$0000,$0000,$00ff&lt;br /&gt;
	dc.w 	$0000,$0000,$0000,$00ff&lt;br /&gt;
	dc.w 	$00ff,$00ff,$00ff,$0000&lt;br /&gt;
	dc.w 	$0000,$00ff,$00ff,$0000&lt;br /&gt;
	dc.w 	$00ff,$0000,$00ff,$0000&lt;br /&gt;
	dc.w 	$0000,$0000,$00ff,$0000&lt;br /&gt;
	dc.w 	$00ff,$00ff,$0000,$0000&lt;br /&gt;
	dc.w 	$0000,$00ff,$0000,$0000&lt;br /&gt;
	dc.w 	$00ff,$0000,$0000,$0000&lt;br /&gt;
	dc.w 	$00ff,$0000,$0000,$0000&lt;br /&gt;
palette 		$000,$023,$023,$024,$024,$025,$026,$026&lt;br /&gt;
	dc.w 	$027,$027,$227,$327,$427,$527,$627,$727&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                      I start off with a normal setup, then read in the music data as described previously and start the main routine. The main routine here has the actual routine for playing the tune, and the rest of the code is just VU bars. &lt;br /&gt;
                      First, make a0 point to the current music data, this is somewhere in the music file (on a number of frames boundary), then put the yammy register number in d0. The real routine for actually getting the sound data into the yammy is very compact. D0 holds the number of the register to manipulate, putting that in $ff8800 lets us manipulate the register in question, then I just put in the music data. After that, itâ€™s a question of adding the number of frames to the music pointer, in order to point to the next register. Increment d0 to point to the next register, and do this 16 times, one time for each register. If you donâ€™t remember about the sound chip, recheck tutorial 13. &lt;br /&gt;
                      Next I increment the music pointer, so that it points to the beginning of the next sound data set, and increase the number of played frames by one. The last part of the main routine checks to see if the number of played frames equals the number of frames, if this is so, I subtract the number of frames from the music pointer. This makes the music pointer point to the beginning of the music data again. The play time also needs to be reset of course, finally, a jump to the VU routine, just for the visual effect. Not to complex when you think about it, actually, I managed to get it right on the first compile â€¦ almost, I had a slight offset error. &lt;br /&gt;
                     The routine should work for any and all YM6 version files without anything fancy (digidrums etc), and perhaps even with some fancy stuff. I donâ€™t really know. Unfortunately it will not play any other ym versions, youâ€™ll have to work that out yourself. In order to get any music you want from any Atari source, you can use SainT to record the music in .ym format, itâ€™s that simple. &lt;br /&gt;
                     With this routine, you could make yourself a .ym file player for the Atari. As the program is now, it's really crappy, there is no error reporting of any kind for starters. Perhaps some tunes really are in 60 Hertz, then they would play wrongly, or perhaps the file is something other than YM6 probably resulting in a crash. You should add some error reporting yourself.&lt;br /&gt;
                     One nice thing to do with this is to just hook up the music to the VBL, then drop out of the program (not waiting for a keypress nor restoring the VBL). The music will still be playing and you can go on coding. This is very unstable though, and doing this in the GEM desktop will probably get you an immediate crash, doing this in Devpac will probably get you a crash when you compile anything. It's just an idea to get you going.&lt;br /&gt;
&lt;br /&gt;
Warrior Munk of poSTmortem, 2003-02-20  &lt;br /&gt;
â€œThey fought like warrior poets. They fought like Scotsmen and won their freedom foreverâ€ &lt;br /&gt;
&lt;br /&gt;
- Braveheart&lt;/div&gt;</summary>
		<author><name>&gt;Admin</name></author>
	</entry>
</feed>