<?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_12</id>
	<title>Perihelion tutorial 12 - 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_12"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;action=history"/>
	<updated>2026-05-02T09:11:38Z</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_12&amp;diff=15959&amp;oldid=prev</id>
		<title>&gt;Wongck at 03:36, 19 February 2012</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15959&amp;oldid=prev"/>
		<updated>2012-02-19T03:36:40Z</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:36, 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-l506&quot;&gt;Line 506:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 506:&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;- Apocalypse Now&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;- Apocalypse Now&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 11]]&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 13]]&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_12&amp;diff=15958&amp;oldid=prev</id>
		<title>&gt;Wongck at 14:57, 29 November 2011</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15958&amp;oldid=prev"/>
		<updated>2011-11-29T14:57: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:57, 29 November 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-l499&quot;&gt;Line 499:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 499:&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;Now you have the tools needed to create a game, or even a demo for that matter: now go to it! Even though there is still much to learn, the basics have been covered, all but one thing: music and sound. It is my hope that this will come soon. But you donâ€™t have to worry about that for now, code away and the music will be easily incorporated at a later stage.  &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;Now you have the tools needed to create a game, or even a demo for that matter: now go to it! Even though there is still much to learn, the basics have been covered, all but one thing: music and sound. It is my hope that this will come soon. But you donâ€™t have to worry about that for now, code away and the music will be easily incorporated at a later stage.  &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;Usually, you just hook up the music in your [[VBL]] routine. On the [[Dead Hackers Society]] page, http://dhs.nu, there are two chip editors (at least) with instructions on how to play the generated music in assembler; Edsynth and the XLR8. Go take a look at them if youâ€™re curious, there should be no trouble understanding the code.&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;Usually, you just hook up the music in your [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Computer_acronyms#VBL|&lt;/ins&gt;VBL]] routine. On the [[Dead Hackers Society]] page, http://dhs.nu, there are two chip editors (at least) with instructions on how to play the generated music in assembler; Edsynth and the XLR8. Go take a look at them if youâ€™re curious, there should be no trouble understanding the code.&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;   &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;   &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_12&amp;diff=15957&amp;oldid=prev</id>
		<title>&gt;Wongck at 14:27, 15 October 2011</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15957&amp;oldid=prev"/>
		<updated>2011-10-15T14:27:05Z</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:27, 15 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-l7&quot;&gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&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;There is a little 6301 processor inside the Atari ST, which takes care of the keyboard, the mouse and the joystick. It even has a real time clock. This cute little chip is sometimes referred to as the IKBD, for Intelligent KeyBoarD. It might be fun to know that the IKBD has 4K (4096 bytes) of ROM memory, and 128 bytes of RAM. ROM stands for Read Only Memory, and as it says, itâ€™s memory that canâ€™t be altered, RAM is Random Access Memory and it is that which we usually mean by memory. The 128 bytes of RAM on the IKBD are only used as a temporal storage area. The reason for having a separate chip altogether taking care of the keyboard, mouse and joystick is that those actions wonâ€™t burden the main processor (the 68000, the one weâ€™ve been programming so far in these tutorials). Instead, we can poll the IKBD as we choose, or tell it to report stuff in any way we choose, and just let the IKBD worry about the details.  &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;There is a little 6301 processor inside the Atari ST, which takes care of the keyboard, the mouse and the joystick. It even has a real time clock. This cute little chip is sometimes referred to as the IKBD, for Intelligent KeyBoarD. It might be fun to know that the IKBD has 4K (4096 bytes) of ROM memory, and 128 bytes of RAM. ROM stands for Read Only Memory, and as it says, itâ€™s memory that canâ€™t be altered, RAM is Random Access Memory and it is that which we usually mean by memory. The 128 bytes of RAM on the IKBD are only used as a temporal storage area. The reason for having a separate chip altogether taking care of the keyboard, mouse and joystick is that those actions wonâ€™t burden the main processor (the 68000, the one weâ€™ve been programming so far in these tutorials). Instead, we can poll the IKBD as we choose, or tell it to report stuff in any way we choose, and just let the IKBD worry about the details.  &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;Our mission therefore is clear: we must find a way to make the [[IKBD]] report the status of the joystick, and also find a way to read that status in some way. When that is accomplished, we can use the sprite routine from the previous tutorial as it is, with only a change in the move_sprite subroutine. The new subroutine will update the X and Y coordinates in accordance with the joystick status instead of just moving it about.&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;Our mission therefore is clear: we must find a way to make the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Keyboard Protocol|&lt;/ins&gt;IKBD]] report the status of the joystick, and also find a way to read that status in some way. When that is accomplished, we can use the sprite routine from the previous tutorial as it is, with only a change in the move_sprite subroutine. The new subroutine will update the X and Y coordinates in accordance with the joystick status instead of just moving it about.&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;Trap function 25 of the [[XBIOS]] will allow us to send commands to the IKBD. However, unlike other trap calls, the input data is a pointer to a string of data. The text file IKBD.TXT may seem very sketchy and difficult to understand, but it does contain a list of all the possible commands that you can send to the IKBD, taking a look inside it, we see function $14. IKBD command $14 will report joystick status every time the joystick is changed. All well and good, this is how we set it up.&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;Trap function 25 of the [[XBIOS]] will allow us to send commands to the IKBD. However, unlike other trap calls, the input data is a pointer to a string of data. The text file IKBD.TXT may seem very sketchy and difficult to understand, but it does contain a list of all the possible commands that you can send to the IKBD, taking a look inside it, we see function $14. IKBD command $14 will report joystick status every time the joystick is changed. All well and good, this is how we set it up.&lt;/div&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-l23&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&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 first parameter is a pointer to the address which contains the commands, the second parameter is the length in byte of the command list minus one, in this case zero. Then the function number, a trap calling XBIOS and a normal stack clean up. Sure, so now the joystick reports information, but where does the information go? Well, actually we need to write our own routine to read the joystick information.&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 first parameter is a pointer to the address which contains the commands, the second parameter is the length in byte of the command list minus one, in this case zero. Then the function number, a trap calling XBIOS and a normal stack clean up. Sure, so now the joystick reports information, but where does the information go? Well, actually we need to write our own routine to read the joystick information.&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;Every time the joystick sends information, there is a jump to an address with instructions of what to do with this data, compare this with the timers from tutorial 9. Also, as with the timers, we will hook up our own routine to read the joystick. With trap function 34 of the [[XBIOS]], the [[IKBD]] returns a list of all its vectors. The address of the IKBD vectors is put in d0. The joystick report vector is at offset 24, so by putting our own joystick routine at the address pointed to by d0 +24, we have effectively hooked up our own joystick routine.&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;Every time the joystick sends information, there is a jump to an address with instructions of what to do with this data, compare this with the timers from tutorial 9. Also, as with the timers, we will hook up our own routine to read the joystick. With trap function 34 of the [[XBIOS]], the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Keyboard Protocol|&lt;/ins&gt;IKBD]] returns a list of all its vectors. The address of the IKBD vectors is put in d0. The joystick report vector is at offset 24, so by putting our own joystick routine at the address pointed to by d0 +24, we have effectively hooked up our own joystick routine.&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;                       &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;                       &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;&amp;lt;pre&amp;gt;&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;&amp;lt;pre&amp;gt;&lt;/div&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-l45&quot;&gt;Line 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 45:&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;&amp;lt;/pre&amp;gt;  &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;&amp;lt;/pre&amp;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;div&gt;	&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;	&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;Straightforward, first get the address of the [[IKBD]] vectors. Store it for future restoration. Then put the address in a0 so that a0 points to the IKBD vectors, backup the old joystick vector which is found at offset 24, and input our own joystick routine. By the way, the mouse vector is at offset 16. With the help of this and the information given on the other IKBD commands in the IKBD.TXT file, you should be able to setup your own mouse routine as well.&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;Straightforward, first get the address of the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Keyboard Protocol|&lt;/ins&gt;IKBD]] vectors. Store it for future restoration. Then put the address in a0 so that a0 points to the IKBD vectors, backup the old joystick vector which is found at offset 24, and input our own joystick routine. By the way, the mouse vector is at offset 16. With the help of this and the information given on the other IKBD commands in the IKBD.TXT file, you should be able to setup your own mouse routine as well.&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;The joystick routine ends with an rts, nothing else, and may not take more than 1/100 of a second (half a VBL, more than enough time really). What happens now is that each time the joystick status is changed, the ST will jump to our joystick routine. Once there, a0 will point to three bytes in memory which contain the status of the joysticks.&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 joystick routine ends with an rts, nothing else, and may not take more than 1/100 of a second (half a VBL, more than enough time really). What happens now is that each time the joystick status is changed, the ST will jump to our joystick routine. Once there, a0 will point to three bytes in memory which contain the status of the joysticks.&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_12&amp;diff=15956&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_12&amp;diff=15956&amp;oldid=prev"/>
		<updated>2011-10-12T14:33:13Z</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-l507&quot;&gt;Line 507:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 507:&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;- Apocalypse Now&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;- Apocalypse Now&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_12&amp;diff=15955&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_12&amp;diff=15955&amp;oldid=prev"/>
		<updated>2009-05-03T15:36: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:36, 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-l509&quot;&gt;Line 509:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 509:&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_12&amp;diff=15954&amp;oldid=prev</id>
		<title>&gt;Silver Surfer: Added category</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15954&amp;oldid=prev"/>
		<updated>2009-05-02T20:50:15Z</updated>

		<summary type="html">&lt;p&gt;Added category&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 16:50, 2 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-l508&quot;&gt;Line 508:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 508:&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: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 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_12&amp;diff=15953&amp;oldid=prev</id>
		<title>&gt;Rb at 20:36, 9 October 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15953&amp;oldid=prev"/>
		<updated>2006-10-09T20:36:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;amp;diff=15953&amp;amp;oldid=15952&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>&gt;Rb</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15952&amp;oldid=prev</id>
		<title>&gt;Muguk at 13:23, 2 February 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15952&amp;oldid=prev"/>
		<updated>2006-02-02T13:23:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;amp;diff=15952&amp;amp;oldid=15951&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_12&amp;diff=15951&amp;oldid=prev</id>
		<title>&gt;Admin at 19:05, 31 January 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Perihelion_tutorial_12&amp;diff=15951&amp;oldid=prev"/>
		<updated>2006-01-31T19:05:16Z</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 12 â€“ of controlling the puppets&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
              Yep, here we go again, this time I think weâ€™ll have a nice little tutorial on our hands, not that big. It only concerns the workings of the joystick. It couldâ€™ve involved the mouse as well, but to be honest I havenâ€™t gotten the workings of the mouse down yet. The code will build heavily on the previous tutorial, since we are going to move a sprite around with the joystick, but you donâ€™t need to understand the sprite parts of the code to understand the workings of the joystick. If you donâ€™t know what a joystick is, or if you donâ€™t recognise the little sprite ship used in the sample source, you are not allowed to read further. Please stop this instant and browse the web for more generally related Atari information. &lt;br /&gt;
