<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wikiti.brandonw.net/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wikiti.brandonw.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zeda</id>
		<title>WikiTI - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wikiti.brandonw.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zeda"/>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Special:Contributions/Zeda"/>
		<updated>2026-06-30T03:50:10Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication</id>
		<title>Z80 Routines:Math:Multiplication</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication"/>
				<updated>2022-04-29T02:31:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: `sbc hl,bc` ==&amp;gt; `sbc hl,de`&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Multiplication]]&lt;br /&gt;
[[Category:Z80 Routines|Multiplication]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring multiplication algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== Unsigned versions ==&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies h by e and places the result in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_h_e&lt;br /&gt;
   ld	d, 0	; Combining the overhead and&lt;br /&gt;
   sla	h	; optimised first iteration&lt;br /&gt;
   sbc	a, a&lt;br /&gt;
   and	e&lt;br /&gt;
   ld	l, a&lt;br /&gt;
   &lt;br /&gt;
   ld	b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl          &lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies de by a and places the result in ahl (which means a is the most significant byte of the product, l the least significant and h the intermediate one...)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_a_de&lt;br /&gt;
   ld	c, 0&lt;br /&gt;
   ld	h, c&lt;br /&gt;
   ld	l, h&lt;br /&gt;
&lt;br /&gt;
   add	a, a		; optimised 1st iteration&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h,d&lt;br /&gt;
   ld	l,e&lt;br /&gt;
&lt;br /&gt;
   ld b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   adc	a, c            ; yes this is actually adc a, 0 but since c is free we set it to zero and so we can save 1 byte and up to 3 T-states per iteration&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the result in dehl.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_de_bc&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
&lt;br /&gt;
   sla	e		; optimised 1st iteration&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h, b&lt;br /&gt;
   ld	l, c&lt;br /&gt;
&lt;br /&gt;
   ld	a, 15&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+6&lt;br /&gt;
   add	hl, bc&lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   inc	de&lt;br /&gt;
   &lt;br /&gt;
   dec	a&lt;br /&gt;
   jr	nz, _loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Signed versions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- do the routines later, basically try to use cpu instruction that preserve bit 7 (sign) or if this is not possible, just take the sign out, do the multiplication and give the sign afterwards and accordingly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the signed result in dehl.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
;16 bit signed multiply&lt;br /&gt;
;31 bytes&lt;br /&gt;
;min: 928cc&lt;br /&gt;
;max: 1257cc&lt;br /&gt;
;avg: 1088.5cc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; call with bc, de = 16 bit signed numbers to multiply&lt;br /&gt;
; returns   de:hl = 32 bit signed product&lt;br /&gt;
; corrupts  a&lt;br /&gt;
&lt;br /&gt;
; de:hl = bc*de&lt;br /&gt;
&lt;br /&gt;
multiply:&lt;br /&gt;
  xor a&lt;br /&gt;
  ld h,a&lt;br /&gt;
  ld l,a&lt;br /&gt;
&lt;br /&gt;
  bit 7,d&lt;br /&gt;
  jr z,muldpos&lt;br /&gt;
  sbc hl,bc&lt;br /&gt;
muldpos:&lt;br /&gt;
&lt;br /&gt;
  or b&lt;br /&gt;
  jp p,mulbpos&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
mulbpos:&lt;br /&gt;
&lt;br /&gt;
  ld a,16&lt;br /&gt;
mulloop:&lt;br /&gt;
  add hl,hl&lt;br /&gt;
  rl e&lt;br /&gt;
  rl d&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  inc de&lt;br /&gt;
mul0bit:&lt;br /&gt;
  dec a&lt;br /&gt;
  jr nz,mulloop&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The code was originally John Metcalf's&lt;br /&gt;
([https://github.com/impomatic/z80snippets/blob/master/mulsigned.asm here]),&lt;br /&gt;
so this looks similar, but Sue Doenim found a bug with negative BC, so we fixed that.&lt;br /&gt;
The fix is based on Goplat's pseudocode&lt;br /&gt;
([https://www.omnimaga.org/asm-language/(z80)-16-bit-*-16-bit-32-bit-signed-multiplication/msg154690/#msg154690 here]):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Here's a possibillity: Since a negative signed number is 65536 less than its&lt;br /&gt;
interpreted as unsigned, you can just do an unsigned multiplication and if any&lt;br /&gt;
side is negative, subtract the other side from the high word of the result:&lt;br /&gt;
&lt;br /&gt;
	a	b	product&lt;br /&gt;
	pos	pos	ab                 = ab&lt;br /&gt;
	pos	neg	a(b-65536)         = ab - 65536a&lt;br /&gt;
	neg	pos	(a-65536)b         = ab - 65536b&lt;br /&gt;
	neg	neg	(a-65536)(b-65536) = ab - 65536(a+b)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication</id>
		<title>Z80 Routines:Math:Multiplication</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication"/>
				<updated>2022-04-29T00:06:34Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Fix bug when BC is negative (thanks, Sue Doenim!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Multiplication]]&lt;br /&gt;
[[Category:Z80 Routines|Multiplication]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring multiplication algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== Unsigned versions ==&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies h by e and places the result in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_h_e&lt;br /&gt;
   ld	d, 0	; Combining the overhead and&lt;br /&gt;
   sla	h	; optimised first iteration&lt;br /&gt;
   sbc	a, a&lt;br /&gt;
   and	e&lt;br /&gt;
   ld	l, a&lt;br /&gt;
   &lt;br /&gt;
   ld	b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl          &lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies de by a and places the result in ahl (which means a is the most significant byte of the product, l the least significant and h the intermediate one...)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_a_de&lt;br /&gt;
   ld	c, 0&lt;br /&gt;
   ld	h, c&lt;br /&gt;
   ld	l, h&lt;br /&gt;
&lt;br /&gt;
   add	a, a		; optimised 1st iteration&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h,d&lt;br /&gt;
   ld	l,e&lt;br /&gt;
&lt;br /&gt;
   ld b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   adc	a, c            ; yes this is actually adc a, 0 but since c is free we set it to zero and so we can save 1 byte and up to 3 T-states per iteration&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the result in dehl.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_de_bc&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
&lt;br /&gt;
   sla	e		; optimised 1st iteration&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h, b&lt;br /&gt;
   ld	l, c&lt;br /&gt;
&lt;br /&gt;
   ld	a, 15&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+6&lt;br /&gt;
   add	hl, bc&lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   inc	de&lt;br /&gt;
   &lt;br /&gt;
   dec	a&lt;br /&gt;
   jr	nz, _loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Signed versions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- do the routines later, basically try to use cpu instruction that preserve bit 7 (sign) or if this is not possible, just take the sign out, do the multiplication and give the sign afterwards and accordingly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the signed result in dehl.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
;16 bit signed multiply&lt;br /&gt;
;31 bytes&lt;br /&gt;
;min: 928cc&lt;br /&gt;
;max: 1257cc&lt;br /&gt;
;avg: 1088.5cc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; call with bc, de = 16 bit signed numbers to multiply&lt;br /&gt;
; returns   de:hl = 32 bit signed product&lt;br /&gt;
; corrupts  a&lt;br /&gt;
&lt;br /&gt;
; de:hl = bc*de&lt;br /&gt;
&lt;br /&gt;
multiply:&lt;br /&gt;
  xor a&lt;br /&gt;
  ld h,a&lt;br /&gt;
  ld l,a&lt;br /&gt;
&lt;br /&gt;
  bit 7,d&lt;br /&gt;
  jr z,muldpos&lt;br /&gt;
  sbc hl,bc&lt;br /&gt;
muldpos:&lt;br /&gt;
&lt;br /&gt;
  or b&lt;br /&gt;
  jp p,mulbpos&lt;br /&gt;
  sbc hl,bc&lt;br /&gt;
mulbpos:&lt;br /&gt;
&lt;br /&gt;
  ld a,16&lt;br /&gt;
mulloop:&lt;br /&gt;
  add hl,hl&lt;br /&gt;
  rl e&lt;br /&gt;
  rl d&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  inc de&lt;br /&gt;
mul0bit:&lt;br /&gt;
  dec a&lt;br /&gt;
  jr nz,mulloop&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The code was originally John Metcalf's&lt;br /&gt;
([https://github.com/impomatic/z80snippets/blob/master/mulsigned.asm here]),&lt;br /&gt;
so this looks similar, but Sue Doenim found a bug with negative BC, so we fixed that.&lt;br /&gt;
The fix is based on Goplat's pseudocode&lt;br /&gt;
([https://www.omnimaga.org/asm-language/(z80)-16-bit-*-16-bit-32-bit-signed-multiplication/msg154690/#msg154690 here]):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Here's a possibillity: Since a negative signed number is 65536 less than its&lt;br /&gt;
interpreted as unsigned, you can just do an unsigned multiplication and if any&lt;br /&gt;
side is negative, subtract the other side from the high word of the result:&lt;br /&gt;
&lt;br /&gt;
	a	b	product&lt;br /&gt;
	pos	pos	ab                 = ab&lt;br /&gt;
	pos	neg	a(b-65536)         = ab - 65536a&lt;br /&gt;
	neg	pos	(a-65536)b         = ab - 65536b&lt;br /&gt;
	neg	neg	(a-65536)(b-65536) = ab - 65536(a+b)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4357</id>
		<title>83Plus:BCALLs:4357</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4357"/>
				<updated>2020-04-11T15:00:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: fixed  speling and camel-case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:BCALLs:By_Name:Memory|DelMem]] [[Category:83Plus:BCALLs:By_Name|DelMem]] [[Category:83Plus:BCALLs:By_Address|4357 - DelMem]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' DelMem&lt;br /&gt;
&lt;br /&gt;
'''BCALL Address:''' 4357&lt;br /&gt;
&lt;br /&gt;
Deletes Ram from a Variable&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* HL = Address of first byte&lt;br /&gt;
* DE = Number of bytes to delete&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* DE = original number&lt;br /&gt;
* BC = number of bytes deleted&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
All&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4357</id>
		<title>83Plus:BCALLs:4357</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4357"/>
				<updated>2020-04-11T14:59:08Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Page should have been for TI-83+&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:BCALLs:By_Name:Memory|Delmem]] [[Category:83Plus:BCALLs:By_Name|Delmem]] [[Category:83Plus:BCALLs:By_Address|4357 - DelMem]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' DelMem&lt;br /&gt;
&lt;br /&gt;
'''BCALL Address:''' 4357&lt;br /&gt;
&lt;br /&gt;
Deletes Ram from a Variable&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* HL = Address of first byte&lt;br /&gt;
* DE = Number of bytes to delete&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* DE = orginal number&lt;br /&gt;
* BC = number of bytes deleted&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
All&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division</id>
		<title>Z80 Routines:Math:Division</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division"/>
				<updated>2019-09-30T23:18:24Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Added an optimized 32/16&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Division]]&lt;br /&gt;
[[Category:Z80 Routines|Division]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring division algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== 8/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides d by e and places the quotient in d and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_d_e:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 8&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sla	d&lt;br /&gt;
   rla&lt;br /&gt;
   cp	e&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	e&lt;br /&gt;
   inc	d&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the quotient in hl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_hl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   jr	c, $+5&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/16 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ac by de and places the quotient in ac and the remainder in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ac_de:&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sll	c&lt;br /&gt;
   rla&lt;br /&gt;
   adc	hl, hl&lt;br /&gt;
   sbc	hl, de&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   dec	c&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 24/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ehl by d and places the quotient in ehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ehl_d:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 24&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rla&lt;br /&gt;
   jr	c, $+5&lt;br /&gt;
   cp	d&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
&lt;br /&gt;
   sub	d&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 32/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides dehl by c and places the quotient in dehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_dehl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 32&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   rla&lt;br /&gt;
   jr	c, $+5&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== 32/16 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides acix by de and places the quotient in acix and the remainder in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Div32By16:&lt;br /&gt;
; IN:	ACIX=dividend, DE=divisor&lt;br /&gt;
; OUT:	ACIX=quotient, DE=divisor, HL=remainder, B=0&lt;br /&gt;
	ld	hl,0&lt;br /&gt;
	ld	b,32&lt;br /&gt;
Div32By16_Loop:&lt;br /&gt;
	add	ix,ix&lt;br /&gt;
	rl	c&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl,hl&lt;br /&gt;
	jr	c,Div32By16_Overflow&lt;br /&gt;
	sbc	hl,de&lt;br /&gt;
	jr	nc,Div32By16_SetBit&lt;br /&gt;
	add	hl,de&lt;br /&gt;
	djnz	Div32By16_Loop&lt;br /&gt;
	ret&lt;br /&gt;
Div32By16_Overflow:&lt;br /&gt;
	or	a&lt;br /&gt;
	sbc	hl,de&lt;br /&gt;
Div32By16_SetBit:&lt;br /&gt;
	.db	$DD,$2C		; inc ixl, change to inc ix to avoid undocumented&lt;br /&gt;
	djnz	Div32By16_Loop&lt;br /&gt;
	ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 32/16 division, Speed Optimized ==&lt;br /&gt;
&lt;br /&gt;
At the cost of 30 bytes (exactly double the size), we can save 600cc on average, a 19.5% speed up. However, the inputs are slightly different here!&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div32_16:&lt;br /&gt;
;DEIX/BC -&amp;gt; HLIX remainder DE&lt;br /&gt;
;170+4*div32_16_sub8&lt;br /&gt;
;min: 2182cc&lt;br /&gt;
;max: 2790cc&lt;br /&gt;
;avg: 2462cc&lt;br /&gt;
;60 bytes&lt;br /&gt;
&lt;br /&gt;
; Negate BC to allow add instead of sbc&lt;br /&gt;
  xor a      ; 4&lt;br /&gt;
; Need to set HL to 0 anyways, so save 2cc and a byte&lt;br /&gt;
  ld h,a     ; 4&lt;br /&gt;
  ld l,a     ; 4&lt;br /&gt;
  sub c      ; 4&lt;br /&gt;
  ld c,a     ; 4&lt;br /&gt;
  sbc a,a    ; 4&lt;br /&gt;
  sub b      ; 4&lt;br /&gt;
  ld b,a     ; 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ld a,d              ; 4&lt;br /&gt;
  call div32_16_sub8  ; 17&lt;br /&gt;
  rla                 ; 4&lt;br /&gt;
  ld d,a              ; 4&lt;br /&gt;
&lt;br /&gt;
  ld a,e              ; 4&lt;br /&gt;
  call div32_16_sub8  ; 17&lt;br /&gt;
  rla                 ; 4&lt;br /&gt;
  ld e,a              ; 4&lt;br /&gt;
&lt;br /&gt;
  ld a,ixh            ; 8&lt;br /&gt;
  call div32_16_sub8  ; 17&lt;br /&gt;
  rla                 ; 4&lt;br /&gt;
  ld ixh,a            ; 8&lt;br /&gt;
&lt;br /&gt;
  ld a,ixl            ; 8&lt;br /&gt;
  call div32_16_sub8  ; 17&lt;br /&gt;
  rla                 ; 4&lt;br /&gt;
  ld ixl,a            ; 8&lt;br /&gt;
&lt;br /&gt;
  ex de,hl   ; 4&lt;br /&gt;
  ret        ; 10&lt;br /&gt;
&lt;br /&gt;
div32_16_sub8:&lt;br /&gt;
;119+8*div32_16_sub&lt;br /&gt;
;min: 503cc&lt;br /&gt;
;max: 655cc&lt;br /&gt;
;avg: 573cc&lt;br /&gt;
  call +_&lt;br /&gt;
_:&lt;br /&gt;
;17+2(17+2(div32_16_sub)))&lt;br /&gt;
  call +_&lt;br /&gt;
_:&lt;br /&gt;
;17+2(div32_16_sub)&lt;br /&gt;
  call div32_16_sub&lt;br /&gt;
div32_16_sub:&lt;br /&gt;
;48+{8,0+{0,19}}&lt;br /&gt;
;min: 48cc&lt;br /&gt;
;max: 67cc&lt;br /&gt;
;avg: 56.75cc&lt;br /&gt;
  rla        ; 4&lt;br /&gt;
  adc hl,hl  ; 15&lt;br /&gt;
  jr c,+_    ;12/7&lt;br /&gt;
  add hl,bc  ; 11&lt;br /&gt;
  ret c      ;11/5&lt;br /&gt;
  sbc hl,bc  ; 15&lt;br /&gt;
  ret        ; 10&lt;br /&gt;
_:&lt;br /&gt;
  add hl,bc  ; 11&lt;br /&gt;
  scf        ; 4&lt;br /&gt;
  ret        ; 10&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rounded 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the rounded quotient in hl and twice the prerounded remainder in a.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
RoundHL_Div_C:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   jr	c, $+5&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
;This part is the rounding&lt;br /&gt;
   add a,a&lt;br /&gt;
   cp	c&lt;br /&gt;
   ret	c&lt;br /&gt;
   inc hl&lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math</id>
		<title>Z80 Routines:Math:Advance Math</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math"/>
				<updated>2019-09-30T23:08:38Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: (using real name for credits)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Advanced Math]]&lt;br /&gt;
[[Category:Z80 Routines|Advanced Math]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are routines designed for math of a slightly higher level. These don't necessarily contribute to everyday coding, but might be useful for an OS that handles such math (or programming language).&lt;br /&gt;
&lt;br /&gt;
=== nCr Algorithm ===&lt;br /&gt;
&lt;br /&gt;
This computes &amp;quot;n choose r&amp;quot; in such a way as to avoid overflow unless the final result would overflow 16 bits.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Written by Zeda&lt;br /&gt;
&lt;br /&gt;
; Requires&lt;br /&gt;
;    mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
;    DEHL_Div_BC    ;DEHL/BC ==&amp;gt; DEHL&lt;br /&gt;
&lt;br /&gt;
ncr_HL_DE:&lt;br /&gt;
;&amp;quot;n choose r&amp;quot;, defined as n!/(r!(n-r)!)&lt;br /&gt;
;Computes &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;Inputs: HL,DE&lt;br /&gt;
;Outputs:&lt;br /&gt;
;   HL is the result&lt;br /&gt;
;       &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;   carry flag reset means overflow&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   A,BC,DE,IX&lt;br /&gt;
;Notes:&lt;br /&gt;
;   Overflow is returned as 0&lt;br /&gt;
;   Overflow happens if HL choose DE exceeds 65535&lt;br /&gt;
;   This algorithm is constructed in such a way that intermediate&lt;br /&gt;
;   operations won't erroneously trigger overflow.&lt;br /&gt;
;66 bytes&lt;br /&gt;
  ld bc,1&lt;br /&gt;
  or a&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr c,ncr_oob&lt;br /&gt;
  jr z,ncr_exit&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  add hl,de&lt;br /&gt;
  jr c,$+3&lt;br /&gt;
  ex de,hl&lt;br /&gt;
  ld a,h&lt;br /&gt;
  or l&lt;br /&gt;
  push hl&lt;br /&gt;
  pop ix&lt;br /&gt;
ncr_exit:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,c&lt;br /&gt;
  scf&lt;br /&gt;
  ret z&lt;br /&gt;
ncr_loop:&lt;br /&gt;
  push bc \ push de&lt;br /&gt;
  push hl \ push bc&lt;br /&gt;
  ld b,h&lt;br /&gt;
  ld c,l&lt;br /&gt;
  call mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
  pop bc&lt;br /&gt;
  call DEHL_Div_BC    ;result in DEHL&lt;br /&gt;
  ld a,d&lt;br /&gt;
  or e&lt;br /&gt;
  pop bc&lt;br /&gt;
  pop de&lt;br /&gt;
  jr nz,ncr_overflow&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr c,ncr_overflow&lt;br /&gt;
  pop bc&lt;br /&gt;
  inc bc&lt;br /&gt;
  ld a,b&lt;br /&gt;
  cp ixh&lt;br /&gt;
  jr c,ncr_loop&lt;br /&gt;
  ld a,ixl&lt;br /&gt;
  cp c&lt;br /&gt;
  jr nc,ncr_loop&lt;br /&gt;
  ret&lt;br /&gt;
ncr_overflow:&lt;br /&gt;
  pop bc&lt;br /&gt;
  xor a&lt;br /&gt;
  ld b,a&lt;br /&gt;
ncr_oob:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,b&lt;br /&gt;
  ret&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GCDHL_DE ===&lt;br /&gt;
&lt;br /&gt;
This finds the greatest common divisor (GCD) of HL and DE using the binary GCD algorithm to improve performance.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
gcdHL_DE:&lt;br /&gt;
;gcd(HL,DE)-&amp;gt;HL&lt;br /&gt;
;Output:&lt;br /&gt;
;   B=0&lt;br /&gt;
;   HL is the GCD of the inputs&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   A,DE&lt;br /&gt;
;     DE is guaranteed 0 unless the output is 0 (which only happens if one of the inputs is 0).&lt;br /&gt;
;Uses the binary GCD algorithm&lt;br /&gt;
;65 bytes&lt;br /&gt;
&lt;br /&gt;
;B is our cofactor-of-2 counter&lt;br /&gt;
    ld b,0&lt;br /&gt;
&lt;br /&gt;
;If HL=0, return 0&lt;br /&gt;
    ld a,h \ or l \ ret z&lt;br /&gt;
&lt;br /&gt;
;If DE=0, return 0&lt;br /&gt;
    ex de,hl&lt;br /&gt;
    ld a,h \ or l \ jr nz,gcd_test_cofactor_of_2&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
gcd_cofactor_2_loop:&lt;br /&gt;
    inc b&lt;br /&gt;
    srl h \ rr l&lt;br /&gt;
    srl d \ rr e&lt;br /&gt;
gcd_test_cofactor_of_2:&lt;br /&gt;
    inc b&lt;br /&gt;
    ld a,e&lt;br /&gt;
    or l&lt;br /&gt;
    rra&lt;br /&gt;
    jr nc,gcd_cofactor_2_loop&lt;br /&gt;
&lt;br /&gt;
gcd_remove_factors_of_2_op2:&lt;br /&gt;
    srl h \ rr l \ jr nc,gcd_remove_factors_of_2_op2&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    jr gcd_swap_ops&lt;br /&gt;
&lt;br /&gt;
gcd_swap_ops_negate:&lt;br /&gt;
;At this point, HL needs to be negated and swapped with DE&lt;br /&gt;
    xor a \ sub l \ ld l,a \ sbc a,a \ sub h \ ld h,a&lt;br /&gt;
gcd_swap_ops:&lt;br /&gt;
    ex de,hl&lt;br /&gt;
gcd_remove_factors_of_2_op1:&lt;br /&gt;
    srl h \ rr l \ jr nc,gcd_remove_factors_of_2_op1&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    sbc hl,de&lt;br /&gt;
    jr c,gcd_swap_ops_negate&lt;br /&gt;
    jp nz,gcd_remove_factors_of_2_op1&lt;br /&gt;
&lt;br /&gt;
;DE is the GCD, need to shift it left B-1 times.&lt;br /&gt;
    ex de,hl&lt;br /&gt;
    dec b&lt;br /&gt;
    ret z&lt;br /&gt;
    add hl,hl \ djnz $-1&lt;br /&gt;
    ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LCM ===&lt;br /&gt;
This is as simple as multiplying the two numbers and dividing by the GCD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Zeda Thomas''' for the nCr and GCD algorithm&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math</id>
		<title>Z80 Routines:Math:Advance Math</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math"/>
				<updated>2019-09-30T23:07:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: using better GCD algorithm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Advanced Math]]&lt;br /&gt;
[[Category:Z80 Routines|Advanced Math]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are routines designed for math of a slightly higher level. These don't necessarily contribute to everyday coding, but might be useful for an OS that handles such math (or programming language).&lt;br /&gt;
&lt;br /&gt;
=== nCr Algorithm ===&lt;br /&gt;
&lt;br /&gt;
This computes &amp;quot;n choose r&amp;quot; in such a way as to avoid overflow unless the final result would overflow 16 bits.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Written by Zeda&lt;br /&gt;
&lt;br /&gt;
; Requires&lt;br /&gt;
;    mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
;    DEHL_Div_BC    ;DEHL/BC ==&amp;gt; DEHL&lt;br /&gt;
&lt;br /&gt;
ncr_HL_DE:&lt;br /&gt;
;&amp;quot;n choose r&amp;quot;, defined as n!/(r!(n-r)!)&lt;br /&gt;
;Computes &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;Inputs: HL,DE&lt;br /&gt;
;Outputs:&lt;br /&gt;
;   HL is the result&lt;br /&gt;
;       &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;   carry flag reset means overflow&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   A,BC,DE,IX&lt;br /&gt;
;Notes:&lt;br /&gt;
;   Overflow is returned as 0&lt;br /&gt;
;   Overflow happens if HL choose DE exceeds 65535&lt;br /&gt;
;   This algorithm is constructed in such a way that intermediate&lt;br /&gt;
;   operations won't erroneously trigger overflow.&lt;br /&gt;
;66 bytes&lt;br /&gt;
  ld bc,1&lt;br /&gt;
  or a&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr c,ncr_oob&lt;br /&gt;
  jr z,ncr_exit&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  add hl,de&lt;br /&gt;
  jr c,$+3&lt;br /&gt;
  ex de,hl&lt;br /&gt;
  ld a,h&lt;br /&gt;
  or l&lt;br /&gt;
  push hl&lt;br /&gt;
  pop ix&lt;br /&gt;
ncr_exit:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,c&lt;br /&gt;
  scf&lt;br /&gt;
  ret z&lt;br /&gt;
ncr_loop:&lt;br /&gt;
  push bc \ push de&lt;br /&gt;
  push hl \ push bc&lt;br /&gt;
  ld b,h&lt;br /&gt;
  ld c,l&lt;br /&gt;
  call mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
  pop bc&lt;br /&gt;
  call DEHL_Div_BC    ;result in DEHL&lt;br /&gt;
  ld a,d&lt;br /&gt;
  or e&lt;br /&gt;
  pop bc&lt;br /&gt;
  pop de&lt;br /&gt;
  jr nz,ncr_overflow&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr c,ncr_overflow&lt;br /&gt;
  pop bc&lt;br /&gt;
  inc bc&lt;br /&gt;
  ld a,b&lt;br /&gt;
  cp ixh&lt;br /&gt;
  jr c,ncr_loop&lt;br /&gt;
  ld a,ixl&lt;br /&gt;
  cp c&lt;br /&gt;
  jr nc,ncr_loop&lt;br /&gt;
  ret&lt;br /&gt;
ncr_overflow:&lt;br /&gt;
  pop bc&lt;br /&gt;
  xor a&lt;br /&gt;
  ld b,a&lt;br /&gt;
ncr_oob:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,b&lt;br /&gt;
  ret&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GCDHL_DE ===&lt;br /&gt;
&lt;br /&gt;
This finds the greatest common divisor (GCD) of HL and DE using the binary GCD algorithm to improve performance.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
gcdHL_DE:&lt;br /&gt;
;gcd(HL,DE)-&amp;gt;HL&lt;br /&gt;
;Output:&lt;br /&gt;
;   B=0&lt;br /&gt;
;   HL is the GCD of the inputs&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   A,DE&lt;br /&gt;
;     DE is guaranteed 0 unless the output is 0 (which only happens if one of the inputs is 0).&lt;br /&gt;
;Uses the binary GCD algorithm&lt;br /&gt;
;65 bytes&lt;br /&gt;
&lt;br /&gt;
;B is our cofactor-of-2 counter&lt;br /&gt;
    ld b,0&lt;br /&gt;
&lt;br /&gt;
;If HL=0, return 0&lt;br /&gt;
    ld a,h \ or l \ ret z&lt;br /&gt;
&lt;br /&gt;
;If DE=0, return 0&lt;br /&gt;
    ex de,hl&lt;br /&gt;
    ld a,h \ or l \ jr nz,gcd_test_cofactor_of_2&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
gcd_cofactor_2_loop:&lt;br /&gt;
    inc b&lt;br /&gt;
    srl h \ rr l&lt;br /&gt;
    srl d \ rr e&lt;br /&gt;
gcd_test_cofactor_of_2:&lt;br /&gt;
    inc b&lt;br /&gt;
    ld a,e&lt;br /&gt;
    or l&lt;br /&gt;
    rra&lt;br /&gt;
    jr nc,gcd_cofactor_2_loop&lt;br /&gt;
&lt;br /&gt;
gcd_remove_factors_of_2_op2:&lt;br /&gt;
    srl h \ rr l \ jr nc,gcd_remove_factors_of_2_op2&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    jr gcd_swap_ops&lt;br /&gt;
&lt;br /&gt;
gcd_swap_ops_negate:&lt;br /&gt;
;At this point, HL needs to be negated and swapped with DE&lt;br /&gt;
    xor a \ sub l \ ld l,a \ sbc a,a \ sub h \ ld h,a&lt;br /&gt;
gcd_swap_ops:&lt;br /&gt;
    ex de,hl&lt;br /&gt;
gcd_remove_factors_of_2_op1:&lt;br /&gt;
    srl h \ rr l \ jr nc,gcd_remove_factors_of_2_op1&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    sbc hl,de&lt;br /&gt;
    jr c,gcd_swap_ops_negate&lt;br /&gt;
    jp nz,gcd_remove_factors_of_2_op1&lt;br /&gt;
&lt;br /&gt;
;DE is the GCD, need to shift it left B-1 times.&lt;br /&gt;
    ex de,hl&lt;br /&gt;
    dec b&lt;br /&gt;
    ret z&lt;br /&gt;
    add hl,hl \ djnz $-1&lt;br /&gt;
    ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LCM ===&lt;br /&gt;
This is as simple as multiplying the two numbers and dividing by the GCD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Zeda (Xeda) Elnara''' for the nCr and GCD algorithm&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math</id>
		<title>Z80 Routines:Math:Advance Math</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math"/>
				<updated>2019-09-30T23:05:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Updated with a better implementation of ncr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Advanced Math]]&lt;br /&gt;
[[Category:Z80 Routines|Advanced Math]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are routines designed for math of a slightly higher level. These don't necessarily contribute to everyday coding, but might be useful for an OS that handles such math (or programming language).&lt;br /&gt;
&lt;br /&gt;
=== nCr Algorithm ===&lt;br /&gt;
&lt;br /&gt;
This computes &amp;quot;n choose r&amp;quot; in such a way as to avoid overflow unless the final result would overflow 16 bits.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Written by Zeda&lt;br /&gt;
&lt;br /&gt;
; Requires&lt;br /&gt;
;    mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
;    DEHL_Div_BC    ;DEHL/BC ==&amp;gt; DEHL&lt;br /&gt;
&lt;br /&gt;
ncr_HL_DE:&lt;br /&gt;
;&amp;quot;n choose r&amp;quot;, defined as n!/(r!(n-r)!)&lt;br /&gt;
;Computes &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;Inputs: HL,DE&lt;br /&gt;
;Outputs:&lt;br /&gt;
;   HL is the result&lt;br /&gt;
;       &amp;quot;HL choose DE&amp;quot;&lt;br /&gt;
;   carry flag reset means overflow&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   A,BC,DE,IX&lt;br /&gt;
;Notes:&lt;br /&gt;
;   Overflow is returned as 0&lt;br /&gt;
;   Overflow happens if HL choose DE exceeds 65535&lt;br /&gt;
;   This algorithm is constructed in such a way that intermediate&lt;br /&gt;
;   operations won't erroneously trigger overflow.&lt;br /&gt;
;66 bytes&lt;br /&gt;
  ld bc,1&lt;br /&gt;
  or a&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr c,ncr_oob&lt;br /&gt;
  jr z,ncr_exit&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  add hl,de&lt;br /&gt;
  jr c,$+3&lt;br /&gt;
  ex de,hl&lt;br /&gt;
  ld a,h&lt;br /&gt;
  or l&lt;br /&gt;
  push hl&lt;br /&gt;
  pop ix&lt;br /&gt;
ncr_exit:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,c&lt;br /&gt;
  scf&lt;br /&gt;
  ret z&lt;br /&gt;
ncr_loop:&lt;br /&gt;
  push bc \ push de&lt;br /&gt;
  push hl \ push bc&lt;br /&gt;
  ld b,h&lt;br /&gt;
  ld c,l&lt;br /&gt;
  call mul16          ;BC*DE ==&amp;gt; DEHL&lt;br /&gt;
  pop bc&lt;br /&gt;
  call DEHL_Div_BC    ;result in DEHL&lt;br /&gt;
  ld a,d&lt;br /&gt;
  or e&lt;br /&gt;
  pop bc&lt;br /&gt;
  pop de&lt;br /&gt;
  jr nz,ncr_overflow&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr c,ncr_overflow&lt;br /&gt;
  pop bc&lt;br /&gt;
  inc bc&lt;br /&gt;
  ld a,b&lt;br /&gt;
  cp ixh&lt;br /&gt;
  jr c,ncr_loop&lt;br /&gt;
  ld a,ixl&lt;br /&gt;
  cp c&lt;br /&gt;
  jr nc,ncr_loop&lt;br /&gt;
  ret&lt;br /&gt;
ncr_overflow:&lt;br /&gt;
  pop bc&lt;br /&gt;
  xor a&lt;br /&gt;
  ld b,a&lt;br /&gt;
ncr_oob:&lt;br /&gt;
  ld h,b&lt;br /&gt;
  ld l,b&lt;br /&gt;
  ret&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GCDHL_BC ===&lt;br /&gt;
&lt;br /&gt;
This finds the greatest common divisor (GCD) of HL and BC.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
GCDHL_BC:&lt;br /&gt;
;Inputs:&lt;br /&gt;
;     HL is a number&lt;br /&gt;
;     BC is a number&lt;br /&gt;
;Outputs:&lt;br /&gt;
;     A is 0&lt;br /&gt;
;     BC is the GCD&lt;br /&gt;
;     DE is 0&lt;br /&gt;
;Destroys:&lt;br /&gt;
;     HL&lt;br /&gt;
;Size:  25 bytes&lt;br /&gt;
;Speed: 30 to 49708 cycles&lt;br /&gt;
;       -As slow as about 126 times per second at 6MHz&lt;br /&gt;
;       -As fast as about 209715 times per second at 6MHz&lt;br /&gt;
;Speed break down:&lt;br /&gt;
;     If HL=BC, 30 cycles&lt;br /&gt;
;     24+1552x&lt;br /&gt;
;     If BC&amp;gt;HL, add 20 cycles&lt;br /&gt;
;     *x is from 1 to at most 32 (because we use 2 16-bit numbers)&lt;br /&gt;
;&lt;br /&gt;
     or a \ sbc hl,bc     ;B7ED42    19&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     add hl,bc            ;09        11&lt;br /&gt;
     jr nc,$+8            ;3006      11|31&lt;br /&gt;
       ld a,h             ;7C        --&lt;br /&gt;
       ld h,b             ;60        --&lt;br /&gt;
       ld b,a             ;47        --&lt;br /&gt;
       ld a,l             ;7D        --&lt;br /&gt;
       ld l,c             ;69        --&lt;br /&gt;
       ld c,a             ;4F        --&lt;br /&gt;
Loop:&lt;br /&gt;
     call HL_Div_BC       ;CD****    1511    returns BC unchanged, DE is the remainder&lt;br /&gt;
     ld a,d \ or e        ;7AB2      8&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     ld h,b \ ld l,c      ;6069      8&lt;br /&gt;
     ld b,d \ ld c,e      ;424B      8&lt;br /&gt;
     jr $-10              ;18F8      12&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LCM ===&lt;br /&gt;
This is as simple as multiplying the two numbers and dividing by the GCD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Zeda (Xeda) Elnara''' for the nCr and GCD algorithm&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root</id>
		<title>Z80 Routines:Math:Square root</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root"/>
				<updated>2019-09-30T23:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Reorganized and added a few routines including 32-bit integer square root&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Square root]]&lt;br /&gt;
[[Category:Z80 Routines|Square root]]&lt;br /&gt;
&lt;br /&gt;
==Size Optimization==&lt;br /&gt;
This version is size optimized, it compares every perfect square against HL until a square that is larger is found.  Obviously slower, but does get the job done in only 12 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;HL = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
sqrt:&lt;br /&gt;
   ld a,$ff&lt;br /&gt;
   ld de,1&lt;br /&gt;
sqrtloop:&lt;br /&gt;
   inc a&lt;br /&gt;
   dec e&lt;br /&gt;
   dec de&lt;br /&gt;
   add hl,de&lt;br /&gt;
   jr c,sqrtloop&lt;br /&gt;
   ret &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Small and Fast ==&lt;br /&gt;
&lt;br /&gt;
This code was found on z80 bits and has the advantage of being both faster than all three versions above and smaller than the last two (it runs in under 720 T-states (under 640 if fully unrolled) and takes a mere 29 bytes). On the other hand it takes a somewhat unconventional input... It computes the square root of the 16bit number formed by la and places the result in d.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sqrt_la:&lt;br /&gt;
	ld	de, 0040h	; 40h appends &amp;quot;01&amp;quot; to D&lt;br /&gt;
	ld	h, d&lt;br /&gt;
	&lt;br /&gt;
	ld	b, 7&lt;br /&gt;
	&lt;br /&gt;
	; need to clear the carry beforehand&lt;br /&gt;
	or	a&lt;br /&gt;
	&lt;br /&gt;
_loop:&lt;br /&gt;
	sbc	hl, de&lt;br /&gt;
	jr	nc, $+3&lt;br /&gt;
	add	hl, de&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	&lt;br /&gt;
	djnz	_loop&lt;br /&gt;
	&lt;br /&gt;
	sbc	hl, de		; optimised last iteration&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	&lt;br /&gt;
	ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization==&lt;br /&gt;
This 92 byte version is an optimized unrolled loop taking at most 379 t-states. Each iteration is optimized for its location in the algorithm.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; fast 16 bit isqrt by John Metcalf&lt;br /&gt;
; 92 bytes, 344-379 cycles (average 362)&lt;br /&gt;
; v2 - saved 3 cycles with a tweak suggested by Russ McNulty&lt;br /&gt;
&lt;br /&gt;
; call with hl = number to square root&lt;br /&gt;
; returns    a = square root&lt;br /&gt;
; corrupts hl, de&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld de,0B0C0h  ; 10&lt;br /&gt;
  add a,e       ; 4&lt;br /&gt;
  jr c,sq7      ; 12 / 7&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld d,0F0h     ; 7&lt;br /&gt;
sq7:&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq6     ; 12 / 7&lt;br /&gt;
  res 5,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq6:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  set 2,d       ; 8&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq5     ; 12 / 7&lt;br /&gt;
  res 3,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq5:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc d         ; 4&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq4     ; 12 / 7&lt;br /&gt;
  res 1,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq4:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld h,a        ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq3     ; 12 / 7&lt;br /&gt;
  ld e,040h     ; 7&lt;br /&gt;
  db 210        ; 10&lt;br /&gt;
sq3:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld a,e        ; 4&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 010h       ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq2     ; 12 / 7&lt;br /&gt;
  and 0DFh      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq2:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 04h        ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq1     ; 12 / 7&lt;br /&gt;
  and 0F7h      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq1:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc a         ; 4&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq0     ; 12 / 7&lt;br /&gt;
  and 0FDh      ; 7&lt;br /&gt;
sq0:&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  cpl           ; 4&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization 2==&lt;br /&gt;
This version uses a slightly different approach to the same algorithm as the one above, but is smaller and faster (this one includes an RET at the end, contributing 10cc and 1 byte):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; fast 16-bit isqrt by Zeda Thomas&lt;br /&gt;
;Feel free to use for whatever :)&lt;br /&gt;
&lt;br /&gt;
sqrtHL:&lt;br /&gt;
;Input: HL&lt;br /&gt;
;Output: A is the integer square root of HL&lt;br /&gt;
;Destroys: HL,DE (D is actually 0)&lt;br /&gt;
;min: 343cc&lt;br /&gt;
;max: 380cc&lt;br /&gt;
;avg: 361.5cc&lt;br /&gt;
;88 bytes&lt;br /&gt;
  ld de,05040h  ; 10&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  sub e         ; 4&lt;br /&gt;
  jr nc,sq7     ;\&lt;br /&gt;
  add a,e       ; | branch 1: 12cc&lt;br /&gt;
  ld d,16       ; | branch 2: 18cc&lt;br /&gt;
sq7:            ;/&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  cp d          ; 4&lt;br /&gt;
  jr c,sq6      ;\&lt;br /&gt;
  sub d         ; | branch 1: 12cc&lt;br /&gt;
  set 5,d       ; | branch 2: 19cc&lt;br /&gt;
sq6:            ;/&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
  res 4,d       ; 8&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  set 2,d       ; 8&lt;br /&gt;
  cp d          ; 4&lt;br /&gt;
  jr c,sq5      ;\&lt;br /&gt;
  sub d         ; | branch 1: 12cc&lt;br /&gt;
  set 3,d       ; | branch 2: 19cc&lt;br /&gt;
sq5:            ;/&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc a         ; 4&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  jr nc,sq4     ;\&lt;br /&gt;
  dec d         ; | branch 1: 12cc&lt;br /&gt;
  add a,d       ; | branch 2: 19cc&lt;br /&gt;
  dec d         ; | &amp;lt;-- this resets the low bit of D, so `srl d` resets carry.&lt;br /&gt;
sq4:            ;/&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  ld h,a        ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld a,e        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr nc,sq3     ;\&lt;br /&gt;
  add hl,de     ; | 12cc or 18cc&lt;br /&gt;
sq3:            ;/&lt;br /&gt;
  ccf           ; 4&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr c,sq2      ;\&lt;br /&gt;
  or 20h        ; | branch 1: 23cc&lt;br /&gt;
  db 254        ; |   &amp;lt;-- start of `cp *` which is 7cc to skip the next byte.&lt;br /&gt;
sq2:            ; | branch 2: 21cc&lt;br /&gt;
  add hl,de     ;/&lt;br /&gt;
&lt;br /&gt;
  xor 18h       ; 7&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr c,sq1      ;\&lt;br /&gt;
  or 8          ; | branch 1: 23cc&lt;br /&gt;
  db 254        ; |   &amp;lt;-- start of `cp *` which is 7cc to skip the next byte.&lt;br /&gt;
sq1:            ; | branch 2: 21cc&lt;br /&gt;
  add hl,de     ;/&lt;br /&gt;
&lt;br /&gt;
  xor 6         ; 7&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
&lt;br /&gt;
;This code would restore the square root&lt;br /&gt;
;   jr nc,sq0      ;\&lt;br /&gt;
;   add hl,de     ; | 12cc or 18cc&lt;br /&gt;
; sq0:            ;/&lt;br /&gt;
&lt;br /&gt;
  sbc a,255     ; 7&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  ret           ; 10&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization, preserve remainder==&lt;br /&gt;
This is essentially the same as the algorithm above, but with an optimized final step that preserves the remainder. The remainder is possibly useful for higher precision square roots.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;written by Zeda&lt;br /&gt;
sqrtHL:&lt;br /&gt;
;returns A as the sqrt, HL as the remainder, D = 0&lt;br /&gt;
;min: 352cc&lt;br /&gt;
;max: 391cc&lt;br /&gt;
;avg: 371.5cc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ld de,05040h  ; 10&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  sub e         ; 4&lt;br /&gt;
  jr nc,sq7     ;\&lt;br /&gt;
  add a,e       ; | branch 1: 12cc&lt;br /&gt;
  ld d,16       ; | branch 2: 18cc&lt;br /&gt;
sq7:            ;/&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  cp d          ; 4&lt;br /&gt;
  jr c,sq6      ;\&lt;br /&gt;
  sub d         ; | branch 1: 12cc&lt;br /&gt;
  set 5,d       ; | branch 2: 19cc&lt;br /&gt;
sq6:            ;/&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
  res 4,d       ; 8&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  set 2,d       ; 8&lt;br /&gt;
  cp d          ; 4&lt;br /&gt;
  jr c,sq5      ;\&lt;br /&gt;
  sub d         ; | branch 1: 12cc&lt;br /&gt;
  set 3,d       ; | branch 2: 19cc&lt;br /&gt;
sq5:            ;/&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc a         ; 4&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  jr nc,sq4     ;\&lt;br /&gt;
  dec d         ; | branch 1: 12cc&lt;br /&gt;
  add a,d       ; | branch 2: 19cc&lt;br /&gt;
  dec d         ; | &amp;lt;-- this resets the low bit of D, so `srl d` resets carry.&lt;br /&gt;
sq4:            ;/&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  ld h,a        ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld a,e        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr nc,sq3     ;\&lt;br /&gt;
  add hl,de     ; | 12cc or 18cc&lt;br /&gt;
sq3:            ;/&lt;br /&gt;
  ccf           ; 4&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr c,sq2      ;\&lt;br /&gt;
  or 20h        ; | branch 1: 23cc&lt;br /&gt;
  db 254        ; |   &amp;lt;-- start of `cp *` which is 7cc to skip the next byte.&lt;br /&gt;
sq2:            ; | branch 2: 21cc&lt;br /&gt;
  add hl,de     ;/&lt;br /&gt;
&lt;br /&gt;
  xor 18h       ; 7&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr c,sq1      ;\&lt;br /&gt;
  or 8          ; | branch 1: 23cc&lt;br /&gt;
  db 254        ; |   &amp;lt;-- start of `cp *` which is 7cc to skip the next byte.&lt;br /&gt;
sq1:            ; | branch 2: 21cc&lt;br /&gt;
  add hl,de     ;/&lt;br /&gt;
&lt;br /&gt;
  xor 6         ; 7&lt;br /&gt;
  srl d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  jr nc,+_      ;    \&lt;br /&gt;
  add hl,de     ; 15  |&lt;br /&gt;
  srl d         ; 8   |&lt;br /&gt;
  rra           ; 4   | branch 1: 38cc&lt;br /&gt;
  ret           ; 10  | branch 2: 40cc&lt;br /&gt;
_:              ;     |&lt;br /&gt;
  inc a         ; 4   |&lt;br /&gt;
  srl d         ; 8   |&lt;br /&gt;
  rra           ; 4   |&lt;br /&gt;
  ret           ; 10 /&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==32-bit Square Root (unrolled)==&lt;br /&gt;
This routine uses a ''remainder preserving'' 16-bit integer square root routine as a subroutine.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;NOTE: This uses undocumented instructions `sll` (a.k.a. `slia`) and `ld a,ixh` and `ld a,ixl`&lt;br /&gt;
&lt;br /&gt;
sqrtHLIX:&lt;br /&gt;
;Input: HLIX&lt;br /&gt;
;Output: DE is the sqrt, AHL is the remainder&lt;br /&gt;
;speed: 751+6{0,6}+{0,3+{0,18}}+{0,38}+sqrtHL&lt;br /&gt;
;min: 1103&lt;br /&gt;
;max: 1237&lt;br /&gt;
;avg: 1165.5&lt;br /&gt;
;166 bytes&lt;br /&gt;
&lt;br /&gt;
  call sqrtHL   ;expects returns A as sqrt, HL as remainder, D = 0&lt;br /&gt;
  add a,a&lt;br /&gt;
  ld e,a&lt;br /&gt;
  rl d&lt;br /&gt;
&lt;br /&gt;
  ld a,ixh&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
;Now we have four more iterations&lt;br /&gt;
;The first two are no problem&lt;br /&gt;
  ld a,ixl&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
  sll e \ rl d&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  add a,a \ adc hl,hl&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  .db $FE     ;start of `cp *`&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
sqrt32_iter15:&lt;br /&gt;
;On the next iteration, HL might temporarily overflow by 1 bit&lt;br /&gt;
  sll e \ rl d      ;sla e \ rl d \ inc e&lt;br /&gt;
  add a,a&lt;br /&gt;
  adc hl,hl&lt;br /&gt;
  add a,a&lt;br /&gt;
  adc hl,hl       ;This might overflow!&lt;br /&gt;
  jr c,sqrt32_iter15_br0&lt;br /&gt;
;&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
  jr nc,+_&lt;br /&gt;
  add hl,de&lt;br /&gt;
  dec e&lt;br /&gt;
  jr sqrt32_iter16&lt;br /&gt;
sqrt32_iter15_br0:&lt;br /&gt;
  or a&lt;br /&gt;
  sbc hl,de&lt;br /&gt;
_:&lt;br /&gt;
  inc e&lt;br /&gt;
&lt;br /&gt;
;On the next iteration, HL is allowed to overflow, DE could overflow with our current routine, but it needs to be shifted right at the end, anyways&lt;br /&gt;
sqrt32_iter16:&lt;br /&gt;
  add a,a&lt;br /&gt;
  ld b,a        ;either 0x00 or 0x80&lt;br /&gt;
  adc hl,hl&lt;br /&gt;
  rla&lt;br /&gt;
  adc hl,hl&lt;br /&gt;
  rla&lt;br /&gt;
;AHL - (DE+DE+1)&lt;br /&gt;
  sbc hl,de \ sbc a,b&lt;br /&gt;
  inc e&lt;br /&gt;
  or a&lt;br /&gt;
  sbc hl,de \ sbc a,b&lt;br /&gt;
  ret p&lt;br /&gt;
  add hl,de&lt;br /&gt;
  adc a,b&lt;br /&gt;
  dec e&lt;br /&gt;
  add hl,de&lt;br /&gt;
  adc a,b&lt;br /&gt;
  ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
==Other Options==&lt;br /&gt;
A binary search of a square table would yield much better best case scenarios and the worst case scenarios would be similar to the high school method. However this would also require 512 byte table making it significantly larger than the other routines.  Of course the table could also serve as a rapid squaring method.&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''James Montelongo'''&lt;br /&gt;
* '''Milos &amp;quot;baze&amp;quot; Bazelides''' (or possibly one of the contributor of [http://baze.au.com/misc/z80bits.html z80bits])&lt;br /&gt;
* '''John Metcalf''' (Speed Optimization [https://github.com/impomatic/z80snippets/blob/master/fastisqr.asm z80snippets])&lt;br /&gt;
* '''Zeda Thomas''' ([https://github.com/Zeda/Z80-Optimized-Routines/blob/master/math/squareroot Z80 Optimized Routines])&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root</id>
		<title>Z80 Routines:Math:Square root</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root"/>
				<updated>2019-09-30T22:33:44Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: removed redundant code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Square root]]&lt;br /&gt;
[[Category:Z80 Routines|Square root]]&lt;br /&gt;
&lt;br /&gt;
==Size Optimization==&lt;br /&gt;
This version is size optimized, it compares every perfect square against HL until a square that is larger is found.  Obviously slower, but does get the job done in only 12 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;HL = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
sqrt:&lt;br /&gt;
   ld a,$ff&lt;br /&gt;
   ld de,1&lt;br /&gt;
sqrtloop:&lt;br /&gt;
   inc a&lt;br /&gt;
   dec e&lt;br /&gt;
   dec de&lt;br /&gt;
   add hl,de&lt;br /&gt;
   jr c,sqrtloop&lt;br /&gt;
   ret &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization 2==&lt;br /&gt;
This 92 byte version is an optimized unrolled loop taking at most 379 t-states. Each iteration is optimized for its location in the algorithm.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; fast 16 bit isqrt by John Metcalf&lt;br /&gt;
; 92 bytes, 344-379 cycles (average 362)&lt;br /&gt;
; v2 - saved 3 cycles with a tweak suggested by Russ McNulty&lt;br /&gt;
&lt;br /&gt;
; call with hl = number to square root&lt;br /&gt;
; returns    a = square root&lt;br /&gt;
; corrupts hl, de&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld de,0B0C0h  ; 10&lt;br /&gt;
  add a,e       ; 4&lt;br /&gt;
  jr c,sq7      ; 12 / 7&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld d,0F0h     ; 7&lt;br /&gt;
sq7:&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq6     ; 12 / 7&lt;br /&gt;
  res 5,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq6:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  set 2,d       ; 8&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq5     ; 12 / 7&lt;br /&gt;
  res 3,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq5:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc d         ; 4&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq4     ; 12 / 7&lt;br /&gt;
  res 1,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq4:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld h,a        ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq3     ; 12 / 7&lt;br /&gt;
  ld e,040h     ; 7&lt;br /&gt;
  db 210        ; 10&lt;br /&gt;
sq3:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld a,e        ; 4&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 010h       ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq2     ; 12 / 7&lt;br /&gt;
  and 0DFh      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq2:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 04h        ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq1     ; 12 / 7&lt;br /&gt;
  and 0F7h      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq1:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc a         ; 4&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq0     ; 12 / 7&lt;br /&gt;
  and 0FDh      ; 7&lt;br /&gt;
sq0:&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  cpl           ; 4&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Presumably the best ==&lt;br /&gt;
&lt;br /&gt;
This code was found on z80 bits and has the advantage of being both faster than all three versions above and smaller than the last two (it runs in under 720 T-states (under 640 if fully unrolled) and takes a mere 29 bytes). On the other hand it takes a somewhat unconventionnal input... It computes the square root of the 16bit number formed by la and places the result in d.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sqrt_la:&lt;br /&gt;
	ld	de, 0040h	; 40h appends &amp;quot;01&amp;quot; to D&lt;br /&gt;
	ld	h, d&lt;br /&gt;
	&lt;br /&gt;
	ld	b, 7&lt;br /&gt;
	&lt;br /&gt;
	; need to clear the carry beforehand&lt;br /&gt;
	or	a&lt;br /&gt;
	&lt;br /&gt;
_loop:&lt;br /&gt;
	sbc	hl, de&lt;br /&gt;
	jr	nc, $+3&lt;br /&gt;
	add	hl, de&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	&lt;br /&gt;
	djnz	_loop&lt;br /&gt;
	&lt;br /&gt;
	sbc	hl, de		; optimised last iteration&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	&lt;br /&gt;
	ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other Options==&lt;br /&gt;
A binary search of a square table would yield much better best case scenarios and the worst case scenarios would be similar to the high school method. However this would also require 512 byte table making it significantly larger than the other routines.  Of course the table could also serve as a rapid squaring method.&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''James Montelongo'''&lt;br /&gt;
* '''Milos &amp;quot;baze&amp;quot; Bazelides''' (or possibly one of the contributor of [http://baze.au.com/misc/z80bits.html z80bits])&lt;br /&gt;
* '''John Metcalf''' (Speed Optimization 2 from [https://github.com/impomatic/z80snippets/blob/master/fastisqr.asm z80snippets])&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root</id>
		<title>Z80 Routines:Math:Square root</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root"/>
				<updated>2019-09-30T22:32:34Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: removed this redundant section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Square root]]&lt;br /&gt;
[[Category:Z80 Routines|Square root]]&lt;br /&gt;
&lt;br /&gt;
==Size Optimization==&lt;br /&gt;
This version is size optimized, it compares every perfect square against HL until a square that is larger is found.  Obviously slower, but does get the job done in only 12 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;HL = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
sqrt:&lt;br /&gt;
   ld a,$ff&lt;br /&gt;
   ld de,1&lt;br /&gt;
sqrtloop:&lt;br /&gt;
   inc a&lt;br /&gt;
   dec e&lt;br /&gt;
   dec de&lt;br /&gt;
   add hl,de&lt;br /&gt;
   jr c,sqrtloop&lt;br /&gt;
   ret &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization 2==&lt;br /&gt;
This 92 byte version is an optimized unrolled loop taking at most 379 t-states. Each iteration is optimized for its location in the algorithm.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; fast 16 bit isqrt by John Metcalf&lt;br /&gt;
; 92 bytes, 344-379 cycles (average 362)&lt;br /&gt;
; v2 - saved 3 cycles with a tweak suggested by Russ McNulty&lt;br /&gt;
&lt;br /&gt;
; call with hl = number to square root&lt;br /&gt;
; returns    a = square root&lt;br /&gt;
; corrupts hl, de&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld de,0B0C0h  ; 10&lt;br /&gt;
  add a,e       ; 4&lt;br /&gt;
  jr c,sq7      ; 12 / 7&lt;br /&gt;
  ld a,h        ; 4&lt;br /&gt;
  ld d,0F0h     ; 7&lt;br /&gt;
sq7:&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq6     ; 12 / 7&lt;br /&gt;
  res 5,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq6:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  set 2,d       ; 8&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq5     ; 12 / 7&lt;br /&gt;
  res 3,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq5:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc d         ; 4&lt;br /&gt;
  add a,d       ; 4&lt;br /&gt;
  jr nc,sq4     ; 12 / 7&lt;br /&gt;
  res 1,d       ; 8&lt;br /&gt;
  db 254        ; 7&lt;br /&gt;
sq4:&lt;br /&gt;
  sub d         ; 4&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld h,a        ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq3     ; 12 / 7&lt;br /&gt;
  ld e,040h     ; 7&lt;br /&gt;
  db 210        ; 10&lt;br /&gt;
sq3:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  ld a,e        ; 4&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 010h       ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq2     ; 12 / 7&lt;br /&gt;
  and 0DFh      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq2:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  or 04h        ; 7&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq1     ; 12 / 7&lt;br /&gt;
  and 0F7h      ; 7&lt;br /&gt;
  db 218        ; 10&lt;br /&gt;
sq1:&lt;br /&gt;
  sbc hl,de     ; 15&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
&lt;br /&gt;
; ----------&lt;br /&gt;
&lt;br /&gt;
  inc a         ; 4&lt;br /&gt;
  ld e,a        ; 4&lt;br /&gt;
  add hl,de     ; 11&lt;br /&gt;
  jr nc,sq0     ; 12 / 7&lt;br /&gt;
  and 0FDh      ; 7&lt;br /&gt;
sq0:&lt;br /&gt;
  sra d         ; 8&lt;br /&gt;
  rra           ; 4&lt;br /&gt;
  cpl           ; 4&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Balanced Optimization==&lt;br /&gt;
This version is a balance between speed and size. It also uses the high school method and runs under 1200 tstates. It only costs 41 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;DE = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
Sqrt:&lt;br /&gt;
    ld hl,0&lt;br /&gt;
    ld c,l&lt;br /&gt;
    ld b,h&lt;br /&gt;
    ld a,8&lt;br /&gt;
Sqrtloop:&lt;br /&gt;
    sla e&lt;br /&gt;
    rl d&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    sla e&lt;br /&gt;
    rl d&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    scf               ;Can be optimised&lt;br /&gt;
    rl c              ;with SL1 instruction&lt;br /&gt;
    rl b&lt;br /&gt;
    sbc hl,bc&lt;br /&gt;
    jr nc,Sqrtaddbit&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    dec c&lt;br /&gt;
Sqrtaddbit:&lt;br /&gt;
    inc c&lt;br /&gt;
    res 0,c&lt;br /&gt;
    dec a&lt;br /&gt;
    jr nz,Sqrtloop&lt;br /&gt;
    ld a,c&lt;br /&gt;
    rr b&lt;br /&gt;
    rra&lt;br /&gt;
    ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Presumably the best ==&lt;br /&gt;
&lt;br /&gt;
This code was found on z80 bits and has the advantage of being both faster than all three versions above and smaller than the last two (it runs in under 720 T-states (under 640 if fully unrolled) and takes a mere 29 bytes). On the other hand it takes a somewhat unconventionnal input... It computes the square root of the 16bit number formed by la and places the result in d.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sqrt_la:&lt;br /&gt;
	ld	de, 0040h	; 40h appends &amp;quot;01&amp;quot; to D&lt;br /&gt;
	ld	h, d&lt;br /&gt;
	&lt;br /&gt;
	ld	b, 7&lt;br /&gt;
	&lt;br /&gt;
	; need to clear the carry beforehand&lt;br /&gt;
	or	a&lt;br /&gt;
	&lt;br /&gt;
_loop:&lt;br /&gt;
	sbc	hl, de&lt;br /&gt;
	jr	nc, $+3&lt;br /&gt;
	add	hl, de&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	&lt;br /&gt;
	djnz	_loop&lt;br /&gt;
	&lt;br /&gt;
	sbc	hl, de		; optimised last iteration&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	&lt;br /&gt;
	ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other Options==&lt;br /&gt;
A binary search of a square table would yield much better best case scenarios and the worst case scenarios would be similar to the high school method. However this would also require 512 byte table making it significantly larger than the other routines.  Of course the table could also serve as a rapid squaring method.&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''James Montelongo'''&lt;br /&gt;
* '''Milos &amp;quot;baze&amp;quot; Bazelides''' (or possibly one of the contributor of [http://baze.au.com/misc/z80bits.html z80bits])&lt;br /&gt;
* '''John Metcalf''' (Speed Optimization 2 from [https://github.com/impomatic/z80snippets/blob/master/fastisqr.asm z80snippets])&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication</id>
		<title>Z80 Routines:Math:Multiplication</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Multiplication"/>
				<updated>2019-09-30T22:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: optimized the mult_h_e routine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Multiplication]]&lt;br /&gt;
[[Category:Z80 Routines|Multiplication]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring multiplication algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== Unsigned versions ==&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies h by e and places the result in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_h_e&lt;br /&gt;
   ld	d, 0	; Combining the overhead and&lt;br /&gt;
   sla	h	; optimised first iteration&lt;br /&gt;
   sbc	a, a&lt;br /&gt;
   and	e&lt;br /&gt;
   ld	l, a&lt;br /&gt;
   &lt;br /&gt;
   ld	b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl          &lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies de by a and places the result in ahl (which means a is the most significant byte of the product, l the least significant and h the intermediate one...)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_a_de&lt;br /&gt;
   ld	c, 0&lt;br /&gt;
   ld	h, c&lt;br /&gt;
   ld	l, h&lt;br /&gt;
&lt;br /&gt;
   add	a, a		; optimised 1st iteration&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h,d&lt;br /&gt;
   ld	l,e&lt;br /&gt;
&lt;br /&gt;
   ld b, 7&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   adc	a, c            ; yes this is actually adc a, 0 but since c is free we set it to zero and so we can save 1 byte and up to 3 T-states per iteration&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the result in dehl.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
mult_de_bc&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
&lt;br /&gt;
   sla	e		; optimised 1st iteration&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   ld	h, b&lt;br /&gt;
   ld	l, c&lt;br /&gt;
&lt;br /&gt;
   ld	a, 15&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   jr	nc, $+6&lt;br /&gt;
   add	hl, bc&lt;br /&gt;
   jr	nc, $+3&lt;br /&gt;
   inc	de&lt;br /&gt;
   &lt;br /&gt;
   dec	a&lt;br /&gt;
   jr	nz, _loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Signed versions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- do the routines later, basically try to use cpu instruction that preserve bit 7 (sign) or if this is not possible, just take the sign out, do the multiplication and give the sign afterwards and accordingly. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*8 multiplication ===&lt;br /&gt;
&lt;br /&gt;
=== 16*16 multiplication ===&lt;br /&gt;
&lt;br /&gt;
The following routine multiplies bc by de and places the signed result in dehl.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;; 16 bit signed multiply by John Metcalf&lt;br /&gt;
; 32 bytes, average approx ~1090 cycles&lt;br /&gt;
&lt;br /&gt;
; call with bc, de = 16 bit signed numbers to multiply&lt;br /&gt;
; returns   de:hl = 32 bit signed product&lt;br /&gt;
; corrupts  a&lt;br /&gt;
&lt;br /&gt;
; de:hl = bc*de&lt;br /&gt;
&lt;br /&gt;
multiply:&lt;br /&gt;
  xor a&lt;br /&gt;
  ld h,a&lt;br /&gt;
  ld l,a&lt;br /&gt;
  bit 7,d&lt;br /&gt;
  jr z,muldpos&lt;br /&gt;
  sbc hl,bc&lt;br /&gt;
muldpos:&lt;br /&gt;
  ld a,b&lt;br /&gt;
  sra a&lt;br /&gt;
  and 0C0h&lt;br /&gt;
  add a,d&lt;br /&gt;
  ld d,a&lt;br /&gt;
&lt;br /&gt;
  ld a,16&lt;br /&gt;
mulloop:&lt;br /&gt;
  add hl,hl&lt;br /&gt;
  rl e&lt;br /&gt;
  rl d&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  add hl,bc&lt;br /&gt;
  jr nc,mul0bit&lt;br /&gt;
  inc de&lt;br /&gt;
mul0bit:&lt;br /&gt;
  dec a&lt;br /&gt;
  jr nz,mulloop&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:42A3</id>
		<title>83Plus:BCALLs:42A3</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:42A3"/>
				<updated>2019-04-01T14:09:30Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Comments */ Dead links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:BCALLs:By Name:Utility|IsA2ByteTok]] [[Category:83Plus:BCALLs:By Name|IsA2ByteTok]] [[Category:83Plus:BCALLs:By Address|42A3 - IsA2ByteOk]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' IsA2ByteTok&lt;br /&gt;
&lt;br /&gt;
'''BCALL Address:''' 42A3&lt;br /&gt;
&lt;br /&gt;
Determines if the token in register A is a two-byte token.&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* A: First byte of potential two-byte token&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* Z: set if A is the first byte of a two-byte token.&lt;br /&gt;
&lt;br /&gt;
=== Registers Destroyed ===&lt;br /&gt;
''None''&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
The current two-byte token identifiers are t2ByteTok, tVarStrng, tGFormat, tVarSys, tVarOut, tVarGBD, tVarEqu, tVarLst, tVarPict, and tVarMat, and on the TI84s, $EF.&lt;br /&gt;
&lt;br /&gt;
TI has updated the OS for the TI84s to return true for $EF, the identifer for the [[83Plus:Basic:New_Tokens_on_the_84_Plus|TI84s new tokens]]. It would be nice if someone would run [http://pws.cablespeed.com/~tehblueblur/ti83p/CHECKEF2.8XP this program]&amp;lt;sup&amp;gt;[dead link]&amp;lt;/sup&amp;gt; to check to see how OS 1.19 reacts to $EF. ([http://pws.cablespeed.com/~tehblueblur/ti83p/checkEF2.z80 Source]&amp;lt;sup&amp;gt;[dead link]&amp;lt;/sup&amp;gt; (jr z, w00itztru1111 should be w00tiztru1111))&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Basic:Tricks</id>
		<title>83Plus:Basic:Tricks</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Basic:Tricks"/>
				<updated>2018-09-13T22:47:36Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Pause affects the Ans variable, another case when Pause after Disp is valid.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Basic|Tricks]]&lt;br /&gt;
[[Category:83Plus:Basic:Routines|Tricks]]&lt;br /&gt;
&lt;br /&gt;
There is a whole list of tricks that one can implement, once one is comfortable programming in TI-Basic which allow for a whole onslaught of capabilities, such as using less memory or making the program run faster.  There used to be a site called Kevtiva Inc. which had the largest list of TI-BASIC hacks I (Saibot84) have ever seen, including how to force a RAM reset (without the use of asm programs) but I've forgotten most of the meanest hacks. Here are some of the many tricks: (Please use common sense in deciding whether a &amp;quot;-&amp;quot; is a minus or a negative sign. When the use is un-common-sense-ical or possibly confusing, it will be specified.)&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Memory==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
===Memory Management===&amp;lt;!-- â†’â‰ â‰¤â‰¥  --&amp;gt;&lt;br /&gt;
;Number values:In order to be able to save memory on the calculator, it helps to have a bit of an understanding as to how the calc manages the memory, especially in regards to numbers. Because TIOS is designed for school, and so is oriented for precision, it saves all real number values as 14-digits and an exponent of 10. In other words, it saves the number &amp;amp;pi; as 3.1415926535898 &amp;amp;times; 10&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;, but in memory, it is something more similar (not exact) to &amp;lt;code&amp;gt;0 31415926535898&amp;lt;/code&amp;gt; where the 0 tells TIOS what the exponent of 10 is that need to be applied to the 31415926535898.  However, this also applies to smaller values, such that a 13 is saved as &amp;lt;code&amp;gt;1 13000000000000&amp;lt;/code&amp;gt;.  For small, rational, terminating values, it can be seen that a good deal of memory is being wasted.  I've created the following formula which, when saved to Y0 (or any other Y function, works with numbers in the same way that the sub( function works with strings:&lt;br /&gt;
 int(10^(F)fPart(X/10^(int(2-A+log(X&lt;br /&gt;
:translated as a sub( statement, it would be the equivalent of sub(X,A,F) regardless of the position of the decimal point in X.  If you don't understand what the formula is doing, it's dividing X by 10&amp;lt;sup&amp;gt;value&amp;lt;/sup&amp;gt; so that the digit we're looking for (identified in A) is &amp;quot;moved&amp;quot; to be the first digit to the right of the decimal point, then ignores anything to the left or the decimal piont, then multiplies the value left over by 10&amp;lt;sup&amp;gt;F&amp;lt;/sup&amp;gt; and ignores anything to the right of the decimal point, thus providing the sub(X,A,F).&lt;br /&gt;
;use more than 27 vars:If you need to use more than the 27 vars TIOS gives you with A-Z, other than using lists, matrices, strings, or Ans, you can go look in the [VARS] menu under Window.  Of these, being that the calculator is usually in function mode, you can use any of the window vars under T/theta (which are for parametric mode) and/or under U/V/W (which are for polar).  It is recommended that you prefer those under U/V/W because this mode is usually never used, whereas parametric has been used on more than one occasion by programs, such as for drawing X in terms of Y. You can also go into the Finance menu under [APPS] and go to Vars, but IIRC, some are read-only vars, so you will need to experiment to see if a var is accessible or not, but it is certain, that at least the '''N''' can be used problemlessly in your programs. You can also use the ''n'', which is found by going to the catalog and pressing &amp;quot;N&amp;quot; as a variable, as well as the sequential functions u,v, and w.&lt;br /&gt;
;Debugging:One of the easiest ways to help you debug your program is through the use of the Pause command.  You can use the Pause command to display the value of a var, or just to track the progress of your program.  During any of the Pause commands, you can press [ON] to break the program and choose Goto so that the calc will automatically bring you to the point in your program where it was Pause-ing when you interrupted it with the [ON] key. Some common bugs include using the Y var or the X var while drawing to the screen (TIOS tends to change the value of Y and/or X when doing certain things on the graph screen, so avoid using Y or X when working on the graph screen.&lt;br /&gt;
&lt;br /&gt;
===Memory Saving===&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
;Never write out closing ''')''' or '''&amp;quot;''' (parentheses/quotes) at the end of a line:You save '''1''' byte. The reason for this is that TIOS closes all still-open parentheses when it encounters $3F, which is the new-line character that is input when you press enter in the Program Editor, or when it encounters the store arrow.&lt;br /&gt;
;Never use a Pause right after a Disp, unless the Pause has text or you need to preserve Ans:This is because both Disp and Pause can display text to the homescreen. Disp writes the text to the screen and then continues forward, but Pause waits for the [ENTER] key to be pressed.  When Pause is used with text, such as in&lt;br /&gt;
 :Pause &amp;quot;TEXT&amp;quot;&lt;br /&gt;
:then it writes the text to the homescreen first, and then waits for the user to press [ENTER].&lt;br /&gt;
;CAPITALIZE:For the most part, yes, it is nice to see that not EVERY character is in UPPERCASE on the calculator, but if you're looking to save space, don't use lower case letters.  Each lowercase letter takes up twice as much space as the uppercase ones.&lt;br /&gt;
;Read-Only Lists and Matrices:If you have a list or matrix that will be read-only, it behooves you to save it to a string or Y function (Y1-Y0). Instead of doing&lt;br /&gt;
 :{1,2,3,4,5,6,7,8,9â†’L1&lt;br /&gt;
 :L1(5 (to retrieve the 5th element of the list)&lt;br /&gt;
:try doing&lt;br /&gt;
 :&amp;quot;{1,2,3,4,5,6,7,8,9â†’Str1&lt;br /&gt;
 :expr(Str1&lt;br /&gt;
 :Ans(5&lt;br /&gt;
:or&lt;br /&gt;
 :&amp;quot;{1,2,3,4,5,6,7,8,9â†’Y1&lt;br /&gt;
 :Y1:Ans(5&lt;br /&gt;
:The benefit is that you are now no longer wasting the space, as explained in the [[83Plus:Basic:Tricks#Memory_Management|Number Values]].  When choosing between storing your list to a string and storing it to a function, keep in mind that string values are somewhat editable, while functions are completely read-only.  If you needed to edit something in the function, you'd have to convert it to a string first before editing, and then overwrite the original function.  It is therefore recommended that you save your lists to strings.&lt;br /&gt;
;No NewLine Required:The following commands do not require that you neither begin a new line, nor use a colon before the next command: Archive, Unarchive, DelVar. Example:&lt;br /&gt;
 Archive XArchive YArchive ZUnarchive ZUnarchive TDelVar ADelVar BFor(X,0,1&lt;br /&gt;
:this doesn't work with Lists, or labels, and presumably neither with the prgm token.&lt;br /&gt;
&lt;br /&gt;
===Avoiding Memory Leaks===&lt;br /&gt;
Memory leaks can pose a serious problem to TI-Basic developers writing more advanced programs.  Specifically, TI-Basic doesn't allow you to effectively Goto out of a loop.  Take the following code:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;While A?3&lt;br /&gt;
If A=7&lt;br /&gt;
Then&lt;br /&gt;
0?A&lt;br /&gt;
Goto B1&lt;br /&gt;
End&lt;br /&gt;
A+1?A&lt;br /&gt;
End&lt;br /&gt;
Lbl B1&lt;br /&gt;
Disp &amp;quot;Done.&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This code does work as intended, but it causes a memory leak.  When the &amp;quot;Goto B1&amp;quot; line executes, the loop technically never ends, which causes a memory leak.  What you can do instead is place more End statements after your loop.  Here's the alternate code, with no memory leak:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;While A?3&lt;br /&gt;
If A=7&lt;br /&gt;
Then&lt;br /&gt;
0?A&lt;br /&gt;
Goto B1&lt;br /&gt;
End&lt;br /&gt;
A+1?A&lt;br /&gt;
End&lt;br /&gt;
Goto C1&lt;br /&gt;
Lbl B1&lt;br /&gt;
End&lt;br /&gt;
End&lt;br /&gt;
Lbl C1&lt;br /&gt;
Disp &amp;quot;Done.&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This code executes an extra End statement for every skipped one if you jump out of the loop early.  When the loop exits normally, extra End statements are skipped.  This can be extended several times, such that you execute as many end statements as you originally skipped.  Here's a more complex example (Note that in the example, &amp;quot;;&amp;quot; denotes a comment, which is not valid TI-Basic syntax):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;While 1&lt;br /&gt;
If 1&lt;br /&gt;
Then&lt;br /&gt;
Goto E2 ; End twice&lt;br /&gt;
End&lt;br /&gt;
&lt;br /&gt;
If 1&lt;br /&gt;
Then&lt;br /&gt;
If 1&lt;br /&gt;
Then&lt;br /&gt;
Goto E3 ; End 3 times&lt;br /&gt;
End&lt;br /&gt;
End&lt;br /&gt;
&lt;br /&gt;
End ; Normal loop exit&lt;br /&gt;
Goto E0 ; End none&lt;br /&gt;
Lbl E3&lt;br /&gt;
End&lt;br /&gt;
Lbl E2&lt;br /&gt;
End&lt;br /&gt;
End&lt;br /&gt;
Lbl E0&lt;br /&gt;
Disp &amp;quot;Done.&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This code executes all the remaining End statements that would have been missed upon exiting the loop.&lt;br /&gt;
&lt;br /&gt;
==Speed Boosters==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
;Use For( loops:In light of research I once read online, as well as through personal research and experimentation, it is fairly simple to see that For( loops are the fastest of the looping options.  To prove this, try running the following program on your calc, and see which one is the fastest:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Program:LOOPTEST&lt;br /&gt;
:Disp &amp;quot;FOR&lt;br /&gt;
:For(X,1,10000&lt;br /&gt;
:End&lt;br /&gt;
:Pause &amp;quot;FOR IS DONE&lt;br /&gt;
:1â†’X&lt;br /&gt;
:Disp &amp;quot;WHILE&lt;br /&gt;
:While X&amp;lt;10001&lt;br /&gt;
:X+1â†’X&lt;br /&gt;
:End&lt;br /&gt;
:Pause &amp;quot;WHILE IS DONE&lt;br /&gt;
:0â†’X&lt;br /&gt;
:Disp &amp;quot;GOTO&lt;br /&gt;
:Lbl XX&lt;br /&gt;
:X+1â†’X&lt;br /&gt;
:If X&amp;lt;10001&lt;br /&gt;
:Goto XX&lt;br /&gt;
Pause &amp;quot;GOTO DONE&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:You will notice, especially if using a stopwatch, that the For( loop, IIRC, should even run a FEW SECONDS faster than the While loop, and/or the Goto loop. Therefore, see if you can't change your loops to use For( instead.  In the case of the While, change&lt;br /&gt;
 :While X&amp;lt;Y&lt;br /&gt;
:to&lt;br /&gt;
 :X-1â†’X&lt;br /&gt;
 :For(X,X,Y&lt;br /&gt;
 :X-1â†’X&lt;br /&gt;
:You most likely will be losing a few more bytes in memory, but it's very much worth it for the speed... and you've already saved much speed by doing the tricks above ;-)&lt;br /&gt;
;Get Returns on your IfThens, Fors, etc.:Each time you do an If-Then statement or a For( statement (among others), when the calc is &amp;quot;waiting&amp;quot; for an End statement, these conditions are taking up memory, which, after a while, slow down your BASIC programs. However, the benefit is that this is only the case, as long as your program is running... as soon as the calculator returns to the homescreen, these used memory is cleared again and you are ready to go at it again. The benefit of this is that when the calculator encounters a Return statement in a BASIC program, it &amp;quot;cancels&amp;quot; any conditions for its waiting for an End.&lt;br /&gt;
;Avoid storing to vars in a loop:Brandon Green writes in his BASIC Guru Online that his experiments have led to the conclusion that storing variables is a prime cause of slowdowns in TI-BASIC programs.  Therefore, try to restructure your code so as to avoid using the â†’ as much as possible.&lt;br /&gt;
&lt;br /&gt;
==Graphical Touches==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
;Use Text(-1,X,Y,value or text:I learned this from Kevtiva Inc.  Normally, you do something like this:&lt;br /&gt;
 :Text(15,10,&amp;quot;MY TEXT&lt;br /&gt;
:following this, the text &amp;quot;MY TEXT&amp;quot; will be written on the 15th row, in the 10th column, in the small font... however, try adding a &amp;quot;-1&amp;quot; (without the quotation marks) as the first argument...&lt;br /&gt;
 :Text(-1,15,10,&amp;quot;MY TEXT&lt;br /&gt;
:This time, the text &amp;quot;MY TEXT&amp;quot; will be written on the 15th row in the 10th column, in the LARGE font&lt;br /&gt;
;Write blank spaces to the graph screen when needing to erase stuff:as long as what you are trying to erase is at least 6 pixels high, it is srongly recommeded that you use the Text( command to write blank spaces to the screen instead of creating a Line(A,B,C,D,0 loop.  This is because to write a line, white or black, the calculator needs to do a lot of math to convert the X and Y coordinates into pixel coordinates, while writing text to the screen is almost at the same speed as it would take to draw a sprite to the screen in any asm program (since for the calc, text chars are just sprites) and so writing (blank) text to clear the screen is much faster.&lt;br /&gt;
;Try drawing graphics to the screen using text instead of lines: With access to the lowercase letters, as well as the Catalog menu, it is possible to draw graphics to the screen using text. For example, to draw a heart for a Zelda game would be much faster if you do something like the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;:&amp;quot;vQ6Qv  &amp;quot;&lt;br /&gt;
:For(X,1,7&lt;br /&gt;
:Text(10,9+X,sub(Ans,X,1&lt;br /&gt;
:End&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Another typical example is that of &amp;quot;drawing&amp;quot; a status bar to the screen using something such as:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;(P is the percent to be shaded in)&lt;br /&gt;
(L is the length of the bar in pixels)&lt;br /&gt;
(H is the horizontal position)&lt;br /&gt;
(V is the vertical position, using the top-left corner of the screen as point 0,0)&lt;br /&gt;
:Text(V,H,&amp;quot;(&lt;br /&gt;
:For(X,0,PL/100&lt;br /&gt;
:Text(V,H+X+1,&amp;quot;8&lt;br /&gt;
:End&lt;br /&gt;
:For(X,1,(100-P)L/100&lt;br /&gt;
:Text(V,H+PL/100+X,&amp;quot;)&lt;br /&gt;
:End&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Using this technique, small graphics such as these can be drawn much faster than if we tried to draw them using lines and/or pixels and/or points.&lt;br /&gt;
;Simplify your Life:Save a GDB at the beginning of your program. &amp;quot;Graph Databases (GDBs) are useful storage centers of graph informaiton. This means that it saves not only the Zoom settings, but also Axes on/off, coord on/off, and the Y= equations. Using these can reduce the size of your program.&amp;quot; (quoted from http://web.archive.org/web/20021020121625/www.kevtiva.com/calc/gdb.htm) Turn off the axes with AxesOff, turn off functions with FuncOff, and set the Window to Xmin=0, Xmax=94, Xscl=8, Ymin=-62, Ymax=0, Yscl=8.  When your program is exiting, have it reset the previous GDB so that you don't mess up the gamer's graph settings.  &amp;lt;!--You might have to turn the axes back on. but at 5:22 in the morning, I don't remember anymore... --&amp;gt;While debugging your graphics, moving your cursor on the graph screen will now tell you both the pixel coordinates, as well as the point coordinates since you have synchronized them. http://www.meebo.com//skin/default/img/emoticons/big_smile.gif&lt;br /&gt;
;Convert Pts into Pxls:If you have not used the previous tip, it is important to know that the coordinates you give to any Pt command will be different from those you give to any Pxl command (if you want to use, say Pt-On/Pt-Off, with Pxl-Test).  The reason for this is that Pt commands take your window settings into account, while Pxl commands don't.Here is one set of formulas you can use to convert your Pt coordinates into Pxl coordinates:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;round(94X/(Xmax-Xmin)+47,0)-&amp;gt;A&lt;br /&gt;
round(-62Y/(Ymax-Ymin)+31,0)-&amp;gt;B&lt;br /&gt;
 -RobbieMc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:With this formula, the Pxl command is Pxl-XX(B,A), where XX is On, Off, Test, or Change. Another formula can be found in the Ans your answers section of Cool Hacks. http://meebo.com/skin/default/img/emoticons/smile.gif&lt;br /&gt;
;Get rid of the &amp;quot;Done&amp;quot;:Use the following right before your program exits to avoid having the calc display the &amp;quot;Done&amp;quot; text on the homescreen&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;:ClrHome&lt;br /&gt;
:&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:When used immediately before a &amp;quot;Stop&amp;quot; token, &amp;quot;Done&amp;quot; is still displayed after the program quits. This also moves the cursor down one line before quitting. To avoid both these, use &amp;lt;code&amp;gt;Output(1,1,&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
;Get rid of the RunIndic:On the homescreen, do &amp;lt;code&amp;gt;Output(1,16,&amp;quot;_&amp;lt;/code&amp;gt; in the loop that is displaying the run indicator. On the graph screen, do &amp;lt;code&amp;gt;Text(-1,0,90,&amp;quot;_&amp;lt;/code&amp;gt; in the loop that is displaying the run indicator. (_ in this context refers to the space character.)&lt;br /&gt;
&lt;br /&gt;
==Cool Hacks==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
;Have &amp;quot; and the store arrow in a string:(IIRC, brought to you by Kevtiva Inc.) Type a &amp;quot; and the store arrow at the homescreen and press enter. An error message will appear; choose to Quit.  Press [Y=] and go to Y1. Press [2nd] [ENTER] to paste the previous homescreen entry into Y1. Press [2nd] [MODE] to {ESC}. At the homescreen, type Equ&amp;gt;Str(Y1,Str1 (or whatever Str you want to store it to and press [ENTER]. You now have the &amp;quot; quote and the store arrow in your string. http://www.meebo.com//skin/default/img/emoticons/wink.gif&lt;br /&gt;
;If condition&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;End:This will need a bigger explanation, but in short, you can have a conditional End statement that helps your loops run faster by only executing the End statement if needed. The reason this works is because you didn't use a Then statement: an If followed by a single non-Then statement is interpreted as an If with no Else clause and the single statement as the equivalent of the Then clause, even if the statement is End.  You can therefore also insert comments into your code (which is not recommended for BASIC unless you're still debugging it) by doing If 0:Whatever. For instance:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;(untested...)(lines are numbered)&lt;br /&gt;
01:For(X,0,1&lt;br /&gt;
02:getKeyâ†’K&lt;br /&gt;
03:Kâ†’X&lt;br /&gt;
04:If not(Ans&lt;br /&gt;
05:End&lt;br /&gt;
06:0â†’X&lt;br /&gt;
07:&amp;quot;-&lt;br /&gt;
08:If K=25&lt;br /&gt;
09:&amp;quot;LEFT&lt;br /&gt;
10:If K=26&lt;br /&gt;
11:&amp;quot;UP&lt;br /&gt;
12:If K=27&lt;br /&gt;
13:&amp;quot;RIGHT&lt;br /&gt;
14:If K=34&lt;br /&gt;
15:&amp;quot;DOWN&lt;br /&gt;
16:If K=45&lt;br /&gt;
17:&amp;quot;CLEAR&lt;br /&gt;
18:If Ans=&amp;quot;-&lt;br /&gt;
19:End&lt;br /&gt;
20:Disp Ans&lt;br /&gt;
21:If K=45&lt;br /&gt;
22:1â†’X&lt;br /&gt;
23:End&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:Explanation: Lines 1-2 are normal. Line 3 resets X if there was no key, which will loop back to the For( statement, or allow the routine to continue if there WAS a key. The answer from the getKey is in Ans, so if no key was pressed, Line 5 will be executed, which loops back to Line 1 without wasting any more time. http://www.meebo.com//skin/default/img/emoticons/smile.gif ... If a key was pressed, X is reset, which will cause the routine to loop back to the For( statement the next time it encounters an End statement. If the condition in Line 4 is not met, it automatically skips to Line 6. The string &amp;quot;-&amp;quot; is stored in Ans. We then go into a series of checks looking for any of the arrow keys, and changing Ans to reflect that. Line 8 is executed, and if the condition is not met, it skips to Line 10; if that condition is not met, it skips to Line 12; if that condition is not met, it skips to Line 14; if that condition is not met, it skips to Line 16; if that condition is not met, it skips to Line 18.  Then, it checks the Ans var.  If the Ans var is still unchanged, then none of the keys we are looking for have been found, so we End, which we've already said will loop back to the For( statement, essentially beginning the getKey loop once more. If Ans is different, then one of our keys was found, so we Disp the value in Ans (which is a String). We then check to see if it was the [CLEAR] key., and if it was, we set X so that the next End statement that is encountered will essentially close the loop and the routine will continue beyond this part of the code. We then End, which checks the value of X.  If X is 0, it loops back to the For( statement, recommencing the whole loop, but if X is 1, it &amp;quot;closes&amp;quot; the loop, forgets about it completely, and moves on with its life. Thus can you build in looping conditions into your programs without having to use Lbl or Goto statements. http://www.meebo.com//skin/default/img/emoticons/cool.gif&lt;br /&gt;
;Ans your answers:the Ans var is, IMHO, the most useful yet most unsafe var on the whole calculator because it can be so many different variable types (real, complex, list, matrix, string)... One way to reduce the number of varables you're using in your program is to carefully structure your program so that it stores as much information into the Ans var as possible. One way to do this is to setup Ans to be a list, say {3,1,4,2,5}. Doing Ans(4) is not going to multiply each value in the list by four, but rather going to give you the 4th value in the list:2. This happens because the OS will treat the Ans variable exactly the same as if it were L1 or any other list variable. I've already demonstrated that the Ans var can be used to keep track of whether one of the keys we were looking for was found or not, but there are other things you can do with the Ans var (as long as you're careful not to change the value in Ans unintentionally).  For instance, doing {Ans(2),Ans(4),Ans(1),Ans(3),Ans(5) will change Ans to be the list {1,2,3,4,5}... Note that the Ans var is changed AFTER the whole command has been executed.  There will probably be more examples of using Ans in a program at a later date.  Therefore, you can do something like this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;(50% tested)&lt;br /&gt;
(to convert from Pt coordinates to Pxl coordinates)&lt;br /&gt;
A is the X-coord&lt;br /&gt;
B is the Y-coord&lt;br /&gt;
&lt;br /&gt;
{63/(Ymax-Ymin),95/(Xmax-Xmin&lt;br /&gt;
&lt;br /&gt;
;{pixels per Y, pixels per X&lt;br /&gt;
&lt;br /&gt;
{abs(Ymax-B),abs(Xmin+A),int(Ans(2))+(0=fPart(Ans(2))),int(Ans(1))+(0=fPart(Ans(1&lt;br /&gt;
&lt;br /&gt;
;{Y,X,int ppY,int ppX&lt;br /&gt;
;Ans(1)Ans(3) is now the Pxl-Y&lt;br /&gt;
;Ans(2)Ans(4) is now the Pxl-X&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;Autodetect Degree or Radian Mode:Robert Maresh states that this is one thing he learned from  James Matthew's Asmguru.hlp&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;:If 0&amp;lt;cos(9)&lt;br /&gt;
:Then&lt;br /&gt;
:Disp &amp;quot;Degree Mode&lt;br /&gt;
:Else&lt;br /&gt;
:Disp &amp;quot;Radian Mode&lt;br /&gt;
:End&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Similarly, you can also use sin(&amp;amp;pi;), which only returns 0 if in radian mode, to do something like&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;:If sin(&amp;amp;pi;&lt;br /&gt;
:Then&lt;br /&gt;
:Disp &amp;quot;Degree Mode&lt;br /&gt;
:Else&lt;br /&gt;
:Disp &amp;quot;Radian Mode&lt;br /&gt;
:End&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
;Ans as a list:It is possible to use the Ans variable as a list in replacement to using any of the real or complex variables.  The trick is knowing how to use the augment( and the seq( commands so that you won't be destroying Ans and inadvertedly converting it into something other than a list. '''NOTE: '''extensive usage of this, as in the case of replacing all variables from a program can/will slow down the program, as well as use up more memory than if you just used variables. A shellsort program using variables A,B,C,D,L,Z, and &amp;amp;theta; used up 143 bytes, while its variable-free counterpart used up 645 bytes and was significantly slower. However, this doesn't mean the technique is completely useless.&lt;br /&gt;
:*augment({1,2},{3,4}  will return {1,2,3,4}... it can only augment 2 lists at a time, so repeated usage will be necessary to maintain the Ans variable as a list&lt;br /&gt;
:*seq(formula,tempvar,start,end will return a list of what the formula evaluats to when the tempvar is (start-to-finish).  I think an example is necessary: seq(X^2,X,1,5 will For(X,1,5) evaluate X^2 and store that value to a list, thus producing {1,4,9,16,25}, without changing the value of X ;) &lt;br /&gt;
:We can therefore use seq(Ans(X),X,start,end as a list-equivalent to sub(String,start,len... using a sequence of augment( and seq( commands, we can therefore store values into specific Ans-list elements.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{0,0,0,0,0,0,0,0}:augment(seq(Ans(X),X,1,3),augment({2,3},seq(Ans(X),X,6,8&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:That returns the list {0,0,0,2,3,0,0,0}.&lt;br /&gt;
;Autodetect if the Calculator is an 82 or 83/+:Robert Maresh states that &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;abs -1+1 would return 2 on a TI-82&lt;br /&gt;
abs(-1+1 would return 0 on a TI-83 (this is because the abs is followed by a parenthese)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:and that one can therefore use the following to display whether the calc is an 82 or 83&lt;br /&gt;
 Text(0,0,&amp;quot;YOU HAVE A TI-&amp;quot;,83-.5(abs -1+1&lt;br /&gt;
==Miscellaneous==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
;Have conditions built into your formulas:This will probably need a better explanation, but I have found it useful to build certain conditions into my formulas, instead of having to write all those If statements... for instance, for piece-wise graphing, you can do Y=(X^2)(X&amp;gt;0)+(2X)(X&amp;lt;1), which is the same as If X&amp;gt;0:Y=X^2:If X&amp;lt;1:Y=2X ...right now, I can't really say what you'll be saving by doing this (memory/speed/etc) because I don't remember, but I can assure you this come quite in handy because you can then have one formula solve a variety of different problems, without the hassle of dealing with a lot of If-Then statements.  For example, if you were to save that formula as Y1, then you'd only need to do Y1(number) to have it do the whole sequence of conditionals. I consider this one of the more complicated tricks to implement (because one can easily get confused as to how to build it as well as to what conditions one is looking for) but I have found it to be extremely useful.  For example, let us say you write a text editor program in BASIC that allows the user to edit Str1, as displayed on the homescreen using Output(1,1,Str1.  However, you run into a problem when Str1 is longer than the 96 chars that fit on the homescreen, so you can, using the sub( and length( functions, you could have one line of code something like&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;:length(Str1&lt;br /&gt;
:Output(1,1,sub(Str1,1(Ans&amp;lt;96)+16frac(Ans/16)(Ans&amp;gt;95)+(16int(Ans/16)-80)(Ans&amp;gt;95),Ans+80-16int(Ans/16&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:should make the Output scroll up one line whenever the screen has been filled (untested, please verify).  What this line is saying is: give me from Str1, starting at the first byte if Str1 is smaller than 96 charachters, otherwise, calculate the beginning to be one &amp;quot;row&amp;quot; less than the total, and give me all the rest of the chars till the end.  If you could not follow that, don't worry, as that is what I meant when I said this is one of the harder tricks. If you did follow with what I was trying to do, Kudos to you!  Keep in mind that the conditions within the () can hold any of the condition-elements of If statements, i.e. and, not, or, =, â‰ , &amp;gt;, &amp;lt;, â‰¥, â‰¤.  BTW, this BASIC trick  does '''NOT''' work on the 89. I tried, but there I could not get the 89 to convert a binary operation into a numerical value, the way the z80s do. (I could be wrong about this working on all z80s... I've tested it on an 82 and an 83+)&lt;br /&gt;
;See program in MirageOS:If you want to see your program in a shell, like MirageOS, you must type the following code in the first line of the program:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;::&amp;quot;Description&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:That will show the program name with the description you typed.&lt;br /&gt;
;User-friendly Error Messages:(brought to you by Kevtiva Inc.) Write an error message to the screen before calling any subroutine programs, and have the subroutines program erase the error message. This way, if the subroutine program is missing, the user will be informed about the specifics of the problem. Example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;PROGRAM:MYSHELL&lt;br /&gt;
:program code&lt;br /&gt;
:Output(1,1,&amp;quot;ERR:prgmMYSUB MISSING&lt;br /&gt;
:prgmMYSUB&lt;br /&gt;
:more program code&lt;br /&gt;
&lt;br /&gt;
PROGRAM:MYSUB&lt;br /&gt;
:Output(1,1,&amp;quot;                     &amp;quot;&lt;br /&gt;
:The rest of program MYSUB.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Further Reading==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
'''The Complete TI-83 BASIC Optimization Guide, Version 2''' [http://www.ticalc.org/archives/files/fileinfo/145/14542.html]&lt;br /&gt;
&lt;br /&gt;
'''TI-Basic Developer'''&lt;br /&gt;
[http://tibasicdev.wikidot.com]&lt;br /&gt;
&lt;br /&gt;
==Special Thanks==&amp;lt;!-- â†’â‰ â‰¤â‰¥ --&amp;gt;&lt;br /&gt;
Special thanks to:&lt;br /&gt;
&lt;br /&gt;
'''Kevtiva Inc.''' [http://web.archive.org/web/*sr_1nr_315/http://kevtiva.com/* Â© 2000 Kevtiva Interactive]&lt;br /&gt;
&lt;br /&gt;
'''BASIC Guru Online''' [http://bgo.netfirms.com/ Copyright Â© 2000-2006 BASIC Guru Online. All Rights Reserved.]&lt;br /&gt;
&lt;br /&gt;
'''Detached Solutions''' [http://www.detachedsolutions.com/forum/ Â© 2000-2006 Detached Solutions]&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Random</id>
		<title>Z80 Routines:Math:Random</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Random"/>
				<updated>2018-06-14T00:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Added two PRNGs and fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Random]]&lt;br /&gt;
[[Category:Z80 Routines|Random]]&lt;br /&gt;
&lt;br /&gt;
==Ion Random==&lt;br /&gt;
This is based off the tried and true [http://en.wikipedia.org/wiki/PRNG pseudorandom number generator] featured in Ion by Joe Wingbermuehle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-----&amp;gt; Generate a random number&lt;br /&gt;
; output a=answer 0&amp;lt;=a&amp;lt;=255&lt;br /&gt;
; all registers are preserved except: af&lt;br /&gt;
random:&lt;br /&gt;
        push    hl&lt;br /&gt;
        push    de&lt;br /&gt;
        ld      hl,(randData)&lt;br /&gt;
        ld      a,r&lt;br /&gt;
        ld      d,a&lt;br /&gt;
        ld      e,(hl)&lt;br /&gt;
        add     hl,de&lt;br /&gt;
        add     a,l&lt;br /&gt;
        xor     h&lt;br /&gt;
        ld      (randData),hl&lt;br /&gt;
        pop     de&lt;br /&gt;
        pop     hl&lt;br /&gt;
        ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
randData here must be a 2 byte seed located in ram.  While this is a fast generator, it's generally not considered very good in terms of randomness.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Linear Feedback Shift Register==&lt;br /&gt;
This particular prng is based on [http://en.wikipedia.org/wiki/LFSR Linear feedback shift register].  It uses a 64bit seed and generates 8 new bits at every call. LFSRSeed must be an 8 byte seed located in ram.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;------LFSR------&lt;br /&gt;
;James Montelongo&lt;br /&gt;
;optimized by Spencer Putt&lt;br /&gt;
;out:&lt;br /&gt;
; a = 8 bit random number&lt;br /&gt;
RandLFSR:&lt;br /&gt;
        ld hl,LFSRSeed+4&lt;br /&gt;
        ld e,(hl)&lt;br /&gt;
        inc hl&lt;br /&gt;
        ld d,(hl)&lt;br /&gt;
        inc hl&lt;br /&gt;
        ld c,(hl)&lt;br /&gt;
        inc hl&lt;br /&gt;
        ld a,(hl)&lt;br /&gt;
        ld b,a&lt;br /&gt;
        rl e \ rl d&lt;br /&gt;
        rl c \ rla&lt;br /&gt;
        rl e \ rl d&lt;br /&gt;
        rl c \ rla&lt;br /&gt;
        rl e \ rl d&lt;br /&gt;
        rl c \ rla&lt;br /&gt;
        ld h,a&lt;br /&gt;
        rl e \ rl d&lt;br /&gt;
        rl c \ rla&lt;br /&gt;
        xor b&lt;br /&gt;
        rl e \ rl d&lt;br /&gt;
        xor h&lt;br /&gt;
        xor c&lt;br /&gt;
        xor d&lt;br /&gt;
        ld hl,LFSRSeed+6&lt;br /&gt;
        ld de,LFSRSeed+7&lt;br /&gt;
        ld bc,7&lt;br /&gt;
        lddr&lt;br /&gt;
        ld (de),a&lt;br /&gt;
        ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this may produces better numbers, it is slower, larger and requires a bigger seed than ionrandom.  Assuming theres is a good seed to start, it should generate ~2^56 bytes before repeating.  However if there is not a good seed(0 for example), then the numbers created will not be adequate.  Unlike Ionrandom and its use of the r register, starting with the same seed the same numbers will be generated. With Ionrandom the code running may have an impact on the number generated. This means this method requires more initialization.&lt;br /&gt;
&lt;br /&gt;
You can initialize with TI-OS's seeds, stored at seed1 and seed2, both are ti-floats but will serve the purpose.&lt;br /&gt;
&lt;br /&gt;
==Combined LFSR/LCG, 16-bit seeds==&lt;br /&gt;
This is a very fast, quality pseudo-random number generator. It combines a 16-bit Linear Feedback Shift Register and a 16-bit LCG.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
prng16:&lt;br /&gt;
;Inputs:&lt;br /&gt;
;   (seed1) contains a 16-bit seed value&lt;br /&gt;
;   (seed2) contains a NON-ZERO 16-bit seed value&lt;br /&gt;
;Outputs:&lt;br /&gt;
;   HL is the result&lt;br /&gt;
;   BC is the result of the LCG, so not that great of quality&lt;br /&gt;
;   DE is preserved&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   AF&lt;br /&gt;
;cycle: 4,294,901,760 (almost 4.3 billion)&lt;br /&gt;
;160cc&lt;br /&gt;
;26 bytes&lt;br /&gt;
    ld hl,(seed1)&lt;br /&gt;
    ld b,h&lt;br /&gt;
    ld c,l&lt;br /&gt;
    add hl,hl&lt;br /&gt;
    add hl,hl&lt;br /&gt;
    inc l&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    ld (seed1),hl&lt;br /&gt;
    ld hl,(seed2)&lt;br /&gt;
    add hl,hl&lt;br /&gt;
    sbc a,a&lt;br /&gt;
    and %00101101&lt;br /&gt;
    xor l&lt;br /&gt;
    ld l,a&lt;br /&gt;
    ld (seed2),hl&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
On their own, LCGs and LFSRs don't produce great results and are generally very cyclical, but they are very fast to compute. The 16-bit LCG in the above example will bounce around and reach each number from 0 to 65535, but the lower bits are far more predictable than the upper bits. The LFSR mixes up the predictability of a given bit's state, but it hits every number except 0, meaning there is a slightly higher chance of any given bit in the result being a 1 instead of a 0. It turns out that by adding together the outputs of these two generators, we can lose the predictability of a bit's state, while ensuring it has a 50% chance of being 0 or 1. As well, since the periods, 65536 and 65535 are coprime, then the overall period of the generator is 65535*65536, which is over 4 billion.&lt;br /&gt;
&lt;br /&gt;
==Combined LFSR/LCG, 32-bit seeds==&lt;br /&gt;
This is similar to the one above, except that it uses 32-bit seeds (and still returns a 16-bit result). An advantage here is that they've been tested and passed randomness tests (all of thee ones offered by CAcert labs). As well, it is still very fast.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
rand32:&lt;br /&gt;
;Inputs:&lt;br /&gt;
;   (seed1_0) holds the lower 16 bits of the first seed&lt;br /&gt;
;   (seed1_1) holds the upper 16 bits of the first seed&lt;br /&gt;
;   (seed2_0) holds the lower 16 bits of the second seed&lt;br /&gt;
;   (seed2_1) holds the upper 16 bits of the second seed&lt;br /&gt;
;   **NOTE: seed2 must be non-zero&lt;br /&gt;
;Outputs:&lt;br /&gt;
;   HL is the result&lt;br /&gt;
;   BC,DE can be used as lower quality values, but are not independent of HL.&lt;br /&gt;
;Destroys:&lt;br /&gt;
;   AF&lt;br /&gt;
;Tested and passes all CAcert tests&lt;br /&gt;
;Uses a very simple 32-bit LCG and 32-bit LFSR&lt;br /&gt;
;it has a period of 18,446,744,069,414,584,320&lt;br /&gt;
;roughly 18.4 quintillion.&lt;br /&gt;
;LFSR taps: 0,2,6,7  = 11000101&lt;br /&gt;
;291cc&lt;br /&gt;
seed1_0=$+1&lt;br /&gt;
    ld hl,12345&lt;br /&gt;
seed1_1=$+1&lt;br /&gt;
    ld de,6789&lt;br /&gt;
    ld b,h&lt;br /&gt;
    ld c,l&lt;br /&gt;
    add hl,hl \ rl e \ rl d&lt;br /&gt;
    add hl,hl \ rl e \ rl d&lt;br /&gt;
    inc l&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    ld (seed1_0),hl&lt;br /&gt;
    ld hl,(seed1_1)&lt;br /&gt;
    adc hl,de&lt;br /&gt;
    ld (seed1_1),hl&lt;br /&gt;
    ex de,hl&lt;br /&gt;
seed2_0=$+1&lt;br /&gt;
    ld hl,9876&lt;br /&gt;
seed2_1=$+1&lt;br /&gt;
    ld bc,54321&lt;br /&gt;
    add hl,hl \ rl c \ rl b&lt;br /&gt;
    ld (seed2_1),bc&lt;br /&gt;
    sbc a,a&lt;br /&gt;
    and %11000101&lt;br /&gt;
    xor l&lt;br /&gt;
    ld l,a&lt;br /&gt;
    ld (seed2_0),hl&lt;br /&gt;
    ex de,hl&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:OS:ti83plus.inc</id>
		<title>83Plus:OS:ti83plus.inc</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:OS:ti83plus.inc"/>
				<updated>2015-02-21T01:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Updated the no longer accurate About.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:OS_Information|ti83plus.inc]]&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
The ti83plus.inc is used by many assembly programs and includes essential equates used by the operating system. This version is more complete than what TI provides, due to years of research from various programmers throughout the decades.&lt;br /&gt;
&lt;br /&gt;
To open in a browser window, click [http://www.brandonw.net/calcstuff/ti83plus.txt here]&lt;br /&gt;
To search for specific equates, use your browser search function.&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;TI-83 Plus Include File&lt;br /&gt;
;05/07/2007&lt;br /&gt;
&lt;br /&gt;
;Included for TASM Compatibility&lt;br /&gt;
;-------------------------------&lt;br /&gt;
#define equ .equ&lt;br /&gt;
#define EQU .equ&lt;br /&gt;
#define end .end&lt;br /&gt;
#define END .end&lt;br /&gt;
&lt;br /&gt;
;System Variable Equates&lt;br /&gt;
;------------------------------&lt;br /&gt;
XSCLt			equ 2&lt;br /&gt;
YSCLt			equ 3&lt;br /&gt;
XMINt			equ 0Ah&lt;br /&gt;
XMAXt			equ 0Bh&lt;br /&gt;
YMINt			equ 0Ch&lt;br /&gt;
YMAXt			equ 0Dh&lt;br /&gt;
TMINt			equ 0Eh&lt;br /&gt;
TMAXt			equ 0Fh&lt;br /&gt;
THETMINt		equ 10h&lt;br /&gt;
THETMAXt		equ 11h&lt;br /&gt;
TBLMINt			equ 1Ah&lt;br /&gt;
PLOTSTARTt		equ 1Bh&lt;br /&gt;
NMAXt			equ 1Dh&lt;br /&gt;
NMINt			equ 1Fh&lt;br /&gt;
TBLSTEPt		equ 21h&lt;br /&gt;
TSTEPt			equ 22h&lt;br /&gt;
THETSTEPt		equ 23h&lt;br /&gt;
DELTAXt			equ 26h&lt;br /&gt;
DELTAYt			equ 27h&lt;br /&gt;
XFACTt			equ 28h&lt;br /&gt;
YFACTt			equ 29h&lt;br /&gt;
FINNt			equ 2Bh&lt;br /&gt;
FINIt			equ 2Ch&lt;br /&gt;
FINPVt			equ 2Dh&lt;br /&gt;
FINPMTt			equ 2Eh&lt;br /&gt;
FINFVt			equ 2Fh&lt;br /&gt;
FINPYt			equ 30h&lt;br /&gt;
FINCYt			equ 31h&lt;br /&gt;
PLOTSTEPt		equ 34h&lt;br /&gt;
XRESt			equ 36h&lt;br /&gt;
&lt;br /&gt;
;Run indicators&lt;br /&gt;
;------------------------------------&lt;br /&gt;
busyPause		equ 10101010b&lt;br /&gt;
busyNormal		equ 11110000b&lt;br /&gt;
&lt;br /&gt;
;Banked Call Equates/Macros&lt;br /&gt;
;-----------------------------------------------&lt;br /&gt;
rBR_CALL		equ 28h&lt;br /&gt;
BRT_JUMP0		equ 50h&lt;br /&gt;
#define bcall(xxxx) rst 28h \ .dw xxxx&lt;br /&gt;
#define bjump(xxxx) call 50h \ .dw xxxx&lt;br /&gt;
&lt;br /&gt;
;Common Restart Routines&lt;br /&gt;
;------------------------------&lt;br /&gt;
rOP1TOOP2		equ 08h&lt;br /&gt;
rFINDSYM		equ 10h&lt;br /&gt;
rPUSHREALO1		equ 18h&lt;br /&gt;
rMOV9TOOP1		equ 20h&lt;br /&gt;
rFPADD			equ 30h&lt;br /&gt;
&lt;br /&gt;
;Error Handler Equates/Macros&lt;br /&gt;
;-------------------------------------------&lt;br /&gt;
APP_PUSH_ERRORH		equ 59h&lt;br /&gt;
APP_POP_ERRORH		equ 5Ch&lt;br /&gt;
#define AppOnErr(xxxx) ld hl,xxxx \ call 59h&lt;br /&gt;
#define AppOffErr call 5Ch&lt;br /&gt;
&lt;br /&gt;
;Page 1Bh ROM Calls&lt;br /&gt;
;--------------------------------&lt;br /&gt;
_JErrorNo		equ 4000h&lt;br /&gt;
_FontHook		equ 4003h&lt;br /&gt;
_call_character_hook	equ 4006h ;calls character(localize) hook&lt;br /&gt;
_ldHLind		equ 4009h ;l=a=(hl),h=(hl+1)&lt;br /&gt;
_CpHLDE			equ 400Ch&lt;br /&gt;
_DivHLBy10		equ 400Fh&lt;br /&gt;
_DivHLByA		equ 4012h&lt;br /&gt;
_kdbScan		equ 4015h&lt;br /&gt;
_GetCSC			equ 4018h ;key board scan codes&lt;br /&gt;
_coorMon		equ 401Bh ;&lt;br /&gt;
_Mon			equ 401Eh ;system monitor, customized through the context vectors&lt;br /&gt;
_monForceKey		equ 4021h ;&lt;br /&gt;
_sendKPress		equ 4024h&lt;br /&gt;
_JForceCmdNoChar	equ 4027h&lt;br /&gt;
_JForceCmd		equ 402Ah ;&lt;br /&gt;
_sysErrHandler		equ 402Dh ;loads error context? sp=(onSP)&lt;br /&gt;
_newContext		equ 4030h ;(kbdKey)=0, loads context, restores page in 4000h-7fffh&lt;br /&gt;
_newContext0		equ 4033h ;loads context&lt;br /&gt;
_cxPutAway		equ 4036h ;&lt;br /&gt;
_cxPutAway2		equ 4039h ;same but also does a B_CALL CanAlphIns&lt;br /&gt;
_cxPPutAway		equ 403Ch&lt;br /&gt;
_cxSizeWind		equ 403Fh&lt;br /&gt;
_cxErrEP		equ 4042h&lt;br /&gt;
_cxMain			equ 4045h&lt;br /&gt;
_monErrHand		equ 4048h ;installs errorhandler to start of ROM call, loads error context, jumps to mon&lt;br /&gt;
_AppInit		equ 404Bh ;loads vector data at hl to cxMain and the rest of the vectors&lt;br /&gt;
_resetRam		equ 404Eh&lt;br /&gt;
_lcd_busy		equ 4051h ;wait till bit 1 of port 2 is set&lt;br /&gt;
_Min			equ 4054h ;op1 = lowest number between op1 and op2&lt;br /&gt;
_Max			equ 4057h ;op1 = highest number between op1 and op2 &lt;br /&gt;
_Trunc			equ 4060h&lt;br /&gt;
_InvSub			equ 4063h&lt;br /&gt;
_Times2			equ 4066h&lt;br /&gt;
_Plus1			equ 4069h ;op1=op1+1&lt;br /&gt;
_Minus1			equ 406Ch&lt;br /&gt;
_FPSub			equ 406Fh&lt;br /&gt;
_FPAdd			equ 4072h&lt;br /&gt;
_DToR			equ 4075h&lt;br /&gt;
_RToD			equ 4078h&lt;br /&gt;
_Cube			equ 407Bh&lt;br /&gt;
_TimesPt5		equ 407Eh&lt;br /&gt;
_FPSquare		equ 4081h&lt;br /&gt;
_FPMult			equ 4084h ;op1=op1*op2&lt;br /&gt;
_LJRND			equ 4087h ;adjusts op1 if 0s precede the actual number... rounding? when&lt;br /&gt;
_InvOP1SC		equ 408Ah&lt;br /&gt;
_InvOP1S		equ 408Dh&lt;br /&gt;
_InvOP2S		equ 4090h&lt;br /&gt;
_frac			equ 4093h&lt;br /&gt;
_fprecip		equ 4096h&lt;br /&gt;
_fpdiv			equ 4099h&lt;br /&gt;
_SqRoot			equ 409Ch&lt;br /&gt;
_RndGuard		equ 409Fh&lt;br /&gt;
_RnFx			equ 40A2h&lt;br /&gt;
_int			equ 40A5h&lt;br /&gt;
_Round			equ 40A8h&lt;br /&gt;
_LnX			equ 40ABh&lt;br /&gt;
_LogX			equ 40AEh&lt;br /&gt;
_LJNORND		equ 40B1h ;like _LJRND but no rounding&lt;br /&gt;
_EToX			equ 40B4h&lt;br /&gt;
_TenX			equ 40B7h&lt;br /&gt;
_SinCosRad		equ 40BAh&lt;br /&gt;
_Sin			equ 40BDh&lt;br /&gt;
_cos			equ 40C0h&lt;br /&gt;
_Tan			equ 40C3h&lt;br /&gt;
_SinHCosH		equ 40C6h&lt;br /&gt;
_TanH			equ 40C9h&lt;br /&gt;
_cosh			equ 40CCh&lt;br /&gt;
_SinH			equ 40CFh&lt;br /&gt;
_ACosRad		equ 40D2h&lt;br /&gt;
_ATanRad		equ 40D5h&lt;br /&gt;
_ATan2Rad		equ 40D8h&lt;br /&gt;
_ASinRad		equ 40DBh&lt;br /&gt;
_ACos			equ 40DEh&lt;br /&gt;
_ATan			equ 40E1h&lt;br /&gt;
_ASin			equ 40E4h&lt;br /&gt;
_ATan2			equ 40E7h&lt;br /&gt;
_ATanH			equ 40EAh&lt;br /&gt;
_ASinH			equ 40EDh&lt;br /&gt;
_ACosH			equ 40F0h&lt;br /&gt;
_PtoR			equ 40F3h&lt;br /&gt;
_RToP			equ 40F6h&lt;br /&gt;
_HLTimes9		equ 40F9h&lt;br /&gt;
_CkOP1Cplx		equ 40FCh&lt;br /&gt;
_CkOP1Real		equ 40FFh&lt;br /&gt;
_Angle			equ 4102h&lt;br /&gt;
_COP1Set0		equ 4105h&lt;br /&gt;
_CpOP4OP3		equ 4108h&lt;br /&gt;
_Mov9OP2Cp		equ 410Bh&lt;br /&gt;
_AbsO1O2Cp		equ 410Eh&lt;br /&gt;
_cpop1op2		equ 4111h&lt;br /&gt;
_OP3ToOP4		equ 4114h&lt;br /&gt;
_OP1ToOP4		equ 4117h&lt;br /&gt;
_OP2ToOP4		equ 411Ah&lt;br /&gt;
_OP4ToOP2		equ 411Dh&lt;br /&gt;
_OP1ToOP3		equ 4123h&lt;br /&gt;
_OP5ToOP2		equ 4126h&lt;br /&gt;
_OP5ToOP6		equ 4129h&lt;br /&gt;
_OP5ToOP4		equ 412Ch&lt;br /&gt;
_OP1ToOP2		equ 412Fh&lt;br /&gt;
_OP6ToOP2		equ 4132h&lt;br /&gt;
_OP6ToOP1		equ 4135h&lt;br /&gt;
_OP4ToOP1		equ 4138h&lt;br /&gt;
_OP5ToOP1		equ 413Bh&lt;br /&gt;
_OP3ToOP1		equ 413Eh&lt;br /&gt;
_OP6ToOP5		equ 4141h&lt;br /&gt;
_OP4ToOP5		equ 4144h&lt;br /&gt;
_OP3ToOP5		equ 4147h&lt;br /&gt;
_OP2ToOP5		equ 414Ah&lt;br /&gt;
_OP2ToOP6		equ 414Dh&lt;br /&gt;
_OP1ToOP6		equ 4150h&lt;br /&gt;
_OP1ToOP5		equ 4153h&lt;br /&gt;
_OP2ToOP1		equ 4156h&lt;br /&gt;
_Mov11B			equ 4159h&lt;br /&gt;
_Mov10B			equ 415Ch&lt;br /&gt;
_Mov9B			equ 415Fh&lt;br /&gt;
_mov9B2			equ 4162h ;points to _mov9B&lt;br /&gt;
_Mov8B			equ 4165h&lt;br /&gt;
_Mov7B			equ 4168h&lt;br /&gt;
_Mov7B2			equ 416Bh ;same pointer as _Mov7B&lt;br /&gt;
_OP2ToOP3		equ 416Eh&lt;br /&gt;
_OP4ToOP3		equ 4171h&lt;br /&gt;
_OP5ToOP3		equ 4174h&lt;br /&gt;
_OP4ToOP6		equ 4177h&lt;br /&gt;
_Mov9ToOP1		equ 417Ah&lt;br /&gt;
_Mov9OP1OP2		equ 417Dh&lt;br /&gt;
_Mov9ToOP2		equ 4180h&lt;br /&gt;
_MovFrOP1		equ 4183h&lt;br /&gt;
_OP4Set1		equ 4186h&lt;br /&gt;
_OP3Set1		equ 4189h&lt;br /&gt;
_OP2Set8		equ 418Ch&lt;br /&gt;
_OP2Set5		equ 418Fh&lt;br /&gt;
_OP2SetA		equ 4192h&lt;br /&gt;
_OP2Set4		equ 4195h&lt;br /&gt;
_OP2Set3		equ 4198h&lt;br /&gt;
_OP1Set1		equ 419Bh&lt;br /&gt;
_OP1Set4		equ 419Eh&lt;br /&gt;
_OP1Set3		equ 41A1h&lt;br /&gt;
_OP3Set2		equ 41A4h&lt;br /&gt;
_OP1Set2		equ 41A7h&lt;br /&gt;
_OP2Set2		equ 41AAh&lt;br /&gt;
_OP2Set1		equ 41ADh&lt;br /&gt;
_Zero16D		equ 41B0h&lt;br /&gt;
_OP5Set0		equ 41B3h&lt;br /&gt;
_OP4Set0		equ 41B6h&lt;br /&gt;
_OP3Set0		equ 41B9h&lt;br /&gt;
_OP2Set0		equ 41BCh&lt;br /&gt;
_OP1Set0		equ 41BFh&lt;br /&gt;
_OPSet0			equ 41C2h ;hl = location to write floating point 0&lt;br /&gt;
_ZeroOP1		equ 41C5h&lt;br /&gt;
_ZeroOP2		equ 41C8h&lt;br /&gt;
_ZeroOP3		equ 41CBh&lt;br /&gt;
_ZeroOP			equ 41CEh&lt;br /&gt;
_ClrLp			equ 41D1h&lt;br /&gt;
_ShRAcc			equ 41D4h ;move high nibble in a to low nibble&lt;br /&gt;
_ShLAcc			equ 41D7h ;move low nibble in a to high nibble&lt;br /&gt;
_ShR18			equ 41DAh ;insert a 0 nibble at high nibble of (hl), shift 9 bytes 1 nibble to right&lt;br /&gt;
_SHR18A			equ 41DDh ;insert low nibble in a at high nibble of (hl), shift 9 bytes 1 nibble to right&lt;br /&gt;
_SHR16			equ 41E0h ;insert a 0 nibble at highnibble of (hl), shift 8 bytes 1 nibble to right&lt;br /&gt;
_SHR14			equ 41E3h ;insert low nibble in a at high nibble of (hl), shift 7 bytes 1 nibble to right&lt;br /&gt;
_SHL16			equ 41E6h ;insert nibble of 0 in low nibble of (hl), shift 8 bytes (before and including (hl)) to the left 1 nibble&lt;br /&gt;
_SHL14			equ 41E9h ;insert low nibble of a in low nibble of (hl), shift 7 bytes (before and including (hl)) to the left 1 nibble&lt;br /&gt;
_SRDO1			equ 41ECh&lt;br /&gt;
_SHRDRND		equ 41EFh&lt;br /&gt;
_MANTPA			equ 41F2h ;adds the value of a to hl which points to the end of the bcd 7 bytes long&lt;br /&gt;
_ADDPROP		equ 41F5h ;adds the value of a to hl which points to the end of the bcd (b bytes long)&lt;br /&gt;
_ADDPROPLP		equ 41F8h ;adds the value of a and carry to hl which points to the end of the bcd (b bytes long)&lt;br /&gt;
_ADD16D 		equ 41FBh ;adds the bcd numbers at (hl-7) and (de-7)&lt;br /&gt;
_ADD14D			equ 41FEh ;adds the bcd numbers at (hl-6) and (de-6)&lt;br /&gt;
_SUB16D			equ 4201h ;subtracts bcd numbers at (hl-7) and (de-7)&lt;br /&gt;
_SUB14D			equ 4204h ;subtracts bcd numbers at (hl-6) and (de-6)&lt;br /&gt;
_OP2ExOP6		equ 4207h&lt;br /&gt;
_OP5ExOP6		equ 420Ah&lt;br /&gt;
_OP1ExOP5		equ 420Dh&lt;br /&gt;
_OP1ExOP6		equ 4210h&lt;br /&gt;
_OP2ExOP4		equ 4213h&lt;br /&gt;
_OP2ExOP5		equ 4216h&lt;br /&gt;
_OP1ExOP3		equ 4219h&lt;br /&gt;
_OP1ExOP4		equ 421Ch&lt;br /&gt;
_OP1ExOP2		equ 421Fh&lt;br /&gt;
_ExLp			equ 4222h&lt;br /&gt;
_CkOP1C0		equ 4225h&lt;br /&gt;
_CkOP1FP0		equ 4228h&lt;br /&gt;
_CkOP2FP0		equ 422Bh&lt;br /&gt;
_PosNo0Int		equ 422Eh&lt;br /&gt;
_CKPosInt		equ 4231h&lt;br /&gt;
_CKInt			equ 4234h&lt;br /&gt;
_CKOdd			equ 4237h&lt;br /&gt;
_CKOP1M			equ 423Ah&lt;br /&gt;
_GETCONOP1		equ 423Dh ;a=0 opX=57.29577951308232 (1 radian in degrees)&lt;br /&gt;
_GETCONOP2		equ 4240h ;a=1 opX=1.570796326794897 (90 deg = pi/2)&lt;br /&gt;
				  ;a=2 opX=.7853981633974483 (45 deg = pi/4)&lt;br /&gt;
				  ;a=3 opX=.4342944819032518 (log e)&lt;br /&gt;
				  ;a=4 opX=3.141592653589800 (pi)&lt;br /&gt;
				  ;a=5 opX=.0174532925199433 (pi/180 = 1 degree in radians)&lt;br /&gt;
				  ;a=6 opX=2.302585092994046 (ln 10)&lt;br /&gt;
_PIDIV2			equ 4243h ;not code, but a pointer to:	.db 80h,15h,70h,79h,63h,26h,79h,48h,97h&lt;br /&gt;
_PIDIV4			equ 4246h ;				.db 7fh,78h,53h,98h,16h,33h,97h,44h,83h&lt;br /&gt;
_PItimes2		equ 4249h ;not code, but a pointer to a 2*pi in non-OP format (no exponent byte)&lt;br /&gt;
_PI			equ 424Ch ;not code, but a pointer to a pi in non-OP format (no exponent byte)&lt;br /&gt;
_ExpToHex		equ 424Fh&lt;br /&gt;
_OP1ExpToDec		equ 4252h&lt;br /&gt;
_ckop2pos		equ 4255h&lt;br /&gt;
_CkOP1Pos		equ 4258h&lt;br /&gt;
_ClrOP2S		equ 425Bh&lt;br /&gt;
_ClrOP1S		equ 425Eh&lt;br /&gt;
_FDIV100		equ 4261h ;op1=op1/100&lt;br /&gt;
_FDIV10			equ 4264h ;op1=op1/10&lt;br /&gt;
_DecO1Exp		equ 4267h ;decrease exponent by 1, this can go from 0 to FF&lt;br /&gt;
_INCO1EXP		equ 426Ah ;op1=op1*10&lt;br /&gt;
_INCEXP			equ 426Dh ;hl points to the floating point's exponent to be multiplied by 10&lt;br /&gt;
_CkValidNum		equ 4270h&lt;br /&gt;
_GETEXP			equ 4273h ;a=OP1's exponent, carry set if negative exponent, Z if e0&lt;br /&gt;
_HTimesL		equ 4276h&lt;br /&gt;
_EOP1NotReal		equ 4279h&lt;br /&gt;
_ThetaName		equ 427Ch&lt;br /&gt;
_RName			equ 427Fh&lt;br /&gt;
_REGEQNAME		equ 4282h&lt;br /&gt;
_RECURNNAME		equ 4285h&lt;br /&gt;
_XName			equ 4288h&lt;br /&gt;
_YName			equ 428Bh&lt;br /&gt;
_TName			equ 428Eh&lt;br /&gt;
_REALNAME		equ 4291h&lt;br /&gt;
_SETesTOfps		equ 4294h ;moves the word at fps to es&lt;br /&gt;
_markTableDirty		equ 4297h ;looks up table variable and marks VAT entry as &amp;quot;dirty&amp;quot; or selected&lt;br /&gt;
_OP1MOP2EXP		equ 429Ah ;op1's exponent = op1's expoent - op2's exponent&lt;br /&gt;
_OP1EXPMinusE		equ 429Dh ;a=(op1+1)-e&lt;br /&gt;
_CHKERRBREAK		equ 42A0h&lt;br /&gt;
_isA2ByteTok		equ 42A3h&lt;br /&gt;
_GETLASTENTRY		equ 42A6h&lt;br /&gt;
_GETLASTENTRYPTR	equ 42A9h&lt;br /&gt;
_REGCLRCHNG		equ 42ACh&lt;br /&gt;
_RESETWINTOP		equ 42AFh ;takes into account grfsplitoverride and grfsplit flags&lt;br /&gt;
_SetYUp			equ 42B2h ;loads 7 to port 10... what does this do?&lt;br /&gt;
_SetXUp			equ 42B5h ;loads 5 to port 10...&lt;br /&gt;
_ISO1NONTLSTorPROG	equ 42B8h ;checks if op1 contains a list, program, group, or appvar obj name&lt;br /&gt;
_ISO1NONTEMPLST		equ 42BBh ;checks if op1 contains a list (why would op1+1 contain 01, or 0d for a var name?)&lt;br /&gt;
_IS_A_LSTorCLST		equ 42BEh ;checks if a = 1 or 0Dh&lt;br /&gt;
_CHK_HL_999		equ 42C1h ;returns nc if less than 999, throws invalid dim error if greater than or equal to 999&lt;br /&gt;
_equ_or_newequ		equ 42C4h&lt;br /&gt;
_errd_op1notpos		equ 42C7h&lt;br /&gt;
_ErrD_OP1Not_R		equ 42CAh&lt;br /&gt;
_ErrD_OP1NotPosInt 	equ 42CDh&lt;br /&gt;
_ErrD_OP1_LE_0		equ 42D0h&lt;br /&gt;
_ErrD_OP1_0		equ 42D3h&lt;br /&gt;
_FINDSYM_GET_SIZE 	equ 42D6h ;like findsym, but on output hl is the size of the variable&lt;br /&gt;
_STO_STATVAR		equ 42D9h&lt;br /&gt;
_Rcl_StatVar		equ 42DCh&lt;br /&gt;
_CkOP2Real		equ 42DFh&lt;br /&gt;
_GET_X_INDIRECT		equ 42E2h ;whatever this is, it uses the imathptrX locations&lt;br /&gt;
_MemChk			equ 42E5h&lt;br /&gt;
_CMPPRGNAMLEN1		equ 42E8h ;gets variable name length from HL&lt;br /&gt;
_CMPPRGNAMLEN		equ 42EBh ;gets variable name length from OP1&lt;br /&gt;
_FINDPROGSYM		equ 42EEh ;find the program whose name is in op1 (see chkfindsym in SDK)&lt;br /&gt;
_ChkFindSym		equ 42F1h&lt;br /&gt;
_FindSym		equ 42F4h&lt;br /&gt;
_InsertMem		equ 42F7h&lt;br /&gt;
_INSERTMEMA		equ 42FAh ;not sure how this differs from insertmem&lt;br /&gt;
_EnoughMem		equ 42FDh&lt;br /&gt;
_CMPMEMNEED		equ 4300h&lt;br /&gt;
_CREATEPVAR4		equ 4303h&lt;br /&gt;
_CREATEPVAR3		equ 4306h&lt;br /&gt;
_CREATEVAR3		equ 4309h&lt;br /&gt;
_CreateCplx		equ 430Ch&lt;br /&gt;
_CreateReal		equ 430Fh&lt;br /&gt;
_CreateTempRList	equ 4312h&lt;br /&gt;
_CreateRList		equ 4315h&lt;br /&gt;
_CREATETCLIST		equ 4318h&lt;br /&gt;
_CreateCList		equ 431Bh&lt;br /&gt;
_CreateTempRMat		equ 431Eh&lt;br /&gt;
_CreateRMat		equ 4321h&lt;br /&gt;
_CreateTempString	equ 4324h&lt;br /&gt;
_CreateStrng		equ 4327h&lt;br /&gt;
_Create0Equ		equ 432Ah&lt;br /&gt;
_CreateTempEqu		equ 432Dh&lt;br /&gt;
_CreateEqu		equ 4330h&lt;br /&gt;
_CreatePict		equ 4333h&lt;br /&gt;
_CreateGDB		equ 4336h&lt;br /&gt;
_CreateProg		equ 4339h&lt;br /&gt;
_CHKDEL			equ 433Ch&lt;br /&gt;
_CHKDELA		equ 433Fh&lt;br /&gt;
_ADJPARSER		equ 4342h&lt;br /&gt;
_ADJMATH		equ 4345h&lt;br /&gt;
_ADJM7			equ 4348h&lt;br /&gt;
_DELMEMA		equ 434Bh&lt;br /&gt;
_GET_FORM_NUM		equ 434Eh&lt;br /&gt;
_DelVar			equ 4351h&lt;br /&gt;
_DELVARIO		equ 4354h&lt;br /&gt;
_DelMem			equ 4357h&lt;br /&gt;
_DELVAR3D		equ 435Ah&lt;br /&gt;
_DELVAR3C		equ 435Dh&lt;br /&gt;
_DELVAR3DC		equ 4360h ;may be incorrect&lt;br /&gt;
_IsFixedName		equ 4363h&lt;br /&gt;
_DelVarEntry		equ 4366h&lt;br /&gt;
_DataSizeA		equ 4369h&lt;br /&gt;
_DataSize		equ 436Ch&lt;br /&gt;
_POPMCPLXO1		equ 436Fh&lt;br /&gt;
_POPMCPLX		equ 4372h&lt;br /&gt;
_MOVCPLX		equ 4375h&lt;br /&gt;
_popOP5			equ 4378h&lt;br /&gt;
_popOP3			equ 437Bh&lt;br /&gt;
_popOP1			equ 437Eh&lt;br /&gt;
_PopRealO6		equ 4381h&lt;br /&gt;
_PopRealO5		equ 4384h&lt;br /&gt;
_PopRealO4		equ 4387h&lt;br /&gt;
_PopRealO3		equ 438Ah&lt;br /&gt;
_PopRealO2		equ 438Dh&lt;br /&gt;
_PopRealO1		equ 4390h&lt;br /&gt;
_PopReal		equ 4393h&lt;br /&gt;
_FPOPCPLX		equ 4396h&lt;br /&gt;
_FPOPREAL		equ 4399h&lt;br /&gt;
_FPOPFPS		equ 439Ch&lt;br /&gt;
_DeallocFPS		equ 439Fh&lt;br /&gt;
_DeallocFPS1		equ 43A2h&lt;br /&gt;
_AllocFPS		equ 43A5h&lt;br /&gt;
_AllocFPS1		equ 43A8h&lt;br /&gt;
_PushRealO6		equ 43ABh&lt;br /&gt;
_PushRealO5		equ 43AEh&lt;br /&gt;
_PushRealO4		equ 43B1h&lt;br /&gt;
_PushRealO3		equ 43B4h&lt;br /&gt;
_PushRealO2		equ 43B7h&lt;br /&gt;
_PushRealO1		equ 43BAh&lt;br /&gt;
_PushReal		equ 43BDh&lt;br /&gt;
_PushOP5		equ 43C0h&lt;br /&gt;
_PushOP3		equ 43C3h&lt;br /&gt;
_PUSHMCPLXO3		equ 43C6h&lt;br /&gt;
_PushOP1		equ 43C9h&lt;br /&gt;
_PUSHMCPLXO1		equ 43CCh&lt;br /&gt;
_PUSHMCPLX		equ 43CFh&lt;br /&gt;
_ExMCplxO1		equ 43D2h&lt;br /&gt;
_Exch9			equ 43D5h&lt;br /&gt;
_CpyTo1FPS11		equ 43D8h&lt;br /&gt;
_CpyTo2FPS5		equ 43DBh&lt;br /&gt;
_CpyTo1FPS5		equ 43DEh&lt;br /&gt;
_CpyTo2FPS6		equ 43E1h&lt;br /&gt;
_CpyTo1FPS6		equ 43E4h&lt;br /&gt;
_CpyTo2FPS7		equ 43E7h&lt;br /&gt;
_CpyTo1FPS7		equ 43EAh&lt;br /&gt;
_CpyTo1FPS8		equ 43EDh&lt;br /&gt;
_CpyTo2FPS8		equ 43F0h&lt;br /&gt;
_CpyTo1FPS10		equ 43F3h&lt;br /&gt;
_CpyTo1FPS9		equ 43F6h&lt;br /&gt;
_CpyTo2FPS4		equ 43F9h&lt;br /&gt;
_CpyTo6FPS3		equ 43FCh&lt;br /&gt;
_CpyTo6FPS2		equ 43FFh&lt;br /&gt;
_CpyTo2FPS3		equ 4402h&lt;br /&gt;
_CPYCTO1FPS3		equ 4405h&lt;br /&gt;
_CpyTo1FPS3		equ 4408h&lt;br /&gt;
_CPYFPS3		equ 440Bh&lt;br /&gt;
_CpyTo1FPS4		equ 440Eh&lt;br /&gt;
_CpyTo3FPS2		equ 4411h&lt;br /&gt;
_CpyTo5FPST		equ 4414h&lt;br /&gt;
_CpyTo6FPST		equ 4417h&lt;br /&gt;
_CpyTo4FPST		equ 441Ah&lt;br /&gt;
_CpyTo3FPST		equ 441Dh&lt;br /&gt;
_CpyTo2FPST		equ 4420h&lt;br /&gt;
_CpyTo1FPST		equ 4423h&lt;br /&gt;
_CPYFPST		equ 4426h&lt;br /&gt;
_CpyStack		equ 4429h&lt;br /&gt;
_CpyTo3FPS1		equ 442Ch&lt;br /&gt;
_CpyTo2FPS1		equ 442Fh&lt;br /&gt;
_CpyTo1FPS1		equ 4432h&lt;br /&gt;
_CPYFPS1		equ 4435h&lt;br /&gt;
_CpyTo2FPS2		equ 4438h&lt;br /&gt;
_CpyTo1FPS2		equ 443Bh&lt;br /&gt;
_CPYFPS2		equ 443Eh&lt;br /&gt;
_CpyO3ToFPST		equ 4441h&lt;br /&gt;
_CpyO2ToFPST		equ 4444h&lt;br /&gt;
_CpyO6ToFPST		equ 4447h&lt;br /&gt;
_CpyO1ToFPST		equ 444Ah&lt;br /&gt;
_CpyToFPST		equ 444Dh&lt;br /&gt;
_CpyToStack		equ 4450h&lt;br /&gt;
_CpyO3ToFPS1		equ 4453h&lt;br /&gt;
_CpyO5ToFPS1		equ 4456h&lt;br /&gt;
_CpyO2ToFPS1		equ 4459h&lt;br /&gt;
_CpyO1ToFPS1		equ 445Ch&lt;br /&gt;
_CpyToFPS1		equ 445Fh&lt;br /&gt;
_CpyO2ToFPS2		equ 4462h&lt;br /&gt;
_CpyO3ToFPS2		equ 4465h&lt;br /&gt;
_CpyO6ToFPS2		equ 4468h&lt;br /&gt;
_CpyO1ToFPS2		equ 446Bh&lt;br /&gt;
_CpyToFPS2		equ 446Eh&lt;br /&gt;
_CpyO5ToFPS3		equ 4471h&lt;br /&gt;
_CpyO2ToFPS3		equ 4474h&lt;br /&gt;
_CpyO1ToFPS3		equ 4477h&lt;br /&gt;
_CpyToFPS3		equ 447Ah&lt;br /&gt;
_CpyO1ToFPS6		equ 447Dh&lt;br /&gt;
_CpyO1ToFPS7		equ 4480h&lt;br /&gt;
_CpyO1ToFPS5		equ 4483h&lt;br /&gt;
_CpyO2ToFPS4		equ 4486h&lt;br /&gt;
_CpyO1ToFPS4		equ 4489h&lt;br /&gt;
_ErrNotEnoughMem 	equ 448Ch ;only if not HL bytes free&lt;br /&gt;
_FPSMINUS9		equ 448Fh&lt;br /&gt;
_HLMINUS9		equ 4492h&lt;br /&gt;
_ErrOverflow		equ 4495h&lt;br /&gt;
_ErrDivBy0		equ 4498h&lt;br /&gt;
_ErrSingularMat		equ 449Bh&lt;br /&gt;
_ErrDomain		equ 449Eh&lt;br /&gt;
_ErrIncrement		equ 44A1h&lt;br /&gt;
_ErrNon_Real		equ 44A4h&lt;br /&gt;
_ErrSyntax		equ 44A7h&lt;br /&gt;
_ErrDataType		equ 44AAh&lt;br /&gt;
_ErrArgument		equ 44ADh&lt;br /&gt;
_ErrDimMismatch		equ 44B0h&lt;br /&gt;
_ErrDimension		equ 44B3h&lt;br /&gt;
_ErrUndefined		equ 44B6h&lt;br /&gt;
_ErrMemory		equ 44B9h&lt;br /&gt;
_ErrInvalid		equ 44BCh&lt;br /&gt;
_ErrBreak		equ 44BFh&lt;br /&gt;
_ErrStat		equ 44C2h&lt;br /&gt;
_ErrSignChange		equ 44C5h&lt;br /&gt;
_ErrIterations		equ 44C8h&lt;br /&gt;
_ErrBadGuess		equ 44CBh&lt;br /&gt;
_ErrTolTooSmall		equ 44CEh&lt;br /&gt;
_ErrStatPlot		equ 44D1h&lt;br /&gt;
_ErrLinkXmit		equ 44D4h&lt;br /&gt;
_JError			equ 44D7h&lt;br /&gt;
_noErrorEntry		equ 44DAh&lt;br /&gt;
_pushErrorHandleR	equ 44DDh&lt;br /&gt;
_popErrorHandleR	equ 44E0h&lt;br /&gt;
_strcopy		equ 44E3h&lt;br /&gt;
_strCat			equ 44E6h&lt;br /&gt;
_isInSet		equ 44E9h&lt;br /&gt;
_sDone			equ 44ECh ;this should actually be called _SetEquToOP1&lt;br /&gt;
_serrort		equ 44EFh&lt;br /&gt;
_sNameEq		equ 44F2h&lt;br /&gt;
_sUnderScr		equ 44F5h&lt;br /&gt;
_sFAIL			equ 44F8h&lt;br /&gt;
_sName			equ 44FBh&lt;br /&gt;
_sOK			equ 44FEh&lt;br /&gt;
_PutMap			equ 4501h&lt;br /&gt;
_PutC			equ 4504h&lt;br /&gt;
_DispHL			equ 4507h&lt;br /&gt;
_PutS			equ 450Ah&lt;br /&gt;
_putpsb			equ 450Dh&lt;br /&gt;
_PutPS			equ 4510h&lt;br /&gt;
_wputps			equ 4513h&lt;br /&gt;
_putbuf			equ 4516h&lt;br /&gt;
_putbuf1		equ 4519h&lt;br /&gt;
_wputc			equ 451Ch&lt;br /&gt;
_wputs			equ 451Fh&lt;br /&gt;
_wputsEOL		equ 4522h ;displays string in HL in big font, and uses ... if too long&lt;br /&gt;
_wdispEOL		equ 4525h&lt;br /&gt;
_whomeup		equ 4528h&lt;br /&gt;
_setNumWindow		equ 452Bh ;based on current cursor position, sets winleft and similar (for input prompts)&lt;br /&gt;
_newline		equ 452Eh&lt;br /&gt;
_moveDown		equ 4531h&lt;br /&gt;
_scrollUp		equ 4534h&lt;br /&gt;
_shrinkWindow		equ 4537h&lt;br /&gt;
_moveUp			equ 453Ah&lt;br /&gt;
_scrollDown		equ 453Dh&lt;br /&gt;
_ClrLCDFull		equ 4540h&lt;br /&gt;
_ClrLCD			equ 4543h&lt;br /&gt;
_ClrScrnFull		equ 4546h&lt;br /&gt;
_ClrScrn		equ 4549h&lt;br /&gt;
_ClrTxtShd		equ 454Ch&lt;br /&gt;
_ClrWindow		equ 454Fh&lt;br /&gt;
_EraseEOL		equ 4552h&lt;br /&gt;
_EraseEOW		equ 4555h&lt;br /&gt;
_HomeUp			equ 4558h&lt;br /&gt;
_getcurloc		equ 455Bh&lt;br /&gt;
_VPutMap		equ 455Eh&lt;br /&gt;
_VPutS			equ 4561h&lt;br /&gt;
_VPutSN			equ 4564h&lt;br /&gt;
_vputsnG		equ 4567h&lt;br /&gt;
_vputsnT		equ 456Ah&lt;br /&gt;
_RunIndicOn		equ 456Dh&lt;br /&gt;
_RunIndicOff		equ 4570h&lt;br /&gt;
_saveCmdShadow		equ 4573h&lt;br /&gt;
_saveShadow		equ 4576h&lt;br /&gt;
_rstrShadow		equ 4579h&lt;br /&gt;
_rstrpartial		equ 457Ch&lt;br /&gt;
_rstrCurRow		equ 457Fh&lt;br /&gt;
_rstrUnderMenu		equ 4582h&lt;br /&gt;
_rstrbotrow		equ 4585h&lt;br /&gt;
_saveTR			equ 4588h ;save top right corner of LCD so 2nd arrow can be displayed, indicinuse flag must be set&lt;br /&gt;
_restoreTR		equ 458Bh ;restore top right corner of LCD destroyed by an arrow. indicinuse flag must be set&lt;br /&gt;
_GetKeyPress		equ 458Eh&lt;br /&gt;
_GetTokLen		equ 4591h ;input: hl=pointer to token. output: a=lenght of string, hl=pointer to string on page 1&lt;br /&gt;
_GET_TOK_STRNG		equ 4594h ;input: hl=pointer to token. output: op3=string of the token, a=length of string&lt;br /&gt;
_GETTOKSTRING		equ 4597h ;input: DE=token. output: hl=pointer to the string on page 1&lt;br /&gt;
_PUTBPATBUF2		equ 459Ah&lt;br /&gt;
_PUTBPATBUF		equ 459Dh&lt;br /&gt;
_putbPAT		equ 45A0h&lt;br /&gt;
_putcCheckScrolL	equ 45A3h&lt;br /&gt;
_DispEOL		equ 45A6h&lt;br /&gt;
_fdispEOL		equ 45A9h&lt;br /&gt;
_MAKEROWCMD		equ 45ACh&lt;br /&gt;
_TOTOSTRP		equ 45AFh&lt;br /&gt;
_SETVARNAME		equ 45B2h&lt;br /&gt;
_DispDone		equ 45B5h&lt;br /&gt;
_finishoutput		equ 45B8h&lt;br /&gt;
_curBlink		equ 45BBh&lt;br /&gt;
_CursorOff		equ 45BEh&lt;br /&gt;
_hideCursor		equ 45C1h&lt;br /&gt;
_CursorOn		equ 45C4h&lt;br /&gt;
_showCursor		equ 45C7h&lt;br /&gt;
_KeyToString		equ 45CAh&lt;br /&gt;
_PULLDOWNCHK		equ 45CDh ;something wrong here&lt;br /&gt;
_MenuCatCommon		equ 45D0h&lt;br /&gt;
_ZIfCatalog		equ 45D3h&lt;br /&gt;
_ZIfMatrixMenu		equ 45D6h ;_loadCurCat&lt;br /&gt;
_LoadMenuNum		equ 45D9h&lt;br /&gt;
_LoadMenuNumL		equ 45DCh&lt;br /&gt;
_MenCatRet		equ 45DFh ;restores display as though a menu were just cleared (restores some flags too)&lt;br /&gt;
_MenuSwitchContext	equ 45E2h ;switches to context in A, calls menu hook with A=3, set 5,(iy+16h) for some sort of override to not make switch&lt;br /&gt;
_MenuEdKey		equ 45E5h&lt;br /&gt;
_BackUpGraphSettings	equ 45E8h&lt;br /&gt;
_notalphnum		equ 45EBh&lt;br /&gt;
_SaveSavedFlags		equ 45EEh&lt;br /&gt;
_SetMenuFlags		equ 45F1h&lt;br /&gt;
_RstrSomeFlags		equ 45F4h&lt;br /&gt;
_RstrOScreen		equ 45F7h ;restores saveSScreen to the display&lt;br /&gt;
_SaveOScreen		equ 45FAh ;stores display in saveSScreen&lt;br /&gt;
_dispListName		equ 45FDh ;_SeeIfErrorCx&lt;br /&gt;
_PrevContext		equ 4600h&lt;br /&gt;
_CompareContext		equ 4603h&lt;br /&gt;
_AdrMRow		equ 4606h&lt;br /&gt;
_AdrMEle		equ 4609h&lt;br /&gt;
_GETMATOP1A		equ 460Ch&lt;br /&gt;
_GETM1TOOP1		equ 460Fh&lt;br /&gt;
_GETM1TOP1A		equ 4612h&lt;br /&gt;
_GetMToOP1		equ 4615h&lt;br /&gt;
_PUTTOM1A		equ 4618h&lt;br /&gt;
_PUTTOMA1		equ 461Bh&lt;br /&gt;
_PutToMat		equ 461Eh&lt;br /&gt;
_MAT_EL_DIV		equ 4621h&lt;br /&gt;
_CMATFUN		equ 4624h&lt;br /&gt;
_ROWECH_POLY		equ 4627h&lt;br /&gt;
_ROWECHELON		equ 462Ah&lt;br /&gt;
_AdrLEle		equ 462Dh&lt;br /&gt;
_GETL1TOOP1		equ 4630h&lt;br /&gt;
_GETL1TOP1A		equ 4633h&lt;br /&gt;
_GetLToOP1		equ 4636h&lt;br /&gt;
_GETL1TOOP2		equ 4639h&lt;br /&gt;
_GETL1TOP2A		equ 463Ch&lt;br /&gt;
_GETL2TOP1A		equ 463Fh&lt;br /&gt;
_PUTTOLA1		equ 4642h&lt;br /&gt;
_PutToL			equ 4645h&lt;br /&gt;
_MAXMINLST		equ 4648h&lt;br /&gt;
_LLOW			equ 464Bh&lt;br /&gt;
_LHIGH			equ 464Eh&lt;br /&gt;
_LSUM			equ 4651h&lt;br /&gt;
CUMSUM			equ 4654h&lt;br /&gt;
_ToFrac			equ 4657h&lt;br /&gt;
_SEQSET			equ 465Ah&lt;br /&gt;
_SEQSOLVE		equ 465Dh&lt;br /&gt;
_CMP_NUM_INIT		equ 4660h&lt;br /&gt;
_BinOPExec		equ 4663h&lt;br /&gt;
_EXMEAN1		equ 4666h&lt;br /&gt;
_SET2MVLPTRS		equ 4669h&lt;br /&gt;
_SETMAT1		equ 466Ch&lt;br /&gt;
_CREATETLIST		equ 466Fh&lt;br /&gt;
_UnOPExec		equ 4672h&lt;br /&gt;
_ThreeExec		equ 4675h&lt;br /&gt;
_RESTOREERRNO		equ 4678h&lt;br /&gt;
_FourExec		equ 467Bh&lt;br /&gt;
_FiveExec		equ 467Eh&lt;br /&gt;
_CPYTO2ES1		equ 4681h&lt;br /&gt;
_CPYTO6ES1		equ 4684h&lt;br /&gt;
_CPYTO1ES1		equ 4687h&lt;br /&gt;
_CPYTO3ES1		equ 468Ah&lt;br /&gt;
_CPYTO3ES2		equ 468Dh&lt;br /&gt;
_CPYTO2ES2		equ 4690h&lt;br /&gt;
_CPYTO1ES2		equ 4693h&lt;br /&gt;
_CPYTO2ES3		equ 4696h&lt;br /&gt;
_CPYTO1ES3		equ 4699h&lt;br /&gt;
_CPYTO3ES4		equ 469Ch&lt;br /&gt;
_CPYTO6ES3		equ 469Fh&lt;br /&gt;
_CPYTO2ES4		equ 46A2h&lt;br /&gt;
_CPYTO1ES4		equ 46A5h&lt;br /&gt;
_CPYTO2ES5		equ 46A8h&lt;br /&gt;
_CPYTO1ES5		equ 46ABh&lt;br /&gt;
_CPYTO4EST		equ 46AEh&lt;br /&gt;
_CPYTO2EST		equ 46B1h&lt;br /&gt;
_CPYTO1EST		equ 46B4h&lt;br /&gt;
_CPYTO2ES6		equ 46B7h&lt;br /&gt;
_CPYTO1ES6		equ 46BAh&lt;br /&gt;
_CPYTO2ES7		equ 46BDh&lt;br /&gt;
_CPYTO1ES7		equ 46C0h&lt;br /&gt;
_CPYTO2ES8		equ 46C3h&lt;br /&gt;
_CPYTO1ES8		equ 46C6h&lt;br /&gt;
_CPYTO1ES9		equ 46C9h&lt;br /&gt;
_CPYTO2ES9		equ 46CCh&lt;br /&gt;
_CPYTO2ES10		equ 46CFh&lt;br /&gt;
_CPYTO1ES10		equ 46D2h&lt;br /&gt;
_CPYTO2ES11		equ 46D5h&lt;br /&gt;
_CPYTO1ES11		equ 46D8h&lt;br /&gt;
_CPYTO2ES12		equ 46DBh&lt;br /&gt;
_CPYTO1ES12		equ 46DEh&lt;br /&gt;
_CPYTO2ES13		equ 46E1h&lt;br /&gt;
_CPYTO1ES13		equ 46E4h&lt;br /&gt;
_CPYTO1ES14		equ 46E7h&lt;br /&gt;
_CPYTO1ES16		equ 46EAh&lt;br /&gt;
_CPYTO1ES17		equ 46EDh&lt;br /&gt;
_CPYTO1ES18		equ 46F0h&lt;br /&gt;
_CPYTO1ES15		equ 46F3h&lt;br /&gt;
_CPYTO2ES15		equ 46F6h&lt;br /&gt;
_CPYO1TOEST		equ 46F9h&lt;br /&gt;
_CPYO1TOES1		equ 46FCh&lt;br /&gt;
_CPYO6TOES1		equ 46FFh&lt;br /&gt;
_CPYO6TOES3		equ 4702h&lt;br /&gt;
_CPYO1TOES2		equ 4705h&lt;br /&gt;
_CPYO2TOES2		equ 4708h&lt;br /&gt;
_CPYO1TOES3		equ 470Bh&lt;br /&gt;
_CPYO1TOES4		equ 470Eh&lt;br /&gt;
_CPYO1TOES5		equ 4711h&lt;br /&gt;
_CPYO1TOES6		equ 4714h&lt;br /&gt;
_CPYO1TOES7		equ 4717h&lt;br /&gt;
_CPYO2TOES4		equ 471Ah&lt;br /&gt;
_CPYO2TOES5		equ 471Dh&lt;br /&gt;
_CPYO2TOES6		equ 4720h&lt;br /&gt;
_CPYO2TOES7		equ 4723h&lt;br /&gt;
_CPYO2TOES8		equ 4726h&lt;br /&gt;
_CPYO2TOES9		equ 4729h&lt;br /&gt;
_CPYO1TOES8		equ 472Ch&lt;br /&gt;
_CPYO1TOES9		equ 472Fh&lt;br /&gt;
_CPYO1TOES10		equ 4732h&lt;br /&gt;
_CPYO1TOES11		equ 4735h&lt;br /&gt;
_CPYO1TOES12		equ 4738h&lt;br /&gt;
_CPYO1TOES13		equ 473Bh&lt;br /&gt;
_CPYO1TOES14		equ 473Eh&lt;br /&gt;
_CPYO1TOES15		equ 4741h&lt;br /&gt;
;_EVALF3A		equ 4744h ;Zeda: misassigned&lt;br /&gt;
_GetK			equ 4744h&lt;br /&gt;
_setTitle               equ 474Ah&lt;br /&gt;
_dispVarVal		equ 474Dh&lt;br /&gt;
_RecallEd		equ 4750h ;_setupBuffer&lt;br /&gt;
_createNumEditBuf	equ 4753h&lt;br /&gt;
_ProcessBufKeys		equ 4756h ;may be default key processing like [CLEAR], etc. especially for an edit buffer.&lt;br /&gt;
_CallCommon		equ 4759h&lt;br /&gt;
_CommonKeys		equ 475Ch&lt;br /&gt;
_Leftmore		equ 475Fh&lt;br /&gt;
_fDel			equ 4762h&lt;br /&gt;
_fClear			equ 4765h&lt;br /&gt;
_finsDisp		equ 4768h ;Michael says _FinsDisp02 equ 4768h (something's not right)&lt;br /&gt;
_FinsDisp02		equ 476Bh ;_setIndicator&lt;br /&gt;
_closeeditbufnor	equ 476Eh&lt;br /&gt;
_releaseBuffer		equ 4771h&lt;br /&gt;
_varnameToOP1hl		equ 4774h&lt;br /&gt;
_nameToOP1		equ 4777h&lt;br /&gt;
_numPPutAway		equ 477Ah&lt;br /&gt;
_numRedisp		equ 477Dh&lt;br /&gt;
_numError02		equ 4780h&lt;br /&gt;
_Load_SFont		equ 4783h&lt;br /&gt;
_SFont_Len		equ 4786h&lt;br /&gt;
_InitNumVec		equ 4789h ;inits window settings/table setup/finance solver context (dialog-like)&lt;br /&gt;
_SetXXOP1		equ 478Ch&lt;br /&gt;
_SetXXOP2		equ 478Fh&lt;br /&gt;
_SetXXXXOP2		equ 4792h&lt;br /&gt;
_UCLineS		equ 4795h&lt;br /&gt;
_CLine			equ 4798h&lt;br /&gt;
_CLineS			equ 479Bh&lt;br /&gt;
_XRootY			equ 479Eh&lt;br /&gt;
_YToX			equ 47A1h&lt;br /&gt;
_ZmStats		equ 47A4h&lt;br /&gt;
_POINT_STAT_HLP		equ 47A7h&lt;br /&gt;
_DRAWSPLOT		equ 47AAh&lt;br /&gt;
_INITNEWTRACEP		equ 47ADh ;A is input here, goes to (8E63h)&lt;br /&gt;
_SPLOTCOORD		equ 47B0h&lt;br /&gt;
_SPLOTRIGHT		equ 47B3h&lt;br /&gt;
_SPLOTLEFT		equ 47B6h&lt;br /&gt;
_CMPBOXINFO		equ 47B9h&lt;br /&gt;
_NEXTPLOT		equ 47BCh&lt;br /&gt;
_PREVPLOT		equ 47BFh&lt;br /&gt;
_CLRPREVPLOT		equ 47C2h&lt;br /&gt;
_PUT_INDEX_LST		equ 47C5h&lt;br /&gt;
_GET_INDEX_LST		equ 47C8h&lt;br /&gt;
_HEAP_SORT		equ 47CBh&lt;br /&gt;
_StoGDB2		equ 47CEh&lt;br /&gt;
_RclGDB2		equ 47D1h&lt;br /&gt;
_CircCmd		equ 47D4h&lt;br /&gt;
_GrphCirc		equ 47D7h&lt;br /&gt;
_Mov18B			equ 47DAh&lt;br /&gt;
_DarkLine		equ 47DDh&lt;br /&gt;
_ILine			equ 47E0h&lt;br /&gt;
_IPoint			equ 47E3h&lt;br /&gt;
_XYRNDBOTH		equ 47E6h&lt;br /&gt;
_XYRND			equ 47E9h&lt;br /&gt;
_CheckTOP		equ 47ECh&lt;br /&gt;
_CheckXY		equ 47EFh&lt;br /&gt;
_DarkPnt		equ 47F2h&lt;br /&gt;
_CPointS		equ 47F5h&lt;br /&gt;
_WTOV			equ 47F8h&lt;br /&gt;
_VtoWHLDE		equ 47FBh&lt;br /&gt;
_Xitof			equ 47FEh&lt;br /&gt;
_YftoI			equ 4801h&lt;br /&gt;
_XftoI			equ 4804h&lt;br /&gt;
_TraceOff		equ 4807h&lt;br /&gt;
_GrRedisp		equ 480Ah&lt;br /&gt;
_GDISPTOKEN		equ 480Dh&lt;br /&gt;
_GRDECODA		equ 4810h&lt;br /&gt;
_LABCOOR		equ 4813h ;draws labels with _GRLABELS and X/Y/whatever coordinates, including stat plot stuff&lt;br /&gt;
_COORDISP		equ 4816h ;draws X &amp;amp; Y coordinates (or R and theta if PolarGC)&lt;br /&gt;
_TMPEQUNOSRC		equ 4819h&lt;br /&gt;
_GRLABELS		equ 481Ch&lt;br /&gt;
_YPIXSET		equ 481Fh&lt;br /&gt;
_XPIXSET		equ 4822h&lt;br /&gt;
_COPYRNG		equ 4825h&lt;br /&gt;
_VALCUR			equ 4828h ;just sets/resets three flags, enables graph cursor&lt;br /&gt;
_GRPUTAWAY		equ 482Bh&lt;br /&gt;
_RSTGFLAGS		equ 482Eh&lt;br /&gt;
_GRReset		equ 4831h&lt;br /&gt;
_XYCENT			equ 4834h&lt;br /&gt;
_ZOOMXYCMD		equ 4837h&lt;br /&gt;
_CPTDELY		equ 483Ah&lt;br /&gt;
_CPTDELX		equ 483Dh&lt;br /&gt;
_SetFuncM		equ 4840h&lt;br /&gt;
_SetSeqM		equ 4843h&lt;br /&gt;
_SetPolM		equ 4846h&lt;br /&gt;
_SetParM		equ 4849h&lt;br /&gt;
_ZmInt			equ 484Ch&lt;br /&gt;
_ZmDecml		equ 484Fh&lt;br /&gt;
_ZmPrev			equ 4852h&lt;br /&gt;
_ZmUsr			equ 4855h&lt;br /&gt;
_SETUZM			equ 4858h&lt;br /&gt;
_ZmFit			equ 485Bh&lt;br /&gt;
_ZmSquare		equ 485Eh&lt;br /&gt;
_ZmTrig			equ 4861h&lt;br /&gt;
_SetXMinMax		equ 4864h&lt;br /&gt;
_ZooDefault		equ 4867h&lt;br /&gt;
_GrBufCpy		equ 486Ah&lt;br /&gt;
_DRAWSPLITLINE		equ 486Dh&lt;br /&gt;
_RestoreDisp		equ 4870h&lt;br /&gt;
_FNDDB			equ 4873h&lt;br /&gt;
_AllEq			equ 4876h&lt;br /&gt;
_fndallseleq		equ 4879h&lt;br /&gt;
_NEXTEQ			equ 487Ch&lt;br /&gt;
_PREVEQ			equ 487Fh&lt;br /&gt;
_BLINKGCUR		equ 4882h&lt;br /&gt;
_NBCURSOR		equ 4885h&lt;br /&gt;
_STATMARK		equ 4888h&lt;br /&gt;
_CHKTEXTCURS		equ 488Bh&lt;br /&gt;
_Regraph		equ 488Eh&lt;br /&gt;
_DOREFFLAGS02		equ 4891h ;something wrong here&lt;br /&gt;
INITNSEQ		equ 4894h&lt;br /&gt;
_YRES			equ 4897h ;_PLOTPTXY2&lt;br /&gt;
_Ceiling		equ 489Ah ;ceil(OP1)&lt;br /&gt;
_PutXY			equ 489Dh ;draws X &amp;amp; Y coordinates (regardless of PolarGC)&lt;br /&gt;
_PUTEQUNO		equ 48A0h&lt;br /&gt;
_PDspGrph		equ 48A3h&lt;br /&gt;
_HorizCmd		equ 48A6h&lt;br /&gt;
_VertCmd		equ 48A9h&lt;br /&gt;
_LineCmd		equ 48ACh&lt;br /&gt;
_UnLineCmd		equ 48AFh&lt;br /&gt;
_PointCmd		equ 48B2h&lt;br /&gt;
_PixelTest		equ 48B5h&lt;br /&gt;
_PixelCmd  		equ 48B8h&lt;br /&gt;
_TanLnF			equ 48BBh&lt;br /&gt;
_DRAWCMD_INIT		equ 48BEh&lt;br /&gt;
_DrawCmd		equ 48C1h&lt;br /&gt;
_SHADECMD		equ 48C4h&lt;br /&gt;
_InvCmd			equ 48C7h&lt;br /&gt;
_STATSHADE		equ 48CAh&lt;br /&gt;
_dspmattable		equ 48CDh&lt;br /&gt;
_dsplsts		equ 48D0h&lt;br /&gt;
_closeEditBuf		equ 48D3h&lt;br /&gt;
_parseEditBuf		equ 48D6h&lt;br /&gt;
_putsm			equ 48D9h&lt;br /&gt;
_DspCurTbl		equ 48DCh&lt;br /&gt;
_DSPGRTBL		equ 48DFh&lt;br /&gt;
_zeroTemplate		equ 48E2h&lt;br /&gt;
_settblrefs		equ 48E5h&lt;br /&gt;
_dispTblBot		equ 48E8h&lt;br /&gt;
_DispTblTop		equ 48EBh&lt;br /&gt;
_dispTblbody		equ 48EEh&lt;br /&gt;
_VPUTBLANK		equ 48F1h&lt;br /&gt;
_TBLTRACE		equ 48F4h&lt;br /&gt;
_dispListNameY		equ 48F7h&lt;br /&gt;
_CurNameLength		equ 48FAh&lt;br /&gt;
_NameToBuf		equ 48FDh&lt;br /&gt;
_jpromptcursor		equ 4900h&lt;br /&gt;
_BufLeft		equ 4903h&lt;br /&gt;
_BufRight		equ 4906h&lt;br /&gt;
_bufInsert		equ 4909h&lt;br /&gt;
_bufQueueChar		equ 490Ch&lt;br /&gt;
_BufReplace		equ 490Fh&lt;br /&gt;
_BufDelete		equ 4912h&lt;br /&gt;
_BUFPEEK		equ 4915h&lt;br /&gt;
_BUFPEEK1		equ 4918h&lt;br /&gt;
_BUFPEEK2		equ 491Bh&lt;br /&gt;
_BUFPEEK3		equ 491Eh&lt;br /&gt;
_BufToBtm		equ 4921h&lt;br /&gt;
_setupEditEqu		equ 4924h&lt;br /&gt;
_BufToTop		equ 4927h&lt;br /&gt;
_isEditFull		equ 492Ah&lt;br /&gt;
_IsEditEmpty		equ 492Dh&lt;br /&gt;
_IsAtTop		equ 4930h&lt;br /&gt;
_IsAtBtm		equ 4933h&lt;br /&gt;
_BufClear		equ 4936h&lt;br /&gt;
_JcursorFirst		equ 4939h&lt;br /&gt;
_JcursorLast		equ 493Ch&lt;br /&gt;
_CursorLeft		equ 493Fh&lt;br /&gt;
_cursorRight		equ 4942h&lt;br /&gt;
_cursorUp		equ 4945h&lt;br /&gt;
_CursorDown		equ 4948h&lt;br /&gt;
_cursorToOffset		equ 494Bh&lt;br /&gt;
_InsDisp		equ 494Eh&lt;br /&gt;
_FDISPBOL1		equ 4951h&lt;br /&gt;
_FDISPBOL		equ 4954h&lt;br /&gt;
_DispEOW		equ 4957h&lt;br /&gt;
_DispHead		equ 495Ah&lt;br /&gt;
_DispTail		equ 495Dh&lt;br /&gt;
_PutTokString		equ 4960h&lt;br /&gt;
_setupEditCmd		equ 4963h&lt;br /&gt;
_setEmptyEditEqu	equ 4966h&lt;br /&gt;
_SetEmptyEditPtr	equ 4969h&lt;br /&gt;
_CloseEditEqu		equ 496Ch&lt;br /&gt;
_GetPrevTok		equ 496Fh&lt;br /&gt;
_getkey			equ 4972h&lt;br /&gt;
_canIndic		equ 4975h&lt;br /&gt;
_LCD_DRIVERON		equ 4978h &lt;br /&gt;
_DFMIN2			equ 497Bh&lt;br /&gt;
_formDisp		equ 497Eh ;this is directly what the OS calls on the homescreen to display a result&lt;br /&gt;
_formMatrix		equ 4981h&lt;br /&gt;
_wscrollLeft		equ 4984h&lt;br /&gt;
_wscrollUp		equ 4987h&lt;br /&gt;
_wscrollDown		equ 498Ah&lt;br /&gt;
_wscrollRight		equ 498Dh&lt;br /&gt;
_FormEReal		equ 4990h&lt;br /&gt;
_formERealTOK		equ 4993h&lt;br /&gt;
_FormDCplx		equ 4996h&lt;br /&gt;
_FormReal		equ 4999h&lt;br /&gt;
_formScrollUp		equ 499Ch&lt;br /&gt;
_setwinabove		equ 499Fh&lt;br /&gt;
_disarmScroll		equ 49A2h&lt;br /&gt;
_OP1toEdit		equ 49A5h&lt;br /&gt;
_MinToEdit		equ 49A8h&lt;br /&gt;
_rclVarToEdit		equ 49ABh&lt;br /&gt;
_rclVarToEditPtR	equ 49AEh&lt;br /&gt;
_RCLENTRYTOEDIT		equ 49B1h&lt;br /&gt;
_rclToQueue		equ 49B4h ;recalls bytes at OP1 into edit buffer&lt;br /&gt;
_FORMTOTOK		equ 49B7h&lt;br /&gt;
_DISP_INTERVAL		equ 49BAh&lt;br /&gt;
_DisplstName		equ 49BDh&lt;br /&gt;
_dispSLstNameHL		equ 49C0h&lt;br /&gt;
_EditEqu		equ 49C3h&lt;br /&gt;
_closeEquField		equ 49C6h&lt;br /&gt;
_AutoSelect		equ 49C9h&lt;br /&gt;
_DISPYEOS		equ 49CCh&lt;br /&gt;
_dispNumEOS		equ 49CFh&lt;br /&gt;
_setupdispeq		equ 49D2h&lt;br /&gt;
_DispForward		equ 49D5h&lt;br /&gt;
_DispYPrompt2		equ 49D8h&lt;br /&gt;
_stringwidth		equ 49DBh&lt;br /&gt;
_dispErrorScreen	equ 49DEh ;displays top row of error screen (error message)&lt;br /&gt;
_POPCX			equ 49E1h ;moves 14 bytes at cxPrev to cxMain, 15th byte goes to replace appflags&lt;br /&gt;
_loadnoeentry		equ 49E4h&lt;br /&gt;
_SaveScreen		equ 49E7h&lt;br /&gt;
_RETSCREEN		equ 49EAh&lt;br /&gt;
_RetScreenErr		equ 49EDh&lt;br /&gt;
_CheckSplitFlag		equ 49F0h&lt;br /&gt;
_SolveRedisp		equ 49F3h&lt;br /&gt;
_SolveDisp		equ 49F6h&lt;br /&gt;
_itemName		equ 49F9h&lt;br /&gt;
_SetNorm_Vals		equ 49FCh&lt;br /&gt;
_SetYOffset		equ 49FFh ;sets up YOffset and next 4 bytes (possibly specialized for the table editor)&lt;br /&gt;
_ConvKeyToTok		equ 4A02h&lt;br /&gt;
_ConvFCKeyToTok		equ 4A05h&lt;br /&gt;
_ConvFEKeyToTok		equ 4A08h&lt;br /&gt;
_TokToKey		equ 4A0Bh&lt;br /&gt;
_SendSkipExitPacket	equ 4A0Eh&lt;br /&gt;
_GETVARCMD		equ 4A11h&lt;br /&gt;
_SendVarCmd		equ 4A14h&lt;br /&gt;
_SendScreenshot		equ 4A17h&lt;br /&gt;
keyscnlnk		equ 4A1Ah&lt;br /&gt;
_DeselectAllVars	equ 4A1Dh&lt;br /&gt;
_DelRes			equ 4A20h&lt;br /&gt;
_ConvLcToLr		equ 4A23h&lt;br /&gt;
_RedimMat		equ 4A26h&lt;br /&gt;
_IncLstSize		equ 4A29h&lt;br /&gt;
_InsertList		equ 4A2Ch&lt;br /&gt;
_dellistel		equ 4A2Fh&lt;br /&gt;
_EditProg		equ 4A32h&lt;br /&gt;
_CloseProg		equ 4A35h&lt;br /&gt;
_ClrGraphRef		equ 4A38h&lt;br /&gt;
_FixTempCnt		equ 4A3Bh&lt;br /&gt;
_SAVEDATA		equ 4A3Eh&lt;br /&gt;
_RESTOREDATA		equ 4A41h&lt;br /&gt;
_FindAlphaUp		equ 4A44h&lt;br /&gt;
_FindAlphaDn		equ 4A47h&lt;br /&gt;
_CmpSyms		equ 4A4Ah&lt;br /&gt;
_CREATETEMP		equ 4A4Dh&lt;br /&gt;
_CleanAll		equ 4A50h&lt;br /&gt;
_MoveToNextSym		equ 4A53h ;input: hl=pointer to type byte of VAT entry. output: hl = pointer to next entry's type byte&lt;br /&gt;
_ConvLrToLc		equ 4A56h&lt;br /&gt;
_TblScreenDn		equ 4A59h ;something is not right here&lt;br /&gt;
_TblScreenUp		equ 4A5Ch&lt;br /&gt;
_SCREENUP		equ 4A5Fh&lt;br /&gt;
_ScreenUpDown		equ 4A62h&lt;br /&gt;
_ZifRclHandler		equ 4A65h&lt;br /&gt;
_zifrclkapp		equ 4A68h&lt;br /&gt;
_rclkeyRtn		equ 4A6Bh&lt;br /&gt;
_RCLKEY			equ 4A6Bh&lt;br /&gt;
_RCLREGEQ_CALL		equ 4A6Eh&lt;br /&gt;
_RCLREGEQ		equ 4A71h&lt;br /&gt;
_initNamePrompt		equ 4A74h&lt;br /&gt;
_NamePrompt2		equ 4A77h&lt;br /&gt;
_CATALOGCHK		equ 4A7Ah&lt;br /&gt;
_clrTR			equ 4A7Dh&lt;br /&gt;
_QUAD			equ 4A80h&lt;br /&gt;
_GRAPHQUAD		equ 4A83h&lt;br /&gt;
_BC2NOREAL		equ 4A86h&lt;br /&gt;
_ErrNonReal_FPST_FPS1	equ 4A89h&lt;br /&gt;
_ErrNonReal		equ 4A8Ch ;ERR:DATA TYPE if top B numers from FPS are non-real&lt;br /&gt;
_WRITE_TEXT		equ 4A8Fh&lt;br /&gt;
_FORSEQINIT		equ 4A92h&lt;br /&gt;
_GRPHPARS		equ 4A95h&lt;br /&gt;
_PLOTPARS		equ 4A98h&lt;br /&gt;
_ParseInp		equ 4A9Bh&lt;br /&gt;
_PARSEOFF		equ 4A9Eh&lt;br /&gt;
_PARSESCAN		equ 4AA1h&lt;br /&gt;
_GETPARSE		equ 4AA4h&lt;br /&gt;
_SAVEPARSE		equ 4AA7h&lt;br /&gt;
_InitPFlgs		equ 4AAAh&lt;br /&gt;
_CKENDLINERR		equ 4AADh&lt;br /&gt;
_OP2Set60		equ 4AB0h&lt;br /&gt;
_GETSTATPTR		equ 4AB3h&lt;br /&gt;
_CMP_STATPTR		equ 4AB6h&lt;br /&gt;
_VARSYSADR		equ 4AB9h&lt;br /&gt;
_StoSysTok		equ 4ABCh&lt;br /&gt;
_StoAns			equ 4ABFh&lt;br /&gt;
_StoTheta		equ 4AC2h&lt;br /&gt;
_StoR			equ 4AC5h&lt;br /&gt;
_StoY			equ 4AC8h&lt;br /&gt;
_StoN			equ 4ACBh&lt;br /&gt;
_StoT			equ 4ACEh&lt;br /&gt;
_StoX			equ 4AD1h&lt;br /&gt;
_StoOther		equ 4AD4h&lt;br /&gt;
_RclAns			equ 4AD7h&lt;br /&gt;
_RclY			equ 4ADAh&lt;br /&gt;
_RclN			equ 4ADDh&lt;br /&gt;
_RclX			equ 4AE0h&lt;br /&gt;
_RclVarSym		equ 4AE3h&lt;br /&gt;
_RclSysTok		equ 4AE6h&lt;br /&gt;
_StMatEl		equ 4AE9h&lt;br /&gt;
_STLSTVECEL		equ 4AECh&lt;br /&gt;
_ConvOP1		equ 4AEFh&lt;br /&gt;
_Find_Parse_Formula	equ 4AF2h&lt;br /&gt;
_PARSE_FORMULA		equ 4AF5h&lt;br /&gt;
_FetchQuotedString	equ 4AF8h&lt;br /&gt;
_FetchNumLine		equ 4AFBh&lt;br /&gt;
_ParseNameTokens	equ 4AFEh&lt;br /&gt;
_ParseInpGraph		equ 4B01h ;same as _ParseInp except 3,(iy+1Fh) is graph/split screen override, or something&lt;br /&gt;
_ParseInpGraphReset	equ 4B04h ;_ParseInpGraph except zeroes out iy+6/7, resets 3,(iy+1Ah) &amp;amp; 0,(iy+1Fh), fmtFlags-&amp;gt;fmtOverride, parse within ParseInp?&lt;br /&gt;
_ParseInpLastEnt	equ 4B07h ;ParseInp on program 05h,23h,00h&lt;br /&gt;
_ErrOnCertainTypes	equ 4B0Ah ;ERR:DATA TYPE if A is one of a couple of values...subroutine in ParseInp, somehow&lt;br /&gt;
_CreatePair		equ 4B0Dh&lt;br /&gt;
_PUSHNUM		equ 4B10h&lt;br /&gt;
_INCCURPCERREND		equ 4B13h&lt;br /&gt;
_ERREND			equ 4B16h&lt;br /&gt;
_COMMAERRF		equ 4B19h&lt;br /&gt;
_COMMAERR		equ 4B1Ch&lt;br /&gt;
_STEQARG2		equ 4B1Fh&lt;br /&gt;
_STEQARG		equ 4B22h&lt;br /&gt;
_INPARG			equ 4B25h&lt;br /&gt;
_STEQARG3		equ 4B28h&lt;br /&gt;
_NXTFETCH		equ 4B2Bh&lt;br /&gt;
_CKFETCHVAR		equ 4B2Eh&lt;br /&gt;
_FETCHVARA		equ 4B31h&lt;br /&gt;
_FETCHVAR		equ 4B34h&lt;br /&gt;
_CKENDLIN		equ 4B37h ;gets parse byte in A and then _CKENDEXP&lt;br /&gt;
_CKENDEXP		equ 4B3Ah ;checks A for 3Eh or 3Fh&lt;br /&gt;
_CKPARSEND		equ 4B3Dh&lt;br /&gt;
_STOTYPEARG		equ 4B40h&lt;br /&gt;
_ConvDim		equ 4B43h&lt;br /&gt;
_ConvDim00		equ 4B46h&lt;br /&gt;
_AHEADEQUAL		equ 4B49h&lt;br /&gt;
_PARSAHEADS		equ 4B4Ch&lt;br /&gt;
_PARSAHEAD              equ 4B4Fh&lt;br /&gt;
_AnsName		equ 4B52h&lt;br /&gt;
_STOCMPREALS		equ 4B55h&lt;br /&gt;
_GETDEPTR		equ 4B58h&lt;br /&gt;
_PUSH2BOPER		equ 4B5Bh ;push the value in bc onto the operator stack&lt;br /&gt;
_POP2BOPER		equ 4B5Eh ;pop 2 bytes on the operator stack to bc&lt;br /&gt;
_PUSHOPER		equ 4B61h ;push the value in a onto the operator stack&lt;br /&gt;
_POPOPER		equ 4B64h ;pop 1 byte on the operator stack to a&lt;br /&gt;
_FIND_E_UNDEF		equ 4B67h&lt;br /&gt;
_STTMPEQ		equ 4B6Ah&lt;br /&gt;
_FINDEOL		equ 4B6Dh&lt;br /&gt;
_BRKINC			equ 4B70h&lt;br /&gt;
_INCFETCH		equ 4B73h&lt;br /&gt;
_CURFETCH		equ 4B76h&lt;br /&gt;
_Random			equ 4B79h&lt;br /&gt;
_StoRand		equ 4B7Ch&lt;br /&gt;
_RandInit		equ 4B7Fh&lt;br /&gt;
_resetStacks		equ 4B82h ;(onsp)-&amp;gt;(errsp), (fpbase)-&amp;gt;(fps), (opbase)-&amp;gt;(ops)&lt;br /&gt;
_Factorial		equ 4B85h&lt;br /&gt;
_YONOFF			equ 4B88h&lt;br /&gt;
_EQSELUNSEL		equ 4B8Bh&lt;br /&gt;
_ITSOLVER		equ 4B8Eh&lt;br /&gt;
_GRITSOLVER		equ 4B91h&lt;br /&gt;
_ITSOLVERB		equ 4B94h&lt;br /&gt;
_ITSOLVERNB		equ 4B97h&lt;br /&gt;
_ExTest_INT		equ 4B9Ah&lt;br /&gt;
_DIST_FUN		equ 4BADh&lt;br /&gt;
_LogGamma		equ 4BA0h&lt;br /&gt;
_OneVar			equ 4BA3h&lt;br /&gt;
_ONEVARS_0		equ 4BA6h&lt;br /&gt;
_ORDSTAT		equ 4BA9h&lt;br /&gt;
_INITSTATANS2		equ 4BACh&lt;br /&gt;
_ANOVA_SPEC		equ 4BAFh&lt;br /&gt;
_OutputExpr		equ 4BB2h&lt;br /&gt;
_CentCursor		equ 4BB5h&lt;br /&gt;
_TEXT			equ 4BB8h&lt;br /&gt;
_FINISHSPEC		equ 4BBBh&lt;br /&gt;
_TRCYFUNC		equ 4BBEh&lt;br /&gt;
_RCL_SEQ_X		equ 4BC1h&lt;br /&gt;
_RCLSEQ2		equ 4BC4h&lt;br /&gt;
_GRPPutAway		equ 4BC7h&lt;br /&gt;
_CKVALDELX		equ 4BCAh&lt;br /&gt;
_CKVALDELTA		equ 4BCDh&lt;br /&gt;
_GrBufClr		equ 4BD0h&lt;br /&gt;
_GRBUFCPY_V		equ 4BD3h&lt;br /&gt;
_FNDSELEQ		equ 4BD6h&lt;br /&gt;
_CLRGRAPHXY		equ 4BD9h&lt;br /&gt;
_NEDXT_Y_STYLE		equ 4BDCh&lt;br /&gt;
_PLOTPT			equ 4BDFh&lt;br /&gt;
_NEWINDEP		equ 4BE2h&lt;br /&gt;
_Axes			equ 4BE5h&lt;br /&gt;
_setPenX		equ 4BE8h&lt;br /&gt;
_setPenY		equ 4BEBh&lt;br /&gt;
_setPenT		equ 4BEEh&lt;br /&gt;
_TAN_EQU_DISP		equ 4BF1h&lt;br /&gt;
_PutAns			equ 4BF4h&lt;br /&gt;
_DispOP1A		equ 4BF7h&lt;br /&gt;
_MATHTANLN		equ 4BFAh&lt;br /&gt;
_ENDDRAW		equ 4BFDh&lt;br /&gt;
_SetTblGraphDraw	equ 4C00h&lt;br /&gt;
_StartDialog		equ 4C03h&lt;br /&gt;
_DialogInit		equ 4C06h&lt;br /&gt;
_GetDialogNumOP1	equ 4C09h&lt;br /&gt;
_SetDialogNumOP1	equ 4C0Ch&lt;br /&gt;
_GetDialogNumHL		equ 4C0Fh&lt;br /&gt;
_ErrArgumentO123	equ 4C12h ;ERR:ARGUMENT if OP2&amp;gt;OP1 or OP1&amp;gt;OP3&lt;br /&gt;
_SetDialogKeyOverride	equ 4C15h&lt;br /&gt;
_ResDialogKeyOverride	equ 4C18h&lt;br /&gt;
_ForceDialogKeypress	equ 4C1Bh&lt;br /&gt;
_DialogStartGetKey	equ 4C1Eh&lt;br /&gt;
_StartDialog_Override	equ 4C21h&lt;br /&gt;
_CallDialogCallback	equ 4C24h&lt;br /&gt;
_SetDialogCallback	equ 4C27h&lt;br /&gt;
_ResDialogCallback	equ 4C2Ah&lt;br /&gt;
_CopyDialogNum		equ 4C2Dh&lt;br /&gt;
_MemClear		equ 4C30h&lt;br /&gt;
_MemSet			equ 4C33h&lt;br /&gt;
_ReloadAppEntryVecs	equ 4C36h&lt;br /&gt;
_PointOn		equ 4C39h&lt;br /&gt;
_ExecuteNewPrgm		equ 4C3Ch&lt;br /&gt;
_StrLength		equ 4C3Fh&lt;br /&gt;
_VPutMapRec		equ 4C42h&lt;br /&gt;
_getRomPage		equ 4C45h&lt;br /&gt;
_FindAppUp		equ 4C48h&lt;br /&gt;
_FindAppDn		equ 4C4Bh&lt;br /&gt;
_FindApp		equ 4C4Eh&lt;br /&gt;
_ExecuteApp		equ 4C51h&lt;br /&gt;
_MonReset		equ 4C54h&lt;br /&gt;
_ClearParseVar		equ 4C57h&lt;br /&gt;
_SetParseVarProg	equ 4C5Ah&lt;br /&gt;
_isContextKey		equ 4C5Dh&lt;br /&gt;
_IBounds		equ 4C60h&lt;br /&gt;
_IOffset		equ 4C63h&lt;br /&gt;
_DrawCirc2		equ 4C66h&lt;br /&gt;
_CanAlphIns		equ 4C69h&lt;br /&gt;
cxRedisp		equ 4C6Ch&lt;br /&gt;
_GetBaseVer		equ 4C6Fh&lt;br /&gt;
_OPSet0DE		equ 4C72h ;loads a floating point 0 to location de &lt;br /&gt;
_AppGetCbl		equ 4C75h&lt;br /&gt;
_AppGetCalc		equ 4C78h&lt;br /&gt;
_SaveDisp		equ 4C7Bh&lt;br /&gt;
_SetIgnoreKey  		equ 4C7Eh ;set 1,(iy+28h) / ret&lt;br /&gt;
_SetSendThisKeyBack	equ 4C81h ;set 2,(iy+28h) / ld (kbdKey),a / ret&lt;br /&gt;
_DisableApd		equ 4C84h&lt;br /&gt;
_EnableApd		equ 4C87h ;set apdable,(iy+apdflags)&lt;br /&gt;
_JForceCmdNoChar2	equ 4C8Ah ;2.41 at least&lt;br /&gt;
_set2IY34		equ 4C8Dh ;set 2,(iy+34) / ret&lt;br /&gt;
_forcecmd		equ 4C90h&lt;br /&gt;
_ApdSetup		equ 4C93h&lt;br /&gt;
_Get_NumKey		equ 4C96h&lt;br /&gt;
_AppSetup		equ 4C99h ;or _AppCleanup, or something&lt;br /&gt;
_HandleLinkKeyActivity	equ 4C9Ch&lt;br /&gt;
_JForceCmdNoChar3	equ 4C9Fh ;2.41 at least&lt;br /&gt;
_ReleaseSedit		equ 4CA2h&lt;br /&gt;
_initsmalleditline	equ 4CA5h&lt;br /&gt;
_startsmalledit		equ 4CA8h&lt;br /&gt;
;4CABh&lt;br /&gt;
_SGetTokString		equ 4CAEh&lt;br /&gt;
_LoadPattern	 	equ 4CB1h&lt;br /&gt;
_SStringLength		equ 4CB4h&lt;br /&gt;
_RestorePenCol		equ 4CB7h&lt;br /&gt;
;4CBAh&lt;br /&gt;
_DoNothing		equ 4CBDh&lt;br /&gt;
_ForceSmallEditReturn	equ 4CC0h&lt;br /&gt;
;4CC3h ;saves context&lt;br /&gt;
;4CC6h&lt;br /&gt;
;4CC9h&lt;br /&gt;
;4CCCh&lt;br /&gt;
_VEraseEOL		equ 4CCFh&lt;br /&gt;
;4CD2h&lt;br /&gt;
;4CD5h&lt;br /&gt;
_GoToErr		equ 4CD8h&lt;br /&gt;
_initsmalleditBox	equ 4CDBh&lt;br /&gt;
;4CDEh&lt;br /&gt;
_EmptyHook		equ 4CE1h&lt;br /&gt;
_ForceSmallEditReturn2	equ 4CE4h&lt;br /&gt;
;4CE7h ;same as 4CC3h&lt;br /&gt;
;4CEAh&lt;br /&gt;
_ClearRow		equ 4CEDh&lt;br /&gt;
;4CF0h&lt;br /&gt;
;4CF3h&lt;br /&gt;
;4CF6h&lt;br /&gt;
;4CF9h&lt;br /&gt;
;4CFCh&lt;br /&gt;
;4CFFh&lt;br /&gt;
;4D02h&lt;br /&gt;
;4D05h&lt;br /&gt;
;4D08h&lt;br /&gt;
;4D0Bh&lt;br /&gt;
;4D0Eh&lt;br /&gt;
;4D11h&lt;br /&gt;
;4D14h&lt;br /&gt;
;4D17h&lt;br /&gt;
;4D1Ah&lt;br /&gt;
;4D1Dh&lt;br /&gt;
;4D20h&lt;br /&gt;
;4D23h&lt;br /&gt;
_AppScreenUpDown	equ 4D26h ;shifts screen up/down, A is LCD row, H is number of lines to shift, (OP1)-(OP1+3) are something&lt;br /&gt;
_AppScreenUpDown1	equ 4D29h ;shifts screen up/down, but really no clue what the inputs are (all registers and (OP1)-(OP1+3))&lt;br /&gt;
;4D2Ch&lt;br /&gt;
_initsmalleditlinevar	equ 4D2Fh&lt;br /&gt;
_initsmalleditlineop1	equ 4D32h&lt;br /&gt;
_initsmalleditboxvar	equ 4D35h&lt;br /&gt;
_initsmalleditboxop1	equ 4D38h&lt;br /&gt;
;4D3Bh&lt;br /&gt;
_RestartDialog		equ 4D3Eh&lt;br /&gt;
_ErrCustom1		equ 4D41h&lt;br /&gt;
_ErrCustom2		equ 4D44h&lt;br /&gt;
_AppStartMouse		equ 4D47h&lt;br /&gt;
_AppStartMouseNoSetup	equ 4D4Ah&lt;br /&gt;
_AppMouseGetKey		equ 4D4Dh&lt;br /&gt;
_AppDispMouse		equ 4D50h&lt;br /&gt;
_AppEraseMouse		equ 4D53h&lt;br /&gt;
_AppSetupMouseMem	equ 4D56h&lt;br /&gt;
_GetDispRowOffset	equ 4D59h ;HL=A*12 (intended for A to be row and HL becomes offset into plotSScreen)&lt;br /&gt;
_ClearRect		equ 4D5Ch&lt;br /&gt;
_InvertRect		equ 4D5Fh&lt;br /&gt;
_FillRect		equ 4D62h&lt;br /&gt;
_AppUpdateMouse		equ 4D65h&lt;br /&gt;
_AppDispPrevMouse	equ 4D68h ;might bring previous keypress's movement to current coordinates with flags to not display&lt;br /&gt;
;4D6Bh ;restores some cursor flags and stuff&lt;br /&gt;
_initcellbox		equ 4D6Eh&lt;br /&gt;
_drawcell		equ 4D71h&lt;br /&gt;
;4D74h&lt;br /&gt;
_invertcell		equ 4D77h&lt;br /&gt;
_setcelloverride	equ 4D7Ah&lt;br /&gt;
_DrawRectBorder		equ 4D7Dh&lt;br /&gt;
_ClearCell		equ 4D80h&lt;br /&gt;
_covercell		equ 4D83h&lt;br /&gt;
_EraseRectBorder	equ 4D86h&lt;br /&gt;
_FillRectPattern	equ 4D89h&lt;br /&gt;
_DrawRectBorderClear	equ 4D8Ch&lt;br /&gt;
;4D8Fh ;mouse subroutine&lt;br /&gt;
;4D92h&lt;br /&gt;
_VerticalLine		equ 4D95h&lt;br /&gt;
_IBoundsFull		equ 4D98h&lt;br /&gt;
_DisplayImage		equ 4D9Bh&lt;br /&gt;
;4D9Eh ;does something dumb with ports 10h/11h&lt;br /&gt;
;4DA1h ;mouse subroutine&lt;br /&gt;
_AppUpdateMouseCoords	equ 4DA4h&lt;br /&gt;
_ShiftBitsLeft		equ 4DA7h ;mouse subroutine, shifts B bits left from DE sprite to HL one&lt;br /&gt;
;4DAAh ;mouse subroutine&lt;br /&gt;
;4DADh ;mouse subroutine&lt;br /&gt;
;4DB0h ;mouse subroutine&lt;br /&gt;
;4DB3h ;mouse subroutine&lt;br /&gt;
;4DB6h ;mouse subroutine&lt;br /&gt;
;4DB9h ;mouse subroutine&lt;br /&gt;
;4DBCh ;mouse subroutine&lt;br /&gt;
_AppUpdateMouseRow	equ 4DBFh&lt;br /&gt;
_AppDrawMouse		equ 4DC2h ;set 2,(iy+2Ch) for AppEraseMouse, reset for AppDispMouse&lt;br /&gt;
_AppDrawMouseDirect	equ 4DC5h ;pretty much _AppDrawMouse, but you pass LCD column in A&lt;br /&gt;
_CPoint			equ 4DC8h&lt;br /&gt;
_DeleteApp		equ 4DCBh&lt;br /&gt;
_AppUpdateMouseXY	equ 4DCEh&lt;br /&gt;
_setmodecellflag	equ 4DD1h&lt;br /&gt;
_resetmodecellflag	equ 4DD4h&lt;br /&gt;
_ismodecellset		equ 4DD7h&lt;br /&gt;
_getmodecellflag	equ 4DDAh&lt;br /&gt;
;4DDDh&lt;br /&gt;
_CellBoxManager		equ 4DE0h&lt;br /&gt;
_startnewcell		equ 4DE3h&lt;br /&gt;
;4DE6h&lt;br /&gt;
_CellCursorHandle	equ 4DE9h&lt;br /&gt;
;4DECh&lt;br /&gt;
;4DEFh&lt;br /&gt;
_ClearCurCell		equ 4DF2h&lt;br /&gt;
_drawcurcell		equ 4DF5h&lt;br /&gt;
_invertcurcell		equ 4DF8h&lt;br /&gt;
_covercurcell		equ 4DFBh&lt;br /&gt;
_BlinkCell		equ 4DFEh&lt;br /&gt;
_BlinkCellNoLookUp	equ 4E01h&lt;br /&gt;
_BlinkCurCell		equ 4E04h&lt;br /&gt;
_BlinkCellToOn		equ 4E07h&lt;br /&gt;
_BlinkCellToOnNoLookUp	equ 4E0Ah&lt;br /&gt;
_BlinkCurCellToOn	equ 4E0Dh&lt;br /&gt;
_BlinkCellToOff		equ 4E10h&lt;br /&gt;
_BlinkCellToOffNoLookUp equ 4E13h&lt;br /&gt;
_BlinkCurCellToOff	equ 4E16h&lt;br /&gt;
_getcurmodecellflag	equ 4E19h&lt;br /&gt;
;4E1Ch&lt;br /&gt;
_startsmalleditreturn	equ 4E1Fh&lt;br /&gt;
;4E22h&lt;br /&gt;
;4E25h&lt;br /&gt;
_CellkHandle		equ 4E28h&lt;br /&gt;
_errchkalphabox		equ 4E2Bh&lt;br /&gt;
;4E2Eh&lt;br /&gt;
;4E31h&lt;br /&gt;
;4E34h&lt;br /&gt;
;4E37h&lt;br /&gt;
_eraseallcells		equ 4E3Ah&lt;br /&gt;
_iscurmodecellset	equ 4E3Dh&lt;br /&gt;
;4E40h&lt;br /&gt;
_initalphabox		equ 4E43h&lt;br /&gt;
;4E46h&lt;br /&gt;
;4E49h&lt;br /&gt;
_drawblnkcell		equ 4E4Ch&lt;br /&gt;
_ClearBlnkCell		equ 4E4Fh&lt;br /&gt;
_invertblnkcell		equ 4E52h&lt;br /&gt;
_AppMouseForceKey	equ 4E55h&lt;br /&gt;
_AppSetupMouseMemCoords	equ 4E58h ;this is _AppSetupMouseMem except you pass starting coordinates in HL&lt;br /&gt;
_AppMoveMouse		equ 4E5Bh ;this is _AppMouseForceKey and then updating coordinates&lt;br /&gt;
_GetStringInput		equ 4E5Eh&lt;br /&gt;
_GetStringInput2	equ 4E61h&lt;br /&gt;
_WaitEnterKeyValue	equ 4E64h&lt;br /&gt;
_HorizontalLine		equ 4E67h&lt;br /&gt;
_CreateAppVar		equ 4E6Ah&lt;br /&gt;
_CreateProtProg		equ 4E6Dh&lt;br /&gt;
_CreateVar		equ 4E70h&lt;br /&gt;
_AsmComp		equ 4E73h&lt;br /&gt;
_GetAsmSize		equ 4E76h&lt;br /&gt;
_SquishPrgm		equ 4E79h&lt;br /&gt;
_ExecutePrgm		equ 4E7Ch&lt;br /&gt;
_ChkFindSymAsm		equ 4E7Fh&lt;br /&gt;
_ParsePrgmName		equ 4E82h&lt;br /&gt;
_CSub			equ 4E85h&lt;br /&gt;
_CAdd			equ 4E88h&lt;br /&gt;
_CSqaure		equ 4E8Bh&lt;br /&gt;
_CMult			equ 4E8Eh&lt;br /&gt;
_CRecip			equ 4E91h&lt;br /&gt;
_CDiv			equ 4E94h&lt;br /&gt;
_CAbs			equ 4E97h&lt;br /&gt;
_AddSquares		equ 4E9Ah&lt;br /&gt;
_CSqRoot		equ 4E9Dh&lt;br /&gt;
_CLN			equ 4EA0h&lt;br /&gt;
_CLog			equ 4EA3h&lt;br /&gt;
_CTenX			equ 4EA6h&lt;br /&gt;
_CEtoX			equ 4EA9h&lt;br /&gt;
_CXrootY		equ 4EACh&lt;br /&gt;
;4EAFh&lt;br /&gt;
_CYtoX			equ 4EB2h&lt;br /&gt;
_InvertNonReal		equ 4EB5h&lt;br /&gt;
_CplxMult		equ 4EB8h&lt;br /&gt;
_CplxDiv		equ 4EBBh&lt;br /&gt;
_CplxTrunc		equ 4EBEh&lt;br /&gt;
_CplxFrac		equ 4EC1h&lt;br /&gt;
_CplxFloor		equ 4EC4h&lt;br /&gt;
_SendHeaderPacket	equ 4EC7h&lt;br /&gt;
_CancelTransmission	equ 4ECAh&lt;br /&gt;
_SendScreenContents	equ 4ECDh&lt;br /&gt;
_SendRAMVarData		equ 4ED0h&lt;br /&gt;
_SendRAMCmd		equ 4ED3h&lt;br /&gt;
_SendPacket		equ 4ED6h&lt;br /&gt;
_ReceiveAck		equ 4ED9h&lt;br /&gt;
_Send4BytePacket	equ 4EDCh&lt;br /&gt;
_SendDataByte		equ 4EDFh&lt;br /&gt;
_Send4Bytes		equ 4EE2h&lt;br /&gt;
_SendAByte		equ 4EE5h&lt;br /&gt;
_SendCByte		equ 4EE8h&lt;br /&gt;
_GetSmallPacket		equ 4EEBh&lt;br /&gt;
_GetDataPacket		equ 4EEEh&lt;br /&gt;
_SendAck		equ 4EF1h&lt;br /&gt;
_Get4Bytes		equ 4EF4h&lt;br /&gt;
_Get3Bytes		equ 4EF7h&lt;br /&gt;
_Rec1stByte		equ 4EFAh&lt;br /&gt;
_Rec1stByteNC		equ 4EFDh&lt;br /&gt;
_ContinueGetByte	equ 4F00h&lt;br /&gt;
_RecAByteIO		equ 4F03h&lt;br /&gt;
_ReceiveVar		equ 4F06h&lt;br /&gt;
_ReceiveVarDataExists	equ 4F09h&lt;br /&gt;
_ReceiveVarData		equ 4F0Ch&lt;br /&gt;
_SrchVLstUp		equ 4F0Fh&lt;br /&gt;
_SrchVLstDn		equ 4F12h&lt;br /&gt;
_SendVariable		equ 4F15h&lt;br /&gt;
_Get4BytesCursor	equ 4F18h&lt;br /&gt;
_Get4BytesNC		equ 4F1Bh&lt;br /&gt;
_Convert85List		equ 4F1Eh&lt;br /&gt;
_SendDirectoryContents	equ 4F21h&lt;br /&gt;
_SendReadyPacket	equ 4F24h&lt;br /&gt;
_Convert85Real		equ 4F27h&lt;br /&gt;
_ret_6			equ 4F2Ah&lt;br /&gt;
_SendCertificate	equ 4F2Dh ;sends certificate in header/data packets, Flash must be unlocked, used with sending an application in LINK menu&lt;br /&gt;
_SendApplication	equ 4F30h&lt;br /&gt;
_SendOSHeader		equ 4F33h&lt;br /&gt;
_SendOSPage		equ 4F36h&lt;br /&gt;
_SendOS			equ 4F39h&lt;br /&gt;
_FlashWriteDisable	equ 4F3Ch&lt;br /&gt;
_SendCmd		equ 4F3Fh&lt;br /&gt;
_SendOSValidationData	equ 4F42h&lt;br /&gt;
_Disp			equ 4F45h&lt;br /&gt;
_SendGetkeyPress	equ 4F48h&lt;br /&gt;
_RejectCommand		equ 4F4Bh&lt;br /&gt;
_CheckLinkLines		equ 4F4Eh&lt;br /&gt;
_GetHookByte		equ 4F51h&lt;br /&gt;
_GetBytePaged		equ 4F54h&lt;br /&gt;
_cursorhook		equ 4F57h&lt;br /&gt;
_call_library_hook	equ 4F5Ah&lt;br /&gt;
_call_rawkey_hook	equ 4F5Dh&lt;br /&gt;
_setCursorHook		equ 4F60h ;enable cursor hook&lt;br /&gt;
_EnableLibraryHook	equ 4F63h&lt;br /&gt;
_SetGetKeyHook		equ 4F66h&lt;br /&gt;
_ClrCursorHook		equ 4F69h&lt;br /&gt;
_DisableLibraryHook	equ 4F6Ch&lt;br /&gt;
_ClrRawKeyHook  	equ 4F6Fh&lt;br /&gt;
_ResetHookBytes		equ 4F72h&lt;br /&gt;
_AdjustAllHooks		equ 4F75h&lt;br /&gt;
_getkeyhook		equ 4F78h&lt;br /&gt;
_SetGetcscHook		equ 4F7Bh&lt;br /&gt;
_ClrGetKeyHook		equ 4F7Eh&lt;br /&gt;
_call_linkactivity_hook	equ 4F81h&lt;br /&gt;
_EnableLinkActivityHook	equ 4F84h&lt;br /&gt;
_DisableLinkHook	equ 4F87h&lt;br /&gt;
_GetSmallPacket2	equ 4F8Ah&lt;br /&gt;
_EnableCatalog2Hook	equ 4F8Dh&lt;br /&gt;
_DisableCatalog2Hook	equ 4F90h&lt;br /&gt;
_EnableLocalizeHook	equ 4F93h&lt;br /&gt;
_DisableLocalizeHook	equ 4F96h&lt;br /&gt;
_SetTokenHook		equ 4F99h&lt;br /&gt;
_ClearTokenHook		equ 4F9Ch&lt;br /&gt;
;4F9Fh ld hl,92c6 / ld a,(92c5) / res 2,a / cp (hl) / ret&lt;br /&gt;
;4FA2h hl=11*(92fc)+92c9 / ld a,(hl) / and Fh / cp 2 / ret ; I can almost guarantee this is stat plot related&lt;br /&gt;
_DispListElementOffLA	equ 4FA5h&lt;br /&gt;
_Bit_VertSplit		equ 4FA8h&lt;br /&gt;
_SetHomescreenHook	equ 4FABh&lt;br /&gt;
_ClrHomeScreenHook	equ 4FAEh&lt;br /&gt;
_SetWindowHook		equ 4FB1h&lt;br /&gt;
_DisableWindowHook	equ 4FB4h&lt;br /&gt;
_SetGraphModeHook	equ 4FB7h&lt;br /&gt;
_DisableGraphHook	equ 4FBAh&lt;br /&gt;
_ParseAndStoreSysVar	equ 4FBDh&lt;br /&gt;
_DisplayEditSysVar	equ 4FC0h&lt;br /&gt;
_JForceWindowSettings	equ 4FC3h&lt;br /&gt;
_DelVarArc		equ 4FC6h&lt;br /&gt;
_DelVarNoArc		equ 4FC9h&lt;br /&gt;
_SetAllPlots		equ 4FCCh&lt;br /&gt;
_SetYeditHook     	equ 4FCFh&lt;br /&gt;
_DisableYEquHook	equ 4FD2h&lt;br /&gt;
_JForceYEqu		equ 4FD5h&lt;br /&gt;
_Arc_Unarc		equ 4FD8h ;checks for low battery&lt;br /&gt;
_ArchiveVar		equ 4FDBh ;set 0,(iy+24h) to check for low battery first&lt;br /&gt;
_UnarchiveVar		equ 4FDEh&lt;br /&gt;
_DialogKeyHook		equ 4FE1h ;rawkey hook used by OS for dialog context&lt;br /&gt;
_SetFontHook		equ 4FE4h&lt;br /&gt;
_ClrFontHook		equ 4FE7h&lt;br /&gt;
_SetRegraphHook		equ 4FEAh&lt;br /&gt;
_DisableRegraphHook	equ 4FEDh&lt;br /&gt;
_RunGraphingHook	equ 4FF0h&lt;br /&gt;
_SetTraceHook		equ 4FF3h&lt;br /&gt;
_DisableTraceHook	equ 4FF6h&lt;br /&gt;
_RunTraceHook		equ 4FF9h&lt;br /&gt;
_NDeriv			equ 4FFCh&lt;br /&gt;
_PolarDerivative	equ 4FFFh&lt;br /&gt;
_JForceGraphNoKey	equ 5002h&lt;br /&gt;
_JForceGraphKey		equ 5005h&lt;br /&gt;
_PowerOff		equ 5008h&lt;br /&gt;
_GetKeyRetOff		equ 500Bh ;same as getkey, only returns kOff if 2nd+on is pressed &lt;br /&gt;
_FindGroupSym		equ 500Eh&lt;br /&gt;
_FillBasePageTable	equ 5011h&lt;br /&gt;
_ArcChk			equ 5014h&lt;br /&gt;
_FlashToRam		equ 5017h&lt;br /&gt;
_LoadDEIndPaged		equ 501Ah&lt;br /&gt;
_LoadCIndPaged		equ 501Dh&lt;br /&gt;
_SetupPagedPtr		equ 5020h&lt;br /&gt;
_PagedGet		equ 5023h&lt;br /&gt;
_SetParserHook		equ 5026h&lt;br /&gt;
_ClearParserHook	equ 5029h&lt;br /&gt;
_SetAppChangeHook 	equ 502Ch&lt;br /&gt;
_ClearAppChangeHook	equ 502Fh&lt;br /&gt;
_EnableGraphicsHook	equ 5032h&lt;br /&gt;
_DisableGraphicsHook	equ 5035h&lt;br /&gt;
_IPointNoGraphicsHook	equ 5038h&lt;br /&gt;
_ILineNoHook		equ 503Bh&lt;br /&gt;
;503Eh&lt;br /&gt;
_DeleteTempPrograms	equ 5041h&lt;br /&gt;
_EnableCatalog1Hook	equ 5044h&lt;br /&gt;
_DisableCatalog1Hook	equ 5047h&lt;br /&gt;
_EnableHelpHook		equ 504Ah&lt;br /&gt;
_DisableHelpHook	equ 504Dh&lt;br /&gt;
_DispCatalogEnd		equ 5050h&lt;br /&gt;
_GetMenuKeypress	equ 5053h&lt;br /&gt;
_GetCatalogItem		equ 5056h&lt;br /&gt;
_RunCatalog2Hook	equ 5059h&lt;br /&gt;
_RunCatalog1Hook	equ 505Ch&lt;br /&gt;
;505Fh&lt;br /&gt;
;5062h&lt;br /&gt;
_dispMenuTitle		equ 5065h&lt;br /&gt;
;5068h&lt;br /&gt;
_EnablecxRedispHook	equ 506Bh&lt;br /&gt;
_DisablecxRedispHook	equ 506Eh&lt;br /&gt;
_BufCpy			equ 5071h&lt;br /&gt;
_BufClr			equ 5074h&lt;br /&gt;
_UnOPExec2		equ 5077h&lt;br /&gt;
_BinOPExec2		equ 507Ah&lt;br /&gt;
_LoadMenuB		equ 507Dh ;clears screen and loads menu from B, plus a couple flag changes&lt;br /&gt;
_DisplayVarInfo		equ 5080h&lt;br /&gt;
_SetMenuHook		equ 5083h&lt;br /&gt;
_ClearMenuHook		equ 5086h&lt;br /&gt;
_getBCOffsetIX		equ 5089h&lt;br /&gt;
_GetBCOffsetIX2		equ 508Ch&lt;br /&gt;
_ForceFullScreen	equ 508Fh&lt;br /&gt;
_GetVariableData	equ 5092h&lt;br /&gt;
_FindSwapSector		equ 5095h&lt;br /&gt;
_CopyFlashPage		equ 5098h&lt;br /&gt;
_FindAppNumPages	equ 509Bh&lt;br /&gt;
_HLMinus5		equ 509Eh&lt;br /&gt;
_SendArcPacket		equ 50A1h&lt;br /&gt;
_ForceGraphKeypress	equ 50A4h&lt;br /&gt;
_DoNothing3		equ 50A7h&lt;br /&gt;
_FormBase		equ 50AAh&lt;br /&gt;
;50ADh&lt;br /&gt;
_IsFragmented		equ 50B0h&lt;br /&gt;
_Chk_Batt_Low		equ 50B3h&lt;br /&gt;
_Chk_Batt_Low_2		equ 50B6h&lt;br /&gt;
_Arc_Unarc2		equ 50B9h ;identical to _Arc_Unarc, except you can choose to res 0,(iy+24h) to skip low battery check&lt;br /&gt;
_GetAppBasePage		equ 50BCh ;input: a=one of an app's pages. output: a=app's first page&lt;br /&gt;
_SetExSpeed		equ 50BFh&lt;br /&gt;
_RclExit		equ 50C2h&lt;br /&gt;
_GroupAllVars		equ 50C5h&lt;br /&gt;
_UngroupVar		equ 50C8h&lt;br /&gt;
_WriteToFlash		equ 50CBh ;ReceiveApplication or something like that on OSes below 2.40&lt;br /&gt;
_SetSilentLinkHook	equ 50CEh&lt;br /&gt;
_DisableSilentLinkHook	equ 50D1h&lt;br /&gt;
_TwoVarSet		equ 50D4h&lt;br /&gt;
_ExecClassCToken	equ 50D7h&lt;br /&gt;
_ExecClass3Token	equ 50DAh&lt;br /&gt;
_GetSysInfo		equ 50DDh&lt;br /&gt;
_NZIf83Plus		equ 50E0h&lt;br /&gt;
_LinkStatus		equ 50E3h&lt;br /&gt;
_DoNothing2		equ 50E6h ;originally for TI-Navigator&lt;br /&gt;
_KeyboardGetKey		equ 50E9h&lt;br /&gt;
_RunAppLib		equ 50ECh&lt;br /&gt;
_FindSpecialAppHeader	equ 50EFh&lt;br /&gt;
_SendUSBData		equ 50F2h&lt;br /&gt;
_AppGetCBLUSB		equ 50F5h&lt;br /&gt;
_AppGetCalcUSB		equ 50F8h&lt;br /&gt;
_GetVarCmdUSB		equ 50FBh&lt;br /&gt;
;50FEh&lt;br /&gt;
_TenX2			equ 5101h&lt;br /&gt;
;5104h&lt;br /&gt;
;5107h&lt;br /&gt;
_GetVarVersion		equ 510Ah&lt;br /&gt;
;510Dh&lt;br /&gt;
;5110h&lt;br /&gt;
_DeleteTempEditEqu	equ 5113h&lt;br /&gt;
_JcursorFirst2		equ 5116h&lt;br /&gt;
;5119h&lt;br /&gt;
_PromptMoveBackLeft	equ 511Ch&lt;br /&gt;
_wputsEOL2		equ 511Fh ;same except res 0,(iy+0Eh) first&lt;br /&gt;
_InvertTextInsMode	equ 5122h&lt;br /&gt;
;5125h&lt;br /&gt;
_ResetDefaults		equ 5128h&lt;br /&gt;
_ZeroFinanceVars	equ 512Bh&lt;br /&gt;
_DispHeader		equ 512Eh&lt;br /&gt;
_JForceGroup		equ 5131h&lt;br /&gt;
;5134h&lt;br /&gt;
;5137h&lt;br /&gt;
_DispCoords		equ 513Ah&lt;br /&gt;
;513Dh&lt;br /&gt;
;5140h&lt;br /&gt;
_chkTmr			equ 5143h&lt;br /&gt;
;5146h&lt;br /&gt;
;5149h&lt;br /&gt;
;514Ch&lt;br /&gt;
_getDate		equ 514Fh&lt;br /&gt;
_GetDateString		equ 5152h&lt;br /&gt;
_getDtFmt		equ 5155h&lt;br /&gt;
_getDtStr		equ 5158h&lt;br /&gt;
_getTime		equ 515Bh&lt;br /&gt;
_GetTimeString		equ 515Eh&lt;br /&gt;
_getTmFmt		equ 5161h&lt;br /&gt;
_getTmStr		equ 5164h&lt;br /&gt;
_SetZeroOne		equ 5167h&lt;br /&gt;
_setDate		equ 516Ah&lt;br /&gt;
_IsOneTwoThree		equ 516Dh&lt;br /&gt;
_setTime		equ 5170h&lt;br /&gt;
_IsOP112or24		equ 5173h&lt;br /&gt;
_chkTimer0		equ 5176h&lt;br /&gt;
_timeCnv		equ 5179h&lt;br /&gt;
_GetLToOP1Extra		equ 517Ch&lt;br /&gt;
_ClrWindowAndFlags	equ 517Fh&lt;br /&gt;
_SetMachineID		equ 5182h&lt;br /&gt;
_ResetLists		equ 5185h&lt;br /&gt;
_DispValue		equ 5188h&lt;br /&gt;
;518Bh&lt;br /&gt;
;518Eh&lt;br /&gt;
_ExecLib		equ 5191h&lt;br /&gt;
;5194h&lt;br /&gt;
_CPOP1OP2Rounded	equ 5197h&lt;br /&gt;
_CPOP1OP2Rounded2	equ 519Ah&lt;br /&gt;
_OpenLib		equ 519Dh&lt;br /&gt;
;51A0h&lt;br /&gt;
;51A3h&lt;br /&gt;
_ResetIOPrompt		equ 51A6h&lt;br /&gt;
_StrCpyVarData		equ 51A9h&lt;br /&gt;
_SetUpEditor		equ 51ACh&lt;br /&gt;
_SortA			equ 51AFh&lt;br /&gt;
_SortD			equ 51B2h&lt;br /&gt;
;51B5h&lt;br /&gt;
_IsOP1ResID		equ 51B8h&lt;br /&gt;
_ListEdNameCxMain	equ 51BBh&lt;br /&gt;
_ListEdEnterNewName	equ 51BEh&lt;br /&gt;
;51C1h&lt;br /&gt;
_ForceModeKeypress	equ 51C4h ;forces a keypress (and calls help hook) on any of several mode-setting contexts&lt;br /&gt;
_DispAboutScreen	equ 51C7h&lt;br /&gt;
_ChkHelpHookVer		equ 51CAh&lt;br /&gt;
_Disp32			equ 51CDh&lt;br /&gt;
;51D0h&lt;br /&gt;
;51D3h&lt;br /&gt;
;51D6h&lt;br /&gt;
;51D9h&lt;br /&gt;
_DrawTableEditor	equ 51DCh ;draws table editor lines&lt;br /&gt;
_DisplayListNameEquals	equ 51DFh&lt;br /&gt;
_DisplayListHeader	equ 51E2h&lt;br /&gt;
_DispMatrixDimensions	equ 51E5h&lt;br /&gt;
_HighlightListEdItem	equ 51E8h&lt;br /&gt;
;51EBh&lt;br /&gt;
;51EEh&lt;br /&gt;
_MatrixName		equ 51F1h&lt;br /&gt;
;51F4h&lt;br /&gt;
;51F7h&lt;br /&gt;
;51FAh&lt;br /&gt;
;51FDh&lt;br /&gt;
;5200h&lt;br /&gt;
;5203h&lt;br /&gt;
;5206h&lt;br /&gt;
;5209h&lt;br /&gt;
;520Ch&lt;br /&gt;
;520Fh&lt;br /&gt;
_SetupEmptyEditTempEqu	equ 5212h&lt;br /&gt;
_ExecClass1Token	equ 5215h&lt;br /&gt;
_HandleMathTokenParse	equ 5218h&lt;br /&gt;
_MaybePushMultiplyOp	equ 521Bh&lt;br /&gt;
_RestartParseOP1Result	equ 521Eh&lt;br /&gt;
_Chk_Batt_Level		equ 5221h&lt;br /&gt;
;5224h&lt;br /&gt;
;5227h&lt;br /&gt;
;522Ah&lt;br /&gt;
_DisplayListEquals	equ 522Dh&lt;br /&gt;
_GetCurPlotListOffset	equ 5230h&lt;br /&gt;
_GoToLastRow		equ 5233h&lt;br /&gt;
_RectBorder		equ 5236h&lt;br /&gt;
;5239h&lt;br /&gt;
;523Ch&lt;br /&gt;
;523Fh&lt;br /&gt;
_LoadA5			equ 5242h&lt;br /&gt;
;5245h&lt;br /&gt;
_NamedListToOP1		equ 5248h&lt;br /&gt;
;524Bh&lt;br /&gt;
;524Eh&lt;br /&gt;
;5251h&lt;br /&gt;
_InitUSBDeviceCallback	equ 5254h&lt;br /&gt;
_KillUSBDevice		equ 5257h ;this actually recycles the USB connection and re-inits it (I think)&lt;br /&gt;
_SetUSBConfiguration	equ 525Ah&lt;br /&gt;
_RequestUSBData		equ 525Dh&lt;br /&gt;
_StopReceivingUSBData	equ 5260h&lt;br /&gt;
_FindAppHeaderByPage	equ 5263h&lt;br /&gt;
_FindNextHeaderByPage	equ 5266h&lt;br /&gt;
_IsMatchingLaunchApp	equ 5269h&lt;br /&gt;
_InitTimer		equ 526Ch&lt;br /&gt;
_KillTimer		equ 526Fh&lt;br /&gt;
_StartTimer		equ 5272h&lt;br /&gt;
_RestartTimer		equ 5275h&lt;br /&gt;
_StopTimer		equ 5278h&lt;br /&gt;
_WaitTimer		equ 527Bh&lt;br /&gt;
_CheckTimer		equ 527Eh&lt;br /&gt;
_CheckTimerRestart	equ 5281h&lt;br /&gt;
_SetVertGraphActive	equ 5284h&lt;br /&gt;
_ClearVertGraphActive	equ 5287h&lt;br /&gt;
_EnableUSBHook		equ 528Ah&lt;br /&gt;
_DisableUSBHook		equ 528Dh&lt;br /&gt;
_InitUSBDevice		equ 5290h&lt;br /&gt;
_KillUSBPeripheral	equ 5293h&lt;br /&gt;
_GetCurPlotListOffset2	equ 5296h&lt;br /&gt;
;5299h&lt;br /&gt;
_GraphLine		equ 529Ch&lt;br /&gt;
;529Fh&lt;br /&gt;
;52A2h&lt;br /&gt;
;52A5h&lt;br /&gt;
;52A8h&lt;br /&gt;
;52ABh&lt;br /&gt;
;52AEh&lt;br /&gt;
_ZifTableEditor		equ 52B1h&lt;br /&gt;
;52B4h&lt;br /&gt;
_GetCurPlotOffset	equ 52B7h&lt;br /&gt;
;52BAh&lt;br /&gt;
_FindAppName		equ 52BDh&lt;br /&gt;
;52C0h&lt;br /&gt;
;52C3h&lt;br /&gt;
_UpdateStatPlotLists	equ 52C6h&lt;br /&gt;
_GrBufCpyCustom		equ 52C9h&lt;br /&gt;
;52CCh&lt;br /&gt;
;52CFh&lt;br /&gt;
;52D2h&lt;br /&gt;
_VDispRealOP1		equ 52D5h&lt;br /&gt;
_DispXEqualsNum		equ 52D8h&lt;br /&gt;
_ResetGraphSettings	equ 52DBh&lt;br /&gt;
_InitializeVariables	equ 52DEh&lt;br /&gt;
;52E1h ;bit 4,(9C75h) (this is DEFINITELY returning the status of something when acting as a TI-SmartView Input Pad...this bit is bit 1 of the data byte from a PC HID Set Report request)&lt;br /&gt;
_DelVarSym		equ 52E4h&lt;br /&gt;
_FindAppUpNoCase	equ 52E7h&lt;br /&gt;
_FindAppDnNoCase	equ 52EAh&lt;br /&gt;
_DeleteInvalidApps	equ 52EDh&lt;br /&gt;
_DeleteApp_Link		equ 52F0h&lt;br /&gt;
_CmpSymsNoCase		equ 52F3h&lt;br /&gt;
_SetAppRestrictions	equ 52F6h&lt;br /&gt;
_RemoveAppRestrictions	equ 52F9h&lt;br /&gt;
_QueryAppRestrictions	equ 52FCh&lt;br /&gt;
_DispAppRestrictions	equ 52FFh&lt;br /&gt;
_SetupHome		equ 5302h&lt;br /&gt;
_GRPUTAWAYFull		equ 5305h ;same as _GRPUTAWAY except it assumes no split screen&lt;br /&gt;
_SendSmartPadKeypress	equ 5308h ;B and A are the inputs&lt;br /&gt;
_ToggleUSBSmartPadInput	equ 530Bh ;A is input, 0 or 1 to enable/disable&lt;br /&gt;
_IsUSBDeviceConnected	equ 530Eh ;bit 4,(81h) \ ret, this is just a guess on its purpose but it seems to work&lt;br /&gt;
_RecycleUSB		equ 5311h ;identical to 5257h&lt;br /&gt;
_PolarEquToOP1		equ 5314h&lt;br /&gt;
_ParamXEquToOP1		equ 5317h&lt;br /&gt;
_ParamYEquToOP1		equ 531Ah&lt;br /&gt;
_GetRestrictionsOptions	equ 531Dh&lt;br /&gt;
_DispResetComplete	equ 5320h&lt;br /&gt;
_PTTReset		equ 5323h&lt;br /&gt;
_FindAppCustom		equ 5326h&lt;br /&gt;
_ClearGraphStyles	equ 5329h&lt;br /&gt;
;532Ch&lt;br /&gt;
;532Fh&lt;br /&gt;
;5332h&lt;br /&gt;
;5335h&lt;br /&gt;
;5338h&lt;br /&gt;
;533Bh&lt;br /&gt;
;533Eh&lt;br /&gt;
;5341h&lt;br /&gt;
;5344h&lt;br /&gt;
;5347h&lt;br /&gt;
;534Ah&lt;br /&gt;
;534Dh&lt;br /&gt;
;5350h&lt;br /&gt;
;5353h&lt;br /&gt;
;5356h&lt;br /&gt;
;5359h&lt;br /&gt;
;535Ch&lt;br /&gt;
;535Fh&lt;br /&gt;
;5362h&lt;br /&gt;
;5365h&lt;br /&gt;
;5368h&lt;br /&gt;
;536Bh&lt;br /&gt;
;536Eh&lt;br /&gt;
;5371h&lt;br /&gt;
;5374h&lt;br /&gt;
;5377h&lt;br /&gt;
;537Ah&lt;br /&gt;
;537Dh&lt;br /&gt;
;5380h&lt;br /&gt;
;5383h&lt;br /&gt;
;5386h&lt;br /&gt;
;5389h&lt;br /&gt;
;538Ch&lt;br /&gt;
;538Fh&lt;br /&gt;
;5392h&lt;br /&gt;
;5395h&lt;br /&gt;
;5398h&lt;br /&gt;
;539Bh&lt;br /&gt;
;539Eh&lt;br /&gt;
;53A1h&lt;br /&gt;
;53A4h&lt;br /&gt;
;53A7h&lt;br /&gt;
;53AAh&lt;br /&gt;
;53ADh&lt;br /&gt;
;53B0h&lt;br /&gt;
;53B3h&lt;br /&gt;
;53B6h&lt;br /&gt;
;53B9h&lt;br /&gt;
;53BCh&lt;br /&gt;
;53BFh&lt;br /&gt;
;53C2h&lt;br /&gt;
;53C5h&lt;br /&gt;
;53C8h&lt;br /&gt;
;53CBh&lt;br /&gt;
;53CEh&lt;br /&gt;
;53D1h&lt;br /&gt;
;53D4h&lt;br /&gt;
;53D7h&lt;br /&gt;
;53DAh&lt;br /&gt;
;53DDh&lt;br /&gt;
;53E0h&lt;br /&gt;
;53E3h&lt;br /&gt;
;53E6h&lt;br /&gt;
;53E9h&lt;br /&gt;
;53ECh&lt;br /&gt;
;53EFh&lt;br /&gt;
;53F2h&lt;br /&gt;
;53F5h&lt;br /&gt;
;53F8h&lt;br /&gt;
;53FBh&lt;br /&gt;
;53FEh&lt;br /&gt;
;5401h&lt;br /&gt;
;5404h&lt;br /&gt;
;5407h&lt;br /&gt;
;540Ah&lt;br /&gt;
;540Dh&lt;br /&gt;
;5410h&lt;br /&gt;
;5413h&lt;br /&gt;
;5416h&lt;br /&gt;
;5419h&lt;br /&gt;
;541Ch&lt;br /&gt;
;541Fh&lt;br /&gt;
;5422h&lt;br /&gt;
;5425h&lt;br /&gt;
;5428h&lt;br /&gt;
;542Bh&lt;br /&gt;
;542Eh&lt;br /&gt;
;5431h&lt;br /&gt;
;5434h&lt;br /&gt;
;5437h&lt;br /&gt;
;543Ah&lt;br /&gt;
;543Dh&lt;br /&gt;
;5440h&lt;br /&gt;
;5443h&lt;br /&gt;
;5446h&lt;br /&gt;
;5449h&lt;br /&gt;
_xorAret			equ 5443h&lt;br /&gt;
_scfRet				equ 5446h&lt;br /&gt;
_ret				equ 5449h&lt;br /&gt;
&lt;br /&gt;
;Page 1Fh ROM Calls&lt;br /&gt;
;--------------------------------&lt;br /&gt;
bootbtf				equ 8000h&lt;br /&gt;
;400Fh may point to version string (&amp;quot;1.02 &amp;quot;,0)&lt;br /&gt;
_MD5Final			equ 8018h&lt;br /&gt;
_RSAValidate			equ 801Bh&lt;br /&gt;
_cmpStr				equ 801Eh ;BigNumCompare&lt;br /&gt;
_WriteAByte			equ 8021h&lt;br /&gt;
_EraseFlash			equ 8024h&lt;br /&gt;
_FindFirstCertField		equ 8027h&lt;br /&gt;
_ZeroToCertificate		equ 802Ah&lt;br /&gt;
_GetCertificateEnd		equ 802Dh&lt;br /&gt;
_FindGroupedField		equ 8030h&lt;br /&gt;
_ret_1				equ 8033h&lt;br /&gt;
_ret_2				equ 8036h&lt;br /&gt;
_ret_3				equ 8039h&lt;br /&gt;
_ret_4				equ 803Ch&lt;br /&gt;
_ret_5				equ 803Fh&lt;br /&gt;
_Mult8By8			equ 8042h&lt;br /&gt;
_Mult16By8			equ 8045h&lt;br /&gt;
_Div16By8			equ 8048h&lt;br /&gt;
_Div16By16			equ 804Bh&lt;br /&gt;
;804Eh ;scary certificate reading and writing, something about calc ID and fields 0A10/0A20&lt;br /&gt;
_LoadAIndPaged			equ 8051h&lt;br /&gt;
_FlashToRam2			equ 8054h&lt;br /&gt;
_GetCertificateStart		equ 8057h&lt;br /&gt;
_GetFieldSize			equ 805Ah&lt;br /&gt;
_FindSubField			equ 805Dh&lt;br /&gt;
_EraseCertificateSector		equ 8060h&lt;br /&gt;
_CheckHeaderKey			equ 8063h&lt;br /&gt;
;8066h ;just returns Z if specified data in field 0310h, subfield 0610h exists, DE points to data of that field you want to find&lt;br /&gt;
;8069h ;just returns number of 0810h/0710h fields that exist in certificate or something, in IX&lt;br /&gt;
_Load_LFontV2			equ 806Ch&lt;br /&gt;
_Load_LFontV			equ 806Fh&lt;br /&gt;
_ReceiveOS			equ 8072h&lt;br /&gt;
_FindOSHeaderSubField		equ 8075h&lt;br /&gt;
_FindNextCertField		equ 8078h&lt;br /&gt;
_GetByteOrBoot			equ 807Bh&lt;br /&gt;
_getSerial			equ 807Eh ;GetCalcSerial&lt;br /&gt;
_ReceiveCalcID			equ 8081h ;receives certificate replacement (including calculator ID, fails if already exists) and writes it, requires Flash unlocked&lt;br /&gt;
_EraseFlashPage			equ 8084h&lt;br /&gt;
_WriteFlashUnsafe		equ 8087h&lt;br /&gt;
_dispBootVer			equ 808Ah&lt;br /&gt;
_MD5Init			equ 808Dh&lt;br /&gt;
_MD5Update			equ 8090h&lt;br /&gt;
_MarkOSInvalid			equ 8093h&lt;br /&gt;
_FindProgramLicense		equ 8096h ;copies 8010h field to appID and other insane stuff that makes zero sense&lt;br /&gt;
_MarkOSValid			equ 8099h&lt;br /&gt;
_CheckOSValidated		equ 809Ch&lt;br /&gt;
_SetupAppPubKey			equ 809Fh&lt;br /&gt;
_SigModR			equ 80A2h&lt;br /&gt;
_TransformHash			equ 80A5h&lt;br /&gt;
_IsAppFreeware			equ 80A8h&lt;br /&gt;
_FindAppHeaderSubField		equ 80ABh&lt;br /&gt;
_WriteValidationNumber		equ 80AEh ;generates two-byte validation number from calc ID and stores to certificate&lt;br /&gt;
_Div32By16			equ 80B1h&lt;br /&gt;
_FindGroup			equ 80B4h ;searches until field of DE-like group is found (DE=0A00h, it stops when it finds 0Ax0h)&lt;br /&gt;
_getBootVer			equ 80B7h&lt;br /&gt;
_getHardwareVersion		equ 80BAh&lt;br /&gt;
_xorA				equ 80BDh ;xor a&lt;br /&gt;
_bignumpowermod17		equ 80C0h&lt;br /&gt;
_ProdNrPart1			equ 80C3h&lt;br /&gt;
_WriteAByteSafe			equ 80C6h&lt;br /&gt;
_WriteFlash			equ 80C9h&lt;br /&gt;
_SetupDateStampPubKey		equ 80CCh&lt;br /&gt;
_SetFlashLowerBound		equ 80CFh&lt;br /&gt;
_LowBatteryBoot			equ 80D2h&lt;br /&gt;
;TI-84 Plus/Silver Edition Only Entry Points&lt;br /&gt;
_AttemptUSBOSReceive		equ 80E4h ;Z to wait for USB cable insert &amp;amp; get OS, NZ and A= contents of port 4Dh or 56h, ON to cancel &amp;amp; clear RAM&lt;br /&gt;
_DisplayBootMessage		equ 80E7h&lt;br /&gt;
_NewLine2			equ 80EAh&lt;br /&gt;
_DisplayBootError10		equ 80EDh&lt;br /&gt;
_Chk_Batt_Low_B			equ 80F0h&lt;br /&gt;
_Chk_Batt_Low_B2		equ 80F3h&lt;br /&gt;
_ReceiveOS_USB			equ 80F6h&lt;br /&gt;
_DisplayOSProgress		equ 80F9h&lt;br /&gt;
_ResetCalc			equ 80FCh&lt;br /&gt;
_SetupOSPubKey			equ 80FFh&lt;br /&gt;
_CheckHeaderKeyHL		equ 8102h ;same as _CheckHeaderKey, only you pass the address of header in HL, not at appData&lt;br /&gt;
_USBErrorCleanup		equ 8105h ;kills some USB stuff (doesn't completely kill periph communication), error handler in boot code&lt;br /&gt;
_InitUSB			equ 8108h ;initializes USB hardware as peripheral, sets 5,(iy+1Bh), C set if problems&lt;br /&gt;
;810Bh set 1,(81h) and wait (has something to do with USB peripheral kill, but it doesn't actually kill it)&lt;br /&gt;
_KillUSB			equ 810Eh ;identical to 8105h, except in the middle of the outputs, it sends zero to port 4Ch&lt;br /&gt;
_DisplayBootError1		equ 8111h&lt;br /&gt;
_DisplayBootError2		equ 8114h&lt;br /&gt;
_DisplayBootError3		equ 8117h&lt;br /&gt;
_DisplayBootError4		equ 811Ah&lt;br /&gt;
_DisplayBootError5		equ 811Dh&lt;br /&gt;
_DisplayBootError6		equ 8120h&lt;br /&gt;
_DisplayBootError7		equ 8123h&lt;br /&gt;
_DisplayBootError8		equ 8126h&lt;br /&gt;
_DisplayBootError9		equ 8129h&lt;br /&gt;
&lt;br /&gt;
;RAM Equates&lt;br /&gt;
;--------------------------------&lt;br /&gt;
ramStart		equ 8000h&lt;br /&gt;
appData			equ 8000h&lt;br /&gt;
ramCode			equ 8100h&lt;br /&gt;
SmallEditColumnLeft	equ 8177h&lt;br /&gt;
SmallEditRow		equ 8178h&lt;br /&gt;
SmallEditColumnRight	equ 8179h&lt;br /&gt;
;penCol left edge?	equ 817Bh&lt;br /&gt;
bigInteger1		equ 8182h&lt;br /&gt;
SmallEditCancelParse	equ 8194h&lt;br /&gt;
SmallEditRowCount	equ 81B7h&lt;br /&gt;
bigInteger2		equ 81C3h&lt;br /&gt;
SmallEditPromptString	equ 81CCh&lt;br /&gt;
ramCodeEnd		equ 822Fh&lt;br /&gt;
baseAppBrTab		equ 8230h ;table of base pages for apps on page &amp;lt; 20h (starts with eight zeroes because they're OS pages)&lt;br /&gt;
clockFlag		equ 8230h ;bit 2 set for 24-hour mode and don't display &amp;quot;AM/PM&amp;quot;&lt;br /&gt;
clockIDs		equ 8231h ;five bytes, numbers 0-4 in memory, that when present, stops displaying clock numbers in time setting context?&lt;br /&gt;
bootTemp		equ 8251h&lt;br /&gt;
MD5Temp			equ 8259h&lt;br /&gt;
MD5Length		equ 8269h&lt;br /&gt;
MD5Hash			equ 8292h&lt;br /&gt;
appSearchPage		equ 82A3h&lt;br /&gt;
tempSwapArea		equ 82A5h&lt;br /&gt;
;something		equ 837Bh ;18 bytes, probably indicates something about Flash app pages, start out as 0FFh&lt;br /&gt;
appID			equ 838Dh&lt;br /&gt;
arcPageEnd		equ 8392h&lt;br /&gt;
arcPtrEnd		equ 8393h&lt;br /&gt;
;839Fh something...field size bytes?&lt;br /&gt;
MD5Buffer		equ 83A5h&lt;br /&gt;
Abackup			equ 83EBh&lt;br /&gt;
ramReturnData		equ 83EDh&lt;br /&gt;
arcInfo			equ 83EEh&lt;br /&gt;
savedArcInfo		equ 8406h&lt;br /&gt;
appInfo			equ 8432h&lt;br /&gt;
appBank_jump		equ 843Ch&lt;br /&gt;
appPage			equ 843Eh&lt;br /&gt;
kbdScanCode		equ 843Fh&lt;br /&gt;
kbdKey			equ 8444h&lt;br /&gt;
kbdGetKy		equ 8445h&lt;br /&gt;
keyExtend		equ 8446h&lt;br /&gt;
EXTECHO			equ keyExtend&lt;br /&gt;
contrast		equ 8447h&lt;br /&gt;
apdSubTimer		equ 8448h&lt;br /&gt;
apdTimer		equ 8449h&lt;br /&gt;
curTime			equ 844Ah&lt;br /&gt;
curRow			equ 844Bh&lt;br /&gt;
curCol			equ 844Ch&lt;br /&gt;
curOffset		equ 844Dh&lt;br /&gt;
curUnder		equ 844Eh&lt;br /&gt;
curY			equ 844Fh&lt;br /&gt;
curType			equ 8450h&lt;br /&gt;
curXRow			equ 8451h&lt;br /&gt;
prevDData		equ 8452h&lt;br /&gt;
lFont_record		equ 845Ah&lt;br /&gt;
sFont_record		equ 8462h&lt;br /&gt;
tokVarPtr		equ 846Ah&lt;br /&gt;
tokLen			equ 846Ch&lt;br /&gt;
indicMem		equ 846Eh ;eight bytes used by _saveTR and _restoreTR to store image in top right corner&lt;br /&gt;
indicCounter		equ 8476h&lt;br /&gt;
indicBusy		equ 8477h&lt;br /&gt;
OP1			equ 8478h&lt;br /&gt;
OP1M			equ 847Ah&lt;br /&gt;
OP2			equ 8483h&lt;br /&gt;
OP2M			equ 8485h&lt;br /&gt;
OP2EXT			equ 848Ch&lt;br /&gt;
OP3			equ 848Eh&lt;br /&gt;
OP3M			equ 8490h&lt;br /&gt;
OP4			equ 8499h&lt;br /&gt;
OP4M			equ 849Bh&lt;br /&gt;
OP5			equ 84A4h&lt;br /&gt;
OP5M			equ 84A6h&lt;br /&gt;
OP6			equ 84AFh&lt;br /&gt;
OP6M			equ 84B1h&lt;br /&gt;
OP6EXT			equ 84B8h&lt;br /&gt;
progToEdit		equ 84BFh&lt;br /&gt;
nameBuff		equ 84C7h&lt;br /&gt;
equ_edit_save		equ 84D2h&lt;br /&gt;
iMathPtr1		equ 84D3h&lt;br /&gt;
iMathPtr2		equ 84D5h&lt;br /&gt;
iMathPtr3		equ 84D7h&lt;br /&gt;
iMathPtr4		equ 84D9h&lt;br /&gt;
iMathPtr5		equ 84DBh&lt;br /&gt;
chkDelPtr1		equ 84DDh&lt;br /&gt;
chkDelPtr2		equ 84DFh&lt;br /&gt;
insDelPtr		equ 84E1h&lt;br /&gt;
upDownPtr		equ 84E3h&lt;br /&gt;
fOutDat			equ 84E5h&lt;br /&gt;
asm_data_ptr1		equ 84EBh&lt;br /&gt;
asm_data_ptr2		equ 84EDh&lt;br /&gt;
asm_sym_ptr1		equ 84EFh&lt;br /&gt;
asm_sym_ptr2		equ 84F1h&lt;br /&gt;
asm_ram			equ 84F3h&lt;br /&gt;
asm_ind_call		equ 8507h&lt;br /&gt;
textShadow		equ 8508h&lt;br /&gt;
textShadCur		equ 8588h&lt;br /&gt;
textShadTop		equ 858Ah&lt;br /&gt;
textShadAlph		equ 858Bh&lt;br /&gt;
textShadIns		equ 858Ch&lt;br /&gt;
cxMain			equ 858Dh&lt;br /&gt;
cxPPutAway		equ 858Fh&lt;br /&gt;
cxPutAway		equ 8591h&lt;br /&gt;
cxErrorEP		equ 8595h&lt;br /&gt;
cxSizeWind		equ 8597h&lt;br /&gt;
cxPage			equ 8599h&lt;br /&gt;
cxCurApp		equ 859Ah&lt;br /&gt;
cxPrev			equ 859Bh ;12 bytes are shadows of cxMain through cxCurApp and appFlags&lt;br /&gt;
monQH			equ 85AAh&lt;br /&gt;
monQT			equ 85ABh&lt;br /&gt;
monQueue		equ 85ACh&lt;br /&gt;
onSP			equ 85BCh&lt;br /&gt;
promptRow		equ 85C0h&lt;br /&gt;
promptCol		equ 85C1h&lt;br /&gt;
promptIns		equ 85C2h&lt;br /&gt;
promptShift		equ 85C3h&lt;br /&gt;
promptRet		equ 85C4h&lt;br /&gt;
promptValid		equ 85C6h&lt;br /&gt;
promptTop		equ 85C8h&lt;br /&gt;
promptCursor		equ 85CAh&lt;br /&gt;
promptTail		equ 85CCh&lt;br /&gt;
promptBtm		equ 85CEh&lt;br /&gt;
varType			equ 85D0h&lt;br /&gt;
varCurrent		equ 85D1h&lt;br /&gt;
varClass		equ 85D9h&lt;br /&gt;
CatalogCurrent		equ 85DAh ;word at this location starting with 6007h corresponds to what is highlighted in catalog&lt;br /&gt;
menuActive		equ 85DCh&lt;br /&gt;
menuAppDepth		equ 85DDh&lt;br /&gt;
MenuCurrent		equ 85DEh&lt;br /&gt;
;			equ 85DFh ;holds current submenu index&lt;br /&gt;
;			equ 85E0h ;holds currently selected item in current submenu&lt;br /&gt;
;			equ 85E1h ;holds number of submenus for this menu&lt;br /&gt;
;			equ 85E2h ;holds number of items in this submenu&lt;br /&gt;
;			equ 85E3h ;iy+appFlags backup for menu stuff&lt;br /&gt;
;			equ 85E4h ;iy+0Ch backup for menu stuff&lt;br /&gt;
;			equ 85E5h ;curGStyle backup for menu stuff&lt;br /&gt;
;			equ 85E6h ;iy+graphFlags backup for menu stuff&lt;br /&gt;
ProgCurrent		equ 85E8h&lt;br /&gt;
;something, OP1 backup?	equ 85F2h ;type and name of topmost variable on menu with names&lt;br /&gt;
;something		equ 85FDh&lt;br /&gt;
userMenuSA		equ 85FEh&lt;br /&gt;
ioPrompt		equ 865Fh&lt;br /&gt;
dImageWidth		equ 8660h&lt;br /&gt;
ioFlag			equ 8670h&lt;br /&gt;
sndRecState		equ 8672h&lt;br /&gt;
ioErrState		equ 8673h&lt;br /&gt;
header			equ 8674h&lt;br /&gt;
ioData			equ 867Dh&lt;br /&gt;
ioNewData		equ 8689h&lt;br /&gt;
bakHeader		equ 868Bh&lt;br /&gt;
;something		equ 8697h ;app bitmap for selecting stuff from menus&lt;br /&gt;
;something		equ 86B7h ;used in 47h and 74h link packets&lt;br /&gt;
penCol			equ 86D7h&lt;br /&gt;
penRow			equ 86D8h&lt;br /&gt;
rclQueue		equ 86D9h&lt;br /&gt;
rclQueueEnd		equ 86DBh&lt;br /&gt;
errNo			equ 86DDh&lt;br /&gt;
errSP			equ 86DEh&lt;br /&gt;
errOffset		equ 86E0h&lt;br /&gt;
saveSScreen		equ 86ECh&lt;br /&gt;
asm_prgm_size		equ 89ECh&lt;br /&gt;
bstCounter		equ 89EEh&lt;br /&gt;
flags			equ 89F0h&lt;br /&gt;
appFlagsAddr		equ 89FDh&lt;br /&gt;
;something		equ 8A36h ;stats-related? This gets stored to (varCurrent) for some reason&lt;br /&gt;
statVars		equ 8A3Ah&lt;br /&gt;
anovaf_vars		equ 8C17h&lt;br /&gt;
infVars			equ 8C4Dh&lt;br /&gt;
infVar1			equ 8C56h&lt;br /&gt;
infVar2			equ 8C5Fh&lt;br /&gt;
infVar3			equ 8C68h&lt;br /&gt;
infVar4			equ 8C71h&lt;br /&gt;
infVar5			equ 8C7Ah&lt;br /&gt;
infVar6			equ 8C83h&lt;br /&gt;
infVar7			equ 8C8Ch&lt;br /&gt;
infVar8			equ 8C95h&lt;br /&gt;
infVar9			equ 8C9Eh&lt;br /&gt;
infVar10		equ 8CA7h&lt;br /&gt;
infVar11		equ 8CB0h&lt;br /&gt;
infVar12		equ 8CB9h&lt;br /&gt;
infVar13		equ 8CC2h&lt;br /&gt;
infVar14		equ 8CCBh&lt;br /&gt;
infVar15		equ 8CD4h&lt;br /&gt;
infVar16		equ 8CDDh&lt;br /&gt;
infVar17		equ 8CE6h&lt;br /&gt;
infVar18		equ 8CEFh&lt;br /&gt;
infVar19		equ 8CF8h&lt;br /&gt;
infVar20		equ 8D01h&lt;br /&gt;
;something		equ 8D0Bh&lt;br /&gt;
;list-related stat vars	equ 8D0Dh&lt;br /&gt;
curGStyle		equ 8D17h&lt;br /&gt;
curGY			equ 8D18h&lt;br /&gt;
curGX			equ 8D19h&lt;br /&gt;
curGY2			equ 8D1Ah&lt;br /&gt;
curGX2			equ 8D1Bh ;currently selected equation while graphing&lt;br /&gt;
freeSaveY		equ 8D1Ch&lt;br /&gt;
freeSaveX		equ 8D1Dh&lt;br /&gt;
;100 bytes		equ 8D2Ah&lt;br /&gt;
XOffset			equ 8DA1h&lt;br /&gt;
YOffset			equ 8DA2h&lt;br /&gt;
lcdTallP		equ 8DA3h&lt;br /&gt;
pixWideP		equ 8DA4h&lt;br /&gt;
pixWide_m_1		equ 8DA5h&lt;br /&gt;
pixWide_m_2		equ 8DA6h&lt;br /&gt;
lastEntryPTR		equ 8DA7h ;pointer to the next available byte in the entry stack&lt;br /&gt;
lastEntryStk		equ 8DA9h ;the start of entry stack (note last entry is not in the stack, it is in the program '#'.)  This is a stack of strings.  first 2 bytes are length, followed by string. 2nd from last entry is first in this stack.&lt;br /&gt;
numLastEntries		equ 8E29h ;number of entries you can back-track through minus one&lt;br /&gt;
currLastEntry		equ 8E2Ah ;counter used by OS to keep track of which entry was just displayed by pressing 2nd+enter&lt;br /&gt;
curPlotNumber		equ 8E63h ;current plot being graphed (1-3), this gets reset back to 0&lt;br /&gt;
;something		equ 8E65h&lt;br /&gt;
;something		equ 8E66h&lt;br /&gt;
curInc			equ 8E67h&lt;br /&gt;
uXmin			equ 8E7Eh&lt;br /&gt;
uXmax			equ 8E87h&lt;br /&gt;
uXscl			equ 8E90h&lt;br /&gt;
uYmin			equ 8E99h&lt;br /&gt;
uYmax			equ 8EA2h&lt;br /&gt;
uYscl			equ 8EABh&lt;br /&gt;
uThetMin		equ 8EB4h&lt;br /&gt;
uThetMax		equ 8EBDh&lt;br /&gt;
uThetStep		equ 8EC6h&lt;br /&gt;
uTmin			equ 8ECFh&lt;br /&gt;
uTmax			equ 8ED8h&lt;br /&gt;
uTStep			equ 8EE1h&lt;br /&gt;
uPlotStart		equ 8EEAh&lt;br /&gt;
unMax			equ 8EF3h&lt;br /&gt;
uu0			equ 8EFCh&lt;br /&gt;
uv0			equ 8F05h&lt;br /&gt;
unMin			equ 8F0Eh&lt;br /&gt;
uu02			equ 8F17h&lt;br /&gt;
uv02			equ 8F20h&lt;br /&gt;
uw0			equ 8F29h&lt;br /&gt;
uPlotStep		equ 8F32h&lt;br /&gt;
uXres			equ 8F3Bh&lt;br /&gt;
uw02			equ 8F44h&lt;br /&gt;
Xmin			equ 8F50h&lt;br /&gt;
Xmax			equ 8F59h&lt;br /&gt;
Xscl			equ 8F62h&lt;br /&gt;
Ymin			equ 8F6Bh&lt;br /&gt;
Ymax			equ 8F74h&lt;br /&gt;
Yscl			equ 8F7Dh&lt;br /&gt;
ThetaMin		equ 8F86h&lt;br /&gt;
ThetaMax		equ 8F8Fh&lt;br /&gt;
ThetaStep		equ 8F98h&lt;br /&gt;
TminPar			equ 8FA1h&lt;br /&gt;
TmaxPar			equ 8FAAh&lt;br /&gt;
Tstep			equ 8FB3h&lt;br /&gt;
PlotStart		equ 8FBCh&lt;br /&gt;
nMax			equ 8FC5h&lt;br /&gt;
u0			equ 8FCEh&lt;br /&gt;
v0			equ 8FD7h&lt;br /&gt;
nMin			equ 8FE0h&lt;br /&gt;
u02			equ 8FE9h&lt;br /&gt;
v02			equ 8FF2h&lt;br /&gt;
w0			equ 8FFBh&lt;br /&gt;
PlotStep		equ 9004h&lt;br /&gt;
XresO			equ 900Dh&lt;br /&gt;
w02			equ 9016h&lt;br /&gt;
un1			equ 901Fh&lt;br /&gt;
un2			equ 9028h&lt;br /&gt;
vn1			equ 9031h&lt;br /&gt;
vn2			equ 903Ah&lt;br /&gt;
wn1			equ 9043h&lt;br /&gt;
wn2			equ 904Ch&lt;br /&gt;
fin_N			equ 9055h&lt;br /&gt;
fin_I			equ 905Eh&lt;br /&gt;
fin_PV			equ 9067h&lt;br /&gt;
fin_PMT			equ 9070h&lt;br /&gt;
fin_FV			equ 9079h&lt;br /&gt;
fin_PY			equ 9082h&lt;br /&gt;
fin_CY			equ 908Bh&lt;br /&gt;
cal_N			equ 9094h&lt;br /&gt;
cal_I			equ 909Dh&lt;br /&gt;
cal_PV			equ 90A6h&lt;br /&gt;
cal_PMT			equ 90AFh&lt;br /&gt;
cal_FV			equ 90B8h&lt;br /&gt;
cal_PY			equ 90C1h&lt;br /&gt;
smallEditRAM		equ 90D3h&lt;br /&gt;
XFact			equ 913Fh&lt;br /&gt;
YFact			equ 9148h&lt;br /&gt;
Xres_int		equ 9151h&lt;br /&gt;
deltaX			equ 9152h&lt;br /&gt;
deltaY			equ 915Bh&lt;br /&gt;
shortX			equ 9164h&lt;br /&gt;
shortY			equ 916Dh&lt;br /&gt;
lower			equ 9176h&lt;br /&gt;
upper			equ 917Fh&lt;br /&gt;
XOutSym			equ 918Ch&lt;br /&gt;
XOutDat			equ 918Eh&lt;br /&gt;
YOutSym			equ 9190h&lt;br /&gt;
YOutDat			equ 9192h&lt;br /&gt;
inputSym		equ 9194h&lt;br /&gt;
inputDat		equ 9196h&lt;br /&gt;
prevData		equ 9198h&lt;br /&gt;
;something		equ 91D9h&lt;br /&gt;
;something		equ 91DAh&lt;br /&gt;
CurTableRow		equ 91DCh&lt;br /&gt;
CurTableCol		equ 91DDh&lt;br /&gt;
TblMin			equ 92B3h&lt;br /&gt;
TblStep			equ 92BCh&lt;br /&gt;
;something		equ 92C5h&lt;br /&gt;
;something		equ 92C6h&lt;br /&gt;
;somePlotThing1		equ 92D9h&lt;br /&gt;
;somePlotThing2		equ 92EAh&lt;br /&gt;
;somePlotThing3		equ 92FBh&lt;br /&gt;
ES			equ 9302h ;bottom of the es&lt;br /&gt;
EST			equ 9305h ;current height of the es&lt;br /&gt;
;something		equ 9311h ;this is the pointer to a table of stuff for a BASIC menu&lt;br /&gt;
plotSScreen		equ 9340h&lt;br /&gt;
seed1			equ 9640h&lt;br /&gt;
seed2			equ 9649h&lt;br /&gt;
basic_prog		equ 9652h&lt;br /&gt;
basic_start		equ 965Bh&lt;br /&gt;
nextParseByte		equ 965Dh ;basic_pc&lt;br /&gt;
basic_end		equ 965Fh&lt;br /&gt;
numArguments		equ 9661h&lt;br /&gt;
;something		equ 9665h ;parser-related word&lt;br /&gt;
;something		equ 966Ch&lt;br /&gt;
;something		equ 966Dh&lt;br /&gt;
cmdShadow		equ 966Eh&lt;br /&gt;
cmdShadCur		equ 96EEh&lt;br /&gt;
cmdShadAlph		equ 96F0h&lt;br /&gt;
cmdShadIns		equ 96F1h&lt;br /&gt;
cmdCursor		equ 96F2h&lt;br /&gt;
editTop			equ 96F4h&lt;br /&gt;
editCursor		equ 96F6h&lt;br /&gt;
editTail		equ 96F8h&lt;br /&gt;
editBtm			equ 96FAh&lt;br /&gt;
;something		equ 96FEh ;word, this is offset into list for currently-highlighted element in list editor&lt;br /&gt;
;something		equ 9700h ;table entry pointer used in dialog/menu/edit buffer routines&lt;br /&gt;
matrixDimensions	equ 9702h ;dimensions of matrix being edited in matrix editor&lt;br /&gt;
editSym			equ 9706h ;pointer to symbol table entry of variable being edited&lt;br /&gt;
editDat			equ 9708h ;pointer to data of variable being edited&lt;br /&gt;
;something		equ 970Eh ;stats/list editor related, usually 1&lt;br /&gt;
;something		equ 970Fh ;stats/list editor related, usually 0 (this is 0-based offset from listName1), pretty sure this is a page offset&lt;br /&gt;
;something		equ 9710h ;stats/list editor related, usually 0 (this is 0-based currently-selected list)&lt;br /&gt;
listName1		equ 9711h&lt;br /&gt;
listName2		equ 9716h&lt;br /&gt;
listName3		equ 971Bh&lt;br /&gt;
listName4		equ 9720h&lt;br /&gt;
listName5		equ 9725h&lt;br /&gt;
listName6		equ 972Ah&lt;br /&gt;
listName7		equ 972Fh&lt;br /&gt;
listName8		equ 9734h&lt;br /&gt;
listName9		equ 9739h&lt;br /&gt;
listName10		equ 973Eh&lt;br /&gt;
listName11		equ 9743h&lt;br /&gt;
listName12		equ 9748h&lt;br /&gt;
listName13		equ 974Dh&lt;br /&gt;
listName14		equ 9752h&lt;br /&gt;
listName15		equ 9757h&lt;br /&gt;
listName16		equ 975Ch&lt;br /&gt;
listName17		equ 9761h&lt;br /&gt;
listName18		equ 9766h&lt;br /&gt;
listName19		equ 976Bh&lt;br /&gt;
listName20		equ 9770h&lt;br /&gt;
;something		equ 9775h&lt;br /&gt;
y1LineType		equ 9776h ;these bytes define the line type for functions which are graphed&lt;br /&gt;
y2LineType		equ 9777h&lt;br /&gt;
y3LineType		equ 9778h&lt;br /&gt;
y4LineType		equ 9779h&lt;br /&gt;
y5LineType		equ 977Ah&lt;br /&gt;
y6LineType		equ 977Bh&lt;br /&gt;
y7LineType		equ 977Ch&lt;br /&gt;
y8LineType		equ 977Dh&lt;br /&gt;
y9LineType		equ 977Eh&lt;br /&gt;
y0LineType		equ 977Fh&lt;br /&gt;
para1LineType		equ 9780h&lt;br /&gt;
para2LineType		equ 9781h&lt;br /&gt;
para3LineType		equ 9782h&lt;br /&gt;
para4LineType		equ 9783h&lt;br /&gt;
para5LineType		equ 9784h&lt;br /&gt;
para6LineType		equ 9785h&lt;br /&gt;
polar1LineType		equ 9786h&lt;br /&gt;
polar2LineType		equ 9787h&lt;br /&gt;
polar3LineType		equ 9788h&lt;br /&gt;
polar4LineType		equ 9789h&lt;br /&gt;
polar5LineType		equ 978Ah&lt;br /&gt;
polar6LineType		equ 978Bh&lt;br /&gt;
secULineType		equ 978Ch&lt;br /&gt;
secVLineType		equ 978Dh&lt;br /&gt;
secWLineType		equ 978Eh&lt;br /&gt;
;something		equ 979Fh&lt;br /&gt;
;something		equ 97A1h&lt;br /&gt;
winTop			equ 97A5h&lt;br /&gt;
winBtm			equ 97A6h&lt;br /&gt;
winLeftEdge		equ 97A7h&lt;br /&gt;
winLeft			equ 97A8h&lt;br /&gt;
winAbove		equ 97AAh&lt;br /&gt;
winRow			equ 97ACh&lt;br /&gt;
winCol			equ 97AEh&lt;br /&gt;
fmtDigits		equ 97B0h&lt;br /&gt;
fmtString		equ 97B1h&lt;br /&gt;
fmtConv			equ 97F2h&lt;br /&gt;
fmtLeft			equ 9804h&lt;br /&gt;
fmtIndex		equ 9806h&lt;br /&gt;
fmtMatSym		equ 9808h&lt;br /&gt;
fmtMatMem		equ 980Ah&lt;br /&gt;
EQS			equ 980Ch&lt;br /&gt;
;something		equ 980Eh&lt;br /&gt;
;something		equ 9810h&lt;br /&gt;
freeRAM			equ 9815h ;pretty sure this is the amount of RAM free, valid in Mem Mgmt/Del anyway&lt;br /&gt;
;something		equ 9817h&lt;br /&gt;
tSymPtr1		equ 9818h&lt;br /&gt;
tSymPtr2		equ 981Ah&lt;br /&gt;
chkDelPtr3		equ 981Ch&lt;br /&gt;
chkDelPtr4		equ 981Eh&lt;br /&gt;
tempMem			equ 9820h&lt;br /&gt;
fpBase			equ 9822h&lt;br /&gt;
FPS			equ 9824h&lt;br /&gt;
OPBase			equ 9826h&lt;br /&gt;
OPS			equ 9828h&lt;br /&gt;
pTempCnt		equ 982Ah&lt;br /&gt;
cleanTmp		equ 982Ch&lt;br /&gt;
pTemp                   equ 982Eh ;end of symbol table&lt;br /&gt;
progPtr			equ 9830h&lt;br /&gt;
newDataPtr		equ 9832h&lt;br /&gt;
pagedCount		equ 9834h&lt;br /&gt;
pagedPN			equ 9835h&lt;br /&gt;
pagedGetPtr		equ 9836h&lt;br /&gt;
pagedPutPtr		equ 9838h&lt;br /&gt;
pagedBuf		equ 983Ah&lt;br /&gt;
;something		equ 984Ah ;this is the top LCD row for a menu (usually 1)&lt;br /&gt;
appErr1			equ 984Dh&lt;br /&gt;
appErr2			equ 985Ah&lt;br /&gt;
flashByte1		equ 9867h&lt;br /&gt;
flashByte2		equ 9868h&lt;br /&gt;
freeArcBlock		equ 9869h&lt;br /&gt;
arcPage			equ 986Bh&lt;br /&gt;
arcPtr			equ 986Ch&lt;br /&gt;
appRawKeyHandle		equ 9870h&lt;br /&gt;
appBackUpScreen		equ 9872h&lt;br /&gt;
customHeight		equ 9B72h&lt;br /&gt;
localLanguage		equ 9B73h&lt;br /&gt;
hookExecTemp		equ 9B75h&lt;br /&gt;
linkActivityHook	equ 9B78h&lt;br /&gt;
cursorHookPtr		equ 9B7Ch&lt;br /&gt;
libraryHookPtr		equ 9B80h&lt;br /&gt;
rawKeyHookPtr		equ 9B84h&lt;br /&gt;
getKeyHookPtr		equ 9B88h&lt;br /&gt;
homescreenHookPtr	equ 9B8Ch&lt;br /&gt;
windowHookPtr		equ 9B90h&lt;br /&gt;
graphHookPtr		equ 9B94h&lt;br /&gt;
yEqualsHookPtr		equ 9B98h&lt;br /&gt;
fontHookPtr		equ 9B9Ch&lt;br /&gt;
regraphHookPtr		equ 9BA0h&lt;br /&gt;
graphicsHook		equ 9BA4h&lt;br /&gt;
traceHookPtr		equ 9BA8h&lt;br /&gt;
parserHookPtr		equ 9BACh&lt;br /&gt;
appChangeHookPtr	equ 9BB0h&lt;br /&gt;
catalog1HookPtr		equ 9BB4h&lt;br /&gt;
helpHookPtr		equ 9BB8h&lt;br /&gt;
cxRedispHookPtr		equ 9BBCh&lt;br /&gt;
menuHookPtr		equ 9BC0h&lt;br /&gt;
catalog2HookPtr		equ 9BC4h&lt;br /&gt;
tokenHookPtr		equ 9BC8h&lt;br /&gt;
localizeHookPtr		equ 9BCCh&lt;br /&gt;
silentLinkHookPtr	equ 9BD0h ;restartClr?&lt;br /&gt;
USBActivityHookPtr	equ 9BD4h&lt;br /&gt;
baseAppBrTab2		equ 9C06h ;table of base pages for apps on page &amp;gt;= 20h; first 20h bytes are zeroes.&lt;br /&gt;
USBcallbackPage		equ 9C13h&lt;br /&gt;
USBcallbackPtr		equ 9C14h&lt;br /&gt;
vendorID		equ 9C16h&lt;br /&gt;
productID		equ 9C18h&lt;br /&gt;
devReleaseNumber	equ 9C1Ah&lt;br /&gt;
oldSESpeed		equ 9C21h&lt;br /&gt;
calcPeripheralState	equ 9C26h&lt;br /&gt;
usb_dataWaitingCount	equ 9C27h&lt;br /&gt;
basePageTable2End	equ 9C6Fh ;this is the last page&lt;br /&gt;
port91hTemp		equ 9C79h&lt;br /&gt;
usb_dataExpectCount	equ 9C80h&lt;br /&gt;
offPageCallPage		equ 9C83h ;temporarily stores off-page page and address&lt;br /&gt;
offPageCallAddress	equ 9C84h&lt;br /&gt;
;something		equ 9C86h ;used with SE link activity, values of 00h, 0FAh, 0FFh probably mean something&lt;br /&gt;
;something		equ 9C87h ;zero this to force the APPS menu to recache itself (this is always either 0, 1, or last app page, for some reason)&lt;br /&gt;
;something		equ 9C88h ;don't know, but it's 14 bytes and has to do with selecting stuff (if 9C87h is non-zero, this is zeroed out)&lt;br /&gt;
;something		equ 9C9Eh ;funky, this actually gets written to the certificate on non-83+ (11 bytes)&lt;br /&gt;
SEspeed			equ 9CAEh&lt;br /&gt;
;something, table index	equ 9CAFh&lt;br /&gt;
;something		equ 9CB0h&lt;br /&gt;
;something		equ 9CB1h ;table&lt;br /&gt;
;something		equ 9CCDh&lt;br /&gt;
localTokStr		equ 9D65h&lt;br /&gt;
keyForStr		equ 9D76h&lt;br /&gt;
keyToStrRam		equ 9D77h&lt;br /&gt;
sedMonSp		equ 9D88h ;small edit monitor SP&lt;br /&gt;
bpSave			equ 9D8Ah&lt;br /&gt;
userMem			equ 9D95h&lt;br /&gt;
symTable		equ 0FE66h&lt;br /&gt;
&lt;br /&gt;
;System Flags&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ioDelFlag		equ 0h&lt;br /&gt;
inDelete		equ 0		;1 = DELETE SCREEN &lt;br /&gt;
&lt;br /&gt;
trigFlags		equ 0h	;Trigonometry mode settings&lt;br /&gt;
trigDeg			equ 2		;1=degrees, 0=radians&lt;br /&gt;
&lt;br /&gt;
kbdFlags		equ 0h	;Keyboard scan&lt;br /&gt;
kbdSCR			equ 3		;1=scan code ready&lt;br /&gt;
kbdKeyPress		equ 4		;1=key has been pressed&lt;br /&gt;
&lt;br /&gt;
doneFlags		equ 0h	;display &amp;quot;Done&amp;quot;&lt;br /&gt;
donePrgm		equ 5		;1=display &amp;quot;Done&amp;quot; after prgm&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
editFlags		equ 1h&lt;br /&gt;
editOpen		equ 2		;1=edit buffer is open&lt;br /&gt;
&lt;br /&gt;
ansFlags		equ 1&lt;br /&gt;
AnsScroll		equ 3		;1=answer can scroll, seems must be reset in order to move about edit buffer&lt;br /&gt;
&lt;br /&gt;
monFlags		equ 1h	 ;monitor flags&lt;br /&gt;
monAbandon		equ 4		;1=don't start any long process in put away (#715)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
plotFlags		equ 2h	;plot generation flags&lt;br /&gt;
plotLoc 		equ 1		;0=bkup &amp;amp; display, 1=display only&lt;br /&gt;
plotDisp		equ 2		;1=plot is in display, 0=text in display, this also indicates whether graph is being shown or not&lt;br /&gt;
&lt;br /&gt;
grfModeFlags		equ 2h	;graph mode settings&lt;br /&gt;
grfFuncM		equ 4		;1=function graph&lt;br /&gt;
grfPolarM		equ 5		;1=polar graph&lt;br /&gt;
grfParamM		equ 6		;1=parametric graph&lt;br /&gt;
grfRecurM		equ 7		;1=RECURSION graph&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
graphFlags		equ 3h&lt;br /&gt;
graphDraw		equ 0		;0=graph is valid, 1=redraw graph(dirty)&lt;br /&gt;
graphCursor		equ 2&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
grfDBFlags		equ 4h&lt;br /&gt;
grfDot			equ 0		;0=line, 1=dot&lt;br /&gt;
grfSimul		equ 1		;0=sequential, 1=simultaneous&lt;br /&gt;
grfGrid 		equ 2		;0=no grid, 1=grid&lt;br /&gt;
grfPolar		equ 3		;0=rectangular, 1=polar coordinates&lt;br /&gt;
grfNoCoord		equ 4		;0=display coordinates, 1=off&lt;br /&gt;
grfNoAxis		equ 5		;0=axis, 1=no axis&lt;br /&gt;
grfLabel		equ 6		;0=off, 1=axis label&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
textFlags		equ 5h	;Text output flags&lt;br /&gt;
textEraseBelow		equ 1		;1=erase line below small char&lt;br /&gt;
textScrolled		equ 2		;1=screen scrolled&lt;br /&gt;
textInverse		equ 3		;1=display inverse bit-map&lt;br /&gt;
textInsMode		equ 4		;0=overstrike, 1=insert mode&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ParsFlag		equ 6h	;PARSER flags&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ParsFlag2		equ 7h	;PARSER flags&lt;br /&gt;
numOP1			equ 0		;1=RESULT IN OP1, 0=NO RESULT&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
newDispF		equ 8h	;Derivative mode flags&lt;br /&gt;
preClrForMode		equ 0		;1=HELP BLINK ON MODE SCREEN&lt;br /&gt;
allowProgTokens		equ 1		;1=allow programming tokens to be parsed in BASIC programs&lt;br /&gt;
&lt;br /&gt;
apdFlags		equ 8h	;Automatic power-down&lt;br /&gt;
apdAble 		equ 2		;1=APD enabled&lt;br /&gt;
apdRunning		equ 3		;1=APD clock running&lt;br /&gt;
apdWarmStart		equ 4		;1=calculator is turning on from APD or power loss&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
web_err_mask		equ 60h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
onFlags 		equ 9h	;on key flags&lt;br /&gt;
parseInput		equ 1		;1=parse input when done&lt;br /&gt;
onRunning		equ 3		;1=calculator is running&lt;br /&gt;
onInterrupt		equ 4		;1=on key interrupt request&lt;br /&gt;
&lt;br /&gt;
statFlags		equ 9h	;statistics flags&lt;br /&gt;
;unknown		equ 5		;unknown&lt;br /&gt;
statsValid		equ 6		;1=stats are valid&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtFlags		equ 0Ah	;numeric format flags&lt;br /&gt;
fmtExponent		equ 0	 	;1=show exponent, 0=no exponent&lt;br /&gt;
fmtEng			equ 1	 	;1=engineering notion, 0=scientific&lt;br /&gt;
fmtHex			equ 2	 	;1=hexadecimal&lt;br /&gt;
fmtOct			equ 3	 	;1=octal&lt;br /&gt;
fmtBin			equ 4	 	;1=binary&lt;br /&gt;
&lt;br /&gt;
numMode			equ 0Ah&lt;br /&gt;
fmtReal			equ 5&lt;br /&gt;
fmtRect			equ 6&lt;br /&gt;
fmtPolar		equ 7&lt;br /&gt;
&lt;br /&gt;
realMode		equ 5&lt;br /&gt;
rectMode		equ 6&lt;br /&gt;
polarMode		equ 7&lt;br /&gt;
;					;if Hex and Oct both = 1&lt;br /&gt;
;					; then Bin=0 means &amp;gt;Frac&lt;br /&gt;
;					; Bin=1 means &amp;gt;DMS&lt;br /&gt;
fmtBaseMask		equ  00011100b	; mask to base flags&lt;br /&gt;
fmtBaseShift		equ  2		; offset to base flags&lt;br /&gt;
;&lt;br /&gt;
;       CHECK IF THESE ARE USED BY NUMFORM,&lt;br /&gt;
;&lt;br /&gt;
;               	equ  6&lt;br /&gt;
;               	equ  7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtOverride		equ 0Bh	;copy of fmtFlags with conversion override&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtEditFlags		equ 0Ch	;numeric editing flags&lt;br /&gt;
fmtEdit			equ 0		;1=format number for editing&lt;br /&gt;
&lt;br /&gt;
curFlags		equ 0Ch	;Cursor&lt;br /&gt;
curAble 		equ 2		;1=cursor flash is enabled&lt;br /&gt;
curOn			equ 3		;1=cursor is showing&lt;br /&gt;
curLock 		equ 4		;1=cursor is locked off&lt;br /&gt;
&lt;br /&gt;
cmdFlags		equ 0Ch	;command editor flags&lt;br /&gt;
cmdVirgin		equ 5		;1=nothing has been typed in cmd bfr&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
appFlags		equ 0Dh	;application flags&lt;br /&gt;
appWantIntrpt		equ 0		;1=want ON key interrupts&lt;br /&gt;
appTextSave		equ 1		;1=save characters in textShadow&lt;br /&gt;
appAutoScroll		equ 2		;1=auto-scroll text on last line&lt;br /&gt;
appMenus		equ 3		;1=process keys that bring up menus, 0=check Lock menu flag&lt;br /&gt;
appLockMenus		equ 4		;1=ignore menu keys, 0=switch to home screen and bring up menu&lt;br /&gt;
appCurGraphic		equ 5		;1=graphic cursor&lt;br /&gt;
appCurWord		equ 6		;1=text cursor covers entire word&lt;br /&gt;
appExit 		equ 7		;1=application handles [EXIT] key itself&lt;br /&gt;
&lt;br /&gt;
appWantIntrptF		equ 1&amp;lt;&amp;lt;appWantIntrpt&lt;br /&gt;
appTextSaveF		equ 1&amp;lt;&amp;lt;appTextSave&lt;br /&gt;
appAutoScrollF		equ 1&amp;lt;&amp;lt;appAutoScroll&lt;br /&gt;
appMenusF		equ 1&amp;lt;&amp;lt;appMenus&lt;br /&gt;
appLockMenusF		equ 1&amp;lt;&amp;lt;appLockMenus&lt;br /&gt;
appCurGraphicF		equ 1&amp;lt;&amp;lt;appCurGraphic&lt;br /&gt;
appCurWordF		equ 1&amp;lt;&amp;lt;appCurWord&lt;br /&gt;
appExitF		equ 1&amp;lt;&amp;lt;appExit&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
rclFlag			equ 0Eh	;OS recall queue flags&lt;br /&gt;
enableQueue		equ 7		;1 = enable recall queue&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
seqFlags		equ 0Fh	;Sequential Graph flags&lt;br /&gt;
webMode			equ 0		;0 = NORMAL SEQ MODE, 1 = WEB MODE&lt;br /&gt;
webVert			equ 1&lt;br /&gt;
sequv			equ 2		;U vs V&lt;br /&gt;
seqvw			equ 3		;V vs W&lt;br /&gt;
sequw			equ 4		;U vs W&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
promptFlags		equ 11h	;prompt line flags&lt;br /&gt;
promptEdit		equ 0		;1=editing in prompt buffer&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
indicFlags		equ 12h	;Indicator flags&lt;br /&gt;
indicRun		equ 0		;1=run indicator ON&lt;br /&gt;
indicInUse		equ 1		;indicator save area in use=1, free=0 ;resetting will disable 2nd while in _getkey&lt;br /&gt;
indicOnly		equ 2		;interrupt handler only checks run indicator&lt;br /&gt;
&lt;br /&gt;
shiftFlags		equ 12h	;[2nd] and [ALPHA] flags&lt;br /&gt;
shift2nd		equ 3		;1=[2nd] has been pressed&lt;br /&gt;
shiftAlpha		equ 4		;1=[ALPHA] has been pressed&lt;br /&gt;
shiftLwrAlph		equ 5		;1=lower case, 0=upper case&lt;br /&gt;
shiftALock		equ 6		;1=alpha lock has been pressed&lt;br /&gt;
shiftKeepAlph		equ 7		;1=cannot cancel alpha shift&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
tblFlags		equ 13h	;table flags.&lt;br /&gt;
autoFill		equ 4		;1=prompt, 0=fillAuto&lt;br /&gt;
autoCalc		equ 5		;1=prompt, 0=CalcAuto&lt;br /&gt;
reTable			equ 6		;0=table is okay, 1=must recompute table.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
sGrFlags		equ 14h&lt;br /&gt;
grfSplit		equ 0		;1=Split Graph, 0=Normal&lt;br /&gt;
vertSplit		equ 1		;1=Vertical (left-right) Split&lt;br /&gt;
grfSChanged		equ 2		;1=Graph just changed Split &amp;lt;-&amp;gt; normal&lt;br /&gt;
grfSplitOverride	equ 3		;1 = ignore graph split flag if set&lt;br /&gt;
write_on_graph		equ 4		;1 = TEXT OR EQU WRITING TO GRAPH SCREEN&lt;br /&gt;
g_style_active		equ 5		;1 = GRAPH STYLES ARE ENABLED, USE THEM&lt;br /&gt;
cmp_mod_box		equ 6		;1 = DOING MOD BOX PLOT COMPUTATION&lt;br /&gt;
textWrite		equ 7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
newIndicFlags		equ 15h&lt;br /&gt;
extraIndic		equ 0&lt;br /&gt;
saIndic			equ 1&lt;br /&gt;
;3 has something to do with stat/list editor&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
interruptFlags		equ 16h&lt;br /&gt;
secondTimerEnabled	equ 0		;1 = second hardware timer enabled&lt;br /&gt;
batteryFlags		equ 16h&lt;br /&gt;
batteriesGood		equ 2		;1 = batteries good, I think this being reset will force the calc to shut off, used in USB error handler&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
smartFlags		equ 17h&lt;br /&gt;
smarter_mask		equ 3&lt;br /&gt;
smarter_test		equ 1&lt;br /&gt;
smartGraph		equ 0&lt;br /&gt;
smartGraph_inv		equ 1&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
traceFlags		equ 18h&lt;br /&gt;
grfExpr			equ 0		;set to hide expression while tracing&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 19h.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
statFlags2		equ 1Ah&lt;br /&gt;
statDiagnosticsOn	equ 0		;1 = stat diagnostics on&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
linkFlags		equ 1Bh&lt;br /&gt;
IDis95h			equ 1		;1 = link routines use machine ID 95h (CBL)&lt;br /&gt;
IDis82h			equ 2		;1 = link routines use machine ID 82h (TI-82)&lt;br /&gt;
IDis83h			equ 3		;1 = link routines use machine ID 83h (TI-83)&lt;br /&gt;
IDis03h			equ 4		;1 = link routines use machine ID 03h (PC to TI-83)&lt;br /&gt;
USBenabled		equ 5		;1 = use USB port first, or at least try to&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Ch (stats-related).&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Dh.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Eh.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
varTypeMask		equ 1Fh	;is this a flag byte? yes&lt;br /&gt;
varGraphRef		equ 6&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
graphFlags2		equ 1Fh&lt;br /&gt;
splitOverride		equ 3		;0 = force full screen with ParseInp, or something&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
asm_Flag1		equ 21h	;ASM CODING&lt;br /&gt;
asm_Flag2		equ 22h	;ASM CODING&lt;br /&gt;
asm_Flag3		equ 23h	;ASM CODING&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
arcFlag			equ 24h&lt;br /&gt;
checkBatteryLevelFirst	equ 0		;1 = check battery levels in Arc_Unarc first and throw error if low&lt;br /&gt;
&lt;br /&gt;
getSendFlg		equ 24h&lt;br /&gt;
comFailed		equ 1		;1 = Get/Send Communication Failed&lt;br /&gt;
&lt;br /&gt;
selfTestFlag		equ 24h&lt;br /&gt;
resetOnPowerOn		equ 2		;1 = Force RAM reset when APD disabled on next power on&lt;br /&gt;
&lt;br /&gt;
appLwrCaseFlag		equ 24h&lt;br /&gt;
lwrCaseActive		equ 3&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
contextFlags		equ 25h&lt;br /&gt;
nocxPutAway		equ 5		;1 = do not call cxPutAway routine&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
groupFlags		equ 26h ;used temporarily in Arc_Unarc&lt;br /&gt;
inGroup			equ 1		;1 = IN GROUP CONTEXT&lt;br /&gt;
noCompletionByte	equ 2		;1 = do not write 0FCh when calling Arc_Unarc, leave as 0FEh&lt;br /&gt;
noDataWrite		equ 3		;1 = do not write data when calling Arc_Unarc, nor size bytes&lt;br /&gt;
writeSizeBytesOnly	equ 5		;1 = only write size bytes when calling Arc_Unarc&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 27h.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
APIFlg			equ 28h&lt;br /&gt;
appAllowContext		equ 0           ;App wants context changes to happen&lt;br /&gt;
;1 set to ignore a key after returning from rawkeyhook&lt;br /&gt;
;2 set to send this key back?&lt;br /&gt;
;3&lt;br /&gt;
appRunning		equ 4		;app is currently running&lt;br /&gt;
;5&lt;br /&gt;
;6&lt;br /&gt;
appRetKeyOff		equ 7		;1 = GetKey returns kOff when [2nd]+[ON] pressed&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg2			equ 29h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg3			equ 2Ah&lt;br /&gt;
;1 set means using small font?&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg4			equ 2Bh&lt;br /&gt;
cellOverride		equ 1		;use cell override&lt;br /&gt;
fullScrnDraw		equ 2		;DRAW INTO LAST ROW/COL OF SCREEN&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
mouseFlag1		equ 2Ch&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
mouseFlag2		equ 2Dh ;might want to keep this always reset&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
xapFlag0		equ 2Eh	;external app flags, do not use 0,(iy+2Eh) (used by mouse routines)&lt;br /&gt;
xapFlag1		equ 2Fh&lt;br /&gt;
xapFlag2		equ 30h&lt;br /&gt;
xapFlag3		equ 31h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fontFlags		equ 32h&lt;br /&gt;
fracDrawLFont		equ 2&lt;br /&gt;
fracTallLFont		equ 3&lt;br /&gt;
customFont		equ 7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags1		equ 33h ;also scriptFlag, rclFlag2, backGroundLink&lt;br /&gt;
alt_On			equ 0		;run ONSCRPT at startup&lt;br /&gt;
alt_Off			equ 1		;run OFFSCRPT at shutdown&lt;br /&gt;
useRclQueueEnd		equ 2		;1 = external mode&lt;br /&gt;
ignoreBPLink		equ 3		;1 = override flag for link activity hook&lt;br /&gt;
bPLinkOn		equ 4		;1 = link activity hook active&lt;br /&gt;
enableKeyEcho		equ 5		;1 = sends keypresses back to connected calc as remote control packets (with GetCSC vs. GetKey codes...really dumb, TI)&lt;br /&gt;
noTempDelete		equ 6		;1 = do not delete temporary programs at homescreen&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags2		equ 34h ;also sysHookFlg&lt;br /&gt;
getCSCHookActive	equ 0		;1 = GetCSC hook active&lt;br /&gt;
libraryHookActive	equ 1		;1 = library hook active&lt;br /&gt;
;2 This is set in the OS, but never referenced and the code is never executed&lt;br /&gt;
homescreenHookActive	equ 4		;1 = homescreen hook active&lt;br /&gt;
rawKeyHookActive	equ 5		;1 = raw key hook active&lt;br /&gt;
catalog2HookActive	equ 6		;1 = catalog 2 hook active&lt;br /&gt;
cursorHookActive	equ 7		;1 = cursor hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags3		equ 35h ;also sysHookFlg1&lt;br /&gt;
tokenHookActive		equ 0		;1 = token hook active&lt;br /&gt;
localizeHookActive	equ 1		;1 = localize hook active&lt;br /&gt;
windowHookActive	equ 2		;1 = window hook active&lt;br /&gt;
graphHookActive		equ 3		;1 = graph hook active&lt;br /&gt;
yEquHookActive		equ 4		;1 = Y= hook active&lt;br /&gt;
fontHookActive		equ 5		;1 = font hook active&lt;br /&gt;
regraphHookActive	equ 6		;1 = regraph hook active&lt;br /&gt;
drawingHookActive	equ 7		;1 = drawing hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags4		equ 36h ;also sysHookFlag2&lt;br /&gt;
traceHookActive		equ 0		;1 = trace hook active&lt;br /&gt;
parserHookActive	equ 1		;1 = parser hook active&lt;br /&gt;
appChangeHookActive	equ 2		;1 = app change hook active&lt;br /&gt;
catalog1HookActive	equ 3		;1 = catalog 1 hook active&lt;br /&gt;
helpHookActive		equ 4		;1 = help hook active&lt;br /&gt;
cxRedispHookActive	equ 5		;1 = cxRedisp hook active&lt;br /&gt;
menuHookActive		equ 6		;1 = menu hook active&lt;br /&gt;
silentLinkHookActive	equ 7		;1 = silent link hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags2Override	equ 37h		;set corresponding bit to kill iy+35h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags3Override	equ 38h		;set corresponding bit to kill iy+36h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags4Override	equ 39h		;set corresponding bit to kill iy+37h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags5		equ 3Ah&lt;br /&gt;
usbActivityHookActive	equ 0		;1 = USB activity hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
plotFlag3		equ 3Ch  &lt;br /&gt;
bufferOnly		equ 0&lt;br /&gt;
useFastCirc		equ 4&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
dBKeyFlags		equ 3Dh&lt;br /&gt;
keyDefaultsF		equ 6		;1 = GetKey returns extended keycodes with TI-Keyboard&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
silentLinkFlags		equ 3Eh&lt;br /&gt;
silentLinkActive	equ 0		;1 = SE/84+ silent link is active&lt;br /&gt;
&lt;br /&gt;
extraHookFlags		equ 3Eh&lt;br /&gt;
checkCatalog2HookVer	equ 3		;1 = check catalog 2 hook's version before executing it (and error or take other action if so)&lt;br /&gt;
openLibActive		equ 4		;1 = OpenLib( was successfully called on a Flash application (ExecLib will error if zero)&lt;br /&gt;
;5&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
clockFlags		equ 3Fh&lt;br /&gt;
notMDYMode		equ 0		;0 = M/D/Y format&lt;br /&gt;
isYMDMode		equ 1		;1 = Y/M/D format&lt;br /&gt;
is24Hour		equ 2		;1 = clock in 24 hour mode&lt;br /&gt;
inAfternoon		equ 3		;1 = current time is in afternoon (PM) (I think)&lt;br /&gt;
useTokensInString	equ 4		;1 = use tokens instead of characters when displaying clock as string (for getTmStr and getDtStr vs. MODE screen) (keep this reset)&lt;br /&gt;
displayClock		equ 5		;1 = display clock (this is set every second, reset otherwise)&lt;br /&gt;
clockOn			equ 6		;1 = clock on&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag1		equ 40h&lt;br /&gt;
;1 Reset in I/O receiving code, doesn't seem to be used anywhere else&lt;br /&gt;
usbReceiveZone1		equ 2		;1 = receive to RAM pages 3/2 (&amp;quot;zone 1&amp;quot;)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag2		equ 41h&lt;br /&gt;
;0&lt;br /&gt;
;2&lt;br /&gt;
noUSBHostInit		equ 3		;1 = _InitSpecificUSBDevice must fail&lt;br /&gt;
usbDataWaiting		equ 5&lt;br /&gt;
;6&lt;br /&gt;
;7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag3		equ 42h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag4		equ 43h&lt;br /&gt;
usbTimeoutError		equ 0		;1 = USB timeout error (crystal timer expired)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;Character Font Equates  &lt;br /&gt;
;-------------------------------&lt;br /&gt;
LrecurN			equ 001h&lt;br /&gt;
LrecurU			equ 002h&lt;br /&gt;
LrecurV			equ 003h&lt;br /&gt;
LrecurW			equ 004h&lt;br /&gt;
Lconvert		equ 005h&lt;br /&gt;
LsqUp			equ 006h&lt;br /&gt;
LsqDown			equ 007h&lt;br /&gt;
Lintegral		equ 008h&lt;br /&gt;
Lcross			equ 009h&lt;br /&gt;
LboxIcon 		equ 00Ah&lt;br /&gt;
LcrossIcon 		equ 00Bh&lt;br /&gt;
LdotIcon 		equ 00Ch&lt;br /&gt;
LsubT   		equ 00Dh ;small capital T for parametric mode.&lt;br /&gt;
LcubeR  		equ 00Eh ;slightly different 3 for cubed root.&lt;br /&gt;
LhexF			equ 00Fh&lt;br /&gt;
Lroot			equ 010h&lt;br /&gt;
Linverse		equ 011h&lt;br /&gt;
Lsquare			equ 012h&lt;br /&gt;
Langle			equ 013h&lt;br /&gt;
Ldegree			equ 014h&lt;br /&gt;
Lradian			equ 015h&lt;br /&gt;
Ltranspose		equ 016h&lt;br /&gt;
LLE			equ 017h&lt;br /&gt;
LNE			equ 018h&lt;br /&gt;
LGE			equ 019h&lt;br /&gt;
Lneg			equ 01Ah&lt;br /&gt;
Lexponent		equ 01Bh&lt;br /&gt;
Lstore			equ 01Ch&lt;br /&gt;
Lten			equ 01Dh&lt;br /&gt;
LupArrow		equ 01Eh&lt;br /&gt;
LdownArrow		equ 01Fh&lt;br /&gt;
Lspace			equ 020h&lt;br /&gt;
Lexclam			equ 021h&lt;br /&gt;
Lquote			equ 022h&lt;br /&gt;
Lpound			equ 023h&lt;br /&gt;
Lfourth			equ 024h&lt;br /&gt;
Lpercent		equ 025h&lt;br /&gt;
Lampersand		equ 026h&lt;br /&gt;
Lapostrophe		equ 027h&lt;br /&gt;
LlParen			equ 028h&lt;br /&gt;
LrParen			equ 029h&lt;br /&gt;
Lasterisk		equ 02Ah&lt;br /&gt;
LplusSign		equ 02Bh&lt;br /&gt;
Lcomma			equ 02Ch&lt;br /&gt;
Ldash			equ 02Dh&lt;br /&gt;
Lperiod			equ 02Eh&lt;br /&gt;
Lslash			equ 02Fh&lt;br /&gt;
L0			equ 030h&lt;br /&gt;
L1			equ 031h&lt;br /&gt;
L2			equ 032h&lt;br /&gt;
L3			equ 033h&lt;br /&gt;
L4			equ 034h&lt;br /&gt;
L5			equ 035h&lt;br /&gt;
L6			equ 036h&lt;br /&gt;
L7			equ 037h&lt;br /&gt;
L8			equ 038h&lt;br /&gt;
L9			equ 039h&lt;br /&gt;
Lcolon			equ 03Ah&lt;br /&gt;
Lsemicolon		equ 03Bh&lt;br /&gt;
LLT			equ 03Ch&lt;br /&gt;
LEQ			equ 03Dh&lt;br /&gt;
LGT			equ 03Eh&lt;br /&gt;
Lquestion		equ 03Fh&lt;br /&gt;
LatSign			equ 040h&lt;br /&gt;
LcapA			equ 041h&lt;br /&gt;
LcapB			equ 042h&lt;br /&gt;
LcapC			equ 043h&lt;br /&gt;
LcapD			equ 044h&lt;br /&gt;
LcapE			equ 045h&lt;br /&gt;
LcapF			equ 046h&lt;br /&gt;
LcapG			equ 047h&lt;br /&gt;
LcapH			equ 048h&lt;br /&gt;
LcapI			equ 049h&lt;br /&gt;
LcapJ			equ 04Ah&lt;br /&gt;
LcapK			equ 04Bh&lt;br /&gt;
LcapL			equ 04Ch&lt;br /&gt;
LcapM			equ 04Dh&lt;br /&gt;
LcapN			equ 04Eh&lt;br /&gt;
LcapO			equ 04Fh&lt;br /&gt;
LcapP			equ 050h&lt;br /&gt;
LcapQ			equ 051h&lt;br /&gt;
LcapR			equ 052h&lt;br /&gt;
LcapS			equ 053h&lt;br /&gt;
LcapT			equ 054h&lt;br /&gt;
LcapU			equ 055h&lt;br /&gt;
LcapV			equ 056h&lt;br /&gt;
LcapW			equ 057h&lt;br /&gt;
LcapX			equ 058h&lt;br /&gt;
LcapY			equ 059h&lt;br /&gt;
LcapZ			equ 05Ah&lt;br /&gt;
Ltheta			equ 05Bh&lt;br /&gt;
Lbackslash		equ 05Ch&lt;br /&gt;
LrBrack			equ 05Dh&lt;br /&gt;
Lcaret			equ 05Eh&lt;br /&gt;
Lunderscore		equ 05Fh&lt;br /&gt;
Lbackquote		equ 060h&lt;br /&gt;
La			equ 061h&lt;br /&gt;
Lb			equ 062h&lt;br /&gt;
Lc			equ 063h&lt;br /&gt;
Ld			equ 064h&lt;br /&gt;
Le			equ 065h&lt;br /&gt;
Lf			equ 066h&lt;br /&gt;
Lg			equ 067h&lt;br /&gt;
Lh			equ 068h&lt;br /&gt;
Li			equ 069h&lt;br /&gt;
Lj			equ 06Ah&lt;br /&gt;
Lk			equ 06Bh&lt;br /&gt;
Ll			equ 06Ch&lt;br /&gt;
Lm			equ 06Dh&lt;br /&gt;
Ln			equ 06Eh&lt;br /&gt;
Lo			equ 06Fh&lt;br /&gt;
Lp			equ 070h&lt;br /&gt;
Lq			equ 071h&lt;br /&gt;
Lr			equ 072h&lt;br /&gt;
Ls			equ 073h&lt;br /&gt;
Lt			equ 074h&lt;br /&gt;
Lu			equ 075h&lt;br /&gt;
Lv			equ 076h&lt;br /&gt;
Lw			equ 077h&lt;br /&gt;
Lx			equ 078h&lt;br /&gt;
Ly			equ 079h&lt;br /&gt;
Lz			equ 07Ah&lt;br /&gt;
LlBrace			equ 07Bh&lt;br /&gt;
Lbar			equ 07Ch&lt;br /&gt;
LrBrace			equ 07Dh&lt;br /&gt;
Ltilde			equ 07Eh&lt;br /&gt;
LinvEQ			equ 07Fh&lt;br /&gt;
Lsub0			equ 080h&lt;br /&gt;
Lsub1			equ 081h&lt;br /&gt;
Lsub2			equ 082h&lt;br /&gt;
Lsub3			equ 083h&lt;br /&gt;
Lsub4			equ 084h&lt;br /&gt;
Lsub5			equ 085h&lt;br /&gt;
Lsub6			equ 086h&lt;br /&gt;
Lsub7			equ 087h&lt;br /&gt;
Lsub8			equ 088h&lt;br /&gt;
Lsub9			equ 089h&lt;br /&gt;
LcapAAcute		equ 08Ah&lt;br /&gt;
LcapAGrave		equ 08Bh&lt;br /&gt;
LcapACaret		equ 08Ch&lt;br /&gt;
LcapADier		equ 08Dh&lt;br /&gt;
LaAcute			equ 08Eh&lt;br /&gt;
LaGrave			equ 08Fh&lt;br /&gt;
LaCaret			equ 090h&lt;br /&gt;
LaDier			equ 091h&lt;br /&gt;
LcapEAcute		equ 092h&lt;br /&gt;
LcapEGrave		equ 093h&lt;br /&gt;
LcapECaret		equ 094h&lt;br /&gt;
LcapEDier		equ 095h&lt;br /&gt;
LeAcute			equ 096h&lt;br /&gt;
LeGrave			equ 097h&lt;br /&gt;
LeCaret			equ 098h&lt;br /&gt;
LeDier			equ 099h&lt;br /&gt;
LcapIAcute		equ 09Ah&lt;br /&gt;
LcapIGrave		equ 09Bh&lt;br /&gt;
LcapICaret		equ 09Ch&lt;br /&gt;
LcapIDier		equ 09Dh&lt;br /&gt;
LiAcute			equ 09Eh&lt;br /&gt;
LiGrave			equ 09Fh&lt;br /&gt;
LiCaret			equ 0A0h&lt;br /&gt;
LiDier			equ 0A1h&lt;br /&gt;
LcapOAcute		equ 0A2h&lt;br /&gt;
LcapOGrave		equ 0A3h&lt;br /&gt;
LcapOCaret		equ 0A4h&lt;br /&gt;
LcapODier		equ 0A5h&lt;br /&gt;
LoAcute			equ 0A6h&lt;br /&gt;
LoGrave			equ 0A7h&lt;br /&gt;
LoCaret			equ 0A8h&lt;br /&gt;
LoDier			equ 0A9h&lt;br /&gt;
LcapUAcute		equ 0AAh&lt;br /&gt;
LcapUGrave		equ 0ABh&lt;br /&gt;
LcapUCaret		equ 0ACh&lt;br /&gt;
LcapUDier		equ 0ADh&lt;br /&gt;
LuAcute			equ 0AEh&lt;br /&gt;
LuGrave			equ 0AFh&lt;br /&gt;
LuCaret			equ 0B0h&lt;br /&gt;
LuDier			equ 0B1h&lt;br /&gt;
LcapCCed		equ 0B2h&lt;br /&gt;
LcCed			equ 0B3h&lt;br /&gt;
LcapNTilde		equ 0B4h&lt;br /&gt;
LnTilde			equ 0B5h&lt;br /&gt;
Laccent			equ 0B6h&lt;br /&gt;
Lgrave			equ 0B7h&lt;br /&gt;
Ldieresis		equ 0B8h&lt;br /&gt;
LquesDown		equ 0B9h&lt;br /&gt;
LexclamDown		equ 0BAh&lt;br /&gt;
Lalpha			equ 0BBh&lt;br /&gt;
Lbeta			equ 0BCh&lt;br /&gt;
Lgamma			equ 0BDh&lt;br /&gt;
LcapDelta		equ 0BEh&lt;br /&gt;
Ldelta			equ 0BFh&lt;br /&gt;
Lepsilon		equ 0C0h&lt;br /&gt;
LlBrack 		equ 0C1h&lt;br /&gt;
Llambda			equ 0C2h&lt;br /&gt;
Lmu			equ 0C3h&lt;br /&gt;
Lpi			equ 0C4h&lt;br /&gt;
Lrho			equ 0C5h&lt;br /&gt;
LcapSigma		equ 0C6h&lt;br /&gt;
Lsigma			equ 0C7h&lt;br /&gt;
Ltau			equ 0C8h&lt;br /&gt;
Lphi			equ 0C9h&lt;br /&gt;
LcapOmega		equ 0CAh&lt;br /&gt;
LxMean			equ 0CBh&lt;br /&gt;
LyMean			equ 0CCh&lt;br /&gt;
LsupX			equ 0CDh&lt;br /&gt;
Lellipsis		equ 0CEh&lt;br /&gt;
Lleft			equ 0CFh&lt;br /&gt;
Lblock			equ 0D0h&lt;br /&gt;
Lper			equ 0D1h&lt;br /&gt;
Lhyphen			equ 0D2h&lt;br /&gt;
Larea			equ 0D3h&lt;br /&gt;
Ltemp			equ 0D4h&lt;br /&gt;
Lcube			equ 0D5h&lt;br /&gt;
Lenter			equ 0D6h&lt;br /&gt;
LimagI			equ 0D7h&lt;br /&gt;
Lphat			equ 0D8h&lt;br /&gt;
Lchi			equ 0D9h&lt;br /&gt;
LstatF			equ 0DAh&lt;br /&gt;
Llne			equ 0DBh&lt;br /&gt;
LlistL			equ 0DCh&lt;br /&gt;
LfinanN 		equ 0DDh&lt;br /&gt;
L2_r_paren 		equ 0DEh&lt;br /&gt;
LblockArrow     	equ 0DFh&lt;br /&gt;
LcurO   		equ 0E0h&lt;br /&gt;
LcurO2  		equ 0E1h&lt;br /&gt;
LcurOcapA       	equ 0E2h&lt;br /&gt;
LcurOa  		equ 0E3h&lt;br /&gt;
LcurI   		equ 0E4h&lt;br /&gt;
LcurI2  		equ 0E5h&lt;br /&gt;
LcurIcapA       	equ 0E6h&lt;br /&gt;
LcurIa  		equ 0E7h&lt;br /&gt;
LGline          	equ 0E8h ; = 0&lt;br /&gt;
LGthick         	equ 0E9h ; = 1&lt;br /&gt;
LGabove			equ 0EAh ; = 2&lt;br /&gt;
LGbelow			equ 0EBh ; = 3&lt;br /&gt;
LGpath			equ 0ECh ; = 4&lt;br /&gt;
LGanimate		equ 0EDh ; = 5&lt;br /&gt;
LGdot			equ 0EEh ; = 6&lt;br /&gt;
LUpBlk			equ 0EFh ;Up arrow and Block in solver&lt;br /&gt;
LDnBlk			equ 0F0h ;Down arrow and Block in solver&lt;br /&gt;
LcurFull		equ 0F1h ;note: must be last char (PutMap checks)&lt;br /&gt;
&lt;br /&gt;
;(MenuCurrent) Values&lt;br /&gt;
;--------------------------&lt;br /&gt;
mConfirmation		equ 01h&lt;br /&gt;
mApps			equ 02h&lt;br /&gt;
mProgramHome		equ 03h&lt;br /&gt;
mPrgm_Run		equ 00h&lt;br /&gt;
mPrgm_Edit		equ 01h&lt;br /&gt;
mPrgm_New		equ 02h&lt;br /&gt;
mZoom			equ 04h&lt;br /&gt;
mZoom_Zoom		equ 00h&lt;br /&gt;
mZoom_Memory		equ 01h&lt;br /&gt;
mDraw			equ 05h&lt;br /&gt;
mDraw_Draw		equ 00h&lt;br /&gt;
mDraw_Points		equ 01h&lt;br /&gt;
mDraw_Store		equ 02h&lt;br /&gt;
mStatPlots		equ 06h&lt;br /&gt;
mStat			equ 07h&lt;br /&gt;
mStat_Edit		equ 00h&lt;br /&gt;
mStat_Calc		equ 01h&lt;br /&gt;
mStat_Tests		equ 02h&lt;br /&gt;
mMath			equ 08h&lt;br /&gt;
mMath_Math		equ 00h&lt;br /&gt;
mMath_Number		equ 01h&lt;br /&gt;
mMath_Complex		equ 02h&lt;br /&gt;
mMath_Prob		equ 03h&lt;br /&gt;
mTest			equ 09h&lt;br /&gt;
mTest_Test		equ 00h&lt;br /&gt;
mTest_Logic		equ 01h&lt;br /&gt;
mVars			equ 0Ah&lt;br /&gt;
mVars_Vars		equ 00h&lt;br /&gt;
mVars_YVars		equ 01h&lt;br /&gt;
mMemory			equ 0Ch&lt;br /&gt;
mMatrix			equ 0Dh&lt;br /&gt;
mMatrix_Name		equ 00h&lt;br /&gt;
mMatrix_Math		equ 01h&lt;br /&gt;
mMatrix_Edit		equ 02h&lt;br /&gt;
mDistr			equ 0Eh&lt;br /&gt;
mDistr_Distr		equ 00h&lt;br /&gt;
mDistr_Draw		equ 01h&lt;br /&gt;
mAngle			equ 0Fh&lt;br /&gt;
mList			equ 10h&lt;br /&gt;
mList_Names		equ 00h&lt;br /&gt;
mList_Ops		equ 01h&lt;br /&gt;
mList_Math		equ 02h&lt;br /&gt;
mCalculate		equ 11h&lt;br /&gt;
mVarsWin		equ 14h&lt;br /&gt;
mVarsWin_XY		equ 00h&lt;br /&gt;
mVarsWin_TTh		equ 01h&lt;br /&gt;
mVarsWin_UVW		equ 02h&lt;br /&gt;
mVarsZoom		equ 15h&lt;br /&gt;
mVarsZoom_ZXY		equ 00h&lt;br /&gt;
mVarsZoom_ZT		equ 01h&lt;br /&gt;
mVarsZoom_UVW		equ 02h&lt;br /&gt;
mVarsGDB		equ 16h&lt;br /&gt;
mVarsPics		equ 17h&lt;br /&gt;
mVarsStrings		equ 18h&lt;br /&gt;
mVarsStat		equ 19h&lt;br /&gt;
mVarsStat_XY		equ 00h&lt;br /&gt;
mVarsStat_Sigma		equ 01h&lt;br /&gt;
mVarsStat_EQ		equ 02h&lt;br /&gt;
mVarsStat_Test		equ 03h&lt;br /&gt;
mVarsStat_Pts		equ 04h&lt;br /&gt;
mVarsTable		equ 1Ah&lt;br /&gt;
mVarsYEqu		equ 1Bh&lt;br /&gt;
mVarsParametric		equ 1Ch&lt;br /&gt;
mVarsPolar		equ 1Dh&lt;br /&gt;
mVarsFnOnOff		equ 1Eh&lt;br /&gt;
mMemReset		equ 1Fh&lt;br /&gt;
mMemReset_RAM		equ 00h&lt;br /&gt;
mMemReset_ROM		equ 01h&lt;br /&gt;
mMemReset_All		equ 02h&lt;br /&gt;
mMemMgmtDel		equ 20h&lt;br /&gt;
mMemResetDefaults	equ 21h&lt;br /&gt;
mMemResetRAMAll		equ 23h&lt;br /&gt;
mMemResetROMVars	equ 24h&lt;br /&gt;
mMemResetROMApps	equ 25h&lt;br /&gt;
mMemResetROMAll		equ 26h&lt;br /&gt;
mMemResetAll		equ 27h&lt;br /&gt;
mGroup			equ 28h&lt;br /&gt;
mGroup_New		equ 00h&lt;br /&gt;
mGroup_Ungroup		equ 01h&lt;br /&gt;
mGroupVars		equ 29h&lt;br /&gt;
mProgramEdit		equ 2Ah&lt;br /&gt;
mPrgmEd_Ctrl		equ 00h&lt;br /&gt;
mPrgmEd_IO		equ 01h&lt;br /&gt;
mPrgmEd_Exec		equ 02h&lt;br /&gt;
mPrgmZoom		equ 2Bh&lt;br /&gt;
mPrgmZoom_Zoom		equ 00h&lt;br /&gt;
mPrgmZoom_Mem		equ 01h&lt;br /&gt;
mPrgmDraw		equ 2Ch&lt;br /&gt;
mPrgmDraw_Draw		equ 00h&lt;br /&gt;
mPrgmDraw_Pt		equ 01h&lt;br /&gt;
mPrgmDraw_Store		equ 02h&lt;br /&gt;
mPrgmStatPlot		equ 2Dh&lt;br /&gt;
mPrgmSP_Plots		equ 00h&lt;br /&gt;
mPrgmSP_Type		equ 01h&lt;br /&gt;
mPrgmSP_Mark		equ 02h&lt;br /&gt;
mPrgmStat		equ 2Eh&lt;br /&gt;
mPrgmStat_Edit		equ 00h&lt;br /&gt;
mPrgmStat_Calc		equ 01h&lt;br /&gt;
mPrgmStat_Tests		equ 02h&lt;br /&gt;
mPrgmMath		equ 2Fh&lt;br /&gt;
mPrgmMath_Math		equ 00h&lt;br /&gt;
mPrgmMath_Num		equ 01h&lt;br /&gt;
mPrgmMath_Cplx		equ 02h&lt;br /&gt;
mPrgmMath_Prob		equ 03h&lt;br /&gt;
mLink			equ 30h&lt;br /&gt;
mLink_Send		equ 00h&lt;br /&gt;
mLink_Recieve		equ 01h&lt;br /&gt;
mLinkTrasmit		equ 31h&lt;br /&gt;
mLinkXmit_Xmit		equ 01h&lt;br /&gt;
mGarbageCollect		equ 3Fh&lt;br /&gt;
mSelectGroupVars	equ 40h&lt;br /&gt;
mSelGrpVars_Sel		equ 00h&lt;br /&gt;
mSelGrpVars_Grp		equ 01h&lt;br /&gt;
mDuplicateName		equ 42h&lt;br /&gt;
mCatalog		equ 45h&lt;br /&gt;
mFinance		equ 22h&lt;br /&gt;
mFinance_Calc		equ 00h&lt;br /&gt;
mFinance_Vars		equ 01h&lt;br /&gt;
&lt;br /&gt;
;Keypress Equates&lt;br /&gt;
;-------------------------------&lt;br /&gt;
kRight			equ 001h&lt;br /&gt;
kLeft			equ 002h&lt;br /&gt;
kUp			equ 003h&lt;br /&gt;
kDown			equ 004h&lt;br /&gt;
kEnter			equ 005h&lt;br /&gt;
kAlphaEnter		equ 006h&lt;br /&gt;
kAlphaUp		equ 007h&lt;br /&gt;
kAlphaDown		equ 008h&lt;br /&gt;
kClear			equ 009h&lt;br /&gt;
kDel			equ 00Ah&lt;br /&gt;
kIns			equ 00Bh&lt;br /&gt;
kRecall			equ 00Ch&lt;br /&gt;
kLastEnt		equ 00Dh&lt;br /&gt;
kBOL			equ 00Eh&lt;br /&gt;
kEOL			equ 00Fh&lt;br /&gt;
&lt;br /&gt;
kSelAll			equ 010h&lt;br /&gt;
kUnselAll		equ 011h&lt;br /&gt;
kLtoTI82		equ 012h&lt;br /&gt;
kBackup			equ 013h&lt;br /&gt;
kRecieve		equ 014h&lt;br /&gt;
kLnkQuit		equ 015h&lt;br /&gt;
kTrans			equ 016h&lt;br /&gt;
kRename			equ 017h&lt;br /&gt;
kOverw			equ 018h&lt;br /&gt;
kOmit			equ 019h&lt;br /&gt;
kCont			equ 01Ah&lt;br /&gt;
kSendID			equ 01Bh&lt;br /&gt;
kSendSW			equ 01Ch&lt;br /&gt;
kYes			equ 01Dh&lt;br /&gt;
kNoWay			equ 01Eh&lt;br /&gt;
kvSendType		equ 01Fh&lt;br /&gt;
kOverWAll		equ 020h&lt;br /&gt;
kNo			equ 025h&lt;br /&gt;
kKReset			equ 026h&lt;br /&gt;
kApp			equ 027h&lt;br /&gt;
kDoug			equ 028h&lt;br /&gt;
kListflag		equ 029h&lt;br /&gt;
menuStart		equ 02Bh&lt;br /&gt;
kAreYouSure		equ 02Bh&lt;br /&gt;
kAppsMenu		equ 02Ch&lt;br /&gt;
kPrgm			equ 02Dh&lt;br /&gt;
kZoom			equ 02Eh&lt;br /&gt;
kDraw			equ 02Fh&lt;br /&gt;
kSPlot			equ 030h&lt;br /&gt;
kStat			equ 031h&lt;br /&gt;
kMath			equ 032h&lt;br /&gt;
kTest			equ 033h&lt;br /&gt;
kChar			equ 034h&lt;br /&gt;
kVars			equ 035h&lt;br /&gt;
kMem			equ 036h&lt;br /&gt;
kMatrix			equ 037h&lt;br /&gt;
kDist			equ 038h&lt;br /&gt;
kAngle			equ 039h&lt;br /&gt;
kList			equ 03Ah&lt;br /&gt;
kCalc			equ 03Bh&lt;br /&gt;
kFin			equ 03Ch&lt;br /&gt;
menuEnd			equ kFin&lt;br /&gt;
kCatalog		equ 03Eh&lt;br /&gt;
kInputDone		equ 03Fh&lt;br /&gt;
kOff			equ kInputDone&lt;br /&gt;
kQuit			equ 040h&lt;br /&gt;
appStart		equ kQuit&lt;br /&gt;
kLinkIO			equ 041h&lt;br /&gt;
kMatrixEd		equ 042h&lt;br /&gt;
kStatEd			equ 043h&lt;br /&gt;
kGraph			equ 044h&lt;br /&gt;
kMode			equ 045h&lt;br /&gt;
kPrgmEd			equ 046h ;PROGRAM EDIT&lt;br /&gt;
kPrgmCr			equ 047h ;PROGRAM CREATE&lt;br /&gt;
kWindow			equ 048h ;RANGE EDITOR&lt;br /&gt;
kYequ			equ 049h ;EQUATION EDITOR&lt;br /&gt;
kTable			equ 04Ah ;TABLE EDITOR&lt;br /&gt;
kTblSet			equ 04Bh ;TABLE SET&lt;br /&gt;
kChkRAM			equ 04Ch ;CHECK RAM (About screen)&lt;br /&gt;
kDelMem			equ 04Dh ;DELETE MEM&lt;br /&gt;
kResetMem		equ 04Eh ;RESET MEM&lt;br /&gt;
kResetDef		equ 04Fh ;RESET DEFAULT&lt;br /&gt;
kPrgmInput		equ 050h ;PROGRAM INPUT&lt;br /&gt;
kZFactEd		equ 051h ;ZOOM FACTOR EDITOR&lt;br /&gt;
kError			equ 052h ;ERROR&lt;br /&gt;
kSolveTVM		equ 053h ;TVM SOLVER&lt;br /&gt;
kSolveRoot		equ 054h ;SOLVE EDITOR&lt;br /&gt;
kStatP			equ 055h ;stat plot&lt;br /&gt;
kInfStat		equ 056h ;Inferential Statistic&lt;br /&gt;
kFormat			equ 057h ;FORMAT&lt;br /&gt;
kExtApps		equ 058h ;External Applications.     NEW&lt;br /&gt;
kNewApps		equ 059h ;New Apps for Cerberus.&lt;br /&gt;
append			equ kNewApps&lt;br /&gt;
echoStart1		equ 05Ah&lt;br /&gt;
kTrace			equ 05Ah&lt;br /&gt;
kZFit			equ 05Bh&lt;br /&gt;
kZIn			equ 05Ch&lt;br /&gt;
kZOut			equ 05Dh&lt;br /&gt;
kZPrev			equ 05Eh&lt;br /&gt;
kBox			equ 05Fh&lt;br /&gt;
kDecml			equ 060h&lt;br /&gt;
kSetZm			equ 061h&lt;br /&gt;
kSquar			equ 062h&lt;br /&gt;
kStd			equ 063h&lt;br /&gt;
kTrig			equ 064h&lt;br /&gt;
kUsrZm			equ 065h&lt;br /&gt;
kZSto			equ 066h&lt;br /&gt;
kZInt			equ 067h&lt;br /&gt;
kZStat			equ 068h&lt;br /&gt;
echoStart2		equ 069h&lt;br /&gt;
kSelect			equ 069h&lt;br /&gt;
kCircl			equ 06Ah&lt;br /&gt;
kClDrw			equ 06Bh&lt;br /&gt;
kLine			equ 06Ch&lt;br /&gt;
kPen			equ 06Dh&lt;br /&gt;
kPtChg			equ 06Eh&lt;br /&gt;
kPtOff			equ 06Fh&lt;br /&gt;
kPtOn			equ 070h&lt;br /&gt;
kVert			equ 071h&lt;br /&gt;
kHoriz			equ 072h&lt;br /&gt;
kText			equ 073h&lt;br /&gt;
kTanLn			equ 074h&lt;br /&gt;
kEval			equ 075h&lt;br /&gt;
kInters			equ 076h&lt;br /&gt;
kDYDX			equ 077h&lt;br /&gt;
kFnIntg			equ 078h&lt;br /&gt;
kRootG			equ 079h&lt;br /&gt;
kDYDT			equ 07Ah&lt;br /&gt;
kDXDT			equ 07Bh&lt;br /&gt;
kDRDo			equ 07Ch&lt;br /&gt;
KGFMin			equ 07Dh&lt;br /&gt;
KGFMax			equ 07Eh&lt;br /&gt;
EchoStart		equ 07Fh&lt;br /&gt;
kListName		equ 07Fh&lt;br /&gt;
kAdd			equ 080h&lt;br /&gt;
kSub			equ 081h&lt;br /&gt;
kMul			equ 082h&lt;br /&gt;
kDiv			equ 083h&lt;br /&gt;
kExpon			equ 084h&lt;br /&gt;
kLParen			equ 085h&lt;br /&gt;
kRParen			equ 086h&lt;br /&gt;
kLBrack			equ 087h&lt;br /&gt;
kRBrack			equ 088h&lt;br /&gt;
kShade			equ 089h&lt;br /&gt;
kStore			equ 08Ah&lt;br /&gt;
kComma			equ 08Bh&lt;br /&gt;
kChs			equ 08Ch&lt;br /&gt;
kDecPnt			equ 08Dh&lt;br /&gt;
k0			equ 08Eh&lt;br /&gt;
k1			equ 08Fh&lt;br /&gt;
k2			equ 090h&lt;br /&gt;
k3			equ 091h&lt;br /&gt;
k4			equ 092h&lt;br /&gt;
k5			equ 093h&lt;br /&gt;
k6			equ 094h&lt;br /&gt;
k7			equ 095h&lt;br /&gt;
k8			equ 096h&lt;br /&gt;
k9			equ 097h&lt;br /&gt;
kEE			equ 098h&lt;br /&gt;
kSpace			equ 099h&lt;br /&gt;
kCapA			equ 09Ah&lt;br /&gt;
kCapB			equ 09Bh&lt;br /&gt;
kCapC			equ 09Ch&lt;br /&gt;
kCapD			equ 09Dh&lt;br /&gt;
kCapE			equ 09Eh&lt;br /&gt;
kCapF			equ 09Fh&lt;br /&gt;
kCapG			equ 0A0h&lt;br /&gt;
kCapH			equ 0A1h&lt;br /&gt;
kCapI			equ 0A2h&lt;br /&gt;
kCapJ			equ 0A3h&lt;br /&gt;
kCapK			equ 0A4h&lt;br /&gt;
kCapL			equ 0A5h&lt;br /&gt;
kCapM			equ 0A6h&lt;br /&gt;
kCapN			equ 0A7h&lt;br /&gt;
kCapO			equ 0A8h&lt;br /&gt;
kCapP			equ 0A9h&lt;br /&gt;
kCapQ			equ 0AAh&lt;br /&gt;
kCapR			equ 0ABh&lt;br /&gt;
kCapS			equ 0ACh&lt;br /&gt;
kCapT			equ 0ADh&lt;br /&gt;
kCapU			equ 0AEh&lt;br /&gt;
kCapV			equ 0AFh&lt;br /&gt;
kCapW			equ 0B0h&lt;br /&gt;
kCapX			equ 0B1h&lt;br /&gt;
kCapY			equ 0B2h&lt;br /&gt;
kCapZ			equ 0B3h&lt;br /&gt;
kVarx			equ 0B4h&lt;br /&gt;
kPi			equ 0B5h&lt;br /&gt;
kInv			equ 0B6h&lt;br /&gt;
kSin			equ 0B7h&lt;br /&gt;
kASin			equ 0B8h&lt;br /&gt;
kCos			equ 0B9h&lt;br /&gt;
kACos			equ 0BAh&lt;br /&gt;
kTan			equ 0BBh&lt;br /&gt;
kATan			equ 0BCh&lt;br /&gt;
kSquare			equ 0BDh&lt;br /&gt;
kSqrt			equ 0BEh&lt;br /&gt;
kLn			equ 0BFh&lt;br /&gt;
kExp			equ 0C0h&lt;br /&gt;
kLog			equ 0C1h&lt;br /&gt;
kALog			equ 0C2h&lt;br /&gt;
kToABC			equ 0C3h&lt;br /&gt;
kClrTbl			equ 0C4h&lt;br /&gt;
kAns			equ 0C5h&lt;br /&gt;
kColon			equ 0C6h&lt;br /&gt;
kNDeriv			equ 0C7h&lt;br /&gt;
kFnInt			equ 0C8h&lt;br /&gt;
kRoot			equ 0C9h&lt;br /&gt;
kQuest			equ 0CAh&lt;br /&gt;
kQuote			equ 0CBh&lt;br /&gt;
kTheta			equ 0CCh&lt;br /&gt;
kIf			equ 0CDh&lt;br /&gt;
kThen			equ 0CEh&lt;br /&gt;
kElse			equ 0CFh&lt;br /&gt;
kFor			equ 0D0h&lt;br /&gt;
kWhile			equ 0D1h&lt;br /&gt;
kRepeat			equ 0D2h&lt;br /&gt;
kEnd			equ 0D3h&lt;br /&gt;
kPause			equ 0D4h&lt;br /&gt;
kLbl			equ 0D5h&lt;br /&gt;
kGoto			equ 0D6h&lt;br /&gt;
kISG			equ 0D7h&lt;br /&gt;
kDSL			equ 0D8h&lt;br /&gt;
kMenu			equ 0D9h&lt;br /&gt;
kExec			equ 0DAh&lt;br /&gt;
kReturn			equ 0DBh&lt;br /&gt;
kStop			equ 0DCh&lt;br /&gt;
kInput			equ 0DDh&lt;br /&gt;
kPrompt			equ 0DEh&lt;br /&gt;
kDisp			equ 0DFh&lt;br /&gt;
kDispG			equ 0E0h&lt;br /&gt;
kDispT			equ 0E1h&lt;br /&gt;
kOutput			equ 0E2h&lt;br /&gt;
kGetKey			equ 0E3h&lt;br /&gt;
kClrHome		equ 0E4h&lt;br /&gt;
kPrtScr			equ 0E5h&lt;br /&gt;
kSinH			equ 0E6h&lt;br /&gt;
kCosH			equ 0E7h&lt;br /&gt;
kTanH			equ 0E8h&lt;br /&gt;
kASinH			equ 0E9h&lt;br /&gt;
kACosH			equ 0EAh&lt;br /&gt;
kATanH			equ 0EBh&lt;br /&gt;
kLBrace			equ 0ECh&lt;br /&gt;
kRBrace			equ 0EDh&lt;br /&gt;
kI			equ 0EEh&lt;br /&gt;
kCONSTeA		equ 0EFh&lt;br /&gt;
kPlot3			equ 0F0h&lt;br /&gt;
kFMin			equ 0F1h&lt;br /&gt;
kFMax			equ 0F2h&lt;br /&gt;
kL1A			equ 0F3h&lt;br /&gt;
kL2A			equ 0F4h&lt;br /&gt;
kL3A			equ 0F5h&lt;br /&gt;
kL4A			equ 0F6h&lt;br /&gt;
kL5A			equ 0F7h&lt;br /&gt;
kL6A			equ 0F8h&lt;br /&gt;
kunA			equ 0F9h&lt;br /&gt;
kvnA			equ 0FAh&lt;br /&gt;
kwnA			equ 0FBh&lt;br /&gt;
&lt;br /&gt;
;THIS KEY MEANS THAT IT IS A 2 BYTE KEYCODE&lt;br /&gt;
;THERE ARE 2 OF THESE KEYS; BE CAREFUL WITH USAGE&lt;br /&gt;
;------------------------------------------------&lt;br /&gt;
kExtendEcho2		equ 0FCh&lt;br /&gt;
&lt;br /&gt;
;THIS KEY MEANS THAT THE KEY PRESS IS ONE THAT ECHOS&lt;br /&gt;
;INTO A BUFFER, AND IT IS A 2 BYTE KEY CODE, GO LOOK AT&lt;br /&gt;
;(EXTECHO) FOR THE KEY VALUE &lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
kExtendEcho		equ 0FEh&lt;br /&gt;
&lt;br /&gt;
kE1BT			equ 0&lt;br /&gt;
kDrawInv		equ kE1BT&lt;br /&gt;
kDrawF			equ kE1BT+1&lt;br /&gt;
kPixelOn		equ kE1BT+2&lt;br /&gt;
kPixelOff		equ kE1BT+3&lt;br /&gt;
kPxlTest		equ kE1BT+4&lt;br /&gt;
kRCGDB			equ kE1BT+5&lt;br /&gt;
kRCPic			equ kE1BT+6&lt;br /&gt;
kSTGDB			equ kE1BT+7&lt;br /&gt;
kSTPic			equ kE1BT+8&lt;br /&gt;
kAbs			equ kE1BT+9&lt;br /&gt;
kTEqu			equ kE1BT+10 ;==&lt;br /&gt;
kTNoteQ			equ kE1BT+11 ;&amp;lt;&amp;gt;&lt;br /&gt;
kTGT			equ kE1BT+12 ;&amp;gt;&lt;br /&gt;
kTGTE			equ kE1BT+13 ;&amp;gt;=&lt;br /&gt;
kTLT			equ kE1BT+14 ;&amp;lt;&lt;br /&gt;
kTLTE			equ kE1BT+15 ;&amp;lt;=&lt;br /&gt;
kAnd			equ kE1BT+16&lt;br /&gt;
kOr			equ kE1BT+17&lt;br /&gt;
kXor			equ kE1BT+18&lt;br /&gt;
kNot			equ kE1BT+19&lt;br /&gt;
kLR1			equ kE1BT+20&lt;br /&gt;
kXRoot			equ kE1BT+21&lt;br /&gt;
kCube			equ kE1BT+22&lt;br /&gt;
kCbRt			equ kE1BT+23 ;Cube ROOT&lt;br /&gt;
kToDec			equ kE1BT+24&lt;br /&gt;
kCubicR			equ kE1BT+25&lt;br /&gt;
kQuartR			equ kE1BT+26&lt;br /&gt;
kPlot1			equ kE1BT+27&lt;br /&gt;
kPlot2			equ kE1BT+28&lt;br /&gt;
kRound			equ kE1BT+29&lt;br /&gt;
kIPart			equ kE1BT+30&lt;br /&gt;
kFPart			equ kE1BT+31&lt;br /&gt;
kInt			equ kE1BT+32&lt;br /&gt;
kRand			equ kE1BT+33&lt;br /&gt;
kNPR			equ kE1BT+34&lt;br /&gt;
kNCR			equ kE1BT+35&lt;br /&gt;
kXFactorial		equ kE1BT+36&lt;br /&gt;
kRad			equ kE1BT+37&lt;br /&gt;
kDegr			equ kE1BT+38 ;DEGREES CONV&lt;br /&gt;
kAPost			equ kE1BT+39&lt;br /&gt;
kToDMS			equ kE1BT+40&lt;br /&gt;
kRToPo			equ kE1BT+41 ;R&lt;br /&gt;
kRToPr			equ kE1BT+42&lt;br /&gt;
kPToRx			equ kE1BT+43&lt;br /&gt;
kPToRy			equ kE1BT+44&lt;br /&gt;
kRowSwap		equ kE1BT+45&lt;br /&gt;
kRowPlus		equ kE1BT+46&lt;br /&gt;
kTimRow			equ kE1BT+47&lt;br /&gt;
kTRowP			equ kE1BT+48&lt;br /&gt;
kSortA			equ kE1BT+49&lt;br /&gt;
kSortD			equ kE1BT+50&lt;br /&gt;
kSeq			equ kE1BT+51&lt;br /&gt;
kMin			equ kE1BT+52&lt;br /&gt;
kMax			equ kE1BT+53&lt;br /&gt;
kMean			equ kE1BT+54&lt;br /&gt;
kMedian			equ kE1BT+55&lt;br /&gt;
kSum			equ kE1BT+56&lt;br /&gt;
kProd			equ kE1BT+57&lt;br /&gt;
kDet			equ kE1BT+58&lt;br /&gt;
kTransp			equ kE1BT+59&lt;br /&gt;
kDim			equ kE1BT+60&lt;br /&gt;
kFill			equ kE1BT+61&lt;br /&gt;
kIdent			equ kE1BT+62&lt;br /&gt;
kRandm			equ kE1BT+63&lt;br /&gt;
kAug			equ kE1BT+64&lt;br /&gt;
kOneVar			equ kE1BT+65&lt;br /&gt;
kTwoVar			equ kE1BT+66&lt;br /&gt;
kLR			equ kE1BT+67&lt;br /&gt;
kLRExp			equ kE1BT+68&lt;br /&gt;
kLRLn			equ kE1BT+69&lt;br /&gt;
kLRPwr			equ kE1BT+70&lt;br /&gt;
kMedMed			equ kE1BT+71&lt;br /&gt;
kQuad			equ kE1BT+72&lt;br /&gt;
kClrLst			equ kE1BT+73&lt;br /&gt;
kHist			equ kE1BT+74&lt;br /&gt;
kxyLine			equ kE1BT+75&lt;br /&gt;
kScatter		equ kE1BT+76&lt;br /&gt;
kmRad			equ kE1BT+77&lt;br /&gt;
kmDeg			equ kE1BT+78&lt;br /&gt;
kmNormF			equ kE1BT+79&lt;br /&gt;
kmSci			equ kE1BT+80&lt;br /&gt;
kmEng			equ kE1BT+81&lt;br /&gt;
kmFloat			equ kE1BT+82&lt;br /&gt;
kFix			equ kE1BT+83&lt;br /&gt;
kSplitOn		equ kE1BT+84&lt;br /&gt;
kFullScreen		equ kE1BT+85&lt;br /&gt;
kStndrd			equ kE1BT+86&lt;br /&gt;
kParam			equ kE1BT+87&lt;br /&gt;
kPolar			equ kE1BT+88&lt;br /&gt;
kSeqG			equ kE1BT+89&lt;br /&gt;
kAFillOn		equ kE1BT+90&lt;br /&gt;
kAFillOff		equ kE1BT+91&lt;br /&gt;
kACalcOn		equ kE1BT+92&lt;br /&gt;
kACalcOff		equ kE1BT+93&lt;br /&gt;
kFNOn			equ kE1BT+94&lt;br /&gt;
kFNOff			equ kE1BT+95&lt;br /&gt;
kPlotsOn		equ kE1BT+96&lt;br /&gt;
kPlotsOff		equ kE1BT+97&lt;br /&gt;
kPixelChg		equ kE1BT+98&lt;br /&gt;
kSendMBL		equ kE1BT+99&lt;br /&gt;
kRecvMBL		equ kE1BT+100&lt;br /&gt;
kBoxPlot		equ kE1BT+101&lt;br /&gt;
kBoxIcon		equ kE1BT+102&lt;br /&gt;
kCrossIcon		equ kE1BT+103&lt;br /&gt;
kDotIcon		equ kE1BT+104&lt;br /&gt;
kE2BT			equ kE1BT+105&lt;br /&gt;
kSeqential		equ kE2BT&lt;br /&gt;
kSimulG			equ kE2BT+1&lt;br /&gt;
kPolarG			equ kE2BT+2&lt;br /&gt;
kRectG			equ kE2BT+3&lt;br /&gt;
kCoordOn		equ kE2BT+4&lt;br /&gt;
kCoordOff		equ kE2BT+5&lt;br /&gt;
kDrawLine		equ kE2BT+6&lt;br /&gt;
kDrawDot		equ kE2BT+7&lt;br /&gt;
kAxisOn			equ kE2BT+8&lt;br /&gt;
kAxisOff		equ kE2BT+9&lt;br /&gt;
kGridOn			equ kE2BT+10&lt;br /&gt;
kGridOff		equ kE2BT+11&lt;br /&gt;
kLblOn			equ kE2BT+12&lt;br /&gt;
kLblOff			equ kE2BT+13&lt;br /&gt;
kL1			equ kE2BT+14&lt;br /&gt;
kL2			equ kE2BT+15&lt;br /&gt;
kL3			equ kE2BT+16&lt;br /&gt;
kL4			equ kE2BT+17&lt;br /&gt;
kL5			equ kE2BT+18&lt;br /&gt;
kL6			equ kE2BT+19&lt;br /&gt;
&lt;br /&gt;
;These keys are laid on top of existing keys to&lt;br /&gt;
;enable localization in the inferential stats editor.&lt;br /&gt;
;----------------------------------------------------&lt;br /&gt;
kinfData		equ kL1&lt;br /&gt;
kinfStats		equ kL1+1&lt;br /&gt;
kinfYes			equ kL1+2&lt;br /&gt;
kinfNo			equ kL1+3&lt;br /&gt;
kinfCalc		equ kL1+4&lt;br /&gt;
kinfDraw		equ kL1+5&lt;br /&gt;
kinfAlt1ne		equ kL1+6&lt;br /&gt;
kinfAlt1lt		equ kL1+7&lt;br /&gt;
kinfAlt1gt		equ kL1+8&lt;br /&gt;
kinfAlt2ne		equ kL1+9&lt;br /&gt;
kinfAlt2lt		equ kL1+10&lt;br /&gt;
kinfAlt2gt		equ kL1+11&lt;br /&gt;
kinfAlt3ne		equ kL1+12&lt;br /&gt;
kinfAlt3lt		equ kL1+13&lt;br /&gt;
kinfAlt3gt		equ kL1+14&lt;br /&gt;
kinfAlt4ne		equ kL1+15&lt;br /&gt;
kinfAlt4lt		equ kL1+16&lt;br /&gt;
kinfAlt4gt		equ kL1+17&lt;br /&gt;
kinfAlt5ne		equ kL1+18&lt;br /&gt;
kinfAlt5lt		equ kL1+19&lt;br /&gt;
kinfAlt5gt		equ kL1+20&lt;br /&gt;
kinfAlt6ne		equ kL1+21&lt;br /&gt;
kinfAlt6lt		equ kL1+22&lt;br /&gt;
kinfAlt6gt		equ kL1+23&lt;br /&gt;
kMatA			equ kE2BT+20&lt;br /&gt;
kMatB			equ kE2BT+21&lt;br /&gt;
kMatC			equ kE2BT+22&lt;br /&gt;
kMatD			equ kE2BT+23&lt;br /&gt;
kMatE			equ kE2BT+24&lt;br /&gt;
kXmin			equ kE2BT+25&lt;br /&gt;
kXmax			equ kE2BT+26&lt;br /&gt;
kXscl			equ kE2BT+27&lt;br /&gt;
kYmin			equ kE2BT+28&lt;br /&gt;
kYmax			equ kE2BT+29&lt;br /&gt;
kYscl			equ kE2BT+30&lt;br /&gt;
kTmin			equ kE2BT+31&lt;br /&gt;
kTmax			equ kE2BT+32&lt;br /&gt;
kTStep			equ kE2BT+33&lt;br /&gt;
kOmin			equ kE2BT+34&lt;br /&gt;
kOmax			equ kE2BT+35&lt;br /&gt;
kOStep			equ kE2BT+36&lt;br /&gt;
ku0			equ kE2BT+37&lt;br /&gt;
kv0			equ kE2BT+38&lt;br /&gt;
knMin			equ kE2BT+39&lt;br /&gt;
knMax			equ kE2BT+40&lt;br /&gt;
kDeltaY			equ kE2BT+41&lt;br /&gt;
kDeltaX			equ kE2BT+42&lt;br /&gt;
kZXmin			equ kE2BT+43&lt;br /&gt;
kZXmax			equ kE2BT+44&lt;br /&gt;
kZXscl			equ kE2BT+45&lt;br /&gt;
kZYmin			equ kE2BT+46&lt;br /&gt;
kZYmax			equ kE2BT+47&lt;br /&gt;
kZYscl			equ kE2BT+48&lt;br /&gt;
kZTmin			equ kE2BT+49&lt;br /&gt;
kZTmax			equ kE2BT+50&lt;br /&gt;
kZTStep			equ kE2BT+51&lt;br /&gt;
kZOmin			equ kE2BT+52&lt;br /&gt;
kZOmax			equ kE2BT+53&lt;br /&gt;
kZOStep			equ kE2BT+54&lt;br /&gt;
kZu0			equ kE2BT+55&lt;br /&gt;
kZv0			equ kE2BT+56&lt;br /&gt;
kZnMin			equ kE2BT+57&lt;br /&gt;
kZnMax			equ kE2BT+58&lt;br /&gt;
kDelLast		equ kE2BT+59&lt;br /&gt;
kSinReg			equ kE2BT+60&lt;br /&gt;
kConstE			equ kE2BT+61&lt;br /&gt;
kPic1			equ kE2BT+62&lt;br /&gt;
kPic2			equ kE2BT+63&lt;br /&gt;
kPic3			equ kE2BT+64&lt;br /&gt;
kDelVar			equ kE2BT+65&lt;br /&gt;
kGetCalc		equ kE2BT+66&lt;br /&gt;
kRealM			equ kE2BT+67&lt;br /&gt;
kPolarM			equ kE2BT+68&lt;br /&gt;
kRectM			equ kE2BT+69&lt;br /&gt;
kuv			equ kE2BT+70 ;U vs V&lt;br /&gt;
kvw			equ kE2BT+71 ;V vs W&lt;br /&gt;
kuw			equ kE2BT+72 ;U vs W&lt;br /&gt;
kFinPMTend		equ kE2BT+73&lt;br /&gt;
kFinPMTbeg		equ kE2BT+74&lt;br /&gt;
kGraphStyle		equ kE2BT+75&lt;br /&gt;
kExprOn			equ kE2BT+76&lt;br /&gt;
kExprOff		equ kE2BT+77&lt;br /&gt;
kStatA			equ kE2BT+78&lt;br /&gt;
kStatB			equ kE2BT+79&lt;br /&gt;
kStatC			equ kE2BT+80&lt;br /&gt;
kCorr			equ kE2BT+81&lt;br /&gt;
kStatD			equ kE2BT+82&lt;br /&gt;
kStatE			equ kE2BT+83&lt;br /&gt;
kRegEq			equ kE2BT+84&lt;br /&gt;
kMinX			equ kE2BT+85&lt;br /&gt;
kQ1			equ kE2BT+86&lt;br /&gt;
kMD			equ kE2BT+87&lt;br /&gt;
kQ3			equ kE2BT+88&lt;br /&gt;
kMaxX			equ kE2BT+89&lt;br /&gt;
kStatX1			equ kE2BT+90&lt;br /&gt;
kStatY1			equ kE2BT+91&lt;br /&gt;
kStatX2			equ kE2BT+92&lt;br /&gt;
kStatY2			equ kE2BT+93&lt;br /&gt;
kStatX3			equ kE2BT+94&lt;br /&gt;
kStatY3			equ kE2BT+95&lt;br /&gt;
kTblMin			equ kE2BT+96&lt;br /&gt;
kTblStep		equ kE2BT+97&lt;br /&gt;
kSetupLst		equ kE2BT+98&lt;br /&gt;
kClrAllLst		equ kE2BT+99&lt;br /&gt;
kLogistic		equ kE2BT+100&lt;br /&gt;
kZTest			equ kE2BT+101&lt;br /&gt;
kTTest			equ kE2BT+102&lt;br /&gt;
k2SampZTest		equ kE2BT+103&lt;br /&gt;
k2SampTTest		equ kE2BT+104&lt;br /&gt;
k1PropZTest		equ kE2BT+105&lt;br /&gt;
k2PropZTest		equ kE2BT+106&lt;br /&gt;
kChiTest		equ kE2BT+107&lt;br /&gt;
k2SampFTest		equ kE2BT+108&lt;br /&gt;
kZIntVal		equ kE2BT+109&lt;br /&gt;
kTIntVal		equ kE2BT+110&lt;br /&gt;
k2SampTInt		equ kE2BT+111&lt;br /&gt;
k2SampZInt		equ kE2BT+112&lt;br /&gt;
k1PropZInt		equ kE2BT+113&lt;br /&gt;
k2PropZInt		equ kE2BT+114&lt;br /&gt;
kDNormal		equ kE2BT+115&lt;br /&gt;
kInvNorm		equ kE2BT+116&lt;br /&gt;
kDT			equ kE2BT+117&lt;br /&gt;
kChi			equ kE2BT+118&lt;br /&gt;
kDF			equ kE2BT+119&lt;br /&gt;
kBinPDF			equ kE2BT+120&lt;br /&gt;
kBinCDF			equ kE2BT+121&lt;br /&gt;
kPoiPDF			equ kE2BT+122&lt;br /&gt;
kPoiCDF			equ kE2BT+123&lt;br /&gt;
kun			equ kE2BT+124&lt;br /&gt;
kvn			equ kE2BT+125&lt;br /&gt;
kwn			equ kE2BT+126&lt;br /&gt;
kRecn			equ kE2BT+127&lt;br /&gt;
kPlotStart		equ kE2BT+128&lt;br /&gt;
kZPlotStart		equ kE2BT+129 ;recursion n&lt;br /&gt;
kXFact			equ kE2BT+130 ;PlotStart&lt;br /&gt;
kYFact			equ kE2BT+131 ;ZPlotStart&lt;br /&gt;
kANOVA			equ kE2BT+132 ;XFact&lt;br /&gt;
kMaxY			equ kE2BT+133 ;YFact&lt;br /&gt;
kWebOn			equ kE2BT+134 ;MinY&lt;br /&gt;
kWebOff			equ kE2BT+135 ;MaxY&lt;br /&gt;
kTblInput		equ kE2BT+136 ;WEB ON&lt;br /&gt;
kGeoPDF			equ kE2BT+137 ;WEB OFF&lt;br /&gt;
kGeoCDF			equ kE2BT+138 ;WEB OFF&lt;br /&gt;
kShadeNorm		equ kE2BT+139&lt;br /&gt;
kShadeT			equ kE2BT+140&lt;br /&gt;
kShadeChi		equ kE2BT+141&lt;br /&gt;
kShadeF			equ kE2BT+142&lt;br /&gt;
kPlotStep		equ kE2BT+143&lt;br /&gt;
kZPlotStep		equ kE2BT+144&lt;br /&gt;
kLinRegtTest		equ kE2BT+145&lt;br /&gt;
KMGT			equ kE2BT+146 ;VERT SPLIT&lt;br /&gt;
kSelectA		equ kE2BT+147&lt;br /&gt;
kZFitA			equ kE2BT+148&lt;br /&gt;
kE2BT_End		equ kZFitA&lt;br /&gt;
&lt;br /&gt;
;More 2 Byte Keys &lt;br /&gt;
;------------------------------------&lt;br /&gt;
kE2BT2			equ 0&lt;br /&gt;
kGDB1			equ kE2BT2&lt;br /&gt;
kGDB2			equ kE2BT2+1&lt;br /&gt;
kGDB3			equ kE2BT2+2&lt;br /&gt;
kY1			equ kE2BT2+3&lt;br /&gt;
kY2			equ kE2BT2+4&lt;br /&gt;
kY3			equ kE2BT2+5&lt;br /&gt;
kY4			equ kE2BT2+6&lt;br /&gt;
kY5			equ kE2BT2+7&lt;br /&gt;
kY6			equ kE2BT2+8&lt;br /&gt;
kY7			equ kE2BT2+9&lt;br /&gt;
kY8			equ kE2BT2+10&lt;br /&gt;
kY9			equ kE2BT2+11&lt;br /&gt;
kY0			equ kE2BT2+12&lt;br /&gt;
kX1T			equ kE2BT2+13&lt;br /&gt;
kY1T			equ kE2BT2+14&lt;br /&gt;
kX2T			equ kE2BT2+15&lt;br /&gt;
kY2T			equ kE2BT2+16&lt;br /&gt;
kX3T			equ kE2BT2+17&lt;br /&gt;
kY3T			equ kE2BT2+18&lt;br /&gt;
kX4T			equ kE2BT2+19&lt;br /&gt;
kY4T			equ kE2BT2+20&lt;br /&gt;
kX5T			equ kE2BT2+21&lt;br /&gt;
kY5T			equ kE2BT2+22&lt;br /&gt;
kX6T			equ kE2BT2+23&lt;br /&gt;
kY6T			equ kE2BT2+24&lt;br /&gt;
kR1			equ kE2BT2+25&lt;br /&gt;
kR2			equ kE2BT2+26&lt;br /&gt;
kR3			equ kE2BT2+27&lt;br /&gt;
kR4			equ kE2BT2+28&lt;br /&gt;
kR5			equ kE2BT2+29&lt;br /&gt;
kR6			equ kE2BT2+30&lt;br /&gt;
kGDB4			equ kE2BT2+31&lt;br /&gt;
kGDB5			equ kE2BT2+32&lt;br /&gt;
kGDB6			equ kE2BT2+33&lt;br /&gt;
kPic4			equ kE2BT2+34&lt;br /&gt;
kPic5			equ kE2BT2+35&lt;br /&gt;
kPic6			equ kE2BT2+36&lt;br /&gt;
kGDB7			equ kE2BT2+37&lt;br /&gt;
kGDB8			equ kE2BT2+38&lt;br /&gt;
kGDB9			equ kE2BT2+39&lt;br /&gt;
kGDB0			equ kE2BT2+40&lt;br /&gt;
kPic7			equ kE2BT2+41&lt;br /&gt;
kPic8			equ kE2BT2+42&lt;br /&gt;
kPic9			equ kE2BT2+43&lt;br /&gt;
kPic0			equ kE2BT2+44&lt;br /&gt;
kStatN			equ kE2BT2+45&lt;br /&gt;
kXMean			equ kE2BT2+46&lt;br /&gt;
kConj			equ kE2BT2+47&lt;br /&gt;
kReal			equ kE2BT2+48&lt;br /&gt;
kFAngle			equ kE2BT2+49&lt;br /&gt;
kLCM			equ kE2BT2+50&lt;br /&gt;
kGCD			equ kE2BT2+51&lt;br /&gt;
kRandInt		equ kE2BT2+52&lt;br /&gt;
kRandNorm		equ kE2BT2+53&lt;br /&gt;
kToPolar		equ kE2BT2+54&lt;br /&gt;
kToRect			equ kE2BT2+55&lt;br /&gt;
kYMean			equ kE2BT2+56&lt;br /&gt;
kStdX			equ kE2BT2+57&lt;br /&gt;
kStdX1			equ kE2BT2+58&lt;br /&gt;
kw0			equ kE2BT2+59&lt;br /&gt;
kMatF			equ kE2BT2+60&lt;br /&gt;
kMatG			equ kE2BT2+61&lt;br /&gt;
kMatRH			equ kE2BT2+62&lt;br /&gt;
kMatI			equ kE2BT2+63&lt;br /&gt;
kMatJ			equ kE2BT2+64&lt;br /&gt;
kYMean1			equ kE2BT2+65&lt;br /&gt;
kStdY			equ kE2BT2+66&lt;br /&gt;
kStdY1			equ kE2BT2+67&lt;br /&gt;
kMatToLst		equ kE2BT2+68&lt;br /&gt;
kLstToMat		equ kE2BT2+69&lt;br /&gt;
kCumSum			equ kE2BT2+70&lt;br /&gt;
kDeltaLst		equ kE2BT2+71&lt;br /&gt;
kStdDev			equ kE2BT2+72&lt;br /&gt;
kVariance		equ kE2BT2+73&lt;br /&gt;
kLength			equ kE2BT2+74&lt;br /&gt;
kEquToStrng		equ kE2BT2+75&lt;br /&gt;
kStrngToEqu		equ kE2BT2+76&lt;br /&gt;
kExpr			equ kE2BT2+77&lt;br /&gt;
kSubStrng		equ kE2BT2+78&lt;br /&gt;
kInStrng		equ kE2BT2+79&lt;br /&gt;
kStr1			equ kE2BT2+80&lt;br /&gt;
kStr2			equ kE2BT2+81&lt;br /&gt;
kStr3			equ kE2BT2+82&lt;br /&gt;
kStr4           	equ kE2BT2+83&lt;br /&gt;
kStr5           	equ kE2BT2+84&lt;br /&gt;
kStr6           	equ kE2BT2+85&lt;br /&gt;
kStr7           	equ kE2BT2+86&lt;br /&gt;
kStr8           	equ kE2BT2+87&lt;br /&gt;
kStr9           	equ kE2BT2+88&lt;br /&gt;
kStr0           	equ kE2BT2+89&lt;br /&gt;
kFinN           	equ kE2BT2+90&lt;br /&gt;
kFinI           	equ kE2BT2+91&lt;br /&gt;
kFinPV          	equ kE2BT2+92&lt;br /&gt;
kFinPMT         	equ kE2BT2+93&lt;br /&gt;
kFinFV          	equ kE2BT2+94&lt;br /&gt;
kFinPY          	equ kE2BT2+95&lt;br /&gt;
kFinCY          	equ kE2BT2+96&lt;br /&gt;
kFinFPMT        	equ kE2BT2+97&lt;br /&gt;
kFinFI          	equ kE2BT2+98&lt;br /&gt;
kFinFPV         	equ kE2BT2+99&lt;br /&gt;
kFinFN          	equ kE2BT2+100&lt;br /&gt;
kFinFFV         	equ kE2BT2+101&lt;br /&gt;
kFinNPV         	equ kE2BT2+102&lt;br /&gt;
kFinIRR         	equ kE2BT2+103&lt;br /&gt;
kFinBAL         	equ kE2BT2+104&lt;br /&gt;
kFinPRN         	equ kE2BT2+105&lt;br /&gt;
kFinINT         	equ kE2BT2+106&lt;br /&gt;
kSumX           	equ kE2BT2+107&lt;br /&gt;
kSumX2          	equ kE2BT2+108&lt;br /&gt;
kFinToNom       	equ kE2BT2+109&lt;br /&gt;
kFinToEff       	equ kE2BT2+110&lt;br /&gt;
kFinDBD         	equ kE2BT2+111&lt;br /&gt;
kStatVP         	equ kE2BT2+112&lt;br /&gt;
kStatZ          	equ kE2BT2+113&lt;br /&gt;
kStatT          	equ kE2BT2+114&lt;br /&gt;
kStatChi        	equ kE2BT2+115&lt;br /&gt;
kStatF          	equ kE2BT2+116&lt;br /&gt;
kStatDF         	equ kE2BT2+117&lt;br /&gt;
kStatPhat       	equ kE2BT2+118&lt;br /&gt;
kStatPhat1      	equ kE2BT2+119&lt;br /&gt;
kStatPhat2      	equ kE2BT2+120&lt;br /&gt;
kStatMeanX1     	equ kE2BT2+121&lt;br /&gt;
kStatMeanX2     	equ kE2BT2+122&lt;br /&gt;
kStatStdX1      	equ kE2BT2+123&lt;br /&gt;
kStatStdX2      	equ kE2BT2+124&lt;br /&gt;
kStatStdXP		equ kE2BT2+125&lt;br /&gt;
kStatN1			equ kE2BT2+126&lt;br /&gt;
kStatN2			equ kE2BT2+127&lt;br /&gt;
kStatLower		equ kE2BT2+128&lt;br /&gt;
kStatUpper		equ kE2BT2+129&lt;br /&gt;
kuw0			equ kE2BT2+130&lt;br /&gt;
kImag			equ kE2BT2+131&lt;br /&gt;
kSumY			equ kE2BT2+132&lt;br /&gt;
kXres			equ kE2BT2+133&lt;br /&gt;
kStat_s			equ kE2BT2+134&lt;br /&gt;
kSumY2			equ kE2BT2+135&lt;br /&gt;
kSumXY			equ kE2BT2+136&lt;br /&gt;
kuXres			equ kE2BT2+137&lt;br /&gt;
kModBox			equ kE2BT2+138&lt;br /&gt;
kNormProb		equ kE2BT2+139&lt;br /&gt;
kNormalPDF		equ kE2BT2+140&lt;br /&gt;
kTPDF			equ kE2BT2+141&lt;br /&gt;
kChiPDF			equ kE2BT2+142&lt;br /&gt;
kFPDF			equ kE2BT2+143&lt;br /&gt;
kMinY			equ kE2BT2+144 ;MinY&lt;br /&gt;
kRandBin		equ kE2BT2+145&lt;br /&gt;
kRef			equ kE2BT2+146&lt;br /&gt;
kRRef			equ kE2BT2+147&lt;br /&gt;
kLRSqr			equ kE2BT2+148&lt;br /&gt;
kBRSqr			equ kE2BT2+149&lt;br /&gt;
kDiagOn			equ kE2BT2+150&lt;br /&gt;
kDiagOff		equ kE2BT2+151&lt;br /&gt;
kun1			equ kE2BT2+152 ;FOR RCL USE WHEN GOTTEN FROM 82&lt;br /&gt;
kvn1			equ kE2BT2+153 ;FOR RCL USE WHEN GOTTEN FROM 82&lt;br /&gt;
k83_00End		equ kvn1 ;end of original keys...&lt;br /&gt;
kArchive		equ k83_00End + 1&lt;br /&gt;
kUnarchive		equ k83_00End + 2&lt;br /&gt;
kAsm			equ k83_00End + 3 ;Asm(&lt;br /&gt;
kAsmPrgm		equ k83_00End + 4 ;AsmPrgm&lt;br /&gt;
kAsmComp		equ k83_00End + 5 ;AsmComp(&lt;br /&gt;
kcapAAcute		equ k83_00End + 6&lt;br /&gt;
kcapAGrave		equ k83_00End + 7&lt;br /&gt;
kcapACaret		equ k83_00End + 8&lt;br /&gt;
kcapADier		equ k83_00End + 9&lt;br /&gt;
kaAcute			equ k83_00End + 10&lt;br /&gt;
kaGrave			equ k83_00End + 11&lt;br /&gt;
kaCaret			equ k83_00End + 12&lt;br /&gt;
kaDier			equ k83_00End + 13&lt;br /&gt;
kcapEAcute		equ k83_00End + 14&lt;br /&gt;
kcapEGrave		equ k83_00End + 15&lt;br /&gt;
kcapECaret		equ k83_00End + 16&lt;br /&gt;
kcapEDier		equ k83_00End + 17&lt;br /&gt;
keAcute			equ k83_00End + 18&lt;br /&gt;
keGrave			equ k83_00End + 19&lt;br /&gt;
keCaret			equ k83_00End + 20&lt;br /&gt;
keDier			equ k83_00End + 21&lt;br /&gt;
kcapIAcute		equ k83_00End + 22&lt;br /&gt;
kcapIGrave		equ k83_00End + 23&lt;br /&gt;
kcapICaret		equ k83_00End + 24&lt;br /&gt;
kcapIDier		equ k83_00End + 25&lt;br /&gt;
kiAcute			equ k83_00End + 26&lt;br /&gt;
kiGrave			equ k83_00End + 27&lt;br /&gt;
kiCaret			equ k83_00End + 28&lt;br /&gt;
kiDier			equ k83_00End + 29&lt;br /&gt;
kcapOAcute		equ k83_00End + 30&lt;br /&gt;
kcapOGrave		equ k83_00End + 31&lt;br /&gt;
kcapOCaret		equ k83_00End + 32&lt;br /&gt;
kcapODier		equ k83_00End + 33&lt;br /&gt;
koAcute			equ k83_00End + 34&lt;br /&gt;
koGrave			equ k83_00End + 35&lt;br /&gt;
koCaret			equ k83_00End + 36&lt;br /&gt;
koDier			equ k83_00End + 37&lt;br /&gt;
kcapUAcute		equ k83_00End + 38&lt;br /&gt;
kcapUGrave		equ k83_00End + 39&lt;br /&gt;
kcapUCaret		equ k83_00End + 40&lt;br /&gt;
kcapUDier		equ k83_00End + 41&lt;br /&gt;
kuAcute			equ k83_00End + 42&lt;br /&gt;
kuGrave			equ k83_00End + 43&lt;br /&gt;
kuCaret			equ k83_00End + 44&lt;br /&gt;
kuDier			equ k83_00End + 45&lt;br /&gt;
kcapCCed		equ k83_00End + 46&lt;br /&gt;
kcCed			equ k83_00End + 47&lt;br /&gt;
kcapNTilde		equ k83_00End + 48&lt;br /&gt;
knTilde			equ k83_00End + 49&lt;br /&gt;
kaccent			equ k83_00End + 50&lt;br /&gt;
kgrave			equ k83_00End + 51&lt;br /&gt;
kdieresis		equ k83_00End + 52&lt;br /&gt;
kquesDown		equ k83_00End + 53&lt;br /&gt;
kexclamDown     	equ k83_00End + 54&lt;br /&gt;
kalpha          	equ k83_00End + 55&lt;br /&gt;
kbeta           	equ k83_00End + 56&lt;br /&gt;
kgamma          	equ k83_00End + 57&lt;br /&gt;
kcapDelta		equ k83_00End + 58&lt;br /&gt;
kdelta			equ k83_00End + 59&lt;br /&gt;
kepsilon		equ k83_00End + 60&lt;br /&gt;
klambda			equ k83_00End + 61&lt;br /&gt;
kmu			equ k83_00End + 62&lt;br /&gt;
kpi2			equ k83_00End + 63&lt;br /&gt;
krho			equ k83_00End + 64&lt;br /&gt;
kcapSigma		equ k83_00End + 65&lt;br /&gt;
ksigma			equ k83_00End + 66&lt;br /&gt;
ktau			equ k83_00End + 67&lt;br /&gt;
kphi			equ k83_00End + 68&lt;br /&gt;
kcapOmega		equ k83_00End + 69&lt;br /&gt;
kphat			equ k83_00End + 70&lt;br /&gt;
kchi2			equ k83_00End + 71&lt;br /&gt;
kstatF2			equ k83_00End + 72&lt;br /&gt;
kLa			equ k83_00End + 73&lt;br /&gt;
kLb			equ k83_00End + 74&lt;br /&gt;
kLc			equ k83_00End + 75&lt;br /&gt;
kLd			equ k83_00End + 76&lt;br /&gt;
kLe			equ k83_00End + 77&lt;br /&gt;
kLf			equ k83_00End + 78&lt;br /&gt;
kLg			equ k83_00End + 79&lt;br /&gt;
kLh			equ k83_00End + 80&lt;br /&gt;
kLi			equ k83_00End + 81&lt;br /&gt;
kLj			equ k83_00End + 82&lt;br /&gt;
kLk			equ k83_00End + 83&lt;br /&gt;
kLl			equ k83_00End + 84&lt;br /&gt;
kLm			equ k83_00End + 85&lt;br /&gt;
kLsmalln		equ k83_00End + 86&lt;br /&gt;
kLo			equ k83_00End + 87&lt;br /&gt;
kLp			equ k83_00End + 88&lt;br /&gt;
kLq			equ k83_00End + 89&lt;br /&gt;
kLsmallr		equ k83_00End + 90&lt;br /&gt;
kLs			equ k83_00End + 91&lt;br /&gt;
kLt			equ k83_00End + 92&lt;br /&gt;
kLu			equ k83_00End + 93&lt;br /&gt;
kLv			equ k83_00End + 94&lt;br /&gt;
kLw			equ k83_00End + 95&lt;br /&gt;
kLx			equ k83_00End + 96&lt;br /&gt;
kLy			equ k83_00End + 97&lt;br /&gt;
kLz			equ k83_00End + 98&lt;br /&gt;
kGarbageC		equ k83_00End + 99 ;GarbageCollect&lt;br /&gt;
kE2BT2_End		equ kGarbageC&lt;br /&gt;
&lt;br /&gt;
;TI-83 Plus Context Equates&lt;br /&gt;
;---------------------------------------------&lt;br /&gt;
cxCmd			equ kQuit ;home screen&lt;br /&gt;
cxMatEdit		equ kMatrixEd ;matrix editor&lt;br /&gt;
cxPrgmEdit		equ kPrgmEd ;program editor&lt;br /&gt;
cxEquEdit		equ kYequ ;equation editor&lt;br /&gt;
cxGrRange		equ kWindow ;graph range editor&lt;br /&gt;
cxGrZfact		equ kZFactEd ;graph zoom factors editor&lt;br /&gt;
cxGraph			equ kGraph ;graph mode&lt;br /&gt;
cxStatEdit		equ kStatEd ;statistics list editor&lt;br /&gt;
cxPrgmInput		equ kPrgmInput ;programmed input&lt;br /&gt;
cxError			equ kError ;error handler&lt;br /&gt;
cxLinkIO		equ kLinkIO ;LINK I/O interface&lt;br /&gt;
cxMem			equ kResetMem ;reset memory&lt;br /&gt;
cxDefMem		equ kResetDef ;reset default&lt;br /&gt;
cxRAMApp		equ kChkRAM ;RAM usage screen&lt;br /&gt;
cxMode			equ kMode ;mode settings screen&lt;br /&gt;
cxErase			equ kDelMem ;memory erase&lt;br /&gt;
cxPrgmCreate		equ kPrgmCr ;PROGRAM CREATE&lt;br /&gt;
cxTableEditor		equ kTable ;TABLE EDITOR&lt;br /&gt;
cxTableSet		equ kTblSet ;TABLE SET UP&lt;br /&gt;
cxStatPlot		equ kStatP ;STAT PLOTS&lt;br /&gt;
cxInfStat		equ kInfStat ;Inferential Statistic&lt;br /&gt;
cxFormat		equ kFormat ;FORMAT CONTEXT&lt;br /&gt;
cxSolveTVM		equ kSolveTVM ;Solve TVM&lt;br /&gt;
cxSolveRoot		equ kSolveRoot ;Solve Root&lt;br /&gt;
lastOldApp		equ kExtApps ;external applications&lt;br /&gt;
cxextapps		equ kExtApps&lt;br /&gt;
cxNewApps		equ kNewApps ;new cerberus applications&lt;br /&gt;
cxGroup			equ cxNewApps+0 ;1st new app.&lt;br /&gt;
cxUnGroup		equ cxNewApps+1 ;2nd new app.&lt;br /&gt;
lastNewApp		equ cxUnGroup ;last new app for this ver&lt;br /&gt;
&lt;br /&gt;
;Scan Code Equates&lt;br /&gt;
;-------------------------------&lt;br /&gt;
skDown			equ 01h&lt;br /&gt;
skLeft			equ 02h&lt;br /&gt;
skRight			equ 03h&lt;br /&gt;
skUp			equ 04h&lt;br /&gt;
skEnter			equ 09h&lt;br /&gt;
skAdd			equ 0Ah&lt;br /&gt;
skSub			equ 0Bh&lt;br /&gt;
skMul			equ 0Ch&lt;br /&gt;
skDiv			equ 0Dh&lt;br /&gt;
skPower			equ 0Eh&lt;br /&gt;
skClear			equ 0Fh&lt;br /&gt;
skChs			equ 11h&lt;br /&gt;
sk3			equ 12h&lt;br /&gt;
sk6			equ 13h&lt;br /&gt;
sk9			equ 14h&lt;br /&gt;
skRParen		equ 15h&lt;br /&gt;
skTan			equ 16h&lt;br /&gt;
skVars			equ 17h&lt;br /&gt;
skDecPnt		equ 19h&lt;br /&gt;
sk2			equ 1Ah&lt;br /&gt;
sk5			equ 1Bh&lt;br /&gt;
sk8			equ 1Ch&lt;br /&gt;
skLParen		equ 1Dh&lt;br /&gt;
skCos			equ 1Eh&lt;br /&gt;
skPrgm			equ 1Fh&lt;br /&gt;
skStat			equ 20h&lt;br /&gt;
sk0			equ 21h&lt;br /&gt;
sk1			equ 22h&lt;br /&gt;
sk4			equ 23h&lt;br /&gt;
sk7			equ 24h&lt;br /&gt;
skComma			equ 25h&lt;br /&gt;
skSin			equ 26h&lt;br /&gt;
skMatrix		equ 27h&lt;br /&gt;
skGraphvar		equ 28h&lt;br /&gt;
skStore			equ 2Ah&lt;br /&gt;
skLn			equ 2Bh&lt;br /&gt;
skLog			equ 2Ch&lt;br /&gt;
skSquare		equ 2Dh&lt;br /&gt;
skRecip			equ 2Eh&lt;br /&gt;
skMath			equ 2Fh&lt;br /&gt;
skAlpha			equ 30h&lt;br /&gt;
skGraph			equ 31h&lt;br /&gt;
skTrace			equ 32h&lt;br /&gt;
skZoom			equ 33h&lt;br /&gt;
skWindow		equ 34h&lt;br /&gt;
skYEqu			equ 35h&lt;br /&gt;
sk2nd			equ 36h&lt;br /&gt;
skMode			equ 37h&lt;br /&gt;
skDel			equ 38h&lt;br /&gt;
&lt;br /&gt;
;Tokens&lt;br /&gt;
;----------------------------------------------------&lt;br /&gt;
EOSSTART		equ 0&lt;br /&gt;
&lt;br /&gt;
;DISPLAY CONVERSIONS COME IMMEDIATELY BEFORE 'TSTORE'&lt;br /&gt;
;&lt;br /&gt;
DCONV			equ 01h&lt;br /&gt;
;&lt;br /&gt;
tToDMS			equ DCONV ;01h&lt;br /&gt;
tToDEC			equ DCONV+1 ;02h&lt;br /&gt;
tToAbc			equ DCONV+2 ;03h &amp;gt; A b/c&lt;br /&gt;
;&lt;br /&gt;
tStore			equ DCONV+3 ;04h Lstore 01&lt;br /&gt;
;&lt;br /&gt;
tBoxPlot		equ 05h&lt;br /&gt;
;&lt;br /&gt;
BRACKS			equ 06h&lt;br /&gt;
;&lt;br /&gt;
tLBrack			equ BRACKS ;06h '['&lt;br /&gt;
tRBrack			equ BRACKS+1 ;07h ']'&lt;br /&gt;
tLBrace			equ BRACKS+2 ;08h '{'&lt;br /&gt;
tRBrace			equ BRACKS+3 ;09h '}'&lt;br /&gt;
;&lt;br /&gt;
tPOST1			equ BRACKS+4&lt;br /&gt;
;&lt;br /&gt;
tFromRad		equ tPOST1 ;0Ah Lradian&lt;br /&gt;
tFromDeg		equ tPOST1+1 ;0Bh Ldegree&lt;br /&gt;
tRecip			equ tPOST1+2 ;0Ch Linverse&lt;br /&gt;
tSqr			equ tPOST1+3 ;0Dh Lsquare&lt;br /&gt;
tTrnspos		equ tPOST1+4 ;0Eh Ltranspose&lt;br /&gt;
tCube			equ tPOST1+5 ;0Fh '^3'&lt;br /&gt;
;&lt;br /&gt;
tLParen			equ 10h ;10h '('&lt;br /&gt;
tRParen			equ 11h ;11h ')'&lt;br /&gt;
;&lt;br /&gt;
IMUN			equ 12h&lt;br /&gt;
;&lt;br /&gt;
tRound			equ IMUN ;12h 'round'&lt;br /&gt;
tPxTst			equ IMUN+1 ;13h 'PXL-TEST'&lt;br /&gt;
tAug			equ IMUN+2 ;14h 'aug'&lt;br /&gt;
tRowSwap		equ IMUN+3 ;15h 'rSwap'&lt;br /&gt;
tRowPlus		equ IMUN+4 ;16h 'rAdd'&lt;br /&gt;
tmRow			equ IMUN+5 ;17h 'multR'&lt;br /&gt;
tmRowPlus		equ IMUN+6 ;18h 'mRAdd'&lt;br /&gt;
tMax			equ IMUN+7 ;19h 'max'&lt;br /&gt;
tMin			equ IMUN+8 ;1Ah 'min'&lt;br /&gt;
tRToPr			equ IMUN+9 ;1Bh 'R&amp;gt;Pr&lt;br /&gt;
tRToPo			equ IMUN+10 ;1Ch 'R&amp;gt;Po&lt;br /&gt;
tPToRx			equ IMUN+11 ;1Dh 'P&amp;gt;Rx&lt;br /&gt;
tPToRy			equ IMUN+12 ;1Eh 'P&amp;gt;Ry&lt;br /&gt;
tMedian			equ IMUN+13 ;1Fh 'MEDIAN&lt;br /&gt;
tRandM			equ IMUN+14 ;20h 'randM'&lt;br /&gt;
tMean			equ IMUN+15 ;21h&lt;br /&gt;
tRoot			equ IMUN+16 ;22h 'ROOT'&lt;br /&gt;
tSeries			equ IMUN+17 ;23h 'seq'&lt;br /&gt;
tFnInt			equ IMUN+18 ;24h 'fnInt'&lt;br /&gt;
tNDeriv			equ IMUN+19 ;25h 'fnIr'&lt;br /&gt;
tEvalF			equ IMUN+20 ;26h&lt;br /&gt;
tFmin			equ IMUN+21 ;27h&lt;br /&gt;
tFmax			equ IMUN+22 ;28h&lt;br /&gt;
;&lt;br /&gt;
tEOSEL			equ IMUN+23&lt;br /&gt;
;&lt;br /&gt;
tSpace			equ tEOSEL ;29h ' '&lt;br /&gt;
tString			equ tEOSEL+1 ;2Ah '&amp;quot;'&lt;br /&gt;
tComma			equ tEOSEL+2 ;2Bh ','&lt;br /&gt;
;&lt;br /&gt;
tii			equ 2Ch ;i&lt;br /&gt;
&lt;br /&gt;
;Postfix Functions&lt;br /&gt;
;-----------------------------------------&lt;br /&gt;
tPost			equ 2Dh&lt;br /&gt;
;&lt;br /&gt;
tFact			equ tPost ;2Dh '!'&lt;br /&gt;
;&lt;br /&gt;
tCubicR			equ 2Eh&lt;br /&gt;
tQuartR			equ 2Fh&lt;br /&gt;
&lt;br /&gt;
;Number Tokens &lt;br /&gt;
;---------------------------------------&lt;br /&gt;
NUMS			equ 30h&lt;br /&gt;
;&lt;br /&gt;
t0			equ NUMS ;30h&lt;br /&gt;
t1			equ NUMS+1 ;31h&lt;br /&gt;
t2			equ NUMS+2 ;32h&lt;br /&gt;
t3			equ NUMS+3 ;33h&lt;br /&gt;
t4			equ NUMS+4 ;34h&lt;br /&gt;
t5			equ NUMS+5 ;35h&lt;br /&gt;
t6			equ NUMS+6 ;36h&lt;br /&gt;
t7			equ NUMS+7 ;37h&lt;br /&gt;
t8			equ NUMS+8 ;38h&lt;br /&gt;
t9			equ NUMS+9 ;39h&lt;br /&gt;
tDecPt			equ NUMS+10 ;3Ah&lt;br /&gt;
tee			equ NUMS+11 ;3Bh&lt;br /&gt;
&lt;br /&gt;
;Binary OP&lt;br /&gt;
;-------------------------------------------&lt;br /&gt;
tOr			equ 3Ch ;3Ch '_or_'&lt;br /&gt;
tXor			equ 3Dh ;3Dh&lt;br /&gt;
;&lt;br /&gt;
tColon			equ 3Eh ;3Eh ':'&lt;br /&gt;
tEnter			equ 3Fh ;3Fh Lenter&lt;br /&gt;
;&lt;br /&gt;
tAnd			equ 40h ;40h '_and_'&lt;br /&gt;
&lt;br /&gt;
;Letter Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
LET			equ 41h&lt;br /&gt;
tA			equ LET ;41h&lt;br /&gt;
tB			equ LET+1 ;42h&lt;br /&gt;
tC			equ LET+2 ;43h&lt;br /&gt;
tD			equ LET+3 ;44h&lt;br /&gt;
tE			equ LET+4 ;45h&lt;br /&gt;
tF			equ LET+5 ;46h&lt;br /&gt;
tG			equ LET+6 ;47h&lt;br /&gt;
tH			equ LET+7 ;48h&lt;br /&gt;
tI			equ LET+8 ;49h&lt;br /&gt;
tJ			equ LET+9 ;4Ah&lt;br /&gt;
tK			equ LET+10 ;4Bh&lt;br /&gt;
tL			equ LET+11 ;4Ch&lt;br /&gt;
tM			equ LET+12 ;4Dh&lt;br /&gt;
tN			equ LET+13 ;4Eh&lt;br /&gt;
tO			equ LET+14 ;4Fh&lt;br /&gt;
tP			equ LET+15 ;50h&lt;br /&gt;
tQ			equ LET+16 ;51h&lt;br /&gt;
tR			equ LET+17 ;52h&lt;br /&gt;
tS			equ LET+18 ;53h&lt;br /&gt;
tT			equ LET+19 ;54h&lt;br /&gt;
tU			equ LET+20 ;55h&lt;br /&gt;
tV			equ LET+21 ;56h&lt;br /&gt;
tW			equ LET+22 ;57h&lt;br /&gt;
tX			equ LET+23 ;58h&lt;br /&gt;
tY			equ LET+24 ;59h&lt;br /&gt;
tZ			equ LET+25 ;5Ah&lt;br /&gt;
tTheta			equ LET+26 ;5Bh&lt;br /&gt;
&lt;br /&gt;
;These Var Tokens Are 1st Of A Double Token&lt;br /&gt;
;------------------------------------------&lt;br /&gt;
&lt;br /&gt;
vToks			equ LET+27&lt;br /&gt;
&lt;br /&gt;
;User Matrix Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarMat			equ vToks ;5Ch&lt;br /&gt;
;&lt;br /&gt;
;User List Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarLst			equ vToks+1 ;5Dh&lt;br /&gt;
;&lt;br /&gt;
;User Equation Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarEqu			equ vToks+2 ;5Eh&lt;br /&gt;
tProg			equ vToks+3 ;5Fh&lt;br /&gt;
;&lt;br /&gt;
;User Pict Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarPict		equ vToks+4 ;60h&lt;br /&gt;
;&lt;br /&gt;
;User GDB Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarGDB			equ vToks+5 ;61h&lt;br /&gt;
tVarOut			equ vToks+6 ;62h&lt;br /&gt;
tVarSys			equ vToks+7 ;63h&lt;br /&gt;
&lt;br /&gt;
;Mode Setting Commands&lt;br /&gt;
;-------------------------------------------------&lt;br /&gt;
MODESA			equ vToks+8 ;64h&lt;br /&gt;
tRad			equ MODESA ;64h 'Radian'&lt;br /&gt;
tDeg			equ MODESA+1 ;65h 'Degree'&lt;br /&gt;
tNormF			equ MODESA+2 ;66h 'Normal'&lt;br /&gt;
tSci			equ MODESA+3 ;67h 'Sci'&lt;br /&gt;
tEng			equ MODESA+4 ;68h 'Eng'&lt;br /&gt;
tFloat			equ MODESA+5 ;69h 'Float'&lt;br /&gt;
CMPS			equ 6Ah&lt;br /&gt;
tEQ			equ CMPS ;6Ah '=='&lt;br /&gt;
tLT			equ CMPS+1 ;6Bh '&amp;lt;'&lt;br /&gt;
tGT			equ CMPS+2 ;6Ch '&amp;gt;'&lt;br /&gt;
tLE			equ CMPS+3 ;6Dh LLE&lt;br /&gt;
tGE			equ CMPS+4 ;6Eh LGE&lt;br /&gt;
tNE			equ CMPS+5 ;6Fh LNE&lt;br /&gt;
&lt;br /&gt;
;Binary OP&lt;br /&gt;
;---------------------------------------&lt;br /&gt;
tAdd			equ 70h ;70h '+'&lt;br /&gt;
tSub			equ 71h ;71h '-'&lt;br /&gt;
tAns			equ 72h ;72h&lt;br /&gt;
&lt;br /&gt;
;Mode Setting Commands&lt;br /&gt;
;-------------------------------------------------------&lt;br /&gt;
MODES			equ 73h&lt;br /&gt;
tFix			equ MODES ;73h 'Fix_'&lt;br /&gt;
tSplitOn		equ MODES+1 ;74h&lt;br /&gt;
tFullScreen		equ MODES+2 ;75h&lt;br /&gt;
tStndrd			equ MODES+3 ;76h 'Func'&lt;br /&gt;
tParam			equ MODES+4 ;77h 'Param'&lt;br /&gt;
tPolar			equ MODES+5 ;78h 'Pol'&lt;br /&gt;
tSeqG			equ MODES+6 ;79h&lt;br /&gt;
tAFillOn		equ MODES+7 ;7Ah 'AUTO FILL ON'&lt;br /&gt;
tAFillOff		equ MODES+8 ;7Bh&lt;br /&gt;
tACalcOn		equ MODES+9 ;7Ch&lt;br /&gt;
tACalcOff		equ MODES+10 ;7Dh 'AutoFill OFF'&lt;br /&gt;
&lt;br /&gt;
;Graph Format Tokens Are 2 Byte Tokens&lt;br /&gt;
;----------------------------------------&lt;br /&gt;
tGFormat		equ MODES+11 ;7Eh&lt;br /&gt;
tBoxIcon		equ 7Fh&lt;br /&gt;
tCrossIcon		equ 80h&lt;br /&gt;
tDotIcon		equ 81h&lt;br /&gt;
&lt;br /&gt;
;(More) Binary OP&lt;br /&gt;
;---------------------------------------&lt;br /&gt;
tMul			equ 82h ;82h '*'&lt;br /&gt;
tDiv			equ 83h ;83h '/'&lt;br /&gt;
&lt;br /&gt;
;Some Graph Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
GRCMDS			equ 84h&lt;br /&gt;
tTrace			equ GRCMDS ; 84h 'Trace'&lt;br /&gt;
tClDrw			equ GRCMDS+1 ; 85h 'ClDrw'&lt;br /&gt;
tZoomStd		equ GRCMDS+2 ; 86h 'ZStd'&lt;br /&gt;
tZoomtrg		equ GRCMDS+3 ; 87h 'Ztrg'&lt;br /&gt;
tZoomBox		equ GRCMDS+4 ; 88h 'ZBOX'&lt;br /&gt;
tZoomIn			equ GRCMDS+5 ; 89h 'ZIn'&lt;br /&gt;
tZoomOut		equ GRCMDS+6 ; 8Ah 'ZOut'&lt;br /&gt;
tZoomSqr		equ GRCMDS+7 ; 8Bh 'ZSqr'&lt;br /&gt;
tZoomInt		equ GRCMDS+8 ; 8Ch 'ZInt'&lt;br /&gt;
tZoomPrev		equ GRCMDS+9 ; 8Dh 'ZPrev'&lt;br /&gt;
tZoomDec		equ GRCMDS+10 ; 8Eh 'ZDecm'&lt;br /&gt;
tZoomStat		equ GRCMDS+11 ; 8Fh 'ZStat&lt;br /&gt;
tUsrZm			equ GRCMDS+12 ; 90h 'ZRcl'&lt;br /&gt;
tPrtScrn		equ GRCMDS+13 ; 91h 'PrtScrn'&lt;br /&gt;
tZoomSto		equ GRCMDS+14 ; 92h  ZOOM STORE&lt;br /&gt;
tText			equ GRCMDS+15 ; 93h&lt;br /&gt;
&lt;br /&gt;
;Binary OP (Combination &amp;amp; Permutation)&lt;br /&gt;
;-------------------------------------------------&lt;br /&gt;
tnPr			equ GRCMDS+16 ;94h '_nPr_'&lt;br /&gt;
tnCr			equ GRCMDS+17 ;95h '_nCr_'&lt;br /&gt;
&lt;br /&gt;
;More Graph Commands&lt;br /&gt;
;--------------------------------------------------&lt;br /&gt;
tYOn			equ GRCMDS+18 ;96h 'FnOn_'&lt;br /&gt;
tYOff			equ GRCMDS+19 ;97h 'FnOff_'&lt;br /&gt;
tStPic			equ GRCMDS+20 ;98h 'StPic_'&lt;br /&gt;
tRcPic			equ GRCMDS+21 ;99h 'RcPic_'&lt;br /&gt;
tStoDB			equ GRCMDS+22 ;9Ah 'StGDB_'&lt;br /&gt;
tRclDB			equ GRCMDS+23 ;9Bh 'RcGDB_'&lt;br /&gt;
tLine			equ GRCMDS+24 ;9Ch 'Line'&lt;br /&gt;
tVert			equ GRCMDS+25 ;9Dh 'Vert_'&lt;br /&gt;
tPtOn			equ GRCMDS+26 ;9Eh 'PtOn'&lt;br /&gt;
tPtOff			equ GRCMDS+27 ;9Fh 'PtOff'&lt;br /&gt;
&lt;br /&gt;
;Token A0 Cannot Be An EOS Function Since Low MULT=A0 Already&lt;br /&gt;
;------------------------------------------------------------&lt;br /&gt;
tPtChg			equ GRCMDS+28 ;A0h 'PtChg'&lt;br /&gt;
tPXOn			equ GRCMDS+29 ;A1h&lt;br /&gt;
tPXOff			equ GRCMDS+30 ;A2h&lt;br /&gt;
tPXChg			equ GRCMDS+31 ;A3h&lt;br /&gt;
tShade			equ GRCMDS+32 ;A4h 'Shade'&lt;br /&gt;
tCircl			equ GRCMDS+33 ;A5h 'Circl'&lt;br /&gt;
tHorz			equ GRCMDS+34 ;A6h 'HORIZONTAL'&lt;br /&gt;
tTanLn			equ GRCMDS+35 ;A7h 'TanLn'&lt;br /&gt;
tDrInv			equ GRCMDS+36 ;A8h 'DrInv_'&lt;br /&gt;
tDrawF			equ GRCMDS+37 ;A9h 'DrawF_'&lt;br /&gt;
tVarStrng		equ 0AAh&lt;br /&gt;
&lt;br /&gt;
;Functions with No Arguments                                    &lt;br /&gt;
;--------------------------------------------------&lt;br /&gt;
NOARG			equ 0ABh&lt;br /&gt;
tRand			equ NOARG ;ABh 'rand'&lt;br /&gt;
tPi			equ NOARG+1 ;ACh  Lpi&lt;br /&gt;
tGetKey			equ NOARG+2 ;ADh 'getKy'&lt;br /&gt;
tAPost			equ tGetKey+1 ;APOSTROPHY&lt;br /&gt;
tQuest			equ tAPost+1 ;QUESTION MARK&lt;br /&gt;
UNARY			equ tQuest+1 ;B0h&lt;br /&gt;
tChs			equ UNARY ;B0h&lt;br /&gt;
tInt			equ UNARY+1 ;B1h&lt;br /&gt;
tAbs			equ UNARY+2 ;B2h&lt;br /&gt;
tDet			equ UNARY+3 ;B3h&lt;br /&gt;
tIdent			equ UNARY+4 ;B4h&lt;br /&gt;
tDim			equ UNARY+5 ;B5h&lt;br /&gt;
tSum			equ UNARY+6 ;B6h&lt;br /&gt;
tProd			equ UNARY+7 ;B7h&lt;br /&gt;
tNot			equ UNARY+8 ;B8h&lt;br /&gt;
tIPart			equ UNARY+9 ;B9h&lt;br /&gt;
tFPart			equ UNARY+10 ;BAh&lt;br /&gt;
&lt;br /&gt;
;New 2 Byte Tokens&lt;br /&gt;
;------------------------------------------&lt;br /&gt;
t2ByteTok		equ 0BBh&lt;br /&gt;
UNARYLR			equ UNARY+12&lt;br /&gt;
tSqrt			equ UNARYLR ;BCh&lt;br /&gt;
tCubRt			equ UNARYLR+1 ;BDh&lt;br /&gt;
tLn			equ UNARYLR+2 ;BEh&lt;br /&gt;
tExp			equ UNARYLR+3 ;BFh&lt;br /&gt;
tLog			equ UNARYLR+4 ;C0h&lt;br /&gt;
tALog			equ UNARYLR+5 ;C1h&lt;br /&gt;
tSin			equ UNARYLR+6 ;C2h&lt;br /&gt;
tASin			equ UNARYLR+7 ;C3h&lt;br /&gt;
tCos			equ UNARYLR+8 ;C4h&lt;br /&gt;
tACos			equ UNARYLR+9 ;C5h&lt;br /&gt;
tTan			equ UNARYLR+10 ;C6h&lt;br /&gt;
tATan			equ UNARYLR+11 ;C7h&lt;br /&gt;
tSinH			equ UNARYLR+12 ;C8h&lt;br /&gt;
tASinH			equ UNARYLR+13 ;C9h&lt;br /&gt;
tCoshH			equ UNARYLR+14 ;CAh&lt;br /&gt;
tACosH			equ UNARYLR+15 ;CBh&lt;br /&gt;
tTanH			equ UNARYLR+16 ;CCh&lt;br /&gt;
tATanH			equ UNARYLR+17 ;CDh&lt;br /&gt;
&lt;br /&gt;
;Some Programming Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
PROGTOK			equ UNARYLR+18&lt;br /&gt;
tIf			equ PROGTOK ;CEh&lt;br /&gt;
tThen			equ PROGTOK+1 ;CFh&lt;br /&gt;
tElse			equ PROGTOK+2 ;D0h&lt;br /&gt;
tWhile			equ PROGTOK+3 ;D1h&lt;br /&gt;
tRepeat			equ PROGTOK+4 ;D2h&lt;br /&gt;
tFor			equ PROGTOK+5 ;D3h&lt;br /&gt;
tEnd			equ PROGTOK+6 ;D4h&lt;br /&gt;
tReturn			equ PROGTOK+7 ;D5h&lt;br /&gt;
tLbl			equ PROGTOK+8 ;D6h 'Lbl_'&lt;br /&gt;
tGoto			equ PROGTOK+9 ;D7h 'Goto_'&lt;br /&gt;
tPause			equ PROGTOK+10 ;D8h 'Pause_'&lt;br /&gt;
tStop			equ PROGTOK+11 ;D9h 'Stop'&lt;br /&gt;
tISG			equ PROGTOK+12 ;DAh 'IS&amp;gt;'&lt;br /&gt;
tDSL			equ PROGTOK+13 ;DBh 'DS&amp;lt;'&lt;br /&gt;
tInput			equ PROGTOK+14 ;DCh 'Input_'&lt;br /&gt;
tPrompt			equ PROGTOK+15 ;DDh 'Prompt_'&lt;br /&gt;
tDisp			equ PROGTOK+16 ;DEh 'Disp_'&lt;br /&gt;
tDispG			equ PROGTOK+17 ;DFh 'DispG'&lt;br /&gt;
tOutput			equ PROGTOK+18 ;E0h 'Outpt'&lt;br /&gt;
tClLCD			equ PROGTOK+19 ;E1h 'ClLCD'&lt;br /&gt;
tConst			equ PROGTOK+20 ;E2h 'Fill'&lt;br /&gt;
tSortA			equ PROGTOK+21 ;E3h 'sortA_'&lt;br /&gt;
tSortD			equ PROGTOK+22 ;E4h 'sortD_'&lt;br /&gt;
tDispTab		equ PROGTOK+23 ;E5h 'Disp Table&lt;br /&gt;
tMenu			equ PROGTOK+24 ;E6h 'Menu'&lt;br /&gt;
tSendMBL		equ PROGTOK+25 ;E7h 'SEND'&lt;br /&gt;
tGetMBL			equ PROGTOK+26 ;E8h 'GET'&lt;br /&gt;
&lt;br /&gt;
;Stat Plot Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
statPCmd		equ PROGTOK+27&lt;br /&gt;
tPlotOn			equ statPCmd ;E9h ' PLOTSON'&lt;br /&gt;
tPlotOff		equ statPCmd+1 ;EAh ' PLOTSOFF&lt;br /&gt;
tListName		equ 0EBh ;LIST DESIGNATOR&lt;br /&gt;
tPlot1			equ 0ECh&lt;br /&gt;
tPlot2			equ 0EDh&lt;br /&gt;
tPlot3			equ 0EEh&lt;br /&gt;
tUnused01		equ 0EFh ;available?&lt;br /&gt;
tPower			equ 0F0h ;'^'&lt;br /&gt;
tXRoot			equ 0F1h ;LsupX,Lroot&lt;br /&gt;
STATCMD			equ 0F2h&lt;br /&gt;
tOneVar			equ STATCMD ;F2h 'OneVar_'&lt;br /&gt;
tTwoVar			equ STATCMD+1 ;F3h&lt;br /&gt;
tLR			equ STATCMD+2 ;F4h 'LinR(A+BX&lt;br /&gt;
tLRExp			equ STATCMD+3 ;F5h 'ExpR_'&lt;br /&gt;
tLRLn			equ STATCMD+4 ;F6h 'LnR_'&lt;br /&gt;
tLRPwr			equ STATCMD+5 ;F7h 'PwrR_'&lt;br /&gt;
tMedMed			equ STATCMD+6 ;F8h&lt;br /&gt;
tQuad			equ STATCMD+7 ;F9h&lt;br /&gt;
tClrLst			equ STATCMD+8 ;FAh 'CLEAR LIST&lt;br /&gt;
tClrTbl			equ STATCMD+9 ;FBh CLEAR TABLE&lt;br /&gt;
tHist			equ STATCMD+10 ;FCh 'Hist_'&lt;br /&gt;
txyLine			equ STATCMD+11 ;FDh 'xyline_'&lt;br /&gt;
tScatter		equ STATCMD+12 ;FEh 'Scatter_'&lt;br /&gt;
tLR1			equ STATCMD+13 ;FFh 'LINR(AX+B&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of Graph Format Tokens&lt;br /&gt;
;----------------------------------------------&lt;br /&gt;
;           Format settings commands&lt;br /&gt;
;&lt;br /&gt;
GFMT			equ 0&lt;br /&gt;
tSeq			equ GFMT ; 'SeqG'&lt;br /&gt;
tSimulG			equ GFMT+1 ; 'SimulG'&lt;br /&gt;
tPolarG			equ GFMT+2 ; 'PolarGC'&lt;br /&gt;
tRectG			equ GFMT+3 ; 'RectGC'&lt;br /&gt;
tCoordOn		equ GFMT+4 ; 'CoordOn'&lt;br /&gt;
tCoordOff		equ GFMT+5 ; 'CoordOff'&lt;br /&gt;
tDrawLine		equ GFMT+6 ; 'DrawLine'&lt;br /&gt;
tDrawDot		equ GFMT+7 ; 'DrawDot'&lt;br /&gt;
tAxisOn			equ GFMT+8 ; 'AxesOn'&lt;br /&gt;
tAxisOff		equ GFMT+9 ; 'AxesOff'&lt;br /&gt;
tGridOn			equ GFMT+10 ; 'GridOn'&lt;br /&gt;
tGridOff		equ GFMT+11 ; 'GridOff'&lt;br /&gt;
tLblOn			equ GFMT+12 ; 'LabelOn'&lt;br /&gt;
tLblOff			equ GFMT+13 ; 'LabelOff'&lt;br /&gt;
tWebOn			equ GFMT+14 ; 'WebOn'&lt;br /&gt;
tWebOff			equ GFMT+15 ; 'WebOFF'&lt;br /&gt;
tuv			equ GFMT+16 ; U vs V&lt;br /&gt;
tvw			equ GFMT+17 ; V vs W&lt;br /&gt;
tuw			equ GFMT+18 ; U vs W&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Matrix Tokens&lt;br /&gt;
;-------------------------------------&lt;br /&gt;
tMatA			equ 00h ;MAT A&lt;br /&gt;
tMatB			equ 01h ;MAT B&lt;br /&gt;
tMatC			equ 02h ;MAT C&lt;br /&gt;
tMatD			equ 03h ;MAT D&lt;br /&gt;
tMatE			equ 04h ;MAT E&lt;br /&gt;
tMatF			equ 05h ;MAT F&lt;br /&gt;
tMatG			equ 06h ;MAT G&lt;br /&gt;
tMatH			equ 07h ;MAT H&lt;br /&gt;
tMatI			equ 08h ;MAT I&lt;br /&gt;
tMatJ			equ 09h ;MAT J&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User List Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
tL1			equ 00h ;LIST 1&lt;br /&gt;
tL2			equ 01h ;LIST 2&lt;br /&gt;
tL3			equ 02h ;LIST 3&lt;br /&gt;
tL4			equ 03h ;LIST 4&lt;br /&gt;
tL5			equ 04h ;LIST 5&lt;br /&gt;
tL6			equ 05h ;LIST 6&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Equation Tokens&lt;br /&gt;
;----------------------------------&lt;br /&gt;
;  &amp;quot;Y&amp;quot; EQUATIONS HAVE BIT 4 SET&lt;br /&gt;
;&lt;br /&gt;
tY1			equ 10h ;Y1&lt;br /&gt;
tY2			equ 11h ;Y2&lt;br /&gt;
tY3			equ 12h ;Y3&lt;br /&gt;
tY4			equ 13h ;Y4&lt;br /&gt;
tY5			equ 14h ;Y5&lt;br /&gt;
tY6			equ 15h ;Y6&lt;br /&gt;
tY7			equ 16h ;Y7&lt;br /&gt;
tY8			equ 17h ;Y8&lt;br /&gt;
tY9			equ 18h ;Y9&lt;br /&gt;
tY0			equ 19h ;Y0&lt;br /&gt;
&lt;br /&gt;
;Param Equations Have Bit 5 Set&lt;br /&gt;
;-----------------------------------&lt;br /&gt;
tX1T			equ 20h ;X1t&lt;br /&gt;
tY1T			equ 21h ;Y1t&lt;br /&gt;
tX2T			equ 22h ;X2t&lt;br /&gt;
tY2T			equ 23h ;Y2t&lt;br /&gt;
tX3T			equ 24h ;X3t&lt;br /&gt;
tY3T			equ 25h ;Y3t&lt;br /&gt;
tX4T			equ 26h ;X4t&lt;br /&gt;
tY4T			equ 27h ;Y4t&lt;br /&gt;
tX5T			equ 28h ;X5t&lt;br /&gt;
tY5T			equ 29h ;Y5t&lt;br /&gt;
tX6T			equ 2Ah ;X6t&lt;br /&gt;
tY6T			equ 2Bh ;Y6t&lt;br /&gt;
&lt;br /&gt;
;Polar Equations Have Bit 6 Set&lt;br /&gt;
;----------------------------------&lt;br /&gt;
tR1			equ 40h ;R1&lt;br /&gt;
tR2			equ 41h ;R2&lt;br /&gt;
tR3			equ 42h ;R3&lt;br /&gt;
tR4			equ 43h ;R4&lt;br /&gt;
tR5			equ 44h ;R5&lt;br /&gt;
tR6			equ 45h ;R6&lt;br /&gt;
&lt;br /&gt;
;Recursion Equations Have Bit 7 Set&lt;br /&gt;
;----------------------------------&lt;br /&gt;
tun			equ 80h ;Un&lt;br /&gt;
tvn			equ 81h ;Vn&lt;br /&gt;
twn			equ 82h ;Wn&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Picture Tokens&lt;br /&gt;
;------------------------------------&lt;br /&gt;
tPic1			equ 00h ;PIC1&lt;br /&gt;
tPic2			equ 01h ;PIC2&lt;br /&gt;
tPic3			equ 02h ;PIC3&lt;br /&gt;
tPic4			equ 03h ;PIC4&lt;br /&gt;
tPic5			equ 04h ;PIC5&lt;br /&gt;
tPic6			equ 05h ;PIC6&lt;br /&gt;
tPic7			equ 06h ;PIC7&lt;br /&gt;
tPic8			equ 07h ;PIC8&lt;br /&gt;
tPic9			equ 08h ;PIC9&lt;br /&gt;
tPic0			equ 09h ;PIC0&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Graph Database Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
tGDB1			equ 00h ;GDB1&lt;br /&gt;
tGDB2			equ 01h ;GDB2&lt;br /&gt;
tGDB3			equ 02h ;GDB3&lt;br /&gt;
tGDB4			equ 03h ;GDB4&lt;br /&gt;
tGDB5			equ 04h ;GDB5&lt;br /&gt;
tGDB6			equ 05h ;GDB6&lt;br /&gt;
tGDB7			equ 06h ;GDB7&lt;br /&gt;
tGDB8			equ 07h ;GDB8&lt;br /&gt;
tGDB9			equ 08h ;GDB9&lt;br /&gt;
tGDB0			equ 09h ;GDB0&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of String Vars&lt;br /&gt;
;------------------------------&lt;br /&gt;
tStr1			equ 00h&lt;br /&gt;
tStr2			equ 01h&lt;br /&gt;
tStr3			equ 02h&lt;br /&gt;
tStr4			equ 03h&lt;br /&gt;
tStr5			equ 04h&lt;br /&gt;
tStr6			equ 05h&lt;br /&gt;
tStr7			equ 06h&lt;br /&gt;
tStr8			equ 07h&lt;br /&gt;
tStr9			equ 08h&lt;br /&gt;
tStr0			equ 09h&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of System Output Only Variables&lt;br /&gt;
;-----------------------------------------------------------------&lt;br /&gt;
;OPEN			equ 00h&lt;br /&gt;
tRegEq			equ 01h ;REGRESSION EQUATION&lt;br /&gt;
tStatN			equ 02h ;STATISTICS N&lt;br /&gt;
tXMean			equ 03h ;X MEAN&lt;br /&gt;
tSumX			equ 04h ;SUM(X)&lt;br /&gt;
tSumXSqr		equ 05h ;SUM(X^2)&lt;br /&gt;
tStdX			equ 06h ;STANDARD DEV X&lt;br /&gt;
tStdPX			equ 07h ;STANDARD DEV POP X&lt;br /&gt;
tMinX			equ 08h ;Min X VALUE&lt;br /&gt;
tMaxX			equ 09h ;Max X VALUE&lt;br /&gt;
tMinY			equ 0Ah ;Min Y VALUE&lt;br /&gt;
tMaxY			equ 0Bh ;Max Y VALUE&lt;br /&gt;
tYmean			equ 0Ch ;Y MEAN&lt;br /&gt;
tSumY			equ 0Dh ;SUM(Y)&lt;br /&gt;
tSumYSqr		equ 0Eh ;SUM(Y^2)&lt;br /&gt;
tStdY			equ 0Fh ;STANDARD DEV Y&lt;br /&gt;
tStdPY			equ 10h ;STANDARD DEV POP Y&lt;br /&gt;
tSumXY			equ 11h ;SUM(XY)&lt;br /&gt;
tCorr			equ 12h ;CORRELATION&lt;br /&gt;
tMedX			equ 13h ;MED(X)&lt;br /&gt;
tQ1			equ 14h ;1ST QUADRANT OF X&lt;br /&gt;
tQ3			equ 15h ;3RD QUADRANT OF X&lt;br /&gt;
tQuadA			equ 16h ;1ST TERM OF QUAD POLY REG/ Y-INT&lt;br /&gt;
tQuadB			equ 17h ;2ND TERM OF QUAD POLY REG/ SLOPE&lt;br /&gt;
tQuadC			equ 18h ;3RD TERM OF QUAD POLY REG&lt;br /&gt;
tCubeD			equ 19h ;4TH TERM OF CUBIC POLY REG&lt;br /&gt;
tQuartE			equ 1Ah ;5TH TERM OF QUART POLY REG&lt;br /&gt;
tMedX1			equ 1Bh ;x1 FOR MED-MED&lt;br /&gt;
tMedX2			equ 1Ch ;x2 FOR MED-MED&lt;br /&gt;
tMedX3			equ 1Dh ;x3 FOR MED-MED&lt;br /&gt;
tMedY1			equ 1Eh ;y1 FOR MED-MED&lt;br /&gt;
tMedY2			equ 1Fh ;y2 FOR MED-MED&lt;br /&gt;
tMedY3			equ 20h ;y3 FOR MED-MED&lt;br /&gt;
tRecurn			equ 21h	;RECURSION N&lt;br /&gt;
tStatP			equ 22h&lt;br /&gt;
tStatZ			equ 23h&lt;br /&gt;
tStatT			equ 24h&lt;br /&gt;
tStatChi		equ 25h&lt;br /&gt;
tStatF			equ 26h&lt;br /&gt;
tStatDF			equ 27h&lt;br /&gt;
tStatPhat		equ 28h&lt;br /&gt;
tStatPhat1		equ 29h&lt;br /&gt;
tStatPhat2		equ 2Ah&lt;br /&gt;
tStatMeanX1		equ 2Bh&lt;br /&gt;
tStatStdX1		equ 2Ch&lt;br /&gt;
tStatN1			equ 2Dh&lt;br /&gt;
tStatMeanX2		equ 2Eh&lt;br /&gt;
tStatStdX2		equ 2Fh&lt;br /&gt;
tStatN2			equ 30h&lt;br /&gt;
tStatStdXP		equ 31h&lt;br /&gt;
tStatLower		equ 32h&lt;br /&gt;
tStatUpper		equ 33h&lt;br /&gt;
tStat_s			equ 34h&lt;br /&gt;
tLRSqr			equ 35h ;r^2&lt;br /&gt;
tBRSqr			equ 36h ;R^2&lt;br /&gt;
&lt;br /&gt;
;These next tokens are only used to access the data&lt;br /&gt;
;they are display only and the user cannot access them at all&lt;br /&gt;
;------------------------------------------------------------&lt;br /&gt;
tF_DF			equ 37h ;ANOFAV FACTOR DF&lt;br /&gt;
tF_SS			equ 38h ;ANOFAV FACTOR SS&lt;br /&gt;
tF_MS			equ 39h ;ANOFAV FACTOR MS&lt;br /&gt;
tE_DF			equ 3Ah ;ANOFAV ERROR DF&lt;br /&gt;
tE_SS			equ 3Bh ;ANOFAV ERROR SS&lt;br /&gt;
tE_MS			equ 3Ch ;ANOFAV ERROR MS&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of System Input/Output Variables&lt;br /&gt;
;------------------------------------------------&lt;br /&gt;
;      SYSTEM VARIABLE EQUATES&lt;br /&gt;
;&lt;br /&gt;
tuXscl			equ 0&lt;br /&gt;
tuYscl			equ 1&lt;br /&gt;
tXscl			equ 2&lt;br /&gt;
tYscl			equ 3&lt;br /&gt;
tRecuru0		equ 4 ;U 1ST INITIAL COND&lt;br /&gt;
tRecurv0		equ 5 ;V 1ST INITIAL COND&lt;br /&gt;
tun1			equ 6 ;U(N-1); NOT USED&lt;br /&gt;
tvn1			equ 7 ;V(N-1); NOT USED&lt;br /&gt;
tuRecuru0		equ 8 ;&lt;br /&gt;
tuRecurv0		equ 9 ;&lt;br /&gt;
tXmin			equ 0Ah&lt;br /&gt;
tXmax			equ 0Bh&lt;br /&gt;
tYmin			equ 0Ch&lt;br /&gt;
tYmax			equ 0Dh&lt;br /&gt;
tTmin			equ 0Eh&lt;br /&gt;
tTmax			equ 0Fh&lt;br /&gt;
tThetaMin		equ 10h&lt;br /&gt;
tThetaMax		equ 11h&lt;br /&gt;
tuXmin			equ 12h&lt;br /&gt;
tuXmax			equ 13h&lt;br /&gt;
tuYmin			equ 14h&lt;br /&gt;
tuYmax			equ 15h&lt;br /&gt;
tuThetMin		equ 16h&lt;br /&gt;
tuThetMax		equ 17h&lt;br /&gt;
tuTmin			equ 18h&lt;br /&gt;
tuTmax			equ 19h&lt;br /&gt;
tTblMin			equ 1Ah&lt;br /&gt;
tPlotStart		equ 1Bh&lt;br /&gt;
tuPlotStart		equ 1Ch&lt;br /&gt;
tnMax			equ 1Dh&lt;br /&gt;
tunMax			equ 1Eh&lt;br /&gt;
tnMin			equ 1Fh&lt;br /&gt;
tunMin			equ 20h&lt;br /&gt;
tTblStep		equ 21h&lt;br /&gt;
tTStep			equ 22h&lt;br /&gt;
tThetaStep		equ 23h&lt;br /&gt;
tuTStep			equ 24h&lt;br /&gt;
tuThetStep		equ 25h&lt;br /&gt;
tDeltaX			equ 26h&lt;br /&gt;
tDeltaY			equ 27h&lt;br /&gt;
tXFact			equ 28h&lt;br /&gt;
tYFact			equ 29h&lt;br /&gt;
tTblInput		equ 2Ah&lt;br /&gt;
tFinN			equ 2Bh&lt;br /&gt;
tFinI			equ 2Ch&lt;br /&gt;
tFinPV			equ 2Dh&lt;br /&gt;
tFinPMT			equ 2Eh&lt;br /&gt;
tFinFV			equ 2Fh&lt;br /&gt;
tFinPY			equ 30h&lt;br /&gt;
tFinCY			equ 31h&lt;br /&gt;
tRecurw0		equ 32h ;w0(1)&lt;br /&gt;
tuRecurw0		equ 33h&lt;br /&gt;
tPlotStep		equ 34h&lt;br /&gt;
tuPlotStep		equ 35h&lt;br /&gt;
tXres			equ 36h&lt;br /&gt;
tuXres			equ 37h&lt;br /&gt;
tRecuru02		equ 38h ;u0(2)&lt;br /&gt;
tuRecuru02		equ 39h&lt;br /&gt;
tRecurv02		equ 3Ch ;v0(2)&lt;br /&gt;
tuRecurv02		equ 3Dh&lt;br /&gt;
tRecurw02		equ 3Eh ;w0(2)&lt;br /&gt;
tuRecurw02		equ 3Fh&lt;br /&gt;
&lt;br /&gt;
;2nd Byte Of t2ByteTok Tokens&lt;br /&gt;
;------------------------------&lt;br /&gt;
tFinNPV			equ 00h&lt;br /&gt;
tFinIRR			equ 01h&lt;br /&gt;
tFinBAL			equ 02h&lt;br /&gt;
tFinPRN			equ 03h&lt;br /&gt;
tFinINT			equ 04h&lt;br /&gt;
tFinToNom		equ 05h&lt;br /&gt;
tFinToEff		equ 06h&lt;br /&gt;
tFinDBD			equ 07h&lt;br /&gt;
tLCM			equ 08h&lt;br /&gt;
tGCD			equ 09h&lt;br /&gt;
tRandInt		equ 0Ah&lt;br /&gt;
tRandBin		equ 0Bh&lt;br /&gt;
tSubStrng		equ 0Ch&lt;br /&gt;
tStdDev			equ 0Dh&lt;br /&gt;
tVariance		equ 0Eh&lt;br /&gt;
tInStrng		equ 0Fh&lt;br /&gt;
tDNormal		equ 10h&lt;br /&gt;
tInvNorm		equ 11h&lt;br /&gt;
tDT			equ 12h&lt;br /&gt;
tChI			equ 13h&lt;br /&gt;
tDF			equ 14h&lt;br /&gt;
tBINPDF			equ 15h&lt;br /&gt;
tBINCDF			equ 16h&lt;br /&gt;
tPOIPDF			equ 17h&lt;br /&gt;
tPOICDF			equ 18h&lt;br /&gt;
tGEOPDF			equ 19h&lt;br /&gt;
tGEOCDF			equ 1Ah&lt;br /&gt;
tNormalPDF		equ 1Bh&lt;br /&gt;
tTPDF			equ 1Ch&lt;br /&gt;
tChiPDF			equ 1Dh&lt;br /&gt;
tFPDF			equ 1Eh&lt;br /&gt;
tRandNorm		equ 1Fh&lt;br /&gt;
tFinFPMT		equ 20h&lt;br /&gt;
tFinFI			equ 21h&lt;br /&gt;
tFinFPV			equ 22h&lt;br /&gt;
tFinFN			equ 23h&lt;br /&gt;
tFinFFV			equ 24h&lt;br /&gt;
tConj			equ 25h&lt;br /&gt;
tReal			equ 26h&lt;br /&gt;
tImag			equ 27h&lt;br /&gt;
tAngle			equ 28h&lt;br /&gt;
tCumSum			equ 29h&lt;br /&gt;
tExpr			equ 2Ah&lt;br /&gt;
tLength			equ 2Bh&lt;br /&gt;
tDeltaLst		equ 2Ch&lt;br /&gt;
tRef			equ 2Dh&lt;br /&gt;
tRRef			equ 2Eh&lt;br /&gt;
tToRect			equ 2Fh&lt;br /&gt;
tToPolar		equ 30h&lt;br /&gt;
tConste			equ 31h&lt;br /&gt;
tSinReg			equ 32h&lt;br /&gt;
tLogistic		equ 33h&lt;br /&gt;
tLinRegTTest		equ 34h&lt;br /&gt;
tShadeNorm		equ 35h&lt;br /&gt;
tShadeT			equ 36h&lt;br /&gt;
tShadeChi		equ 37h&lt;br /&gt;
tShadeF			equ 38h&lt;br /&gt;
tMatToLst		equ 39h&lt;br /&gt;
tLstToMat		equ 3Ah&lt;br /&gt;
tZTest			equ 3Bh&lt;br /&gt;
tTTest			equ 3Ch&lt;br /&gt;
t2SampZTest		equ 3Dh&lt;br /&gt;
t1PropZTest		equ 3Eh&lt;br /&gt;
t2PropZTest		equ 3Fh&lt;br /&gt;
tChiTest		equ 40h&lt;br /&gt;
tZIntVal		equ 41h&lt;br /&gt;
t2SampZInt		equ 42h&lt;br /&gt;
t1PropZInt		equ 43h&lt;br /&gt;
t2PropZInt		equ 44h&lt;br /&gt;
tGraphStyle		equ 45h&lt;br /&gt;
t2SampTTest		equ 46h&lt;br /&gt;
t2SampFTest		equ 47h&lt;br /&gt;
tTIntVal		equ 48h&lt;br /&gt;
t2SampTInt		equ 49h&lt;br /&gt;
tSetupLst		equ 4Ah&lt;br /&gt;
tFinPMTend		equ 4Bh&lt;br /&gt;
tFinPMTbeg		equ 4Ch&lt;br /&gt;
tRealM			equ 4Dh&lt;br /&gt;
tPolarM			equ 4Eh&lt;br /&gt;
tRectM			equ 4Fh&lt;br /&gt;
tExprOn			equ 50h&lt;br /&gt;
tExprOff		equ 51h&lt;br /&gt;
tClrAllLst		equ 52h&lt;br /&gt;
tGetCalc		equ 53h&lt;br /&gt;
tDelVar			equ 54h&lt;br /&gt;
tEquToStrng		equ 55h&lt;br /&gt;
tStrngToEqu		equ 56h&lt;br /&gt;
tDelLast		equ 57h&lt;br /&gt;
tSelect			equ 58h&lt;br /&gt;
tANOVA			equ 59h&lt;br /&gt;
tModBox			equ 5Ah&lt;br /&gt;
tNormProb		equ 5Bh&lt;br /&gt;
tMGT			equ 64h ;VERTICAL SPLIT&lt;br /&gt;
tZFit			equ 65h ;ZOOM FIT&lt;br /&gt;
tDiag_on		equ 66h ;DIANOSTIC DISPLAY ON&lt;br /&gt;
tDiag_off		equ 67h ;DIANOSTIC DISPLAY OFF&lt;br /&gt;
tOkEnd2v0		equ 67h ;end of 2byte tokens for version 0.&lt;br /&gt;
tArchive		equ 68h ;archive&lt;br /&gt;
tUnarchive		equ 69h ;unarchive&lt;br /&gt;
tasm			equ 6Ah&lt;br /&gt;
tasmComp		equ 6Bh	;asm compile&lt;br /&gt;
tasmPrgm		equ 6Ch	;signifies a program is asm&lt;br /&gt;
tasmCmp			equ 6Dh	;asm program is compiled&lt;br /&gt;
tLcapAAcute		equ 6Eh&lt;br /&gt;
tLcapAGrave		equ 6Fh&lt;br /&gt;
tLcapACaret		equ 70h&lt;br /&gt;
tLcapADier		equ 71h&lt;br /&gt;
tLaAcute		equ 72h&lt;br /&gt;
tLaGrave		equ 73h&lt;br /&gt;
tLaCaret		equ 74h&lt;br /&gt;
tLaDier			equ 75h&lt;br /&gt;
tLcapEAcute		equ 76h&lt;br /&gt;
tLcapEGrave		equ 77h&lt;br /&gt;
tLcapECaret		equ 78h&lt;br /&gt;
tLcapEDier		equ 79h&lt;br /&gt;
tLeAcute		equ 7Ah&lt;br /&gt;
tLeGrave		equ 7Bh&lt;br /&gt;
tLeCaret		equ 7Ch&lt;br /&gt;
tLeDier			equ 7Dh&lt;br /&gt;
tLcapIGrave		equ 7Fh&lt;br /&gt;
tLcapICaret		equ 80h&lt;br /&gt;
tLcapIDier		equ 81h&lt;br /&gt;
tLiAcute		equ 82h&lt;br /&gt;
tLiGrave		equ 83h&lt;br /&gt;
tLiCaret		equ 84h&lt;br /&gt;
tLiDier			equ 85h&lt;br /&gt;
tLcapOAcute		equ 86h&lt;br /&gt;
tLcapOGrave		equ 87h&lt;br /&gt;
tLcapOCaret		equ 88h&lt;br /&gt;
tLcapODier		equ 89h&lt;br /&gt;
tLoAcute		equ 8Ah&lt;br /&gt;
tLoGrave		equ 8Bh&lt;br /&gt;
tLoCaret		equ 8Ch&lt;br /&gt;
tLoDier			equ 8Dh&lt;br /&gt;
tLcapUAcute		equ 8Eh&lt;br /&gt;
tLcapUGrave		equ 8Fh&lt;br /&gt;
tLcapUCaret		equ 90h&lt;br /&gt;
tLcapUDier		equ 91h&lt;br /&gt;
tLuAcute		equ 92h&lt;br /&gt;
tLuGrave		equ 93h&lt;br /&gt;
tLuCaret		equ 94h&lt;br /&gt;
tLuDier			equ 95h&lt;br /&gt;
tLcapCCed		equ 96h&lt;br /&gt;
tLcCed			equ 97h&lt;br /&gt;
tLcapNTilde		equ 98h&lt;br /&gt;
tLnTilde		equ 99h&lt;br /&gt;
tLaccent		equ 9Ah&lt;br /&gt;
tLgrave			equ 9Bh&lt;br /&gt;
tLdieresis		equ 9Ch&lt;br /&gt;
tLquesDown		equ 9Dh&lt;br /&gt;
tLexclamDown		equ 9Eh&lt;br /&gt;
tLalpha			equ 9Fh&lt;br /&gt;
tLbeta			equ 0A0h&lt;br /&gt;
tLgamma			equ 0A1h&lt;br /&gt;
tLcapDelta		equ 0A2h&lt;br /&gt;
tLdelta			equ 0A3h&lt;br /&gt;
tLepsilon		equ 0A4h&lt;br /&gt;
tLlambda		equ 0A5h&lt;br /&gt;
tLmu			equ 0A6h&lt;br /&gt;
tLpi			equ 0A7h&lt;br /&gt;
tLrho			equ 0A8h&lt;br /&gt;
tLcapSigma		equ 0A9h&lt;br /&gt;
tLphi			equ 0ABh&lt;br /&gt;
tLcapOmega		equ 0ACh&lt;br /&gt;
tLphat			equ 0ADh&lt;br /&gt;
tLchi			equ 0AEh&lt;br /&gt;
tLstatF			equ 0AFh&lt;br /&gt;
tLa			equ 0B0h&lt;br /&gt;
tLb			equ 0B1h&lt;br /&gt;
tLc			equ 0B2h&lt;br /&gt;
tLd			equ 0B3h&lt;br /&gt;
tLsmalle		equ 0B4h&lt;br /&gt;
tLf			equ 0B5h&lt;br /&gt;
tLsmallg		equ 0B6h&lt;br /&gt;
tLh			equ 0B7h&lt;br /&gt;
tLi			equ 0B8h&lt;br /&gt;
tLj			equ 0B9h&lt;br /&gt;
tLk			equ 0BAh&lt;br /&gt;
tLl			equ 0BCh&lt;br /&gt;
tLm			equ 0BDh&lt;br /&gt;
tLsmalln		equ 0BEh&lt;br /&gt;
tLo			equ 0BFh&lt;br /&gt;
tLp			equ 0C0h&lt;br /&gt;
tLq			equ 0C1h&lt;br /&gt;
tLsmallr		equ 0C2h&lt;br /&gt;
tLs			equ 0C3h&lt;br /&gt;
tLsmallt		equ 0C4h&lt;br /&gt;
tLu			equ 0C5h&lt;br /&gt;
tLv			equ 0C6h&lt;br /&gt;
tLw			equ 0C7h&lt;br /&gt;
tLx			equ 0C8h&lt;br /&gt;
tLy			equ 0C9h&lt;br /&gt;
tLz			equ 0CAh&lt;br /&gt;
tLsigma			equ 0CBh&lt;br /&gt;
tLtau			equ 0CCh&lt;br /&gt;
tLcapIAcute		equ 0CDh&lt;br /&gt;
tGarbagec		equ 0CEh&lt;br /&gt;
LastToken		equ 0CEh ;tLAST TOKEN IN THIS VERSION...&lt;br /&gt;
&lt;br /&gt;
;Data Type Equates                                                    &lt;br /&gt;
;---------------------------------------------------------------------&lt;br /&gt;
RealObj			equ 0&lt;br /&gt;
ListObj			equ 1&lt;br /&gt;
MatObj			equ 2&lt;br /&gt;
EquObj			equ 3&lt;br /&gt;
StrngObj		equ 4&lt;br /&gt;
ProgObj			equ 5&lt;br /&gt;
ProtProgObj		equ 6&lt;br /&gt;
PictObj			equ 7&lt;br /&gt;
GDBObj			equ 8&lt;br /&gt;
UnknownObj		equ 9&lt;br /&gt;
UnknownEquObj		equ 0Ah&lt;br /&gt;
NewEquObj		equ 0Bh&lt;br /&gt;
CplxObj			equ 0Ch&lt;br /&gt;
CListObj		equ 0Dh&lt;br /&gt;
UndefObj		equ 0Eh&lt;br /&gt;
WindowObj		equ 0Fh&lt;br /&gt;
ZStoObj			equ 10h&lt;br /&gt;
TblRngObj		equ 11h&lt;br /&gt;
LCDObj			equ 12h&lt;br /&gt;
BackupObj		equ 13h&lt;br /&gt;
AppObj			equ 14h	;application, only used in menus/link&lt;br /&gt;
AppVarObj		equ 15h	;application variable&lt;br /&gt;
TempProgObj		equ 16h ;program, home deletes when finished&lt;br /&gt;
GroupObj		equ 17h ;group.&lt;br /&gt;
&lt;br /&gt;
;I/O Equates                                                          &lt;br /&gt;
;---------------------------------------------------&lt;br /&gt;
D0D1_bits		equ 03h&lt;br /&gt;
D0LD1L			equ 03h&lt;br /&gt;
D0LD1H			equ 01h&lt;br /&gt;
D0HD1L			equ 02h&lt;br /&gt;
D0HD1H			equ 00h&lt;br /&gt;
bport			equ 0 ;4-bit link port (I/O) &lt;br /&gt;
&lt;br /&gt;
;Device Codes&lt;br /&gt;
;-----------------------------------------------------------------&lt;br /&gt;
TI82DEV			equ 82h&lt;br /&gt;
PC82DEV			equ 02h&lt;br /&gt;
MAC82DEV		equ 12h&lt;br /&gt;
TI83FDEV		equ 73h&lt;br /&gt;
LINK83FDEV		equ 23h&lt;br /&gt;
TI83DEV			equ 83h&lt;br /&gt;
PC83DEV			equ 03h&lt;br /&gt;
MAC83DEV		equ 13h&lt;br /&gt;
TI85DEV			equ 95h ;different than real 85 so me talk&lt;br /&gt;
PC85DEV			equ 05h&lt;br /&gt;
MAC85DEV		equ 15h&lt;br /&gt;
TI73DEV			equ 74h ;device x3 is always an 83&lt;br /&gt;
PC73DEV			equ 07h&lt;br /&gt;
MAC73DEV		equ 17h&lt;br /&gt;
LINK73FDEV		equ 23h&lt;br /&gt;
PC83FDEV		equ 23h&lt;br /&gt;
&lt;br /&gt;
;System Error Codes                                                  &lt;br /&gt;
;-----------------------------------------------------------&lt;br /&gt;
E_EDITF			equ 7 ;allow re-entering application&lt;br /&gt;
E_EDIT			equ 1&amp;lt;&amp;lt;E_EDITF&lt;br /&gt;
E_Mask			equ 7Fh&lt;br /&gt;
E_Overflow		equ 1+E_EDIT&lt;br /&gt;
E_DivBy0		equ 2+E_EDIT&lt;br /&gt;
E_SingularMat		equ 3+E_EDIT&lt;br /&gt;
E_Domain		equ 4+E_EDIT&lt;br /&gt;
E_Increment		equ 5+E_EDIT&lt;br /&gt;
E_Break			equ 6+E_EDIT&lt;br /&gt;
E_NonReal		equ 7+E_EDIT&lt;br /&gt;
E_Syntax		equ 8+E_EDIT&lt;br /&gt;
E_DataType		equ 9+E_EDIT&lt;br /&gt;
E_Argument		equ 10+E_EDIT&lt;br /&gt;
E_DimMismatch		equ 11+E_EDIT&lt;br /&gt;
E_Dimension		equ 12+E_EDIT&lt;br /&gt;
E_Undefined		equ 13+E_EDIT&lt;br /&gt;
E_Memory		equ 14+E_EDIT&lt;br /&gt;
E_Invalid		equ 15+E_EDIT&lt;br /&gt;
E_IllegalNest		equ 16+E_EDIT&lt;br /&gt;
E_Bound			equ 17+E_EDIT&lt;br /&gt;
E_GraphRange		equ 18+E_EDIT&lt;br /&gt;
E_Zoom			equ 19+E_EDIT&lt;br /&gt;
E_Label			equ 20&lt;br /&gt;
E_Stat			equ 21&lt;br /&gt;
E_Solver		equ 22+E_EDIT&lt;br /&gt;
E_Singularity		equ 23+E_EDIT&lt;br /&gt;
E_SignChange		equ 24+E_EDIT&lt;br /&gt;
E_Iterations		equ 25+E_EDIT&lt;br /&gt;
E_BadGuess		equ 26+E_EDIT&lt;br /&gt;
E_StatPlo		equ 27&lt;br /&gt;
E_TolTooSmall		equ 28+E_EDIT&lt;br /&gt;
E_Reserved		equ 29+E_EDIT&lt;br /&gt;
E_Mode			equ 30+E_EDIT&lt;br /&gt;
E_LnkErr		equ 31+E_EDIT&lt;br /&gt;
E_LnkMemErr		equ 32+E_EDIT&lt;br /&gt;
E_LnkTransErr		equ 33+E_EDIT&lt;br /&gt;
E_LnkDupErr		equ 34+E_EDIT&lt;br /&gt;
E_LnkMemFull		equ 35+E_EDIT&lt;br /&gt;
E_Unknown		equ 36+E_EDIT&lt;br /&gt;
E_Scale			equ 37+E_EDIT&lt;br /&gt;
E_IdNotFound		equ 38&lt;br /&gt;
E_NoMode		equ 39+E_EDIT&lt;br /&gt;
E_Validation		equ 40&lt;br /&gt;
E_Length		equ 41+E_EDIT&lt;br /&gt;
E_Application		equ 42+E_EDIT&lt;br /&gt;
E_AppErr1		equ 43+E_EDIT&lt;br /&gt;
E_AppErr2		equ 44+E_EDIT&lt;br /&gt;
E_ExpiredApp		equ 45&lt;br /&gt;
E_BadAdd		equ 46&lt;br /&gt;
E_Archived		equ 47+E_EDIT&lt;br /&gt;
E_Version		equ 48&lt;br /&gt;
E_ArchFull		equ 49&lt;br /&gt;
E_Variable		equ 50+E_EDIT&lt;br /&gt;
E_Duplicate		equ 51+E_EDIT&lt;br /&gt;
HigErrNum		equ 51&lt;br /&gt;
;Obsolete error numbers 34 ;first LINK error&lt;br /&gt;
E_LinkIOChkSum		equ 34&lt;br /&gt;
E_LinkIOTimeOut		equ 35&lt;br /&gt;
E_LinkIOBusy		equ 36&lt;br /&gt;
E_LinkIOVer		equ 37&lt;br /&gt;
&lt;br /&gt;
;Equates To RAM Locations For Stat Vars&lt;br /&gt;
;----------------------------------------------------------------&lt;br /&gt;
FPLEN			equ 9 ;Length of a floating-point number.&lt;br /&gt;
StatN			equ statVars&lt;br /&gt;
XMean			equ StatN + FPLEN&lt;br /&gt;
SumX			equ XMean + FPLEN&lt;br /&gt;
SumXSqr			equ SumX + FPLEN&lt;br /&gt;
StdX			equ SumXSqr + FPLEN&lt;br /&gt;
StdPX			equ StdX + FPLEN&lt;br /&gt;
MinX			equ StdPX + FPLEN&lt;br /&gt;
MaxX			equ MinX + FPLEN&lt;br /&gt;
MinY			equ MaxX + FPLEN&lt;br /&gt;
MaxY			equ MinY + FPLEN&lt;br /&gt;
YMean			equ MaxY + FPLEN&lt;br /&gt;
SumY			equ YMean + FPLEN&lt;br /&gt;
SumYSqr			equ SumY + FPLEN&lt;br /&gt;
StdY			equ SumYSqr + FPLEN&lt;br /&gt;
StdPY			equ StdY + FPLEN&lt;br /&gt;
SumXY			equ StdPY + FPLEN&lt;br /&gt;
Corr			equ SumXY + FPLEN&lt;br /&gt;
MedX			equ Corr + FPLEN&lt;br /&gt;
Q1			equ MedX + FPLEN&lt;br /&gt;
Q3			equ Q1 + FPLEN&lt;br /&gt;
QuadA			equ Q3 + FPLEN&lt;br /&gt;
QuadB			equ QuadA + FPLEN&lt;br /&gt;
QuadC			equ QuadB + FPLEN&lt;br /&gt;
CubeD			equ QuadC + FPLEN&lt;br /&gt;
QuartE			equ CubeD + FPLEN&lt;br /&gt;
MedX1			equ QuartE + FPLEN&lt;br /&gt;
MedX2			equ MedX1 + FPLEN&lt;br /&gt;
MedX3			equ MedX2 + FPLEN&lt;br /&gt;
MedY1			equ MedX3 + FPLEN&lt;br /&gt;
MedY2			equ MedY1 + FPLEN&lt;br /&gt;
MedY3			equ MedY2 + FPLEN&lt;br /&gt;
PStat			equ MedY3 + 2*FPLEN&lt;br /&gt;
ZStat			equ PStat + FPLEN&lt;br /&gt;
TStat			equ ZStat + FPLEN&lt;br /&gt;
ChiStat			equ TStat + FPLEN&lt;br /&gt;
FStat			equ ChiStat + FPLEN&lt;br /&gt;
DF			equ FStat + FPLEN&lt;br /&gt;
Phat			equ DF + FPLEN&lt;br /&gt;
Phat1			equ Phat + FPLEN&lt;br /&gt;
Phat2			equ Phat1 + FPLEN&lt;br /&gt;
MeanX1			equ Phat2 + FPLEN&lt;br /&gt;
StdX1			equ MeanX1 + FPLEN&lt;br /&gt;
StatN1			equ StdX1 + FPLEN&lt;br /&gt;
MeanX2			equ StatN1 + FPLEN&lt;br /&gt;
StdX2			equ MeanX2 + FPLEN&lt;br /&gt;
StatN2			equ StdX2 + FPLEN&lt;br /&gt;
StdXP2			equ StatN2 + FPLEN&lt;br /&gt;
SLower			equ StdXP2 + FPLEN&lt;br /&gt;
SUpper			equ SLower + FPLEN&lt;br /&gt;
SStat			equ SUpper + FPLEN&lt;br /&gt;
F_DF			equ anovaf_vars&lt;br /&gt;
F_SS			equ F_DF + FPLEN&lt;br /&gt;
F_MS			equ F_SS + FPLEN&lt;br /&gt;
E_DF			equ F_MS + FPLEN&lt;br /&gt;
E_SS			equ E_DF + FPLEN&lt;br /&gt;
E_MS			equ E_SS + FPLEN&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:OS:ti83plus.inc</id>
		<title>83Plus:OS:ti83plus.inc</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:OS:ti83plus.inc"/>
				<updated>2015-02-21T01:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Copy-pasted BrandonW's more complete version and fixed an error.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:OS_Information|ti83plus.inc]]&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
This is just the commonly used ti83plus.inc include file (edited by Rusty Wagner for use with TASM) for those who just want to have a short look at some tokens or bcall equates etc.&lt;br /&gt;
Use your browser's search function to find what you need.&lt;br /&gt;
&lt;br /&gt;
To see a more complete and up to date ti83plus.inc see: [http://www.brandonw.net/calcstuff/ti83plus.txt here]&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;TI-83 Plus Include File&lt;br /&gt;
;05/07/2007&lt;br /&gt;
&lt;br /&gt;
;Included for TASM Compatibility&lt;br /&gt;
;-------------------------------&lt;br /&gt;
#define equ .equ&lt;br /&gt;
#define EQU .equ&lt;br /&gt;
#define end .end&lt;br /&gt;
#define END .end&lt;br /&gt;
&lt;br /&gt;
;System Variable Equates&lt;br /&gt;
;------------------------------&lt;br /&gt;
XSCLt			equ 2&lt;br /&gt;
YSCLt			equ 3&lt;br /&gt;
XMINt			equ 0Ah&lt;br /&gt;
XMAXt			equ 0Bh&lt;br /&gt;
YMINt			equ 0Ch&lt;br /&gt;
YMAXt			equ 0Dh&lt;br /&gt;
TMINt			equ 0Eh&lt;br /&gt;
TMAXt			equ 0Fh&lt;br /&gt;
THETMINt		equ 10h&lt;br /&gt;
THETMAXt		equ 11h&lt;br /&gt;
TBLMINt			equ 1Ah&lt;br /&gt;
PLOTSTARTt		equ 1Bh&lt;br /&gt;
NMAXt			equ 1Dh&lt;br /&gt;
NMINt			equ 1Fh&lt;br /&gt;
TBLSTEPt		equ 21h&lt;br /&gt;
TSTEPt			equ 22h&lt;br /&gt;
THETSTEPt		equ 23h&lt;br /&gt;
DELTAXt			equ 26h&lt;br /&gt;
DELTAYt			equ 27h&lt;br /&gt;
XFACTt			equ 28h&lt;br /&gt;
YFACTt			equ 29h&lt;br /&gt;
FINNt			equ 2Bh&lt;br /&gt;
FINIt			equ 2Ch&lt;br /&gt;
FINPVt			equ 2Dh&lt;br /&gt;
FINPMTt			equ 2Eh&lt;br /&gt;
FINFVt			equ 2Fh&lt;br /&gt;
FINPYt			equ 30h&lt;br /&gt;
FINCYt			equ 31h&lt;br /&gt;
PLOTSTEPt		equ 34h&lt;br /&gt;
XRESt			equ 36h&lt;br /&gt;
&lt;br /&gt;
;Run indicators&lt;br /&gt;
;------------------------------------&lt;br /&gt;
busyPause		equ 10101010b&lt;br /&gt;
busyNormal		equ 11110000b&lt;br /&gt;
&lt;br /&gt;
;Banked Call Equates/Macros&lt;br /&gt;
;-----------------------------------------------&lt;br /&gt;
rBR_CALL		equ 28h&lt;br /&gt;
BRT_JUMP0		equ 50h&lt;br /&gt;
#define bcall(xxxx) rst 28h \ .dw xxxx&lt;br /&gt;
#define bjump(xxxx) call 50h \ .dw xxxx&lt;br /&gt;
&lt;br /&gt;
;Common Restart Routines&lt;br /&gt;
;------------------------------&lt;br /&gt;
rOP1TOOP2		equ 08h&lt;br /&gt;
rFINDSYM		equ 10h&lt;br /&gt;
rPUSHREALO1		equ 18h&lt;br /&gt;
rMOV9TOOP1		equ 20h&lt;br /&gt;
rFPADD			equ 30h&lt;br /&gt;
&lt;br /&gt;
;Error Handler Equates/Macros&lt;br /&gt;
;-------------------------------------------&lt;br /&gt;
APP_PUSH_ERRORH		equ 59h&lt;br /&gt;
APP_POP_ERRORH		equ 5Ch&lt;br /&gt;
#define AppOnErr(xxxx) ld hl,xxxx \ call 59h&lt;br /&gt;
#define AppOffErr call 5Ch&lt;br /&gt;
&lt;br /&gt;
;Page 1Bh ROM Calls&lt;br /&gt;
;--------------------------------&lt;br /&gt;
_JErrorNo		equ 4000h&lt;br /&gt;
_FontHook		equ 4003h&lt;br /&gt;
_call_character_hook	equ 4006h ;calls character(localize) hook&lt;br /&gt;
_ldHLind		equ 4009h ;l=a=(hl),h=(hl+1)&lt;br /&gt;
_CpHLDE			equ 400Ch&lt;br /&gt;
_DivHLBy10		equ 400Fh&lt;br /&gt;
_DivHLByA		equ 4012h&lt;br /&gt;
_kdbScan		equ 4015h&lt;br /&gt;
_GetCSC			equ 4018h ;key board scan codes&lt;br /&gt;
_coorMon		equ 401Bh ;&lt;br /&gt;
_Mon			equ 401Eh ;system monitor, customized through the context vectors&lt;br /&gt;
_monForceKey		equ 4021h ;&lt;br /&gt;
_sendKPress		equ 4024h&lt;br /&gt;
_JForceCmdNoChar	equ 4027h&lt;br /&gt;
_JForceCmd		equ 402Ah ;&lt;br /&gt;
_sysErrHandler		equ 402Dh ;loads error context? sp=(onSP)&lt;br /&gt;
_newContext		equ 4030h ;(kbdKey)=0, loads context, restores page in 4000h-7fffh&lt;br /&gt;
_newContext0		equ 4033h ;loads context&lt;br /&gt;
_cxPutAway		equ 4036h ;&lt;br /&gt;
_cxPutAway2		equ 4039h ;same but also does a B_CALL CanAlphIns&lt;br /&gt;
_cxPPutAway		equ 403Ch&lt;br /&gt;
_cxSizeWind		equ 403Fh&lt;br /&gt;
_cxErrEP		equ 4042h&lt;br /&gt;
_cxMain			equ 4045h&lt;br /&gt;
_monErrHand		equ 4048h ;installs errorhandler to start of ROM call, loads error context, jumps to mon&lt;br /&gt;
_AppInit		equ 404Bh ;loads vector data at hl to cxMain and the rest of the vectors&lt;br /&gt;
_resetRam		equ 404Eh&lt;br /&gt;
_lcd_busy		equ 4051h ;wait till bit 1 of port 2 is set&lt;br /&gt;
_Min			equ 4054h ;op1 = lowest number between op1 and op2&lt;br /&gt;
_Max			equ 4057h ;op1 = highest number between op1 and op2 &lt;br /&gt;
_Trunc			equ 4060h&lt;br /&gt;
_InvSub			equ 4063h&lt;br /&gt;
_Times2			equ 4066h&lt;br /&gt;
_Plus1			equ 4069h ;op1=op1+1&lt;br /&gt;
_Minus1			equ 406Ch&lt;br /&gt;
_FPSub			equ 406Fh&lt;br /&gt;
_FPAdd			equ 4072h&lt;br /&gt;
_DToR			equ 4075h&lt;br /&gt;
_RToD			equ 4078h&lt;br /&gt;
_Cube			equ 407Bh&lt;br /&gt;
_TimesPt5		equ 407Eh&lt;br /&gt;
_FPSquare		equ 4081h&lt;br /&gt;
_FPMult			equ 4084h ;op1=op1*op2&lt;br /&gt;
_LJRND			equ 4087h ;adjusts op1 if 0s precede the actual number... rounding? when&lt;br /&gt;
_InvOP1SC		equ 408Ah&lt;br /&gt;
_InvOP1S		equ 408Dh&lt;br /&gt;
_InvOP2S		equ 4090h&lt;br /&gt;
_frac			equ 4093h&lt;br /&gt;
_fprecip		equ 4096h&lt;br /&gt;
_fpdiv			equ 4099h&lt;br /&gt;
_SqRoot			equ 409Ch&lt;br /&gt;
_RndGuard		equ 409Fh&lt;br /&gt;
_RnFx			equ 40A2h&lt;br /&gt;
_int			equ 40A5h&lt;br /&gt;
_Round			equ 40A8h&lt;br /&gt;
_LnX			equ 40ABh&lt;br /&gt;
_LogX			equ 40AEh&lt;br /&gt;
_LJNORND		equ 40B1h ;like _LJRND but no rounding&lt;br /&gt;
_EToX			equ 40B4h&lt;br /&gt;
_TenX			equ 40B7h&lt;br /&gt;
_SinCosRad		equ 40BAh&lt;br /&gt;
_Sin			equ 40BDh&lt;br /&gt;
_cos			equ 40C0h&lt;br /&gt;
_Tan			equ 40C3h&lt;br /&gt;
_SinHCosH		equ 40C6h&lt;br /&gt;
_TanH			equ 40C9h&lt;br /&gt;
_cosh			equ 40CCh&lt;br /&gt;
_SinH			equ 40CFh&lt;br /&gt;
_ACosRad		equ 40D2h&lt;br /&gt;
_ATanRad		equ 40D5h&lt;br /&gt;
_ATan2Rad		equ 40D8h&lt;br /&gt;
_ASinRad		equ 40DBh&lt;br /&gt;
_ACos			equ 40DEh&lt;br /&gt;
_ATan			equ 40E1h&lt;br /&gt;
_ASin			equ 40E4h&lt;br /&gt;
_ATan2			equ 40E7h&lt;br /&gt;
_ATanH			equ 40EAh&lt;br /&gt;
_ASinH			equ 40EDh&lt;br /&gt;
_ACosH			equ 40F0h&lt;br /&gt;
_PtoR			equ 40F3h&lt;br /&gt;
_RToP			equ 40F6h&lt;br /&gt;
_HLTimes9		equ 40F9h&lt;br /&gt;
_CkOP1Cplx		equ 40FCh&lt;br /&gt;
_CkOP1Real		equ 40FFh&lt;br /&gt;
_Angle			equ 4102h&lt;br /&gt;
_COP1Set0		equ 4105h&lt;br /&gt;
_CpOP4OP3		equ 4108h&lt;br /&gt;
_Mov9OP2Cp		equ 410Bh&lt;br /&gt;
_AbsO1O2Cp		equ 410Eh&lt;br /&gt;
_cpop1op2		equ 4111h&lt;br /&gt;
_OP3ToOP4		equ 4114h&lt;br /&gt;
_OP1ToOP4		equ 4117h&lt;br /&gt;
_OP2ToOP4		equ 411Ah&lt;br /&gt;
_OP4ToOP2		equ 411Dh&lt;br /&gt;
_OP1ToOP3		equ 4123h&lt;br /&gt;
_OP5ToOP2		equ 4126h&lt;br /&gt;
_OP5ToOP6		equ 4129h&lt;br /&gt;
_OP5ToOP4		equ 412Ch&lt;br /&gt;
_OP1ToOP2		equ 412Fh&lt;br /&gt;
_OP6ToOP2		equ 4132h&lt;br /&gt;
_OP6ToOP1		equ 4135h&lt;br /&gt;
_OP4ToOP1		equ 4138h&lt;br /&gt;
_OP5ToOP1		equ 413Bh&lt;br /&gt;
_OP3ToOP1		equ 413Eh&lt;br /&gt;
_OP6ToOP5		equ 4141h&lt;br /&gt;
_OP4ToOP5		equ 4144h&lt;br /&gt;
_OP3ToOP5		equ 4147h&lt;br /&gt;
_OP2ToOP5		equ 414Ah&lt;br /&gt;
_OP2ToOP6		equ 414Dh&lt;br /&gt;
_OP1ToOP6		equ 4150h&lt;br /&gt;
_OP1ToOP5		equ 4153h&lt;br /&gt;
_OP2ToOP1		equ 4156h&lt;br /&gt;
_Mov11B			equ 4159h&lt;br /&gt;
_Mov10B			equ 415Ch&lt;br /&gt;
_Mov9B			equ 415Fh&lt;br /&gt;
_mov9B2			equ 4162h ;points to _mov9B&lt;br /&gt;
_Mov8B			equ 4165h&lt;br /&gt;
_Mov7B			equ 4168h&lt;br /&gt;
_Mov7B2			equ 416Bh ;same pointer as _Mov7B&lt;br /&gt;
_OP2ToOP3		equ 416Eh&lt;br /&gt;
_OP4ToOP3		equ 4171h&lt;br /&gt;
_OP5ToOP3		equ 4174h&lt;br /&gt;
_OP4ToOP6		equ 4177h&lt;br /&gt;
_Mov9ToOP1		equ 417Ah&lt;br /&gt;
_Mov9OP1OP2		equ 417Dh&lt;br /&gt;
_Mov9ToOP2		equ 4180h&lt;br /&gt;
_MovFrOP1		equ 4183h&lt;br /&gt;
_OP4Set1		equ 4186h&lt;br /&gt;
_OP3Set1		equ 4189h&lt;br /&gt;
_OP2Set8		equ 418Ch&lt;br /&gt;
_OP2Set5		equ 418Fh&lt;br /&gt;
_OP2SetA		equ 4192h&lt;br /&gt;
_OP2Set4		equ 4195h&lt;br /&gt;
_OP2Set3		equ 4198h&lt;br /&gt;
_OP1Set1		equ 419Bh&lt;br /&gt;
_OP1Set4		equ 419Eh&lt;br /&gt;
_OP1Set3		equ 41A1h&lt;br /&gt;
_OP3Set2		equ 41A4h&lt;br /&gt;
_OP1Set2		equ 41A7h&lt;br /&gt;
_OP2Set2		equ 41AAh&lt;br /&gt;
_OP2Set1		equ 41ADh&lt;br /&gt;
_Zero16D		equ 41B0h&lt;br /&gt;
_OP5Set0		equ 41B3h&lt;br /&gt;
_OP4Set0		equ 41B6h&lt;br /&gt;
_OP3Set0		equ 41B9h&lt;br /&gt;
_OP2Set0		equ 41BCh&lt;br /&gt;
_OP1Set0		equ 41BFh&lt;br /&gt;
_OPSet0			equ 41C2h ;hl = location to write floating point 0&lt;br /&gt;
_ZeroOP1		equ 41C5h&lt;br /&gt;
_ZeroOP2		equ 41C8h&lt;br /&gt;
_ZeroOP3		equ 41CBh&lt;br /&gt;
_ZeroOP			equ 41CEh&lt;br /&gt;
_ClrLp			equ 41D1h&lt;br /&gt;
_ShRAcc			equ 41D4h ;move high nibble in a to low nibble&lt;br /&gt;
_ShLAcc			equ 41D7h ;move low nibble in a to high nibble&lt;br /&gt;
_ShR18			equ 41DAh ;insert a 0 nibble at high nibble of (hl), shift 9 bytes 1 nibble to right&lt;br /&gt;
_SHR18A			equ 41DDh ;insert low nibble in a at high nibble of (hl), shift 9 bytes 1 nibble to right&lt;br /&gt;
_SHR16			equ 41E0h ;insert a 0 nibble at highnibble of (hl), shift 8 bytes 1 nibble to right&lt;br /&gt;
_SHR14			equ 41E3h ;insert low nibble in a at high nibble of (hl), shift 7 bytes 1 nibble to right&lt;br /&gt;
_SHL16			equ 41E6h ;insert nibble of 0 in low nibble of (hl), shift 8 bytes (before and including (hl)) to the left 1 nibble&lt;br /&gt;
_SHL14			equ 41E9h ;insert low nibble of a in low nibble of (hl), shift 7 bytes (before and including (hl)) to the left 1 nibble&lt;br /&gt;
_SRDO1			equ 41ECh&lt;br /&gt;
_SHRDRND		equ 41EFh&lt;br /&gt;
_MANTPA			equ 41F2h ;adds the value of a to hl which points to the end of the bcd 7 bytes long&lt;br /&gt;
_ADDPROP		equ 41F5h ;adds the value of a to hl which points to the end of the bcd (b bytes long)&lt;br /&gt;
_ADDPROPLP		equ 41F8h ;adds the value of a and carry to hl which points to the end of the bcd (b bytes long)&lt;br /&gt;
_ADD16D 		equ 41FBh ;adds the bcd numbers at (hl-7) and (de-7)&lt;br /&gt;
_ADD14D			equ 41FEh ;adds the bcd numbers at (hl-6) and (de-6)&lt;br /&gt;
_SUB16D			equ 4201h ;subtracts bcd numbers at (hl-7) and (de-7)&lt;br /&gt;
_SUB14D			equ 4204h ;subtracts bcd numbers at (hl-6) and (de-6)&lt;br /&gt;
_OP2ExOP6		equ 4207h&lt;br /&gt;
_OP5ExOP6		equ 420Ah&lt;br /&gt;
_OP1ExOP5		equ 420Dh&lt;br /&gt;
_OP1ExOP6		equ 4210h&lt;br /&gt;
_OP2ExOP4		equ 4213h&lt;br /&gt;
_OP2ExOP5		equ 4216h&lt;br /&gt;
_OP1ExOP3		equ 4219h&lt;br /&gt;
_OP1ExOP4		equ 421Ch&lt;br /&gt;
_OP1ExOP2		equ 421Fh&lt;br /&gt;
_ExLp			equ 4222h&lt;br /&gt;
_CkOP1C0		equ 4225h&lt;br /&gt;
_CkOP1FP0		equ 4228h&lt;br /&gt;
_CkOP2FP0		equ 422Bh&lt;br /&gt;
_PosNo0Int		equ 422Eh&lt;br /&gt;
_CKPosInt		equ 4231h&lt;br /&gt;
_CKInt			equ 4234h&lt;br /&gt;
_CKOdd			equ 4237h&lt;br /&gt;
_CKOP1M			equ 423Ah&lt;br /&gt;
_GETCONOP1		equ 423Dh ;a=0 opX=57.29577951308232 (1 radian in degrees)&lt;br /&gt;
_GETCONOP2		equ 4240h ;a=1 opX=1.570796326794897 (90 deg = pi/2)&lt;br /&gt;
				  ;a=2 opX=.7853981633974483 (45 deg = pi/4)&lt;br /&gt;
				  ;a=3 opX=.4342944819032518 (log e)&lt;br /&gt;
				  ;a=4 opX=3.141592653589800 (pi)&lt;br /&gt;
				  ;a=5 opX=.0174532925199433 (pi/180 = 1 degree in radians)&lt;br /&gt;
				  ;a=6 opX=2.302585092994046 (ln 10)&lt;br /&gt;
_PIDIV2			equ 4243h ;not code, but a pointer to:	.db 80h,15h,70h,79h,63h,26h,79h,48h,97h&lt;br /&gt;
_PIDIV4			equ 4246h ;				.db 7fh,78h,53h,98h,16h,33h,97h,44h,83h&lt;br /&gt;
_PItimes2		equ 4249h ;not code, but a pointer to a 2*pi in non-OP format (no exponent byte)&lt;br /&gt;
_PI			equ 424Ch ;not code, but a pointer to a pi in non-OP format (no exponent byte)&lt;br /&gt;
_ExpToHex		equ 424Fh&lt;br /&gt;
_OP1ExpToDec		equ 4252h&lt;br /&gt;
_ckop2pos		equ 4255h&lt;br /&gt;
_CkOP1Pos		equ 4258h&lt;br /&gt;
_ClrOP2S		equ 425Bh&lt;br /&gt;
_ClrOP1S		equ 425Eh&lt;br /&gt;
_FDIV100		equ 4261h ;op1=op1/100&lt;br /&gt;
_FDIV10			equ 4264h ;op1=op1/10&lt;br /&gt;
_DecO1Exp		equ 4267h ;decrease exponent by 1, this can go from 0 to FF&lt;br /&gt;
_INCO1EXP		equ 426Ah ;op1=op1*10&lt;br /&gt;
_INCEXP			equ 426Dh ;hl points to the floating point's exponent to be multiplied by 10&lt;br /&gt;
_CkValidNum		equ 4270h&lt;br /&gt;
_GETEXP			equ 4273h ;a=OP1's exponent, carry set if negative exponent, Z if e0&lt;br /&gt;
_HTimesL		equ 4276h&lt;br /&gt;
_EOP1NotReal		equ 4279h&lt;br /&gt;
_ThetaName		equ 427Ch&lt;br /&gt;
_RName			equ 427Fh&lt;br /&gt;
_REGEQNAME		equ 4282h&lt;br /&gt;
_RECURNNAME		equ 4285h&lt;br /&gt;
_XName			equ 4288h&lt;br /&gt;
_YName			equ 428Bh&lt;br /&gt;
_TName			equ 428Eh&lt;br /&gt;
_REALNAME		equ 4291h&lt;br /&gt;
_SETesTOfps		equ 4294h ;moves the word at fps to es&lt;br /&gt;
_markTableDirty		equ 4297h ;looks up table variable and marks VAT entry as &amp;quot;dirty&amp;quot; or selected&lt;br /&gt;
_OP1MOP2EXP		equ 429Ah ;op1's exponent = op1's expoent - op2's exponent&lt;br /&gt;
_OP1EXPMinusE		equ 429Dh ;a=(op1+1)-e&lt;br /&gt;
_CHKERRBREAK		equ 42A0h&lt;br /&gt;
_isA2ByteTok		equ 42A3h&lt;br /&gt;
_GETLASTENTRY		equ 42A6h&lt;br /&gt;
_GETLASTENTRYPTR	equ 42A9h&lt;br /&gt;
_REGCLRCHNG		equ 42ACh&lt;br /&gt;
_RESETWINTOP		equ 42AFh ;takes into account grfsplitoverride and grfsplit flags&lt;br /&gt;
_SetYUp			equ 42B2h ;loads 7 to port 10... what does this do?&lt;br /&gt;
_SetXUp			equ 42B5h ;loads 5 to port 10...&lt;br /&gt;
_ISO1NONTLSTorPROG	equ 42B8h ;checks if op1 contains a list, program, group, or appvar obj name&lt;br /&gt;
_ISO1NONTEMPLST		equ 42BBh ;checks if op1 contains a list (why would op1+1 contain 01, or 0d for a var name?)&lt;br /&gt;
_IS_A_LSTorCLST		equ 42BEh ;checks if a = 1 or 0Dh&lt;br /&gt;
_CHK_HL_999		equ 42C1h ;returns nc if less than 999, throws invalid dim error if greater than or equal to 999&lt;br /&gt;
_equ_or_newequ		equ 42C4h&lt;br /&gt;
_errd_op1notpos		equ 42C7h&lt;br /&gt;
_ErrD_OP1Not_R		equ 42CAh&lt;br /&gt;
_ErrD_OP1NotPosInt 	equ 42CDh&lt;br /&gt;
_ErrD_OP1_LE_0		equ 42D0h&lt;br /&gt;
_ErrD_OP1_0		equ 42D3h&lt;br /&gt;
_FINDSYM_GET_SIZE 	equ 42D6h ;like findsym, but on output hl is the size of the variable&lt;br /&gt;
_STO_STATVAR		equ 42D9h&lt;br /&gt;
_Rcl_StatVar		equ 42DCh&lt;br /&gt;
_CkOP2Real		equ 42DFh&lt;br /&gt;
_GET_X_INDIRECT		equ 42E2h ;whatever this is, it uses the imathptrX locations&lt;br /&gt;
_MemChk			equ 42E5h&lt;br /&gt;
_CMPPRGNAMLEN1		equ 42E8h ;gets variable name length from HL&lt;br /&gt;
_CMPPRGNAMLEN		equ 42EBh ;gets variable name length from OP1&lt;br /&gt;
_FINDPROGSYM		equ 42EEh ;find the program whose name is in op1 (see chkfindsym in SDK)&lt;br /&gt;
_ChkFindSym		equ 42F1h&lt;br /&gt;
_FindSym		equ 42F4h&lt;br /&gt;
_InsertMem		equ 42F7h&lt;br /&gt;
_INSERTMEMA		equ 42FAh ;not sure how this differs from insertmem&lt;br /&gt;
_EnoughMem		equ 42FDh&lt;br /&gt;
_CMPMEMNEED		equ 4300h&lt;br /&gt;
_CREATEPVAR4		equ 4303h&lt;br /&gt;
_CREATEPVAR3		equ 4306h&lt;br /&gt;
_CREATEVAR3		equ 4309h&lt;br /&gt;
_CreateCplx		equ 430Ch&lt;br /&gt;
_CreateReal		equ 430Fh&lt;br /&gt;
_CreateTempRList	equ 4312h&lt;br /&gt;
_CreateRList		equ 4315h&lt;br /&gt;
_CREATETCLIST		equ 4318h&lt;br /&gt;
_CreateCList		equ 431Bh&lt;br /&gt;
_CreateTempRMat		equ 431Eh&lt;br /&gt;
_CreateRMat		equ 4321h&lt;br /&gt;
_CreateTempString	equ 4324h&lt;br /&gt;
_CreateStrng		equ 4327h&lt;br /&gt;
_Create0Equ		equ 432Ah&lt;br /&gt;
_CreateTempEqu		equ 432Dh&lt;br /&gt;
_CreateEqu		equ 4330h&lt;br /&gt;
_CreatePict		equ 4333h&lt;br /&gt;
_CreateGDB		equ 4336h&lt;br /&gt;
_CreateProg		equ 4339h&lt;br /&gt;
_CHKDEL			equ 433Ch&lt;br /&gt;
_CHKDELA		equ 433Fh&lt;br /&gt;
_ADJPARSER		equ 4342h&lt;br /&gt;
_ADJMATH		equ 4345h&lt;br /&gt;
_ADJM7			equ 4348h&lt;br /&gt;
_DELMEMA		equ 434Bh&lt;br /&gt;
_GET_FORM_NUM		equ 434Eh&lt;br /&gt;
_DelVar			equ 4351h&lt;br /&gt;
_DELVARIO		equ 4354h&lt;br /&gt;
_DelMem			equ 4357h&lt;br /&gt;
_DELVAR3D		equ 435Ah&lt;br /&gt;
_DELVAR3C		equ 435Dh&lt;br /&gt;
_DELVAR3DC		equ 4360h ;may be incorrect&lt;br /&gt;
_IsFixedName		equ 4363h&lt;br /&gt;
_DelVarEntry		equ 4366h&lt;br /&gt;
_DataSizeA		equ 4369h&lt;br /&gt;
_DataSize		equ 436Ch&lt;br /&gt;
_POPMCPLXO1		equ 436Fh&lt;br /&gt;
_POPMCPLX		equ 4372h&lt;br /&gt;
_MOVCPLX		equ 4375h&lt;br /&gt;
_popOP5			equ 4378h&lt;br /&gt;
_popOP3			equ 437Bh&lt;br /&gt;
_popOP1			equ 437Eh&lt;br /&gt;
_PopRealO6		equ 4381h&lt;br /&gt;
_PopRealO5		equ 4384h&lt;br /&gt;
_PopRealO4		equ 4387h&lt;br /&gt;
_PopRealO3		equ 438Ah&lt;br /&gt;
_PopRealO2		equ 438Dh&lt;br /&gt;
_PopRealO1		equ 4390h&lt;br /&gt;
_PopReal		equ 4393h&lt;br /&gt;
_FPOPCPLX		equ 4396h&lt;br /&gt;
_FPOPREAL		equ 4399h&lt;br /&gt;
_FPOPFPS		equ 439Ch&lt;br /&gt;
_DeallocFPS		equ 439Fh&lt;br /&gt;
_DeallocFPS1		equ 43A2h&lt;br /&gt;
_AllocFPS		equ 43A5h&lt;br /&gt;
_AllocFPS1		equ 43A8h&lt;br /&gt;
_PushRealO6		equ 43ABh&lt;br /&gt;
_PushRealO5		equ 43AEh&lt;br /&gt;
_PushRealO4		equ 43B1h&lt;br /&gt;
_PushRealO3		equ 43B4h&lt;br /&gt;
_PushRealO2		equ 43B7h&lt;br /&gt;
_PushRealO1		equ 43BAh&lt;br /&gt;
_PushReal		equ 43BDh&lt;br /&gt;
_PushOP5		equ 43C0h&lt;br /&gt;
_PushOP3		equ 43C3h&lt;br /&gt;
_PUSHMCPLXO3		equ 43C6h&lt;br /&gt;
_PushOP1		equ 43C9h&lt;br /&gt;
_PUSHMCPLXO1		equ 43CCh&lt;br /&gt;
_PUSHMCPLX		equ 43CFh&lt;br /&gt;
_ExMCplxO1		equ 43D2h&lt;br /&gt;
_Exch9			equ 43D5h&lt;br /&gt;
_CpyTo1FPS11		equ 43D8h&lt;br /&gt;
_CpyTo2FPS5		equ 43DBh&lt;br /&gt;
_CpyTo1FPS5		equ 43DEh&lt;br /&gt;
_CpyTo2FPS6		equ 43E1h&lt;br /&gt;
_CpyTo1FPS6		equ 43E4h&lt;br /&gt;
_CpyTo2FPS7		equ 43E7h&lt;br /&gt;
_CpyTo1FPS7		equ 43EAh&lt;br /&gt;
_CpyTo1FPS8		equ 43EDh&lt;br /&gt;
_CpyTo2FPS8		equ 43F0h&lt;br /&gt;
_CpyTo1FPS10		equ 43F3h&lt;br /&gt;
_CpyTo1FPS9		equ 43F6h&lt;br /&gt;
_CpyTo2FPS4		equ 43F9h&lt;br /&gt;
_CpyTo6FPS3		equ 43FCh&lt;br /&gt;
_CpyTo6FPS2		equ 43FFh&lt;br /&gt;
_CpyTo2FPS3		equ 4402h&lt;br /&gt;
_CPYCTO1FPS3		equ 4405h&lt;br /&gt;
_CpyTo1FPS3		equ 4408h&lt;br /&gt;
_CPYFPS3		equ 440Bh&lt;br /&gt;
_CpyTo1FPS4		equ 440Eh&lt;br /&gt;
_CpyTo3FPS2		equ 4411h&lt;br /&gt;
_CpyTo5FPST		equ 4414h&lt;br /&gt;
_CpyTo6FPST		equ 4417h&lt;br /&gt;
_CpyTo4FPST		equ 441Ah&lt;br /&gt;
_CpyTo3FPST		equ 441Dh&lt;br /&gt;
_CpyTo2FPST		equ 4420h&lt;br /&gt;
_CpyTo1FPST		equ 4423h&lt;br /&gt;
_CPYFPST		equ 4426h&lt;br /&gt;
_CpyStack		equ 4429h&lt;br /&gt;
_CpyTo3FPS1		equ 442Ch&lt;br /&gt;
_CpyTo2FPS1		equ 442Fh&lt;br /&gt;
_CpyTo1FPS1		equ 4432h&lt;br /&gt;
_CPYFPS1		equ 4435h&lt;br /&gt;
_CpyTo2FPS2		equ 4438h&lt;br /&gt;
_CpyTo1FPS2		equ 443Bh&lt;br /&gt;
_CPYFPS2		equ 443Eh&lt;br /&gt;
_CpyO3ToFPST		equ 4441h&lt;br /&gt;
_CpyO2ToFPST		equ 4444h&lt;br /&gt;
_CpyO6ToFPST		equ 4447h&lt;br /&gt;
_CpyO1ToFPST		equ 444Ah&lt;br /&gt;
_CpyToFPST		equ 444Dh&lt;br /&gt;
_CpyToStack		equ 4450h&lt;br /&gt;
_CpyO3ToFPS1		equ 4453h&lt;br /&gt;
_CpyO5ToFPS1		equ 4456h&lt;br /&gt;
_CpyO2ToFPS1		equ 4459h&lt;br /&gt;
_CpyO1ToFPS1		equ 445Ch&lt;br /&gt;
_CpyToFPS1		equ 445Fh&lt;br /&gt;
_CpyO2ToFPS2		equ 4462h&lt;br /&gt;
_CpyO3ToFPS2		equ 4465h&lt;br /&gt;
_CpyO6ToFPS2		equ 4468h&lt;br /&gt;
_CpyO1ToFPS2		equ 446Bh&lt;br /&gt;
_CpyToFPS2		equ 446Eh&lt;br /&gt;
_CpyO5ToFPS3		equ 4471h&lt;br /&gt;
_CpyO2ToFPS3		equ 4474h&lt;br /&gt;
_CpyO1ToFPS3		equ 4477h&lt;br /&gt;
_CpyToFPS3		equ 447Ah&lt;br /&gt;
_CpyO1ToFPS6		equ 447Dh&lt;br /&gt;
_CpyO1ToFPS7		equ 4480h&lt;br /&gt;
_CpyO1ToFPS5		equ 4483h&lt;br /&gt;
_CpyO2ToFPS4		equ 4486h&lt;br /&gt;
_CpyO1ToFPS4		equ 4489h&lt;br /&gt;
_ErrNotEnoughMem 	equ 448Ch ;only if not HL bytes free&lt;br /&gt;
_FPSMINUS9		equ 448Fh&lt;br /&gt;
_HLMINUS9		equ 4492h&lt;br /&gt;
_ErrOverflow		equ 4495h&lt;br /&gt;
_ErrDivBy0		equ 4498h&lt;br /&gt;
_ErrSingularMat		equ 449Bh&lt;br /&gt;
_ErrDomain		equ 449Eh&lt;br /&gt;
_ErrIncrement		equ 44A1h&lt;br /&gt;
_ErrNon_Real		equ 44A4h&lt;br /&gt;
_ErrSyntax		equ 44A7h&lt;br /&gt;
_ErrDataType		equ 44AAh&lt;br /&gt;
_ErrArgument		equ 44ADh&lt;br /&gt;
_ErrDimMismatch		equ 44B0h&lt;br /&gt;
_ErrDimension		equ 44B3h&lt;br /&gt;
_ErrUndefined		equ 44B6h&lt;br /&gt;
_ErrMemory		equ 44B9h&lt;br /&gt;
_ErrInvalid		equ 44BCh&lt;br /&gt;
_ErrBreak		equ 44BFh&lt;br /&gt;
_ErrStat		equ 44C2h&lt;br /&gt;
_ErrSignChange		equ 44C5h&lt;br /&gt;
_ErrIterations		equ 44C8h&lt;br /&gt;
_ErrBadGuess		equ 44CBh&lt;br /&gt;
_ErrTolTooSmall		equ 44CEh&lt;br /&gt;
_ErrStatPlot		equ 44D1h&lt;br /&gt;
_ErrLinkXmit		equ 44D4h&lt;br /&gt;
_JError			equ 44D7h&lt;br /&gt;
_noErrorEntry		equ 44DAh&lt;br /&gt;
_pushErrorHandleR	equ 44DDh&lt;br /&gt;
_popErrorHandleR	equ 44E0h&lt;br /&gt;
_strcopy		equ 44E3h&lt;br /&gt;
_strCat			equ 44E6h&lt;br /&gt;
_isInSet		equ 44E9h&lt;br /&gt;
_sDone			equ 44ECh ;this should actually be called _SetEquToOP1&lt;br /&gt;
_serrort		equ 44EFh&lt;br /&gt;
_sNameEq		equ 44F2h&lt;br /&gt;
_sUnderScr		equ 44F5h&lt;br /&gt;
_sFAIL			equ 44F8h&lt;br /&gt;
_sName			equ 44FBh&lt;br /&gt;
_sOK			equ 44FEh&lt;br /&gt;
_PutMap			equ 4501h&lt;br /&gt;
_PutC			equ 4504h&lt;br /&gt;
_DispHL			equ 4507h&lt;br /&gt;
_PutS			equ 450Ah&lt;br /&gt;
_putpsb			equ 450Dh&lt;br /&gt;
_PutPS			equ 4510h&lt;br /&gt;
_wputps			equ 4513h&lt;br /&gt;
_putbuf			equ 4516h&lt;br /&gt;
_putbuf1		equ 4519h&lt;br /&gt;
_wputc			equ 451Ch&lt;br /&gt;
_wputs			equ 451Fh&lt;br /&gt;
_wputsEOL		equ 4522h ;displays string in HL in big font, and uses ... if too long&lt;br /&gt;
_wdispEOL		equ 4525h&lt;br /&gt;
_whomeup		equ 4528h&lt;br /&gt;
_setNumWindow		equ 452Bh ;based on current cursor position, sets winleft and similar (for input prompts)&lt;br /&gt;
_newline		equ 452Eh&lt;br /&gt;
_moveDown		equ 4531h&lt;br /&gt;
_scrollUp		equ 4534h&lt;br /&gt;
_shrinkWindow		equ 4537h&lt;br /&gt;
_moveUp			equ 453Ah&lt;br /&gt;
_scrollDown		equ 453Dh&lt;br /&gt;
_ClrLCDFull		equ 4540h&lt;br /&gt;
_ClrLCD			equ 4543h&lt;br /&gt;
_ClrScrnFull		equ 4546h&lt;br /&gt;
_ClrScrn		equ 4549h&lt;br /&gt;
_ClrTxtShd		equ 454Ch&lt;br /&gt;
_ClrWindow		equ 454Fh&lt;br /&gt;
_EraseEOL		equ 4552h&lt;br /&gt;
_EraseEOW		equ 4555h&lt;br /&gt;
_HomeUp			equ 4558h&lt;br /&gt;
_getcurloc		equ 455Bh&lt;br /&gt;
_VPutMap		equ 455Eh&lt;br /&gt;
_VPutS			equ 4561h&lt;br /&gt;
_VPutSN			equ 4564h&lt;br /&gt;
_vputsnG		equ 4567h&lt;br /&gt;
_vputsnT		equ 456Ah&lt;br /&gt;
_RunIndicOn		equ 456Dh&lt;br /&gt;
_RunIndicOff		equ 4570h&lt;br /&gt;
_saveCmdShadow		equ 4573h&lt;br /&gt;
_saveShadow		equ 4576h&lt;br /&gt;
_rstrShadow		equ 4579h&lt;br /&gt;
_rstrpartial		equ 457Ch&lt;br /&gt;
_rstrCurRow		equ 457Fh&lt;br /&gt;
_rstrUnderMenu		equ 4582h&lt;br /&gt;
_rstrbotrow		equ 4585h&lt;br /&gt;
_saveTR			equ 4588h ;save top right corner of LCD so 2nd arrow can be displayed, indicinuse flag must be set&lt;br /&gt;
_restoreTR		equ 458Bh ;restore top right corner of LCD destroyed by an arrow. indicinuse flag must be set&lt;br /&gt;
_GetKeyPress		equ 458Eh&lt;br /&gt;
_GetTokLen		equ 4591h ;input: hl=pointer to token. output: a=lenght of string, hl=pointer to string on page 1&lt;br /&gt;
_GET_TOK_STRNG		equ 4594h ;input: hl=pointer to token. output: op3=string of the token, a=length of string&lt;br /&gt;
_GETTOKSTRING		equ 4597h ;input: DE=token. output: hl=pointer to the string on page 1&lt;br /&gt;
_PUTBPATBUF2		equ 459Ah&lt;br /&gt;
_PUTBPATBUF		equ 459Dh&lt;br /&gt;
_putbPAT		equ 45A0h&lt;br /&gt;
_putcCheckScrolL	equ 45A3h&lt;br /&gt;
_DispEOL		equ 45A6h&lt;br /&gt;
_fdispEOL		equ 45A9h&lt;br /&gt;
_MAKEROWCMD		equ 45ACh&lt;br /&gt;
_TOTOSTRP		equ 45AFh&lt;br /&gt;
_SETVARNAME		equ 45B2h&lt;br /&gt;
_DispDone		equ 45B5h&lt;br /&gt;
_finishoutput		equ 45B8h&lt;br /&gt;
_curBlink		equ 45BBh&lt;br /&gt;
_CursorOff		equ 45BEh&lt;br /&gt;
_hideCursor		equ 45C1h&lt;br /&gt;
_CursorOn		equ 45C4h&lt;br /&gt;
_showCursor		equ 45C7h&lt;br /&gt;
_KeyToString		equ 45CAh&lt;br /&gt;
_PULLDOWNCHK		equ 45CDh ;something wrong here&lt;br /&gt;
_MenuCatCommon		equ 45D0h&lt;br /&gt;
_ZIfCatalog		equ 45D3h&lt;br /&gt;
_ZIfMatrixMenu		equ 45D6h ;_loadCurCat&lt;br /&gt;
_LoadMenuNum		equ 45D9h&lt;br /&gt;
_LoadMenuNumL		equ 45DCh&lt;br /&gt;
_MenCatRet		equ 45DFh ;restores display as though a menu were just cleared (restores some flags too)&lt;br /&gt;
_MenuSwitchContext	equ 45E2h ;switches to context in A, calls menu hook with A=3, set 5,(iy+16h) for some sort of override to not make switch&lt;br /&gt;
_MenuEdKey		equ 45E5h&lt;br /&gt;
_BackUpGraphSettings	equ 45E8h&lt;br /&gt;
_notalphnum		equ 45EBh&lt;br /&gt;
_SaveSavedFlags		equ 45EEh&lt;br /&gt;
_SetMenuFlags		equ 45F1h&lt;br /&gt;
_RstrSomeFlags		equ 45F4h&lt;br /&gt;
_RstrOScreen		equ 45F7h ;restores saveSScreen to the display&lt;br /&gt;
_SaveOScreen		equ 45FAh ;stores display in saveSScreen&lt;br /&gt;
_dispListName		equ 45FDh ;_SeeIfErrorCx&lt;br /&gt;
_PrevContext		equ 4600h&lt;br /&gt;
_CompareContext		equ 4603h&lt;br /&gt;
_AdrMRow		equ 4606h&lt;br /&gt;
_AdrMEle		equ 4609h&lt;br /&gt;
_GETMATOP1A		equ 460Ch&lt;br /&gt;
_GETM1TOOP1		equ 460Fh&lt;br /&gt;
_GETM1TOP1A		equ 4612h&lt;br /&gt;
_GetMToOP1		equ 4615h&lt;br /&gt;
_PUTTOM1A		equ 4618h&lt;br /&gt;
_PUTTOMA1		equ 461Bh&lt;br /&gt;
_PutToMat		equ 461Eh&lt;br /&gt;
_MAT_EL_DIV		equ 4621h&lt;br /&gt;
_CMATFUN		equ 4624h&lt;br /&gt;
_ROWECH_POLY		equ 4627h&lt;br /&gt;
_ROWECHELON		equ 462Ah&lt;br /&gt;
_AdrLEle		equ 462Dh&lt;br /&gt;
_GETL1TOOP1		equ 4630h&lt;br /&gt;
_GETL1TOP1A		equ 4633h&lt;br /&gt;
_GetLToOP1		equ 4636h&lt;br /&gt;
_GETL1TOOP2		equ 4639h&lt;br /&gt;
_GETL1TOP2A		equ 463Ch&lt;br /&gt;
_GETL2TOP1A		equ 463Fh&lt;br /&gt;
_PUTTOLA1		equ 4642h&lt;br /&gt;
_PutToL			equ 4645h&lt;br /&gt;
_MAXMINLST		equ 4648h&lt;br /&gt;
_LLOW			equ 464Bh&lt;br /&gt;
_LHIGH			equ 464Eh&lt;br /&gt;
_LSUM			equ 4651h&lt;br /&gt;
CUMSUM			equ 4654h&lt;br /&gt;
_ToFrac			equ 4657h&lt;br /&gt;
_SEQSET			equ 465Ah&lt;br /&gt;
_SEQSOLVE		equ 465Dh&lt;br /&gt;
_CMP_NUM_INIT		equ 4660h&lt;br /&gt;
_BinOPExec		equ 4663h&lt;br /&gt;
_EXMEAN1		equ 4666h&lt;br /&gt;
_SET2MVLPTRS		equ 4669h&lt;br /&gt;
_SETMAT1		equ 466Ch&lt;br /&gt;
_CREATETLIST		equ 466Fh&lt;br /&gt;
_UnOPExec		equ 4672h&lt;br /&gt;
_ThreeExec		equ 4675h&lt;br /&gt;
_RESTOREERRNO		equ 4678h&lt;br /&gt;
_FourExec		equ 467Bh&lt;br /&gt;
_FiveExec		equ 467Eh&lt;br /&gt;
_CPYTO2ES1		equ 4681h&lt;br /&gt;
_CPYTO6ES1		equ 4684h&lt;br /&gt;
_CPYTO1ES1		equ 4687h&lt;br /&gt;
_CPYTO3ES1		equ 468Ah&lt;br /&gt;
_CPYTO3ES2		equ 468Dh&lt;br /&gt;
_CPYTO2ES2		equ 4690h&lt;br /&gt;
_CPYTO1ES2		equ 4693h&lt;br /&gt;
_CPYTO2ES3		equ 4696h&lt;br /&gt;
_CPYTO1ES3		equ 4699h&lt;br /&gt;
_CPYTO3ES4		equ 469Ch&lt;br /&gt;
_CPYTO6ES3		equ 469Fh&lt;br /&gt;
_CPYTO2ES4		equ 46A2h&lt;br /&gt;
_CPYTO1ES4		equ 46A5h&lt;br /&gt;
_CPYTO2ES5		equ 46A8h&lt;br /&gt;
_CPYTO1ES5		equ 46ABh&lt;br /&gt;
_CPYTO4EST		equ 46AEh&lt;br /&gt;
_CPYTO2EST		equ 46B1h&lt;br /&gt;
_CPYTO1EST		equ 46B4h&lt;br /&gt;
_CPYTO2ES6		equ 46B7h&lt;br /&gt;
_CPYTO1ES6		equ 46BAh&lt;br /&gt;
_CPYTO2ES7		equ 46BDh&lt;br /&gt;
_CPYTO1ES7		equ 46C0h&lt;br /&gt;
_CPYTO2ES8		equ 46C3h&lt;br /&gt;
_CPYTO1ES8		equ 46C6h&lt;br /&gt;
_CPYTO1ES9		equ 46C9h&lt;br /&gt;
_CPYTO2ES9		equ 46CCh&lt;br /&gt;
_CPYTO2ES10		equ 46CFh&lt;br /&gt;
_CPYTO1ES10		equ 46D2h&lt;br /&gt;
_CPYTO2ES11		equ 46D5h&lt;br /&gt;
_CPYTO1ES11		equ 46D8h&lt;br /&gt;
_CPYTO2ES12		equ 46DBh&lt;br /&gt;
_CPYTO1ES12		equ 46DEh&lt;br /&gt;
_CPYTO2ES13		equ 46E1h&lt;br /&gt;
_CPYTO1ES13		equ 46E4h&lt;br /&gt;
_CPYTO1ES14		equ 46E7h&lt;br /&gt;
_CPYTO1ES16		equ 46EAh&lt;br /&gt;
_CPYTO1ES17		equ 46EDh&lt;br /&gt;
_CPYTO1ES18		equ 46F0h&lt;br /&gt;
_CPYTO1ES15		equ 46F3h&lt;br /&gt;
_CPYTO2ES15		equ 46F6h&lt;br /&gt;
_CPYO1TOEST		equ 46F9h&lt;br /&gt;
_CPYO1TOES1		equ 46FCh&lt;br /&gt;
_CPYO6TOES1		equ 46FFh&lt;br /&gt;
_CPYO6TOES3		equ 4702h&lt;br /&gt;
_CPYO1TOES2		equ 4705h&lt;br /&gt;
_CPYO2TOES2		equ 4708h&lt;br /&gt;
_CPYO1TOES3		equ 470Bh&lt;br /&gt;
_CPYO1TOES4		equ 470Eh&lt;br /&gt;
_CPYO1TOES5		equ 4711h&lt;br /&gt;
_CPYO1TOES6		equ 4714h&lt;br /&gt;
_CPYO1TOES7		equ 4717h&lt;br /&gt;
_CPYO2TOES4		equ 471Ah&lt;br /&gt;
_CPYO2TOES5		equ 471Dh&lt;br /&gt;
_CPYO2TOES6		equ 4720h&lt;br /&gt;
_CPYO2TOES7		equ 4723h&lt;br /&gt;
_CPYO2TOES8		equ 4726h&lt;br /&gt;
_CPYO2TOES9		equ 4729h&lt;br /&gt;
_CPYO1TOES8		equ 472Ch&lt;br /&gt;
_CPYO1TOES9		equ 472Fh&lt;br /&gt;
_CPYO1TOES10		equ 4732h&lt;br /&gt;
_CPYO1TOES11		equ 4735h&lt;br /&gt;
_CPYO1TOES12		equ 4738h&lt;br /&gt;
_CPYO1TOES13		equ 473Bh&lt;br /&gt;
_CPYO1TOES14		equ 473Eh&lt;br /&gt;
_CPYO1TOES15		equ 4741h&lt;br /&gt;
;_EVALF3A		equ 4744h ;Zeda: misassigned&lt;br /&gt;
_GetK			equ 4744h&lt;br /&gt;
_setTitle               equ 474Ah&lt;br /&gt;
_dispVarVal		equ 474Dh&lt;br /&gt;
_RecallEd		equ 4750h ;_setupBuffer&lt;br /&gt;
_createNumEditBuf	equ 4753h&lt;br /&gt;
_ProcessBufKeys		equ 4756h ;may be default key processing like [CLEAR], etc. especially for an edit buffer.&lt;br /&gt;
_CallCommon		equ 4759h&lt;br /&gt;
_CommonKeys		equ 475Ch&lt;br /&gt;
_Leftmore		equ 475Fh&lt;br /&gt;
_fDel			equ 4762h&lt;br /&gt;
_fClear			equ 4765h&lt;br /&gt;
_finsDisp		equ 4768h ;Michael says _FinsDisp02 equ 4768h (something's not right)&lt;br /&gt;
_FinsDisp02		equ 476Bh ;_setIndicator&lt;br /&gt;
_closeeditbufnor	equ 476Eh&lt;br /&gt;
_releaseBuffer		equ 4771h&lt;br /&gt;
_varnameToOP1hl		equ 4774h&lt;br /&gt;
_nameToOP1		equ 4777h&lt;br /&gt;
_numPPutAway		equ 477Ah&lt;br /&gt;
_numRedisp		equ 477Dh&lt;br /&gt;
_numError02		equ 4780h&lt;br /&gt;
_Load_SFont		equ 4783h&lt;br /&gt;
_SFont_Len		equ 4786h&lt;br /&gt;
_InitNumVec		equ 4789h ;inits window settings/table setup/finance solver context (dialog-like)&lt;br /&gt;
_SetXXOP1		equ 478Ch&lt;br /&gt;
_SetXXOP2		equ 478Fh&lt;br /&gt;
_SetXXXXOP2		equ 4792h&lt;br /&gt;
_UCLineS		equ 4795h&lt;br /&gt;
_CLine			equ 4798h&lt;br /&gt;
_CLineS			equ 479Bh&lt;br /&gt;
_XRootY			equ 479Eh&lt;br /&gt;
_YToX			equ 47A1h&lt;br /&gt;
_ZmStats		equ 47A4h&lt;br /&gt;
_POINT_STAT_HLP		equ 47A7h&lt;br /&gt;
_DRAWSPLOT		equ 47AAh&lt;br /&gt;
_INITNEWTRACEP		equ 47ADh ;A is input here, goes to (8E63h)&lt;br /&gt;
_SPLOTCOORD		equ 47B0h&lt;br /&gt;
_SPLOTRIGHT		equ 47B3h&lt;br /&gt;
_SPLOTLEFT		equ 47B6h&lt;br /&gt;
_CMPBOXINFO		equ 47B9h&lt;br /&gt;
_NEXTPLOT		equ 47BCh&lt;br /&gt;
_PREVPLOT		equ 47BFh&lt;br /&gt;
_CLRPREVPLOT		equ 47C2h&lt;br /&gt;
_PUT_INDEX_LST		equ 47C5h&lt;br /&gt;
_GET_INDEX_LST		equ 47C8h&lt;br /&gt;
_HEAP_SORT		equ 47CBh&lt;br /&gt;
_StoGDB2		equ 47CEh&lt;br /&gt;
_RclGDB2		equ 47D1h&lt;br /&gt;
_CircCmd		equ 47D4h&lt;br /&gt;
_GrphCirc		equ 47D7h&lt;br /&gt;
_Mov18B			equ 47DAh&lt;br /&gt;
_DarkLine		equ 47DDh&lt;br /&gt;
_ILine			equ 47E0h&lt;br /&gt;
_IPoint			equ 47E3h&lt;br /&gt;
_XYRNDBOTH		equ 47E6h&lt;br /&gt;
_XYRND			equ 47E9h&lt;br /&gt;
_CheckTOP		equ 47ECh&lt;br /&gt;
_CheckXY		equ 47EFh&lt;br /&gt;
_DarkPnt		equ 47F2h&lt;br /&gt;
_CPointS		equ 47F5h&lt;br /&gt;
_WTOV			equ 47F8h&lt;br /&gt;
_VtoWHLDE		equ 47FBh&lt;br /&gt;
_Xitof			equ 47FEh&lt;br /&gt;
_YftoI			equ 4801h&lt;br /&gt;
_XftoI			equ 4804h&lt;br /&gt;
_TraceOff		equ 4807h&lt;br /&gt;
_GrRedisp		equ 480Ah&lt;br /&gt;
_GDISPTOKEN		equ 480Dh&lt;br /&gt;
_GRDECODA		equ 4810h&lt;br /&gt;
_LABCOOR		equ 4813h ;draws labels with _GRLABELS and X/Y/whatever coordinates, including stat plot stuff&lt;br /&gt;
_COORDISP		equ 4816h ;draws X &amp;amp; Y coordinates (or R and theta if PolarGC)&lt;br /&gt;
_TMPEQUNOSRC		equ 4819h&lt;br /&gt;
_GRLABELS		equ 481Ch&lt;br /&gt;
_YPIXSET		equ 481Fh&lt;br /&gt;
_XPIXSET		equ 4822h&lt;br /&gt;
_COPYRNG		equ 4825h&lt;br /&gt;
_VALCUR			equ 4828h ;just sets/resets three flags, enables graph cursor&lt;br /&gt;
_GRPUTAWAY		equ 482Bh&lt;br /&gt;
_RSTGFLAGS		equ 482Eh&lt;br /&gt;
_GRReset		equ 4831h&lt;br /&gt;
_XYCENT			equ 4834h&lt;br /&gt;
_ZOOMXYCMD		equ 4837h&lt;br /&gt;
_CPTDELY		equ 483Ah&lt;br /&gt;
_CPTDELX		equ 483Dh&lt;br /&gt;
_SetFuncM		equ 4840h&lt;br /&gt;
_SetSeqM		equ 4843h&lt;br /&gt;
_SetPolM		equ 4846h&lt;br /&gt;
_SetParM		equ 4849h&lt;br /&gt;
_ZmInt			equ 484Ch&lt;br /&gt;
_ZmDecml		equ 484Fh&lt;br /&gt;
_ZmPrev			equ 4852h&lt;br /&gt;
_ZmUsr			equ 4855h&lt;br /&gt;
_SETUZM			equ 4858h&lt;br /&gt;
_ZmFit			equ 485Bh&lt;br /&gt;
_ZmSquare		equ 485Eh&lt;br /&gt;
_ZmTrig			equ 4861h&lt;br /&gt;
_SetXMinMax		equ 4864h&lt;br /&gt;
_ZooDefault		equ 4867h&lt;br /&gt;
_GrBufCpy		equ 486Ah&lt;br /&gt;
_DRAWSPLITLINE		equ 486Dh&lt;br /&gt;
_RestoreDisp		equ 4870h&lt;br /&gt;
_FNDDB			equ 4873h&lt;br /&gt;
_AllEq			equ 4876h&lt;br /&gt;
_fndallseleq		equ 4879h&lt;br /&gt;
_NEXTEQ			equ 487Ch&lt;br /&gt;
_PREVEQ			equ 487Fh&lt;br /&gt;
_BLINKGCUR		equ 4882h&lt;br /&gt;
_NBCURSOR		equ 4885h&lt;br /&gt;
_STATMARK		equ 4888h&lt;br /&gt;
_CHKTEXTCURS		equ 488Bh&lt;br /&gt;
_Regraph		equ 488Eh&lt;br /&gt;
_DOREFFLAGS02		equ 4891h ;something wrong here&lt;br /&gt;
INITNSEQ		equ 4894h&lt;br /&gt;
_YRES			equ 4897h ;_PLOTPTXY2&lt;br /&gt;
_Ceiling		equ 489Ah ;ceil(OP1)&lt;br /&gt;
_PutXY			equ 489Dh ;draws X &amp;amp; Y coordinates (regardless of PolarGC)&lt;br /&gt;
_PUTEQUNO		equ 48A0h&lt;br /&gt;
_PDspGrph		equ 48A3h&lt;br /&gt;
_HorizCmd		equ 48A6h&lt;br /&gt;
_VertCmd		equ 48A9h&lt;br /&gt;
_LineCmd		equ 48ACh&lt;br /&gt;
_UnLineCmd		equ 48AFh&lt;br /&gt;
_PointCmd		equ 48B2h&lt;br /&gt;
_PixelTest		equ 48B5h&lt;br /&gt;
_PixelCmd  		equ 48B8h&lt;br /&gt;
_TanLnF			equ 48BBh&lt;br /&gt;
_DRAWCMD_INIT		equ 48BEh&lt;br /&gt;
_DrawCmd		equ 48C1h&lt;br /&gt;
_SHADECMD		equ 48C4h&lt;br /&gt;
_InvCmd			equ 48C7h&lt;br /&gt;
_STATSHADE		equ 48CAh&lt;br /&gt;
_dspmattable		equ 48CDh&lt;br /&gt;
_dsplsts		equ 48D0h&lt;br /&gt;
_closeEditBuf		equ 48D3h&lt;br /&gt;
_parseEditBuf		equ 48D6h&lt;br /&gt;
_putsm			equ 48D9h&lt;br /&gt;
_DspCurTbl		equ 48DCh&lt;br /&gt;
_DSPGRTBL		equ 48DFh&lt;br /&gt;
_zeroTemplate		equ 48E2h&lt;br /&gt;
_settblrefs		equ 48E5h&lt;br /&gt;
_dispTblBot		equ 48E8h&lt;br /&gt;
_DispTblTop		equ 48EBh&lt;br /&gt;
_dispTblbody		equ 48EEh&lt;br /&gt;
_VPUTBLANK		equ 48F1h&lt;br /&gt;
_TBLTRACE		equ 48F4h&lt;br /&gt;
_dispListNameY		equ 48F7h&lt;br /&gt;
_CurNameLength		equ 48FAh&lt;br /&gt;
_NameToBuf		equ 48FDh&lt;br /&gt;
_jpromptcursor		equ 4900h&lt;br /&gt;
_BufLeft		equ 4903h&lt;br /&gt;
_BufRight		equ 4906h&lt;br /&gt;
_bufInsert		equ 4909h&lt;br /&gt;
_bufQueueChar		equ 490Ch&lt;br /&gt;
_BufReplace		equ 490Fh&lt;br /&gt;
_BufDelete		equ 4912h&lt;br /&gt;
_BUFPEEK		equ 4915h&lt;br /&gt;
_BUFPEEK1		equ 4918h&lt;br /&gt;
_BUFPEEK2		equ 491Bh&lt;br /&gt;
_BUFPEEK3		equ 491Eh&lt;br /&gt;
_BufToBtm		equ 4921h&lt;br /&gt;
_setupEditEqu		equ 4924h&lt;br /&gt;
_BufToTop		equ 4927h&lt;br /&gt;
_isEditFull		equ 492Ah&lt;br /&gt;
_IsEditEmpty		equ 492Dh&lt;br /&gt;
_IsAtTop		equ 4930h&lt;br /&gt;
_IsAtBtm		equ 4933h&lt;br /&gt;
_BufClear		equ 4936h&lt;br /&gt;
_JcursorFirst		equ 4939h&lt;br /&gt;
_JcursorLast		equ 493Ch&lt;br /&gt;
_CursorLeft		equ 493Fh&lt;br /&gt;
_cursorRight		equ 4942h&lt;br /&gt;
_cursorUp		equ 4945h&lt;br /&gt;
_CursorDown		equ 4948h&lt;br /&gt;
_cursorToOffset		equ 494Bh&lt;br /&gt;
_InsDisp		equ 494Eh&lt;br /&gt;
_FDISPBOL1		equ 4951h&lt;br /&gt;
_FDISPBOL		equ 4954h&lt;br /&gt;
_DispEOW		equ 4957h&lt;br /&gt;
_DispHead		equ 495Ah&lt;br /&gt;
_DispTail		equ 495Dh&lt;br /&gt;
_PutTokString		equ 4960h&lt;br /&gt;
_setupEditCmd		equ 4963h&lt;br /&gt;
_setEmptyEditEqu	equ 4966h&lt;br /&gt;
_SetEmptyEditPtr	equ 4969h&lt;br /&gt;
_CloseEditEqu		equ 496Ch&lt;br /&gt;
_GetPrevTok		equ 496Fh&lt;br /&gt;
_getkey			equ 4972h&lt;br /&gt;
_canIndic		equ 4975h&lt;br /&gt;
_LCD_DRIVERON		equ 4978h &lt;br /&gt;
_DFMIN2			equ 497Bh&lt;br /&gt;
_formDisp		equ 497Eh ;this is directly what the OS calls on the homescreen to display a result&lt;br /&gt;
_formMatrix		equ 4981h&lt;br /&gt;
_wscrollLeft		equ 4984h&lt;br /&gt;
_wscrollUp		equ 4987h&lt;br /&gt;
_wscrollDown		equ 498Ah&lt;br /&gt;
_wscrollRight		equ 498Dh&lt;br /&gt;
_FormEReal		equ 4990h&lt;br /&gt;
_formERealTOK		equ 4993h&lt;br /&gt;
_FormDCplx		equ 4996h&lt;br /&gt;
_FormReal		equ 4999h&lt;br /&gt;
_formScrollUp		equ 499Ch&lt;br /&gt;
_setwinabove		equ 499Fh&lt;br /&gt;
_disarmScroll		equ 49A2h&lt;br /&gt;
_OP1toEdit		equ 49A5h&lt;br /&gt;
_MinToEdit		equ 49A8h&lt;br /&gt;
_rclVarToEdit		equ 49ABh&lt;br /&gt;
_rclVarToEditPtR	equ 49AEh&lt;br /&gt;
_RCLENTRYTOEDIT		equ 49B1h&lt;br /&gt;
_rclToQueue		equ 49B4h ;recalls bytes at OP1 into edit buffer&lt;br /&gt;
_FORMTOTOK		equ 49B7h&lt;br /&gt;
_DISP_INTERVAL		equ 49BAh&lt;br /&gt;
_DisplstName		equ 49BDh&lt;br /&gt;
_dispSLstNameHL		equ 49C0h&lt;br /&gt;
_EditEqu		equ 49C3h&lt;br /&gt;
_closeEquField		equ 49C6h&lt;br /&gt;
_AutoSelect		equ 49C9h&lt;br /&gt;
_DISPYEOS		equ 49CCh&lt;br /&gt;
_dispNumEOS		equ 49CFh&lt;br /&gt;
_setupdispeq		equ 49D2h&lt;br /&gt;
_DispForward		equ 49D5h&lt;br /&gt;
_DispYPrompt2		equ 49D8h&lt;br /&gt;
_stringwidth		equ 49DBh&lt;br /&gt;
_dispErrorScreen	equ 49DEh ;displays top row of error screen (error message)&lt;br /&gt;
_POPCX			equ 49E1h ;moves 14 bytes at cxPrev to cxMain, 15th byte goes to replace appflags&lt;br /&gt;
_loadnoeentry		equ 49E4h&lt;br /&gt;
_SaveScreen		equ 49E7h&lt;br /&gt;
_RETSCREEN		equ 49EAh&lt;br /&gt;
_RetScreenErr		equ 49EDh&lt;br /&gt;
_CheckSplitFlag		equ 49F0h&lt;br /&gt;
_SolveRedisp		equ 49F3h&lt;br /&gt;
_SolveDisp		equ 49F6h&lt;br /&gt;
_itemName		equ 49F9h&lt;br /&gt;
_SetNorm_Vals		equ 49FCh&lt;br /&gt;
_SetYOffset		equ 49FFh ;sets up YOffset and next 4 bytes (possibly specialized for the table editor)&lt;br /&gt;
_ConvKeyToTok		equ 4A02h&lt;br /&gt;
_ConvFCKeyToTok		equ 4A05h&lt;br /&gt;
_ConvFEKeyToTok		equ 4A08h&lt;br /&gt;
_TokToKey		equ 4A0Bh&lt;br /&gt;
_SendSkipExitPacket	equ 4A0Eh&lt;br /&gt;
_GETVARCMD		equ 4A11h&lt;br /&gt;
_SendVarCmd		equ 4A14h&lt;br /&gt;
_SendScreenshot		equ 4A17h&lt;br /&gt;
keyscnlnk		equ 4A1Ah&lt;br /&gt;
_DeselectAllVars	equ 4A1Dh&lt;br /&gt;
_DelRes			equ 4A20h&lt;br /&gt;
_ConvLcToLr		equ 4A23h&lt;br /&gt;
_RedimMat		equ 4A26h&lt;br /&gt;
_IncLstSize		equ 4A29h&lt;br /&gt;
_InsertList		equ 4A2Ch&lt;br /&gt;
_dellistel		equ 4A2Fh&lt;br /&gt;
_EditProg		equ 4A32h&lt;br /&gt;
_CloseProg		equ 4A35h&lt;br /&gt;
_ClrGraphRef		equ 4A38h&lt;br /&gt;
_FixTempCnt		equ 4A3Bh&lt;br /&gt;
_SAVEDATA		equ 4A3Eh&lt;br /&gt;
_RESTOREDATA		equ 4A41h&lt;br /&gt;
_FindAlphaUp		equ 4A44h&lt;br /&gt;
_FindAlphaDn		equ 4A47h&lt;br /&gt;
_CmpSyms		equ 4A4Ah&lt;br /&gt;
_CREATETEMP		equ 4A4Dh&lt;br /&gt;
_CleanAll		equ 4A50h&lt;br /&gt;
_MoveToNextSym		equ 4A53h ;input: hl=pointer to type byte of VAT entry. output: hl = pointer to next entry's type byte&lt;br /&gt;
_ConvLrToLc		equ 4A56h&lt;br /&gt;
_TblScreenDn		equ 4A59h ;something is not right here&lt;br /&gt;
_TblScreenUp		equ 4A5Ch&lt;br /&gt;
_SCREENUP		equ 4A5Fh&lt;br /&gt;
_ScreenUpDown		equ 4A62h&lt;br /&gt;
_ZifRclHandler		equ 4A65h&lt;br /&gt;
_zifrclkapp		equ 4A68h&lt;br /&gt;
_rclkeyRtn		equ 4A6Bh&lt;br /&gt;
_RCLKEY			equ 4A6Bh&lt;br /&gt;
_RCLREGEQ_CALL		equ 4A6Eh&lt;br /&gt;
_RCLREGEQ		equ 4A71h&lt;br /&gt;
_initNamePrompt		equ 4A74h&lt;br /&gt;
_NamePrompt2		equ 4A77h&lt;br /&gt;
_CATALOGCHK		equ 4A7Ah&lt;br /&gt;
_clrTR			equ 4A7Dh&lt;br /&gt;
_QUAD			equ 4A80h&lt;br /&gt;
_GRAPHQUAD		equ 4A83h&lt;br /&gt;
_BC2NOREAL		equ 4A86h&lt;br /&gt;
_ErrNonReal_FPST_FPS1	equ 4A89h&lt;br /&gt;
_ErrNonReal		equ 4A8Ch ;ERR:DATA TYPE if top B numers from FPS are non-real&lt;br /&gt;
_WRITE_TEXT		equ 4A8Fh&lt;br /&gt;
_FORSEQINIT		equ 4A92h&lt;br /&gt;
_GRPHPARS		equ 4A95h&lt;br /&gt;
_PLOTPARS		equ 4A98h&lt;br /&gt;
_ParseInp		equ 4A9Bh&lt;br /&gt;
_PARSEOFF		equ 4A9Eh&lt;br /&gt;
_PARSESCAN		equ 4AA1h&lt;br /&gt;
_GETPARSE		equ 4AA4h&lt;br /&gt;
_SAVEPARSE		equ 4AA7h&lt;br /&gt;
_InitPFlgs		equ 4AAAh&lt;br /&gt;
_CKENDLINERR		equ 4AADh&lt;br /&gt;
_OP2Set60		equ 4AB0h&lt;br /&gt;
_GETSTATPTR		equ 4AB3h&lt;br /&gt;
_CMP_STATPTR		equ 4AB6h&lt;br /&gt;
_VARSYSADR		equ 4AB9h&lt;br /&gt;
_StoSysTok		equ 4ABCh&lt;br /&gt;
_StoAns			equ 4ABFh&lt;br /&gt;
_StoTheta		equ 4AC2h&lt;br /&gt;
_StoR			equ 4AC5h&lt;br /&gt;
_StoY			equ 4AC8h&lt;br /&gt;
_StoN			equ 4ACBh&lt;br /&gt;
_StoT			equ 4ACEh&lt;br /&gt;
_StoX			equ 4AD1h&lt;br /&gt;
_StoOther		equ 4AD4h&lt;br /&gt;
_RclAns			equ 4AD7h&lt;br /&gt;
_RclY			equ 4ADAh&lt;br /&gt;
_RclN			equ 4ADDh&lt;br /&gt;
_RclX			equ 4AE0h&lt;br /&gt;
_RclVarSym		equ 4AE3h&lt;br /&gt;
_RclSysTok		equ 4AE6h&lt;br /&gt;
_StMatEl		equ 4AE9h&lt;br /&gt;
_STLSTVECEL		equ 4AECh&lt;br /&gt;
_ConvOP1		equ 4AEFh&lt;br /&gt;
_Find_Parse_Formula	equ 4AF2h&lt;br /&gt;
_PARSE_FORMULA		equ 4AF5h&lt;br /&gt;
_FetchQuotedString	equ 4AF8h&lt;br /&gt;
_FetchNumLine		equ 4AFBh&lt;br /&gt;
_ParseNameTokens	equ 4AFEh&lt;br /&gt;
_ParseInpGraph		equ 4B01h ;same as _ParseInp except 3,(iy+1Fh) is graph/split screen override, or something&lt;br /&gt;
_ParseInpGraphReset	equ 4B04h ;_ParseInpGraph except zeroes out iy+6/7, resets 3,(iy+1Ah) &amp;amp; 0,(iy+1Fh), fmtFlags-&amp;gt;fmtOverride, parse within ParseInp?&lt;br /&gt;
_ParseInpLastEnt	equ 4B07h ;ParseInp on program 05h,23h,00h&lt;br /&gt;
_ErrOnCertainTypes	equ 4B0Ah ;ERR:DATA TYPE if A is one of a couple of values...subroutine in ParseInp, somehow&lt;br /&gt;
_CreatePair		equ 4B0Dh&lt;br /&gt;
_PUSHNUM		equ 4B10h&lt;br /&gt;
_INCCURPCERREND		equ 4B13h&lt;br /&gt;
_ERREND			equ 4B16h&lt;br /&gt;
_COMMAERRF		equ 4B19h&lt;br /&gt;
_COMMAERR		equ 4B1Ch&lt;br /&gt;
_STEQARG2		equ 4B1Fh&lt;br /&gt;
_STEQARG		equ 4B22h&lt;br /&gt;
_INPARG			equ 4B25h&lt;br /&gt;
_STEQARG3		equ 4B28h&lt;br /&gt;
_NXTFETCH		equ 4B2Bh&lt;br /&gt;
_CKFETCHVAR		equ 4B2Eh&lt;br /&gt;
_FETCHVARA		equ 4B31h&lt;br /&gt;
_FETCHVAR		equ 4B34h&lt;br /&gt;
_CKENDLIN		equ 4B37h ;gets parse byte in A and then _CKENDEXP&lt;br /&gt;
_CKENDEXP		equ 4B3Ah ;checks A for 3Eh or 3Fh&lt;br /&gt;
_CKPARSEND		equ 4B3Dh&lt;br /&gt;
_STOTYPEARG		equ 4B40h&lt;br /&gt;
_ConvDim		equ 4B43h&lt;br /&gt;
_ConvDim00		equ 4B46h&lt;br /&gt;
_AHEADEQUAL		equ 4B49h&lt;br /&gt;
_PARSAHEADS		equ 4B4Ch&lt;br /&gt;
_PARSAHEAD              equ 4B4Fh&lt;br /&gt;
_AnsName		equ 4B52h&lt;br /&gt;
_STOCMPREALS		equ 4B55h&lt;br /&gt;
_GETDEPTR		equ 4B58h&lt;br /&gt;
_PUSH2BOPER		equ 4B5Bh ;push the value in bc onto the operator stack&lt;br /&gt;
_POP2BOPER		equ 4B5Eh ;pop 2 bytes on the operator stack to bc&lt;br /&gt;
_PUSHOPER		equ 4B61h ;push the value in a onto the operator stack&lt;br /&gt;
_POPOPER		equ 4B64h ;pop 1 byte on the operator stack to a&lt;br /&gt;
_FIND_E_UNDEF		equ 4B67h&lt;br /&gt;
_STTMPEQ		equ 4B6Ah&lt;br /&gt;
_FINDEOL		equ 4B6Dh&lt;br /&gt;
_BRKINC			equ 4B70h&lt;br /&gt;
_INCFETCH		equ 4B73h&lt;br /&gt;
_CURFETCH		equ 4B76h&lt;br /&gt;
_Random			equ 4B79h&lt;br /&gt;
_StoRand		equ 4B7Ch&lt;br /&gt;
_RandInit		equ 4B7Fh&lt;br /&gt;
_resetStacks		equ 4B82h ;(onsp)-&amp;gt;(errsp), (fpbase)-&amp;gt;(fps), (opbase)-&amp;gt;(ops)&lt;br /&gt;
_Factorial		equ 4B85h&lt;br /&gt;
_YONOFF			equ 4B88h&lt;br /&gt;
_EQSELUNSEL		equ 4B8Bh&lt;br /&gt;
_ITSOLVER		equ 4B8Eh&lt;br /&gt;
_GRITSOLVER		equ 4B91h&lt;br /&gt;
_ITSOLVERB		equ 4B94h&lt;br /&gt;
_ITSOLVERNB		equ 4B97h&lt;br /&gt;
_ExTest_INT		equ 4B9Ah&lt;br /&gt;
_DIST_FUN		equ 4BADh&lt;br /&gt;
_LogGamma		equ 4BA0h&lt;br /&gt;
_OneVar			equ 4BA3h&lt;br /&gt;
_ONEVARS_0		equ 4BA6h&lt;br /&gt;
_ORDSTAT		equ 4BA9h&lt;br /&gt;
_INITSTATANS2		equ 4BACh&lt;br /&gt;
_ANOVA_SPEC		equ 4BAFh&lt;br /&gt;
_OutputExpr		equ 4BB2h&lt;br /&gt;
_CentCursor		equ 4BB5h&lt;br /&gt;
_TEXT			equ 4BB8h&lt;br /&gt;
_FINISHSPEC		equ 4BBBh&lt;br /&gt;
_TRCYFUNC		equ 4BBEh&lt;br /&gt;
_RCL_SEQ_X		equ 4BC1h&lt;br /&gt;
_RCLSEQ2		equ 4BC4h&lt;br /&gt;
_GRPPutAway		equ 4BC7h&lt;br /&gt;
_CKVALDELX		equ 4BCAh&lt;br /&gt;
_CKVALDELTA		equ 4BCDh&lt;br /&gt;
_GrBufClr		equ 4BD0h&lt;br /&gt;
_GRBUFCPY_V		equ 4BD3h&lt;br /&gt;
_FNDSELEQ		equ 4BD6h&lt;br /&gt;
_CLRGRAPHXY		equ 4BD9h&lt;br /&gt;
_NEDXT_Y_STYLE		equ 4BDCh&lt;br /&gt;
_PLOTPT			equ 4BDFh&lt;br /&gt;
_NEWINDEP		equ 4BE2h&lt;br /&gt;
_Axes			equ 4BE5h&lt;br /&gt;
_setPenX		equ 4BE8h&lt;br /&gt;
_setPenY		equ 4BEBh&lt;br /&gt;
_setPenT		equ 4BEEh&lt;br /&gt;
_TAN_EQU_DISP		equ 4BF1h&lt;br /&gt;
_PutAns			equ 4BF4h&lt;br /&gt;
_DispOP1A		equ 4BF7h&lt;br /&gt;
_MATHTANLN		equ 4BFAh&lt;br /&gt;
_ENDDRAW		equ 4BFDh&lt;br /&gt;
_SetTblGraphDraw	equ 4C00h&lt;br /&gt;
_StartDialog		equ 4C03h&lt;br /&gt;
_DialogInit		equ 4C06h&lt;br /&gt;
_GetDialogNumOP1	equ 4C09h&lt;br /&gt;
_SetDialogNumOP1	equ 4C0Ch&lt;br /&gt;
_GetDialogNumHL		equ 4C0Fh&lt;br /&gt;
_ErrArgumentO123	equ 4C12h ;ERR:ARGUMENT if OP2&amp;gt;OP1 or OP1&amp;gt;OP3&lt;br /&gt;
_SetDialogKeyOverride	equ 4C15h&lt;br /&gt;
_ResDialogKeyOverride	equ 4C18h&lt;br /&gt;
_ForceDialogKeypress	equ 4C1Bh&lt;br /&gt;
_DialogStartGetKey	equ 4C1Eh&lt;br /&gt;
_StartDialog_Override	equ 4C21h&lt;br /&gt;
_CallDialogCallback	equ 4C24h&lt;br /&gt;
_SetDialogCallback	equ 4C27h&lt;br /&gt;
_ResDialogCallback	equ 4C2Ah&lt;br /&gt;
_CopyDialogNum		equ 4C2Dh&lt;br /&gt;
_MemClear		equ 4C30h&lt;br /&gt;
_MemSet			equ 4C33h&lt;br /&gt;
_ReloadAppEntryVecs	equ 4C36h&lt;br /&gt;
_PointOn		equ 4C39h&lt;br /&gt;
_ExecuteNewPrgm		equ 4C3Ch&lt;br /&gt;
_StrLength		equ 4C3Fh&lt;br /&gt;
_VPutMapRec		equ 4C42h&lt;br /&gt;
_getRomPage		equ 4C45h&lt;br /&gt;
_FindAppUp		equ 4C48h&lt;br /&gt;
_FindAppDn		equ 4C4Bh&lt;br /&gt;
_FindApp		equ 4C4Eh&lt;br /&gt;
_ExecuteApp		equ 4C51h&lt;br /&gt;
_MonReset		equ 4C54h&lt;br /&gt;
_ClearParseVar		equ 4C57h&lt;br /&gt;
_SetParseVarProg	equ 4C5Ah&lt;br /&gt;
_isContextKey		equ 4C5Dh&lt;br /&gt;
_IBounds		equ 4C60h&lt;br /&gt;
_IOffset		equ 4C63h&lt;br /&gt;
_DrawCirc2		equ 4C66h&lt;br /&gt;
_CanAlphIns		equ 4C69h&lt;br /&gt;
cxRedisp		equ 4C6Ch&lt;br /&gt;
_GetBaseVer		equ 4C6Fh&lt;br /&gt;
_OPSet0DE		equ 4C72h ;loads a floating point 0 to location de &lt;br /&gt;
_AppGetCbl		equ 4C75h&lt;br /&gt;
_AppGetCalc		equ 4C78h&lt;br /&gt;
_SaveDisp		equ 4C7Bh&lt;br /&gt;
_SetIgnoreKey  		equ 4C7Eh ;set 1,(iy+28h) / ret&lt;br /&gt;
_SetSendThisKeyBack	equ 4C81h ;set 2,(iy+28h) / ld (kbdKey),a / ret&lt;br /&gt;
_DisableApd		equ 4C84h&lt;br /&gt;
_EnableApd		equ 4C87h ;set apdable,(iy+apdflags)&lt;br /&gt;
_JForceCmdNoChar2	equ 4C8Ah ;2.41 at least&lt;br /&gt;
_set2IY34		equ 4C8Dh ;set 2,(iy+34) / ret&lt;br /&gt;
_forcecmd		equ 4C90h&lt;br /&gt;
_ApdSetup		equ 4C93h&lt;br /&gt;
_Get_NumKey		equ 4C96h&lt;br /&gt;
_AppSetup		equ 4C99h ;or _AppCleanup, or something&lt;br /&gt;
_HandleLinkKeyActivity	equ 4C9Ch&lt;br /&gt;
_JForceCmdNoChar3	equ 4C9Fh ;2.41 at least&lt;br /&gt;
_ReleaseSedit		equ 4CA2h&lt;br /&gt;
_initsmalleditline	equ 4CA5h&lt;br /&gt;
_startsmalledit		equ 4CA8h&lt;br /&gt;
;4CABh&lt;br /&gt;
_SGetTokString		equ 4CAEh&lt;br /&gt;
_LoadPattern	 	equ 4CB1h&lt;br /&gt;
_SStringLength		equ 4CB4h&lt;br /&gt;
_RestorePenCol		equ 4CB7h&lt;br /&gt;
;4CBAh&lt;br /&gt;
_DoNothing		equ 4CBDh&lt;br /&gt;
_ForceSmallEditReturn	equ 4CC0h&lt;br /&gt;
;4CC3h ;saves context&lt;br /&gt;
;4CC6h&lt;br /&gt;
;4CC9h&lt;br /&gt;
;4CCCh&lt;br /&gt;
_VEraseEOL		equ 4CCFh&lt;br /&gt;
;4CD2h&lt;br /&gt;
;4CD5h&lt;br /&gt;
_GoToErr		equ 4CD8h&lt;br /&gt;
_initsmalleditBox	equ 4CDBh&lt;br /&gt;
;4CDEh&lt;br /&gt;
_EmptyHook		equ 4CE1h&lt;br /&gt;
_ForceSmallEditReturn2	equ 4CE4h&lt;br /&gt;
;4CE7h ;same as 4CC3h&lt;br /&gt;
;4CEAh&lt;br /&gt;
_ClearRow		equ 4CEDh&lt;br /&gt;
;4CF0h&lt;br /&gt;
;4CF3h&lt;br /&gt;
;4CF6h&lt;br /&gt;
;4CF9h&lt;br /&gt;
;4CFCh&lt;br /&gt;
;4CFFh&lt;br /&gt;
;4D02h&lt;br /&gt;
;4D05h&lt;br /&gt;
;4D08h&lt;br /&gt;
;4D0Bh&lt;br /&gt;
;4D0Eh&lt;br /&gt;
;4D11h&lt;br /&gt;
;4D14h&lt;br /&gt;
;4D17h&lt;br /&gt;
;4D1Ah&lt;br /&gt;
;4D1Dh&lt;br /&gt;
;4D20h&lt;br /&gt;
;4D23h&lt;br /&gt;
_AppScreenUpDown	equ 4D26h ;shifts screen up/down, A is LCD row, H is number of lines to shift, (OP1)-(OP1+3) are something&lt;br /&gt;
_AppScreenUpDown1	equ 4D29h ;shifts screen up/down, but really no clue what the inputs are (all registers and (OP1)-(OP1+3))&lt;br /&gt;
;4D2Ch&lt;br /&gt;
_initsmalleditlinevar	equ 4D2Fh&lt;br /&gt;
_initsmalleditlineop1	equ 4D32h&lt;br /&gt;
_initsmalleditboxvar	equ 4D35h&lt;br /&gt;
_initsmalleditboxop1	equ 4D38h&lt;br /&gt;
;4D3Bh&lt;br /&gt;
_RestartDialog		equ 4D3Eh&lt;br /&gt;
_ErrCustom1		equ 4D41h&lt;br /&gt;
_ErrCustom2		equ 4D44h&lt;br /&gt;
_AppStartMouse		equ 4D47h&lt;br /&gt;
_AppStartMouseNoSetup	equ 4D4Ah&lt;br /&gt;
_AppMouseGetKey		equ 4D4Dh&lt;br /&gt;
_AppDispMouse		equ 4D50h&lt;br /&gt;
_AppEraseMouse		equ 4D53h&lt;br /&gt;
_AppSetupMouseMem	equ 4D56h&lt;br /&gt;
_GetDispRowOffset	equ 4D59h ;HL=A*12 (intended for A to be row and HL becomes offset into plotSScreen)&lt;br /&gt;
_ClearRect		equ 4D5Ch&lt;br /&gt;
_InvertRect		equ 4D5Fh&lt;br /&gt;
_FillRect		equ 4D62h&lt;br /&gt;
_AppUpdateMouse		equ 4D65h&lt;br /&gt;
_AppDispPrevMouse	equ 4D68h ;might bring previous keypress's movement to current coordinates with flags to not display&lt;br /&gt;
;4D6Bh ;restores some cursor flags and stuff&lt;br /&gt;
_initcellbox		equ 4D6Eh&lt;br /&gt;
_drawcell		equ 4D71h&lt;br /&gt;
;4D74h&lt;br /&gt;
_invertcell		equ 4D77h&lt;br /&gt;
_setcelloverride	equ 4D7Ah&lt;br /&gt;
_DrawRectBorder		equ 4D7Dh&lt;br /&gt;
_ClearCell		equ 4D80h&lt;br /&gt;
_covercell		equ 4D83h&lt;br /&gt;
_EraseRectBorder	equ 4D86h&lt;br /&gt;
_FillRectPattern	equ 4D89h&lt;br /&gt;
_DrawRectBorderClear	equ 4D8Ch&lt;br /&gt;
;4D8Fh ;mouse subroutine&lt;br /&gt;
;4D92h&lt;br /&gt;
_VerticalLine		equ 4D95h&lt;br /&gt;
_IBoundsFull		equ 4D98h&lt;br /&gt;
_DisplayImage		equ 4D9Bh&lt;br /&gt;
;4D9Eh ;does something dumb with ports 10h/11h&lt;br /&gt;
;4DA1h ;mouse subroutine&lt;br /&gt;
_AppUpdateMouseCoords	equ 4DA4h&lt;br /&gt;
_ShiftBitsLeft		equ 4DA7h ;mouse subroutine, shifts B bits left from DE sprite to HL one&lt;br /&gt;
;4DAAh ;mouse subroutine&lt;br /&gt;
;4DADh ;mouse subroutine&lt;br /&gt;
;4DB0h ;mouse subroutine&lt;br /&gt;
;4DB3h ;mouse subroutine&lt;br /&gt;
;4DB6h ;mouse subroutine&lt;br /&gt;
;4DB9h ;mouse subroutine&lt;br /&gt;
;4DBCh ;mouse subroutine&lt;br /&gt;
_AppUpdateMouseRow	equ 4DBFh&lt;br /&gt;
_AppDrawMouse		equ 4DC2h ;set 2,(iy+2Ch) for AppEraseMouse, reset for AppDispMouse&lt;br /&gt;
_AppDrawMouseDirect	equ 4DC5h ;pretty much _AppDrawMouse, but you pass LCD column in A&lt;br /&gt;
_CPoint			equ 4DC8h&lt;br /&gt;
_DeleteApp		equ 4DCBh&lt;br /&gt;
_AppUpdateMouseXY	equ 4DCEh&lt;br /&gt;
_setmodecellflag	equ 4DD1h&lt;br /&gt;
_resetmodecellflag	equ 4DD4h&lt;br /&gt;
_ismodecellset		equ 4DD7h&lt;br /&gt;
_getmodecellflag	equ 4DDAh&lt;br /&gt;
;4DDDh&lt;br /&gt;
_CellBoxManager		equ 4DE0h&lt;br /&gt;
_startnewcell		equ 4DE3h&lt;br /&gt;
;4DE6h&lt;br /&gt;
_CellCursorHandle	equ 4DE9h&lt;br /&gt;
;4DECh&lt;br /&gt;
;4DEFh&lt;br /&gt;
_ClearCurCell		equ 4DF2h&lt;br /&gt;
_drawcurcell		equ 4DF5h&lt;br /&gt;
_invertcurcell		equ 4DF8h&lt;br /&gt;
_covercurcell		equ 4DFBh&lt;br /&gt;
_BlinkCell		equ 4DFEh&lt;br /&gt;
_BlinkCellNoLookUp	equ 4E01h&lt;br /&gt;
_BlinkCurCell		equ 4E04h&lt;br /&gt;
_BlinkCellToOn		equ 4E07h&lt;br /&gt;
_BlinkCellToOnNoLookUp	equ 4E0Ah&lt;br /&gt;
_BlinkCurCellToOn	equ 4E0Dh&lt;br /&gt;
_BlinkCellToOff		equ 4E10h&lt;br /&gt;
_BlinkCellToOffNoLookUp equ 4E13h&lt;br /&gt;
_BlinkCurCellToOff	equ 4E16h&lt;br /&gt;
_getcurmodecellflag	equ 4E19h&lt;br /&gt;
;4E1Ch&lt;br /&gt;
_startsmalleditreturn	equ 4E1Fh&lt;br /&gt;
;4E22h&lt;br /&gt;
;4E25h&lt;br /&gt;
_CellkHandle		equ 4E28h&lt;br /&gt;
_errchkalphabox		equ 4E2Bh&lt;br /&gt;
;4E2Eh&lt;br /&gt;
;4E31h&lt;br /&gt;
;4E34h&lt;br /&gt;
;4E37h&lt;br /&gt;
_eraseallcells		equ 4E3Ah&lt;br /&gt;
_iscurmodecellset	equ 4E3Dh&lt;br /&gt;
;4E40h&lt;br /&gt;
_initalphabox		equ 4E43h&lt;br /&gt;
;4E46h&lt;br /&gt;
;4E49h&lt;br /&gt;
_drawblnkcell		equ 4E4Ch&lt;br /&gt;
_ClearBlnkCell		equ 4E4Fh&lt;br /&gt;
_invertblnkcell		equ 4E52h&lt;br /&gt;
_AppMouseForceKey	equ 4E55h&lt;br /&gt;
_AppSetupMouseMemCoords	equ 4E58h ;this is _AppSetupMouseMem except you pass starting coordinates in HL&lt;br /&gt;
_AppMoveMouse		equ 4E5Bh ;this is _AppMouseForceKey and then updating coordinates&lt;br /&gt;
_GetStringInput		equ 4E5Eh&lt;br /&gt;
_GetStringInput2	equ 4E61h&lt;br /&gt;
_WaitEnterKeyValue	equ 4E64h&lt;br /&gt;
_HorizontalLine		equ 4E67h&lt;br /&gt;
_CreateAppVar		equ 4E6Ah&lt;br /&gt;
_CreateProtProg		equ 4E6Dh&lt;br /&gt;
_CreateVar		equ 4E70h&lt;br /&gt;
_AsmComp		equ 4E73h&lt;br /&gt;
_GetAsmSize		equ 4E76h&lt;br /&gt;
_SquishPrgm		equ 4E79h&lt;br /&gt;
_ExecutePrgm		equ 4E7Ch&lt;br /&gt;
_ChkFindSymAsm		equ 4E7Fh&lt;br /&gt;
_ParsePrgmName		equ 4E82h&lt;br /&gt;
_CSub			equ 4E85h&lt;br /&gt;
_CAdd			equ 4E88h&lt;br /&gt;
_CSqaure		equ 4E8Bh&lt;br /&gt;
_CMult			equ 4E8Eh&lt;br /&gt;
_CRecip			equ 4E91h&lt;br /&gt;
_CDiv			equ 4E94h&lt;br /&gt;
_CAbs			equ 4E97h&lt;br /&gt;
_AddSquares		equ 4E9Ah&lt;br /&gt;
_CSqRoot		equ 4E9Dh&lt;br /&gt;
_CLN			equ 4EA0h&lt;br /&gt;
_CLog			equ 4EA3h&lt;br /&gt;
_CTenX			equ 4EA6h&lt;br /&gt;
_CEtoX			equ 4EA9h&lt;br /&gt;
_CXrootY		equ 4EACh&lt;br /&gt;
;4EAFh&lt;br /&gt;
_CYtoX			equ 4EB2h&lt;br /&gt;
_InvertNonReal		equ 4EB5h&lt;br /&gt;
_CplxMult		equ 4EB8h&lt;br /&gt;
_CplxDiv		equ 4EBBh&lt;br /&gt;
_CplxTrunc		equ 4EBEh&lt;br /&gt;
_CplxFrac		equ 4EC1h&lt;br /&gt;
_CplxFloor		equ 4EC4h&lt;br /&gt;
_SendHeaderPacket	equ 4EC7h&lt;br /&gt;
_CancelTransmission	equ 4ECAh&lt;br /&gt;
_SendScreenContents	equ 4ECDh&lt;br /&gt;
_SendRAMVarData		equ 4ED0h&lt;br /&gt;
_SendRAMCmd		equ 4ED3h&lt;br /&gt;
_SendPacket		equ 4ED6h&lt;br /&gt;
_ReceiveAck		equ 4ED9h&lt;br /&gt;
_Send4BytePacket	equ 4EDCh&lt;br /&gt;
_SendDataByte		equ 4EDFh&lt;br /&gt;
_Send4Bytes		equ 4EE2h&lt;br /&gt;
_SendAByte		equ 4EE5h&lt;br /&gt;
_SendCByte		equ 4EE8h&lt;br /&gt;
_GetSmallPacket		equ 4EEBh&lt;br /&gt;
_GetDataPacket		equ 4EEEh&lt;br /&gt;
_SendAck		equ 4EF1h&lt;br /&gt;
_Get4Bytes		equ 4EF4h&lt;br /&gt;
_Get3Bytes		equ 4EF7h&lt;br /&gt;
_Rec1stByte		equ 4EFAh&lt;br /&gt;
_Rec1stByteNC		equ 4EFDh&lt;br /&gt;
_ContinueGetByte	equ 4F00h&lt;br /&gt;
_RecAByteIO		equ 4F03h&lt;br /&gt;
_ReceiveVar		equ 4F06h&lt;br /&gt;
_ReceiveVarDataExists	equ 4F09h&lt;br /&gt;
_ReceiveVarData		equ 4F0Ch&lt;br /&gt;
_SrchVLstUp		equ 4F0Fh&lt;br /&gt;
_SrchVLstDn		equ 4F12h&lt;br /&gt;
_SendVariable		equ 4F15h&lt;br /&gt;
_Get4BytesCursor	equ 4F18h&lt;br /&gt;
_Get4BytesNC		equ 4F1Bh&lt;br /&gt;
_Convert85List		equ 4F1Eh&lt;br /&gt;
_SendDirectoryContents	equ 4F21h&lt;br /&gt;
_SendReadyPacket	equ 4F24h&lt;br /&gt;
_Convert85Real		equ 4F27h&lt;br /&gt;
_ret_6			equ 4F2Ah&lt;br /&gt;
_SendCertificate	equ 4F2Dh ;sends certificate in header/data packets, Flash must be unlocked, used with sending an application in LINK menu&lt;br /&gt;
_SendApplication	equ 4F30h&lt;br /&gt;
_SendOSHeader		equ 4F33h&lt;br /&gt;
_SendOSPage		equ 4F36h&lt;br /&gt;
_SendOS			equ 4F39h&lt;br /&gt;
_FlashWriteDisable	equ 4F3Ch&lt;br /&gt;
_SendCmd		equ 4F3Fh&lt;br /&gt;
_SendOSValidationData	equ 4F42h&lt;br /&gt;
_Disp			equ 4F45h&lt;br /&gt;
_SendGetkeyPress	equ 4F48h&lt;br /&gt;
_RejectCommand		equ 4F4Bh&lt;br /&gt;
_CheckLinkLines		equ 4F4Eh&lt;br /&gt;
_GetHookByte		equ 4F51h&lt;br /&gt;
_GetBytePaged		equ 4F54h&lt;br /&gt;
_cursorhook		equ 4F57h&lt;br /&gt;
_call_library_hook	equ 4F5Ah&lt;br /&gt;
_call_rawkey_hook	equ 4F5Dh&lt;br /&gt;
_setCursorHook		equ 4F60h ;enable cursor hook&lt;br /&gt;
_EnableLibraryHook	equ 4F63h&lt;br /&gt;
_SetGetKeyHook		equ 4F66h&lt;br /&gt;
_ClrCursorHook		equ 4F69h&lt;br /&gt;
_DisableLibraryHook	equ 4F6Ch&lt;br /&gt;
_ClrRawKeyHook  	equ 4F6Fh&lt;br /&gt;
_ResetHookBytes		equ 4F72h&lt;br /&gt;
_AdjustAllHooks		equ 4F75h&lt;br /&gt;
_getkeyhook		equ 4F78h&lt;br /&gt;
_SetGetcscHook		equ 4F7Bh&lt;br /&gt;
_ClrGetKeyHook		equ 4F7Eh&lt;br /&gt;
_call_linkactivity_hook	equ 4F81h&lt;br /&gt;
_EnableLinkActivityHook	equ 4F84h&lt;br /&gt;
_DisableLinkHook	equ 4F87h&lt;br /&gt;
_GetSmallPacket2	equ 4F8Ah&lt;br /&gt;
_EnableCatalog2Hook	equ 4F8Dh&lt;br /&gt;
_DisableCatalog2Hook	equ 4F90h&lt;br /&gt;
_EnableLocalizeHook	equ 4F93h&lt;br /&gt;
_DisableLocalizeHook	equ 4F96h&lt;br /&gt;
_SetTokenHook		equ 4F99h&lt;br /&gt;
_ClearTokenHook		equ 4F9Ch&lt;br /&gt;
;4F9Fh ld hl,92c6 / ld a,(92c5) / res 2,a / cp (hl) / ret&lt;br /&gt;
;4FA2h hl=11*(92fc)+92c9 / ld a,(hl) / and Fh / cp 2 / ret ; I can almost guarantee this is stat plot related&lt;br /&gt;
_DispListElementOffLA	equ 4FA5h&lt;br /&gt;
_Bit_VertSplit		equ 4FA8h&lt;br /&gt;
_SetHomescreenHook	equ 4FABh&lt;br /&gt;
_ClrHomeScreenHook	equ 4FAEh&lt;br /&gt;
_SetWindowHook		equ 4FB1h&lt;br /&gt;
_DisableWindowHook	equ 4FB4h&lt;br /&gt;
_SetGraphModeHook	equ 4FB7h&lt;br /&gt;
_DisableGraphHook	equ 4FBAh&lt;br /&gt;
_ParseAndStoreSysVar	equ 4FBDh&lt;br /&gt;
_DisplayEditSysVar	equ 4FC0h&lt;br /&gt;
_JForceWindowSettings	equ 4FC3h&lt;br /&gt;
_DelVarArc		equ 4FC6h&lt;br /&gt;
_DelVarNoArc		equ 4FC9h&lt;br /&gt;
_SetAllPlots		equ 4FCCh&lt;br /&gt;
_SetYeditHook     	equ 4FCFh&lt;br /&gt;
_DisableYEquHook	equ 4FD2h&lt;br /&gt;
_JForceYEqu		equ 4FD5h&lt;br /&gt;
_Arc_Unarc		equ 4FD8h ;checks for low battery&lt;br /&gt;
_ArchiveVar		equ 4FDBh ;set 0,(iy+24h) to check for low battery first&lt;br /&gt;
_UnarchiveVar		equ 4FDEh&lt;br /&gt;
_DialogKeyHook		equ 4FE1h ;rawkey hook used by OS for dialog context&lt;br /&gt;
_SetFontHook		equ 4FE4h&lt;br /&gt;
_ClrFontHook		equ 4FE7h&lt;br /&gt;
_SetRegraphHook		equ 4FEAh&lt;br /&gt;
_DisableRegraphHook	equ 4FEDh&lt;br /&gt;
_RunGraphingHook	equ 4FF0h&lt;br /&gt;
_SetTraceHook		equ 4FF3h&lt;br /&gt;
_DisableTraceHook	equ 4FF6h&lt;br /&gt;
_RunTraceHook		equ 4FF9h&lt;br /&gt;
_NDeriv			equ 4FFCh&lt;br /&gt;
_PolarDerivative	equ 4FFFh&lt;br /&gt;
_JForceGraphNoKey	equ 5002h&lt;br /&gt;
_JForceGraphKey		equ 5005h&lt;br /&gt;
_PowerOff		equ 5008h&lt;br /&gt;
_GetKeyRetOff		equ 500Bh ;same as getkey, only returns kOff if 2nd+on is pressed &lt;br /&gt;
_FindGroupSym		equ 500Eh&lt;br /&gt;
_FillBasePageTable	equ 5011h&lt;br /&gt;
_ArcChk			equ 5014h&lt;br /&gt;
_FlashToRam		equ 5017h&lt;br /&gt;
_LoadDEIndPaged		equ 501Ah&lt;br /&gt;
_LoadCIndPaged		equ 501Dh&lt;br /&gt;
_SetupPagedPtr		equ 5020h&lt;br /&gt;
_PagedGet		equ 5023h&lt;br /&gt;
_SetParserHook		equ 5026h&lt;br /&gt;
_ClearParserHook	equ 5029h&lt;br /&gt;
_SetAppChangeHook 	equ 502Ch&lt;br /&gt;
_ClearAppChangeHook	equ 502Fh&lt;br /&gt;
_EnableGraphicsHook	equ 5032h&lt;br /&gt;
_DisableGraphicsHook	equ 5035h&lt;br /&gt;
_IPointNoGraphicsHook	equ 5038h&lt;br /&gt;
_ILineNoHook		equ 503Bh&lt;br /&gt;
;503Eh&lt;br /&gt;
_DeleteTempPrograms	equ 5041h&lt;br /&gt;
_EnableCatalog1Hook	equ 5044h&lt;br /&gt;
_DisableCatalog1Hook	equ 5047h&lt;br /&gt;
_EnableHelpHook		equ 504Ah&lt;br /&gt;
_DisableHelpHook	equ 504Dh&lt;br /&gt;
_DispCatalogEnd		equ 5050h&lt;br /&gt;
_GetMenuKeypress	equ 5053h&lt;br /&gt;
_GetCatalogItem		equ 5056h&lt;br /&gt;
_RunCatalog2Hook	equ 5059h&lt;br /&gt;
_RunCatalog1Hook	equ 505Ch&lt;br /&gt;
;505Fh&lt;br /&gt;
;5062h&lt;br /&gt;
_dispMenuTitle		equ 5065h&lt;br /&gt;
;5068h&lt;br /&gt;
_EnablecxRedispHook	equ 506Bh&lt;br /&gt;
_DisablecxRedispHook	equ 506Eh&lt;br /&gt;
_BufCpy			equ 5071h&lt;br /&gt;
_BufClr			equ 5074h&lt;br /&gt;
_UnOPExec2		equ 5077h&lt;br /&gt;
_BinOPExec2		equ 507Ah&lt;br /&gt;
_LoadMenuB		equ 507Dh ;clears screen and loads menu from B, plus a couple flag changes&lt;br /&gt;
_DisplayVarInfo		equ 5080h&lt;br /&gt;
_SetMenuHook		equ 5083h&lt;br /&gt;
_ClearMenuHook		equ 5086h&lt;br /&gt;
_getBCOffsetIX		equ 5089h&lt;br /&gt;
_GetBCOffsetIX2		equ 508Ch&lt;br /&gt;
_ForceFullScreen	equ 508Fh&lt;br /&gt;
_GetVariableData	equ 5092h&lt;br /&gt;
_FindSwapSector		equ 5095h&lt;br /&gt;
_CopyFlashPage		equ 5098h&lt;br /&gt;
_FindAppNumPages	equ 509Bh&lt;br /&gt;
_HLMinus5		equ 509Eh&lt;br /&gt;
_SendArcPacket		equ 50A1h&lt;br /&gt;
_ForceGraphKeypress	equ 50A4h&lt;br /&gt;
_DoNothing3		equ 50A7h&lt;br /&gt;
_FormBase		equ 50AAh&lt;br /&gt;
;50ADh&lt;br /&gt;
_IsFragmented		equ 50B0h&lt;br /&gt;
_Chk_Batt_Low		equ 50B3h&lt;br /&gt;
_Chk_Batt_Low_2		equ 50B6h&lt;br /&gt;
_Arc_Unarc2		equ 50B9h ;identical to _Arc_Unarc, except you can choose to res 0,(iy+24h) to skip low battery check&lt;br /&gt;
_GetAppBasePage		equ 50BCh ;input: a=one of an app's pages. output: a=app's first page&lt;br /&gt;
_SetExSpeed		equ 50BFh&lt;br /&gt;
_RclExit		equ 50C2h&lt;br /&gt;
_GroupAllVars		equ 50C5h&lt;br /&gt;
_UngroupVar		equ 50C8h&lt;br /&gt;
_WriteToFlash		equ 50CBh ;ReceiveApplication or something like that on OSes below 2.40&lt;br /&gt;
_SetSilentLinkHook	equ 50CEh&lt;br /&gt;
_DisableSilentLinkHook	equ 50D1h&lt;br /&gt;
_TwoVarSet		equ 50D4h&lt;br /&gt;
_ExecClassCToken	equ 50D7h&lt;br /&gt;
_ExecClass3Token	equ 50DAh&lt;br /&gt;
_GetSysInfo		equ 50DDh&lt;br /&gt;
_NZIf83Plus		equ 50E0h&lt;br /&gt;
_LinkStatus		equ 50E3h&lt;br /&gt;
_DoNothing2		equ 50E6h ;originally for TI-Navigator&lt;br /&gt;
_KeyboardGetKey		equ 50E9h&lt;br /&gt;
_RunAppLib		equ 50ECh&lt;br /&gt;
_FindSpecialAppHeader	equ 50EFh&lt;br /&gt;
_SendUSBData		equ 50F2h&lt;br /&gt;
_AppGetCBLUSB		equ 50F5h&lt;br /&gt;
_AppGetCalcUSB		equ 50F8h&lt;br /&gt;
_GetVarCmdUSB		equ 50FBh&lt;br /&gt;
;50FEh&lt;br /&gt;
_TenX2			equ 5101h&lt;br /&gt;
;5104h&lt;br /&gt;
;5107h&lt;br /&gt;
_GetVarVersion		equ 510Ah&lt;br /&gt;
;510Dh&lt;br /&gt;
;5110h&lt;br /&gt;
_DeleteTempEditEqu	equ 5113h&lt;br /&gt;
_JcursorFirst2		equ 5116h&lt;br /&gt;
;5119h&lt;br /&gt;
_PromptMoveBackLeft	equ 511Ch&lt;br /&gt;
_wputsEOL2		equ 511Fh ;same except res 0,(iy+0Eh) first&lt;br /&gt;
_InvertTextInsMode	equ 5122h&lt;br /&gt;
;5125h&lt;br /&gt;
_ResetDefaults		equ 5128h&lt;br /&gt;
_ZeroFinanceVars	equ 512Bh&lt;br /&gt;
_DispHeader		equ 512Eh&lt;br /&gt;
_JForceGroup		equ 5131h&lt;br /&gt;
;5134h&lt;br /&gt;
;5137h&lt;br /&gt;
_DispCoords		equ 513Ah&lt;br /&gt;
;513Dh&lt;br /&gt;
;5140h&lt;br /&gt;
_chkTmr			equ 5143h&lt;br /&gt;
;5146h&lt;br /&gt;
;5149h&lt;br /&gt;
;514Ch&lt;br /&gt;
_getDate		equ 514Fh&lt;br /&gt;
_GetDateString		equ 5152h&lt;br /&gt;
_getDtFmt		equ 5155h&lt;br /&gt;
_getDtStr		equ 5158h&lt;br /&gt;
_getTime		equ 515Bh&lt;br /&gt;
_GetTimeString		equ 515Eh&lt;br /&gt;
_getTmFmt		equ 5161h&lt;br /&gt;
_getTmStr		equ 5164h&lt;br /&gt;
_SetZeroOne		equ 5167h&lt;br /&gt;
_setDate		equ 516Ah&lt;br /&gt;
_IsOneTwoThree		equ 516Dh&lt;br /&gt;
_setTime		equ 5170h&lt;br /&gt;
_IsOP112or24		equ 5173h&lt;br /&gt;
_chkTimer0		equ 5176h&lt;br /&gt;
_timeCnv		equ 5179h&lt;br /&gt;
_GetLToOP1Extra		equ 517Ch&lt;br /&gt;
_ClrWindowAndFlags	equ 517Fh&lt;br /&gt;
_SetMachineID		equ 5182h&lt;br /&gt;
_ResetLists		equ 5185h&lt;br /&gt;
_DispValue		equ 5188h&lt;br /&gt;
;518Bh&lt;br /&gt;
;518Eh&lt;br /&gt;
_ExecLib		equ 5191h&lt;br /&gt;
;5194h&lt;br /&gt;
_CPOP1OP2Rounded	equ 5197h&lt;br /&gt;
_CPOP1OP2Rounded2	equ 519Ah&lt;br /&gt;
_OpenLib		equ 519Dh&lt;br /&gt;
;51A0h&lt;br /&gt;
;51A3h&lt;br /&gt;
_ResetIOPrompt		equ 51A6h&lt;br /&gt;
_StrCpyVarData		equ 51A9h&lt;br /&gt;
_SetUpEditor		equ 51ACh&lt;br /&gt;
_SortA			equ 51AFh&lt;br /&gt;
_SortD			equ 51B2h&lt;br /&gt;
;51B5h&lt;br /&gt;
_IsOP1ResID		equ 51B8h&lt;br /&gt;
_ListEdNameCxMain	equ 51BBh&lt;br /&gt;
_ListEdEnterNewName	equ 51BEh&lt;br /&gt;
;51C1h&lt;br /&gt;
_ForceModeKeypress	equ 51C4h ;forces a keypress (and calls help hook) on any of several mode-setting contexts&lt;br /&gt;
_DispAboutScreen	equ 51C7h&lt;br /&gt;
_ChkHelpHookVer		equ 51CAh&lt;br /&gt;
_Disp32			equ 51CDh&lt;br /&gt;
;51D0h&lt;br /&gt;
;51D3h&lt;br /&gt;
;51D6h&lt;br /&gt;
;51D9h&lt;br /&gt;
_DrawTableEditor	equ 51DCh ;draws table editor lines&lt;br /&gt;
_DisplayListNameEquals	equ 51DFh&lt;br /&gt;
_DisplayListHeader	equ 51E2h&lt;br /&gt;
_DispMatrixDimensions	equ 51E5h&lt;br /&gt;
_HighlightListEdItem	equ 51E8h&lt;br /&gt;
;51EBh&lt;br /&gt;
;51EEh&lt;br /&gt;
_MatrixName		equ 51F1h&lt;br /&gt;
;51F4h&lt;br /&gt;
;51F7h&lt;br /&gt;
;51FAh&lt;br /&gt;
;51FDh&lt;br /&gt;
;5200h&lt;br /&gt;
;5203h&lt;br /&gt;
;5206h&lt;br /&gt;
;5209h&lt;br /&gt;
;520Ch&lt;br /&gt;
;520Fh&lt;br /&gt;
_SetupEmptyEditTempEqu	equ 5212h&lt;br /&gt;
_ExecClass1Token	equ 5215h&lt;br /&gt;
_HandleMathTokenParse	equ 5218h&lt;br /&gt;
_MaybePushMultiplyOp	equ 521Bh&lt;br /&gt;
_RestartParseOP1Result	equ 521Eh&lt;br /&gt;
_Chk_Batt_Level		equ 5221h&lt;br /&gt;
;5224h&lt;br /&gt;
;5227h&lt;br /&gt;
;522Ah&lt;br /&gt;
_DisplayListEquals	equ 522Dh&lt;br /&gt;
_GetCurPlotListOffset	equ 5230h&lt;br /&gt;
_GoToLastRow		equ 5233h&lt;br /&gt;
_RectBorder		equ 5236h&lt;br /&gt;
;5239h&lt;br /&gt;
;523Ch&lt;br /&gt;
;523Fh&lt;br /&gt;
_LoadA5			equ 5242h&lt;br /&gt;
;5245h&lt;br /&gt;
_NamedListToOP1		equ 5248h&lt;br /&gt;
;524Bh&lt;br /&gt;
;524Eh&lt;br /&gt;
;5251h&lt;br /&gt;
_InitUSBDeviceCallback	equ 5254h&lt;br /&gt;
_KillUSBDevice		equ 5257h ;this actually recycles the USB connection and re-inits it (I think)&lt;br /&gt;
_SetUSBConfiguration	equ 525Ah&lt;br /&gt;
_RequestUSBData		equ 525Dh&lt;br /&gt;
_StopReceivingUSBData	equ 5260h&lt;br /&gt;
_FindAppHeaderByPage	equ 5263h&lt;br /&gt;
_FindNextHeaderByPage	equ 5266h&lt;br /&gt;
_IsMatchingLaunchApp	equ 5269h&lt;br /&gt;
_InitTimer		equ 526Ch&lt;br /&gt;
_KillTimer		equ 526Fh&lt;br /&gt;
_StartTimer		equ 5272h&lt;br /&gt;
_RestartTimer		equ 5275h&lt;br /&gt;
_StopTimer		equ 5278h&lt;br /&gt;
_WaitTimer		equ 527Bh&lt;br /&gt;
_CheckTimer		equ 527Eh&lt;br /&gt;
_CheckTimerRestart	equ 5281h&lt;br /&gt;
_SetVertGraphActive	equ 5284h&lt;br /&gt;
_ClearVertGraphActive	equ 5287h&lt;br /&gt;
_EnableUSBHook		equ 528Ah&lt;br /&gt;
_DisableUSBHook		equ 528Dh&lt;br /&gt;
_InitUSBDevice		equ 5290h&lt;br /&gt;
_KillUSBPeripheral	equ 5293h&lt;br /&gt;
_GetCurPlotListOffset2	equ 5296h&lt;br /&gt;
;5299h&lt;br /&gt;
_GraphLine		equ 529Ch&lt;br /&gt;
;529Fh&lt;br /&gt;
;52A2h&lt;br /&gt;
;52A5h&lt;br /&gt;
;52A8h&lt;br /&gt;
;52ABh&lt;br /&gt;
;52AEh&lt;br /&gt;
_ZifTableEditor		equ 52B1h&lt;br /&gt;
;52B4h&lt;br /&gt;
_GetCurPlotOffset	equ 52B7h&lt;br /&gt;
;52BAh&lt;br /&gt;
_FindAppName		equ 52BDh&lt;br /&gt;
;52C0h&lt;br /&gt;
;52C3h&lt;br /&gt;
_UpdateStatPlotLists	equ 52C6h&lt;br /&gt;
_GrBufCpyCustom		equ 52C9h&lt;br /&gt;
;52CCh&lt;br /&gt;
;52CFh&lt;br /&gt;
;52D2h&lt;br /&gt;
_VDispRealOP1		equ 52D5h&lt;br /&gt;
_DispXEqualsNum		equ 52D8h&lt;br /&gt;
_ResetGraphSettings	equ 52DBh&lt;br /&gt;
_InitializeVariables	equ 52DEh&lt;br /&gt;
;52E1h ;bit 4,(9C75h) (this is DEFINITELY returning the status of something when acting as a TI-SmartView Input Pad...this bit is bit 1 of the data byte from a PC HID Set Report request)&lt;br /&gt;
_DelVarSym		equ 52E4h&lt;br /&gt;
_FindAppUpNoCase	equ 52E7h&lt;br /&gt;
_FindAppDnNoCase	equ 52EAh&lt;br /&gt;
_DeleteInvalidApps	equ 52EDh&lt;br /&gt;
_DeleteApp_Link		equ 52F0h&lt;br /&gt;
_CmpSymsNoCase		equ 52F3h&lt;br /&gt;
_SetAppRestrictions	equ 52F6h&lt;br /&gt;
_RemoveAppRestrictions	equ 52F9h&lt;br /&gt;
_QueryAppRestrictions	equ 52FCh&lt;br /&gt;
_DispAppRestrictions	equ 52FFh&lt;br /&gt;
_SetupHome		equ 5302h&lt;br /&gt;
_GRPUTAWAYFull		equ 5305h ;same as _GRPUTAWAY except it assumes no split screen&lt;br /&gt;
_SendSmartPadKeypress	equ 5308h ;B and A are the inputs&lt;br /&gt;
_ToggleUSBSmartPadInput	equ 530Bh ;A is input, 0 or 1 to enable/disable&lt;br /&gt;
_IsUSBDeviceConnected	equ 530Eh ;bit 4,(81h) \ ret, this is just a guess on its purpose but it seems to work&lt;br /&gt;
_RecycleUSB		equ 5311h ;identical to 5257h&lt;br /&gt;
_PolarEquToOP1		equ 5314h&lt;br /&gt;
_ParamXEquToOP1		equ 5317h&lt;br /&gt;
_ParamYEquToOP1		equ 531Ah&lt;br /&gt;
_GetRestrictionsOptions	equ 531Dh&lt;br /&gt;
_DispResetComplete	equ 5320h&lt;br /&gt;
_PTTReset		equ 5323h&lt;br /&gt;
_FindAppCustom		equ 5326h&lt;br /&gt;
_ClearGraphStyles	equ 5329h&lt;br /&gt;
;532Ch&lt;br /&gt;
;532Fh&lt;br /&gt;
;5332h&lt;br /&gt;
;5335h&lt;br /&gt;
;5338h&lt;br /&gt;
;533Bh&lt;br /&gt;
;533Eh&lt;br /&gt;
;5341h&lt;br /&gt;
;5344h&lt;br /&gt;
;5347h&lt;br /&gt;
;534Ah&lt;br /&gt;
;534Dh&lt;br /&gt;
;5350h&lt;br /&gt;
;5353h&lt;br /&gt;
;5356h&lt;br /&gt;
;5359h&lt;br /&gt;
;535Ch&lt;br /&gt;
;535Fh&lt;br /&gt;
;5362h&lt;br /&gt;
;5365h&lt;br /&gt;
;5368h&lt;br /&gt;
;536Bh&lt;br /&gt;
;536Eh&lt;br /&gt;
;5371h&lt;br /&gt;
;5374h&lt;br /&gt;
;5377h&lt;br /&gt;
;537Ah&lt;br /&gt;
;537Dh&lt;br /&gt;
;5380h&lt;br /&gt;
;5383h&lt;br /&gt;
;5386h&lt;br /&gt;
;5389h&lt;br /&gt;
;538Ch&lt;br /&gt;
;538Fh&lt;br /&gt;
;5392h&lt;br /&gt;
;5395h&lt;br /&gt;
;5398h&lt;br /&gt;
;539Bh&lt;br /&gt;
;539Eh&lt;br /&gt;
;53A1h&lt;br /&gt;
;53A4h&lt;br /&gt;
;53A7h&lt;br /&gt;
;53AAh&lt;br /&gt;
;53ADh&lt;br /&gt;
;53B0h&lt;br /&gt;
;53B3h&lt;br /&gt;
;53B6h&lt;br /&gt;
;53B9h&lt;br /&gt;
;53BCh&lt;br /&gt;
;53BFh&lt;br /&gt;
;53C2h&lt;br /&gt;
;53C5h&lt;br /&gt;
;53C8h&lt;br /&gt;
;53CBh&lt;br /&gt;
;53CEh&lt;br /&gt;
;53D1h&lt;br /&gt;
;53D4h&lt;br /&gt;
;53D7h&lt;br /&gt;
;53DAh&lt;br /&gt;
;53DDh&lt;br /&gt;
;53E0h&lt;br /&gt;
;53E3h&lt;br /&gt;
;53E6h&lt;br /&gt;
;53E9h&lt;br /&gt;
;53ECh&lt;br /&gt;
;53EFh&lt;br /&gt;
;53F2h&lt;br /&gt;
;53F5h&lt;br /&gt;
;53F8h&lt;br /&gt;
;53FBh&lt;br /&gt;
;53FEh&lt;br /&gt;
;5401h&lt;br /&gt;
;5404h&lt;br /&gt;
;5407h&lt;br /&gt;
;540Ah&lt;br /&gt;
;540Dh&lt;br /&gt;
;5410h&lt;br /&gt;
;5413h&lt;br /&gt;
;5416h&lt;br /&gt;
;5419h&lt;br /&gt;
;541Ch&lt;br /&gt;
;541Fh&lt;br /&gt;
;5422h&lt;br /&gt;
;5425h&lt;br /&gt;
;5428h&lt;br /&gt;
;542Bh&lt;br /&gt;
;542Eh&lt;br /&gt;
;5431h&lt;br /&gt;
;5434h&lt;br /&gt;
;5437h&lt;br /&gt;
;543Ah&lt;br /&gt;
;543Dh&lt;br /&gt;
;5440h&lt;br /&gt;
;5443h&lt;br /&gt;
;5446h&lt;br /&gt;
;5449h&lt;br /&gt;
_xorAret			equ 5443h&lt;br /&gt;
_scfRet				equ 5446h&lt;br /&gt;
_ret				equ 5449h&lt;br /&gt;
&lt;br /&gt;
;Page 1Fh ROM Calls&lt;br /&gt;
;--------------------------------&lt;br /&gt;
bootbtf				equ 8000h&lt;br /&gt;
;400Fh may point to version string (&amp;quot;1.02 &amp;quot;,0)&lt;br /&gt;
_MD5Final			equ 8018h&lt;br /&gt;
_RSAValidate			equ 801Bh&lt;br /&gt;
_cmpStr				equ 801Eh ;BigNumCompare&lt;br /&gt;
_WriteAByte			equ 8021h&lt;br /&gt;
_EraseFlash			equ 8024h&lt;br /&gt;
_FindFirstCertField		equ 8027h&lt;br /&gt;
_ZeroToCertificate		equ 802Ah&lt;br /&gt;
_GetCertificateEnd		equ 802Dh&lt;br /&gt;
_FindGroupedField		equ 8030h&lt;br /&gt;
_ret_1				equ 8033h&lt;br /&gt;
_ret_2				equ 8036h&lt;br /&gt;
_ret_3				equ 8039h&lt;br /&gt;
_ret_4				equ 803Ch&lt;br /&gt;
_ret_5				equ 803Fh&lt;br /&gt;
_Mult8By8			equ 8042h&lt;br /&gt;
_Mult16By8			equ 8045h&lt;br /&gt;
_Div16By8			equ 8048h&lt;br /&gt;
_Div16By16			equ 804Bh&lt;br /&gt;
;804Eh ;scary certificate reading and writing, something about calc ID and fields 0A10/0A20&lt;br /&gt;
_LoadAIndPaged			equ 8051h&lt;br /&gt;
_FlashToRam2			equ 8054h&lt;br /&gt;
_GetCertificateStart		equ 8057h&lt;br /&gt;
_GetFieldSize			equ 805Ah&lt;br /&gt;
_FindSubField			equ 805Dh&lt;br /&gt;
_EraseCertificateSector		equ 8060h&lt;br /&gt;
_CheckHeaderKey			equ 8063h&lt;br /&gt;
;8066h ;just returns Z if specified data in field 0310h, subfield 0610h exists, DE points to data of that field you want to find&lt;br /&gt;
;8069h ;just returns number of 0810h/0710h fields that exist in certificate or something, in IX&lt;br /&gt;
_Load_LFontV2			equ 806Ch&lt;br /&gt;
_Load_LFontV			equ 806Fh&lt;br /&gt;
_ReceiveOS			equ 8072h&lt;br /&gt;
_FindOSHeaderSubField		equ 8075h&lt;br /&gt;
_FindNextCertField		equ 8078h&lt;br /&gt;
_GetByteOrBoot			equ 807Bh&lt;br /&gt;
_getSerial			equ 807Eh ;GetCalcSerial&lt;br /&gt;
_ReceiveCalcID			equ 8081h ;receives certificate replacement (including calculator ID, fails if already exists) and writes it, requires Flash unlocked&lt;br /&gt;
_EraseFlashPage			equ 8084h&lt;br /&gt;
_WriteFlashUnsafe		equ 8087h&lt;br /&gt;
_dispBootVer			equ 808Ah&lt;br /&gt;
_MD5Init			equ 808Dh&lt;br /&gt;
_MD5Update			equ 8090h&lt;br /&gt;
_MarkOSInvalid			equ 8093h&lt;br /&gt;
_FindProgramLicense		equ 8096h ;copies 8010h field to appID and other insane stuff that makes zero sense&lt;br /&gt;
_MarkOSValid			equ 8099h&lt;br /&gt;
_CheckOSValidated		equ 809Ch&lt;br /&gt;
_SetupAppPubKey			equ 809Fh&lt;br /&gt;
_SigModR			equ 80A2h&lt;br /&gt;
_TransformHash			equ 80A5h&lt;br /&gt;
_IsAppFreeware			equ 80A8h&lt;br /&gt;
_FindAppHeaderSubField		equ 80ABh&lt;br /&gt;
_WriteValidationNumber		equ 80AEh ;generates two-byte validation number from calc ID and stores to certificate&lt;br /&gt;
_Div32By16			equ 80B1h&lt;br /&gt;
_FindGroup			equ 80B4h ;searches until field of DE-like group is found (DE=0A00h, it stops when it finds 0Ax0h)&lt;br /&gt;
_getBootVer			equ 80B7h&lt;br /&gt;
_getHardwareVersion		equ 80BAh&lt;br /&gt;
_xorA				equ 80BDh ;xor a&lt;br /&gt;
_bignumpowermod17		equ 80C0h&lt;br /&gt;
_ProdNrPart1			equ 80C3h&lt;br /&gt;
_WriteAByteSafe			equ 80C6h&lt;br /&gt;
_WriteFlash			equ 80C9h&lt;br /&gt;
_SetupDateStampPubKey		equ 80CCh&lt;br /&gt;
_SetFlashLowerBound		equ 80CFh&lt;br /&gt;
_LowBatteryBoot			equ 80D2h&lt;br /&gt;
;TI-84 Plus/Silver Edition Only Entry Points&lt;br /&gt;
_AttemptUSBOSReceive		equ 80E4h ;Z to wait for USB cable insert &amp;amp; get OS, NZ and A= contents of port 4Dh or 56h, ON to cancel &amp;amp; clear RAM&lt;br /&gt;
_DisplayBootMessage		equ 80E7h&lt;br /&gt;
_NewLine2			equ 80EAh&lt;br /&gt;
_DisplayBootError10		equ 80EDh&lt;br /&gt;
_Chk_Batt_Low_B			equ 80F0h&lt;br /&gt;
_Chk_Batt_Low_B2		equ 80F3h&lt;br /&gt;
_ReceiveOS_USB			equ 80F6h&lt;br /&gt;
_DisplayOSProgress		equ 80F9h&lt;br /&gt;
_ResetCalc			equ 80FCh&lt;br /&gt;
_SetupOSPubKey			equ 80FFh&lt;br /&gt;
_CheckHeaderKeyHL		equ 8102h ;same as _CheckHeaderKey, only you pass the address of header in HL, not at appData&lt;br /&gt;
_USBErrorCleanup		equ 8105h ;kills some USB stuff (doesn't completely kill periph communication), error handler in boot code&lt;br /&gt;
_InitUSB			equ 8108h ;initializes USB hardware as peripheral, sets 5,(iy+1Bh), C set if problems&lt;br /&gt;
;810Bh set 1,(81h) and wait (has something to do with USB peripheral kill, but it doesn't actually kill it)&lt;br /&gt;
_KillUSB			equ 810Eh ;identical to 8105h, except in the middle of the outputs, it sends zero to port 4Ch&lt;br /&gt;
_DisplayBootError1		equ 8111h&lt;br /&gt;
_DisplayBootError2		equ 8114h&lt;br /&gt;
_DisplayBootError3		equ 8117h&lt;br /&gt;
_DisplayBootError4		equ 811Ah&lt;br /&gt;
_DisplayBootError5		equ 811Dh&lt;br /&gt;
_DisplayBootError6		equ 8120h&lt;br /&gt;
_DisplayBootError7		equ 8123h&lt;br /&gt;
_DisplayBootError8		equ 8126h&lt;br /&gt;
_DisplayBootError9		equ 8129h&lt;br /&gt;
&lt;br /&gt;
;RAM Equates&lt;br /&gt;
;--------------------------------&lt;br /&gt;
ramStart		equ 8000h&lt;br /&gt;
appData			equ 8000h&lt;br /&gt;
ramCode			equ 8100h&lt;br /&gt;
SmallEditColumnLeft	equ 8177h&lt;br /&gt;
SmallEditRow		equ 8178h&lt;br /&gt;
SmallEditColumnRight	equ 8179h&lt;br /&gt;
;penCol left edge?	equ 817Bh&lt;br /&gt;
bigInteger1		equ 8182h&lt;br /&gt;
SmallEditCancelParse	equ 8194h&lt;br /&gt;
SmallEditRowCount	equ 81B7h&lt;br /&gt;
bigInteger2		equ 81C3h&lt;br /&gt;
SmallEditPromptString	equ 81CCh&lt;br /&gt;
ramCodeEnd		equ 822Fh&lt;br /&gt;
baseAppBrTab		equ 8230h ;table of base pages for apps on page &amp;lt; 20h (starts with eight zeroes because they're OS pages)&lt;br /&gt;
clockFlag		equ 8230h ;bit 2 set for 24-hour mode and don't display &amp;quot;AM/PM&amp;quot;&lt;br /&gt;
clockIDs		equ 8231h ;five bytes, numbers 0-4 in memory, that when present, stops displaying clock numbers in time setting context?&lt;br /&gt;
bootTemp		equ 8251h&lt;br /&gt;
MD5Temp			equ 8259h&lt;br /&gt;
MD5Length		equ 8269h&lt;br /&gt;
MD5Hash			equ 8292h&lt;br /&gt;
appSearchPage		equ 82A3h&lt;br /&gt;
tempSwapArea		equ 82A5h&lt;br /&gt;
;something		equ 837Bh ;18 bytes, probably indicates something about Flash app pages, start out as 0FFh&lt;br /&gt;
appID			equ 838Dh&lt;br /&gt;
arcPageEnd		equ 8392h&lt;br /&gt;
arcPtrEnd		equ 8393h&lt;br /&gt;
;839Fh something...field size bytes?&lt;br /&gt;
MD5Buffer		equ 83A5h&lt;br /&gt;
Abackup			equ 83EBh&lt;br /&gt;
ramReturnData		equ 83EDh&lt;br /&gt;
arcInfo			equ 83EEh&lt;br /&gt;
savedArcInfo		equ 8406h&lt;br /&gt;
appInfo			equ 8432h&lt;br /&gt;
appBank_jump		equ 843Ch&lt;br /&gt;
appPage			equ 843Eh&lt;br /&gt;
kbdScanCode		equ 843Fh&lt;br /&gt;
kbdKey			equ 8444h&lt;br /&gt;
kbdGetKy		equ 8445h&lt;br /&gt;
keyExtend		equ 8446h&lt;br /&gt;
EXTECHO			equ keyExtend&lt;br /&gt;
contrast		equ 8447h&lt;br /&gt;
apdSubTimer		equ 8448h&lt;br /&gt;
apdTimer		equ 8449h&lt;br /&gt;
curTime			equ 844Ah&lt;br /&gt;
curRow			equ 844Bh&lt;br /&gt;
curCol			equ 844Ch&lt;br /&gt;
curOffset		equ 844Dh&lt;br /&gt;
curUnder		equ 844Eh&lt;br /&gt;
curY			equ 844Fh&lt;br /&gt;
curType			equ 8450h&lt;br /&gt;
curXRow			equ 8451h&lt;br /&gt;
prevDData		equ 8452h&lt;br /&gt;
lFont_record		equ 845Ah&lt;br /&gt;
sFont_record		equ 8462h&lt;br /&gt;
tokVarPtr		equ 846Ah&lt;br /&gt;
tokLen			equ 846Ch&lt;br /&gt;
indicMem		equ 846Eh ;eight bytes used by _saveTR and _restoreTR to store image in top right corner&lt;br /&gt;
indicCounter		equ 8476h&lt;br /&gt;
indicBusy		equ 8477h&lt;br /&gt;
OP1			equ 8478h&lt;br /&gt;
OP1M			equ 847Ah&lt;br /&gt;
OP2			equ 8483h&lt;br /&gt;
OP2M			equ 8485h&lt;br /&gt;
OP2EXT			equ 848Ch&lt;br /&gt;
OP3			equ 848Eh&lt;br /&gt;
OP3M			equ 8490h&lt;br /&gt;
OP4			equ 8499h&lt;br /&gt;
OP4M			equ 849Bh&lt;br /&gt;
OP5			equ 84A4h&lt;br /&gt;
OP5M			equ 84A6h&lt;br /&gt;
OP6			equ 84AFh&lt;br /&gt;
OP6M			equ 84B1h&lt;br /&gt;
OP6EXT			equ 84B8h&lt;br /&gt;
progToEdit		equ 84BFh&lt;br /&gt;
nameBuff		equ 84C7h&lt;br /&gt;
equ_edit_save		equ 84D2h&lt;br /&gt;
iMathPtr1		equ 84D3h&lt;br /&gt;
iMathPtr2		equ 84D5h&lt;br /&gt;
iMathPtr3		equ 84D7h&lt;br /&gt;
iMathPtr4		equ 84D9h&lt;br /&gt;
iMathPtr5		equ 84DBh&lt;br /&gt;
chkDelPtr1		equ 84DDh&lt;br /&gt;
chkDelPtr2		equ 84DFh&lt;br /&gt;
insDelPtr		equ 84E1h&lt;br /&gt;
upDownPtr		equ 84E3h&lt;br /&gt;
fOutDat			equ 84E5h&lt;br /&gt;
asm_data_ptr1		equ 84EBh&lt;br /&gt;
asm_data_ptr2		equ 84EDh&lt;br /&gt;
asm_sym_ptr1		equ 84EFh&lt;br /&gt;
asm_sym_ptr2		equ 84F1h&lt;br /&gt;
asm_ram			equ 84F3h&lt;br /&gt;
asm_ind_call		equ 8507h&lt;br /&gt;
textShadow		equ 8508h&lt;br /&gt;
textShadCur		equ 8588h&lt;br /&gt;
textShadTop		equ 858Ah&lt;br /&gt;
textShadAlph		equ 858Bh&lt;br /&gt;
textShadIns		equ 858Ch&lt;br /&gt;
cxMain			equ 858Dh&lt;br /&gt;
cxPPutAway		equ 858Fh&lt;br /&gt;
cxPutAway		equ 8591h&lt;br /&gt;
cxErrorEP		equ 8595h&lt;br /&gt;
cxSizeWind		equ 8597h&lt;br /&gt;
cxPage			equ 8599h&lt;br /&gt;
cxCurApp		equ 859Ah&lt;br /&gt;
cxPrev			equ 859Bh ;12 bytes are shadows of cxMain through cxCurApp and appFlags&lt;br /&gt;
monQH			equ 85AAh&lt;br /&gt;
monQT			equ 85ABh&lt;br /&gt;
monQueue		equ 85ACh&lt;br /&gt;
onSP			equ 85BCh&lt;br /&gt;
promptRow		equ 85C0h&lt;br /&gt;
promptCol		equ 85C1h&lt;br /&gt;
promptIns		equ 85C2h&lt;br /&gt;
promptShift		equ 85C3h&lt;br /&gt;
promptRet		equ 85C4h&lt;br /&gt;
promptValid		equ 85C6h&lt;br /&gt;
promptTop		equ 85C8h&lt;br /&gt;
promptCursor		equ 85CAh&lt;br /&gt;
promptTail		equ 85CCh&lt;br /&gt;
promptBtm		equ 85CEh&lt;br /&gt;
varType			equ 85D0h&lt;br /&gt;
varCurrent		equ 85D1h&lt;br /&gt;
varClass		equ 85D9h&lt;br /&gt;
CatalogCurrent		equ 85DAh ;word at this location starting with 6007h corresponds to what is highlighted in catalog&lt;br /&gt;
menuActive		equ 85DCh&lt;br /&gt;
menuAppDepth		equ 85DDh&lt;br /&gt;
MenuCurrent		equ 85DEh&lt;br /&gt;
;			equ 85DFh ;holds current submenu index&lt;br /&gt;
;			equ 85E0h ;holds currently selected item in current submenu&lt;br /&gt;
;			equ 85E1h ;holds number of submenus for this menu&lt;br /&gt;
;			equ 85E2h ;holds number of items in this submenu&lt;br /&gt;
;			equ 85E3h ;iy+appFlags backup for menu stuff&lt;br /&gt;
;			equ 85E4h ;iy+0Ch backup for menu stuff&lt;br /&gt;
;			equ 85E5h ;curGStyle backup for menu stuff&lt;br /&gt;
;			equ 85E6h ;iy+graphFlags backup for menu stuff&lt;br /&gt;
ProgCurrent		equ 85E8h&lt;br /&gt;
;something, OP1 backup?	equ 85F2h ;type and name of topmost variable on menu with names&lt;br /&gt;
;something		equ 85FDh&lt;br /&gt;
userMenuSA		equ 85FEh&lt;br /&gt;
ioPrompt		equ 865Fh&lt;br /&gt;
dImageWidth		equ 8660h&lt;br /&gt;
ioFlag			equ 8670h&lt;br /&gt;
sndRecState		equ 8672h&lt;br /&gt;
ioErrState		equ 8673h&lt;br /&gt;
header			equ 8674h&lt;br /&gt;
ioData			equ 867Dh&lt;br /&gt;
ioNewData		equ 8689h&lt;br /&gt;
bakHeader		equ 868Bh&lt;br /&gt;
;something		equ 8697h ;app bitmap for selecting stuff from menus&lt;br /&gt;
;something		equ 86B7h ;used in 47h and 74h link packets&lt;br /&gt;
penCol			equ 86D7h&lt;br /&gt;
penRow			equ 86D8h&lt;br /&gt;
rclQueue		equ 86D9h&lt;br /&gt;
rclQueueEnd		equ 86DBh&lt;br /&gt;
errNo			equ 86DDh&lt;br /&gt;
errSP			equ 86DEh&lt;br /&gt;
errOffset		equ 86E0h&lt;br /&gt;
saveSScreen		equ 86ECh&lt;br /&gt;
asm_prgm_size		equ 89ECh&lt;br /&gt;
bstCounter		equ 89EEh&lt;br /&gt;
flags			equ 89F0h&lt;br /&gt;
appFlagsAddr		equ 89FDh&lt;br /&gt;
;something		equ 8A36h ;stats-related? This gets stored to (varCurrent) for some reason&lt;br /&gt;
statVars		equ 8A3Ah&lt;br /&gt;
anovaf_vars		equ 8C17h&lt;br /&gt;
infVars			equ 8C4Dh&lt;br /&gt;
infVar1			equ 8C56h&lt;br /&gt;
infVar2			equ 8C5Fh&lt;br /&gt;
infVar3			equ 8C68h&lt;br /&gt;
infVar4			equ 8C71h&lt;br /&gt;
infVar5			equ 8C7Ah&lt;br /&gt;
infVar6			equ 8C83h&lt;br /&gt;
infVar7			equ 8C8Ch&lt;br /&gt;
infVar8			equ 8C95h&lt;br /&gt;
infVar9			equ 8C9Eh&lt;br /&gt;
infVar10		equ 8CA7h&lt;br /&gt;
infVar11		equ 8CB0h&lt;br /&gt;
infVar12		equ 8CB9h&lt;br /&gt;
infVar13		equ 8CC2h&lt;br /&gt;
infVar14		equ 8CCBh&lt;br /&gt;
infVar15		equ 8CD4h&lt;br /&gt;
infVar16		equ 8CDDh&lt;br /&gt;
infVar17		equ 8CE6h&lt;br /&gt;
infVar18		equ 8CEFh&lt;br /&gt;
infVar19		equ 8CF8h&lt;br /&gt;
infVar20		equ 8D01h&lt;br /&gt;
;something		equ 8D0Bh&lt;br /&gt;
;list-related stat vars	equ 8D0Dh&lt;br /&gt;
curGStyle		equ 8D17h&lt;br /&gt;
curGY			equ 8D18h&lt;br /&gt;
curGX			equ 8D19h&lt;br /&gt;
curGY2			equ 8D1Ah&lt;br /&gt;
curGX2			equ 8D1Bh ;currently selected equation while graphing&lt;br /&gt;
freeSaveY		equ 8D1Ch&lt;br /&gt;
freeSaveX		equ 8D1Dh&lt;br /&gt;
;100 bytes		equ 8D2Ah&lt;br /&gt;
XOffset			equ 8DA1h&lt;br /&gt;
YOffset			equ 8DA2h&lt;br /&gt;
lcdTallP		equ 8DA3h&lt;br /&gt;
pixWideP		equ 8DA4h&lt;br /&gt;
pixWide_m_1		equ 8DA5h&lt;br /&gt;
pixWide_m_2		equ 8DA6h&lt;br /&gt;
lastEntryPTR		equ 8DA7h ;pointer to the next available byte in the entry stack&lt;br /&gt;
lastEntryStk		equ 8DA9h ;the start of entry stack (note last entry is not in the stack, it is in the program '#'.)  This is a stack of strings.  first 2 bytes are length, followed by string. 2nd from last entry is first in this stack.&lt;br /&gt;
numLastEntries		equ 8E29h ;number of entries you can back-track through minus one&lt;br /&gt;
currLastEntry		equ 8E2Ah ;counter used by OS to keep track of which entry was just displayed by pressing 2nd+enter&lt;br /&gt;
curPlotNumber		equ 8E63h ;current plot being graphed (1-3), this gets reset back to 0&lt;br /&gt;
;something		equ 8E65h&lt;br /&gt;
;something		equ 8E66h&lt;br /&gt;
curInc			equ 8E67h&lt;br /&gt;
uXmin			equ 8E7Eh&lt;br /&gt;
uXmax			equ 8E87h&lt;br /&gt;
uXscl			equ 8E90h&lt;br /&gt;
uYmin			equ 8E99h&lt;br /&gt;
uYmax			equ 8EA2h&lt;br /&gt;
uYscl			equ 8EABh&lt;br /&gt;
uThetMin		equ 8EB4h&lt;br /&gt;
uThetMax		equ 8EBDh&lt;br /&gt;
uThetStep		equ 8EC6h&lt;br /&gt;
uTmin			equ 8ECFh&lt;br /&gt;
uTmax			equ 8ED8h&lt;br /&gt;
uTStep			equ 8EE1h&lt;br /&gt;
uPlotStart		equ 8EEAh&lt;br /&gt;
unMax			equ 8EF3h&lt;br /&gt;
uu0			equ 8EFCh&lt;br /&gt;
uv0			equ 8F05h&lt;br /&gt;
unMin			equ 8F0Eh&lt;br /&gt;
uu02			equ 8F17h&lt;br /&gt;
uv02			equ 8F20h&lt;br /&gt;
uw0			equ 8F29h&lt;br /&gt;
uPlotStep		equ 8F32h&lt;br /&gt;
uXres			equ 8F3Bh&lt;br /&gt;
uw02			equ 8F44h&lt;br /&gt;
Xmin			equ 8F50h&lt;br /&gt;
Xmax			equ 8F59h&lt;br /&gt;
Xscl			equ 8F62h&lt;br /&gt;
Ymin			equ 8F6Bh&lt;br /&gt;
Ymax			equ 8F74h&lt;br /&gt;
Yscl			equ 8F7Dh&lt;br /&gt;
ThetaMin		equ 8F86h&lt;br /&gt;
ThetaMax		equ 8F8Fh&lt;br /&gt;
ThetaStep		equ 8F98h&lt;br /&gt;
TminPar			equ 8FA1h&lt;br /&gt;
TmaxPar			equ 8FAAh&lt;br /&gt;
Tstep			equ 8FB3h&lt;br /&gt;
PlotStart		equ 8FBCh&lt;br /&gt;
nMax			equ 8FC5h&lt;br /&gt;
u0			equ 8FCEh&lt;br /&gt;
v0			equ 8FD7h&lt;br /&gt;
nMin			equ 8FE0h&lt;br /&gt;
u02			equ 8FE9h&lt;br /&gt;
v02			equ 8FF2h&lt;br /&gt;
w0			equ 8FFBh&lt;br /&gt;
PlotStep		equ 9004h&lt;br /&gt;
XresO			equ 900Dh&lt;br /&gt;
w02			equ 9016h&lt;br /&gt;
un1			equ 901Fh&lt;br /&gt;
un2			equ 9028h&lt;br /&gt;
vn1			equ 9031h&lt;br /&gt;
vn2			equ 903Ah&lt;br /&gt;
wn1			equ 9043h&lt;br /&gt;
wn2			equ 904Ch&lt;br /&gt;
fin_N			equ 9055h&lt;br /&gt;
fin_I			equ 905Eh&lt;br /&gt;
fin_PV			equ 9067h&lt;br /&gt;
fin_PMT			equ 9070h&lt;br /&gt;
fin_FV			equ 9079h&lt;br /&gt;
fin_PY			equ 9082h&lt;br /&gt;
fin_CY			equ 908Bh&lt;br /&gt;
cal_N			equ 9094h&lt;br /&gt;
cal_I			equ 909Dh&lt;br /&gt;
cal_PV			equ 90A6h&lt;br /&gt;
cal_PMT			equ 90AFh&lt;br /&gt;
cal_FV			equ 90B8h&lt;br /&gt;
cal_PY			equ 90C1h&lt;br /&gt;
smallEditRAM		equ 90D3h&lt;br /&gt;
XFact			equ 913Fh&lt;br /&gt;
YFact			equ 9148h&lt;br /&gt;
Xres_int		equ 9151h&lt;br /&gt;
deltaX			equ 9152h&lt;br /&gt;
deltaY			equ 915Bh&lt;br /&gt;
shortX			equ 9164h&lt;br /&gt;
shortY			equ 916Dh&lt;br /&gt;
lower			equ 9176h&lt;br /&gt;
upper			equ 917Fh&lt;br /&gt;
XOutSym			equ 918Ch&lt;br /&gt;
XOutDat			equ 918Eh&lt;br /&gt;
YOutSym			equ 9190h&lt;br /&gt;
YOutDat			equ 9192h&lt;br /&gt;
inputSym		equ 9194h&lt;br /&gt;
inputDat		equ 9196h&lt;br /&gt;
prevData		equ 9198h&lt;br /&gt;
;something		equ 91D9h&lt;br /&gt;
;something		equ 91DAh&lt;br /&gt;
CurTableRow		equ 91DCh&lt;br /&gt;
CurTableCol		equ 91DDh&lt;br /&gt;
TblMin			equ 92B3h&lt;br /&gt;
TblStep			equ 92BCh&lt;br /&gt;
;something		equ 92C5h&lt;br /&gt;
;something		equ 92C6h&lt;br /&gt;
;somePlotThing1		equ 92D9h&lt;br /&gt;
;somePlotThing2		equ 92EAh&lt;br /&gt;
;somePlotThing3		equ 92FBh&lt;br /&gt;
ES			equ 9302h ;bottom of the es&lt;br /&gt;
EST			equ 9305h ;current height of the es&lt;br /&gt;
;something		equ 9311h ;this is the pointer to a table of stuff for a BASIC menu&lt;br /&gt;
plotSScreen		equ 9340h&lt;br /&gt;
seed1			equ 9640h&lt;br /&gt;
seed2			equ 9649h&lt;br /&gt;
basic_prog		equ 9652h&lt;br /&gt;
basic_start		equ 965Bh&lt;br /&gt;
nextParseByte		equ 965Dh ;basic_pc&lt;br /&gt;
basic_end		equ 965Fh&lt;br /&gt;
numArguments		equ 9661h&lt;br /&gt;
;something		equ 9665h ;parser-related word&lt;br /&gt;
;something		equ 966Ch&lt;br /&gt;
;something		equ 966Dh&lt;br /&gt;
cmdShadow		equ 966Eh&lt;br /&gt;
cmdShadCur		equ 96EEh&lt;br /&gt;
cmdShadAlph		equ 96F0h&lt;br /&gt;
cmdShadIns		equ 96F1h&lt;br /&gt;
cmdCursor		equ 96F2h&lt;br /&gt;
editTop			equ 96F4h&lt;br /&gt;
editCursor		equ 96F6h&lt;br /&gt;
editTail		equ 96F8h&lt;br /&gt;
editBtm			equ 96FAh&lt;br /&gt;
;something		equ 96FEh ;word, this is offset into list for currently-highlighted element in list editor&lt;br /&gt;
;something		equ 9700h ;table entry pointer used in dialog/menu/edit buffer routines&lt;br /&gt;
matrixDimensions	equ 9702h ;dimensions of matrix being edited in matrix editor&lt;br /&gt;
editSym			equ 9706h ;pointer to symbol table entry of variable being edited&lt;br /&gt;
editDat			equ 9708h ;pointer to data of variable being edited&lt;br /&gt;
;something		equ 970Eh ;stats/list editor related, usually 1&lt;br /&gt;
;something		equ 970Fh ;stats/list editor related, usually 0 (this is 0-based offset from listName1), pretty sure this is a page offset&lt;br /&gt;
;something		equ 9710h ;stats/list editor related, usually 0 (this is 0-based currently-selected list)&lt;br /&gt;
listName1		equ 9711h&lt;br /&gt;
listName2		equ 9716h&lt;br /&gt;
listName3		equ 971Bh&lt;br /&gt;
listName4		equ 9720h&lt;br /&gt;
listName5		equ 9725h&lt;br /&gt;
listName6		equ 972Ah&lt;br /&gt;
listName7		equ 972Fh&lt;br /&gt;
listName8		equ 9734h&lt;br /&gt;
listName9		equ 9739h&lt;br /&gt;
listName10		equ 973Eh&lt;br /&gt;
listName11		equ 9743h&lt;br /&gt;
listName12		equ 9748h&lt;br /&gt;
listName13		equ 974Dh&lt;br /&gt;
listName14		equ 9752h&lt;br /&gt;
listName15		equ 9757h&lt;br /&gt;
listName16		equ 975Ch&lt;br /&gt;
listName17		equ 9761h&lt;br /&gt;
listName18		equ 9766h&lt;br /&gt;
listName19		equ 976Bh&lt;br /&gt;
listName20		equ 9770h&lt;br /&gt;
;something		equ 9775h&lt;br /&gt;
y1LineType		equ 9776h ;these bytes define the line type for functions which are graphed&lt;br /&gt;
y2LineType		equ 9777h&lt;br /&gt;
y3LineType		equ 9778h&lt;br /&gt;
y4LineType		equ 9779h&lt;br /&gt;
y5LineType		equ 977Ah&lt;br /&gt;
y6LineType		equ 977Bh&lt;br /&gt;
y7LineType		equ 977Ch&lt;br /&gt;
y8LineType		equ 977Dh&lt;br /&gt;
y9LineType		equ 977Eh&lt;br /&gt;
y0LineType		equ 977Fh&lt;br /&gt;
para1LineType		equ 9780h&lt;br /&gt;
para2LineType		equ 9781h&lt;br /&gt;
para3LineType		equ 9782h&lt;br /&gt;
para4LineType		equ 9783h&lt;br /&gt;
para5LineType		equ 9784h&lt;br /&gt;
para6LineType		equ 9785h&lt;br /&gt;
polar1LineType		equ 9786h&lt;br /&gt;
polar2LineType		equ 9787h&lt;br /&gt;
polar3LineType		equ 9788h&lt;br /&gt;
polar4LineType		equ 9789h&lt;br /&gt;
polar5LineType		equ 978Ah&lt;br /&gt;
polar6LineType		equ 978Bh&lt;br /&gt;
secULineType		equ 978Ch&lt;br /&gt;
secVLineType		equ 978Dh&lt;br /&gt;
secWLineType		equ 978Eh&lt;br /&gt;
;something		equ 979Fh&lt;br /&gt;
;something		equ 97A1h&lt;br /&gt;
winTop			equ 97A5h&lt;br /&gt;
winBtm			equ 97A6h&lt;br /&gt;
winLeftEdge		equ 97A7h&lt;br /&gt;
winLeft			equ 97A8h&lt;br /&gt;
winAbove		equ 97AAh&lt;br /&gt;
winRow			equ 97ACh&lt;br /&gt;
winCol			equ 97AEh&lt;br /&gt;
fmtDigits		equ 97B0h&lt;br /&gt;
fmtString		equ 97B1h&lt;br /&gt;
fmtConv			equ 97F2h&lt;br /&gt;
fmtLeft			equ 9804h&lt;br /&gt;
fmtIndex		equ 9806h&lt;br /&gt;
fmtMatSym		equ 9808h&lt;br /&gt;
fmtMatMem		equ 980Ah&lt;br /&gt;
EQS			equ 980Ch&lt;br /&gt;
;something		equ 980Eh&lt;br /&gt;
;something		equ 9810h&lt;br /&gt;
freeRAM			equ 9815h ;pretty sure this is the amount of RAM free, valid in Mem Mgmt/Del anyway&lt;br /&gt;
;something		equ 9817h&lt;br /&gt;
tSymPtr1		equ 9818h&lt;br /&gt;
tSymPtr2		equ 981Ah&lt;br /&gt;
chkDelPtr3		equ 981Ch&lt;br /&gt;
chkDelPtr4		equ 981Eh&lt;br /&gt;
tempMem			equ 9820h&lt;br /&gt;
fpBase			equ 9822h&lt;br /&gt;
FPS			equ 9824h&lt;br /&gt;
OPBase			equ 9826h&lt;br /&gt;
OPS			equ 9828h&lt;br /&gt;
pTempCnt		equ 982Ah&lt;br /&gt;
cleanTmp		equ 982Ch&lt;br /&gt;
pTemp                   equ 982Eh ;end of symbol table&lt;br /&gt;
progPtr			equ 9830h&lt;br /&gt;
newDataPtr		equ 9832h&lt;br /&gt;
pagedCount		equ 9834h&lt;br /&gt;
pagedPN			equ 9835h&lt;br /&gt;
pagedGetPtr		equ 9836h&lt;br /&gt;
pagedPutPtr		equ 9838h&lt;br /&gt;
pagedBuf		equ 983Ah&lt;br /&gt;
;something		equ 984Ah ;this is the top LCD row for a menu (usually 1)&lt;br /&gt;
appErr1			equ 984Dh&lt;br /&gt;
appErr2			equ 985Ah&lt;br /&gt;
flashByte1		equ 9867h&lt;br /&gt;
flashByte2		equ 9868h&lt;br /&gt;
freeArcBlock		equ 9869h&lt;br /&gt;
arcPage			equ 986Bh&lt;br /&gt;
arcPtr			equ 986Ch&lt;br /&gt;
appRawKeyHandle		equ 9870h&lt;br /&gt;
appBackUpScreen		equ 9872h&lt;br /&gt;
customHeight		equ 9B72h&lt;br /&gt;
localLanguage		equ 9B73h&lt;br /&gt;
hookExecTemp		equ 9B75h&lt;br /&gt;
linkActivityHook	equ 9B78h&lt;br /&gt;
cursorHookPtr		equ 9B7Ch&lt;br /&gt;
libraryHookPtr		equ 9B80h&lt;br /&gt;
rawKeyHookPtr		equ 9B84h&lt;br /&gt;
getKeyHookPtr		equ 9B88h&lt;br /&gt;
homescreenHookPtr	equ 9B8Ch&lt;br /&gt;
windowHookPtr		equ 9B90h&lt;br /&gt;
graphHookPtr		equ 9B94h&lt;br /&gt;
yEqualsHookPtr		equ 9B98h&lt;br /&gt;
fontHookPtr		equ 9B9Ch&lt;br /&gt;
regraphHookPtr		equ 9BA0h&lt;br /&gt;
graphicsHook		equ 9BA4h&lt;br /&gt;
traceHookPtr		equ 9BA8h&lt;br /&gt;
parserHookPtr		equ 9BACh&lt;br /&gt;
appChangeHookPtr	equ 9BB0h&lt;br /&gt;
catalog1HookPtr		equ 9BB4h&lt;br /&gt;
helpHookPtr		equ 9BB8h&lt;br /&gt;
cxRedispHookPtr		equ 9BBCh&lt;br /&gt;
menuHookPtr		equ 9BC0h&lt;br /&gt;
catalog2HookPtr		equ 9BC4h&lt;br /&gt;
tokenHookPtr		equ 9BC8h&lt;br /&gt;
localizeHookPtr		equ 9BCCh&lt;br /&gt;
silentLinkHookPtr	equ 9BD0h ;restartClr?&lt;br /&gt;
USBActivityHookPtr	equ 9BD4h&lt;br /&gt;
baseAppBrTab2		equ 9C06h ;table of base pages for apps on page &amp;gt;= 20h; first 20h bytes are zeroes.&lt;br /&gt;
USBcallbackPage		equ 9C13h&lt;br /&gt;
USBcallbackPtr		equ 9C14h&lt;br /&gt;
vendorID		equ 9C16h&lt;br /&gt;
productID		equ 9C18h&lt;br /&gt;
devReleaseNumber	equ 9C1Ah&lt;br /&gt;
oldSESpeed		equ 9C21h&lt;br /&gt;
calcPeripheralState	equ 9C26h&lt;br /&gt;
usb_dataWaitingCount	equ 9C27h&lt;br /&gt;
basePageTable2End	equ 9C6Fh ;this is the last page&lt;br /&gt;
port91hTemp		equ 9C79h&lt;br /&gt;
usb_dataExpectCount	equ 9C80h&lt;br /&gt;
offPageCallPage		equ 9C83h ;temporarily stores off-page page and address&lt;br /&gt;
offPageCallAddress	equ 9C84h&lt;br /&gt;
;something		equ 9C86h ;used with SE link activity, values of 00h, 0FAh, 0FFh probably mean something&lt;br /&gt;
;something		equ 9C87h ;zero this to force the APPS menu to recache itself (this is always either 0, 1, or last app page, for some reason)&lt;br /&gt;
;something		equ 9C88h ;don't know, but it's 14 bytes and has to do with selecting stuff (if 9C87h is non-zero, this is zeroed out)&lt;br /&gt;
;something		equ 9C9Eh ;funky, this actually gets written to the certificate on non-83+ (11 bytes)&lt;br /&gt;
SEspeed			equ 9CAEh&lt;br /&gt;
;something, table index	equ 9CAFh&lt;br /&gt;
;something		equ 9CB0h&lt;br /&gt;
;something		equ 9CB1h ;table&lt;br /&gt;
;something		equ 9CCDh&lt;br /&gt;
localTokStr		equ 9D65h&lt;br /&gt;
keyForStr		equ 9D76h&lt;br /&gt;
keyToStrRam		equ 9D77h&lt;br /&gt;
sedMonSp		equ 9D88h ;small edit monitor SP&lt;br /&gt;
bpSave			equ 9D8Ah&lt;br /&gt;
userMem			equ 9D95h&lt;br /&gt;
symTable		equ 0FE66h&lt;br /&gt;
&lt;br /&gt;
;System Flags&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ioDelFlag		equ 0h&lt;br /&gt;
inDelete		equ 0		;1 = DELETE SCREEN &lt;br /&gt;
&lt;br /&gt;
trigFlags		equ 0h	;Trigonometry mode settings&lt;br /&gt;
trigDeg			equ 2		;1=degrees, 0=radians&lt;br /&gt;
&lt;br /&gt;
kbdFlags		equ 0h	;Keyboard scan&lt;br /&gt;
kbdSCR			equ 3		;1=scan code ready&lt;br /&gt;
kbdKeyPress		equ 4		;1=key has been pressed&lt;br /&gt;
&lt;br /&gt;
doneFlags		equ 0h	;display &amp;quot;Done&amp;quot;&lt;br /&gt;
donePrgm		equ 5		;1=display &amp;quot;Done&amp;quot; after prgm&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
editFlags		equ 1h&lt;br /&gt;
editOpen		equ 2		;1=edit buffer is open&lt;br /&gt;
&lt;br /&gt;
ansFlags		equ 1&lt;br /&gt;
AnsScroll		equ 3		;1=answer can scroll, seems must be reset in order to move about edit buffer&lt;br /&gt;
&lt;br /&gt;
monFlags		equ 1h	 ;monitor flags&lt;br /&gt;
monAbandon		equ 4		;1=don't start any long process in put away (#715)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
plotFlags		equ 2h	;plot generation flags&lt;br /&gt;
plotLoc 		equ 1		;0=bkup &amp;amp; display, 1=display only&lt;br /&gt;
plotDisp		equ 2		;1=plot is in display, 0=text in display, this also indicates whether graph is being shown or not&lt;br /&gt;
&lt;br /&gt;
grfModeFlags		equ 2h	;graph mode settings&lt;br /&gt;
grfFuncM		equ 4		;1=function graph&lt;br /&gt;
grfPolarM		equ 5		;1=polar graph&lt;br /&gt;
grfParamM		equ 6		;1=parametric graph&lt;br /&gt;
grfRecurM		equ 7		;1=RECURSION graph&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
graphFlags		equ 3h&lt;br /&gt;
graphDraw		equ 0		;0=graph is valid, 1=redraw graph(dirty)&lt;br /&gt;
graphCursor		equ 2&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
grfDBFlags		equ 4h&lt;br /&gt;
grfDot			equ 0		;0=line, 1=dot&lt;br /&gt;
grfSimul		equ 1		;0=sequential, 1=simultaneous&lt;br /&gt;
grfGrid 		equ 2		;0=no grid, 1=grid&lt;br /&gt;
grfPolar		equ 3		;0=rectangular, 1=polar coordinates&lt;br /&gt;
grfNoCoord		equ 4		;0=display coordinates, 1=off&lt;br /&gt;
grfNoAxis		equ 5		;0=axis, 1=no axis&lt;br /&gt;
grfLabel		equ 6		;0=off, 1=axis label&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
textFlags		equ 5h	;Text output flags&lt;br /&gt;
textEraseBelow		equ 1		;1=erase line below small char&lt;br /&gt;
textScrolled		equ 2		;1=screen scrolled&lt;br /&gt;
textInverse		equ 3		;1=display inverse bit-map&lt;br /&gt;
textInsMode		equ 4		;0=overstrike, 1=insert mode&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ParsFlag		equ 6h	;PARSER flags&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
ParsFlag2		equ 7h	;PARSER flags&lt;br /&gt;
numOP1			equ 0		;1=RESULT IN OP1, 0=NO RESULT&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
newDispF		equ 8h	;Derivative mode flags&lt;br /&gt;
preClrForMode		equ 0		;1=HELP BLINK ON MODE SCREEN&lt;br /&gt;
allowProgTokens		equ 1		;1=allow programming tokens to be parsed in BASIC programs&lt;br /&gt;
&lt;br /&gt;
apdFlags		equ 8h	;Automatic power-down&lt;br /&gt;
apdAble 		equ 2		;1=APD enabled&lt;br /&gt;
apdRunning		equ 3		;1=APD clock running&lt;br /&gt;
apdWarmStart		equ 4		;1=calculator is turning on from APD or power loss&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
web_err_mask		equ 60h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
onFlags 		equ 9h	;on key flags&lt;br /&gt;
parseInput		equ 1		;1=parse input when done&lt;br /&gt;
onRunning		equ 3		;1=calculator is running&lt;br /&gt;
onInterrupt		equ 4		;1=on key interrupt request&lt;br /&gt;
&lt;br /&gt;
statFlags		equ 9h	;statistics flags&lt;br /&gt;
;unknown		equ 5		;unknown&lt;br /&gt;
statsValid		equ 6		;1=stats are valid&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtFlags		equ 0Ah	;numeric format flags&lt;br /&gt;
fmtExponent		equ 0	 	;1=show exponent, 0=no exponent&lt;br /&gt;
fmtEng			equ 1	 	;1=engineering notion, 0=scientific&lt;br /&gt;
fmtHex			equ 2	 	;1=hexadecimal&lt;br /&gt;
fmtOct			equ 3	 	;1=octal&lt;br /&gt;
fmtBin			equ 4	 	;1=binary&lt;br /&gt;
&lt;br /&gt;
numMode			equ 0Ah&lt;br /&gt;
fmtReal			equ 5&lt;br /&gt;
fmtRect			equ 6&lt;br /&gt;
fmtPolar		equ 7&lt;br /&gt;
&lt;br /&gt;
realMode		equ 5&lt;br /&gt;
rectMode		equ 6&lt;br /&gt;
polarMode		equ 7&lt;br /&gt;
;					;if Hex and Oct both = 1&lt;br /&gt;
;					; then Bin=0 means &amp;gt;Frac&lt;br /&gt;
;					; Bin=1 means &amp;gt;DMS&lt;br /&gt;
fmtBaseMask		equ  00011100b	; mask to base flags&lt;br /&gt;
fmtBaseShift		equ  2		; offset to base flags&lt;br /&gt;
;&lt;br /&gt;
;       CHECK IF THESE ARE USED BY NUMFORM,&lt;br /&gt;
;&lt;br /&gt;
;               	equ  6&lt;br /&gt;
;               	equ  7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtOverride		equ 0Bh	;copy of fmtFlags with conversion override&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fmtEditFlags		equ 0Ch	;numeric editing flags&lt;br /&gt;
fmtEdit			equ 0		;1=format number for editing&lt;br /&gt;
&lt;br /&gt;
curFlags		equ 0Ch	;Cursor&lt;br /&gt;
curAble 		equ 2		;1=cursor flash is enabled&lt;br /&gt;
curOn			equ 3		;1=cursor is showing&lt;br /&gt;
curLock 		equ 4		;1=cursor is locked off&lt;br /&gt;
&lt;br /&gt;
cmdFlags		equ 0Ch	;command editor flags&lt;br /&gt;
cmdVirgin		equ 5		;1=nothing has been typed in cmd bfr&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
appFlags		equ 0Dh	;application flags&lt;br /&gt;
appWantIntrpt		equ 0		;1=want ON key interrupts&lt;br /&gt;
appTextSave		equ 1		;1=save characters in textShadow&lt;br /&gt;
appAutoScroll		equ 2		;1=auto-scroll text on last line&lt;br /&gt;
appMenus		equ 3		;1=process keys that bring up menus, 0=check Lock menu flag&lt;br /&gt;
appLockMenus		equ 4		;1=ignore menu keys, 0=switch to home screen and bring up menu&lt;br /&gt;
appCurGraphic		equ 5		;1=graphic cursor&lt;br /&gt;
appCurWord		equ 6		;1=text cursor covers entire word&lt;br /&gt;
appExit 		equ 7		;1=application handles [EXIT] key itself&lt;br /&gt;
&lt;br /&gt;
appWantIntrptF		equ 1&amp;lt;&amp;lt;appWantIntrpt&lt;br /&gt;
appTextSaveF		equ 1&amp;lt;&amp;lt;appTextSave&lt;br /&gt;
appAutoScrollF		equ 1&amp;lt;&amp;lt;appAutoScroll&lt;br /&gt;
appMenusF		equ 1&amp;lt;&amp;lt;appMenus&lt;br /&gt;
appLockMenusF		equ 1&amp;lt;&amp;lt;appLockMenus&lt;br /&gt;
appCurGraphicF		equ 1&amp;lt;&amp;lt;appCurGraphic&lt;br /&gt;
appCurWordF		equ 1&amp;lt;&amp;lt;appCurWord&lt;br /&gt;
appExitF		equ 1&amp;lt;&amp;lt;appExit&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
rclFlag			equ 0Eh	;OS recall queue flags&lt;br /&gt;
enableQueue		equ 7		;1 = enable recall queue&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
seqFlags		equ 0Fh	;Sequential Graph flags&lt;br /&gt;
webMode			equ 0		;0 = NORMAL SEQ MODE, 1 = WEB MODE&lt;br /&gt;
webVert			equ 1&lt;br /&gt;
sequv			equ 2		;U vs V&lt;br /&gt;
seqvw			equ 3		;V vs W&lt;br /&gt;
sequw			equ 4		;U vs W&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
promptFlags		equ 11h	;prompt line flags&lt;br /&gt;
promptEdit		equ 0		;1=editing in prompt buffer&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
indicFlags		equ 12h	;Indicator flags&lt;br /&gt;
indicRun		equ 0		;1=run indicator ON&lt;br /&gt;
indicInUse		equ 1		;indicator save area in use=1, free=0 ;resetting will disable 2nd while in _getkey&lt;br /&gt;
indicOnly		equ 2		;interrupt handler only checks run indicator&lt;br /&gt;
&lt;br /&gt;
shiftFlags		equ 12h	;[2nd] and [ALPHA] flags&lt;br /&gt;
shift2nd		equ 3		;1=[2nd] has been pressed&lt;br /&gt;
shiftAlpha		equ 4		;1=[ALPHA] has been pressed&lt;br /&gt;
shiftLwrAlph		equ 5		;1=lower case, 0=upper case&lt;br /&gt;
shiftALock		equ 6		;1=alpha lock has been pressed&lt;br /&gt;
shiftKeepAlph		equ 7		;1=cannot cancel alpha shift&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
tblFlags		equ 13h	;table flags.&lt;br /&gt;
autoFill		equ 4		;1=prompt, 0=fillAuto&lt;br /&gt;
autoCalc		equ 5		;1=prompt, 0=CalcAuto&lt;br /&gt;
reTable			equ 6		;0=table is okay, 1=must recompute table.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
sGrFlags		equ 14h&lt;br /&gt;
grfSplit		equ 0		;1=Split Graph, 0=Normal&lt;br /&gt;
vertSplit		equ 1		;1=Vertical (left-right) Split&lt;br /&gt;
grfSChanged		equ 2		;1=Graph just changed Split &amp;lt;-&amp;gt; normal&lt;br /&gt;
grfSplitOverride	equ 3		;1 = ignore graph split flag if set&lt;br /&gt;
write_on_graph		equ 4		;1 = TEXT OR EQU WRITING TO GRAPH SCREEN&lt;br /&gt;
g_style_active		equ 5		;1 = GRAPH STYLES ARE ENABLED, USE THEM&lt;br /&gt;
cmp_mod_box		equ 6		;1 = DOING MOD BOX PLOT COMPUTATION&lt;br /&gt;
textWrite		equ 7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
newIndicFlags		equ 15h&lt;br /&gt;
extraIndic		equ 0&lt;br /&gt;
saIndic			equ 1&lt;br /&gt;
;3 has something to do with stat/list editor&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
interruptFlags		equ 16h&lt;br /&gt;
secondTimerEnabled	equ 0		;1 = second hardware timer enabled&lt;br /&gt;
batteryFlags		equ 16h&lt;br /&gt;
batteriesGood		equ 2		;1 = batteries good, I think this being reset will force the calc to shut off, used in USB error handler&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
smartFlags		equ 17h&lt;br /&gt;
smarter_mask		equ 3&lt;br /&gt;
smarter_test		equ 1&lt;br /&gt;
smartGraph		equ 0&lt;br /&gt;
smartGraph_inv		equ 1&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
traceFlags		equ 18h&lt;br /&gt;
grfExpr			equ 0		;set to hide expression while tracing&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 19h.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
statFlags2		equ 1Ah&lt;br /&gt;
statDiagnosticsOn	equ 0		;1 = stat diagnostics on&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
linkFlags		equ 1Bh&lt;br /&gt;
IDis95h			equ 1		;1 = link routines use machine ID 95h (CBL)&lt;br /&gt;
IDis82h			equ 2		;1 = link routines use machine ID 82h (TI-82)&lt;br /&gt;
IDis83h			equ 3		;1 = link routines use machine ID 83h (TI-83)&lt;br /&gt;
IDis03h			equ 4		;1 = link routines use machine ID 03h (PC to TI-83)&lt;br /&gt;
USBenabled		equ 5		;1 = use USB port first, or at least try to&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Ch (stats-related).&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Dh.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 1Eh.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
varTypeMask		equ 1Fh	;is this a flag byte? yes&lt;br /&gt;
varGraphRef		equ 6&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
graphFlags2		equ 1Fh&lt;br /&gt;
splitOverride		equ 3		;0 = force full screen with ParseInp, or something&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
asm_Flag1		equ 21h	;ASM CODING&lt;br /&gt;
asm_Flag2		equ 22h	;ASM CODING&lt;br /&gt;
asm_Flag3		equ 23h	;ASM CODING&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
arcFlag			equ 24h&lt;br /&gt;
checkBatteryLevelFirst	equ 0		;1 = check battery levels in Arc_Unarc first and throw error if low&lt;br /&gt;
&lt;br /&gt;
getSendFlg		equ 24h&lt;br /&gt;
comFailed		equ 1		;1 = Get/Send Communication Failed&lt;br /&gt;
&lt;br /&gt;
selfTestFlag		equ 24h&lt;br /&gt;
resetOnPowerOn		equ 2		;1 = Force RAM reset when APD disabled on next power on&lt;br /&gt;
&lt;br /&gt;
appLwrCaseFlag		equ 24h&lt;br /&gt;
lwrCaseActive		equ 3&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
contextFlags		equ 25h&lt;br /&gt;
nocxPutAway		equ 5		;1 = do not call cxPutAway routine&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
groupFlags		equ 26h ;used temporarily in Arc_Unarc&lt;br /&gt;
inGroup			equ 1		;1 = IN GROUP CONTEXT&lt;br /&gt;
noCompletionByte	equ 2		;1 = do not write 0FCh when calling Arc_Unarc, leave as 0FEh&lt;br /&gt;
noDataWrite		equ 3		;1 = do not write data when calling Arc_Unarc, nor size bytes&lt;br /&gt;
writeSizeBytesOnly	equ 5		;1 = only write size bytes when calling Arc_Unarc&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;There is a flag 27h.&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
APIFlg			equ 28h&lt;br /&gt;
appAllowContext		equ 0           ;App wants context changes to happen&lt;br /&gt;
;1 set to ignore a key after returning from rawkeyhook&lt;br /&gt;
;2 set to send this key back?&lt;br /&gt;
;3&lt;br /&gt;
appRunning		equ 4		;app is currently running&lt;br /&gt;
;5&lt;br /&gt;
;6&lt;br /&gt;
appRetKeyOff		equ 7		;1 = GetKey returns kOff when [2nd]+[ON] pressed&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg2			equ 29h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg3			equ 2Ah&lt;br /&gt;
;1 set means using small font?&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
apiFlg4			equ 2Bh&lt;br /&gt;
cellOverride		equ 1		;use cell override&lt;br /&gt;
fullScrnDraw		equ 2		;DRAW INTO LAST ROW/COL OF SCREEN&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
mouseFlag1		equ 2Ch&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
mouseFlag2		equ 2Dh ;might want to keep this always reset&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
xapFlag0		equ 2Eh	;external app flags, do not use 0,(iy+2Eh) (used by mouse routines)&lt;br /&gt;
xapFlag1		equ 2Fh&lt;br /&gt;
xapFlag2		equ 30h&lt;br /&gt;
xapFlag3		equ 31h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
fontFlags		equ 32h&lt;br /&gt;
fracDrawLFont		equ 2&lt;br /&gt;
fracTallLFont		equ 3&lt;br /&gt;
customFont		equ 7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags1		equ 33h ;also scriptFlag, rclFlag2, backGroundLink&lt;br /&gt;
alt_On			equ 0		;run ONSCRPT at startup&lt;br /&gt;
alt_Off			equ 1		;run OFFSCRPT at shutdown&lt;br /&gt;
useRclQueueEnd		equ 2		;1 = external mode&lt;br /&gt;
ignoreBPLink		equ 3		;1 = override flag for link activity hook&lt;br /&gt;
bPLinkOn		equ 4		;1 = link activity hook active&lt;br /&gt;
enableKeyEcho		equ 5		;1 = sends keypresses back to connected calc as remote control packets (with GetCSC vs. GetKey codes...really dumb, TI)&lt;br /&gt;
noTempDelete		equ 6		;1 = do not delete temporary programs at homescreen&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags2		equ 34h ;also sysHookFlg&lt;br /&gt;
getCSCHookActive	equ 0		;1 = GetCSC hook active&lt;br /&gt;
libraryHookActive	equ 1		;1 = library hook active&lt;br /&gt;
;2 This is set in the OS, but never referenced and the code is never executed&lt;br /&gt;
homescreenHookActive	equ 4		;1 = homescreen hook active&lt;br /&gt;
rawKeyHookActive	equ 5		;1 = raw key hook active&lt;br /&gt;
catalog2HookActive	equ 6		;1 = catalog 2 hook active&lt;br /&gt;
cursorHookActive	equ 7		;1 = cursor hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags3		equ 35h ;also sysHookFlg1&lt;br /&gt;
tokenHookActive		equ 0		;1 = token hook active&lt;br /&gt;
localizeHookActive	equ 1		;1 = localize hook active&lt;br /&gt;
windowHookActive	equ 2		;1 = window hook active&lt;br /&gt;
graphHookActive		equ 3		;1 = graph hook active&lt;br /&gt;
yEquHookActive		equ 4		;1 = Y= hook active&lt;br /&gt;
fontHookActive		equ 5		;1 = font hook active&lt;br /&gt;
regraphHookActive	equ 6		;1 = regraph hook active&lt;br /&gt;
drawingHookActive	equ 7		;1 = drawing hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
hookflags4		equ 36h ;also sysHookFlag2&lt;br /&gt;
traceHookActive		equ 0		;1 = trace hook active&lt;br /&gt;
parserHookActive	equ 1		;1 = parser hook active&lt;br /&gt;
appChangeHookActive	equ 2		;1 = app change hook active&lt;br /&gt;
catalog1HookActive	equ 3		;1 = catalog 1 hook active&lt;br /&gt;
helpHookActive		equ 4		;1 = help hook active&lt;br /&gt;
cxRedispHookActive	equ 5		;1 = cxRedisp hook active&lt;br /&gt;
menuHookActive		equ 6		;1 = menu hook active&lt;br /&gt;
silentLinkHookActive	equ 7		;1 = silent link hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags2Override	equ 37h		;set corresponding bit to kill iy+35h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags3Override	equ 38h		;set corresponding bit to kill iy+36h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags4Override	equ 39h		;set corresponding bit to kill iy+37h hook when executing app&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
;hookflags5		equ 3Ah&lt;br /&gt;
usbActivityHookActive	equ 0		;1 = USB activity hook active&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
plotFlag3		equ 3Ch  &lt;br /&gt;
bufferOnly		equ 0&lt;br /&gt;
useFastCirc		equ 4&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
dBKeyFlags		equ 3Dh&lt;br /&gt;
keyDefaultsF		equ 6		;1 = GetKey returns extended keycodes with TI-Keyboard&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
silentLinkFlags		equ 3Eh&lt;br /&gt;
silentLinkActive	equ 0		;1 = SE/84+ silent link is active&lt;br /&gt;
&lt;br /&gt;
extraHookFlags		equ 3Eh&lt;br /&gt;
checkCatalog2HookVer	equ 3		;1 = check catalog 2 hook's version before executing it (and error or take other action if so)&lt;br /&gt;
openLibActive		equ 4		;1 = OpenLib( was successfully called on a Flash application (ExecLib will error if zero)&lt;br /&gt;
;5&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
clockFlags		equ 3Fh&lt;br /&gt;
notMDYMode		equ 0		;0 = M/D/Y format&lt;br /&gt;
isYMDMode		equ 1		;1 = Y/M/D format&lt;br /&gt;
is24Hour		equ 2		;1 = clock in 24 hour mode&lt;br /&gt;
inAfternoon		equ 3		;1 = current time is in afternoon (PM) (I think)&lt;br /&gt;
useTokensInString	equ 4		;1 = use tokens instead of characters when displaying clock as string (for getTmStr and getDtStr vs. MODE screen) (keep this reset)&lt;br /&gt;
displayClock		equ 5		;1 = display clock (this is set every second, reset otherwise)&lt;br /&gt;
clockOn			equ 6		;1 = clock on&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag1		equ 40h&lt;br /&gt;
;1 Reset in I/O receiving code, doesn't seem to be used anywhere else&lt;br /&gt;
usbReceiveZone1		equ 2		;1 = receive to RAM pages 3/2 (&amp;quot;zone 1&amp;quot;)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag2		equ 41h&lt;br /&gt;
;0&lt;br /&gt;
;2&lt;br /&gt;
noUSBHostInit		equ 3		;1 = _InitSpecificUSBDevice must fail&lt;br /&gt;
usbDataWaiting		equ 5&lt;br /&gt;
;6&lt;br /&gt;
;7&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag3		equ 42h&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
USBFlag4		equ 43h&lt;br /&gt;
usbTimeoutError		equ 0		;1 = USB timeout error (crystal timer expired)&lt;br /&gt;
;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;Character Font Equates  &lt;br /&gt;
;-------------------------------&lt;br /&gt;
LrecurN			equ 001h&lt;br /&gt;
LrecurU			equ 002h&lt;br /&gt;
LrecurV			equ 003h&lt;br /&gt;
LrecurW			equ 004h&lt;br /&gt;
Lconvert		equ 005h&lt;br /&gt;
LsqUp			equ 006h&lt;br /&gt;
LsqDown			equ 007h&lt;br /&gt;
Lintegral		equ 008h&lt;br /&gt;
Lcross			equ 009h&lt;br /&gt;
LboxIcon 		equ 00Ah&lt;br /&gt;
LcrossIcon 		equ 00Bh&lt;br /&gt;
LdotIcon 		equ 00Ch&lt;br /&gt;
LsubT   		equ 00Dh ;small capital T for parametric mode.&lt;br /&gt;
LcubeR  		equ 00Eh ;slightly different 3 for cubed root.&lt;br /&gt;
LhexF			equ 00Fh&lt;br /&gt;
Lroot			equ 010h&lt;br /&gt;
Linverse		equ 011h&lt;br /&gt;
Lsquare			equ 012h&lt;br /&gt;
Langle			equ 013h&lt;br /&gt;
Ldegree			equ 014h&lt;br /&gt;
Lradian			equ 015h&lt;br /&gt;
Ltranspose		equ 016h&lt;br /&gt;
LLE			equ 017h&lt;br /&gt;
LNE			equ 018h&lt;br /&gt;
LGE			equ 019h&lt;br /&gt;
Lneg			equ 01Ah&lt;br /&gt;
Lexponent		equ 01Bh&lt;br /&gt;
Lstore			equ 01Ch&lt;br /&gt;
Lten			equ 01Dh&lt;br /&gt;
LupArrow		equ 01Eh&lt;br /&gt;
LdownArrow		equ 01Fh&lt;br /&gt;
Lspace			equ 020h&lt;br /&gt;
Lexclam			equ 021h&lt;br /&gt;
Lquote			equ 022h&lt;br /&gt;
Lpound			equ 023h&lt;br /&gt;
Lfourth			equ 024h&lt;br /&gt;
Lpercent		equ 025h&lt;br /&gt;
Lampersand		equ 026h&lt;br /&gt;
Lapostrophe		equ 027h&lt;br /&gt;
LlParen			equ 028h&lt;br /&gt;
LrParen			equ 029h&lt;br /&gt;
Lasterisk		equ 02Ah&lt;br /&gt;
LplusSign		equ 02Bh&lt;br /&gt;
Lcomma			equ 02Ch&lt;br /&gt;
Ldash			equ 02Dh&lt;br /&gt;
Lperiod			equ 02Eh&lt;br /&gt;
Lslash			equ 02Fh&lt;br /&gt;
L0			equ 030h&lt;br /&gt;
L1			equ 031h&lt;br /&gt;
L2			equ 032h&lt;br /&gt;
L3			equ 033h&lt;br /&gt;
L4			equ 034h&lt;br /&gt;
L5			equ 035h&lt;br /&gt;
L6			equ 036h&lt;br /&gt;
L7			equ 037h&lt;br /&gt;
L8			equ 038h&lt;br /&gt;
L9			equ 039h&lt;br /&gt;
Lcolon			equ 03Ah&lt;br /&gt;
Lsemicolon		equ 03Bh&lt;br /&gt;
LLT			equ 03Ch&lt;br /&gt;
LEQ			equ 03Dh&lt;br /&gt;
LGT			equ 03Eh&lt;br /&gt;
Lquestion		equ 03Fh&lt;br /&gt;
LatSign			equ 040h&lt;br /&gt;
LcapA			equ 041h&lt;br /&gt;
LcapB			equ 042h&lt;br /&gt;
LcapC			equ 043h&lt;br /&gt;
LcapD			equ 044h&lt;br /&gt;
LcapE			equ 045h&lt;br /&gt;
LcapF			equ 046h&lt;br /&gt;
LcapG			equ 047h&lt;br /&gt;
LcapH			equ 048h&lt;br /&gt;
LcapI			equ 049h&lt;br /&gt;
LcapJ			equ 04Ah&lt;br /&gt;
LcapK			equ 04Bh&lt;br /&gt;
LcapL			equ 04Ch&lt;br /&gt;
LcapM			equ 04Dh&lt;br /&gt;
LcapN			equ 04Eh&lt;br /&gt;
LcapO			equ 04Fh&lt;br /&gt;
LcapP			equ 050h&lt;br /&gt;
LcapQ			equ 051h&lt;br /&gt;
LcapR			equ 052h&lt;br /&gt;
LcapS			equ 053h&lt;br /&gt;
LcapT			equ 054h&lt;br /&gt;
LcapU			equ 055h&lt;br /&gt;
LcapV			equ 056h&lt;br /&gt;
LcapW			equ 057h&lt;br /&gt;
LcapX			equ 058h&lt;br /&gt;
LcapY			equ 059h&lt;br /&gt;
LcapZ			equ 05Ah&lt;br /&gt;
Ltheta			equ 05Bh&lt;br /&gt;
Lbackslash		equ 05Ch&lt;br /&gt;
LrBrack			equ 05Dh&lt;br /&gt;
Lcaret			equ 05Eh&lt;br /&gt;
Lunderscore		equ 05Fh&lt;br /&gt;
Lbackquote		equ 060h&lt;br /&gt;
La			equ 061h&lt;br /&gt;
Lb			equ 062h&lt;br /&gt;
Lc			equ 063h&lt;br /&gt;
Ld			equ 064h&lt;br /&gt;
Le			equ 065h&lt;br /&gt;
Lf			equ 066h&lt;br /&gt;
Lg			equ 067h&lt;br /&gt;
Lh			equ 068h&lt;br /&gt;
Li			equ 069h&lt;br /&gt;
Lj			equ 06Ah&lt;br /&gt;
Lk			equ 06Bh&lt;br /&gt;
Ll			equ 06Ch&lt;br /&gt;
Lm			equ 06Dh&lt;br /&gt;
Ln			equ 06Eh&lt;br /&gt;
Lo			equ 06Fh&lt;br /&gt;
Lp			equ 070h&lt;br /&gt;
Lq			equ 071h&lt;br /&gt;
Lr			equ 072h&lt;br /&gt;
Ls			equ 073h&lt;br /&gt;
Lt			equ 074h&lt;br /&gt;
Lu			equ 075h&lt;br /&gt;
Lv			equ 076h&lt;br /&gt;
Lw			equ 077h&lt;br /&gt;
Lx			equ 078h&lt;br /&gt;
Ly			equ 079h&lt;br /&gt;
Lz			equ 07Ah&lt;br /&gt;
LlBrace			equ 07Bh&lt;br /&gt;
Lbar			equ 07Ch&lt;br /&gt;
LrBrace			equ 07Dh&lt;br /&gt;
Ltilde			equ 07Eh&lt;br /&gt;
LinvEQ			equ 07Fh&lt;br /&gt;
Lsub0			equ 080h&lt;br /&gt;
Lsub1			equ 081h&lt;br /&gt;
Lsub2			equ 082h&lt;br /&gt;
Lsub3			equ 083h&lt;br /&gt;
Lsub4			equ 084h&lt;br /&gt;
Lsub5			equ 085h&lt;br /&gt;
Lsub6			equ 086h&lt;br /&gt;
Lsub7			equ 087h&lt;br /&gt;
Lsub8			equ 088h&lt;br /&gt;
Lsub9			equ 089h&lt;br /&gt;
LcapAAcute		equ 08Ah&lt;br /&gt;
LcapAGrave		equ 08Bh&lt;br /&gt;
LcapACaret		equ 08Ch&lt;br /&gt;
LcapADier		equ 08Dh&lt;br /&gt;
LaAcute			equ 08Eh&lt;br /&gt;
LaGrave			equ 08Fh&lt;br /&gt;
LaCaret			equ 090h&lt;br /&gt;
LaDier			equ 091h&lt;br /&gt;
LcapEAcute		equ 092h&lt;br /&gt;
LcapEGrave		equ 093h&lt;br /&gt;
LcapECaret		equ 094h&lt;br /&gt;
LcapEDier		equ 095h&lt;br /&gt;
LeAcute			equ 096h&lt;br /&gt;
LeGrave			equ 097h&lt;br /&gt;
LeCaret			equ 098h&lt;br /&gt;
LeDier			equ 099h&lt;br /&gt;
LcapIAcute		equ 09Ah&lt;br /&gt;
LcapIGrave		equ 09Bh&lt;br /&gt;
LcapICaret		equ 09Ch&lt;br /&gt;
LcapIDier		equ 09Dh&lt;br /&gt;
LiAcute			equ 09Eh&lt;br /&gt;
LiGrave			equ 09Fh&lt;br /&gt;
LiCaret			equ 0A0h&lt;br /&gt;
LiDier			equ 0A1h&lt;br /&gt;
LcapOAcute		equ 0A2h&lt;br /&gt;
LcapOGrave		equ 0A3h&lt;br /&gt;
LcapOCaret		equ 0A4h&lt;br /&gt;
LcapODier		equ 0A5h&lt;br /&gt;
LoAcute			equ 0A6h&lt;br /&gt;
LoGrave			equ 0A7h&lt;br /&gt;
LoCaret			equ 0A8h&lt;br /&gt;
LoDier			equ 0A9h&lt;br /&gt;
LcapUAcute		equ 0AAh&lt;br /&gt;
LcapUGrave		equ 0ABh&lt;br /&gt;
LcapUCaret		equ 0ACh&lt;br /&gt;
LcapUDier		equ 0ADh&lt;br /&gt;
LuAcute			equ 0AEh&lt;br /&gt;
LuGrave			equ 0AFh&lt;br /&gt;
LuCaret			equ 0B0h&lt;br /&gt;
LuDier			equ 0B1h&lt;br /&gt;
LcapCCed		equ 0B2h&lt;br /&gt;
LcCed			equ 0B3h&lt;br /&gt;
LcapNTilde		equ 0B4h&lt;br /&gt;
LnTilde			equ 0B5h&lt;br /&gt;
Laccent			equ 0B6h&lt;br /&gt;
Lgrave			equ 0B7h&lt;br /&gt;
Ldieresis		equ 0B8h&lt;br /&gt;
LquesDown		equ 0B9h&lt;br /&gt;
LexclamDown		equ 0BAh&lt;br /&gt;
Lalpha			equ 0BBh&lt;br /&gt;
Lbeta			equ 0BCh&lt;br /&gt;
Lgamma			equ 0BDh&lt;br /&gt;
LcapDelta		equ 0BEh&lt;br /&gt;
Ldelta			equ 0BFh&lt;br /&gt;
Lepsilon		equ 0C0h&lt;br /&gt;
LlBrack 		equ 0C1h&lt;br /&gt;
Llambda			equ 0C2h&lt;br /&gt;
Lmu			equ 0C3h&lt;br /&gt;
Lpi			equ 0C4h&lt;br /&gt;
Lrho			equ 0C5h&lt;br /&gt;
LcapSigma		equ 0C6h&lt;br /&gt;
Lsigma			equ 0C7h&lt;br /&gt;
Ltau			equ 0C8h&lt;br /&gt;
Lphi			equ 0C9h&lt;br /&gt;
LcapOmega		equ 0CAh&lt;br /&gt;
LxMean			equ 0CBh&lt;br /&gt;
LyMean			equ 0CCh&lt;br /&gt;
LsupX			equ 0CDh&lt;br /&gt;
Lellipsis		equ 0CEh&lt;br /&gt;
Lleft			equ 0CFh&lt;br /&gt;
Lblock			equ 0D0h&lt;br /&gt;
Lper			equ 0D1h&lt;br /&gt;
Lhyphen			equ 0D2h&lt;br /&gt;
Larea			equ 0D3h&lt;br /&gt;
Ltemp			equ 0D4h&lt;br /&gt;
Lcube			equ 0D5h&lt;br /&gt;
Lenter			equ 0D6h&lt;br /&gt;
LimagI			equ 0D7h&lt;br /&gt;
Lphat			equ 0D8h&lt;br /&gt;
Lchi			equ 0D9h&lt;br /&gt;
LstatF			equ 0DAh&lt;br /&gt;
Llne			equ 0DBh&lt;br /&gt;
LlistL			equ 0DCh&lt;br /&gt;
LfinanN 		equ 0DDh&lt;br /&gt;
L2_r_paren 		equ 0DEh&lt;br /&gt;
LblockArrow     	equ 0DFh&lt;br /&gt;
LcurO   		equ 0E0h&lt;br /&gt;
LcurO2  		equ 0E1h&lt;br /&gt;
LcurOcapA       	equ 0E2h&lt;br /&gt;
LcurOa  		equ 0E3h&lt;br /&gt;
LcurI   		equ 0E4h&lt;br /&gt;
LcurI2  		equ 0E5h&lt;br /&gt;
LcurIcapA       	equ 0E6h&lt;br /&gt;
LcurIa  		equ 0E7h&lt;br /&gt;
LGline          	equ 0E8h ; = 0&lt;br /&gt;
LGthick         	equ 0E9h ; = 1&lt;br /&gt;
LGabove			equ 0EAh ; = 2&lt;br /&gt;
LGbelow			equ 0EBh ; = 3&lt;br /&gt;
LGpath			equ 0ECh ; = 4&lt;br /&gt;
LGanimate		equ 0EDh ; = 5&lt;br /&gt;
LGdot			equ 0EEh ; = 6&lt;br /&gt;
LUpBlk			equ 0EFh ;Up arrow and Block in solver&lt;br /&gt;
LDnBlk			equ 0F0h ;Down arrow and Block in solver&lt;br /&gt;
LcurFull		equ 0F1h ;note: must be last char (PutMap checks)&lt;br /&gt;
&lt;br /&gt;
;(MenuCurrent) Values&lt;br /&gt;
;--------------------------&lt;br /&gt;
mConfirmation		equ 01h&lt;br /&gt;
mApps			equ 02h&lt;br /&gt;
mProgramHome		equ 03h&lt;br /&gt;
mPrgm_Run		equ 00h&lt;br /&gt;
mPrgm_Edit		equ 01h&lt;br /&gt;
mPrgm_New		equ 02h&lt;br /&gt;
mZoom			equ 04h&lt;br /&gt;
mZoom_Zoom		equ 00h&lt;br /&gt;
mZoom_Memory		equ 01h&lt;br /&gt;
mDraw			equ 05h&lt;br /&gt;
mDraw_Draw		equ 00h&lt;br /&gt;
mDraw_Points		equ 01h&lt;br /&gt;
mDraw_Store		equ 02h&lt;br /&gt;
mStatPlots		equ 06h&lt;br /&gt;
mStat			equ 07h&lt;br /&gt;
mStat_Edit		equ 00h&lt;br /&gt;
mStat_Calc		equ 01h&lt;br /&gt;
mStat_Tests		equ 02h&lt;br /&gt;
mMath			equ 08h&lt;br /&gt;
mMath_Math		equ 00h&lt;br /&gt;
mMath_Number		equ 01h&lt;br /&gt;
mMath_Complex		equ 02h&lt;br /&gt;
mMath_Prob		equ 03h&lt;br /&gt;
mTest			equ 09h&lt;br /&gt;
mTest_Test		equ 00h&lt;br /&gt;
mTest_Logic		equ 01h&lt;br /&gt;
mVars			equ 0Ah&lt;br /&gt;
mVars_Vars		equ 00h&lt;br /&gt;
mVars_YVars		equ 01h&lt;br /&gt;
mMemory			equ 0Ch&lt;br /&gt;
mMatrix			equ 0Dh&lt;br /&gt;
mMatrix_Name		equ 00h&lt;br /&gt;
mMatrix_Math		equ 01h&lt;br /&gt;
mMatrix_Edit		equ 02h&lt;br /&gt;
mDistr			equ 0Eh&lt;br /&gt;
mDistr_Distr		equ 00h&lt;br /&gt;
mDistr_Draw		equ 01h&lt;br /&gt;
mAngle			equ 0Fh&lt;br /&gt;
mList			equ 10h&lt;br /&gt;
mList_Names		equ 00h&lt;br /&gt;
mList_Ops		equ 01h&lt;br /&gt;
mList_Math		equ 02h&lt;br /&gt;
mCalculate		equ 11h&lt;br /&gt;
mVarsWin		equ 14h&lt;br /&gt;
mVarsWin_XY		equ 00h&lt;br /&gt;
mVarsWin_TTh		equ 01h&lt;br /&gt;
mVarsWin_UVW		equ 02h&lt;br /&gt;
mVarsZoom		equ 15h&lt;br /&gt;
mVarsZoom_ZXY		equ 00h&lt;br /&gt;
mVarsZoom_ZT		equ 01h&lt;br /&gt;
mVarsZoom_UVW		equ 02h&lt;br /&gt;
mVarsGDB		equ 16h&lt;br /&gt;
mVarsPics		equ 17h&lt;br /&gt;
mVarsStrings		equ 18h&lt;br /&gt;
mVarsStat		equ 19h&lt;br /&gt;
mVarsStat_XY		equ 00h&lt;br /&gt;
mVarsStat_Sigma		equ 01h&lt;br /&gt;
mVarsStat_EQ		equ 02h&lt;br /&gt;
mVarsStat_Test		equ 03h&lt;br /&gt;
mVarsStat_Pts		equ 04h&lt;br /&gt;
mVarsTable		equ 1Ah&lt;br /&gt;
mVarsYEqu		equ 1Bh&lt;br /&gt;
mVarsParametric		equ 1Ch&lt;br /&gt;
mVarsPolar		equ 1Dh&lt;br /&gt;
mVarsFnOnOff		equ 1Eh&lt;br /&gt;
mMemReset		equ 1Fh&lt;br /&gt;
mMemReset_RAM		equ 00h&lt;br /&gt;
mMemReset_ROM		equ 01h&lt;br /&gt;
mMemReset_All		equ 02h&lt;br /&gt;
mMemMgmtDel		equ 20h&lt;br /&gt;
mMemResetDefaults	equ 21h&lt;br /&gt;
mMemResetRAMAll		equ 23h&lt;br /&gt;
mMemResetROMVars	equ 24h&lt;br /&gt;
mMemResetROMApps	equ 25h&lt;br /&gt;
mMemResetROMAll		equ 26h&lt;br /&gt;
mMemResetAll		equ 27h&lt;br /&gt;
mGroup			equ 28h&lt;br /&gt;
mGroup_New		equ 00h&lt;br /&gt;
mGroup_Ungroup		equ 01h&lt;br /&gt;
mGroupVars		equ 29h&lt;br /&gt;
mProgramEdit		equ 2Ah&lt;br /&gt;
mPrgmEd_Ctrl		equ 00h&lt;br /&gt;
mPrgmEd_IO		equ 01h&lt;br /&gt;
mPrgmEd_Exec		equ 02h&lt;br /&gt;
mPrgmZoom		equ 2Bh&lt;br /&gt;
mPrgmZoom_Zoom		equ 00h&lt;br /&gt;
mPrgmZoom_Mem		equ 01h&lt;br /&gt;
mPrgmDraw		equ 2Ch&lt;br /&gt;
mPrgmDraw_Draw		equ 00h&lt;br /&gt;
mPrgmDraw_Pt		equ 01h&lt;br /&gt;
mPrgmDraw_Store		equ 02h&lt;br /&gt;
mPrgmStatPlot		equ 2Dh&lt;br /&gt;
mPrgmSP_Plots		equ 00h&lt;br /&gt;
mPrgmSP_Type		equ 01h&lt;br /&gt;
mPrgmSP_Mark		equ 02h&lt;br /&gt;
mPrgmStat		equ 2Eh&lt;br /&gt;
mPrgmStat_Edit		equ 00h&lt;br /&gt;
mPrgmStat_Calc		equ 01h&lt;br /&gt;
mPrgmStat_Tests		equ 02h&lt;br /&gt;
mPrgmMath		equ 2Fh&lt;br /&gt;
mPrgmMath_Math		equ 00h&lt;br /&gt;
mPrgmMath_Num		equ 01h&lt;br /&gt;
mPrgmMath_Cplx		equ 02h&lt;br /&gt;
mPrgmMath_Prob		equ 03h&lt;br /&gt;
mLink			equ 30h&lt;br /&gt;
mLink_Send		equ 00h&lt;br /&gt;
mLink_Recieve		equ 01h&lt;br /&gt;
mLinkTrasmit		equ 31h&lt;br /&gt;
mLinkXmit_Xmit		equ 01h&lt;br /&gt;
mGarbageCollect		equ 3Fh&lt;br /&gt;
mSelectGroupVars	equ 40h&lt;br /&gt;
mSelGrpVars_Sel		equ 00h&lt;br /&gt;
mSelGrpVars_Grp		equ 01h&lt;br /&gt;
mDuplicateName		equ 42h&lt;br /&gt;
mCatalog		equ 45h&lt;br /&gt;
mFinance		equ 22h&lt;br /&gt;
mFinance_Calc		equ 00h&lt;br /&gt;
mFinance_Vars		equ 01h&lt;br /&gt;
&lt;br /&gt;
;Keypress Equates&lt;br /&gt;
;-------------------------------&lt;br /&gt;
kRight			equ 001h&lt;br /&gt;
kLeft			equ 002h&lt;br /&gt;
kUp			equ 003h&lt;br /&gt;
kDown			equ 004h&lt;br /&gt;
kEnter			equ 005h&lt;br /&gt;
kAlphaEnter		equ 006h&lt;br /&gt;
kAlphaUp		equ 007h&lt;br /&gt;
kAlphaDown		equ 008h&lt;br /&gt;
kClear			equ 009h&lt;br /&gt;
kDel			equ 00Ah&lt;br /&gt;
kIns			equ 00Bh&lt;br /&gt;
kRecall			equ 00Ch&lt;br /&gt;
kLastEnt		equ 00Dh&lt;br /&gt;
kBOL			equ 00Eh&lt;br /&gt;
kEOL			equ 00Fh&lt;br /&gt;
&lt;br /&gt;
kSelAll			equ 010h&lt;br /&gt;
kUnselAll		equ 011h&lt;br /&gt;
kLtoTI82		equ 012h&lt;br /&gt;
kBackup			equ 013h&lt;br /&gt;
kRecieve		equ 014h&lt;br /&gt;
kLnkQuit		equ 015h&lt;br /&gt;
kTrans			equ 016h&lt;br /&gt;
kRename			equ 017h&lt;br /&gt;
kOverw			equ 018h&lt;br /&gt;
kOmit			equ 019h&lt;br /&gt;
kCont			equ 01Ah&lt;br /&gt;
kSendID			equ 01Bh&lt;br /&gt;
kSendSW			equ 01Ch&lt;br /&gt;
kYes			equ 01Dh&lt;br /&gt;
kNoWay			equ 01Eh&lt;br /&gt;
kvSendType		equ 01Fh&lt;br /&gt;
kOverWAll		equ 020h&lt;br /&gt;
kNo			equ 025h&lt;br /&gt;
kKReset			equ 026h&lt;br /&gt;
kApp			equ 027h&lt;br /&gt;
kDoug			equ 028h&lt;br /&gt;
kListflag		equ 029h&lt;br /&gt;
menuStart		equ 02Bh&lt;br /&gt;
kAreYouSure		equ 02Bh&lt;br /&gt;
kAppsMenu		equ 02Ch&lt;br /&gt;
kPrgm			equ 02Dh&lt;br /&gt;
kZoom			equ 02Eh&lt;br /&gt;
kDraw			equ 02Fh&lt;br /&gt;
kSPlot			equ 030h&lt;br /&gt;
kStat			equ 031h&lt;br /&gt;
kMath			equ 032h&lt;br /&gt;
kTest			equ 033h&lt;br /&gt;
kChar			equ 034h&lt;br /&gt;
kVars			equ 035h&lt;br /&gt;
kMem			equ 036h&lt;br /&gt;
kMatrix			equ 037h&lt;br /&gt;
kDist			equ 038h&lt;br /&gt;
kAngle			equ 039h&lt;br /&gt;
kList			equ 03Ah&lt;br /&gt;
kCalc			equ 03Bh&lt;br /&gt;
kFin			equ 03Ch&lt;br /&gt;
menuEnd			equ kFin&lt;br /&gt;
kCatalog		equ 03Eh&lt;br /&gt;
kInputDone		equ 03Fh&lt;br /&gt;
kOff			equ kInputDone&lt;br /&gt;
kQuit			equ 040h&lt;br /&gt;
appStart		equ kQuit&lt;br /&gt;
kLinkIO			equ 041h&lt;br /&gt;
kMatrixEd		equ 042h&lt;br /&gt;
kStatEd			equ 043h&lt;br /&gt;
kGraph			equ 044h&lt;br /&gt;
kMode			equ 045h&lt;br /&gt;
kPrgmEd			equ 046h ;PROGRAM EDIT&lt;br /&gt;
kPrgmCr			equ 047h ;PROGRAM CREATE&lt;br /&gt;
kWindow			equ 048h ;RANGE EDITOR&lt;br /&gt;
kYequ			equ 049h ;EQUATION EDITOR&lt;br /&gt;
kTable			equ 04Ah ;TABLE EDITOR&lt;br /&gt;
kTblSet			equ 04Bh ;TABLE SET&lt;br /&gt;
kChkRAM			equ 04Ch ;CHECK RAM (About screen)&lt;br /&gt;
kDelMem			equ 04Dh ;DELETE MEM&lt;br /&gt;
kResetMem		equ 04Eh ;RESET MEM&lt;br /&gt;
kResetDef		equ 04Fh ;RESET DEFAULT&lt;br /&gt;
kPrgmInput		equ 050h ;PROGRAM INPUT&lt;br /&gt;
kZFactEd		equ 051h ;ZOOM FACTOR EDITOR&lt;br /&gt;
kError			equ 052h ;ERROR&lt;br /&gt;
kSolveTVM		equ 053h ;TVM SOLVER&lt;br /&gt;
kSolveRoot		equ 054h ;SOLVE EDITOR&lt;br /&gt;
kStatP			equ 055h ;stat plot&lt;br /&gt;
kInfStat		equ 056h ;Inferential Statistic&lt;br /&gt;
kFormat			equ 057h ;FORMAT&lt;br /&gt;
kExtApps		equ 058h ;External Applications.     NEW&lt;br /&gt;
kNewApps		equ 059h ;New Apps for Cerberus.&lt;br /&gt;
append			equ kNewApps&lt;br /&gt;
echoStart1		equ 05Ah&lt;br /&gt;
kTrace			equ 05Ah&lt;br /&gt;
kZFit			equ 05Bh&lt;br /&gt;
kZIn			equ 05Ch&lt;br /&gt;
kZOut			equ 05Dh&lt;br /&gt;
kZPrev			equ 05Eh&lt;br /&gt;
kBox			equ 05Fh&lt;br /&gt;
kDecml			equ 060h&lt;br /&gt;
kSetZm			equ 061h&lt;br /&gt;
kSquar			equ 062h&lt;br /&gt;
kStd			equ 063h&lt;br /&gt;
kTrig			equ 064h&lt;br /&gt;
kUsrZm			equ 065h&lt;br /&gt;
kZSto			equ 066h&lt;br /&gt;
kZInt			equ 067h&lt;br /&gt;
kZStat			equ 068h&lt;br /&gt;
echoStart2		equ 069h&lt;br /&gt;
kSelect			equ 069h&lt;br /&gt;
kCircl			equ 06Ah&lt;br /&gt;
kClDrw			equ 06Bh&lt;br /&gt;
kLine			equ 06Ch&lt;br /&gt;
kPen			equ 06Dh&lt;br /&gt;
kPtChg			equ 06Eh&lt;br /&gt;
kPtOff			equ 06Fh&lt;br /&gt;
kPtOn			equ 070h&lt;br /&gt;
kVert			equ 071h&lt;br /&gt;
kHoriz			equ 072h&lt;br /&gt;
kText			equ 073h&lt;br /&gt;
kTanLn			equ 074h&lt;br /&gt;
kEval			equ 075h&lt;br /&gt;
kInters			equ 076h&lt;br /&gt;
kDYDX			equ 077h&lt;br /&gt;
kFnIntg			equ 078h&lt;br /&gt;
kRootG			equ 079h&lt;br /&gt;
kDYDT			equ 07Ah&lt;br /&gt;
kDXDT			equ 07Bh&lt;br /&gt;
kDRDo			equ 07Ch&lt;br /&gt;
KGFMin			equ 07Dh&lt;br /&gt;
KGFMax			equ 07Eh&lt;br /&gt;
EchoStart		equ 07Fh&lt;br /&gt;
kListName		equ 07Fh&lt;br /&gt;
kAdd			equ 080h&lt;br /&gt;
kSub			equ 081h&lt;br /&gt;
kMul			equ 082h&lt;br /&gt;
kDiv			equ 083h&lt;br /&gt;
kExpon			equ 084h&lt;br /&gt;
kLParen			equ 085h&lt;br /&gt;
kRParen			equ 086h&lt;br /&gt;
kLBrack			equ 087h&lt;br /&gt;
kRBrack			equ 088h&lt;br /&gt;
kShade			equ 089h&lt;br /&gt;
kStore			equ 08Ah&lt;br /&gt;
kComma			equ 08Bh&lt;br /&gt;
kChs			equ 08Ch&lt;br /&gt;
kDecPnt			equ 08Dh&lt;br /&gt;
k0			equ 08Eh&lt;br /&gt;
k1			equ 08Fh&lt;br /&gt;
k2			equ 090h&lt;br /&gt;
k3			equ 091h&lt;br /&gt;
k4			equ 092h&lt;br /&gt;
k5			equ 093h&lt;br /&gt;
k6			equ 094h&lt;br /&gt;
k7			equ 095h&lt;br /&gt;
k8			equ 096h&lt;br /&gt;
k9			equ 097h&lt;br /&gt;
kEE			equ 098h&lt;br /&gt;
kSpace			equ 099h&lt;br /&gt;
kCapA			equ 09Ah&lt;br /&gt;
kCapB			equ 09Bh&lt;br /&gt;
kCapC			equ 09Ch&lt;br /&gt;
kCapD			equ 09Dh&lt;br /&gt;
kCapE			equ 09Eh&lt;br /&gt;
kCapF			equ 09Fh&lt;br /&gt;
kCapG			equ 0A0h&lt;br /&gt;
kCapH			equ 0A1h&lt;br /&gt;
kCapI			equ 0A2h&lt;br /&gt;
kCapJ			equ 0A3h&lt;br /&gt;
kCapK			equ 0A4h&lt;br /&gt;
kCapL			equ 0A5h&lt;br /&gt;
kCapM			equ 0A6h&lt;br /&gt;
kCapN			equ 0A7h&lt;br /&gt;
kCapO			equ 0A8h&lt;br /&gt;
kCapP			equ 0A9h&lt;br /&gt;
kCapQ			equ 0AAh&lt;br /&gt;
kCapR			equ 0ABh&lt;br /&gt;
kCapS			equ 0ACh&lt;br /&gt;
kCapT			equ 0ADh&lt;br /&gt;
kCapU			equ 0AEh&lt;br /&gt;
kCapV			equ 0AFh&lt;br /&gt;
kCapW			equ 0B0h&lt;br /&gt;
kCapX			equ 0B1h&lt;br /&gt;
kCapY			equ 0B2h&lt;br /&gt;
kCapZ			equ 0B3h&lt;br /&gt;
kVarx			equ 0B4h&lt;br /&gt;
kPi			equ 0B5h&lt;br /&gt;
kInv			equ 0B6h&lt;br /&gt;
kSin			equ 0B7h&lt;br /&gt;
kASin			equ 0B8h&lt;br /&gt;
kCos			equ 0B9h&lt;br /&gt;
kACos			equ 0BAh&lt;br /&gt;
kTan			equ 0BBh&lt;br /&gt;
kATan			equ 0BCh&lt;br /&gt;
kSquare			equ 0BDh&lt;br /&gt;
kSqrt			equ 0BEh&lt;br /&gt;
kLn			equ 0BFh&lt;br /&gt;
kExp			equ 0C0h&lt;br /&gt;
kLog			equ 0C1h&lt;br /&gt;
kALog			equ 0C2h&lt;br /&gt;
kToABC			equ 0C3h&lt;br /&gt;
kClrTbl			equ 0C4h&lt;br /&gt;
kAns			equ 0C5h&lt;br /&gt;
kColon			equ 0C6h&lt;br /&gt;
kNDeriv			equ 0C7h&lt;br /&gt;
kFnInt			equ 0C8h&lt;br /&gt;
kRoot			equ 0C9h&lt;br /&gt;
kQuest			equ 0CAh&lt;br /&gt;
kQuote			equ 0CBh&lt;br /&gt;
kTheta			equ 0CCh&lt;br /&gt;
kIf			equ 0CDh&lt;br /&gt;
kThen			equ 0CEh&lt;br /&gt;
kElse			equ 0CFh&lt;br /&gt;
kFor			equ 0D0h&lt;br /&gt;
kWhile			equ 0D1h&lt;br /&gt;
kRepeat			equ 0D2h&lt;br /&gt;
kEnd			equ 0D3h&lt;br /&gt;
kPause			equ 0D4h&lt;br /&gt;
kLbl			equ 0D5h&lt;br /&gt;
kGoto			equ 0D6h&lt;br /&gt;
kISG			equ 0D7h&lt;br /&gt;
kDSL			equ 0D8h&lt;br /&gt;
kMenu			equ 0D9h&lt;br /&gt;
kExec			equ 0DAh&lt;br /&gt;
kReturn			equ 0DBh&lt;br /&gt;
kStop			equ 0DCh&lt;br /&gt;
kInput			equ 0DDh&lt;br /&gt;
kPrompt			equ 0DEh&lt;br /&gt;
kDisp			equ 0DFh&lt;br /&gt;
kDispG			equ 0E0h&lt;br /&gt;
kDispT			equ 0E1h&lt;br /&gt;
kOutput			equ 0E2h&lt;br /&gt;
kGetKey			equ 0E3h&lt;br /&gt;
kClrHome		equ 0E4h&lt;br /&gt;
kPrtScr			equ 0E5h&lt;br /&gt;
kSinH			equ 0E6h&lt;br /&gt;
kCosH			equ 0E7h&lt;br /&gt;
kTanH			equ 0E8h&lt;br /&gt;
kASinH			equ 0E9h&lt;br /&gt;
kACosH			equ 0EAh&lt;br /&gt;
kATanH			equ 0EBh&lt;br /&gt;
kLBrace			equ 0ECh&lt;br /&gt;
kRBrace			equ 0EDh&lt;br /&gt;
kI			equ 0EEh&lt;br /&gt;
kCONSTeA		equ 0EFh&lt;br /&gt;
kPlot3			equ 0F0h&lt;br /&gt;
kFMin			equ 0F1h&lt;br /&gt;
kFMax			equ 0F2h&lt;br /&gt;
kL1A			equ 0F3h&lt;br /&gt;
kL2A			equ 0F4h&lt;br /&gt;
kL3A			equ 0F5h&lt;br /&gt;
kL4A			equ 0F6h&lt;br /&gt;
kL5A			equ 0F7h&lt;br /&gt;
kL6A			equ 0F8h&lt;br /&gt;
kunA			equ 0F9h&lt;br /&gt;
kvnA			equ 0FAh&lt;br /&gt;
kwnA			equ 0FBh&lt;br /&gt;
&lt;br /&gt;
;THIS KEY MEANS THAT IT IS A 2 BYTE KEYCODE&lt;br /&gt;
;THERE ARE 2 OF THESE KEYS; BE CAREFUL WITH USAGE&lt;br /&gt;
;------------------------------------------------&lt;br /&gt;
kExtendEcho2		equ 0FCh&lt;br /&gt;
&lt;br /&gt;
;THIS KEY MEANS THAT THE KEY PRESS IS ONE THAT ECHOS&lt;br /&gt;
;INTO A BUFFER, AND IT IS A 2 BYTE KEY CODE, GO LOOK AT&lt;br /&gt;
;(EXTECHO) FOR THE KEY VALUE &lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
kExtendEcho		equ 0FEh&lt;br /&gt;
&lt;br /&gt;
kE1BT			equ 0&lt;br /&gt;
kDrawInv		equ kE1BT&lt;br /&gt;
kDrawF			equ kE1BT+1&lt;br /&gt;
kPixelOn		equ kE1BT+2&lt;br /&gt;
kPixelOff		equ kE1BT+3&lt;br /&gt;
kPxlTest		equ kE1BT+4&lt;br /&gt;
kRCGDB			equ kE1BT+5&lt;br /&gt;
kRCPic			equ kE1BT+6&lt;br /&gt;
kSTGDB			equ kE1BT+7&lt;br /&gt;
kSTPic			equ kE1BT+8&lt;br /&gt;
kAbs			equ kE1BT+9&lt;br /&gt;
kTEqu			equ kE1BT+10 ;==&lt;br /&gt;
kTNoteQ			equ kE1BT+11 ;&amp;lt;&amp;gt;&lt;br /&gt;
kTGT			equ kE1BT+12 ;&amp;gt;&lt;br /&gt;
kTGTE			equ kE1BT+13 ;&amp;gt;=&lt;br /&gt;
kTLT			equ kE1BT+14 ;&amp;lt;&lt;br /&gt;
kTLTE			equ kE1BT+15 ;&amp;lt;=&lt;br /&gt;
kAnd			equ kE1BT+16&lt;br /&gt;
kOr			equ kE1BT+17&lt;br /&gt;
kXor			equ kE1BT+18&lt;br /&gt;
kNot			equ kE1BT+19&lt;br /&gt;
kLR1			equ kE1BT+20&lt;br /&gt;
kXRoot			equ kE1BT+21&lt;br /&gt;
kCube			equ kE1BT+22&lt;br /&gt;
kCbRt			equ kE1BT+23 ;Cube ROOT&lt;br /&gt;
kToDec			equ kE1BT+24&lt;br /&gt;
kCubicR			equ kE1BT+25&lt;br /&gt;
kQuartR			equ kE1BT+26&lt;br /&gt;
kPlot1			equ kE1BT+27&lt;br /&gt;
kPlot2			equ kE1BT+28&lt;br /&gt;
kRound			equ kE1BT+29&lt;br /&gt;
kIPart			equ kE1BT+30&lt;br /&gt;
kFPart			equ kE1BT+31&lt;br /&gt;
kInt			equ kE1BT+32&lt;br /&gt;
kRand			equ kE1BT+33&lt;br /&gt;
kNPR			equ kE1BT+34&lt;br /&gt;
kNCR			equ kE1BT+35&lt;br /&gt;
kXFactorial		equ kE1BT+36&lt;br /&gt;
kRad			equ kE1BT+37&lt;br /&gt;
kDegr			equ kE1BT+38 ;DEGREES CONV&lt;br /&gt;
kAPost			equ kE1BT+39&lt;br /&gt;
kToDMS			equ kE1BT+40&lt;br /&gt;
kRToPo			equ kE1BT+41 ;R&lt;br /&gt;
kRToPr			equ kE1BT+42&lt;br /&gt;
kPToRx			equ kE1BT+43&lt;br /&gt;
kPToRy			equ kE1BT+44&lt;br /&gt;
kRowSwap		equ kE1BT+45&lt;br /&gt;
kRowPlus		equ kE1BT+46&lt;br /&gt;
kTimRow			equ kE1BT+47&lt;br /&gt;
kTRowP			equ kE1BT+48&lt;br /&gt;
kSortA			equ kE1BT+49&lt;br /&gt;
kSortD			equ kE1BT+50&lt;br /&gt;
kSeq			equ kE1BT+51&lt;br /&gt;
kMin			equ kE1BT+52&lt;br /&gt;
kMax			equ kE1BT+53&lt;br /&gt;
kMean			equ kE1BT+54&lt;br /&gt;
kMedian			equ kE1BT+55&lt;br /&gt;
kSum			equ kE1BT+56&lt;br /&gt;
kProd			equ kE1BT+57&lt;br /&gt;
kDet			equ kE1BT+58&lt;br /&gt;
kTransp			equ kE1BT+59&lt;br /&gt;
kDim			equ kE1BT+60&lt;br /&gt;
kFill			equ kE1BT+61&lt;br /&gt;
kIdent			equ kE1BT+62&lt;br /&gt;
kRandm			equ kE1BT+63&lt;br /&gt;
kAug			equ kE1BT+64&lt;br /&gt;
kOneVar			equ kE1BT+65&lt;br /&gt;
kTwoVar			equ kE1BT+66&lt;br /&gt;
kLR			equ kE1BT+67&lt;br /&gt;
kLRExp			equ kE1BT+68&lt;br /&gt;
kLRLn			equ kE1BT+69&lt;br /&gt;
kLRPwr			equ kE1BT+70&lt;br /&gt;
kMedMed			equ kE1BT+71&lt;br /&gt;
kQuad			equ kE1BT+72&lt;br /&gt;
kClrLst			equ kE1BT+73&lt;br /&gt;
kHist			equ kE1BT+74&lt;br /&gt;
kxyLine			equ kE1BT+75&lt;br /&gt;
kScatter		equ kE1BT+76&lt;br /&gt;
kmRad			equ kE1BT+77&lt;br /&gt;
kmDeg			equ kE1BT+78&lt;br /&gt;
kmNormF			equ kE1BT+79&lt;br /&gt;
kmSci			equ kE1BT+80&lt;br /&gt;
kmEng			equ kE1BT+81&lt;br /&gt;
kmFloat			equ kE1BT+82&lt;br /&gt;
kFix			equ kE1BT+83&lt;br /&gt;
kSplitOn		equ kE1BT+84&lt;br /&gt;
kFullScreen		equ kE1BT+85&lt;br /&gt;
kStndrd			equ kE1BT+86&lt;br /&gt;
kParam			equ kE1BT+87&lt;br /&gt;
kPolar			equ kE1BT+88&lt;br /&gt;
kSeqG			equ kE1BT+89&lt;br /&gt;
kAFillOn		equ kE1BT+90&lt;br /&gt;
kAFillOff		equ kE1BT+91&lt;br /&gt;
kACalcOn		equ kE1BT+92&lt;br /&gt;
kACalcOff		equ kE1BT+93&lt;br /&gt;
kFNOn			equ kE1BT+94&lt;br /&gt;
kFNOff			equ kE1BT+95&lt;br /&gt;
kPlotsOn		equ kE1BT+96&lt;br /&gt;
kPlotsOff		equ kE1BT+97&lt;br /&gt;
kPixelChg		equ kE1BT+98&lt;br /&gt;
kSendMBL		equ kE1BT+99&lt;br /&gt;
kRecvMBL		equ kE1BT+100&lt;br /&gt;
kBoxPlot		equ kE1BT+101&lt;br /&gt;
kBoxIcon		equ kE1BT+102&lt;br /&gt;
kCrossIcon		equ kE1BT+103&lt;br /&gt;
kDotIcon		equ kE1BT+104&lt;br /&gt;
kE2BT			equ kE1BT+105&lt;br /&gt;
kSeqential		equ kE2BT&lt;br /&gt;
kSimulG			equ kE2BT+1&lt;br /&gt;
kPolarG			equ kE2BT+2&lt;br /&gt;
kRectG			equ kE2BT+3&lt;br /&gt;
kCoordOn		equ kE2BT+4&lt;br /&gt;
kCoordOff		equ kE2BT+5&lt;br /&gt;
kDrawLine		equ kE2BT+6&lt;br /&gt;
kDrawDot		equ kE2BT+7&lt;br /&gt;
kAxisOn			equ kE2BT+8&lt;br /&gt;
kAxisOff		equ kE2BT+9&lt;br /&gt;
kGridOn			equ kE2BT+10&lt;br /&gt;
kGridOff		equ kE2BT+11&lt;br /&gt;
kLblOn			equ kE2BT+12&lt;br /&gt;
kLblOff			equ kE2BT+13&lt;br /&gt;
kL1			equ kE2BT+14&lt;br /&gt;
kL2			equ kE2BT+15&lt;br /&gt;
kL3			equ kE2BT+16&lt;br /&gt;
kL4			equ kE2BT+17&lt;br /&gt;
kL5			equ kE2BT+18&lt;br /&gt;
kL6			equ kE2BT+19&lt;br /&gt;
&lt;br /&gt;
;These keys are laid on top of existing keys to&lt;br /&gt;
;enable localization in the inferential stats editor.&lt;br /&gt;
;----------------------------------------------------&lt;br /&gt;
kinfData		equ kL1&lt;br /&gt;
kinfStats		equ kL1+1&lt;br /&gt;
kinfYes			equ kL1+2&lt;br /&gt;
kinfNo			equ kL1+3&lt;br /&gt;
kinfCalc		equ kL1+4&lt;br /&gt;
kinfDraw		equ kL1+5&lt;br /&gt;
kinfAlt1ne		equ kL1+6&lt;br /&gt;
kinfAlt1lt		equ kL1+7&lt;br /&gt;
kinfAlt1gt		equ kL1+8&lt;br /&gt;
kinfAlt2ne		equ kL1+9&lt;br /&gt;
kinfAlt2lt		equ kL1+10&lt;br /&gt;
kinfAlt2gt		equ kL1+11&lt;br /&gt;
kinfAlt3ne		equ kL1+12&lt;br /&gt;
kinfAlt3lt		equ kL1+13&lt;br /&gt;
kinfAlt3gt		equ kL1+14&lt;br /&gt;
kinfAlt4ne		equ kL1+15&lt;br /&gt;
kinfAlt4lt		equ kL1+16&lt;br /&gt;
kinfAlt4gt		equ kL1+17&lt;br /&gt;
kinfAlt5ne		equ kL1+18&lt;br /&gt;
kinfAlt5lt		equ kL1+19&lt;br /&gt;
kinfAlt5gt		equ kL1+20&lt;br /&gt;
kinfAlt6ne		equ kL1+21&lt;br /&gt;
kinfAlt6lt		equ kL1+22&lt;br /&gt;
kinfAlt6gt		equ kL1+23&lt;br /&gt;
kMatA			equ kE2BT+20&lt;br /&gt;
kMatB			equ kE2BT+21&lt;br /&gt;
kMatC			equ kE2BT+22&lt;br /&gt;
kMatD			equ kE2BT+23&lt;br /&gt;
kMatE			equ kE2BT+24&lt;br /&gt;
kXmin			equ kE2BT+25&lt;br /&gt;
kXmax			equ kE2BT+26&lt;br /&gt;
kXscl			equ kE2BT+27&lt;br /&gt;
kYmin			equ kE2BT+28&lt;br /&gt;
kYmax			equ kE2BT+29&lt;br /&gt;
kYscl			equ kE2BT+30&lt;br /&gt;
kTmin			equ kE2BT+31&lt;br /&gt;
kTmax			equ kE2BT+32&lt;br /&gt;
kTStep			equ kE2BT+33&lt;br /&gt;
kOmin			equ kE2BT+34&lt;br /&gt;
kOmax			equ kE2BT+35&lt;br /&gt;
kOStep			equ kE2BT+36&lt;br /&gt;
ku0			equ kE2BT+37&lt;br /&gt;
kv0			equ kE2BT+38&lt;br /&gt;
knMin			equ kE2BT+39&lt;br /&gt;
knMax			equ kE2BT+40&lt;br /&gt;
kDeltaY			equ kE2BT+41&lt;br /&gt;
kDeltaX			equ kE2BT+42&lt;br /&gt;
kZXmin			equ kE2BT+43&lt;br /&gt;
kZXmax			equ kE2BT+44&lt;br /&gt;
kZXscl			equ kE2BT+45&lt;br /&gt;
kZYmin			equ kE2BT+46&lt;br /&gt;
kZYmax			equ kE2BT+47&lt;br /&gt;
kZYscl			equ kE2BT+48&lt;br /&gt;
kZTmin			equ kE2BT+49&lt;br /&gt;
kZTmax			equ kE2BT+50&lt;br /&gt;
kZTStep			equ kE2BT+51&lt;br /&gt;
kZOmin			equ kE2BT+52&lt;br /&gt;
kZOmax			equ kE2BT+53&lt;br /&gt;
kZOStep			equ kE2BT+54&lt;br /&gt;
kZu0			equ kE2BT+55&lt;br /&gt;
kZv0			equ kE2BT+56&lt;br /&gt;
kZnMin			equ kE2BT+57&lt;br /&gt;
kZnMax			equ kE2BT+58&lt;br /&gt;
kDelLast		equ kE2BT+59&lt;br /&gt;
kSinReg			equ kE2BT+60&lt;br /&gt;
kConstE			equ kE2BT+61&lt;br /&gt;
kPic1			equ kE2BT+62&lt;br /&gt;
kPic2			equ kE2BT+63&lt;br /&gt;
kPic3			equ kE2BT+64&lt;br /&gt;
kDelVar			equ kE2BT+65&lt;br /&gt;
kGetCalc		equ kE2BT+66&lt;br /&gt;
kRealM			equ kE2BT+67&lt;br /&gt;
kPolarM			equ kE2BT+68&lt;br /&gt;
kRectM			equ kE2BT+69&lt;br /&gt;
kuv			equ kE2BT+70 ;U vs V&lt;br /&gt;
kvw			equ kE2BT+71 ;V vs W&lt;br /&gt;
kuw			equ kE2BT+72 ;U vs W&lt;br /&gt;
kFinPMTend		equ kE2BT+73&lt;br /&gt;
kFinPMTbeg		equ kE2BT+74&lt;br /&gt;
kGraphStyle		equ kE2BT+75&lt;br /&gt;
kExprOn			equ kE2BT+76&lt;br /&gt;
kExprOff		equ kE2BT+77&lt;br /&gt;
kStatA			equ kE2BT+78&lt;br /&gt;
kStatB			equ kE2BT+79&lt;br /&gt;
kStatC			equ kE2BT+80&lt;br /&gt;
kCorr			equ kE2BT+81&lt;br /&gt;
kStatD			equ kE2BT+82&lt;br /&gt;
kStatE			equ kE2BT+83&lt;br /&gt;
kRegEq			equ kE2BT+84&lt;br /&gt;
kMinX			equ kE2BT+85&lt;br /&gt;
kQ1			equ kE2BT+86&lt;br /&gt;
kMD			equ kE2BT+87&lt;br /&gt;
kQ3			equ kE2BT+88&lt;br /&gt;
kMaxX			equ kE2BT+89&lt;br /&gt;
kStatX1			equ kE2BT+90&lt;br /&gt;
kStatY1			equ kE2BT+91&lt;br /&gt;
kStatX2			equ kE2BT+92&lt;br /&gt;
kStatY2			equ kE2BT+93&lt;br /&gt;
kStatX3			equ kE2BT+94&lt;br /&gt;
kStatY3			equ kE2BT+95&lt;br /&gt;
kTblMin			equ kE2BT+96&lt;br /&gt;
kTblStep		equ kE2BT+97&lt;br /&gt;
kSetupLst		equ kE2BT+98&lt;br /&gt;
kClrAllLst		equ kE2BT+99&lt;br /&gt;
kLogistic		equ kE2BT+100&lt;br /&gt;
kZTest			equ kE2BT+101&lt;br /&gt;
kTTest			equ kE2BT+102&lt;br /&gt;
k2SampZTest		equ kE2BT+103&lt;br /&gt;
k2SampTTest		equ kE2BT+104&lt;br /&gt;
k1PropZTest		equ kE2BT+105&lt;br /&gt;
k2PropZTest		equ kE2BT+106&lt;br /&gt;
kChiTest		equ kE2BT+107&lt;br /&gt;
k2SampFTest		equ kE2BT+108&lt;br /&gt;
kZIntVal		equ kE2BT+109&lt;br /&gt;
kTIntVal		equ kE2BT+110&lt;br /&gt;
k2SampTInt		equ kE2BT+111&lt;br /&gt;
k2SampZInt		equ kE2BT+112&lt;br /&gt;
k1PropZInt		equ kE2BT+113&lt;br /&gt;
k2PropZInt		equ kE2BT+114&lt;br /&gt;
kDNormal		equ kE2BT+115&lt;br /&gt;
kInvNorm		equ kE2BT+116&lt;br /&gt;
kDT			equ kE2BT+117&lt;br /&gt;
kChi			equ kE2BT+118&lt;br /&gt;
kDF			equ kE2BT+119&lt;br /&gt;
kBinPDF			equ kE2BT+120&lt;br /&gt;
kBinCDF			equ kE2BT+121&lt;br /&gt;
kPoiPDF			equ kE2BT+122&lt;br /&gt;
kPoiCDF			equ kE2BT+123&lt;br /&gt;
kun			equ kE2BT+124&lt;br /&gt;
kvn			equ kE2BT+125&lt;br /&gt;
kwn			equ kE2BT+126&lt;br /&gt;
kRecn			equ kE2BT+127&lt;br /&gt;
kPlotStart		equ kE2BT+128&lt;br /&gt;
kZPlotStart		equ kE2BT+129 ;recursion n&lt;br /&gt;
kXFact			equ kE2BT+130 ;PlotStart&lt;br /&gt;
kYFact			equ kE2BT+131 ;ZPlotStart&lt;br /&gt;
kANOVA			equ kE2BT+132 ;XFact&lt;br /&gt;
kMaxY			equ kE2BT+133 ;YFact&lt;br /&gt;
kWebOn			equ kE2BT+134 ;MinY&lt;br /&gt;
kWebOff			equ kE2BT+135 ;MaxY&lt;br /&gt;
kTblInput		equ kE2BT+136 ;WEB ON&lt;br /&gt;
kGeoPDF			equ kE2BT+137 ;WEB OFF&lt;br /&gt;
kGeoCDF			equ kE2BT+138 ;WEB OFF&lt;br /&gt;
kShadeNorm		equ kE2BT+139&lt;br /&gt;
kShadeT			equ kE2BT+140&lt;br /&gt;
kShadeChi		equ kE2BT+141&lt;br /&gt;
kShadeF			equ kE2BT+142&lt;br /&gt;
kPlotStep		equ kE2BT+143&lt;br /&gt;
kZPlotStep		equ kE2BT+144&lt;br /&gt;
kLinRegtTest		equ kE2BT+145&lt;br /&gt;
KMGT			equ kE2BT+146 ;VERT SPLIT&lt;br /&gt;
kSelectA		equ kE2BT+147&lt;br /&gt;
kZFitA			equ kE2BT+148&lt;br /&gt;
kE2BT_End		equ kZFitA&lt;br /&gt;
&lt;br /&gt;
;More 2 Byte Keys &lt;br /&gt;
;------------------------------------&lt;br /&gt;
kE2BT2			equ 0&lt;br /&gt;
kGDB1			equ kE2BT2&lt;br /&gt;
kGDB2			equ kE2BT2+1&lt;br /&gt;
kGDB3			equ kE2BT2+2&lt;br /&gt;
kY1			equ kE2BT2+3&lt;br /&gt;
kY2			equ kE2BT2+4&lt;br /&gt;
kY3			equ kE2BT2+5&lt;br /&gt;
kY4			equ kE2BT2+6&lt;br /&gt;
kY5			equ kE2BT2+7&lt;br /&gt;
kY6			equ kE2BT2+8&lt;br /&gt;
kY7			equ kE2BT2+9&lt;br /&gt;
kY8			equ kE2BT2+10&lt;br /&gt;
kY9			equ kE2BT2+11&lt;br /&gt;
kY0			equ kE2BT2+12&lt;br /&gt;
kX1T			equ kE2BT2+13&lt;br /&gt;
kY1T			equ kE2BT2+14&lt;br /&gt;
kX2T			equ kE2BT2+15&lt;br /&gt;
kY2T			equ kE2BT2+16&lt;br /&gt;
kX3T			equ kE2BT2+17&lt;br /&gt;
kY3T			equ kE2BT2+18&lt;br /&gt;
kX4T			equ kE2BT2+19&lt;br /&gt;
kY4T			equ kE2BT2+20&lt;br /&gt;
kX5T			equ kE2BT2+21&lt;br /&gt;
kY5T			equ kE2BT2+22&lt;br /&gt;
kX6T			equ kE2BT2+23&lt;br /&gt;
kY6T			equ kE2BT2+24&lt;br /&gt;
kR1			equ kE2BT2+25&lt;br /&gt;
kR2			equ kE2BT2+26&lt;br /&gt;
kR3			equ kE2BT2+27&lt;br /&gt;
kR4			equ kE2BT2+28&lt;br /&gt;
kR5			equ kE2BT2+29&lt;br /&gt;
kR6			equ kE2BT2+30&lt;br /&gt;
kGDB4			equ kE2BT2+31&lt;br /&gt;
kGDB5			equ kE2BT2+32&lt;br /&gt;
kGDB6			equ kE2BT2+33&lt;br /&gt;
kPic4			equ kE2BT2+34&lt;br /&gt;
kPic5			equ kE2BT2+35&lt;br /&gt;
kPic6			equ kE2BT2+36&lt;br /&gt;
kGDB7			equ kE2BT2+37&lt;br /&gt;
kGDB8			equ kE2BT2+38&lt;br /&gt;
kGDB9			equ kE2BT2+39&lt;br /&gt;
kGDB0			equ kE2BT2+40&lt;br /&gt;
kPic7			equ kE2BT2+41&lt;br /&gt;
kPic8			equ kE2BT2+42&lt;br /&gt;
kPic9			equ kE2BT2+43&lt;br /&gt;
kPic0			equ kE2BT2+44&lt;br /&gt;
kStatN			equ kE2BT2+45&lt;br /&gt;
kXMean			equ kE2BT2+46&lt;br /&gt;
kConj			equ kE2BT2+47&lt;br /&gt;
kReal			equ kE2BT2+48&lt;br /&gt;
kFAngle			equ kE2BT2+49&lt;br /&gt;
kLCM			equ kE2BT2+50&lt;br /&gt;
kGCD			equ kE2BT2+51&lt;br /&gt;
kRandInt		equ kE2BT2+52&lt;br /&gt;
kRandNorm		equ kE2BT2+53&lt;br /&gt;
kToPolar		equ kE2BT2+54&lt;br /&gt;
kToRect			equ kE2BT2+55&lt;br /&gt;
kYMean			equ kE2BT2+56&lt;br /&gt;
kStdX			equ kE2BT2+57&lt;br /&gt;
kStdX1			equ kE2BT2+58&lt;br /&gt;
kw0			equ kE2BT2+59&lt;br /&gt;
kMatF			equ kE2BT2+60&lt;br /&gt;
kMatG			equ kE2BT2+61&lt;br /&gt;
kMatRH			equ kE2BT2+62&lt;br /&gt;
kMatI			equ kE2BT2+63&lt;br /&gt;
kMatJ			equ kE2BT2+64&lt;br /&gt;
kYMean1			equ kE2BT2+65&lt;br /&gt;
kStdY			equ kE2BT2+66&lt;br /&gt;
kStdY1			equ kE2BT2+67&lt;br /&gt;
kMatToLst		equ kE2BT2+68&lt;br /&gt;
kLstToMat		equ kE2BT2+69&lt;br /&gt;
kCumSum			equ kE2BT2+70&lt;br /&gt;
kDeltaLst		equ kE2BT2+71&lt;br /&gt;
kStdDev			equ kE2BT2+72&lt;br /&gt;
kVariance		equ kE2BT2+73&lt;br /&gt;
kLength			equ kE2BT2+74&lt;br /&gt;
kEquToStrng		equ kE2BT2+75&lt;br /&gt;
kStrngToEqu		equ kE2BT2+76&lt;br /&gt;
kExpr			equ kE2BT2+77&lt;br /&gt;
kSubStrng		equ kE2BT2+78&lt;br /&gt;
kInStrng		equ kE2BT2+79&lt;br /&gt;
kStr1			equ kE2BT2+80&lt;br /&gt;
kStr2			equ kE2BT2+81&lt;br /&gt;
kStr3			equ kE2BT2+82&lt;br /&gt;
kStr4           	equ kE2BT2+83&lt;br /&gt;
kStr5           	equ kE2BT2+84&lt;br /&gt;
kStr6           	equ kE2BT2+85&lt;br /&gt;
kStr7           	equ kE2BT2+86&lt;br /&gt;
kStr8           	equ kE2BT2+87&lt;br /&gt;
kStr9           	equ kE2BT2+88&lt;br /&gt;
kStr0           	equ kE2BT2+89&lt;br /&gt;
kFinN           	equ kE2BT2+90&lt;br /&gt;
kFinI           	equ kE2BT2+91&lt;br /&gt;
kFinPV          	equ kE2BT2+92&lt;br /&gt;
kFinPMT         	equ kE2BT2+93&lt;br /&gt;
kFinFV          	equ kE2BT2+94&lt;br /&gt;
kFinPY          	equ kE2BT2+95&lt;br /&gt;
kFinCY          	equ kE2BT2+96&lt;br /&gt;
kFinFPMT        	equ kE2BT2+97&lt;br /&gt;
kFinFI          	equ kE2BT2+98&lt;br /&gt;
kFinFPV         	equ kE2BT2+99&lt;br /&gt;
kFinFN          	equ kE2BT2+100&lt;br /&gt;
kFinFFV         	equ kE2BT2+101&lt;br /&gt;
kFinNPV         	equ kE2BT2+102&lt;br /&gt;
kFinIRR         	equ kE2BT2+103&lt;br /&gt;
kFinBAL         	equ kE2BT2+104&lt;br /&gt;
kFinPRN         	equ kE2BT2+105&lt;br /&gt;
kFinINT         	equ kE2BT2+106&lt;br /&gt;
kSumX           	equ kE2BT2+107&lt;br /&gt;
kSumX2          	equ kE2BT2+108&lt;br /&gt;
kFinToNom       	equ kE2BT2+109&lt;br /&gt;
kFinToEff       	equ kE2BT2+110&lt;br /&gt;
kFinDBD         	equ kE2BT2+111&lt;br /&gt;
kStatVP         	equ kE2BT2+112&lt;br /&gt;
kStatZ          	equ kE2BT2+113&lt;br /&gt;
kStatT          	equ kE2BT2+114&lt;br /&gt;
kStatChi        	equ kE2BT2+115&lt;br /&gt;
kStatF          	equ kE2BT2+116&lt;br /&gt;
kStatDF         	equ kE2BT2+117&lt;br /&gt;
kStatPhat       	equ kE2BT2+118&lt;br /&gt;
kStatPhat1      	equ kE2BT2+119&lt;br /&gt;
kStatPhat2      	equ kE2BT2+120&lt;br /&gt;
kStatMeanX1     	equ kE2BT2+121&lt;br /&gt;
kStatMeanX2     	equ kE2BT2+122&lt;br /&gt;
kStatStdX1      	equ kE2BT2+123&lt;br /&gt;
kStatStdX2      	equ kE2BT2+124&lt;br /&gt;
kStatStdXP		equ kE2BT2+125&lt;br /&gt;
kStatN1			equ kE2BT2+126&lt;br /&gt;
kStatN2			equ kE2BT2+127&lt;br /&gt;
kStatLower		equ kE2BT2+128&lt;br /&gt;
kStatUpper		equ kE2BT2+129&lt;br /&gt;
kuw0			equ kE2BT2+130&lt;br /&gt;
kImag			equ kE2BT2+131&lt;br /&gt;
kSumY			equ kE2BT2+132&lt;br /&gt;
kXres			equ kE2BT2+133&lt;br /&gt;
kStat_s			equ kE2BT2+134&lt;br /&gt;
kSumY2			equ kE2BT2+135&lt;br /&gt;
kSumXY			equ kE2BT2+136&lt;br /&gt;
kuXres			equ kE2BT2+137&lt;br /&gt;
kModBox			equ kE2BT2+138&lt;br /&gt;
kNormProb		equ kE2BT2+139&lt;br /&gt;
kNormalPDF		equ kE2BT2+140&lt;br /&gt;
kTPDF			equ kE2BT2+141&lt;br /&gt;
kChiPDF			equ kE2BT2+142&lt;br /&gt;
kFPDF			equ kE2BT2+143&lt;br /&gt;
kMinY			equ kE2BT2+144 ;MinY&lt;br /&gt;
kRandBin		equ kE2BT2+145&lt;br /&gt;
kRef			equ kE2BT2+146&lt;br /&gt;
kRRef			equ kE2BT2+147&lt;br /&gt;
kLRSqr			equ kE2BT2+148&lt;br /&gt;
kBRSqr			equ kE2BT2+149&lt;br /&gt;
kDiagOn			equ kE2BT2+150&lt;br /&gt;
kDiagOff		equ kE2BT2+151&lt;br /&gt;
kun1			equ kE2BT2+152 ;FOR RCL USE WHEN GOTTEN FROM 82&lt;br /&gt;
kvn1			equ kE2BT2+153 ;FOR RCL USE WHEN GOTTEN FROM 82&lt;br /&gt;
k83_00End		equ kvn1 ;end of original keys...&lt;br /&gt;
kArchive		equ k83_00End + 1&lt;br /&gt;
kUnarchive		equ k83_00End + 2&lt;br /&gt;
kAsm			equ k83_00End + 3 ;Asm(&lt;br /&gt;
kAsmPrgm		equ k83_00End + 4 ;AsmPrgm&lt;br /&gt;
kAsmComp		equ k83_00End + 5 ;AsmComp(&lt;br /&gt;
kcapAAcute		equ k83_00End + 6&lt;br /&gt;
kcapAGrave		equ k83_00End + 7&lt;br /&gt;
kcapACaret		equ k83_00End + 8&lt;br /&gt;
kcapADier		equ k83_00End + 9&lt;br /&gt;
kaAcute			equ k83_00End + 10&lt;br /&gt;
kaGrave			equ k83_00End + 11&lt;br /&gt;
kaCaret			equ k83_00End + 12&lt;br /&gt;
kaDier			equ k83_00End + 13&lt;br /&gt;
kcapEAcute		equ k83_00End + 14&lt;br /&gt;
kcapEGrave		equ k83_00End + 15&lt;br /&gt;
kcapECaret		equ k83_00End + 16&lt;br /&gt;
kcapEDier		equ k83_00End + 17&lt;br /&gt;
keAcute			equ k83_00End + 18&lt;br /&gt;
keGrave			equ k83_00End + 19&lt;br /&gt;
keCaret			equ k83_00End + 20&lt;br /&gt;
keDier			equ k83_00End + 21&lt;br /&gt;
kcapIAcute		equ k83_00End + 22&lt;br /&gt;
kcapIGrave		equ k83_00End + 23&lt;br /&gt;
kcapICaret		equ k83_00End + 24&lt;br /&gt;
kcapIDier		equ k83_00End + 25&lt;br /&gt;
kiAcute			equ k83_00End + 26&lt;br /&gt;
kiGrave			equ k83_00End + 27&lt;br /&gt;
kiCaret			equ k83_00End + 28&lt;br /&gt;
kiDier			equ k83_00End + 29&lt;br /&gt;
kcapOAcute		equ k83_00End + 30&lt;br /&gt;
kcapOGrave		equ k83_00End + 31&lt;br /&gt;
kcapOCaret		equ k83_00End + 32&lt;br /&gt;
kcapODier		equ k83_00End + 33&lt;br /&gt;
koAcute			equ k83_00End + 34&lt;br /&gt;
koGrave			equ k83_00End + 35&lt;br /&gt;
koCaret			equ k83_00End + 36&lt;br /&gt;
koDier			equ k83_00End + 37&lt;br /&gt;
kcapUAcute		equ k83_00End + 38&lt;br /&gt;
kcapUGrave		equ k83_00End + 39&lt;br /&gt;
kcapUCaret		equ k83_00End + 40&lt;br /&gt;
kcapUDier		equ k83_00End + 41&lt;br /&gt;
kuAcute			equ k83_00End + 42&lt;br /&gt;
kuGrave			equ k83_00End + 43&lt;br /&gt;
kuCaret			equ k83_00End + 44&lt;br /&gt;
kuDier			equ k83_00End + 45&lt;br /&gt;
kcapCCed		equ k83_00End + 46&lt;br /&gt;
kcCed			equ k83_00End + 47&lt;br /&gt;
kcapNTilde		equ k83_00End + 48&lt;br /&gt;
knTilde			equ k83_00End + 49&lt;br /&gt;
kaccent			equ k83_00End + 50&lt;br /&gt;
kgrave			equ k83_00End + 51&lt;br /&gt;
kdieresis		equ k83_00End + 52&lt;br /&gt;
kquesDown		equ k83_00End + 53&lt;br /&gt;
kexclamDown     	equ k83_00End + 54&lt;br /&gt;
kalpha          	equ k83_00End + 55&lt;br /&gt;
kbeta           	equ k83_00End + 56&lt;br /&gt;
kgamma          	equ k83_00End + 57&lt;br /&gt;
kcapDelta		equ k83_00End + 58&lt;br /&gt;
kdelta			equ k83_00End + 59&lt;br /&gt;
kepsilon		equ k83_00End + 60&lt;br /&gt;
klambda			equ k83_00End + 61&lt;br /&gt;
kmu			equ k83_00End + 62&lt;br /&gt;
kpi2			equ k83_00End + 63&lt;br /&gt;
krho			equ k83_00End + 64&lt;br /&gt;
kcapSigma		equ k83_00End + 65&lt;br /&gt;
ksigma			equ k83_00End + 66&lt;br /&gt;
ktau			equ k83_00End + 67&lt;br /&gt;
kphi			equ k83_00End + 68&lt;br /&gt;
kcapOmega		equ k83_00End + 69&lt;br /&gt;
kphat			equ k83_00End + 70&lt;br /&gt;
kchi2			equ k83_00End + 71&lt;br /&gt;
kstatF2			equ k83_00End + 72&lt;br /&gt;
kLa			equ k83_00End + 73&lt;br /&gt;
kLb			equ k83_00End + 74&lt;br /&gt;
kLc			equ k83_00End + 75&lt;br /&gt;
kLd			equ k83_00End + 76&lt;br /&gt;
kLe			equ k83_00End + 77&lt;br /&gt;
kLf			equ k83_00End + 78&lt;br /&gt;
kLg			equ k83_00End + 79&lt;br /&gt;
kLh			equ k83_00End + 80&lt;br /&gt;
kLi			equ k83_00End + 81&lt;br /&gt;
kLj			equ k83_00End + 82&lt;br /&gt;
kLk			equ k83_00End + 83&lt;br /&gt;
kLl			equ k83_00End + 84&lt;br /&gt;
kLm			equ k83_00End + 85&lt;br /&gt;
kLsmalln		equ k83_00End + 86&lt;br /&gt;
kLo			equ k83_00End + 87&lt;br /&gt;
kLp			equ k83_00End + 88&lt;br /&gt;
kLq			equ k83_00End + 89&lt;br /&gt;
kLsmallr		equ k83_00End + 90&lt;br /&gt;
kLs			equ k83_00End + 91&lt;br /&gt;
kLt			equ k83_00End + 92&lt;br /&gt;
kLu			equ k83_00End + 93&lt;br /&gt;
kLv			equ k83_00End + 94&lt;br /&gt;
kLw			equ k83_00End + 95&lt;br /&gt;
kLx			equ k83_00End + 96&lt;br /&gt;
kLy			equ k83_00End + 97&lt;br /&gt;
kLz			equ k83_00End + 98&lt;br /&gt;
kGarbageC		equ k83_00End + 99 ;GarbageCollect&lt;br /&gt;
kE2BT2_End		equ kGarbageC&lt;br /&gt;
&lt;br /&gt;
;TI-83 Plus Context Equates&lt;br /&gt;
;---------------------------------------------&lt;br /&gt;
cxCmd			equ kQuit ;home screen&lt;br /&gt;
cxMatEdit		equ kMatrixEd ;matrix editor&lt;br /&gt;
cxPrgmEdit		equ kPrgmEd ;program editor&lt;br /&gt;
cxEquEdit		equ kYequ ;equation editor&lt;br /&gt;
cxGrRange		equ kWindow ;graph range editor&lt;br /&gt;
cxGrZfact		equ kZFactEd ;graph zoom factors editor&lt;br /&gt;
cxGraph			equ kGraph ;graph mode&lt;br /&gt;
cxStatEdit		equ kStatEd ;statistics list editor&lt;br /&gt;
cxPrgmInput		equ kPrgmInput ;programmed input&lt;br /&gt;
cxError			equ kError ;error handler&lt;br /&gt;
cxLinkIO		equ kLinkIO ;LINK I/O interface&lt;br /&gt;
cxMem			equ kResetMem ;reset memory&lt;br /&gt;
cxDefMem		equ kResetDef ;reset default&lt;br /&gt;
cxRAMApp		equ kChkRAM ;RAM usage screen&lt;br /&gt;
cxMode			equ kMode ;mode settings screen&lt;br /&gt;
cxErase			equ kDelMem ;memory erase&lt;br /&gt;
cxPrgmCreate		equ kPrgmCr ;PROGRAM CREATE&lt;br /&gt;
cxTableEditor		equ kTable ;TABLE EDITOR&lt;br /&gt;
cxTableSet		equ kTblSet ;TABLE SET UP&lt;br /&gt;
cxStatPlot		equ kStatP ;STAT PLOTS&lt;br /&gt;
cxInfStat		equ kInfStat ;Inferential Statistic&lt;br /&gt;
cxFormat		equ kFormat ;FORMAT CONTEXT&lt;br /&gt;
cxSolveTVM		equ kSolveTVM ;Solve TVM&lt;br /&gt;
cxSolveRoot		equ kSolveRoot ;Solve Root&lt;br /&gt;
lastOldApp		equ kExtApps ;external applications&lt;br /&gt;
cxextapps		equ kExtApps&lt;br /&gt;
cxNewApps		equ kNewApps ;new cerberus applications&lt;br /&gt;
cxGroup			equ cxNewApps+0 ;1st new app.&lt;br /&gt;
cxUnGroup		equ cxNewApps+1 ;2nd new app.&lt;br /&gt;
lastNewApp		equ cxUnGroup ;last new app for this ver&lt;br /&gt;
&lt;br /&gt;
;Scan Code Equates&lt;br /&gt;
;-------------------------------&lt;br /&gt;
skDown			equ 01h&lt;br /&gt;
skLeft			equ 02h&lt;br /&gt;
skRight			equ 03h&lt;br /&gt;
skUp			equ 04h&lt;br /&gt;
skEnter			equ 09h&lt;br /&gt;
skAdd			equ 0Ah&lt;br /&gt;
skSub			equ 0Bh&lt;br /&gt;
skMul			equ 0Ch&lt;br /&gt;
skDiv			equ 0Dh&lt;br /&gt;
skPower			equ 0Eh&lt;br /&gt;
skClear			equ 0Fh&lt;br /&gt;
skChs			equ 11h&lt;br /&gt;
sk3			equ 12h&lt;br /&gt;
sk6			equ 13h&lt;br /&gt;
sk9			equ 14h&lt;br /&gt;
skRParen		equ 15h&lt;br /&gt;
skTan			equ 16h&lt;br /&gt;
skVars			equ 17h&lt;br /&gt;
skDecPnt		equ 19h&lt;br /&gt;
sk2			equ 1Ah&lt;br /&gt;
sk5			equ 1Bh&lt;br /&gt;
sk8			equ 1Ch&lt;br /&gt;
skLParen		equ 1Dh&lt;br /&gt;
skCos			equ 1Eh&lt;br /&gt;
skPrgm			equ 1Fh&lt;br /&gt;
skStat			equ 20h&lt;br /&gt;
sk0			equ 21h&lt;br /&gt;
sk1			equ 22h&lt;br /&gt;
sk4			equ 23h&lt;br /&gt;
sk7			equ 24h&lt;br /&gt;
skComma			equ 25h&lt;br /&gt;
skSin			equ 26h&lt;br /&gt;
skMatrix		equ 27h&lt;br /&gt;
skGraphvar		equ 28h&lt;br /&gt;
skStore			equ 2Ah&lt;br /&gt;
skLn			equ 2Bh&lt;br /&gt;
skLog			equ 2Ch&lt;br /&gt;
skSquare		equ 2Dh&lt;br /&gt;
skRecip			equ 2Eh&lt;br /&gt;
skMath			equ 2Fh&lt;br /&gt;
skAlpha			equ 30h&lt;br /&gt;
skGraph			equ 31h&lt;br /&gt;
skTrace			equ 32h&lt;br /&gt;
skZoom			equ 33h&lt;br /&gt;
skWindow		equ 34h&lt;br /&gt;
skYEqu			equ 35h&lt;br /&gt;
sk2nd			equ 36h&lt;br /&gt;
skMode			equ 37h&lt;br /&gt;
skDel			equ 38h&lt;br /&gt;
&lt;br /&gt;
;Tokens&lt;br /&gt;
;----------------------------------------------------&lt;br /&gt;
EOSSTART		equ 0&lt;br /&gt;
&lt;br /&gt;
;DISPLAY CONVERSIONS COME IMMEDIATELY BEFORE 'TSTORE'&lt;br /&gt;
;&lt;br /&gt;
DCONV			equ 01h&lt;br /&gt;
;&lt;br /&gt;
tToDMS			equ DCONV ;01h&lt;br /&gt;
tToDEC			equ DCONV+1 ;02h&lt;br /&gt;
tToAbc			equ DCONV+2 ;03h &amp;gt; A b/c&lt;br /&gt;
;&lt;br /&gt;
tStore			equ DCONV+3 ;04h Lstore 01&lt;br /&gt;
;&lt;br /&gt;
tBoxPlot		equ 05h&lt;br /&gt;
;&lt;br /&gt;
BRACKS			equ 06h&lt;br /&gt;
;&lt;br /&gt;
tLBrack			equ BRACKS ;06h '['&lt;br /&gt;
tRBrack			equ BRACKS+1 ;07h ']'&lt;br /&gt;
tLBrace			equ BRACKS+2 ;08h '{'&lt;br /&gt;
tRBrace			equ BRACKS+3 ;09h '}'&lt;br /&gt;
;&lt;br /&gt;
tPOST1			equ BRACKS+4&lt;br /&gt;
;&lt;br /&gt;
tFromRad		equ tPOST1 ;0Ah Lradian&lt;br /&gt;
tFromDeg		equ tPOST1+1 ;0Bh Ldegree&lt;br /&gt;
tRecip			equ tPOST1+2 ;0Ch Linverse&lt;br /&gt;
tSqr			equ tPOST1+3 ;0Dh Lsquare&lt;br /&gt;
tTrnspos		equ tPOST1+4 ;0Eh Ltranspose&lt;br /&gt;
tCube			equ tPOST1+5 ;0Fh '^3'&lt;br /&gt;
;&lt;br /&gt;
tLParen			equ 10h ;10h '('&lt;br /&gt;
tRParen			equ 11h ;11h ')'&lt;br /&gt;
;&lt;br /&gt;
IMUN			equ 12h&lt;br /&gt;
;&lt;br /&gt;
tRound			equ IMUN ;12h 'round'&lt;br /&gt;
tPxTst			equ IMUN+1 ;13h 'PXL-TEST'&lt;br /&gt;
tAug			equ IMUN+2 ;14h 'aug'&lt;br /&gt;
tRowSwap		equ IMUN+3 ;15h 'rSwap'&lt;br /&gt;
tRowPlus		equ IMUN+4 ;16h 'rAdd'&lt;br /&gt;
tmRow			equ IMUN+5 ;17h 'multR'&lt;br /&gt;
tmRowPlus		equ IMUN+6 ;18h 'mRAdd'&lt;br /&gt;
tMax			equ IMUN+7 ;19h 'max'&lt;br /&gt;
tMin			equ IMUN+8 ;1Ah 'min'&lt;br /&gt;
tRToPr			equ IMUN+9 ;1Bh 'R&amp;gt;Pr&lt;br /&gt;
tRToPo			equ IMUN+10 ;1Ch 'R&amp;gt;Po&lt;br /&gt;
tPToRx			equ IMUN+11 ;1Dh 'P&amp;gt;Rx&lt;br /&gt;
tPToRy			equ IMUN+12 ;1Eh 'P&amp;gt;Ry&lt;br /&gt;
tMedian			equ IMUN+13 ;1Fh 'MEDIAN&lt;br /&gt;
tRandM			equ IMUN+14 ;20h 'randM'&lt;br /&gt;
tMean			equ IMUN+15 ;21h&lt;br /&gt;
tRoot			equ IMUN+16 ;22h 'ROOT'&lt;br /&gt;
tSeries			equ IMUN+17 ;23h 'seq'&lt;br /&gt;
tFnInt			equ IMUN+18 ;24h 'fnInt'&lt;br /&gt;
tNDeriv			equ IMUN+19 ;25h 'fnIr'&lt;br /&gt;
tEvalF			equ IMUN+20 ;26h&lt;br /&gt;
tFmin			equ IMUN+21 ;27h&lt;br /&gt;
tFmax			equ IMUN+22 ;28h&lt;br /&gt;
;&lt;br /&gt;
tEOSEL			equ IMUN+23&lt;br /&gt;
;&lt;br /&gt;
tSpace			equ tEOSEL ;29h ' '&lt;br /&gt;
tString			equ tEOSEL+1 ;2Ah '&amp;quot;'&lt;br /&gt;
tComma			equ tEOSEL+2 ;2Bh ','&lt;br /&gt;
;&lt;br /&gt;
tii			equ 2Ch ;i&lt;br /&gt;
&lt;br /&gt;
;Postfix Functions&lt;br /&gt;
;-----------------------------------------&lt;br /&gt;
tPost			equ 2Dh&lt;br /&gt;
;&lt;br /&gt;
tFact			equ tPost ;2Dh '!'&lt;br /&gt;
;&lt;br /&gt;
tCubicR			equ 2Eh&lt;br /&gt;
tQuartR			equ 2Fh&lt;br /&gt;
&lt;br /&gt;
;Number Tokens &lt;br /&gt;
;---------------------------------------&lt;br /&gt;
NUMS			equ 30h&lt;br /&gt;
;&lt;br /&gt;
t0			equ NUMS ;30h&lt;br /&gt;
t1			equ NUMS+1 ;31h&lt;br /&gt;
t2			equ NUMS+2 ;32h&lt;br /&gt;
t3			equ NUMS+3 ;33h&lt;br /&gt;
t4			equ NUMS+4 ;34h&lt;br /&gt;
t5			equ NUMS+5 ;35h&lt;br /&gt;
t6			equ NUMS+6 ;36h&lt;br /&gt;
t7			equ NUMS+7 ;37h&lt;br /&gt;
t8			equ NUMS+8 ;38h&lt;br /&gt;
t9			equ NUMS+9 ;39h&lt;br /&gt;
tDecPt			equ NUMS+10 ;3Ah&lt;br /&gt;
tee			equ NUMS+11 ;3Bh&lt;br /&gt;
&lt;br /&gt;
;Binary OP&lt;br /&gt;
;-------------------------------------------&lt;br /&gt;
tOr			equ 3Ch ;3Ch '_or_'&lt;br /&gt;
tXor			equ 3Dh ;3Dh&lt;br /&gt;
;&lt;br /&gt;
tColon			equ 3Eh ;3Eh ':'&lt;br /&gt;
tEnter			equ 3Fh ;3Fh Lenter&lt;br /&gt;
;&lt;br /&gt;
tAnd			equ 40h ;40h '_and_'&lt;br /&gt;
&lt;br /&gt;
;Letter Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
LET			equ 41h&lt;br /&gt;
tA			equ LET ;41h&lt;br /&gt;
tB			equ LET+1 ;42h&lt;br /&gt;
tC			equ LET+2 ;43h&lt;br /&gt;
tD			equ LET+3 ;44h&lt;br /&gt;
tE			equ LET+4 ;45h&lt;br /&gt;
tF			equ LET+5 ;46h&lt;br /&gt;
tG			equ LET+6 ;47h&lt;br /&gt;
tH			equ LET+7 ;48h&lt;br /&gt;
tI			equ LET+8 ;49h&lt;br /&gt;
tJ			equ LET+9 ;4Ah&lt;br /&gt;
tK			equ LET+10 ;4Bh&lt;br /&gt;
tL			equ LET+11 ;4Ch&lt;br /&gt;
tM			equ LET+12 ;4Dh&lt;br /&gt;
tN			equ LET+13 ;4Eh&lt;br /&gt;
tO			equ LET+14 ;4Fh&lt;br /&gt;
tP			equ LET+15 ;50h&lt;br /&gt;
tQ			equ LET+16 ;51h&lt;br /&gt;
tR			equ LET+17 ;52h&lt;br /&gt;
tS			equ LET+18 ;53h&lt;br /&gt;
tT			equ LET+19 ;54h&lt;br /&gt;
tU			equ LET+20 ;55h&lt;br /&gt;
tV			equ LET+21 ;56h&lt;br /&gt;
tW			equ LET+22 ;57h&lt;br /&gt;
tX			equ LET+23 ;58h&lt;br /&gt;
tY			equ LET+24 ;59h&lt;br /&gt;
tZ			equ LET+25 ;5Ah&lt;br /&gt;
tTheta			equ LET+26 ;5Bh&lt;br /&gt;
&lt;br /&gt;
;These Var Tokens Are 1st Of A Double Token&lt;br /&gt;
;------------------------------------------&lt;br /&gt;
&lt;br /&gt;
vToks			equ LET+27&lt;br /&gt;
&lt;br /&gt;
;User Matrix Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarMat			equ vToks ;5Ch&lt;br /&gt;
;&lt;br /&gt;
;User List Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarLst			equ vToks+1 ;5Dh&lt;br /&gt;
;&lt;br /&gt;
;User Equation Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarEqu			equ vToks+2 ;5Eh&lt;br /&gt;
tProg			equ vToks+3 ;5Fh&lt;br /&gt;
;&lt;br /&gt;
;User Pict Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarPict		equ vToks+4 ;60h&lt;br /&gt;
;&lt;br /&gt;
;User GDB Token, 2nd Token Needed For Name&lt;br /&gt;
;&lt;br /&gt;
tVarGDB			equ vToks+5 ;61h&lt;br /&gt;
tVarOut			equ vToks+6 ;62h&lt;br /&gt;
tVarSys			equ vToks+7 ;63h&lt;br /&gt;
&lt;br /&gt;
;Mode Setting Commands&lt;br /&gt;
;-------------------------------------------------&lt;br /&gt;
MODESA			equ vToks+8 ;64h&lt;br /&gt;
tRad			equ MODESA ;64h 'Radian'&lt;br /&gt;
tDeg			equ MODESA+1 ;65h 'Degree'&lt;br /&gt;
tNormF			equ MODESA+2 ;66h 'Normal'&lt;br /&gt;
tSci			equ MODESA+3 ;67h 'Sci'&lt;br /&gt;
tEng			equ MODESA+4 ;68h 'Eng'&lt;br /&gt;
tFloat			equ MODESA+5 ;69h 'Float'&lt;br /&gt;
CMPS			equ 6Ah&lt;br /&gt;
tEQ			equ CMPS ;6Ah '=='&lt;br /&gt;
tLT			equ CMPS+1 ;6Bh '&amp;lt;'&lt;br /&gt;
tGT			equ CMPS+2 ;6Ch '&amp;gt;'&lt;br /&gt;
tLE			equ CMPS+3 ;6Dh LLE&lt;br /&gt;
tGE			equ CMPS+4 ;6Eh LGE&lt;br /&gt;
tNE			equ CMPS+5 ;6Fh LNE&lt;br /&gt;
&lt;br /&gt;
;Binary OP&lt;br /&gt;
;---------------------------------------&lt;br /&gt;
tAdd			equ 70h ;70h '+'&lt;br /&gt;
tSub			equ 71h ;71h '-'&lt;br /&gt;
tAns			equ 72h ;72h&lt;br /&gt;
&lt;br /&gt;
;Mode Setting Commands&lt;br /&gt;
;-------------------------------------------------------&lt;br /&gt;
MODES			equ 73h&lt;br /&gt;
tFix			equ MODES ;73h 'Fix_'&lt;br /&gt;
tSplitOn		equ MODES+1 ;74h&lt;br /&gt;
tFullScreen		equ MODES+2 ;75h&lt;br /&gt;
tStndrd			equ MODES+3 ;76h 'Func'&lt;br /&gt;
tParam			equ MODES+4 ;77h 'Param'&lt;br /&gt;
tPolar			equ MODES+5 ;78h 'Pol'&lt;br /&gt;
tSeqG			equ MODES+6 ;79h&lt;br /&gt;
tAFillOn		equ MODES+7 ;7Ah 'AUTO FILL ON'&lt;br /&gt;
tAFillOff		equ MODES+8 ;7Bh&lt;br /&gt;
tACalcOn		equ MODES+9 ;7Ch&lt;br /&gt;
tACalcOff		equ MODES+10 ;7Dh 'AutoFill OFF'&lt;br /&gt;
&lt;br /&gt;
;Graph Format Tokens Are 2 Byte Tokens&lt;br /&gt;
;----------------------------------------&lt;br /&gt;
tGFormat		equ MODES+11 ;7Eh&lt;br /&gt;
tBoxIcon		equ 7Fh&lt;br /&gt;
tCrossIcon		equ 80h&lt;br /&gt;
tDotIcon		equ 81h&lt;br /&gt;
&lt;br /&gt;
;(More) Binary OP&lt;br /&gt;
;---------------------------------------&lt;br /&gt;
tMul			equ 82h ;82h '*'&lt;br /&gt;
tDiv			equ 83h ;83h '/'&lt;br /&gt;
&lt;br /&gt;
;Some Graph Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
GRCMDS			equ 84h&lt;br /&gt;
tTrace			equ GRCMDS ; 84h 'Trace'&lt;br /&gt;
tClDrw			equ GRCMDS+1 ; 85h 'ClDrw'&lt;br /&gt;
tZoomStd		equ GRCMDS+2 ; 86h 'ZStd'&lt;br /&gt;
tZoomtrg		equ GRCMDS+3 ; 87h 'Ztrg'&lt;br /&gt;
tZoomBox		equ GRCMDS+4 ; 88h 'ZBOX'&lt;br /&gt;
tZoomIn			equ GRCMDS+5 ; 89h 'ZIn'&lt;br /&gt;
tZoomOut		equ GRCMDS+6 ; 8Ah 'ZOut'&lt;br /&gt;
tZoomSqr		equ GRCMDS+7 ; 8Bh 'ZSqr'&lt;br /&gt;
tZoomInt		equ GRCMDS+8 ; 8Ch 'ZInt'&lt;br /&gt;
tZoomPrev		equ GRCMDS+9 ; 8Dh 'ZPrev'&lt;br /&gt;
tZoomDec		equ GRCMDS+10 ; 8Eh 'ZDecm'&lt;br /&gt;
tZoomStat		equ GRCMDS+11 ; 8Fh 'ZStat&lt;br /&gt;
tUsrZm			equ GRCMDS+12 ; 90h 'ZRcl'&lt;br /&gt;
tPrtScrn		equ GRCMDS+13 ; 91h 'PrtScrn'&lt;br /&gt;
tZoomSto		equ GRCMDS+14 ; 92h  ZOOM STORE&lt;br /&gt;
tText			equ GRCMDS+15 ; 93h&lt;br /&gt;
&lt;br /&gt;
;Binary OP (Combination &amp;amp; Permutation)&lt;br /&gt;
;-------------------------------------------------&lt;br /&gt;
tnPr			equ GRCMDS+16 ;94h '_nPr_'&lt;br /&gt;
tnCr			equ GRCMDS+17 ;95h '_nCr_'&lt;br /&gt;
&lt;br /&gt;
;More Graph Commands&lt;br /&gt;
;--------------------------------------------------&lt;br /&gt;
tYOn			equ GRCMDS+18 ;96h 'FnOn_'&lt;br /&gt;
tYOff			equ GRCMDS+19 ;97h 'FnOff_'&lt;br /&gt;
tStPic			equ GRCMDS+20 ;98h 'StPic_'&lt;br /&gt;
tRcPic			equ GRCMDS+21 ;99h 'RcPic_'&lt;br /&gt;
tStoDB			equ GRCMDS+22 ;9Ah 'StGDB_'&lt;br /&gt;
tRclDB			equ GRCMDS+23 ;9Bh 'RcGDB_'&lt;br /&gt;
tLine			equ GRCMDS+24 ;9Ch 'Line'&lt;br /&gt;
tVert			equ GRCMDS+25 ;9Dh 'Vert_'&lt;br /&gt;
tPtOn			equ GRCMDS+26 ;9Eh 'PtOn'&lt;br /&gt;
tPtOff			equ GRCMDS+27 ;9Fh 'PtOff'&lt;br /&gt;
&lt;br /&gt;
;Token A0 Cannot Be An EOS Function Since Low MULT=A0 Already&lt;br /&gt;
;------------------------------------------------------------&lt;br /&gt;
tPtChg			equ GRCMDS+28 ;A0h 'PtChg'&lt;br /&gt;
tPXOn			equ GRCMDS+29 ;A1h&lt;br /&gt;
tPXOff			equ GRCMDS+30 ;A2h&lt;br /&gt;
tPXChg			equ GRCMDS+31 ;A3h&lt;br /&gt;
tShade			equ GRCMDS+32 ;A4h 'Shade'&lt;br /&gt;
tCircl			equ GRCMDS+33 ;A5h 'Circl'&lt;br /&gt;
tHorz			equ GRCMDS+34 ;A6h 'HORIZONTAL'&lt;br /&gt;
tTanLn			equ GRCMDS+35 ;A7h 'TanLn'&lt;br /&gt;
tDrInv			equ GRCMDS+36 ;A8h 'DrInv_'&lt;br /&gt;
tDrawF			equ GRCMDS+37 ;A9h 'DrawF_'&lt;br /&gt;
tVarStrng		equ 0AAh&lt;br /&gt;
&lt;br /&gt;
;Functions with No Arguments                                    &lt;br /&gt;
;--------------------------------------------------&lt;br /&gt;
NOARG			equ 0ABh&lt;br /&gt;
tRand			equ NOARG ;ABh 'rand'&lt;br /&gt;
tPi			equ NOARG+1 ;ACh  Lpi&lt;br /&gt;
tGetKey			equ NOARG+2 ;ADh 'getKy'&lt;br /&gt;
tAPost			equ tGetKey+1 ;APOSTROPHY&lt;br /&gt;
tQuest			equ tAPost+1 ;QUESTION MARK&lt;br /&gt;
UNARY			equ tQuest+1 ;B0h&lt;br /&gt;
tChs			equ UNARY ;B0h&lt;br /&gt;
tInt			equ UNARY+1 ;B1h&lt;br /&gt;
tAbs			equ UNARY+2 ;B2h&lt;br /&gt;
tDet			equ UNARY+3 ;B3h&lt;br /&gt;
tIdent			equ UNARY+4 ;B4h&lt;br /&gt;
tDim			equ UNARY+5 ;B5h&lt;br /&gt;
tSum			equ UNARY+6 ;B6h&lt;br /&gt;
tProd			equ UNARY+7 ;B7h&lt;br /&gt;
tNot			equ UNARY+8 ;B8h&lt;br /&gt;
tIPart			equ UNARY+9 ;B9h&lt;br /&gt;
tFPart			equ UNARY+10 ;BAh&lt;br /&gt;
&lt;br /&gt;
;New 2 Byte Tokens&lt;br /&gt;
;------------------------------------------&lt;br /&gt;
t2ByteTok		equ 0BBh&lt;br /&gt;
UNARYLR			equ UNARY+12&lt;br /&gt;
tSqrt			equ UNARYLR ;BCh&lt;br /&gt;
tCubRt			equ UNARYLR+1 ;BDh&lt;br /&gt;
tLn			equ UNARYLR+2 ;BEh&lt;br /&gt;
tExp			equ UNARYLR+3 ;BFh&lt;br /&gt;
tLog			equ UNARYLR+4 ;C0h&lt;br /&gt;
tALog			equ UNARYLR+5 ;C1h&lt;br /&gt;
tSin			equ UNARYLR+6 ;C2h&lt;br /&gt;
tASin			equ UNARYLR+7 ;C3h&lt;br /&gt;
tCos			equ UNARYLR+8 ;C4h&lt;br /&gt;
tACos			equ UNARYLR+9 ;C5h&lt;br /&gt;
tTan			equ UNARYLR+10 ;C6h&lt;br /&gt;
tATan			equ UNARYLR+11 ;C7h&lt;br /&gt;
tSinH			equ UNARYLR+12 ;C8h&lt;br /&gt;
tASinH			equ UNARYLR+13 ;C9h&lt;br /&gt;
tCoshH			equ UNARYLR+14 ;CAh&lt;br /&gt;
tACosH			equ UNARYLR+15 ;CBh&lt;br /&gt;
tTanH			equ UNARYLR+16 ;CCh&lt;br /&gt;
tATanH			equ UNARYLR+17 ;CDh&lt;br /&gt;
&lt;br /&gt;
;Some Programming Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
PROGTOK			equ UNARYLR+18&lt;br /&gt;
tIf			equ PROGTOK ;CEh&lt;br /&gt;
tThen			equ PROGTOK+1 ;CFh&lt;br /&gt;
tElse			equ PROGTOK+2 ;D0h&lt;br /&gt;
tWhile			equ PROGTOK+3 ;D1h&lt;br /&gt;
tRepeat			equ PROGTOK+4 ;D2h&lt;br /&gt;
tFor			equ PROGTOK+5 ;D3h&lt;br /&gt;
tEnd			equ PROGTOK+6 ;D4h&lt;br /&gt;
tReturn			equ PROGTOK+7 ;D5h&lt;br /&gt;
tLbl			equ PROGTOK+8 ;D6h 'Lbl_'&lt;br /&gt;
tGoto			equ PROGTOK+9 ;D7h 'Goto_'&lt;br /&gt;
tPause			equ PROGTOK+10 ;D8h 'Pause_'&lt;br /&gt;
tStop			equ PROGTOK+11 ;D9h 'Stop'&lt;br /&gt;
tISG			equ PROGTOK+12 ;DAh 'IS&amp;gt;'&lt;br /&gt;
tDSL			equ PROGTOK+13 ;DBh 'DS&amp;lt;'&lt;br /&gt;
tInput			equ PROGTOK+14 ;DCh 'Input_'&lt;br /&gt;
tPrompt			equ PROGTOK+15 ;DDh 'Prompt_'&lt;br /&gt;
tDisp			equ PROGTOK+16 ;DEh 'Disp_'&lt;br /&gt;
tDispG			equ PROGTOK+17 ;DFh 'DispG'&lt;br /&gt;
tOutput			equ PROGTOK+18 ;E0h 'Outpt'&lt;br /&gt;
tClLCD			equ PROGTOK+19 ;E1h 'ClLCD'&lt;br /&gt;
tConst			equ PROGTOK+20 ;E2h 'Fill'&lt;br /&gt;
tSortA			equ PROGTOK+21 ;E3h 'sortA_'&lt;br /&gt;
tSortD			equ PROGTOK+22 ;E4h 'sortD_'&lt;br /&gt;
tDispTab		equ PROGTOK+23 ;E5h 'Disp Table&lt;br /&gt;
tMenu			equ PROGTOK+24 ;E6h 'Menu'&lt;br /&gt;
tSendMBL		equ PROGTOK+25 ;E7h 'SEND'&lt;br /&gt;
tGetMBL			equ PROGTOK+26 ;E8h 'GET'&lt;br /&gt;
&lt;br /&gt;
;Stat Plot Commands&lt;br /&gt;
;------------------------------------------------------&lt;br /&gt;
statPCmd		equ PROGTOK+27&lt;br /&gt;
tPlotOn			equ statPCmd ;E9h ' PLOTSON'&lt;br /&gt;
tPlotOff		equ statPCmd+1 ;EAh ' PLOTSOFF&lt;br /&gt;
tListName		equ 0EBh ;LIST DESIGNATOR&lt;br /&gt;
tPlot1			equ 0ECh&lt;br /&gt;
tPlot2			equ 0EDh&lt;br /&gt;
tPlot3			equ 0EEh&lt;br /&gt;
tUnused01		equ 0EFh ;available?&lt;br /&gt;
tPower			equ 0F0h ;'^'&lt;br /&gt;
tXRoot			equ 0F1h ;LsupX,Lroot&lt;br /&gt;
STATCMD			equ 0F2h&lt;br /&gt;
tOneVar			equ STATCMD ;F2h 'OneVar_'&lt;br /&gt;
tTwoVar			equ STATCMD+1 ;F3h&lt;br /&gt;
tLR			equ STATCMD+2 ;F4h 'LinR(A+BX&lt;br /&gt;
tLRExp			equ STATCMD+3 ;F5h 'ExpR_'&lt;br /&gt;
tLRLn			equ STATCMD+4 ;F6h 'LnR_'&lt;br /&gt;
tLRPwr			equ STATCMD+5 ;F7h 'PwrR_'&lt;br /&gt;
tMedMed			equ STATCMD+6 ;F8h&lt;br /&gt;
tQuad			equ STATCMD+7 ;F9h&lt;br /&gt;
tClrLst			equ STATCMD+8 ;FAh 'CLEAR LIST&lt;br /&gt;
tClrTbl			equ STATCMD+9 ;FBh CLEAR TABLE&lt;br /&gt;
tHist			equ STATCMD+10 ;FCh 'Hist_'&lt;br /&gt;
txyLine			equ STATCMD+11 ;FDh 'xyline_'&lt;br /&gt;
tScatter		equ STATCMD+12 ;FEh 'Scatter_'&lt;br /&gt;
tLR1			equ STATCMD+13 ;FFh 'LINR(AX+B&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of Graph Format Tokens&lt;br /&gt;
;----------------------------------------------&lt;br /&gt;
;           Format settings commands&lt;br /&gt;
;&lt;br /&gt;
GFMT			equ 0&lt;br /&gt;
tSeq			equ GFMT ; 'SeqG'&lt;br /&gt;
tSimulG			equ GFMT+1 ; 'SimulG'&lt;br /&gt;
tPolarG			equ GFMT+2 ; 'PolarGC'&lt;br /&gt;
tRectG			equ GFMT+3 ; 'RectGC'&lt;br /&gt;
tCoordOn		equ GFMT+4 ; 'CoordOn'&lt;br /&gt;
tCoordOff		equ GFMT+5 ; 'CoordOff'&lt;br /&gt;
tDrawLine		equ GFMT+6 ; 'DrawLine'&lt;br /&gt;
tDrawDot		equ GFMT+7 ; 'DrawDot'&lt;br /&gt;
tAxisOn			equ GFMT+8 ; 'AxesOn'&lt;br /&gt;
tAxisOff		equ GFMT+9 ; 'AxesOff'&lt;br /&gt;
tGridOn			equ GFMT+10 ; 'GridOn'&lt;br /&gt;
tGridOff		equ GFMT+11 ; 'GridOff'&lt;br /&gt;
tLblOn			equ GFMT+12 ; 'LabelOn'&lt;br /&gt;
tLblOff			equ GFMT+13 ; 'LabelOff'&lt;br /&gt;
tWebOn			equ GFMT+14 ; 'WebOn'&lt;br /&gt;
tWebOff			equ GFMT+15 ; 'WebOFF'&lt;br /&gt;
tuv			equ GFMT+16 ; U vs V&lt;br /&gt;
tvw			equ GFMT+17 ; V vs W&lt;br /&gt;
tuw			equ GFMT+18 ; U vs W&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Matrix Tokens&lt;br /&gt;
;-------------------------------------&lt;br /&gt;
tMatA			equ 00h ;MAT A&lt;br /&gt;
tMatB			equ 01h ;MAT B&lt;br /&gt;
tMatC			equ 02h ;MAT C&lt;br /&gt;
tMatD			equ 03h ;MAT D&lt;br /&gt;
tMatE			equ 04h ;MAT E&lt;br /&gt;
tMatF			equ 05h ;MAT F&lt;br /&gt;
tMatG			equ 06h ;MAT G&lt;br /&gt;
tMatH			equ 07h ;MAT H&lt;br /&gt;
tMatI			equ 08h ;MAT I&lt;br /&gt;
tMatJ			equ 09h ;MAT J&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User List Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
tL1			equ 00h ;LIST 1&lt;br /&gt;
tL2			equ 01h ;LIST 2&lt;br /&gt;
tL3			equ 02h ;LIST 3&lt;br /&gt;
tL4			equ 03h ;LIST 4&lt;br /&gt;
tL5			equ 04h ;LIST 5&lt;br /&gt;
tL6			equ 05h ;LIST 6&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Equation Tokens&lt;br /&gt;
;----------------------------------&lt;br /&gt;
;  &amp;quot;Y&amp;quot; EQUATIONS HAVE BIT 4 SET&lt;br /&gt;
;&lt;br /&gt;
tY1			equ 10h ;Y1&lt;br /&gt;
tY2			equ 11h ;Y2&lt;br /&gt;
tY3			equ 12h ;Y3&lt;br /&gt;
tY4			equ 13h ;Y4&lt;br /&gt;
tY5			equ 14h ;Y5&lt;br /&gt;
tY6			equ 15h ;Y6&lt;br /&gt;
tY7			equ 16h ;Y7&lt;br /&gt;
tY8			equ 17h ;Y8&lt;br /&gt;
tY9			equ 18h ;Y9&lt;br /&gt;
tY0			equ 19h ;Y0&lt;br /&gt;
&lt;br /&gt;
;Param Equations Have Bit 5 Set&lt;br /&gt;
;-----------------------------------&lt;br /&gt;
tX1T			equ 20h ;X1t&lt;br /&gt;
tY1T			equ 21h ;Y1t&lt;br /&gt;
tX2T			equ 22h ;X2t&lt;br /&gt;
tY2T			equ 23h ;Y2t&lt;br /&gt;
tX3T			equ 24h ;X3t&lt;br /&gt;
tY3T			equ 25h ;Y3t&lt;br /&gt;
tX4T			equ 26h ;X4t&lt;br /&gt;
tY4T			equ 27h ;Y4t&lt;br /&gt;
tX5T			equ 28h ;X5t&lt;br /&gt;
tY5T			equ 29h ;Y5t&lt;br /&gt;
tX6T			equ 2Ah ;X6t&lt;br /&gt;
tY6T			equ 2Bh ;Y6t&lt;br /&gt;
&lt;br /&gt;
;Polar Equations Have Bit 6 Set&lt;br /&gt;
;----------------------------------&lt;br /&gt;
tR1			equ 40h ;R1&lt;br /&gt;
tR2			equ 41h ;R2&lt;br /&gt;
tR3			equ 42h ;R3&lt;br /&gt;
tR4			equ 43h ;R4&lt;br /&gt;
tR5			equ 44h ;R5&lt;br /&gt;
tR6			equ 45h ;R6&lt;br /&gt;
&lt;br /&gt;
;Recursion Equations Have Bit 7 Set&lt;br /&gt;
;----------------------------------&lt;br /&gt;
tun			equ 80h ;Un&lt;br /&gt;
tvn			equ 81h ;Vn&lt;br /&gt;
twn			equ 82h ;Wn&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Picture Tokens&lt;br /&gt;
;------------------------------------&lt;br /&gt;
tPic1			equ 00h ;PIC1&lt;br /&gt;
tPic2			equ 01h ;PIC2&lt;br /&gt;
tPic3			equ 02h ;PIC3&lt;br /&gt;
tPic4			equ 03h ;PIC4&lt;br /&gt;
tPic5			equ 04h ;PIC5&lt;br /&gt;
tPic6			equ 05h ;PIC6&lt;br /&gt;
tPic7			equ 06h ;PIC7&lt;br /&gt;
tPic8			equ 07h ;PIC8&lt;br /&gt;
tPic9			equ 08h ;PIC9&lt;br /&gt;
tPic0			equ 09h ;PIC0&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of User Graph Database Tokens&lt;br /&gt;
;--------------------------------------&lt;br /&gt;
tGDB1			equ 00h ;GDB1&lt;br /&gt;
tGDB2			equ 01h ;GDB2&lt;br /&gt;
tGDB3			equ 02h ;GDB3&lt;br /&gt;
tGDB4			equ 03h ;GDB4&lt;br /&gt;
tGDB5			equ 04h ;GDB5&lt;br /&gt;
tGDB6			equ 05h ;GDB6&lt;br /&gt;
tGDB7			equ 06h ;GDB7&lt;br /&gt;
tGDB8			equ 07h ;GDB8&lt;br /&gt;
tGDB9			equ 08h ;GDB9&lt;br /&gt;
tGDB0			equ 09h ;GDB0&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of String Vars&lt;br /&gt;
;------------------------------&lt;br /&gt;
tStr1			equ 00h&lt;br /&gt;
tStr2			equ 01h&lt;br /&gt;
tStr3			equ 02h&lt;br /&gt;
tStr4			equ 03h&lt;br /&gt;
tStr5			equ 04h&lt;br /&gt;
tStr6			equ 05h&lt;br /&gt;
tStr7			equ 06h&lt;br /&gt;
tStr8			equ 07h&lt;br /&gt;
tStr9			equ 08h&lt;br /&gt;
tStr0			equ 09h&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of System Output Only Variables&lt;br /&gt;
;-----------------------------------------------------------------&lt;br /&gt;
;OPEN			equ 00h&lt;br /&gt;
tRegEq			equ 01h ;REGRESSION EQUATION&lt;br /&gt;
tStatN			equ 02h ;STATISTICS N&lt;br /&gt;
tXMean			equ 03h ;X MEAN&lt;br /&gt;
tSumX			equ 04h ;SUM(X)&lt;br /&gt;
tSumXSqr		equ 05h ;SUM(X^2)&lt;br /&gt;
tStdX			equ 06h ;STANDARD DEV X&lt;br /&gt;
tStdPX			equ 07h ;STANDARD DEV POP X&lt;br /&gt;
tMinX			equ 08h ;Min X VALUE&lt;br /&gt;
tMaxX			equ 09h ;Max X VALUE&lt;br /&gt;
tMinY			equ 0Ah ;Min Y VALUE&lt;br /&gt;
tMaxY			equ 0Bh ;Max Y VALUE&lt;br /&gt;
tYmean			equ 0Ch ;Y MEAN&lt;br /&gt;
tSumY			equ 0Dh ;SUM(Y)&lt;br /&gt;
tSumYSqr		equ 0Eh ;SUM(Y^2)&lt;br /&gt;
tStdY			equ 0Fh ;STANDARD DEV Y&lt;br /&gt;
tStdPY			equ 10h ;STANDARD DEV POP Y&lt;br /&gt;
tSumXY			equ 11h ;SUM(XY)&lt;br /&gt;
tCorr			equ 12h ;CORRELATION&lt;br /&gt;
tMedX			equ 13h ;MED(X)&lt;br /&gt;
tQ1			equ 14h ;1ST QUADRANT OF X&lt;br /&gt;
tQ3			equ 15h ;3RD QUADRANT OF X&lt;br /&gt;
tQuadA			equ 16h ;1ST TERM OF QUAD POLY REG/ Y-INT&lt;br /&gt;
tQuadB			equ 17h ;2ND TERM OF QUAD POLY REG/ SLOPE&lt;br /&gt;
tQuadC			equ 18h ;3RD TERM OF QUAD POLY REG&lt;br /&gt;
tCubeD			equ 19h ;4TH TERM OF CUBIC POLY REG&lt;br /&gt;
tQuartE			equ 1Ah ;5TH TERM OF QUART POLY REG&lt;br /&gt;
tMedX1			equ 1Bh ;x1 FOR MED-MED&lt;br /&gt;
tMedX2			equ 1Ch ;x2 FOR MED-MED&lt;br /&gt;
tMedX3			equ 1Dh ;x3 FOR MED-MED&lt;br /&gt;
tMedY1			equ 1Eh ;y1 FOR MED-MED&lt;br /&gt;
tMedY2			equ 1Fh ;y2 FOR MED-MED&lt;br /&gt;
tMedY3			equ 20h ;y3 FOR MED-MED&lt;br /&gt;
tRecurn			equ 21h	;RECURSION N&lt;br /&gt;
tStatP			equ 22h&lt;br /&gt;
tStatZ			equ 23h&lt;br /&gt;
tStatT			equ 24h&lt;br /&gt;
tStatChi		equ 25h&lt;br /&gt;
tStatF			equ 26h&lt;br /&gt;
tStatDF			equ 27h&lt;br /&gt;
tStatPhat		equ 28h&lt;br /&gt;
tStatPhat1		equ 29h&lt;br /&gt;
tStatPhat2		equ 2Ah&lt;br /&gt;
tStatMeanX1		equ 2Bh&lt;br /&gt;
tStatStdX1		equ 2Ch&lt;br /&gt;
tStatN1			equ 2Dh&lt;br /&gt;
tStatMeanX2		equ 2Eh&lt;br /&gt;
tStatStdX2		equ 2Fh&lt;br /&gt;
tStatN2			equ 30h&lt;br /&gt;
tStatStdXP		equ 31h&lt;br /&gt;
tStatLower		equ 32h&lt;br /&gt;
tStatUpper		equ 33h&lt;br /&gt;
tStat_s			equ 34h&lt;br /&gt;
tLRSqr			equ 35h ;r^2&lt;br /&gt;
tBRSqr			equ 36h ;R^2&lt;br /&gt;
&lt;br /&gt;
;These next tokens are only used to access the data&lt;br /&gt;
;they are display only and the user cannot access them at all&lt;br /&gt;
;------------------------------------------------------------&lt;br /&gt;
tF_DF			equ 37h ;ANOFAV FACTOR DF&lt;br /&gt;
tF_SS			equ 38h ;ANOFAV FACTOR SS&lt;br /&gt;
tF_MS			equ 39h ;ANOFAV FACTOR MS&lt;br /&gt;
tE_DF			equ 3Ah ;ANOFAV ERROR DF&lt;br /&gt;
tE_SS			equ 3Bh ;ANOFAV ERROR SS&lt;br /&gt;
tE_MS			equ 3Ch ;ANOFAV ERROR MS&lt;br /&gt;
&lt;br /&gt;
;2nd Half Of System Input/Output Variables&lt;br /&gt;
;------------------------------------------------&lt;br /&gt;
;      SYSTEM VARIABLE EQUATES&lt;br /&gt;
;&lt;br /&gt;
tuXscl			equ 0&lt;br /&gt;
tuYscl			equ 1&lt;br /&gt;
tXscl			equ 2&lt;br /&gt;
tYscl			equ 3&lt;br /&gt;
tRecuru0		equ 4 ;U 1ST INITIAL COND&lt;br /&gt;
tRecurv0		equ 5 ;V 1ST INITIAL COND&lt;br /&gt;
tun1			equ 6 ;U(N-1); NOT USED&lt;br /&gt;
tvn1			equ 7 ;V(N-1); NOT USED&lt;br /&gt;
tuRecuru0		equ 8 ;&lt;br /&gt;
tuRecurv0		equ 9 ;&lt;br /&gt;
tXmin			equ 0Ah&lt;br /&gt;
tXmax			equ 0Bh&lt;br /&gt;
tYmin			equ 0Ch&lt;br /&gt;
tYmax			equ 0Dh&lt;br /&gt;
tTmin			equ 0Eh&lt;br /&gt;
tTmax			equ 0Fh&lt;br /&gt;
tThetaMin		equ 10h&lt;br /&gt;
tThetaMax		equ 11h&lt;br /&gt;
tuXmin			equ 12h&lt;br /&gt;
tuXmax			equ 13h&lt;br /&gt;
tuYmin			equ 14h&lt;br /&gt;
tuYmax			equ 15h&lt;br /&gt;
tuThetMin		equ 16h&lt;br /&gt;
tuThetMax		equ 17h&lt;br /&gt;
tuTmin			equ 18h&lt;br /&gt;
tuTmax			equ 19h&lt;br /&gt;
tTblMin			equ 1Ah&lt;br /&gt;
tPlotStart		equ 1Bh&lt;br /&gt;
tuPlotStart		equ 1Ch&lt;br /&gt;
tnMax			equ 1Dh&lt;br /&gt;
tunMax			equ 1Eh&lt;br /&gt;
tnMin			equ 1Fh&lt;br /&gt;
tunMin			equ 20h&lt;br /&gt;
tTblStep		equ 21h&lt;br /&gt;
tTStep			equ 22h&lt;br /&gt;
tThetaStep		equ 23h&lt;br /&gt;
tuTStep			equ 24h&lt;br /&gt;
tuThetStep		equ 25h&lt;br /&gt;
tDeltaX			equ 26h&lt;br /&gt;
tDeltaY			equ 27h&lt;br /&gt;
tXFact			equ 28h&lt;br /&gt;
tYFact			equ 29h&lt;br /&gt;
tTblInput		equ 2Ah&lt;br /&gt;
tFinN			equ 2Bh&lt;br /&gt;
tFinI			equ 2Ch&lt;br /&gt;
tFinPV			equ 2Dh&lt;br /&gt;
tFinPMT			equ 2Eh&lt;br /&gt;
tFinFV			equ 2Fh&lt;br /&gt;
tFinPY			equ 30h&lt;br /&gt;
tFinCY			equ 31h&lt;br /&gt;
tRecurw0		equ 32h ;w0(1)&lt;br /&gt;
tuRecurw0		equ 33h&lt;br /&gt;
tPlotStep		equ 34h&lt;br /&gt;
tuPlotStep		equ 35h&lt;br /&gt;
tXres			equ 36h&lt;br /&gt;
tuXres			equ 37h&lt;br /&gt;
tRecuru02		equ 38h ;u0(2)&lt;br /&gt;
tuRecuru02		equ 39h&lt;br /&gt;
tRecurv02		equ 3Ch ;v0(2)&lt;br /&gt;
tuRecurv02		equ 3Dh&lt;br /&gt;
tRecurw02		equ 3Eh ;w0(2)&lt;br /&gt;
tuRecurw02		equ 3Fh&lt;br /&gt;
&lt;br /&gt;
;2nd Byte Of t2ByteTok Tokens&lt;br /&gt;
;------------------------------&lt;br /&gt;
tFinNPV			equ 00h&lt;br /&gt;
tFinIRR			equ 01h&lt;br /&gt;
tFinBAL			equ 02h&lt;br /&gt;
tFinPRN			equ 03h&lt;br /&gt;
tFinINT			equ 04h&lt;br /&gt;
tFinToNom		equ 05h&lt;br /&gt;
tFinToEff		equ 06h&lt;br /&gt;
tFinDBD			equ 07h&lt;br /&gt;
tLCM			equ 08h&lt;br /&gt;
tGCD			equ 09h&lt;br /&gt;
tRandInt		equ 0Ah&lt;br /&gt;
tRandBin		equ 0Bh&lt;br /&gt;
tSubStrng		equ 0Ch&lt;br /&gt;
tStdDev			equ 0Dh&lt;br /&gt;
tVariance		equ 0Eh&lt;br /&gt;
tInStrng		equ 0Fh&lt;br /&gt;
tDNormal		equ 10h&lt;br /&gt;
tInvNorm		equ 11h&lt;br /&gt;
tDT			equ 12h&lt;br /&gt;
tChI			equ 13h&lt;br /&gt;
tDF			equ 14h&lt;br /&gt;
tBINPDF			equ 15h&lt;br /&gt;
tBINCDF			equ 16h&lt;br /&gt;
tPOIPDF			equ 17h&lt;br /&gt;
tPOICDF			equ 18h&lt;br /&gt;
tGEOPDF			equ 19h&lt;br /&gt;
tGEOCDF			equ 1Ah&lt;br /&gt;
tNormalPDF		equ 1Bh&lt;br /&gt;
tTPDF			equ 1Ch&lt;br /&gt;
tChiPDF			equ 1Dh&lt;br /&gt;
tFPDF			equ 1Eh&lt;br /&gt;
tRandNorm		equ 1Fh&lt;br /&gt;
tFinFPMT		equ 20h&lt;br /&gt;
tFinFI			equ 21h&lt;br /&gt;
tFinFPV			equ 22h&lt;br /&gt;
tFinFN			equ 23h&lt;br /&gt;
tFinFFV			equ 24h&lt;br /&gt;
tConj			equ 25h&lt;br /&gt;
tReal			equ 26h&lt;br /&gt;
tImag			equ 27h&lt;br /&gt;
tAngle			equ 28h&lt;br /&gt;
tCumSum			equ 29h&lt;br /&gt;
tExpr			equ 2Ah&lt;br /&gt;
tLength			equ 2Bh&lt;br /&gt;
tDeltaLst		equ 2Ch&lt;br /&gt;
tRef			equ 2Dh&lt;br /&gt;
tRRef			equ 2Eh&lt;br /&gt;
tToRect			equ 2Fh&lt;br /&gt;
tToPolar		equ 30h&lt;br /&gt;
tConste			equ 31h&lt;br /&gt;
tSinReg			equ 32h&lt;br /&gt;
tLogistic		equ 33h&lt;br /&gt;
tLinRegTTest		equ 34h&lt;br /&gt;
tShadeNorm		equ 35h&lt;br /&gt;
tShadeT			equ 36h&lt;br /&gt;
tShadeChi		equ 37h&lt;br /&gt;
tShadeF			equ 38h&lt;br /&gt;
tMatToLst		equ 39h&lt;br /&gt;
tLstToMat		equ 3Ah&lt;br /&gt;
tZTest			equ 3Bh&lt;br /&gt;
tTTest			equ 3Ch&lt;br /&gt;
t2SampZTest		equ 3Dh&lt;br /&gt;
t1PropZTest		equ 3Eh&lt;br /&gt;
t2PropZTest		equ 3Fh&lt;br /&gt;
tChiTest		equ 40h&lt;br /&gt;
tZIntVal		equ 41h&lt;br /&gt;
t2SampZInt		equ 42h&lt;br /&gt;
t1PropZInt		equ 43h&lt;br /&gt;
t2PropZInt		equ 44h&lt;br /&gt;
tGraphStyle		equ 45h&lt;br /&gt;
t2SampTTest		equ 46h&lt;br /&gt;
t2SampFTest		equ 47h&lt;br /&gt;
tTIntVal		equ 48h&lt;br /&gt;
t2SampTInt		equ 49h&lt;br /&gt;
tSetupLst		equ 4Ah&lt;br /&gt;
tFinPMTend		equ 4Bh&lt;br /&gt;
tFinPMTbeg		equ 4Ch&lt;br /&gt;
tRealM			equ 4Dh&lt;br /&gt;
tPolarM			equ 4Eh&lt;br /&gt;
tRectM			equ 4Fh&lt;br /&gt;
tExprOn			equ 50h&lt;br /&gt;
tExprOff		equ 51h&lt;br /&gt;
tClrAllLst		equ 52h&lt;br /&gt;
tGetCalc		equ 53h&lt;br /&gt;
tDelVar			equ 54h&lt;br /&gt;
tEquToStrng		equ 55h&lt;br /&gt;
tStrngToEqu		equ 56h&lt;br /&gt;
tDelLast		equ 57h&lt;br /&gt;
tSelect			equ 58h&lt;br /&gt;
tANOVA			equ 59h&lt;br /&gt;
tModBox			equ 5Ah&lt;br /&gt;
tNormProb		equ 5Bh&lt;br /&gt;
tMGT			equ 64h ;VERTICAL SPLIT&lt;br /&gt;
tZFit			equ 65h ;ZOOM FIT&lt;br /&gt;
tDiag_on		equ 66h ;DIANOSTIC DISPLAY ON&lt;br /&gt;
tDiag_off		equ 67h ;DIANOSTIC DISPLAY OFF&lt;br /&gt;
tOkEnd2v0		equ 67h ;end of 2byte tokens for version 0.&lt;br /&gt;
tArchive		equ 68h ;archive&lt;br /&gt;
tUnarchive		equ 69h ;unarchive&lt;br /&gt;
tasm			equ 6Ah&lt;br /&gt;
tasmComp		equ 6Bh	;asm compile&lt;br /&gt;
tasmPrgm		equ 6Ch	;signifies a program is asm&lt;br /&gt;
tasmCmp			equ 6Dh	;asm program is compiled&lt;br /&gt;
tLcapAAcute		equ 6Eh&lt;br /&gt;
tLcapAGrave		equ 6Fh&lt;br /&gt;
tLcapACaret		equ 70h&lt;br /&gt;
tLcapADier		equ 71h&lt;br /&gt;
tLaAcute		equ 72h&lt;br /&gt;
tLaGrave		equ 73h&lt;br /&gt;
tLaCaret		equ 74h&lt;br /&gt;
tLaDier			equ 75h&lt;br /&gt;
tLcapEAcute		equ 76h&lt;br /&gt;
tLcapEGrave		equ 77h&lt;br /&gt;
tLcapECaret		equ 78h&lt;br /&gt;
tLcapEDier		equ 79h&lt;br /&gt;
tLeAcute		equ 7Ah&lt;br /&gt;
tLeGrave		equ 7Bh&lt;br /&gt;
tLeCaret		equ 7Ch&lt;br /&gt;
tLeDier			equ 7Dh&lt;br /&gt;
tLcapIGrave		equ 7Fh&lt;br /&gt;
tLcapICaret		equ 80h&lt;br /&gt;
tLcapIDier		equ 81h&lt;br /&gt;
tLiAcute		equ 82h&lt;br /&gt;
tLiGrave		equ 83h&lt;br /&gt;
tLiCaret		equ 84h&lt;br /&gt;
tLiDier			equ 85h&lt;br /&gt;
tLcapOAcute		equ 86h&lt;br /&gt;
tLcapOGrave		equ 87h&lt;br /&gt;
tLcapOCaret		equ 88h&lt;br /&gt;
tLcapODier		equ 89h&lt;br /&gt;
tLoAcute		equ 8Ah&lt;br /&gt;
tLoGrave		equ 8Bh&lt;br /&gt;
tLoCaret		equ 8Ch&lt;br /&gt;
tLoDier			equ 8Dh&lt;br /&gt;
tLcapUAcute		equ 8Eh&lt;br /&gt;
tLcapUGrave		equ 8Fh&lt;br /&gt;
tLcapUCaret		equ 90h&lt;br /&gt;
tLcapUDier		equ 91h&lt;br /&gt;
tLuAcute		equ 92h&lt;br /&gt;
tLuGrave		equ 93h&lt;br /&gt;
tLuCaret		equ 94h&lt;br /&gt;
tLuDier			equ 95h&lt;br /&gt;
tLcapCCed		equ 96h&lt;br /&gt;
tLcCed			equ 97h&lt;br /&gt;
tLcapNTilde		equ 98h&lt;br /&gt;
tLnTilde		equ 99h&lt;br /&gt;
tLaccent		equ 9Ah&lt;br /&gt;
tLgrave			equ 9Bh&lt;br /&gt;
tLdieresis		equ 9Ch&lt;br /&gt;
tLquesDown		equ 9Dh&lt;br /&gt;
tLexclamDown		equ 9Eh&lt;br /&gt;
tLalpha			equ 9Fh&lt;br /&gt;
tLbeta			equ 0A0h&lt;br /&gt;
tLgamma			equ 0A1h&lt;br /&gt;
tLcapDelta		equ 0A2h&lt;br /&gt;
tLdelta			equ 0A3h&lt;br /&gt;
tLepsilon		equ 0A4h&lt;br /&gt;
tLlambda		equ 0A5h&lt;br /&gt;
tLmu			equ 0A6h&lt;br /&gt;
tLpi			equ 0A7h&lt;br /&gt;
tLrho			equ 0A8h&lt;br /&gt;
tLcapSigma		equ 0A9h&lt;br /&gt;
tLphi			equ 0ABh&lt;br /&gt;
tLcapOmega		equ 0ACh&lt;br /&gt;
tLphat			equ 0ADh&lt;br /&gt;
tLchi			equ 0AEh&lt;br /&gt;
tLstatF			equ 0AFh&lt;br /&gt;
tLa			equ 0B0h&lt;br /&gt;
tLb			equ 0B1h&lt;br /&gt;
tLc			equ 0B2h&lt;br /&gt;
tLd			equ 0B3h&lt;br /&gt;
tLsmalle		equ 0B4h&lt;br /&gt;
tLf			equ 0B5h&lt;br /&gt;
tLsmallg		equ 0B6h&lt;br /&gt;
tLh			equ 0B7h&lt;br /&gt;
tLi			equ 0B8h&lt;br /&gt;
tLj			equ 0B9h&lt;br /&gt;
tLk			equ 0BAh&lt;br /&gt;
tLl			equ 0BCh&lt;br /&gt;
tLm			equ 0BDh&lt;br /&gt;
tLsmalln		equ 0BEh&lt;br /&gt;
tLo			equ 0BFh&lt;br /&gt;
tLp			equ 0C0h&lt;br /&gt;
tLq			equ 0C1h&lt;br /&gt;
tLsmallr		equ 0C2h&lt;br /&gt;
tLs			equ 0C3h&lt;br /&gt;
tLsmallt		equ 0C4h&lt;br /&gt;
tLu			equ 0C5h&lt;br /&gt;
tLv			equ 0C6h&lt;br /&gt;
tLw			equ 0C7h&lt;br /&gt;
tLx			equ 0C8h&lt;br /&gt;
tLy			equ 0C9h&lt;br /&gt;
tLz			equ 0CAh&lt;br /&gt;
tLsigma			equ 0CBh&lt;br /&gt;
tLtau			equ 0CCh&lt;br /&gt;
tLcapIAcute		equ 0CDh&lt;br /&gt;
tGarbagec		equ 0CEh&lt;br /&gt;
LastToken		equ 0CEh ;tLAST TOKEN IN THIS VERSION...&lt;br /&gt;
&lt;br /&gt;
;Data Type Equates                                                    &lt;br /&gt;
;---------------------------------------------------------------------&lt;br /&gt;
RealObj			equ 0&lt;br /&gt;
ListObj			equ 1&lt;br /&gt;
MatObj			equ 2&lt;br /&gt;
EquObj			equ 3&lt;br /&gt;
StrngObj		equ 4&lt;br /&gt;
ProgObj			equ 5&lt;br /&gt;
ProtProgObj		equ 6&lt;br /&gt;
PictObj			equ 7&lt;br /&gt;
GDBObj			equ 8&lt;br /&gt;
UnknownObj		equ 9&lt;br /&gt;
UnknownEquObj		equ 0Ah&lt;br /&gt;
NewEquObj		equ 0Bh&lt;br /&gt;
CplxObj			equ 0Ch&lt;br /&gt;
CListObj		equ 0Dh&lt;br /&gt;
UndefObj		equ 0Eh&lt;br /&gt;
WindowObj		equ 0Fh&lt;br /&gt;
ZStoObj			equ 10h&lt;br /&gt;
TblRngObj		equ 11h&lt;br /&gt;
LCDObj			equ 12h&lt;br /&gt;
BackupObj		equ 13h&lt;br /&gt;
AppObj			equ 14h	;application, only used in menus/link&lt;br /&gt;
AppVarObj		equ 15h	;application variable&lt;br /&gt;
TempProgObj		equ 16h ;program, home deletes when finished&lt;br /&gt;
GroupObj		equ 17h ;group.&lt;br /&gt;
&lt;br /&gt;
;I/O Equates                                                          &lt;br /&gt;
;---------------------------------------------------&lt;br /&gt;
D0D1_bits		equ 03h&lt;br /&gt;
D0LD1L			equ 03h&lt;br /&gt;
D0LD1H			equ 01h&lt;br /&gt;
D0HD1L			equ 02h&lt;br /&gt;
D0HD1H			equ 00h&lt;br /&gt;
bport			equ 0 ;4-bit link port (I/O) &lt;br /&gt;
&lt;br /&gt;
;Device Codes&lt;br /&gt;
;-----------------------------------------------------------------&lt;br /&gt;
TI82DEV			equ 82h&lt;br /&gt;
PC82DEV			equ 02h&lt;br /&gt;
MAC82DEV		equ 12h&lt;br /&gt;
TI83FDEV		equ 73h&lt;br /&gt;
LINK83FDEV		equ 23h&lt;br /&gt;
TI83DEV			equ 83h&lt;br /&gt;
PC83DEV			equ 03h&lt;br /&gt;
MAC83DEV		equ 13h&lt;br /&gt;
TI85DEV			equ 95h ;different than real 85 so me talk&lt;br /&gt;
PC85DEV			equ 05h&lt;br /&gt;
MAC85DEV		equ 15h&lt;br /&gt;
TI73DEV			equ 74h ;device x3 is always an 83&lt;br /&gt;
PC73DEV			equ 07h&lt;br /&gt;
MAC73DEV		equ 17h&lt;br /&gt;
LINK73FDEV		equ 23h&lt;br /&gt;
PC83FDEV		equ 23h&lt;br /&gt;
&lt;br /&gt;
;System Error Codes                                                  &lt;br /&gt;
;-----------------------------------------------------------&lt;br /&gt;
E_EDITF			equ 7 ;allow re-entering application&lt;br /&gt;
E_EDIT			equ 1&amp;lt;&amp;lt;E_EDITF&lt;br /&gt;
E_Mask			equ 7Fh&lt;br /&gt;
E_Overflow		equ 1+E_EDIT&lt;br /&gt;
E_DivBy0		equ 2+E_EDIT&lt;br /&gt;
E_SingularMat		equ 3+E_EDIT&lt;br /&gt;
E_Domain		equ 4+E_EDIT&lt;br /&gt;
E_Increment		equ 5+E_EDIT&lt;br /&gt;
E_Break			equ 6+E_EDIT&lt;br /&gt;
E_NonReal		equ 7+E_EDIT&lt;br /&gt;
E_Syntax		equ 8+E_EDIT&lt;br /&gt;
E_DataType		equ 9+E_EDIT&lt;br /&gt;
E_Argument		equ 10+E_EDIT&lt;br /&gt;
E_DimMismatch		equ 11+E_EDIT&lt;br /&gt;
E_Dimension		equ 12+E_EDIT&lt;br /&gt;
E_Undefined		equ 13+E_EDIT&lt;br /&gt;
E_Memory		equ 14+E_EDIT&lt;br /&gt;
E_Invalid		equ 15+E_EDIT&lt;br /&gt;
E_IllegalNest		equ 16+E_EDIT&lt;br /&gt;
E_Bound			equ 17+E_EDIT&lt;br /&gt;
E_GraphRange		equ 18+E_EDIT&lt;br /&gt;
E_Zoom			equ 19+E_EDIT&lt;br /&gt;
E_Label			equ 20&lt;br /&gt;
E_Stat			equ 21&lt;br /&gt;
E_Solver		equ 22+E_EDIT&lt;br /&gt;
E_Singularity		equ 23+E_EDIT&lt;br /&gt;
E_SignChange		equ 24+E_EDIT&lt;br /&gt;
E_Iterations		equ 25+E_EDIT&lt;br /&gt;
E_BadGuess		equ 26+E_EDIT&lt;br /&gt;
E_StatPlo		equ 27&lt;br /&gt;
E_TolTooSmall		equ 28+E_EDIT&lt;br /&gt;
E_Reserved		equ 29+E_EDIT&lt;br /&gt;
E_Mode			equ 30+E_EDIT&lt;br /&gt;
E_LnkErr		equ 31+E_EDIT&lt;br /&gt;
E_LnkMemErr		equ 32+E_EDIT&lt;br /&gt;
E_LnkTransErr		equ 33+E_EDIT&lt;br /&gt;
E_LnkDupErr		equ 34+E_EDIT&lt;br /&gt;
E_LnkMemFull		equ 35+E_EDIT&lt;br /&gt;
E_Unknown		equ 36+E_EDIT&lt;br /&gt;
E_Scale			equ 37+E_EDIT&lt;br /&gt;
E_IdNotFound		equ 38&lt;br /&gt;
E_NoMode		equ 39+E_EDIT&lt;br /&gt;
E_Validation		equ 40&lt;br /&gt;
E_Length		equ 41+E_EDIT&lt;br /&gt;
E_Application		equ 42+E_EDIT&lt;br /&gt;
E_AppErr1		equ 43+E_EDIT&lt;br /&gt;
E_AppErr2		equ 44+E_EDIT&lt;br /&gt;
E_ExpiredApp		equ 45&lt;br /&gt;
E_BadAdd		equ 46&lt;br /&gt;
E_Archived		equ 47+E_EDIT&lt;br /&gt;
E_Version		equ 48&lt;br /&gt;
E_ArchFull		equ 49&lt;br /&gt;
E_Variable		equ 50+E_EDIT&lt;br /&gt;
E_Duplicate		equ 51+E_EDIT&lt;br /&gt;
HigErrNum		equ 51&lt;br /&gt;
;Obsolete error numbers 34 ;first LINK error&lt;br /&gt;
E_LinkIOChkSum		equ 34&lt;br /&gt;
E_LinkIOTimeOut		equ 35&lt;br /&gt;
E_LinkIOBusy		equ 36&lt;br /&gt;
E_LinkIOVer		equ 37&lt;br /&gt;
&lt;br /&gt;
;Equates To RAM Locations For Stat Vars&lt;br /&gt;
;----------------------------------------------------------------&lt;br /&gt;
FPLEN			equ 9 ;Length of a floating-point number.&lt;br /&gt;
StatN			equ statVars&lt;br /&gt;
XMean			equ StatN + FPLEN&lt;br /&gt;
SumX			equ XMean + FPLEN&lt;br /&gt;
SumXSqr			equ SumX + FPLEN&lt;br /&gt;
StdX			equ SumXSqr + FPLEN&lt;br /&gt;
StdPX			equ StdX + FPLEN&lt;br /&gt;
MinX			equ StdPX + FPLEN&lt;br /&gt;
MaxX			equ MinX + FPLEN&lt;br /&gt;
MinY			equ MaxX + FPLEN&lt;br /&gt;
MaxY			equ MinY + FPLEN&lt;br /&gt;
YMean			equ MaxY + FPLEN&lt;br /&gt;
SumY			equ YMean + FPLEN&lt;br /&gt;
SumYSqr			equ SumY + FPLEN&lt;br /&gt;
StdY			equ SumYSqr + FPLEN&lt;br /&gt;
StdPY			equ StdY + FPLEN&lt;br /&gt;
SumXY			equ StdPY + FPLEN&lt;br /&gt;
Corr			equ SumXY + FPLEN&lt;br /&gt;
MedX			equ Corr + FPLEN&lt;br /&gt;
Q1			equ MedX + FPLEN&lt;br /&gt;
Q3			equ Q1 + FPLEN&lt;br /&gt;
QuadA			equ Q3 + FPLEN&lt;br /&gt;
QuadB			equ QuadA + FPLEN&lt;br /&gt;
QuadC			equ QuadB + FPLEN&lt;br /&gt;
CubeD			equ QuadC + FPLEN&lt;br /&gt;
QuartE			equ CubeD + FPLEN&lt;br /&gt;
MedX1			equ QuartE + FPLEN&lt;br /&gt;
MedX2			equ MedX1 + FPLEN&lt;br /&gt;
MedX3			equ MedX2 + FPLEN&lt;br /&gt;
MedY1			equ MedX3 + FPLEN&lt;br /&gt;
MedY2			equ MedY1 + FPLEN&lt;br /&gt;
MedY3			equ MedY2 + FPLEN&lt;br /&gt;
PStat			equ MedY3 + 2*FPLEN&lt;br /&gt;
ZStat			equ PStat + FPLEN&lt;br /&gt;
TStat			equ ZStat + FPLEN&lt;br /&gt;
ChiStat			equ TStat + FPLEN&lt;br /&gt;
FStat			equ ChiStat + FPLEN&lt;br /&gt;
DF			equ FStat + FPLEN&lt;br /&gt;
Phat			equ DF + FPLEN&lt;br /&gt;
Phat1			equ Phat + FPLEN&lt;br /&gt;
Phat2			equ Phat1 + FPLEN&lt;br /&gt;
MeanX1			equ Phat2 + FPLEN&lt;br /&gt;
StdX1			equ MeanX1 + FPLEN&lt;br /&gt;
StatN1			equ StdX1 + FPLEN&lt;br /&gt;
MeanX2			equ StatN1 + FPLEN&lt;br /&gt;
StdX2			equ MeanX2 + FPLEN&lt;br /&gt;
StatN2			equ StdX2 + FPLEN&lt;br /&gt;
StdXP2			equ StatN2 + FPLEN&lt;br /&gt;
SLower			equ StdXP2 + FPLEN&lt;br /&gt;
SUpper			equ SLower + FPLEN&lt;br /&gt;
SStat			equ SUpper + FPLEN&lt;br /&gt;
F_DF			equ anovaf_vars&lt;br /&gt;
F_SS			equ F_DF + FPLEN&lt;br /&gt;
F_MS			equ F_SS + FPLEN&lt;br /&gt;
E_DF			equ F_MS + FPLEN&lt;br /&gt;
E_SS			equ E_DF + FPLEN&lt;br /&gt;
E_MS			equ E_SS + FPLEN&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=User:Zeda</id>
		<title>User:Zeda</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=User:Zeda"/>
				<updated>2013-10-23T03:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Created page with 'I am Zeda, a z80 programmer.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am Zeda, a z80 programmer.&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root</id>
		<title>Z80 Routines:Math:Square root</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root"/>
				<updated>2013-10-23T03:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Speed Optimization */ The old speed version was slower than the 29-byte one. Here is a smaller, faster routine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Square root]]&lt;br /&gt;
[[Category:Z80 Routines|Square root]]&lt;br /&gt;
&lt;br /&gt;
==Size Optimization==&lt;br /&gt;
This version is size optimized, it compares every perfect square against HL until a square that is larger is found.  Obviously slower, but does get the job done in only 12 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;HL = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
sqrt:&lt;br /&gt;
   ld a,$ff&lt;br /&gt;
   ld de,1&lt;br /&gt;
sqrtloop:&lt;br /&gt;
   inc a&lt;br /&gt;
   dec e&lt;br /&gt;
   dec de&lt;br /&gt;
   add hl,de&lt;br /&gt;
   jr c,sqrtloop&lt;br /&gt;
   ret &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Speed Optimization==&lt;br /&gt;
This version is an unrolled version of a square root algorithm taking at most 555 t-states. The downside is that it takes 111 bytes, but if speed is a priority, this is probably the best option. Most of the unrolled iterations are specially optimised for their location in the algorithm.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;HL = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
;111 bytes&lt;br /&gt;
;555 t-states worst case&lt;br /&gt;
SqrtHL:&lt;br /&gt;
;zero some registers&lt;br /&gt;
	xor a&lt;br /&gt;
	ld c,a&lt;br /&gt;
	ld d,a&lt;br /&gt;
&lt;br /&gt;
;move the LSB of the input into E for later use, then shift the LSB into L and load H with 0.&lt;br /&gt;
;H will be a carry register, where the bits in L are rotated in&lt;br /&gt;
	ld e,l&lt;br /&gt;
	ld l,h&lt;br /&gt;
	ld h,c&lt;br /&gt;
&lt;br /&gt;
;Iteration 1 is optimised&lt;br /&gt;
; C is treated as the accumulator&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 2&lt;br /&gt;
; rotate in 2 more bits from the MSB of the input into H&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
; shift the accumulator&lt;br /&gt;
	rl c&lt;br /&gt;
	ld a,c&lt;br /&gt;
	rla&lt;br /&gt;
; A is now double the shifted accumulator&lt;br /&gt;
	sub h&lt;br /&gt;
; doubles as a comparison of the carry register (H) to double the accumulator&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
; If the carry is &amp;gt; 2*accumulator, the bit in the accumulator needs to be 1:&lt;br /&gt;
	inc c&lt;br /&gt;
; We need to perform H-(2C+1), but A=2C-H.&lt;br /&gt;
; We could do NEG to get A=H-2C, then DEC A, but NEG = CPL \ INC A&lt;br /&gt;
; NEG \ DEC A  =  CPL \ INC A \ DEC A&lt;br /&gt;
; So just use CPL, saving 8 t-states, 1 byte&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 3&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	rl c&lt;br /&gt;
	ld a,c&lt;br /&gt;
	rla&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 4&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	rl c&lt;br /&gt;
	ld a,c&lt;br /&gt;
	rla&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;L is 0, H is the current carry&lt;br /&gt;
;E is the lower 8 bits&lt;br /&gt;
; Load the next set of bits (LSB of input) into L so that they can be rotated into H&lt;br /&gt;
	ld l,e&lt;br /&gt;
&lt;br /&gt;
;Iteration 5&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	rl c&lt;br /&gt;
	ld a,c&lt;br /&gt;
	rla&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 6&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	rl c&lt;br /&gt;
	ld a,c&lt;br /&gt;
	rla&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 7&lt;br /&gt;
; Now we need to start worrying about 8 bit overflow.&lt;br /&gt;
; In particular, the carry register, H should be ideally 9 bits for this iteration, 10 for the last.&lt;br /&gt;
; The accumulator, C, is 8 bits, but we need to compare H to 2*C, and 2*C is up to 9 bits on the last iteration.&lt;br /&gt;
;l has 4 more bits to rotate into h&lt;br /&gt;
&lt;br /&gt;
	sla c \ ld a,c \ add a,a&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	jr nc,$+6&lt;br /&gt;
	sub h \ jp $+6&lt;br /&gt;
	sub h&lt;br /&gt;
	jr nc,$+5&lt;br /&gt;
	inc c&lt;br /&gt;
	cpl&lt;br /&gt;
	ld h,a&lt;br /&gt;
&lt;br /&gt;
;Iteration 8&lt;br /&gt;
; A lot of fancy stuff here&lt;br /&gt;
; D is 0, from way back at the beginning&lt;br /&gt;
; now I put H-&amp;gt;E so that DE can hold the potentially 10-bit number&lt;br /&gt;
; Now C-&amp;gt;A, L-&amp;gt;H&lt;br /&gt;
; H thus has the last two bits of the input that need to be rotated into DE&lt;br /&gt;
; L has the value of the accumualtor which needs to be multiplied by 4 for a comparison to DE&lt;br /&gt;
; So 2 shifts of HL into DE results in DE holding the carry, HL holding 4*accumulated result!	&lt;br /&gt;
	ld e,h&lt;br /&gt;
	ld h,l&lt;br /&gt;
	ld l,c&lt;br /&gt;
   	ld a,l&lt;br /&gt;
	add hl,hl \ rl e \ rl d&lt;br /&gt;
	add hl,hl \ rl e \ rl d&lt;br /&gt;
	sbc hl,de&lt;br /&gt;
;the c flag now has the state of the last bit of the result, HL does not need to be restored.&lt;br /&gt;
	rla&lt;br /&gt;
	ret&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Balanced Optimization==&lt;br /&gt;
This version is a balance between speed and size. It also uses the high school method and runs under 1200 tstates. It only costs 41 bytes.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;-------------------------------&lt;br /&gt;
;Square Root&lt;br /&gt;
;Inputs:&lt;br /&gt;
;DE = number to be square rooted&lt;br /&gt;
;Outputs:&lt;br /&gt;
;A  = square root&lt;br /&gt;
&lt;br /&gt;
Sqrt:&lt;br /&gt;
    ld hl,0&lt;br /&gt;
    ld c,l&lt;br /&gt;
    ld b,h&lt;br /&gt;
    ld a,8&lt;br /&gt;
Sqrtloop:&lt;br /&gt;
    sla e&lt;br /&gt;
    rl d&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    sla e&lt;br /&gt;
    rl d&lt;br /&gt;
    adc hl,hl&lt;br /&gt;
    scf               ;Can be optimised&lt;br /&gt;
    rl c              ;with SL1 instruction&lt;br /&gt;
    rl b&lt;br /&gt;
    sbc hl,bc&lt;br /&gt;
    jr nc,Sqrtaddbit&lt;br /&gt;
    add hl,bc&lt;br /&gt;
    dec c&lt;br /&gt;
Sqrtaddbit:&lt;br /&gt;
    inc c&lt;br /&gt;
    res 0,c&lt;br /&gt;
    dec a&lt;br /&gt;
    jr nz,Sqrtloop&lt;br /&gt;
    ld a,c&lt;br /&gt;
    rr b&lt;br /&gt;
    rra&lt;br /&gt;
    ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Presumably the best ==&lt;br /&gt;
&lt;br /&gt;
This code was found on z80 bits and has the advantage of being both faster than all three versions above and smaller than the last two (it runs in under 720 T-states (under 640 if fully unrolled) and takes a mere 29 bytes). On the other hand it takes a somewhat unconventionnal input... It computes the square root of the 16bit number formed by la and places the result in d.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sqrt_la:&lt;br /&gt;
	ld	de, 0040h	; 40h appends &amp;quot;01&amp;quot; to D&lt;br /&gt;
	ld	h, d&lt;br /&gt;
	&lt;br /&gt;
	ld	b, 7&lt;br /&gt;
	&lt;br /&gt;
	; need to clear the carry beforehand&lt;br /&gt;
	or	a&lt;br /&gt;
	&lt;br /&gt;
_loop:&lt;br /&gt;
	sbc	hl, de&lt;br /&gt;
	jr	nc, $+3&lt;br /&gt;
	add	hl, de&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	rla&lt;br /&gt;
	adc	hl, hl&lt;br /&gt;
	&lt;br /&gt;
	djnz	_loop&lt;br /&gt;
	&lt;br /&gt;
	sbc	hl, de		; optimised last iteration&lt;br /&gt;
	ccf&lt;br /&gt;
	rl	d&lt;br /&gt;
	&lt;br /&gt;
	ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other Options==&lt;br /&gt;
A binary search of a square table would yield much better best case scenarios and the worst case scenarios would be similar to the high school method. However this would also require 512 byte table making it significantly larger than the other routines.  Of course the table could also serve as a rapid squaring method.&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''James Montelongo'''&lt;br /&gt;
* '''Milos &amp;quot;baze&amp;quot; Bazelides''' (or possibly one of the contributor of [http://baze.au.com/misc/z80bits.html z80bits])&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Optimization</id>
		<title>Z80 Optimization</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Optimization"/>
				<updated>2013-03-31T12:03:55Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Math and Logic tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Sometimes it is needed some extra speed in ASM or make your game smaller to fit on the calculator. Examples: consuming graphics/data programs and graphics code of mapping, grayscale and 3D graphics.&lt;br /&gt;
&lt;br /&gt;
If you are just looking for cutting some bytes go straight to small tricks in this topic.&lt;br /&gt;
&lt;br /&gt;
== Registers and Memory ==&lt;br /&gt;
Generally good algorithms on z80 use registers in a appropriate form.&lt;br /&gt;
It is also a good practise to keep a convention and plan how you are going to use the registers.&lt;br /&gt;
&lt;br /&gt;
General use of registers:&lt;br /&gt;
* a - 8-bit accumulator&lt;br /&gt;
* b - counter&lt;br /&gt;
* c,d,e,h,l auxiliary to accumulator and copy of b or a&lt;br /&gt;
&lt;br /&gt;
* hl - 16-bit accumulator/pointer of a address memory&lt;br /&gt;
* de - pointer of a destination address memory&lt;br /&gt;
* bc - 16-bit counter&lt;br /&gt;
* ix - index register/pointer to table in memory/save copy of hl/pointer to memory when hl and de are being used&lt;br /&gt;
* iy - index register/pointer to table in memory (use when there is no other option or need optimal execution) (disable interrupts and on exit restore the original value because TI-OS uses)&lt;br /&gt;
&lt;br /&gt;
=== 8-bit vs. 16-bit Operations ===&lt;br /&gt;
&lt;br /&gt;
The z80 processor makes faster operations on 8-bit values.&lt;br /&gt;
Code dealing with 16-bit register tends to be bigger and slower because of the equivalent 16-bit instruction is slower or it does not exist and needs to be replaced with more instructions. And sometimes the equivalent 16-bit instruction is 1 more byte.&lt;br /&gt;
If you use ix or iy registers operations are even slower and always are 1 byte bigger for each instruction. So try to convert your code to use hl and de instead of ix and iy.&lt;br /&gt;
&lt;br /&gt;
In a practical example, imagine:&lt;br /&gt;
- you pass through the accumulator a value to a routine&lt;br /&gt;
- if the only valid values of the accumulator range from 0 to 63 and if in that routine you need to multiply the accumulator by, say 12, it has to be stored in a 16-bit pair register.&lt;br /&gt;
- but you can multiply a by 4 before overflowing (63*4 = 252 which is smaller than 255) and take advantage of this to optimize&lt;br /&gt;
&lt;br /&gt;
Now on the code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; The most usual way is pass A (the accumulator) right in the start to HL&lt;br /&gt;
	ld h,0&lt;br /&gt;
	ld l,a&lt;br /&gt;
	add a,a&lt;br /&gt;
	ld d,h&lt;br /&gt;
	ld e,a&lt;br /&gt;
	add hl,de&lt;br /&gt;
	add hl,hl&lt;br /&gt;
	add hl,hl	; hl=a*12&lt;br /&gt;
; 9 bytes, 56 clocks&lt;br /&gt;
&lt;br /&gt;
; But given a is between 0 and 63 you can multiply by 4 without overflowing the 8-bit limit (255)&lt;br /&gt;
	add a,a&lt;br /&gt;
	add a,a		; a*4&lt;br /&gt;
	ld l,a&lt;br /&gt;
	ld e,a&lt;br /&gt;
	ld h,0&lt;br /&gt;
	ld d,h		; hl=a*4 and de=a*4&lt;br /&gt;
	add hl,hl	; hl=a*8&lt;br /&gt;
	add hl,de	; hl=a*12&lt;br /&gt;
; 9 bytes, 49 clocks&lt;br /&gt;
&lt;br /&gt;
; hey, minus 7 clock cycles&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example you only shaved a few clock cycles but sometimes you can save some bytes, too.&lt;br /&gt;
You can do this for other registers than A accumulator.&lt;br /&gt;
&lt;br /&gt;
For example if passed in l and l is always lower than 64, you can do &amp;quot; sla l \ sla l \ ld h,0	&amp;quot; to multiply l by four and use hl for 16-bit operations. In this case you are exchanging size with speed increase. Each sla instruction is 2 bytes and add hl,hl is only 1 byte.&lt;br /&gt;
&lt;br /&gt;
Mind this optimizations can produce bugs and somewhat hard code to follow, so comment them.&lt;br /&gt;
I recommend to proceed to this optimization only when you really need speed and the code is bug free.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One common trick with multiplication by 256 is just load around the low byte register to the high byte register. This works because in binary a multiplication by 256 is like shifting 8 bits left, entering zeros. Examples:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; multiply a by 256 and store in hl&lt;br /&gt;
	ld h,a&lt;br /&gt;
	ld l,0&lt;br /&gt;
; multiply hl by 256 and store in ade (pseudo 24-bit pair register)&lt;br /&gt;
	ld a,h&lt;br /&gt;
	ld d,l&lt;br /&gt;
	ld e,0&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are out of registers, try using ixh/ixl/iyh/iyl  and even the i register for loop counters instead of maintaining a counter in memory or pushing/popping an already used register to the stack inside a loop. Using ixh/ixl/iyh/iyl will break compatibility with the TI-84+SE emulated by the Nspire. You can only use i register for other purposes if you disable interrupts first (di).&lt;br /&gt;
&lt;br /&gt;
=== Shadow registers ===&lt;br /&gt;
&lt;br /&gt;
In some rare cases, when you run out of registers and cannot to either refactor your algorithm(s) or to rely on RAM storage you may want to use the shadow registers : af', bc', de' and hl'&lt;br /&gt;
&lt;br /&gt;
These registers behave like their &amp;quot;standard&amp;quot; counterparts (af, bc, de, hl) and you can swap the two register sets at using the following instructions :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ex af, af'  ; swaps af and af' as the mnemonic indicates&lt;br /&gt;
&lt;br /&gt;
 exx         ; swaps bc, de, hl and bc', de', hl'&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shadow registers are somewhat common for doing arithmetic operations on some big integers (16-bit to 32-bit) or BCD operations without rely on RAM storage or pushing and popping to the stack. Example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
MUL32:&lt;br /&gt;
        DI&lt;br /&gt;
        AND     A               ; RESET CARRY FLAG&lt;br /&gt;
        SBC     HL,HL           ; LOWER RESULT = 0&lt;br /&gt;
        EXX&lt;br /&gt;
        SBC     HL,HL           ; HIGHER RESULT = 0&lt;br /&gt;
        LD      A,B             ; MPR IS AC'BC&lt;br /&gt;
        LD      B,32            ; INITIALIZE LOOP COUNTER&lt;br /&gt;
MUL32LOOP:&lt;br /&gt;
        SRA     A               ; RIGHT SHIFT MPR&lt;br /&gt;
        RR      C&lt;br /&gt;
        EXX&lt;br /&gt;
        RR      B&lt;br /&gt;
        RR      C               ; LOWEST BIT INTO CARRY&lt;br /&gt;
        JR      NC,MUL32NOADD&lt;br /&gt;
        ADD     HL,DE           ; RESULT += MPD&lt;br /&gt;
        EXX&lt;br /&gt;
        ADC     HL,DE&lt;br /&gt;
        EXX&lt;br /&gt;
MUL32NOADD:&lt;br /&gt;
        SLA     E               ; LEFT SHIFT MPD&lt;br /&gt;
        RL      D&lt;br /&gt;
        EXX&lt;br /&gt;
        RL      E&lt;br /&gt;
        RL      D&lt;br /&gt;
        DJNZ    MUL32LOOP&lt;br /&gt;
        EXX&lt;br /&gt;
       &lt;br /&gt;
; RESULT IN H'L'HL&lt;br /&gt;
        RET&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shadow registers can be of a great help but they come with two drawbacks :&lt;br /&gt;
&lt;br /&gt;
* they cannot coexist with the &amp;quot;standard&amp;quot; registers : you cannot use ld to assign from a standard to a shadow or vice-versa. Instead you must use nasty constructs such as :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; loads hl' with the contents of hl&lt;br /&gt;
 push hl&lt;br /&gt;
 exx&lt;br /&gt;
 pop hl&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* they require interrupts to be disabled since they are originally intended for use in Interrupt Service Routine. There are situations where it is affordable and others where it isn't. Regardless, it is generally a good policy to restore the previous interrupt status (enabled/disabled) upon return instead of letting it up to the caller. Hopefully it s relatively easy to do (though it does add 4 bytes and 29/33 T-states to the routine) :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  ld a, i  ; this is the core of the trick, it sets P/V to the value of IFF so P/V is set iff interrupts were enabled at that point&lt;br /&gt;
  push af  ; save flags&lt;br /&gt;
  di       ; disable interrupts&lt;br /&gt;
  &lt;br /&gt;
  ; do something with shadow registers here&lt;br /&gt;
&lt;br /&gt;
  pop af   ; get back flags&lt;br /&gt;
  ret po   ; po = P/V reset so in this case it means interrupts were disabled before the routine was called&lt;br /&gt;
  ei       ; re-enable interrupts&lt;br /&gt;
  ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Note that this produces ugly and very hard code to follow, so comment it very well for understanding and debugging later.&lt;br /&gt;
&lt;br /&gt;
=== SP register ===&lt;br /&gt;
&lt;br /&gt;
This register is used in desperate situations generally during an interrupt loop demanding as much speed as possible and the normal registers are used. (remarkably used in James Montelongo 4 lvl grayscale interlace in graylib2.inc)&lt;br /&gt;
You need to know these valid and not generally known instructions:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld sp,6&lt;br /&gt;
 add hl,sp&lt;br /&gt;
 sbc hl,sp&lt;br /&gt;
 inc sp&lt;br /&gt;
 dec sp&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now a example of such situation:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld (saveSP),sp&lt;br /&gt;
;init hl,de,bc,a&lt;br /&gt;
 ld sp,6&lt;br /&gt;
loop:&lt;br /&gt;
;code&lt;br /&gt;
 add hl,sp  ;get next row of a table for example&lt;br /&gt;
;code using bc,de,ix,a&lt;br /&gt;
 ld a,b&lt;br /&gt;
 or c&lt;br /&gt;
 jp nz,loop:&lt;br /&gt;
;code&lt;br /&gt;
 ld sp,(saveSP)&lt;br /&gt;
 ret    ;finish interrupt&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
When you use sp in this way this means you can not push/pop registers and no calls are allowed.&lt;br /&gt;
Mind again that this is only used as last resource. Don't forget to save and restore sp like the example shows.&lt;br /&gt;
&lt;br /&gt;
=== Stack ===&lt;br /&gt;
&lt;br /&gt;
When you run out of registers, stack may offer an interesting alternative to fixed RAM location for temporary storage.&lt;br /&gt;
&lt;br /&gt;
==== Allocation ====&lt;br /&gt;
&lt;br /&gt;
You can either allocate stack space with repeated push, which allows to initialize the data but restricts the allocated space to multiples of 2.&lt;br /&gt;
An alternate way is to allocate uninitialized stack space (hl may be replaced with an index register) :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; allocates 7 bytes of stack space : 5 bytes, 27 T-states instead of 4 bytes, 44 T-states with 4 push which would have forced the alloc of 8 bytes&lt;br /&gt;
 ld hl, -7&lt;br /&gt;
 add hl, sp&lt;br /&gt;
 ld sp, hl&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access ====&lt;br /&gt;
&lt;br /&gt;
The most common way of accessing data allocated on stack is to use an index register since all allocated &amp;quot;variables&amp;quot; can be accessed without having to use inc/dec but this is obviously not a strict requirement. Beware though, using stack space is not always optimal in terms of speed, depending (among other things) on your register allocation strategy :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; 4 bytes, 19 T-states&lt;br /&gt;
 ld c, (ix + n)   ; n is an immediate value in -128..127&lt;br /&gt;
 &lt;br /&gt;
 ; 4 bytes, 17 T-states, destroys a&lt;br /&gt;
 ld a, (somelocation)&lt;br /&gt;
 ld c, a&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your needs go beyond simple load/store however, this method start to show its real power since it vastly simplify some operations that are complicated to do with fixed storage location (and generally screw up register in the process).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; 3 bytes, 19 T-states&lt;br /&gt;
 cp (ix + n)&lt;br /&gt;
&lt;br /&gt;
 sub (ix + n)&lt;br /&gt;
 sbc a, (ix + n)&lt;br /&gt;
 add a, (ix + n)&lt;br /&gt;
 adc a, (ix + n)&lt;br /&gt;
&lt;br /&gt;
 inc (ix + n)&lt;br /&gt;
 dec (ix + n)&lt;br /&gt;
&lt;br /&gt;
 and (ix + n)&lt;br /&gt;
 or (ix + n)&lt;br /&gt;
 xor (ix + n)&lt;br /&gt;
&lt;br /&gt;
 ; 4 bytes, 23 T-states&lt;br /&gt;
 rl (ix + n)&lt;br /&gt;
 rr (ix + n)&lt;br /&gt;
 rlc (ix + n)&lt;br /&gt;
 rrc (ix + n)&lt;br /&gt;
 sla (ix + n)&lt;br /&gt;
 sra (ix + n)&lt;br /&gt;
 sll (ix + n)&lt;br /&gt;
 srl (ix + n)&lt;br /&gt;
 bit k, (ix + n)   ; k is an immediate value in 0..7&lt;br /&gt;
 set k, (ix + n)&lt;br /&gt;
 res k, (ix + n)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, choose wisely between hl and an index register depending on the structure of your data the smallest/fastest allocation solution may vary (hl equivalent instructions are generally 2 bytes smaller and 12 T-states faster but do not allow indexing so may require intermediate inc/dec).&lt;br /&gt;
&lt;br /&gt;
==== Deallocation ====&lt;br /&gt;
&lt;br /&gt;
If you want need to pop an entry from the stack but need to preserve all registers remember that sp can be incremented/decremented like any 16bit register :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; drops the top stack entry : waste 1 byte and 2 T-states but may enable better register allocation...&lt;br /&gt;
 inc sp&lt;br /&gt;
 inc sp&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have a large amount of stack space to drop and a spare 16 bit register (hl, index, or de that you can easily swap with hl) :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ; drop 16 bytes of stack space : 5 bytes, 27 T-states instead of 8 bytes, 80 T-states for 8 pop&lt;br /&gt;
 ld hl, 16&lt;br /&gt;
 add hl, sp&lt;br /&gt;
 ld sp, hl&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
The larger the space to drop the more T-states you will save, and at some point you'll start saving space as well (beyond 8 bytes)&lt;br /&gt;
&lt;br /&gt;
== General Algorithms ==&lt;br /&gt;
&lt;br /&gt;
Registers and Memory use is very important in writing concise and fast z80 code. Then comes the general optimization.&lt;br /&gt;
&lt;br /&gt;
First, try to optimize the more used code in subroutines and large loops. Finding the bottleneck and solving it, is enough to many programs.&lt;br /&gt;
&lt;br /&gt;
Do not forget that in z80 assembly vector tables (or look up tables) gives smaller and faster code than blocks of comparisons and jumps. Other times using a chunk of data for a task is better than a more usual programming method (notably in graphics screen effects).&lt;br /&gt;
See [[Z80 Good Programming Practices]] for examples.&lt;br /&gt;
&lt;br /&gt;
Look up in a complete instruction set for searching some instruction that can optimize somewhere in the code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A list of things to keep in mind:&lt;br /&gt;
* Rework conditionals to be more efficient.&lt;br /&gt;
* Make sure the most common checks come first. Or said in other way, the more special and rare cases check in last.&lt;br /&gt;
* Get out of the main loop special cases check if they aren't needed there.&lt;br /&gt;
* Rearrange program flow&lt;br /&gt;
* When possible, if you can afford to have a bigger overhead and get code out of the main loop do it.&lt;br /&gt;
* When your code seems that even with optimization won't be efficient enough, try another approach or algorithm. Search other algorithms in Wikipedia, for instance.&lt;br /&gt;
* Rewriting code from scratch can bring new ideas (use in desperate situations because of all work needed to write it)&lt;br /&gt;
* Remember almost all times is better to leave optimization to the end. Optimization can bring too early headaches with crashes and debugging. And because ASM is very fast and sometimes even smaller than higher level languages, it may not be needed further optimization.&lt;br /&gt;
* Document wacky optimizations to understand the code later (z80 optimization leads to very hard code to understand)&lt;br /&gt;
&lt;br /&gt;
== Self Modifying Code ==&lt;br /&gt;
&lt;br /&gt;
If your code is in ram, writes can be done to change the code. Having a instruction set that explains the opcodes is useful.&lt;br /&gt;
Despite the self modifying code can be used in any instruction, it is very common with loading constants to registers.&lt;br /&gt;
&lt;br /&gt;
Generally it is used to save any value to be used later (usually seen in masks). Examples:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld (savemask),a&lt;br /&gt;
;...code...&lt;br /&gt;
savemask = $+1&lt;br /&gt;
 ld a,$00   ; $00 is just a placeholder&lt;br /&gt;
&lt;br /&gt;
 ld (something),hl&lt;br /&gt;
;... code&lt;br /&gt;
something = $+1&lt;br /&gt;
 ld de,$0000&lt;br /&gt;
&lt;br /&gt;
 ld (saveSP),sp&lt;br /&gt;
;... code ...&lt;br /&gt;
saveSP = $+1&lt;br /&gt;
 ld sp,$0000  ; restore sp&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SMC (Self Modifying Code) is quite used with unrolling and relative jumps. Example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld (jpmodify),a&lt;br /&gt;
;...&lt;br /&gt;
jpmodify = $+1&lt;br /&gt;
 jr $00&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 rrca&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another SMC is modifying load instructions with (ix+0) and change the 0 to other values to really quickly read and write to the nth element of a list without using any extra registers.&lt;br /&gt;
&lt;br /&gt;
== Small Tricks ==&lt;br /&gt;
&lt;br /&gt;
Note that the following tricks act much like a peep-hole optimizer and are the last optimization step : remember to first optimize your algorithm and register allocation before applying any of the following if you really want the fastest speed and the smallest code.&lt;br /&gt;
&lt;br /&gt;
Also note that near every trick turn the code less understandable and documenting them is a good idea. You can easily forgot after a while without reading parts of the code.&lt;br /&gt;
&lt;br /&gt;
Be warned that some tricks are not exactly equivalent to the normal way and may have exceptions on its use, comments warn about them. Some tricks apply to other cases, but again you have to be careful.&lt;br /&gt;
&lt;br /&gt;
There are some tricks that are nothing more than the correct use of the available instructions on the z80. Keeping an instruction set summary, help to visualize what you can do during coding.&lt;br /&gt;
&lt;br /&gt;
=== Optimize size and speed ===&lt;br /&gt;
&lt;br /&gt;
==== Loading stuff ====&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of:&lt;br /&gt;
 ld a,0&lt;br /&gt;
;Try this:&lt;br /&gt;
 xor a    ;disadvantages: changes flags&lt;br /&gt;
;or&lt;br /&gt;
 sub a    ;disadvantages: changes flags&lt;br /&gt;
; -&amp;gt; save 1 byte and 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
	ld b,$20&lt;br /&gt;
	ld c,$30&lt;br /&gt;
;try this&lt;br /&gt;
	ld bc,$2030&lt;br /&gt;
;or this&lt;br /&gt;
	ld bc,(b_num * 256) + c_num		;where b_num goes to b register and c_num to c register&lt;br /&gt;
; -&amp;gt; save 1 byte and 4 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
  ld a,$42&lt;br /&gt;
  ld (hl),a&lt;br /&gt;
;try this&lt;br /&gt;
  ld (hl),$42&lt;br /&gt;
; -&amp;gt; save 1 byte and 4 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
	xor a&lt;br /&gt;
	ld (data1),a&lt;br /&gt;
	ld (data2),a&lt;br /&gt;
	ld (data3),a&lt;br /&gt;
	ld (data4),a&lt;br /&gt;
	ld (data5),a	;if data1 to data5 are one after the other&lt;br /&gt;
;try this&lt;br /&gt;
	ld hl,data1&lt;br /&gt;
	ld de,data1+1&lt;br /&gt;
	xor a&lt;br /&gt;
	ld (hl),a&lt;br /&gt;
	ld bc,4&lt;br /&gt;
	ldir&lt;br /&gt;
; -&amp;gt; save 3 bytes for every ld (dataX), after passing the initial overhead&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
	ld a,(var)&lt;br /&gt;
	inc a&lt;br /&gt;
	ld (var),a&lt;br /&gt;
;try this	;Note: if hl is not tied up, use indirection:&lt;br /&gt;
	ld hl,var&lt;br /&gt;
	inc (hl)&lt;br /&gt;
	ld a,(hl) ;if you don't need (hl) in a, delete this line&lt;br /&gt;
; -&amp;gt; save 2 bytes and 2 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; Instead of :&lt;br /&gt;
 ld a, (hl)&lt;br /&gt;
 ld (de), a&lt;br /&gt;
 inc hl&lt;br /&gt;
 inc de&lt;br /&gt;
; Use :&lt;br /&gt;
 ldi&lt;br /&gt;
 inc bc&lt;br /&gt;
; -&amp;gt; save 1 byte and 4 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Never use:&lt;br /&gt;
    push BC&lt;br /&gt;
;    ...&lt;br /&gt;
    pop BC&lt;br /&gt;
    ld D,B&lt;br /&gt;
    ld E,C&lt;br /&gt;
;Use instead:&lt;br /&gt;
    push BC&lt;br /&gt;
;    ...&lt;br /&gt;
    pop DE      ;we only want to DE hold pushed BC (no need for a copy of DE in BC)&lt;br /&gt;
; -&amp;gt; save 2 bytes and 8 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Math and Logic tricks ====&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of:&lt;br /&gt;
 cp 0&lt;br /&gt;
;Use&lt;br /&gt;
 or a&lt;br /&gt;
; -&amp;gt; save 1 byte and 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  cp 1&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  dec a   ;changes a!&lt;br /&gt;
; -&amp;gt; save 1 byte and 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  xor %11111111&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  cpl&lt;br /&gt;
; -&amp;gt; save 1 byte and 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
    ld de,767&lt;br /&gt;
    or a       ;reset carry so sbc works as a sub&lt;br /&gt;
    sbc hl,de&lt;br /&gt;
;try this&lt;br /&gt;
    ld de,-767 ;negation of de&lt;br /&gt;
    add hl,de&lt;br /&gt;
; -&amp;gt; 2 bytes and 8 T-states !&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
    ld de,-767&lt;br /&gt;
    add hl,de&lt;br /&gt;
;try this&lt;br /&gt;
    dec h  ; -256&lt;br /&gt;
    dec h  ; -512&lt;br /&gt;
    dec h  ; -768&lt;br /&gt;
    inc hl  ; -767&lt;br /&gt;
;Note that works in many other cases&lt;br /&gt;
; -&amp;gt; save 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
	srl a&lt;br /&gt;
	srl a&lt;br /&gt;
	srl a&lt;br /&gt;
;try this&lt;br /&gt;
	rrca&lt;br /&gt;
	rrca&lt;br /&gt;
	rrca&lt;br /&gt;
	and %00011111&lt;br /&gt;
; -&amp;gt; save 1 byte and 5 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
	neg&lt;br /&gt;
	add a,N   ;you want to calculate N-A&lt;br /&gt;
;Do it this way:&lt;br /&gt;
	cpl&lt;br /&gt;
	add a,N+1    ;neg is practically equivalent to cpl \ inc a&lt;br /&gt;
; -&amp;gt; save 1 byte and 4 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Never use:&lt;br /&gt;
    ld A,B&lt;br /&gt;
    neg&lt;br /&gt;
;Instead use:&lt;br /&gt;
    xor A&lt;br /&gt;
    sub B&lt;br /&gt;
; -&amp;gt; save 1 byte and 4 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Never use:&lt;br /&gt;
    ld A,D&lt;br /&gt;
    sub $D3&lt;br /&gt;
    neg&lt;br /&gt;
;Instead use:&lt;br /&gt;
    ld A,$D3&lt;br /&gt;
    sub D&lt;br /&gt;
; -&amp;gt; save 2 bytes and 8 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  sla l&lt;br /&gt;
  rl h         ; I've actually seen this!&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  add hl,hl&lt;br /&gt;
; -&amp;gt; save 3 bytes and 5 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Conditionals ====&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  and 1&lt;br /&gt;
  cp 1&lt;br /&gt;
  jr z,foo&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  and 1         ;and sets zero flag, no need for cp&lt;br /&gt;
  jr nz,foo&lt;br /&gt;
; -&amp;gt; save 2 bytes and 7 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  and 1&lt;br /&gt;
  cp 1         ;a not needed after this&lt;br /&gt;
  jr z,foo&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  rra&lt;br /&gt;
  jr c,foo&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  bit 0,a&lt;br /&gt;
  call z,foo&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  rra&lt;br /&gt;
  call nc,foo&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  bit 7,a&lt;br /&gt;
  jr z,foo&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  rla&lt;br /&gt;
  jr nc,foo&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  bit 2,a&lt;br /&gt;
  ret nz&lt;br /&gt;
  xor a&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  and %100&lt;br /&gt;
  ret nz&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  cp 9        ;if a&amp;gt;=9 then goto label&lt;br /&gt;
  jp nc,label&lt;br /&gt;
  jp z,label&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
  cp 9+1      ;;if a&amp;gt;10 then goto label&lt;br /&gt;
  jp nc,label&lt;br /&gt;
; -&amp;gt; save 3 bytes and 10 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Code Flow ====&lt;br /&gt;
&lt;br /&gt;
Almost never call and return...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
 call xxxx&lt;br /&gt;
 ret&lt;br /&gt;
;try this&lt;br /&gt;
 jp xxxx&lt;br /&gt;
;only do this if the pushed pc to stack is not passed to the call. Example: some kind of inline vputs.&lt;br /&gt;
; -&amp;gt; save 1 byte and 17 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Never use:&lt;br /&gt;
    dec B&lt;br /&gt;
    jr NZ,loop    ;I have seen this...&lt;br /&gt;
;Use:&lt;br /&gt;
    djnz loop&lt;br /&gt;
; save 1 byte and 3 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; Instead of&lt;br /&gt;
 ld a,(Number)&lt;br /&gt;
 cp 0&lt;br /&gt;
 jp z,A_is_0&lt;br /&gt;
 cp 1&lt;br /&gt;
 jp z,A_is_1&lt;br /&gt;
 cp 2&lt;br /&gt;
 jp z,A_is_2&lt;br /&gt;
 cp 3&lt;br /&gt;
 jp z,A_is_3&lt;br /&gt;
 cp 4&lt;br /&gt;
 jp z,A_is_4&lt;br /&gt;
 cp 5&lt;br /&gt;
 jp z,A_is_5&lt;br /&gt;
&lt;br /&gt;
; This is a little better&lt;br /&gt;
 ld a,(Number)&lt;br /&gt;
 or a&lt;br /&gt;
 jp z,A_is_0&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_1&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_2&lt;br /&gt;
 sub 2&lt;br /&gt;
 jp z,A_is_4&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_5&lt;br /&gt;
&lt;br /&gt;
; Even better&lt;br /&gt;
 ld a,(Number)&lt;br /&gt;
 add a,a   ; a*2 (limits Number to 128) &lt;br /&gt;
 ld h,0 &lt;br /&gt;
 ld l,a &lt;br /&gt;
 ld de,VectorTable&lt;br /&gt;
 add hl,de&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 inc hl&lt;br /&gt;
 ld h,(hl)&lt;br /&gt;
 ld l,a&lt;br /&gt;
 jp (hl)&lt;br /&gt;
&lt;br /&gt;
VectorTable:&lt;br /&gt;
 .dw A_is_1&lt;br /&gt;
 .dw A_is_2&lt;br /&gt;
 .dw A_is_3&lt;br /&gt;
 .dw A_is_4&lt;br /&gt;
 .dw A_is_5&lt;br /&gt;
 .dw A_is_6&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Also see [[Z80 Good Programming Practices]]&lt;br /&gt;
&lt;br /&gt;
Fallthrough looping&lt;br /&gt;
If you need to repeat a routine several times but can't spare registers for a loop counter or unroll the routine, try structuring the routine so it can call itself several times and fall through at the end. For example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
foo:&lt;br /&gt;
  ld hl, data&lt;br /&gt;
  call bar      ; Run routine once&lt;br /&gt;
  call bar      ; .. twice&lt;br /&gt;
  call bar      ; .. three times&lt;br /&gt;
bar:&lt;br /&gt;
  ld a, (hl)    ; .. fourth and final time&lt;br /&gt;
  inc l&lt;br /&gt;
  and $0F&lt;br /&gt;
  out (c), a&lt;br /&gt;
  ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Others ====&lt;br /&gt;
&lt;br /&gt;
Toggling values in loops.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
loop:&lt;br /&gt;
 ld a,2&lt;br /&gt;
;code1&lt;br /&gt;
 ld a,0&lt;br /&gt;
;code2&lt;br /&gt;
 djnz loop&lt;br /&gt;
&lt;br /&gt;
;try this&lt;br /&gt;
 ld a,2&lt;br /&gt;
loop:&lt;br /&gt;
;code1&lt;br /&gt;
 xor $01   ; the trick is xor logic make a register alternate between two values&lt;br /&gt;
;code2&lt;br /&gt;
 djnz loop&lt;br /&gt;
; -&amp;gt; save size and time depending on its use&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Table alignment&lt;br /&gt;
&lt;br /&gt;
If you align tables to a 256-byte boundary, you can access the contents by placing the index in a register such as l and the table address in h. This is faster than loading the full unaligned 16-bit address and adding a 16-bit index to it, and makes accessing tables with a size of 256 bytes or less very convenient: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld h, (sineTable &amp;gt;&amp;gt; 8) &amp;amp; $FF    ; Get MSB of table&lt;br /&gt;
 ld a, (frame_count)             ; Get index&lt;br /&gt;
 ld l, a&lt;br /&gt;
 ld a, (hl)                      ; Look up value&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld hl, sineTable                ; Get address of table&lt;br /&gt;
 xor a&lt;br /&gt;
 ld d, a                         ; Set index high byte to zero&lt;br /&gt;
 ld a, (frame_count)&lt;br /&gt;
 ld e, a                         ; Set index low byte&lt;br /&gt;
 add hl, de                      ; Add offset to base&lt;br /&gt;
 ld a, (hl)                      ; Look up value&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Size vs. Speed ===&lt;br /&gt;
&lt;br /&gt;
The classical problem of optimization in computer programming, Z80 is no exception.&lt;br /&gt;
In ASM most frequently size is what matters because generally ASM is fast enough and it is nice to give a user a smaller program that doesn't use up most RAM memory.&lt;br /&gt;
&lt;br /&gt;
==== For the sake of size ====&lt;br /&gt;
&lt;br /&gt;
* Use relative jumps (jr label) whenever possible. When relative jump is out of reach (out of -128 to 127 bytes) and there is a jp near, do a relative jump to the absolute one. Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;lots of code (more that 128 bytes worth of code)&lt;br /&gt;
somelabel2:&lt;br /&gt;
 jp somelabel&lt;br /&gt;
;less than 128 bytes&lt;br /&gt;
 jr somelabel2   ;instead of a absolute jump directly to somelabel, jump to a jump to somelabel.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Relative jumps are 2 bytes and absolute jumps 3. In terms of speed jp is faster when a jump occurs (10 T-states) and jr is faster when it doesn't occur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
 dec bc&lt;br /&gt;
 ld a,b&lt;br /&gt;
 or c&lt;br /&gt;
 ret z&lt;br /&gt;
;try this&lt;br /&gt;
 cpi              ;increments HL&lt;br /&gt;
 ret po&lt;br /&gt;
; save 1 byte at the cost of 2 T-states&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Passing inline data'''&lt;br /&gt;
&lt;br /&gt;
When you call, the pc + 3 (after the call) is pushed. You can pop it and use as a pointer to data. A very nifty use is with strings. To return, pass the data and jp (hl).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Instead of:&lt;br /&gt;
 ld hl,string&lt;br /&gt;
 bcall(_vputs)&lt;br /&gt;
 ret&lt;br /&gt;
;Try this:&lt;br /&gt;
  call Disp&lt;br /&gt;
  .db &amp;quot;This is some text&amp;quot;,0&lt;br /&gt;
  ret&lt;br /&gt;
;Not a speed optimization, but it eliminates 2-byte pointers, since it just uses the call's return address.&lt;br /&gt;
;It also heavily disturbs disassembly.&lt;br /&gt;
Disp:&lt;br /&gt;
  pop hl&lt;br /&gt;
  bcall(_vputs)&lt;br /&gt;
  jp (hl)&lt;br /&gt;
; -&amp;gt; save 2 bytes for each use, but 4 bytes of overhead (Disp routine)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This routine can be expanded to pass the coordinates where the text should appear.&lt;br /&gt;
&lt;br /&gt;
'''Wasting time to delay'''&lt;br /&gt;
&lt;br /&gt;
There are those funny times that you need some delay between operations like reads/writes to ports '''''and there is nothing useful to do'''''. And because nop's are not very size friendly, think of other slower but smaller instructions. Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Instead of&lt;br /&gt;
 ld a,KEY_GROUP&lt;br /&gt;
 out (1),a&lt;br /&gt;
 nop&lt;br /&gt;
 nop&lt;br /&gt;
 in a,(1)&lt;br /&gt;
;Try this:&lt;br /&gt;
 ld a,KEY_GROUP&lt;br /&gt;
 out (1),a&lt;br /&gt;
 ld a,(de)    ;a doesn't need to be preserved because it will hold what the port has.&lt;br /&gt;
 in a,(1)&lt;br /&gt;
; -&amp;gt; save 1 byte and 1 T-state (well 1 T-state less is almost the same time)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you need to delay and cannot afford to alter registers or flags there are still ways to delay that waste less size than nop's :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; 2 bytes, 8 T-states&lt;br /&gt;
 nop&lt;br /&gt;
 nop&lt;br /&gt;
&lt;br /&gt;
; 2 bytes, 12 T-states&lt;br /&gt;
 inc hl&lt;br /&gt;
 dec hl&lt;br /&gt;
&lt;br /&gt;
; 2 bytes, 12 T-states&lt;br /&gt;
 jr $+2&lt;br /&gt;
&lt;br /&gt;
; 2 bytes, 21 T-states&lt;br /&gt;
 push af&lt;br /&gt;
 pop af&lt;br /&gt;
&lt;br /&gt;
; 2 bytes, 38 T-states&lt;br /&gt;
 ex (sp), hl&lt;br /&gt;
 ex (sp), hl&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need a small adjustable delay:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;4 bytes, b*13+8 T-states (variable)&lt;br /&gt;
	ld b,255	; initial delay&lt;br /&gt;
	djnz $		; do it&lt;br /&gt;
;b=0 on exit&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* There are many other instructions that you can use&lt;br /&gt;
* Beware that not all instructions preserve registers or flags&lt;br /&gt;
* For delay between frames of games or other longer delays, you can use the 'halt' instruction if there are interrupts enabled. It make the calculator enter low power mode until an interrupt is triggered. To fine-tune the effect of this delay mechanism you can alter interrupt mask and interrupt time speed beforehand (and possibly restore their values afterwards).&lt;br /&gt;
&lt;br /&gt;
==== Unrolling code ====&lt;br /&gt;
&lt;br /&gt;
'''General Unrolling'''&lt;br /&gt;
You can unroll some loop several times instead of looping, this is used frequently on math routines of multiplication.&lt;br /&gt;
This means you are wasting memory to gain speed. Most times you are preferring size to speed.&lt;br /&gt;
&lt;br /&gt;
'''Unroll commands'''&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; &amp;quot;Classic&amp;quot; way : ~21 T-states per byte copied&lt;br /&gt;
 ld hl,src&lt;br /&gt;
 ld de,dest&lt;br /&gt;
 ld bc,size&lt;br /&gt;
 ldir&lt;br /&gt;
&lt;br /&gt;
; Unrolled : (16 * size + 10) / n -&amp;gt; ~18 T-states per byte copied when unrolling 8 times&lt;br /&gt;
 ld hl,src&lt;br /&gt;
 ld de,dest&lt;br /&gt;
 ld bc,size  ; if the size is not a multiple of the number of unrolled ldi then a small trick must be used to jump appropriately inside the loop for the first iteration&lt;br /&gt;
loopldi:    ;you can use this entry for a call&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 ldi&lt;br /&gt;
 jp pe, loopldi    ; jp used as it is faster and in the case of a loop unrolling we assume speed matters more than size&lt;br /&gt;
; ret if this is a subroutine and use the unrolled ldi's with a call.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This unroll of ldi also works with outi and ldr.&lt;br /&gt;
&lt;br /&gt;
==== Looping with 16 bit counter ====&lt;br /&gt;
There are two ways to make loops with a 16bit counter :&lt;br /&gt;
* the naive one, which results in smaller code but increased loop overhead (24 * n T-states) and destroys a&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  ld bc, ...&lt;br /&gt;
loop:&lt;br /&gt;
  ; loop body here&lt;br /&gt;
 &lt;br /&gt;
  dec bc&lt;br /&gt;
  ld  a, b&lt;br /&gt;
  or  c&lt;br /&gt;
  jp  nz,loop&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* the slightly trickier one, which takes a couple more bytes but has a much lower overhead (12 * n + 14 * (n / 16) T-states)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  dec  de&lt;br /&gt;
  ld  b, e&lt;br /&gt;
  inc  b&lt;br /&gt;
  inc  d&lt;br /&gt;
loop2:&lt;br /&gt;
  ; loop body here&lt;br /&gt;
  &lt;br /&gt;
  djnz loop2&lt;br /&gt;
  dec  d&lt;br /&gt;
  jp  nz,loop2&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
The rationale behind the second method is to reduce the overhead of the &amp;quot;inner&amp;quot; loop as much as possible and to use the fact that when b gets down to zero it will be treated as 256 by djnz. &lt;br /&gt;
&lt;br /&gt;
You can therefore use the following macros for setting proper values of 8bit loop counters given a 16bit counter in case you want to do the conversion at compile time :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  #define inner_counter8(counter16) (((counter16) - 1) &amp;amp; 0xff) + 1&lt;br /&gt;
  #define outer_counter8(counter16) (((counter16) - 1) &amp;gt;&amp;gt; 8) + 1&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Preserve Registers ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; description: both routines compare b to 0, same size and speed but the second preserves accumulator&lt;br /&gt;
; remarks: - inc/dec doesn't affect carry flag&lt;br /&gt;
;          - inc/dec doesn't affect any flags on 16-bit registers, so do not extrapolate to 16-bit registers.&lt;br /&gt;
	ld a,b&lt;br /&gt;
	or b&lt;br /&gt;
	jr z,label&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
	inc b&lt;br /&gt;
	dec b&lt;br /&gt;
	jr z,label&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; description: add a to hl without using a 16-bit register&lt;br /&gt;
;normal way:&lt;br /&gt;
	ld d,$00&lt;br /&gt;
	ld e,a&lt;br /&gt;
	add hl,de&lt;br /&gt;
;4 bytes and 22 clock cycles&lt;br /&gt;
; &amp;gt;&lt;br /&gt;
	add a,l&lt;br /&gt;
	ld l,a&lt;br /&gt;
	jr nc, $+3&lt;br /&gt;
	inc h&lt;br /&gt;
;5 bytes, 19/20 clock cycles&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Setting flags ==&lt;br /&gt;
In some occasion you might want to selectively set/reset a flag.&lt;br /&gt;
&lt;br /&gt;
Here are the most common uses :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; set Carry flag&lt;br /&gt;
 scf&lt;br /&gt;
&lt;br /&gt;
; reset Carry flag (alters Sign and Zero flags as defined)&lt;br /&gt;
 or a&lt;br /&gt;
&lt;br /&gt;
; alternate reset Carry flag (alters Sign and Zero flags as defined)&lt;br /&gt;
 and a&lt;br /&gt;
&lt;br /&gt;
; set Zero flag (resets Carry flag, alters Sign flag as defined)&lt;br /&gt;
 cp a&lt;br /&gt;
&lt;br /&gt;
; reset Zero flag (alters a, reset Carry flag, alters Sign flag as defined)&lt;br /&gt;
 or 1&lt;br /&gt;
&lt;br /&gt;
; set Sign flag (negative) (alters a, reset Zero and Carry flags)&lt;br /&gt;
 or $80&lt;br /&gt;
&lt;br /&gt;
; reset Sign flag (positive) (set a to zero, set Zero flag, reset Carry flag)&lt;br /&gt;
 xor a&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other possible uses (much rarer) :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;Set parity/overflow (even):&lt;br /&gt;
 xor a&lt;br /&gt;
&lt;br /&gt;
;Reset parity/overflow (odd):&lt;br /&gt;
 sub a&lt;br /&gt;
&lt;br /&gt;
;Set half carry (hardly ever useful but still...)&lt;br /&gt;
 and a&lt;br /&gt;
&lt;br /&gt;
;Reset half carry (hardly ever useful but still...)&lt;br /&gt;
 or a&lt;br /&gt;
&lt;br /&gt;
;Set bit 5 of f:&lt;br /&gt;
 or %00100000&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see these are extremely simple, small and fast ways to alter flags&lt;br /&gt;
which make them interesting as output of routines to indicate error/success or&lt;br /&gt;
other status bits that do not require a full register.&lt;br /&gt;
&lt;br /&gt;
Were you to use this, remember that these flag (re)setting tricks frequently&lt;br /&gt;
overlap so if you need a special combination of flags it might require slightly&lt;br /&gt;
more elaborate tricks. As a rule of a thumb, always alter the carry last in&lt;br /&gt;
such cases because the scf and ccf instructions do not have side effects.&lt;br /&gt;
&lt;br /&gt;
More advance ways of manipulating flags follow:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;get the zero flag in carry &lt;br /&gt;
	scf&lt;br /&gt;
	jr z,$+3&lt;br /&gt;
	ccf&lt;br /&gt;
&lt;br /&gt;
;Put carry flag into zero flag.&lt;br /&gt;
	ccf&lt;br /&gt;
	sbc a, a&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools of the job ==&lt;br /&gt;
&lt;br /&gt;
Want to try test your optimization or test new ones? Then you have to check this:&lt;br /&gt;
* Keep a z80 instruction set to not forget a useful instruction and flags affected. (see [[Z80_Instruction_Set|Z80_Instruction_Set]])&lt;br /&gt;
* Use an assembler that has &amp;quot;.echo&amp;quot; directive and use this in the source to count size: (see [[Assemblers|Assemblers]])&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SomeCodeorData:&lt;br /&gt;
;code or data goes here&lt;br /&gt;
End:&lt;br /&gt;
 .echo &amp;quot;size of the code/data:&amp;quot;&lt;br /&gt;
 .echo End-SomeCodeorData&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Get a nice IDE of z80 that counts code ([[IDEs|IDE's]])&lt;br /&gt;
* Make use of the counting capabilities of an emulator ([[:Category:Emulators|Emulators]]) (see wabbitemu)&lt;br /&gt;
&lt;br /&gt;
== Very specific optimizations (hardly practical) ==&lt;br /&gt;
&lt;br /&gt;
=== Table alignment ===&lt;br /&gt;
Use an aligned address on memory such as $8000 (theoretical example) and if you will only use 256 bytes ($8000 to $80FF), to get the next byte use inc l instead of inc hl.&lt;br /&gt;
&lt;br /&gt;
== Crazy, &amp;quot;magick&amp;quot;, hacks and obscure optimization's tricks ==&lt;br /&gt;
&lt;br /&gt;
These are not normally recommend for use because some disturb disassembly and even coders understanding the code.&lt;br /&gt;
&lt;br /&gt;
=== Better else ===&lt;br /&gt;
So you normally have an if-else-endif block like this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
jr nz,else    ;the IF&lt;br /&gt;
;some code&lt;br /&gt;
jr endif&lt;br /&gt;
else:&lt;br /&gt;
;some code&lt;br /&gt;
endif:&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But here's a crazy trick for when the Else code is a single 2-byte instruction:&lt;br /&gt;
You use the first byte of a 3 byte instruction with no side effects instead of the &amp;quot;jr endif&amp;quot; line!&lt;br /&gt;
So if you had code like this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cp 7&lt;br /&gt;
jr nz,else&lt;br /&gt;
ld a,3&lt;br /&gt;
jr endif&lt;br /&gt;
else:&lt;br /&gt;
ld a,4&lt;br /&gt;
endif:&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could replace it with this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
cp 7&lt;br /&gt;
jr nz,else&lt;br /&gt;
ld a,3&lt;br /&gt;
.db $C2  ;jp nz,xxxx&lt;br /&gt;
else:&lt;br /&gt;
ld a,4&lt;br /&gt;
endif:&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Instead of branching over the ld a,4 instruction, it now executes a jp nz,XXXX instruction where the XXXX is the two bytes of the next instruction. You already know what the flags will be here, so you can make the jump never taken. You can use this to skip the next two bytes of execution! Who needs to branch over it?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This only takes 28 T-states for if. A small saving, but could be useful in tight loops, and saves 2 bytes!&lt;br /&gt;
The only reason not to use this for 1-byte instructions would be code readability and bug safety. Watch those flags!&lt;br /&gt;
&lt;br /&gt;
=== Conditional rst ===&lt;br /&gt;
&lt;br /&gt;
For a smaller conditional rst $38, use jr cc, -1. This will cause a conditional jump to the displacement byte ($FF) which is the rst $38 opcode. &lt;br /&gt;
&lt;br /&gt;
=== DAA trick ===&lt;br /&gt;
&lt;br /&gt;
Normally DAA instruction is used for BCD math but can be used for converting (?) ASCII integer.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	cp 10&lt;br /&gt;
	ccf&lt;br /&gt;
	adc a, 30h&lt;br /&gt;
	daa&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related topics ==&lt;br /&gt;
* [http://www.junemann.nl/maxcoderz/viewtopic.php?f=5&amp;amp;t=675 MaxCodez TI-ASM optimization]&lt;br /&gt;
* ticalc archives: [http://www.ticalc.org/archives/files/fileinfo/108/10821.html 1] [http://www.ticalc.org/archives/files/fileinfo/285/28502.html 2]&lt;br /&gt;
* [http://www.ballyalley.com/ml/z80_docs/z80_docs.html Balley Alley Z80 Machine Language Documentation]&lt;br /&gt;
* [http://map.grauw.nl/articles/fast_loops.php Fast loops in MSX Assembly Page]&lt;br /&gt;
* [http://shiar.nl/calc/z80/optimize Shiar z80 optimization page]&lt;br /&gt;
* [http://www.smspower.org/Development/Z80ProgrammingTechniques SMS Power! dev wiki z80 Techniques]&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements ==&lt;br /&gt;
* fullmetalcoder&lt;br /&gt;
* Galandros&lt;br /&gt;
* Dwedit for sharing in MaxCoderz the &amp;quot;Better else&amp;quot;&lt;br /&gt;
* MaxCoderz participants in assembly optimizing topic (Jim e,CoBB,...)&lt;br /&gt;
* SMS Power wiki&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Hooks:9BC0</id>
		<title>83Plus:Hooks:9BC0</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Hooks:9BC0"/>
				<updated>2012-04-25T19:38:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Hooks:By Address|9BC0 - Menu Hook]] [[Category:83Plus:Hooks:By Name|Menu Hook]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Name:''' Menu Hook&lt;br /&gt;
&lt;br /&gt;
'''Hook Pointer Block Address:''' [[83Plus:RAM:9BC0|9BC0]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Enable BCALL:''' [[83Plus:BCALLs:5083|5083]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Disable BCALL:''' [[83Plus:BCALLs:5086|5086]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Call BCALL:''' ''(Unknown)''&lt;br /&gt;
&lt;br /&gt;
'''Hook Active Flag:''' [[83Plus:Flags:36#Bit_6|6, (iy + 36h)]]&lt;br /&gt;
&lt;br /&gt;
The menu hook allows for modification of any of the system menus that are presented through the system monitor.&lt;br /&gt;
&lt;br /&gt;
== Using the Hook ==&lt;br /&gt;
This hook, like most, is called for several events, each identified by A. In general, it appears that returning with the zero flag set will cause the OS to execute its normal behavior.&lt;br /&gt;
&lt;br /&gt;
I've ordered the events in the order that they are called by the OS.&lt;br /&gt;
&lt;br /&gt;
* '''A = 04h:''' This is the first event called. B contains the value of the menu about to be displayed. When this event is triggered, [[83Plus:RAM:85DE|MenuCurrent]] currently contains the ID referring to the menu that was previously displayed (if you went from one menu directly to another), or 0 if previously there was no menu displayed (you were seeing the context itself.)&lt;br /&gt;
* '''A = 00h:''' This is the second event, called after event 04h. This event allows you to provide your own menu table. B contains the menu ID. If you want to provide your own table, copy it to RAM, point HL to it, and return with the zero flag reset. It's called a second time, but with B being zero. The outputs appear to be the same, so handle it the same way.&lt;br /&gt;
* '''A = 02h:''' This event is called before the OS draws the menu header. C is the index of the header (zero based.) Returning with zero set will draw the header, returning with zero reset will cause it to not draw the header. It's also called after it's done drawing the headers, with C is the number of headers (basically, last index plus one). Return flag seems to be ignored.&lt;br /&gt;
* '''A = 01h:''' The OS is about to draw the text corresponding to a menu item. The number prefix has already been drawn. C contains the index of the item (zero indexed.) Returning with zero set will cause the OS to draw the string, returning with zero reset will cause it just to draw a blank line (but it does draw something!). To draw another token, you will need DE to be an extended keycode.  &lt;br /&gt;
* '''A = 03h:''' The user selected an item from the menu that is about to cause a context switch. B contains the ID of the context the calculator might switch to. You can return with zero set to execute the app, or zero reset to cancel the execution. If you're switching to a flash app (B is cxextapps), then DE also points to the end of the name of the flash app in RAM. You can cancel the execution of a flash app (this could prove useful for a security app.)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
This is an example of a menu table taken from graph3.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ZoomMenu:&lt;br /&gt;
	db 1		;how many headers?&lt;br /&gt;
	db 3 	;how many choices under 1st header?&lt;br /&gt;
	db 5Eh	;string table entry for &amp;quot;ZOOM&amp;quot;&lt;br /&gt;
	db 0,kZIn&lt;br /&gt;
	db 0,kZOut	;these are 2-byte keypresses of each entry&lt;br /&gt;
	db 0,kStd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Kirk Meyer:''' For providing an example of this hook in graph3&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Hooks:9BC0</id>
		<title>83Plus:Hooks:9BC0</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Hooks:9BC0"/>
				<updated>2012-04-25T19:37:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Added some info about A = 01h&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Hooks:By Address|9BC0 - Menu Hook]] [[Category:83Plus:Hooks:By Name|Menu Hook]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Name:''' Menu Hook&lt;br /&gt;
&lt;br /&gt;
'''Hook Pointer Block Address:''' [[83Plus:RAM:9BC0|9BC0]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Enable BCALL:''' [[83Plus:BCALLs:5083|5083]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Disable BCALL:''' [[83Plus:BCALLs:5086|5086]]&lt;br /&gt;
&lt;br /&gt;
'''Hook Call BCALL:''' ''(Unknown)''&lt;br /&gt;
&lt;br /&gt;
'''Hook Active Flag:''' [[83Plus:Flags:36#Bit_6|6, (iy + 36h)]]&lt;br /&gt;
&lt;br /&gt;
The menu hook allows for modification of any of the system menus that are presented through the system monitor.&lt;br /&gt;
&lt;br /&gt;
== Using the Hook ==&lt;br /&gt;
This hook, like most, is called for several events, each identified by A. In general, it appears that returning with the zero flag set will cause the OS to execute its normal behavior.&lt;br /&gt;
&lt;br /&gt;
I've ordered the events in the order that they are called by the OS.&lt;br /&gt;
&lt;br /&gt;
* '''A = 04h:''' This is the first event called. B contains the value of the menu about to be displayed. When this event is triggered, [[83Plus:RAM:85DE|MenuCurrent]] currently contains the ID referring to the menu that was previously displayed (if you went from one menu directly to another), or 0 if previously there was no menu displayed (you were seeing the context itself.)&lt;br /&gt;
* '''A = 00h:''' This is the second event, called after event 04h. This event allows you to provide your own menu table. B contains the menu ID. If you want to provide your own table, copy it to RAM, point HL to it, and return with the zero flag reset. It's called a second time, but with B being zero. The outputs appear to be the same, so handle it the same way.&lt;br /&gt;
* '''A = 02h:''' This event is called before the OS draws the menu header. C is the index of the header (zero based.) Returning with zero set will draw the header, returning with zero reset will cause it to not draw the header. It's also called after it's done drawing the headers, with C is the number of headers (basically, last index plus one). Return flag seems to be ignored.&lt;br /&gt;
* '''A = 01h:''' The OS is about to draw the text corresponding to a menu item. The number prefix has already been drawn. C contains the index of the item (zero indexed.) Returning with zero set will cause the OS to draw the string, returning with zero reset will cause it just to draw a blank line (but it does draw something!). To change the string to be drawn to another token, you will need DE to be an extended keycode.  &lt;br /&gt;
* '''A = 03h:''' The user selected an item from the menu that is about to cause a context switch. B contains the ID of the context the calculator might switch to. You can return with zero set to execute the app, or zero reset to cancel the execution. If you're switching to a flash app (B is cxextapps), then DE also points to the end of the name of the flash app in RAM. You can cancel the execution of a flash app (this could prove useful for a security app.)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
This is an example of a menu table taken from graph3.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ZoomMenu:&lt;br /&gt;
	db 1		;how many headers?&lt;br /&gt;
	db 3 	;how many choices under 1st header?&lt;br /&gt;
	db 5Eh	;string table entry for &amp;quot;ZOOM&amp;quot;&lt;br /&gt;
	db 0,kZIn&lt;br /&gt;
	db 0,kZOut	;these are 2-byte keypresses of each entry&lt;br /&gt;
	db 0,kStd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Kirk Meyer:''' For providing an example of this hook in graph3&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math</id>
		<title>Z80 Routines:Math:Advance Math</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math"/>
				<updated>2012-01-09T17:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Advanced Math]]&lt;br /&gt;
[[Category:Z80 Routines|Advanced Math]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are routines designed for math of a slightly higher level. These don't necessarily contribute to everyday coding, but might be useful for an OS that handles such math (or programming language).&lt;br /&gt;
&lt;br /&gt;
=== nCr Algorithm ===&lt;br /&gt;
&lt;br /&gt;
This computes &amp;quot;n choose r&amp;quot; using an algorithm that makes use of both shadow registers and other calls. This can very likely be optimised, so feel free to edit with a new version.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;===============================================================&lt;br /&gt;
nCrHL_DE:&lt;br /&gt;
;===============================================================&lt;br /&gt;
;Inputs:&lt;br /&gt;
;     hl is &amp;quot;n&amp;quot;&lt;br /&gt;
;     de is &amp;quot;r&amp;quot;&lt;br /&gt;
;Outputs:&lt;br /&gt;
;     interrupts off&lt;br /&gt;
;     a is 0&lt;br /&gt;
;     bc is an intermediate result&lt;br /&gt;
;     de is &amp;quot;n&amp;quot;&lt;br /&gt;
;     hl is the result&lt;br /&gt;
;     a' is not changed&lt;br /&gt;
;     bc' is &amp;quot;r&amp;quot;+1&lt;br /&gt;
;     de' is the same as bc&lt;br /&gt;
;     hl' is &amp;quot;r&amp;quot; or the compliment, whichever is smaller&lt;br /&gt;
;===============================================================&lt;br /&gt;
     or a                     ;reset carry flag&lt;br /&gt;
     sbc hl,de&lt;br /&gt;
     ret c                    ;r should not be bigger than n&lt;br /&gt;
     sbc hl,de \ add hl,de&lt;br /&gt;
     jr nc,$+3&lt;br /&gt;
       ex de,hl&lt;br /&gt;
                             ;hl is R&lt;br /&gt;
     push de&lt;br /&gt;
     ld bc,1                 ;A&lt;br /&gt;
     exx&lt;br /&gt;
     pop de                  ;N&lt;br /&gt;
     ld bc,1                 ;C&lt;br /&gt;
     ld h,b \ ld l,c         ;D&lt;br /&gt;
nCrLoop:&lt;br /&gt;
     push de&lt;br /&gt;
     push hl&lt;br /&gt;
     call DE_Times_BC        ;Returns BC unchanged, DEHL is the product&lt;br /&gt;
     push hl \ exx \ pop de&lt;br /&gt;
     push hl&lt;br /&gt;
     call DE_Div_BC          ;Returns HL is the quotient, BC is not changed&lt;br /&gt;
     pop de&lt;br /&gt;
     push hl \ ex de,hl \ exx \ pop hl&lt;br /&gt;
     ld b,h \ ld c,l&lt;br /&gt;
     pop de \ add hl,de&lt;br /&gt;
     pop de \ inc de&lt;br /&gt;
     exx&lt;br /&gt;
     inc bc&lt;br /&gt;
     or a \ sbc hl,bc \ add hl,bc&lt;br /&gt;
     exx&lt;br /&gt;
     jr nc,nCrLoop&lt;br /&gt;
     ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GCDHL_BC ===&lt;br /&gt;
&lt;br /&gt;
This finds the greatest common divisor (GCD) of HL and BC.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
GCDHL_BC:&lt;br /&gt;
;Inputs:&lt;br /&gt;
;     HL is a number&lt;br /&gt;
;     BC is a number&lt;br /&gt;
;Outputs:&lt;br /&gt;
;     A is 0&lt;br /&gt;
;     BC is the GCD&lt;br /&gt;
;     DE is 0&lt;br /&gt;
;Destroys:&lt;br /&gt;
;     HL&lt;br /&gt;
;Size:  25 bytes&lt;br /&gt;
;Speed: 30 to 49708 cycles&lt;br /&gt;
;       -As slow as about 126 times per second at 6MHz&lt;br /&gt;
;       -As fast as about 209715 times per second at 6MHz&lt;br /&gt;
;Speed break down:&lt;br /&gt;
;     If HL=BC, 30 cycles&lt;br /&gt;
;     24+1552x&lt;br /&gt;
;     If BC&amp;gt;HL, add 20 cycles&lt;br /&gt;
;     *x is from 1 to at most 32 (because we use 2 16-bit numbers)&lt;br /&gt;
;&lt;br /&gt;
     or a \ sbc hl,bc     ;B7ED42    19&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     add hl,bc            ;09        11&lt;br /&gt;
     jr nc,$+8            ;3006      11|31&lt;br /&gt;
       ld a,h             ;7C        --&lt;br /&gt;
       ld h,b             ;60        --&lt;br /&gt;
       ld b,a             ;47        --&lt;br /&gt;
       ld a,l             ;7D        --&lt;br /&gt;
       ld l,c             ;69        --&lt;br /&gt;
       ld c,a             ;4F        --&lt;br /&gt;
Loop:&lt;br /&gt;
     call HL_Div_BC       ;CD****    1511    returns BC unchanged, DE is the remainder&lt;br /&gt;
     ld a,d \ or e        ;7AB2      8&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     ld h,b \ ld l,c      ;6069      8&lt;br /&gt;
     ld b,d \ ld c,e      ;424B      8&lt;br /&gt;
     jr $-10              ;18F8      12&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LCM ===&lt;br /&gt;
This is as simple as multiplying the two numbers and dividing by the GCD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Zeda (Xeda) Elnara''' for the nCr and GCD algorithm&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math</id>
		<title>Z80 Routines:Math:Advance Math</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Advance_Math"/>
				<updated>2012-01-09T17:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Created page with 'Advanced_Math Advanced_Math  == Introduction ==  These are routines designed for math of a slightly higher level. These d…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Advanced_Math]]&lt;br /&gt;
[[Category:Z80 Routines|Advanced_Math]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are routines designed for math of a slightly higher level. These don't necessarily contribute to everyday coding, but might be useful for an OS that handles such math (or programming language).&lt;br /&gt;
&lt;br /&gt;
=== nCr Algorithm ===&lt;br /&gt;
&lt;br /&gt;
This computes &amp;quot;n choose r&amp;quot; using an algorithm that makes use of both shadow registers and other calls. This can very likely be optimised, so feel free to edit with a new version.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
;===============================================================&lt;br /&gt;
nCrHL_DE:&lt;br /&gt;
;===============================================================&lt;br /&gt;
;Inputs:&lt;br /&gt;
;     hl is &amp;quot;n&amp;quot;&lt;br /&gt;
;     de is &amp;quot;r&amp;quot;&lt;br /&gt;
;Outputs:&lt;br /&gt;
;     interrupts off&lt;br /&gt;
;     a is 0&lt;br /&gt;
;     bc is an intermediate result&lt;br /&gt;
;     de is &amp;quot;n&amp;quot;&lt;br /&gt;
;     hl is the result&lt;br /&gt;
;     a' is not changed&lt;br /&gt;
;     bc' is &amp;quot;r&amp;quot;+1&lt;br /&gt;
;     de' is the same as bc&lt;br /&gt;
;     hl' is &amp;quot;r&amp;quot; or the compliment, whichever is smaller&lt;br /&gt;
;===============================================================&lt;br /&gt;
     or a                     ;reset carry flag&lt;br /&gt;
     sbc hl,de&lt;br /&gt;
     ret c                    ;r should not be bigger than n&lt;br /&gt;
     sbc hl,de \ add hl,de&lt;br /&gt;
     jr nc,$+3&lt;br /&gt;
       ex de,hl&lt;br /&gt;
                             ;hl is R&lt;br /&gt;
     push de&lt;br /&gt;
     ld bc,1                 ;A&lt;br /&gt;
     exx&lt;br /&gt;
     pop de                  ;N&lt;br /&gt;
     ld bc,1                 ;C&lt;br /&gt;
     ld h,b \ ld l,c         ;D&lt;br /&gt;
nCrLoop:&lt;br /&gt;
     push de&lt;br /&gt;
     push hl&lt;br /&gt;
     call DE_Times_BC        ;Returns BC unchanged, DEHL is the product&lt;br /&gt;
     push hl \ exx \ pop de&lt;br /&gt;
     push hl&lt;br /&gt;
     call DE_Div_BC          ;Returns HL is the quotient, BC is not changed&lt;br /&gt;
     pop de&lt;br /&gt;
     push hl \ ex de,hl \ exx \ pop hl&lt;br /&gt;
     ld b,h \ ld c,l&lt;br /&gt;
     pop de \ add hl,de&lt;br /&gt;
     pop de \ inc de&lt;br /&gt;
     exx&lt;br /&gt;
     inc bc&lt;br /&gt;
     or a \ sbc hl,bc \ add hl,bc&lt;br /&gt;
     exx&lt;br /&gt;
     jr nc,nCrLoop&lt;br /&gt;
     ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GCDHL_BC ===&lt;br /&gt;
&lt;br /&gt;
This finds the greatest common divisor (GCD) of HL and BC.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
GCDHL_BC:&lt;br /&gt;
;Inputs:&lt;br /&gt;
;     HL is a number&lt;br /&gt;
;     BC is a number&lt;br /&gt;
;Outputs:&lt;br /&gt;
;     A is 0&lt;br /&gt;
;     BC is the GCD&lt;br /&gt;
;     DE is 0&lt;br /&gt;
;Destroys:&lt;br /&gt;
;     HL&lt;br /&gt;
;Size:  25 bytes&lt;br /&gt;
;Speed: 30 to 49708 cycles&lt;br /&gt;
;       -As slow as about 126 times per second at 6MHz&lt;br /&gt;
;       -As fast as about 209715 times per second at 6MHz&lt;br /&gt;
;Speed break down:&lt;br /&gt;
;     If HL=BC, 30 cycles&lt;br /&gt;
;     24+1552x&lt;br /&gt;
;     If BC&amp;gt;HL, add 20 cycles&lt;br /&gt;
;     *x is from 1 to at most 32 (because we use 2 16-bit numbers)&lt;br /&gt;
;&lt;br /&gt;
     or a \ sbc hl,bc     ;B7ED42    19&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     add hl,bc            ;09        11&lt;br /&gt;
     jr nc,$+8            ;3006      11|31&lt;br /&gt;
       ld a,h             ;7C        --&lt;br /&gt;
       ld h,b             ;60        --&lt;br /&gt;
       ld b,a             ;47        --&lt;br /&gt;
       ld a,l             ;7D        --&lt;br /&gt;
       ld l,c             ;69        --&lt;br /&gt;
       ld c,a             ;4F        --&lt;br /&gt;
Loop:&lt;br /&gt;
     call HL_Div_BC       ;CD****    1511    returns BC unchanged, DE is the remainder&lt;br /&gt;
     ld a,d \ or e        ;7AB2      8&lt;br /&gt;
     ret z                ;C8        5|11&lt;br /&gt;
     ld h,b \ ld l,c      ;6069      8&lt;br /&gt;
     ld b,d \ ld c,e      ;424B      8&lt;br /&gt;
     jr $-10              ;18F8      12&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LCM ===&lt;br /&gt;
This is as simple as multiplying the two numbers and dividing by the GCD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Zeda (Xeda) Elnara''' for the nCr and GCD algorithm&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division</id>
		<title>Z80 Routines:Math:Division</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division"/>
				<updated>2012-01-09T17:00:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Rounded 16/8 division */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Division]]&lt;br /&gt;
[[Category:Z80 Routines|Division]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring division algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== 8/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides d by e and places the quotient in d and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_d_e:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 8&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sla	d&lt;br /&gt;
   rla&lt;br /&gt;
   cp	e&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	e&lt;br /&gt;
   inc	d&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the quotient in hl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_hl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/16 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ac by de and places the quotient in ac and the remainder in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ac_de:&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sll	c&lt;br /&gt;
   rla&lt;br /&gt;
   adc	hl, hl&lt;br /&gt;
   sbc	hl, de&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   dec	c&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 24/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ehl by d and places the quotient in ehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ehl_d:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 24&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rla&lt;br /&gt;
   cp	d&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	d&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 32/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides dehl by c and places the quotient in dehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_dehl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 32&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rounded 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the rounded quotient in hl and twice the prerounded remainder in a.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
RoundHL_Div_C:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
;This part is the rounding&lt;br /&gt;
   add a,a&lt;br /&gt;
   cp	c&lt;br /&gt;
   ret	c&lt;br /&gt;
   inc hl&lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division</id>
		<title>Z80 Routines:Math:Division</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Division"/>
				<updated>2012-01-09T17:00:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Added the rounded 16/8 routine. Feel free to modify for other version. Just double the remainder and compare to the divisor.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Z80 Routines:Math|Division]]&lt;br /&gt;
[[Category:Z80 Routines|Division]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
All these routines use the restoring division algorithm, adapted to the z80 architecture to maximize speed.&lt;br /&gt;
They can easily be unrolled to gain some speed.&lt;br /&gt;
&lt;br /&gt;
== 8/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides d by e and places the quotient in d and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_d_e:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 8&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sla	d&lt;br /&gt;
   rla&lt;br /&gt;
   cp	e&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	e&lt;br /&gt;
   inc	d&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the quotient in hl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_hl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 16/16 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ac by de and places the quotient in ac and the remainder in hl&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ac_de:&lt;br /&gt;
   ld	hl, 0&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   sll	c&lt;br /&gt;
   rla&lt;br /&gt;
   adc	hl, hl&lt;br /&gt;
   sbc	hl, de&lt;br /&gt;
   jr	nc, $+4&lt;br /&gt;
   add	hl, de&lt;br /&gt;
   dec	c&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 24/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides ehl by d and places the quotient in ehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_ehl_d:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 24&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rla&lt;br /&gt;
   cp	d&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	d&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 32/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides dehl by c and places the quotient in dehl and the remainder in a&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
div_dehl_c:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 32&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rl	e&lt;br /&gt;
   rl	d&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l&lt;br /&gt;
   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
   &lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rounded 16/8 division ==&lt;br /&gt;
&lt;br /&gt;
The following routine divides hl by c and places the rounded quotient in hl and twice the prerounded remainder in a.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
RoundHL_Div_C:&lt;br /&gt;
   xor	a&lt;br /&gt;
   ld	b, 16&lt;br /&gt;
&lt;br /&gt;
_loop:&lt;br /&gt;
   add	hl, hl&lt;br /&gt;
   rla&lt;br /&gt;
   cp	c&lt;br /&gt;
   jr	c, $+4&lt;br /&gt;
   sub	c&lt;br /&gt;
   inc	l   &lt;br /&gt;
   djnz	_loop&lt;br /&gt;
;THis part is the rounding&lt;br /&gt;
   add a,a&lt;br /&gt;
   cp	c&lt;br /&gt;
   ret	c&lt;br /&gt;
   inc hl&lt;br /&gt;
   ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:42F1</id>
		<title>83Plus:BCALLs:42F1</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:42F1"/>
				<updated>2012-01-05T01:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Outputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:BCALLs:By Name:Variable|ChkFindSym]] [[Category:83Plus:BCALLs:By Name|ChkFindSym]] [[Category:83Plus:BCALLs:By Address|42F1 - ChkFindSym]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' ChkFindSym&lt;br /&gt;
&lt;br /&gt;
'''BCALL Address:''' 42F1&lt;br /&gt;
&lt;br /&gt;
Recalls various pointers and information for a symbol in the VAT.&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* [[83Plus:RAM:8478|OP1]] = Name of variable (with proper initial defining byte, see example)&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* HL = VAT pointer&lt;br /&gt;
* DE = Data location (if in archive, will be address when page is put into [[83Plus:Ports:06|bank A]])&lt;br /&gt;
* B = Flash Page, or 0 if in RAM&lt;br /&gt;
* C = Length of Variable Name&lt;br /&gt;
* A = the lower 5 bits is the type. Use the mask 1Fh.&lt;br /&gt;
* carry flag is set if the variable is not found in the VAT&lt;br /&gt;
&lt;br /&gt;
=== Registers Destroyed ===&lt;br /&gt;
'All'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ld hl,varname&lt;br /&gt;
B_CALL Mov9toOp1&lt;br /&gt;
B_CALL ChkFindSym&lt;br /&gt;
jr c,notfound      ;carry flag is set if the VAT entry is not found&lt;br /&gt;
ex de,hl           ;put data pointer into hl &lt;br /&gt;
xor a &lt;br /&gt;
cp  b              ;see if b is 0, and the program is in the ram&lt;br /&gt;
jr z,unarchived      ;if so, jump to unarchived &lt;br /&gt;
&lt;br /&gt;
;do something to get it into RAM&lt;br /&gt;
&lt;br /&gt;
unarchived:&lt;br /&gt;
&lt;br /&gt;
;do something once it is in RAM&lt;br /&gt;
&lt;br /&gt;
varName:&lt;br /&gt;
.db AppVarObj, &amp;quot;APPVAR&amp;quot;,0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4E82</id>
		<title>83Plus:BCALLs:4E82</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:BCALLs:4E82"/>
				<updated>2011-12-03T04:15:28Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Inputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:BCALLs:By Name:Parser|ParsePrgmName]] [[Category:83Plus:BCALLs:By Name|ParsePrgmName]] [[Category:83Plus:BCALLs:By Address|4E82 - ParsePrgmName]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' ParsePrgmName&lt;br /&gt;
&lt;br /&gt;
'''BCALL Address:''' 4E82&lt;br /&gt;
&lt;br /&gt;
Parses a program token and name out of memory and copies it to [[83Plus:RAM:8478|OP1]].&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* ([[83Plus:RAM:965D|nextParseByte]]): address of 5Fh (prgm) token minus one&lt;br /&gt;
* ([[83Plus:RAM:965F|basic_end]]): end of line to parse&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* [[83Plus:RAM:8478|OP1]]: type and name of program, zero-terminated&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
* All&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
This is used by the OS to parse a line containing Asm( or AsmComp(.&lt;br /&gt;
&lt;br /&gt;
It will throw an error if any parsing problems are encountered.&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442</id>
		<title>83Plus:RAM:8442</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442"/>
				<updated>2011-04-28T14:50:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Edited name to be prettier. keyHook as opposed to KeyHook&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:RAM:By Address|8442 - keyDelay]]&lt;br /&gt;
[[Category:83Plus:RAM:By Name|keyDelay]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Unofficial Name:''' keyDelay&lt;br /&gt;
&lt;br /&gt;
'''Memory Address:''' 8442h&lt;br /&gt;
&lt;br /&gt;
'''Length:''' 1 byte&lt;br /&gt;
&lt;br /&gt;
This byte of RAM handles the delay between key presses. It is at 50 (or 32h) until a key is pressed. It then counts  down to 0 while the key is being pressed. If the key is a repeating key (del or the arrows), it resets to 10 and then counts back down.&lt;br /&gt;
&lt;br /&gt;
If used in a hook, you can modify the repeating speeds of keys as well as make all keys repeat.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Change Delay Speed===&lt;br /&gt;
The following code will change the delay and repeat speed of keys. 'Delay' and 'Repeat' need to be defined.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; SetKeyHook:&lt;br /&gt;
        in a,(6)                   ;To obtain the page the hook is on (if it is on the same page)&lt;br /&gt;
        ld hl,KeyHook&lt;br /&gt;
        B_CALL _EnableRawKeyHook&lt;br /&gt;
        ret&lt;br /&gt;
KeyHook:&lt;br /&gt;
        .db 83h&lt;br /&gt;
        ld b,a&lt;br /&gt;
        ld hl,8442h         ;keyDelay&lt;br /&gt;
        ld a,(hl)&lt;br /&gt;
        cp 32h&lt;br /&gt;
        jr c,NotDelay&lt;br /&gt;
          ld a,Delay        ;Change this to a number less than 50 to change the initial delay&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
          ld a,b&lt;br /&gt;
          ret&lt;br /&gt;
NotDelay:&lt;br /&gt;
        cp 0Ah&lt;br /&gt;
        jr nz,NotRepeat&lt;br /&gt;
          ld a,Repeat      ;Change this to a number less than 10 to change the repeat speed&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
NotRepeat&lt;br /&gt;
        ld a,b&lt;br /&gt;
        ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Comments ==&lt;br /&gt;
There are several bytes following and preceding this that are similar.&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442</id>
		<title>83Plus:RAM:8442</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442"/>
				<updated>2011-04-28T14:44:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: /* Synopsis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:RAM:By Address|8442 - KeyDelay]]&lt;br /&gt;
[[Category:83Plus:RAM:By Name|KeyDelay]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Unofficial Name:''' KeyDelay&lt;br /&gt;
&lt;br /&gt;
'''Memory Address:''' 8442h&lt;br /&gt;
&lt;br /&gt;
'''Length:''' 1 byte&lt;br /&gt;
&lt;br /&gt;
This byte of RAM handles the delay between key presses. It is at 50 (or 32h) until a key is pressed. It then counts  down to 0 while the key is being pressed. If the key is a repeating key (del or the arrows), it resets to 10 and then counts back down.&lt;br /&gt;
&lt;br /&gt;
If used in a hook, you can modify the repeating speeds of keys as well as make all keys repeat.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Change Delay Speed===&lt;br /&gt;
The following code will change the delay and repeat speed of keys. 'Delay' and 'Repeat' need to be defined.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; SetKeyHook:&lt;br /&gt;
        in a,(6)                   ;To obtain the page the hook is on (if it is on the same page)&lt;br /&gt;
        ld hl,KeyHook&lt;br /&gt;
        B_CALL _EnableRawKeyHook&lt;br /&gt;
        ret&lt;br /&gt;
KeyHook:&lt;br /&gt;
        .db 83h&lt;br /&gt;
        ld b,a&lt;br /&gt;
        ld hl,8442h&lt;br /&gt;
        ld a,(hl)&lt;br /&gt;
        cp 32h&lt;br /&gt;
        jr c,NotDelay&lt;br /&gt;
          ld a,Delay        ;Change this to a number less than 50 to change the initial delay&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
          ld a,b&lt;br /&gt;
          ret&lt;br /&gt;
NotDelay:&lt;br /&gt;
        cp 0Ah&lt;br /&gt;
        jr nz,NotRepeat&lt;br /&gt;
          ld a,Repeat      ;Change this to a number less than 10 to change the repeat speed&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
NotRepeat&lt;br /&gt;
        ld a,b&lt;br /&gt;
        ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Comments ==&lt;br /&gt;
There are several bytes following and preceding this that are similar.&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442</id>
		<title>83Plus:RAM:8442</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:RAM:8442"/>
				<updated>2011-04-28T14:42:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zeda: Used by the OS to check for key delays and repeats.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:RAM:By Address|8442 - KeyDelay]]&lt;br /&gt;
[[Category:83Plus:RAM:By Name|KeyDelay]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Unofficial Name:''' KeyDelay&lt;br /&gt;
&lt;br /&gt;
'''Memory Address:''' 8442h&lt;br /&gt;
&lt;br /&gt;
'''Length:''' 1 byte&lt;br /&gt;
&lt;br /&gt;
This byte of RAM handles the delay between key presses. It is at 50 (or 32h) until you press a key. It then counts  down to 0 while you hold the key. If the key is a repeating key (del or the arrows), it resets to 10 and then counts back down.&lt;br /&gt;
&lt;br /&gt;
If used in a hook, you can modify the repeating speeds of keys as well as make all keys repeat.&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Change Delay Speed===&lt;br /&gt;
The following code will change the delay and repeat speed of keys. 'Delay' and 'Repeat' need to be defined.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; SetKeyHook:&lt;br /&gt;
        in a,(6)                   ;To obtain the page the hook is on (if it is on the same page)&lt;br /&gt;
        ld hl,KeyHook&lt;br /&gt;
        B_CALL _EnableRawKeyHook&lt;br /&gt;
        ret&lt;br /&gt;
KeyHook:&lt;br /&gt;
        .db 83h&lt;br /&gt;
        ld b,a&lt;br /&gt;
        ld hl,8442h&lt;br /&gt;
        ld a,(hl)&lt;br /&gt;
        cp 32h&lt;br /&gt;
        jr c,NotDelay&lt;br /&gt;
          ld a,Delay        ;Change this to a number less than 50 to change the initial delay&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
          ld a,b&lt;br /&gt;
          ret&lt;br /&gt;
NotDelay:&lt;br /&gt;
        cp 0Ah&lt;br /&gt;
        jr nz,NotRepeat&lt;br /&gt;
          ld a,Repeat      ;Change this to a number less than 10 to change the repeat speed&lt;br /&gt;
          ld (hl),a&lt;br /&gt;
NotRepeat&lt;br /&gt;
        ld a,b&lt;br /&gt;
        ret&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Comments ==&lt;br /&gt;
There are several bytes following and preceding this that are similar.&lt;/div&gt;</summary>
		<author><name>Zeda</name></author>	</entry>

	</feed>