<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://learn.cemetech.net/index.php?action=history&amp;feed=atom&amp;title=Z80%3AIntro_to_Flash_Applications</id>
	<title>Z80:Intro to Flash Applications - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://learn.cemetech.net/index.php?action=history&amp;feed=atom&amp;title=Z80%3AIntro_to_Flash_Applications"/>
	<link rel="alternate" type="text/html" href="http://learn.cemetech.net/index.php?title=Z80:Intro_to_Flash_Applications&amp;action=history"/>
	<updated>2026-05-13T12:07:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://learn.cemetech.net/index.php?title=Z80:Intro_to_Flash_Applications&amp;diff=85&amp;oldid=prev</id>
		<title>KermMartian: Adjusted lowercase z80</title>
		<link rel="alternate" type="text/html" href="http://learn.cemetech.net/index.php?title=Z80:Intro_to_Flash_Applications&amp;diff=85&amp;oldid=prev"/>
		<updated>2016-02-03T21:07:46Z</updated>

		<summary type="html">&lt;p&gt;Adjusted lowercase z80&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 21:07, 3 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Memory =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Memory =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l16&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 14:&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;=== Comparison ===&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;=== Comparison ===&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;The application is written in assembly, but run from Flash ROM. Applications use a special header that allows the base loader to extract information from the app.  What Flash Apps have over normal asm programs is that they can be much larger, get their own AppVars, and are safe from accidential deletion.  Apps are also run from the [Apps] button and not from a [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z80&lt;/del&gt;:Shells|Shell]].&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;The application is written in assembly, but run from Flash ROM. Applications use a special header that allows the base loader to extract information from the app.  What Flash Apps have over normal asm programs is that they can be much larger, get their own AppVars, and are safe from accidential deletion.  Apps are also run from the [Apps] button and not from a [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Z80&lt;/ins&gt;:Shells|Shell]].&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;++= Applications = to Applications&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;++= Applications = to Applications&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-l32&quot;&gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&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;== App Header ==&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;== App Header ==&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;TI has created a Windows application that creates an app header for you.  It is download-able [http://education.ti.com/educationportal/appsdelivery/download/save_download.jsp?cid=us&amp;amp;countryid=US&amp;amp;isocode=EN&amp;amp;applicationid=177&amp;amp;softwareid=6653&amp;amp;inputpage=I here]. Type in the name, Developer Key (more on that in a sec), pages... etc. Here is a sample header in it&#039;s full entirety. To understand what it means, see the [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z80&lt;/del&gt;:The Application Header|Application Header]] page.&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;TI has created a Windows application that creates an app header for you.  It is download-able [http://education.ti.com/educationportal/appsdelivery/download/save_download.jsp?cid=us&amp;amp;countryid=US&amp;amp;isocode=EN&amp;amp;applicationid=177&amp;amp;softwareid=6653&amp;amp;inputpage=I here]. Type in the name, Developer Key (more on that in a sec), pages... etc. Here is a sample header in it&#039;s full entirety. To understand what it means, see the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Z80&lt;/ins&gt;:The Application Header|Application Header]] page.&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;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l138&quot;&gt;Line 138:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 136:&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;{{lowercase}}&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;{{lowercase}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z80 &lt;/del&gt;Assembly]]&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:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Z80 &lt;/ins&gt;Assembly]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z80 &lt;/del&gt;Heaven]]&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:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Z80 &lt;/ins&gt;Heaven]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>KermMartian</name></author>
	</entry>
	<entry>
		<id>http://learn.cemetech.net/index.php?title=Z80:Intro_to_Flash_Applications&amp;diff=51&amp;oldid=prev</id>
		<title>KermMartian: Created page with &quot;  = Memory =  == ROM and RAM ==  In the older model calculators, there are two types of memory; ROM and RAM. ROM stands for &quot;Read Only Memory&quot; while RAM stands for &quot;Random Acc...&quot;</title>
		<link rel="alternate" type="text/html" href="http://learn.cemetech.net/index.php?title=Z80:Intro_to_Flash_Applications&amp;diff=51&amp;oldid=prev"/>
		<updated>2016-02-03T19:58:05Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  = Memory =  == ROM and RAM ==  In the older model calculators, there are two types of memory; ROM and RAM. ROM stands for &amp;quot;Read Only Memory&amp;quot; while RAM stands for &amp;quot;Random Acc...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Memory =&lt;br /&gt;
&lt;br /&gt;
== ROM and RAM ==&lt;br /&gt;
&lt;br /&gt;
In the older model calculators, there are two types of memory; ROM and RAM. ROM stands for &amp;quot;Read Only Memory&amp;quot; while RAM stands for &amp;quot;Random Access Memory&amp;quot;. ROM can only be read, thus the name, but RAM means that it can be read and written to at any point. For our purposes, ROM is the calculator&amp;#039;s equivalence of a BIOS and the RAM controls everything else. Now that you understand more about your calculator&amp;#039;s memory, we can move on to newer calculators.&lt;br /&gt;
&lt;br /&gt;
== Flash ROM ==&lt;br /&gt;
&lt;br /&gt;
Newer calculators have a new kind of ROM.  It is Flash ROM, and it is a hybrid of the two.  Flash ROM is similar to ROM because it is safe from accidental erasures, but with the capability of being erased and written to roughly 100,000 times.(Similar to RAM)  Because of this useful feature, it allows us to create a new kind of program: flash applications.&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
= Applications =&lt;br /&gt;
&lt;br /&gt;
=== Comparison ===&lt;br /&gt;
The application is written in assembly, but run from Flash ROM. Applications use a special header that allows the base loader to extract information from the app.  What Flash Apps have over normal asm programs is that they can be much larger, get their own AppVars, and are safe from accidential deletion.  Apps are also run from the [Apps] button and not from a [[z80:Shells|Shell]].&lt;br /&gt;
&lt;br /&gt;
++= Applications = to Applications&lt;br /&gt;
&lt;br /&gt;
Most people don&amp;#039;t build apps when they make games; they just make asm programs to fit into shells like Mirage OS.  Most people enjoy accessing their games from one place.  Most people make apps when they are making large math &amp;amp; science programs, like polynomial finder, periodic table etc.  Apps are also used if the program is very large.  Detached Solutions is a group that makes apps.  Although a couple apps are games, most of them are graphing, shells, or added feature apps.&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
= Differences in Application Programming =&lt;br /&gt;
&lt;br /&gt;
Programming a flash application has a couple differences that must be taken into consideration.&lt;br /&gt;
&lt;br /&gt;
Click [http://education.ti.com/educationportal/appsdelivery/download/download.jsp here] to get the TI SDK for developing flash applications (and other programs), as well as many useful Windows applications that make programming easier.&lt;br /&gt;
&lt;br /&gt;
== App Header ==&lt;br /&gt;
&lt;br /&gt;
TI has created a Windows application that creates an app header for you.  It is download-able [http://education.ti.com/educationportal/appsdelivery/download/save_download.jsp?cid=us&amp;amp;countryid=US&amp;amp;isocode=EN&amp;amp;applicationid=177&amp;amp;softwareid=6653&amp;amp;inputpage=I here]. Type in the name, Developer Key (more on that in a sec), pages... etc. Here is a sample header in it&amp;#039;s full entirety. To understand what it means, see the [[z80:The Application Header|Application Header]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    .db 080h,00Fh										;Field: Program length &lt;br /&gt;
    .db 00h,00h,00h,00h									;Length=0 &lt;br /&gt;
    .db 080h,012h										;Field: Program type &lt;br /&gt;
    .db 01h,04h										;Type= Shareware, TI-83Plus &lt;br /&gt;
    .db 080h,021h										;Field: App ID &lt;br /&gt;
    .db 01h											;Id = 1 &lt;br /&gt;
    .db 080h,031h										;Field: App Build &lt;br /&gt;
    .db 01h											;Build = 1 &lt;br /&gt;
    .db 080h,048h										;Field: App Name &lt;br /&gt;
    .db &amp;quot;Name&amp;quot;, 000h, 000h, 000h, 000h						;Name: &amp;quot;Name&amp;quot;&lt;br /&gt;
    .db 080h, 081h										;Field: Number of pages&lt;br /&gt;
    .db 001h											;Pages: 1&lt;br /&gt;
    .db 080h, 090h										;Field: Security data&lt;br /&gt;
    .db 003h, 026h, 009h, 004h								;Start of security data used with signing&lt;br /&gt;
    .db 013h, 069h, 0DBh, 04Bh&lt;br /&gt;
    .db 002h, 00Dh, 040h, 0A1h, 06Bh, 099h, 0F6h, 059h, 0BCh, 067h&lt;br /&gt;
    .db 0F5h, 085h, 09Ch, 009h, 06Ch, 00Fh, 0B4h, 003h, 09Bh, 0C9h&lt;br /&gt;
    .db 003h, 032h, 02Ch, 0E0h, 003h, 020h, 0E3h, 02Ch, 0F4h, 02Dh&lt;br /&gt;
    .db 073h, 0B4h, 027h, 0C4h, 0A0h, 072h, 054h, 0B9h, 0EAh, 07Ch&lt;br /&gt;
    .db 03Bh, 0AAh, 016h, 0F6h, 077h, 083h, 07Ah, 0EEh, 01Ah, 0D4h&lt;br /&gt;
    .db 042h, 04Ch, 06Bh, 08Bh, 013h, 01Fh, 0BBh, 093h, 08Bh, 0FCh&lt;br /&gt;
    .db 019h, 01Ch, 03Ch, 0ECh, 04Dh, 0E5h, 075h					;End of security data used with signing&lt;br /&gt;
    .db 80h,7Fh										;Field: Program Image length &lt;br /&gt;
    .db 0,0,0,0											;Length=0, N/A &lt;br /&gt;
    .db 000h, 000h, 000h, 000h								;padding&lt;br /&gt;
    .db 000h, 000h, 000h, 000h								;padding&lt;br /&gt;
    .db 000h, 000h, 000h, 000h								;padding&lt;br /&gt;
    .db 000h, 000h, 000h, 000h								;padding&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flash Pages ==&lt;br /&gt;
First of all, you can&amp;#039;t just make your  40k application.  Your application is written on flash pages, and they are 16,384 bytes. Each page must also be written in a separate assembly file, but don&amp;#039;t worry about that for now. Another thing to keep in mind that your flash application is set to the size of all the pages you used combined. This means that if your code happens to be 16,385 bytes, then you would have to go onto the next flash page. This is a big waste because that means that the whole 2nd page is empty except for that 1 byte, but you also can&amp;#039;t use the rest of that page for anything else because of the way TI has designed the flash page system.&lt;br /&gt;
&lt;br /&gt;
Now once you have written 16k worth of code and you are not done yet, you need to use another page. You can&amp;#039;t just write onto another one.  What you need is a jump table. A jump table is data that tells the program about functions that are called across pages.  Where do we put it?  We put it right after the app header, but because the jump table entries are 3 bytes, we have to actually start the program before the Jump table.  Deal with it.  Sample code pulled from Ti.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ;&lt;br /&gt;
    ; Application header&lt;br /&gt;
    ; + padding&lt;br /&gt;
    jp StartApp &lt;br /&gt;
    ;&lt;br /&gt;
    ; Jump table here&lt;br /&gt;
    ;&lt;br /&gt;
    StartApp:&lt;br /&gt;
    ;&lt;br /&gt;
    ; Application here!&lt;br /&gt;
    ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What we did here was jump to the start of the app, and bypassed the jump table.  Now to see what a jump table looks like.  Each entry, uses three bytes, a word and a byte.  The word defines the offset, while the byte defines the page.  Code sample from Ti:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    dw Page1Call  	; Rom call name &lt;br /&gt;
    db 0   	; Page it is on (this page) &lt;br /&gt;
    dw Page2Call  	; &lt;br /&gt;
    db 1   	; Next page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Signing ==&lt;br /&gt;
&lt;br /&gt;
To finish an application, you need to sign your app.  If you want to sell your app for money, then A) stop reading now because that is just wrong, plus who will buy it anyways you ameuteur, and B) You need to buy a developer key.  On the other hand, if you are making a free app than all you need to do is plug in 0104 as a key.  This was given in the SDK, and all ti 83+ and ti 84+ contain it.  It is the &amp;quot;free key&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Actual Coding ==&lt;br /&gt;
&lt;br /&gt;
The actual coding of a flash application is very similar to a regular program with a few exceptions:&lt;br /&gt;
&lt;br /&gt;
1. You return to the OS using bjump(_JForceCmdNoChar) instead of ret. This is because the flash application and the OS reside on different flash pages, so a simple ret won&amp;#039;t get you back to the OS.&lt;br /&gt;
&lt;br /&gt;
2. RAM vs. Flash ROM. RAM is the area of memory the calculator actually has access to. Some OS routines require you to copy data to RAM. An example is PutS. To get around this, it is usually easier to include the OS routine into your flash application inline.&lt;br /&gt;
&lt;br /&gt;
    ;PutS Inline&lt;br /&gt;
    ;Same as OS&amp;#039;s PutS routine, but inline&lt;br /&gt;
    ;&lt;br /&gt;
    PutS:&lt;br /&gt;
     PUSH BC&lt;br /&gt;
     PUSH AF&lt;br /&gt;
     LD A,(winBtm)&lt;br /&gt;
     LD B,A ; B = bottom line of window&lt;br /&gt;
    PutS10:&lt;br /&gt;
     LD A,(HL) ; get a character of string name&lt;br /&gt;
     INC HL&lt;br /&gt;
     OR A ; end of string?&lt;br /&gt;
     SCF ; indicate entire string was displayed&lt;br /&gt;
     JR Z, PutS20 ; yes ---&amp;gt;&lt;br /&gt;
     B_CALL PutC ; display one character of string&lt;br /&gt;
     LD A,(curRow) ; check cursor position&lt;br /&gt;
     CP B ; off end of window?&lt;br /&gt;
     JR C,PutS10 ; no, display rest of string&lt;br /&gt;
    PutS20:&lt;br /&gt;
     POP BC ; restore A (but not F)&lt;br /&gt;
     LD A,B&lt;br /&gt;
     POP BC ; restore BC&lt;br /&gt;
     RET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
Keep these things in mind and you&amp;#039;ll be able to program flash applications of equal or greater quality than regular asm programs.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTE:	This information is a compilation of TI tutorials and various discussions via forums.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{lowercase}}&lt;br /&gt;
[[Category:z80 Assembly]]&lt;br /&gt;
[[Category:z80 Heaven]]&lt;/div&gt;</summary>
		<author><name>KermMartian</name></author>
	</entry>
</feed>