&lt;br /&gt;
               A while back, I thought the ST was so much cooler than your average PC, because with the ST, you just have to plug in a joystick and it works. With a PC, you have to install drivers and shit, and configure the exact joystick and generally mess around lots and perhaps even then it wonâ€™t work or the program you want to run doesnâ€™t support your joystick. All in all inferior construction, or so I thought. Actually, with the ST, you also need to set up your own joystick driver. In fact, since you usually donâ€™t have a hard drive and the OS (operating system) doesnâ€™t have drivers for the joystick, every program needs itâ€™s own drivers for the joystick. Writing the joystick driver isnâ€™t at all difficult, but you have to have some working knowledge to do it. &lt;br /&gt;
&lt;br /&gt;
               There is a little 6301 processor inside the Atari ST, which takes care of the keyboard, the mouse and the joystick. It even has a real time clock. This cute little chip is sometimes referred to as the IKBD, for Intelligent KeyBoarD. It might be fun to know that the IKBD has 4K (4096 bytes) of ROM memory, and 128 bytes of RAM. ROM stands for Read Only Memory, and as it says, itâ€™s memory that canâ€™t be altered, RAM is Random Access Memory and it is that which we usually mean by memory. The 128 bytes of RAM on the IKBD are only used as a temporal storage area. The reason for having a separate chip altogether taking care of the keyboard, mouse and joystick is that those actions wonâ€™t burden the main processor (the 68000, the one weâ€™ve been programming so far in these tutorials). Instead, we can poll the IKBD as we choose, or tell it to report stuff in any way we choose, and just let the IKBD worry about the details. &lt;br /&gt;
&lt;br /&gt;
               Our mission therefore is clear: we must find a way to make the IKBD report the status of the joystick, and also find a way to read that status in some way. When that is accomplished, we can use the sprite routine from the previous tutorial as it is, with only a change in the move_sprite subroutine. The new subroutine will update the X and Y coordinates in accordance with the joystick status instead of just moving it about.&lt;br /&gt;
&lt;br /&gt;
               Trap function 25 of the XBIOS will allow us to send commands to the IKBD. However, unlike other trap calls, the input data is a pointer to a string of data. The text file IKBD.TXT may seem very sketchy and difficult to understand, but it does contain a list of all the possible commands that you can send to the IKBD, taking a look inside it, we see function $14. IKBD command $14 will report joystick status every time the joystick is changed. All well and good, this is how we set it up.&lt;br /&gt;
                     &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#joy_on,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pointer to IKBD instructions&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
instruction length - 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#25,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
send instruction to IKBD&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
joy_on&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                 The first parameter is a pointer to the address which contains the commands, the second parameter is the length in byte of the command list minus one, in this case zero. Then the function number, a trap calling XBIOS and a normal stack clean up. Sure, so now the joystick reports information, but where does the information go? Well, actually we need to write our own routine to read the joystick information.&lt;br /&gt;
&lt;br /&gt;
                  Every time the joystick sends information, there is a jump to an address with instructions of what to do with this data, compare this with the timers from tutorial 9. Also, as with the timers, we will hook up our own routine to read the joystick. With trap function 34 of the XBIOS, the IKBD returns a list of all its vectors. The address of the IKBD vectors is put in d0. The joystick report vector is at offset 24, so by putting our own joystick routine at the address pointed to by d0 +24, we have effectively hooked up our own joystick routine.&lt;br /&gt;
                     &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w            &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#34,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
return IKBD vector table&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,ikbd_vec&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store IKBD vectors address&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
a0 points to IKBD vectors&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
24(a0),old_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
backup old joystick vector&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#read_joy,24(a0)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
input our joystick vector&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
read_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
nop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
so far, we donâ€™t know what to do&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
note, rts, not rte&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
dc.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ikbd_vec&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old IKBD vector storage&lt;br /&gt;
&lt;br /&gt;
dc.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old joy vector storage&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                Straightforward, first get the address of the IKBD vectors. Store it for future restoration. Then put the address in a0 so that a0 points to the IKBD vectors, backup the old joystick vector which is found at offset 24, and input our own joystick routine. By the way, the mouse vector is at offset 16. With the help of this and the information given on the other IKBD commands in the IKBD.TXT file, you should be able to setup your own mouse routine as well.&lt;br /&gt;
&lt;br /&gt;
                The joystick routine ends with an rts, nothing else, and may not take more than 1/100 of a second (half a VBL, more than enough time really). What happens now is that each time the joystick status is changed, the ST will jump to our joystick routine. Once there, a0 will point to three bytes in memory which contain the status of the joysticks.&lt;br /&gt;
&lt;br /&gt;
                 The first of these bytes is a header telling us which joystick it was that did something. The byte will contain $FE if joystick 0 did something, and $FF if it was joystick 1 (meaning the last bit represents either joystick 0 or joystick 1). Remember, joystick 0 is the joystick port shared with the mouse, and joystick 1 is the port exclusively for joysticks. The next two bytes contain the actual information for the joysticks. The first one holds status for joystick 0, and the other one for joystick 1. The data has this structure&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                     &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
F 0 0 0 R LDU&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
7 6 5 4 3 2 1 0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(F = fire, R = right, L = left, D = down, U = up)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
So if bit 7 is set, the fire button was pressed, if bit 0 is set, the joystick is moved up, if bit 0, 2 and 7 are set, the joystick is moved up-right while the fire button is being pressed. Real simple. Hereâ€™s a joystick routine that will simply store the joystick data in memory, two different variables could have been used instead of course (but this is good practice on addressing modes).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
read_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* executes every time joystick information is changed&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
1(a0),joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store joy 0 data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
2(a0),joy+1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store joy 1 data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ds.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
storage for joystick data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                      Thatâ€™s it! Well, almost. We must restore our poor system, for one thing, it would be good to turn the mouse back on :) When we turn on the joystick, the mouse is turned off. In order to turn it on, we send command $08 to the IKBD, to put the mouse in relative report mode, which would probably be the default mode for the mouse then. While weâ€™re at it, might be good to restore the joystick vector as well. For the curious lot out there, mus is Swedish for mouse, and itâ€™s a suitable short form for mouse as well.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mus_on,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pointer to IKBD instruction&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
length of instruction - 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#25,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
send instruction to IKBD&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ikbd_vec,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
a0 points to old IKBD vectors&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old_joy,24(a0)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
restore joystick vector&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
mus_on&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$08&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
dc.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ikbd_vec&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
IKBD vector storage&lt;br /&gt;
&lt;br /&gt;
dc.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old joy vector storage&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                      Two other commands of the IKBD that might be good to know about are $1a, which turns off the joystick, and $12 which turns off the mouse. Letâ€™s say we want to be on the really safe side and not only turn on joystick reporting but also turn off mouse reporting, it would look thusly&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#joy_on,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pointer to IKBD instructions&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
instruction length - 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#25,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
send instruction to IKBD&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
joy_on&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$14,$12&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                      Note how the extra parameters are just appended to the command list, and the update of the instruction length parameter to reflect the new command list length. Here comes the source of the program, hold on!&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                     &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
initialise&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* pre-shifting sprite&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#spr_dat,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
original sprite data&lt;br /&gt;
&lt;br /&gt;
 &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;
skip palette&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#sprite,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
storage of pre-shifted sprite&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32 scan lines per sprite&lt;br /&gt;
&lt;br /&gt;
first_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move from original to pre-shifted&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32 pixels moved&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jump over end words&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#144,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jump to next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,first_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* the picture sprite has been copied to first position in pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#sprite,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to beginning of storage area&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#sprite,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to beginning of storage area&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#768,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to next sprite position&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#15-1,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
15 sprite positions left&lt;br /&gt;
&lt;br /&gt;
positions&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d2&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32 scan lines per sprite&lt;br /&gt;
&lt;br /&gt;
line&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#4-1,d3&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
4 bit planes&lt;br /&gt;
&lt;br /&gt;
plane&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
8(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,8(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
16(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,16(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next bit plane, also clears X flag&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next bit plane&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d3,plane&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#16,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#16,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d2,line&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1,positions&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* pre-shift of sprite done, all 16 sprite possitions saved in sprite&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* pre-shifting mask&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#spr_dat,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#34+160*32,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
skip palette and sprite&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mask,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
load up mask part&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32 scan lines per sprite&lt;br /&gt;
&lt;br /&gt;
first_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move from original to pre-shifted&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
not.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
invert the mask data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
not.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
invert the mask data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
not.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
invert the mask data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
not.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
invert the mask data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#$ffffffff,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
fill last two words...&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#$ffffffff,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
... with all 1's&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#144,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jump to next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,first_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* the picture mask has been copied to first position in pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mask,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to beginning of storage area&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mask,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to beginning of storage area&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#768,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
point to next mask position&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#15-1,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
15 sprite positions left&lt;br /&gt;
&lt;br /&gt;
positions_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d2&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32 scan lines per sprite&lt;br /&gt;
&lt;br /&gt;
line_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#4-1,d3&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
4 bit planes&lt;br /&gt;
&lt;br /&gt;
plane_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
or.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#%1000000000000000,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
make sure most significant bit set&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
8(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,8(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
16(a0),d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one word&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
roxr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pre-shift&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,16(a1)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put it in place&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next bit plane&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next plane, clears X flag (bad)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d3,plane_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#16,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#16,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d2,line_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1,positions_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* pre-shift of mask done, all 16 sprite possitions saved in mask&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
movem.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bg+2,d0-d7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&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;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#bg+34,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pixel part of background&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$44e,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put screen memory in a1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#7999,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
8000 longwords to a screen&lt;br /&gt;
&lt;br /&gt;
pic_loop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move one longword to screen&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,pic_loop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
background painted&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
save_background&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
something in restore buffer&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
** joy code&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#34,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
return IKBD vector table&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,ikbd_vec&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store IKBD vectors address&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
a0 points to IKBD vectors&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
24(a0),old_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
backup old joystick vector&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#read_joy,24(a0)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
input my joystick vector&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#joy_on,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pointer to IKBD instructions&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
instruction length - 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#25,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
send instruction to IKBD&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
** end joystick init&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$70,old_70&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
backup $70&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#main,$70&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put in main routine&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#7,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
wait keypress&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old_70,$70&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
restore old $70&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
** joy code&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mus_on,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
pointer to IKBD instruction&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
length of instruction - 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#25,-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
send instruction to IKBD&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
trap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
addq.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,a7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ikbd_vec,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
a0 points to old IKBD vectors&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
old_joy,24(a0)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
restore joystick vector&lt;br /&gt;
&lt;br /&gt;
** end shut down&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &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;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clr.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
-(a7)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&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;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
main&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&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;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
restore_background&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
save_background&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
apply_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
movem.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a7)+,d0-d7/a0-a6&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
restore registers&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rte&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
move_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* updates x and y coordinates according to joystick 1&lt;br /&gt;
&lt;br /&gt;
* if fire button pressed, add 1 to colour 0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
joy+1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
check joystick 1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#128,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
fire&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
blt&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
no_fire&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#$001,$ff8240&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
and.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#%01111111,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clear fire bit&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
no_fire&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#2,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#4,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
left&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
right&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#9,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up-right&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up_right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#10,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down-right&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down_right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#6,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down-left&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
down_left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#5,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up-left&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
beq&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
up_left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
up&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
down&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
up_right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
down_right&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
down_left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
up_left&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sub.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#1,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bra&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* avoid going outside screen&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#319-32,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
blt&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
x_right_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#319-32,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
x_right_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bgt&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
x_left_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
x_left_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#199-32,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
blt&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
y_low_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#199-32,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
y_low_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
cmp&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bgt&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
y_high_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#0,y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
y_high_ok&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
read_joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* executes every time joystick information is changed&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
1(a0),joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store joy 0 data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
2(a0),joy+1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
store joy 1 data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
apply_mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* applies the mask to the background&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
get_coordinates&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#mask,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mulu&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#768,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
multiply position with size&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add value to mask pointer&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mask is 32 scan lines&lt;br /&gt;
&lt;br /&gt;
maskloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rept&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mask is 6*4 bytes width&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mask data in d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1),d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
background data in d1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
and.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
and mask and picture data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move masked picture data to background&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
endr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#136,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d7,maskloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
put_sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* paints the sprite to the screen&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
get_coordinates&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#sprite,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mulu&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#768,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
multiply position with size&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add value to sprite pointer&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 32 scan lines&lt;br /&gt;
&lt;br /&gt;
bgloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rept&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 6*4 bytes width&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite data in d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1),d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
background data in d1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
or.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
or sprite and background data&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move ored sprite data to background&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
endr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#136,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d7,bgloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
save_background&lt;br /&gt;
&lt;br /&gt;
* saves the background into bgsave&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
get_coordinates&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#bgsave,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 32 scan lines&lt;br /&gt;
&lt;br /&gt;
bgsaveloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rept&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 6*4 bytes width&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a1)+,(a0)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
copy background to save buffer&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
endr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#136,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d7,bgsaveloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
restore_background&lt;br /&gt;
&lt;br /&gt;
* restores the background using data from bgsave&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
jsr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
get_coordinates&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#bgsave,a0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#32-1,d7&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 32 scan lines&lt;br /&gt;
&lt;br /&gt;
bgrestoreloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rept&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
sprite is 6*4 bytes width&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
(a0)+,(a1)+&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
copy save buffer to background&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
endr&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#136,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
next scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dbf&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d7,bgrestoreloop&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
get_coordinates&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* makes a1 point to correct place on screen&lt;br /&gt;
&lt;br /&gt;
* sprite position in d0.b&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$44e,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
screen memory in a1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
y_coord,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put y coordinate in d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mulu&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#160,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
160 bytes to a scan line&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add to screen pointer&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
x_coord,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
put x coordinate in d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
divu.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#16,d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
number of clusters in low, bit in high&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clr.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clear d1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
move cluster part to d1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
mulu.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#8,d1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
8 bytes to a cluster&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d1,a1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
add cluster part to screen memory&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clr.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
clear out the cluster value&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
swap&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
d0&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
bit to alter in low part of d0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
rts&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&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;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
section data&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
x_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
150&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
y_coord&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.w&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
80&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
spr_dat&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
incbin&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
SHIP.PI1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
bg&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
incbin&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
XENON.PI1&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
old_70&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;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
joy_on&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$14&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
mus_on&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dc.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
$08&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
ikbd_vec&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;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
old_joy&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;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
section bss&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
sprite&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ds.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
3072&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32/2+8*32 bytes * 16 positions / 4 for long&lt;br /&gt;
&lt;br /&gt;
mask&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ds.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
3072&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
same as above&lt;br /&gt;
&lt;br /&gt;
bgsave&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ds.l&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
192&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
32/2+8*32 bytes / 4 for long&lt;br /&gt;
&lt;br /&gt;
joy&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
ds.b&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
                      Yup, another long source code. There are big similarities between the sprite tutorial though, since weâ€™re basically doing the same thing. The new things are of course the joystick on and off, which are located between the â€œ* joy codeâ€ comments, after the pre-shiftings. Nothing to say there that hasnâ€™t been said before. Same with the joystick routine. The move_sprite routine is all new and deserves attention.&lt;br /&gt;
&lt;br /&gt;
                       It begins by moving the joystick data to d0. In this case, I only check joystick 1. First I begin by checking for the fire button, this is done by seeing if d0 contains a number larger than or equal to 128. If the fire button is pressed, the 8th bit (bit 7, start counting from 0 and from the rightmost bit) in the joystick status byte is set which means that the byte will hold a value equal to or higher than 128, since %10000000 = 128. Then I clear out the fire bit so that it wonâ€™t bother me anymore. &lt;br /&gt;
&lt;br /&gt;
                       Next I check for joystick movement. This is done by using the same method as above. For example, if the joystick is down-left, then bit 1 and 2 are set, meaning the byte will hold value %00000110 = 6. This is the reason for clearing out the fire bit above. If it hadnâ€™t been cleared, the number would be either 6 or 128 + 6 = 134 for down-right. So just run through all 8 directional checks to see if any bits are set, if they are not, I just branch right away to done. If this branch hadnâ€™t been there, the program would just continue and execute the code associated with joystick up if the joystick wasnâ€™t moved at all. An early bug that caused me some confusion. &lt;br /&gt;
&lt;br /&gt;
                      After the coordinates have been changed accordingly, I also check to see that the sprite isnâ€™t out of bounds, since this could cause a crash and be generally stupid in all kinds of ways. So just check if the coordinates are right, and if theyâ€™re not, reset them to the closest correct value. If you want a speedier ship, just increase the speed accordingly, adding more than one to the coordinates, and also remember to include this in the boundary check, just as the sprite. &lt;br /&gt;
&lt;br /&gt;
                      Some of you will probably notice that the ship itself is not 32 scan lines, although I treat the sprite as such. This has the effect of the ship never reaching all the way down the screen, since there is some black space worth of sprite data. This could be easily fixed of course, but I didnâ€™t. Also, two ships moving might be nice, at first I considered having both the Xenon 2 ship and the Xenon 1 ship side by side, controlled by two joysticks, but I decided to keep it simple. However, there should be no big trouble incorporating that, and changing the fire button perhaps to morph the Xenon 1 ship. &lt;br /&gt;
&lt;br /&gt;
                      Having two sprites is no harder than having one sprite, the only thing you have to think about is the order of painting the sprites, the ones painted first will be painted over by the ones that come next. Yet another cool thing is to change the look of the sprite as you move it, like in the real Xenon game, they have the ship tilted sideways and generate rocket fire when it moves, all you need is a flag to know which state the ship is in and change the sprite address accordingly.&lt;br /&gt;
&lt;br /&gt;
                       This means having a sprite picture with not just one ship, but the ship tilted in directions and with rocket flames, all in all lots of pictures. All of these sprites will of course fit in one degas picture, so all you need is the correct offset into this picture depending on what â€œmodeâ€ the sprite is in. Compare this to the way we address the sprite mask, only in this case itâ€™s a different sprite (or different look of the sprite, depending on how you see it). &lt;br /&gt;
&lt;br /&gt;
                       Now you have the tools needed to create a game, or even a demo for that matter: now go to it! Even though there is still much to learn, the basics have been covered, all but one thing: music and sound. It is my hope that this will come soon. But you donâ€™t have to worry about that for now, code away and the music will be easily incorporated at a later stage. &lt;br /&gt;
&lt;br /&gt;
                       Usually, you just hook up the music in your VBL routine. On the Dead Hackers Society page, http://dhs.nu, there are two chip editors (at least) with instructions on how to play the generated music in assembler; Edsynth and the XLR8. Go take a look at them if youâ€™re curious, there should be no trouble understanding the code.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Warrior Munk of poSTmortem, 2002-07-13&lt;br /&gt;
&amp;quot;I love the smell of napalm in the morningâ€¦ it smells like victory&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- Apocalypse Now&lt;/div&gt;</summary>
		<author><name>&gt;Admin</name></author>
	</entry>
</feed>