<?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=Sircmpwn</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=Sircmpwn"/>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Special:Contributions/Sircmpwn"/>
		<updated>2026-04-11T10:10:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM</id>
		<title>Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM"/>
				<updated>2011-11-28T17:44:21Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is so full of contradictory statements, I don't even&lt;br /&gt;
&lt;br /&gt;
I'll fix it eventually.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM</id>
		<title>Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Software:KnightOS/Programming/Assembly/RAM"/>
				<updated>2011-11-28T17:44:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'This page is so full of contradictory statements, I don't even I'll fix it eventually.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is so full of contradictory statements, I don't even&lt;br /&gt;
I'll fix it eventually.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:State_of_the_calculator_at_boot</id>
		<title>83Plus:State of the calculator at boot</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:State_of_the_calculator_at_boot"/>
				<updated>2011-11-28T16:51:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is dedicated to what happens right when the calculator begins to execute code.&lt;br /&gt;
&lt;br /&gt;
For now, all the information is about the 84+. When someone does some boot code work with the 83+, this page will have to be updated.&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
All registers are 00h. However, if you are writing a boot code, you should still initialize the variables on the off chance that one is not 00h, or if someone jumps to your boot code.&lt;br /&gt;
&lt;br /&gt;
==Port Values==&lt;br /&gt;
These port values were all found on an 84+SE hardware revision M with a [[83Plus:Ports:15|port 15]] value of 55h.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|00h||03h&lt;br /&gt;
|-&lt;br /&gt;
|01h||FFh&lt;br /&gt;
|-&lt;br /&gt;
|02h||E3h&lt;br /&gt;
|-&lt;br /&gt;
|03h||00h&lt;br /&gt;
|-&lt;br /&gt;
|04h||08h&lt;br /&gt;
|-&lt;br /&gt;
|05h||00h&lt;br /&gt;
|-&lt;br /&gt;
|06h||00h&lt;br /&gt;
|-&lt;br /&gt;
|07h||00h&lt;br /&gt;
|-&lt;br /&gt;
|08h||00h&lt;br /&gt;
|-&lt;br /&gt;
|09h||20h&lt;br /&gt;
|-&lt;br /&gt;
|0Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|0Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|0Ch||00h&lt;br /&gt;
|-&lt;br /&gt;
|0Dh||00h&lt;br /&gt;
|-&lt;br /&gt;
|0Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|0Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|10h||FFh&lt;br /&gt;
|-&lt;br /&gt;
|11h||FFh&lt;br /&gt;
|-&lt;br /&gt;
|12h||FFh&lt;br /&gt;
|-&lt;br /&gt;
|13h||FFh&lt;br /&gt;
|-&lt;br /&gt;
|14h||00h&lt;br /&gt;
|-&lt;br /&gt;
|15h||55h&lt;br /&gt;
|-&lt;br /&gt;
|16h||00h&lt;br /&gt;
|-&lt;br /&gt;
|17h||00h&lt;br /&gt;
|-&lt;br /&gt;
|18h||00h&lt;br /&gt;
|-&lt;br /&gt;
|19h||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Ch||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Dh||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|1Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|20h||00h&lt;br /&gt;
|-&lt;br /&gt;
|21h||33h&lt;br /&gt;
|-&lt;br /&gt;
|22h||00h&lt;br /&gt;
|-&lt;br /&gt;
|23h||00h&lt;br /&gt;
|-&lt;br /&gt;
|24h||00h&lt;br /&gt;
|-&lt;br /&gt;
|25h||00h&lt;br /&gt;
|-&lt;br /&gt;
|26h||00h&lt;br /&gt;
|-&lt;br /&gt;
|27h||00h&lt;br /&gt;
|-&lt;br /&gt;
|28h||00h&lt;br /&gt;
|-&lt;br /&gt;
|29h||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Ch||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Dh||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|2Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|30h||00h&lt;br /&gt;
|-&lt;br /&gt;
|31h||00h&lt;br /&gt;
|-&lt;br /&gt;
|32h||00h&lt;br /&gt;
|-&lt;br /&gt;
|33h||00h&lt;br /&gt;
|-&lt;br /&gt;
|34h||00h&lt;br /&gt;
|-&lt;br /&gt;
|35h||00h&lt;br /&gt;
|-&lt;br /&gt;
|36h||00h&lt;br /&gt;
|-&lt;br /&gt;
|37h||00h&lt;br /&gt;
|-&lt;br /&gt;
|38h||00h&lt;br /&gt;
|-&lt;br /&gt;
|39h||00h&lt;br /&gt;
|-&lt;br /&gt;
|3Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|3Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|3Ch||FFh&lt;br /&gt;
|-&lt;br /&gt;
|3Dh||FFh&lt;br /&gt;
|-&lt;br /&gt;
|3Eh||FFh&lt;br /&gt;
|-&lt;br /&gt;
|3Fh||FFh&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|40h||00h&lt;br /&gt;
|-&lt;br /&gt;
|41h||00h&lt;br /&gt;
|-&lt;br /&gt;
|42h||00h&lt;br /&gt;
|-&lt;br /&gt;
|43h||00h&lt;br /&gt;
|-&lt;br /&gt;
|44h||00h&lt;br /&gt;
|-&lt;br /&gt;
|45h||00h&lt;br /&gt;
|-&lt;br /&gt;
|46h||00h&lt;br /&gt;
|-&lt;br /&gt;
|47h||00h&lt;br /&gt;
|-&lt;br /&gt;
|48h||00h&lt;br /&gt;
|-&lt;br /&gt;
|49h||18h&lt;br /&gt;
|-&lt;br /&gt;
|4Ah||06h&lt;br /&gt;
|-&lt;br /&gt;
|4Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|4Ch||22h&lt;br /&gt;
|-&lt;br /&gt;
|4Dh||A9h&lt;br /&gt;
|-&lt;br /&gt;
|4Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|4Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|50h||00h&lt;br /&gt;
|-&lt;br /&gt;
|51h||00h&lt;br /&gt;
|-&lt;br /&gt;
|52h||00h&lt;br /&gt;
|-&lt;br /&gt;
|53h||00h&lt;br /&gt;
|-&lt;br /&gt;
|54h||02h&lt;br /&gt;
|-&lt;br /&gt;
|55h||1Fh&lt;br /&gt;
|-&lt;br /&gt;
|56h||00h&lt;br /&gt;
|-&lt;br /&gt;
|57h||00h&lt;br /&gt;
|-&lt;br /&gt;
|58h||00h&lt;br /&gt;
|-&lt;br /&gt;
|59h||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Ch||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Dh||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|5Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|60h||00h&lt;br /&gt;
|-&lt;br /&gt;
|61h||00h&lt;br /&gt;
|-&lt;br /&gt;
|62h||00h&lt;br /&gt;
|-&lt;br /&gt;
|63h||00h&lt;br /&gt;
|-&lt;br /&gt;
|64h||00h&lt;br /&gt;
|-&lt;br /&gt;
|65h||00h&lt;br /&gt;
|-&lt;br /&gt;
|66h||00h&lt;br /&gt;
|-&lt;br /&gt;
|67h||00h&lt;br /&gt;
|-&lt;br /&gt;
|68h||00h&lt;br /&gt;
|-&lt;br /&gt;
|69h||18h&lt;br /&gt;
|-&lt;br /&gt;
|6Ah||06h&lt;br /&gt;
|-&lt;br /&gt;
|6Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|6Ch||22h&lt;br /&gt;
|-&lt;br /&gt;
|6Dh||A9h&lt;br /&gt;
|-&lt;br /&gt;
|6Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|6Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
|Port||Value&lt;br /&gt;
|-&lt;br /&gt;
|70h||00h&lt;br /&gt;
|-&lt;br /&gt;
|71h||00h&lt;br /&gt;
|-&lt;br /&gt;
|72h||00h&lt;br /&gt;
|-&lt;br /&gt;
|73h||00h&lt;br /&gt;
|-&lt;br /&gt;
|74h||02h&lt;br /&gt;
|-&lt;br /&gt;
|75h||1Fh&lt;br /&gt;
|-&lt;br /&gt;
|76h||00h&lt;br /&gt;
|-&lt;br /&gt;
|77h||00h&lt;br /&gt;
|-&lt;br /&gt;
|78h||00h&lt;br /&gt;
|-&lt;br /&gt;
|79h||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Ah||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Bh||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Ch||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Dh||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Eh||00h&lt;br /&gt;
|-&lt;br /&gt;
|7Fh||00h&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Interesting points:'''&lt;br /&gt;
* Flash is locked&lt;br /&gt;
* 4000h contains flash page 00h&lt;br /&gt;
* 8000h contains flash page 00h&lt;br /&gt;
* C000h contains ram page 00h&lt;br /&gt;
* The LCD driver is disconnected ([[83Plus:Ports:29|port 29]] causes this)&lt;br /&gt;
* The boot code is unlocked&lt;br /&gt;
* 84+BE/SE cannot be determined from [[83Plus:Ports:21|port 21]] as it reads 33h&lt;br /&gt;
* All parts of flash except privileged pages are non-executable (2C-2F, 3F, 6C-6F, and 7F)&lt;br /&gt;
* All of ram is non-executable except the first 1024 bytes of ram page 00h&lt;br /&gt;
* None of the LCD delay ports are set&lt;br /&gt;
* The clock is off&lt;br /&gt;
* The USB driver is off&lt;br /&gt;
&lt;br /&gt;
==Memory Mapping==&lt;br /&gt;
Here's where the boot code gets fun. Since on boot all variables and ports have been reset, it would logically follow that execution should start at 0000h. There's a problem though, 0000h is always flash page 00h. In order to beat this, TI actually had to add a hack to put the boot code into the 0000h region.&lt;br /&gt;
&lt;br /&gt;
* The calculator is in memory map mode 0&lt;br /&gt;
* 0000h contains the boot code (3Fh / 7Fh) and behaves normally&lt;br /&gt;
* 4000h contains flash page 00h&lt;br /&gt;
* 8000h contains flash page 00h&lt;br /&gt;
* C000h contains ram page 00h&lt;br /&gt;
* Page 00h is restored to 0000h when and only when a byte is executed in a memory bank controlled by [[83Plus:Ports:06|port 06]]. This means that in memory map mode 0, a byte must be executed in the 4000h-7FFFh range, and in memory map mode 1, a byte must be executed in the 4000-BFFFh range. When this byte is executed, 00h instantly goes back to 0000h.&lt;br /&gt;
&lt;br /&gt;
It has also been determined that [[83Plus:Ports:0E|ports 0E and 0F]] play no part in this behavior on the 84+.&lt;br /&gt;
&lt;br /&gt;
==Gathering this Information==&lt;br /&gt;
This information could only be gathered by replacing the boot code. This was a very dangerous operation as one mistake will brick the calculator. You should not attempt to recreate anything on this page or write your own boot code unless you are a master at z80 assembly.&lt;br /&gt;
&lt;br /&gt;
[[Category:83Plus:General Hardware Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values</id>
		<title>83Plus:Start-Up Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values"/>
				<updated>2011-10-29T17:29:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OS and the boot code do some interesting things when they start up.  Most of it is not understood.&lt;br /&gt;
&lt;br /&gt;
== Unknown Port Outputs ==&lt;br /&gt;
Pretty much the entire first 1,000 bytes or so of the boot code falls under this category.&lt;br /&gt;
TIOS outputs 3 to port $0E and 0 to port $0F during initialization.  Leaving this out appears to have no effect.&lt;br /&gt;
When the LCD is initialized, TIOS outputs $17 to port $10 (LCD Command Port), which sets up Op-amp control (OPA1) to the max, but strangely also sets DBA1.  According to the datasheet, it should be using $13 instead, but the LCD does not work if $13 is used instead of $17.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start-Up Values ==&lt;br /&gt;
=== Battery-Pull ===&lt;br /&gt;
When a battery is pulled and replaced, the boot code is started with the following values:&lt;br /&gt;
* When the boot code launches the OS for the first time after a transfer, port 7 reads 0.  TIOS uses this to do some additional integrity checks on itself.&lt;br /&gt;
{{stub}}&lt;br /&gt;
=== OS ===&lt;br /&gt;
When the boot code gives control to the OS, the following values are set:&lt;br /&gt;
* SP: $FFC3 when an OS transfer fails, $FFC5 otherwise (tested with boot code 1.02 on a TI-84+ and TI-84+ SE).  This a pretty reliable means of discovering if you're starting up after a crash, or of the boot code is launching your OS.&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:83Plus:OS_Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values</id>
		<title>83Plus:Start-Up Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values"/>
				<updated>2011-10-29T17:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OS and the boot code do some interesting things when they start up.  Most of it is not understood.&lt;br /&gt;
&lt;br /&gt;
== Unknown Port Outputs ==&lt;br /&gt;
Pretty much the entire first 1,000 bytes or so of the boot code falls under this category.&lt;br /&gt;
TIOS outputs 3 to port $0E and 0 to port $0F during initialization.  Leaving this out appears to have no effect.&lt;br /&gt;
When the LCD is initialized, TIOS outputs $17 to port $10 (LCD Command Port), which sets up Op-amp control (OPA1) to the max, but strangely also sets DBA1.  According to the datasheet, it should be using $13 instead, but the LCD does not work if $13 is used instead of $17.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start-Up Values ==&lt;br /&gt;
=== Battery-Pull ===&lt;br /&gt;
When a battery is pulled and replaced, the boot code is started with the following values:&lt;br /&gt;
* When the boot code launches the OS for the first time after a transfer, port 7 reads 0.  TIOS uses this to do some additional integrity checks on itself.&lt;br /&gt;
{{stub}}&lt;br /&gt;
=== OS ===&lt;br /&gt;
When the boot code gives control to the OS, the following values are set:&lt;br /&gt;
* SP: $FFC3 when an OS transfer fails, $FFC5 otherwise (tested with boot code 1.02 on a TI-84+ and TI-84+ SE)&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:83Plus:OS_Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values</id>
		<title>83Plus:Start-Up Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values"/>
				<updated>2011-10-29T17:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OS and the boot code do some interesting things when they start up.  Most of it is not understood.&lt;br /&gt;
&lt;br /&gt;
== Unknown Port Outputs ==&lt;br /&gt;
Pretty much the entire first 1,000 bytes or so of the boot code falls under this category.&lt;br /&gt;
TIOS outputs 3 to port $0E and 0 to port $0F during initialization.  Leaving this out appears to have no effect.&lt;br /&gt;
When the LCD is initialized, TIOS outputs $17 to port $10 (LCD Command Port), which sets up Op-amp control (OPA1) to the max, but strangely also sets DBA1.  According to the datasheet, it should be using $13 instead, but the LCD does not work if $13 is used instead of $17.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start-Up Values ==&lt;br /&gt;
=== Battery-Pull ===&lt;br /&gt;
When a battery is pulled and replaced, the boot code is started with the following values:&lt;br /&gt;
* When the boot code launches the OS for the first time after a transfer, port 7 reads 0.  TIOS uses this to do some additional integrity checks on itself.&lt;br /&gt;
{{stub}}&lt;br /&gt;
=== OS ===&lt;br /&gt;
When the boot code gives control to the OS, the following values are set:&lt;br /&gt;
SP: $FFC3 when an OS transfer fails, $FFC5 otherwise (tested with boot code 1.02 on a TI-84+ and TI-84+ SE)&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:83Plus:OS_Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values</id>
		<title>83Plus:Start-Up Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values"/>
				<updated>2011-10-29T17:27:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OS and the boot code do some interesting things when they start up.  Most of it is not understood.&lt;br /&gt;
&lt;br /&gt;
== Unknown Port Outputs ==&lt;br /&gt;
Pretty much the entire first 1,000 bytes or so of the boot code falls under this category.&lt;br /&gt;
TIOS outputs 3 to port $0E and 0 to port $0F during initialization.  Leaving this out appears to have no effect.&lt;br /&gt;
When the LCD is initialized, TIOS outputs $17 to port $10 (LCD Command Port), which sets up Op-amp control (OPA1) to the max, but strangely also sets DBA1.  According to the datasheet, it should be using $13 instead, but the LCD does not work if $13 is used instead of $17.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start-Up Values ==&lt;br /&gt;
=== Battery-Pull ===&lt;br /&gt;
When a battery is pulled and replaced, the boot code is started with the following values:&lt;br /&gt;
When the boot code launches the OS for the first time after a transfer, port 7 reads 0.  TIOS uses this to do some additional integrity checks on itself.&lt;br /&gt;
{{stub}}&lt;br /&gt;
=== OS ===&lt;br /&gt;
When the boot code gives control to the OS, the following values are set:&lt;br /&gt;
SP: $FFC3 when an OS transfer fails, $FFC5 otherwise (tested with boot code 1.02 on a TI-84+ and TI-84+ SE)&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:83Plus:OS_Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives</id>
		<title>83Plus:OS:TIOS Alternatives</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives"/>
				<updated>2011-10-29T08:23:16Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:OS_Information|TIOS Alternatives]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The TIOS is the official, standard operating system for the&lt;br /&gt;
TI-83+ series of calculators (including the TI-83+ and TI-84+ and the respective Silver&lt;br /&gt;
Editions of each).  The vast majority of programs for such calculators run on top of the&lt;br /&gt;
TIOS, or on top of some subsidiary program that runs from the TIOS, and thereby implicitly&lt;br /&gt;
depend on its functionality.  However, some people have researched writing alternative&lt;br /&gt;
operating system code and sending it to the calculator to replace the TIOS.&lt;br /&gt;
Several such alternative operating systems are available on the Web, though most of them are&lt;br /&gt;
not yet at a production stage of development.&lt;br /&gt;
&lt;br /&gt;
== List of alternative operating systems ==&lt;br /&gt;
&lt;br /&gt;
*[http://michaelv.org/programs/calcs/ceptic.php CEPTIC], by Michael Vincent: a Control and Execute Program for TI Calculators.  The current version of CEPTIC only runs on the TI-83+ SE, but can be modified to run on the TI-83+.  Assembly source is available, but actually using the OS in its present state is considered non-practical, and the project has been discontinued for various reasons.&lt;br /&gt;
*[http://pongos.sourceforge.net/ PongOS], by FloppusMaximus: a simple, proof-of-concept system whose namesake feature is an embedded Pong game.  Some other system utilities, mostly inspired by Dan Englender's Calcsys, are also available in PongOS, including a hex editor, memory mover (with flash capability), flash sector eraser, and port monitor.  Link support is not provided.&lt;br /&gt;
*[[Vera]], by several members of different programming groups: dubbed the &amp;quot;true calc lover's OS&amp;quot;. Vera is intended to consist of a very basic kernel which can be easily extended to include desired features. The original Vera project has been abandoned, but it has been picked up again in a different form, and seems to be progressing nicely.&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/349/34973.html CSX], by Sean McLaughlin: a command-line-based operating system with a screen layout similar to that of the TI-89 calculators.  CSX provides a simple filesystem, send and receive of files over a link cable, hex editing of memory, and running of Z80 machine code programs.&lt;br /&gt;
*[http://forum.reaktix.com/viewtopic.php?pid=11 Nostalgy], originally by [http://katpro.xiondigital.net/ XDG Kat-Productions], now developed by [http://reaktix.com/ Reaktix Software]: an unofficial project started by XDG Kat-Productions, abandoned when the two main developers became involved in other projects, and later resumed by [[User:Saibot84|Saibot84]]. A pre-alpha working demo is available. Development is still underway, albeit extremely slowly. It currently features a task-switching environment inspired by [http://www.radicalsoft.org/ Radical Software's] TSE, although linking and a file system are not yet implemented.&lt;br /&gt;
*[http://lifos.sourceforge.net/ LIFOS], by Peter Marheine: a similar project to Vera, designed to offer minimal functionality (linking, memory management, and machine code execution) in its basic incarnation but meant to be easily extended into a near-seamless infrastructure of various functions.  Currently (5-28-07) in early alpha stages.  The name comes from the memory allocation system (LIFO OS, or LIFOs).&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/398/39863.html BAOS], by Erik van 't Wout: Basic Assembly Operating System. (excerpt from the ReadMe:) Being developed &amp;quot;to be a real Operating System for TI-83+ based calculators. It should turn your calculator into a real computer, which can be used for mathematical purposes, but not as main target. Additional functionality should be easy to implement trough the use of libraries.&amp;quot;&lt;br /&gt;
*[http://www.brandonw.net/calcstuff/OS2 OS2], by Brandon Wilson: OS2 is &amp;quot;the TI-OS done right&amp;quot;, a from-the-ground-up re-implementation of the TI-OS, designed to do everything the TI-OS can do and run everything it can, but with fewer restrictions and changes not normally possible due to the TI-OS' structure, such as being able to run BASIC programs directly from the archive. It also supports dual-booting with the TI-OS so a user can continue to use the original TI-OS while more and more is added to OS2. Currently only dual-booting and a basic system monitor are supported.&lt;br /&gt;
*[http://code.google.com/p/8xpos/ XOS] by Luc Bruant aka fullmetalcoder, XOS main targets are SE calcs (those with 128kb of RAM). It aims to provide a lot of power to application developer, larger storage capacity whenever possible and a minimal emulation layer to ensure a certain level of backward compatibility of TIOS programs and Apps so as to ease the transition for users.&lt;br /&gt;
*[[83Plus:Software:KnightOS|KnightOS]] by SirCmpwn:  a completely different OS designed loosely around Linux.  KnightOS has no compatibility with the TIOS and completely clobbers the TIOS's filesystems.  KnightOS uses its own filesystem, KFS, which uses the ROM for storage and uses RAM entirely for program execution and the heap/stack.  The kernel, KnightKernel, also has thread support.  However, KnightOS has not been released.   It is still under development.&lt;br /&gt;
&lt;br /&gt;
[[Category:83Plus:OS_Information|TIOS Alternatives]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Calculator_Documentation</id>
		<title>Calculator Documentation</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Calculator_Documentation"/>
				<updated>2011-10-29T08:22:20Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Moving link for TIOS alternatives to general os documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TI-83 (Regular) ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== TI-83 Plus Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83Plus:BCALLs:By_Name|B_CALLs (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83Plus:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83Plus:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83Plus:General_Hardware_Information|General Hardware Documentation]]&lt;br /&gt;
* [[:Category:83Plus:Hooks:By_Name|Hooks]]&lt;br /&gt;
* [[:Category:83Plus:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83Plus:RAM:By_Name|RAM Areas]]&lt;br /&gt;
* [[:Category:83Plus:Basic|TI-83+ Basic]]&lt;br /&gt;
* [[:Category:83Plus:Quirks|Quirks]]&lt;br /&gt;
&lt;br /&gt;
== TI-86 ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:86:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:86:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:86:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:86:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:86:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== M68K Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:68k:Ports:By_Address|Ports]]&lt;br /&gt;
&lt;br /&gt;
== Z80 programming ==&lt;br /&gt;
* [[Meta-tutorial]]&lt;br /&gt;
* [[:Category:Z80_Routines|Z80 Routines]]&lt;br /&gt;
* [[Z80 Instruction Set]]&lt;br /&gt;
* [[Z80 Good Programming Practices]]&lt;br /&gt;
* [[Z80 Optimization]]&lt;br /&gt;
* [[Programming cross z80 calculators]]&lt;br /&gt;
* [[Programming APPS vs. Ram Programs]]&lt;br /&gt;
* [[Programming under Unix-like operating systems]]&lt;br /&gt;
* [[Programming an OS for z80 calculators]]&lt;br /&gt;
&lt;br /&gt;
== Calculator Software ==&lt;br /&gt;
* [[Notable programs]]&lt;br /&gt;
* [[:Category:83Plus:Software|83Plus Software Documentation]]&lt;br /&gt;
* [[Experiments]]&lt;br /&gt;
&lt;br /&gt;
== Computer Software ==&lt;br /&gt;
* [[Link software]]&lt;br /&gt;
* [[:Category:Emulators|Emulators]]&lt;br /&gt;
* [[Assemblers]]&lt;br /&gt;
* [[Compilers]]&lt;br /&gt;
* [[IDEs]]&lt;br /&gt;
* [[Disassemblers]]&lt;br /&gt;
&lt;br /&gt;
== TI Community ==&lt;br /&gt;
&lt;br /&gt;
* [[Beginners|Beginners' manual]]&lt;br /&gt;
* [[Calculator General FAQ]]&lt;br /&gt;
* [[History of the TI Z80 community]]&lt;br /&gt;
* [[:Category:Teams|Programming Teams List]]&lt;br /&gt;
* [[TI websites|TI Web Sites List]]&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
&lt;br /&gt;
Please read our page on [[Contributing]] before you start contributing to WikiTI.&lt;br /&gt;
&lt;br /&gt;
If you feel like contributing but do not know where, see the [[To Do List]].&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Calculator_Documentation</id>
		<title>Calculator Documentation</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Calculator_Documentation"/>
				<updated>2011-10-29T08:16:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TI-83 (Regular) ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== TI-83 Plus Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83Plus:BCALLs:By_Name|B_CALLs (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83Plus:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83Plus:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83Plus:General_Hardware_Information|General Hardware Documentation]]&lt;br /&gt;
* [[:Category:83Plus:Hooks:By_Name|Hooks]]&lt;br /&gt;
* [[:Category:83Plus:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83Plus:RAM:By_Name|RAM Areas]]&lt;br /&gt;
* [[:Category:83Plus:Basic|TI-83+ Basic]]&lt;br /&gt;
* [[:Category:83Plus:Quirks|Quirks]]&lt;br /&gt;
&lt;br /&gt;
== TI-86 ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:86:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:86:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:86:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:86:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:86:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== M68K Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:68k:Ports:By_Address|Ports]]&lt;br /&gt;
&lt;br /&gt;
== Z80 programming ==&lt;br /&gt;
* [[Meta-tutorial]]&lt;br /&gt;
* [[:Category:Z80_Routines|Z80 Routines]]&lt;br /&gt;
* [[Z80 Instruction Set]]&lt;br /&gt;
* [[Z80 Good Programming Practices]]&lt;br /&gt;
* [[Z80 Optimization]]&lt;br /&gt;
* [[Programming cross z80 calculators]]&lt;br /&gt;
* [[Programming APPS vs. Ram Programs]]&lt;br /&gt;
* [[Programming under Unix-like operating systems]]&lt;br /&gt;
* [[Programming an OS for z80 calculators]]&lt;br /&gt;
&lt;br /&gt;
== Calculator Software ==&lt;br /&gt;
* [[Notable programs]]&lt;br /&gt;
* [[:Category:83Plus:Software|83Plus Software Documentation]]&lt;br /&gt;
* [[Experiments]]&lt;br /&gt;
* [[83Plus:OS:TIOS Alternatives|TIOS Alternatives]]&lt;br /&gt;
&lt;br /&gt;
== Computer Software ==&lt;br /&gt;
* [[Link software]]&lt;br /&gt;
* [[:Category:Emulators|Emulators]]&lt;br /&gt;
* [[Assemblers]]&lt;br /&gt;
* [[Compilers]]&lt;br /&gt;
* [[IDEs]]&lt;br /&gt;
* [[Disassemblers]]&lt;br /&gt;
&lt;br /&gt;
== TI Community ==&lt;br /&gt;
&lt;br /&gt;
* [[Beginners|Beginners' manual]]&lt;br /&gt;
* [[Calculator General FAQ]]&lt;br /&gt;
* [[History of the TI Z80 community]]&lt;br /&gt;
* [[:Category:Teams|Programming Teams List]]&lt;br /&gt;
* [[TI websites|TI Web Sites List]]&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
&lt;br /&gt;
Please read our page on [[Contributing]] before you start contributing to WikiTI.&lt;br /&gt;
&lt;br /&gt;
If you feel like contributing but do not know where, see the [[To Do List]].&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:General_Hardware_Information</id>
		<title>Category:83Plus:General Hardware Information</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:General_Hardware_Information"/>
				<updated>2011-10-29T08:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'This is the central location for generic documentation on the TI-83+ family hardware.  Here you should cover things like the boot code, start up behavior, etc.  Please read our p…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the central location for generic documentation on the TI-83+ family hardware.  Here you should cover things like the boot code, start up behavior, etc.&lt;br /&gt;
&lt;br /&gt;
Please read our page on [[Contributing]] before editing these pages!&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Boot-Code_Required_Values</id>
		<title>83Plus:Boot-Code Required Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Boot-Code_Required_Values"/>
				<updated>2011-10-29T08:15:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'The boot code for the TI-83+ family of calculators requires some information to be stored in the OS. *It must be properly signed when sent. *When sent, 0x56 must equal $A5FF (the…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The boot code for the TI-83+ family of calculators requires some information to be stored in the OS.&lt;br /&gt;
*It must be properly signed when sent.&lt;br /&gt;
*When sent, 0x56 must equal $A5FF (the boot code changes this to $A55A).&lt;br /&gt;
*0x26 must be zero, or a failed OS transfer will not properly restart the OS.&lt;br /&gt;
*Each sent page must also include the first page of its sector in the 8XU file, or it will not properly transfer.&lt;br /&gt;
&lt;br /&gt;
[[Category:83Plus:General Hardware Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:OS_Information</id>
		<title>Category:83Plus:OS Information</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:OS_Information"/>
				<updated>2011-10-29T08:09:03Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus|OS Information]]&lt;br /&gt;
This is the central location for generic documentation on the TI-83+ OS. Here you should cover things like the system monitor, using edit buffers, etc.&lt;br /&gt;
&lt;br /&gt;
Please read our page on [[Contributing]] before editing these pages!&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values</id>
		<title>83Plus:Start-Up Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Start-Up_Values"/>
				<updated>2011-10-29T08:05:35Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'The OS and the boot code do some interesting things when they start up.  Most of it is not understood.  == Unknown Port Outputs == Pretty much the entire first 1,000 bytes or so …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OS and the boot code do some interesting things when they start up.  Most of it is not understood.&lt;br /&gt;
&lt;br /&gt;
== Unknown Port Outputs ==&lt;br /&gt;
Pretty much the entire first 1,000 bytes or so of the boot code falls under this category.&lt;br /&gt;
TIOS outputs 3 to port $0E and 0 to port $0F during initialization.  Leaving this out appears to have no effect.&lt;br /&gt;
When the LCD is initialized, TIOS outputs $17 to port $10 (LCD Command Port), which sets up Op-amp control (OPA1) to the max, but strangely also sets DBA1.  According to the datasheet, it should be using $13 instead, but the LCD does not work if $13 is used instead of $17.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start-Up Values ==&lt;br /&gt;
=== Battery-Pull ===&lt;br /&gt;
When a battery is pulled and replaced, the boot code is started with the following values:&lt;br /&gt;
{{stub}}&lt;br /&gt;
=== OS ===&lt;br /&gt;
When the boot code gives control to the OS, the following values are set:&lt;br /&gt;
SP: $FFC3 when an OS transfer fails, $FFC5 otherwise (tested with boot code 1.02 on a TI-84+ and TI-84+ SE)&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:83Plus:OS_Information]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Template:OutOfDate</id>
		<title>Template:OutOfDate</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Template:OutOfDate"/>
				<updated>2011-09-12T20:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|class=&amp;quot;toccolours&amp;quot;&lt;br /&gt;
|''The information contained in this article may be out of date.''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Template:OutOfDate</id>
		<title>Template:OutOfDate</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Template:OutOfDate"/>
				<updated>2011-09-12T20:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'The information contained in this article may be out of date.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The information contained in this article may be out of date.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives</id>
		<title>83Plus:OS:TIOS Alternatives</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives"/>
				<updated>2011-09-05T02:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:OS_Information|TIOS Alternatives]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The TIOS is the official, standard operating system for the&lt;br /&gt;
TI-83+ series of calculators (including the TI-83+ and TI-84+ and the respective Silver&lt;br /&gt;
Editions of each).  The vast majority of programs for such calculators run on top of the&lt;br /&gt;
TIOS, or on top of some subsidiary program that runs from the TIOS, and thereby implicitly&lt;br /&gt;
depend on its functionality.  However, some people have researched writing alternative&lt;br /&gt;
operating system code and sending it to the calculator to replace the TIOS.&lt;br /&gt;
Several such alternative operating systems are available on the Web, though most of them are&lt;br /&gt;
not yet at a production stage of development.&lt;br /&gt;
&lt;br /&gt;
== List of alternative operating systems ==&lt;br /&gt;
&lt;br /&gt;
*[http://michaelv.org/programs/calcs/ceptic.php CEPTIC], by Michael Vincent: a Control and Execute Program for TI Calculators.  The current version of CEPTIC only runs on the TI-83+ SE, but can be modified to run on the TI-83+.  Assembly source is available, but actually using the OS in its present state is considered non-practical, and the project has been discontinued for various reasons.&lt;br /&gt;
*[http://pongos.sourceforge.net/ PongOS], by FloppusMaximus: a simple, proof-of-concept system whose namesake feature is an embedded Pong game.  Some other system utilities, mostly inspired by Dan Englender's Calcsys, are also available in PongOS, including a hex editor, memory mover (with flash capability), flash sector eraser, and port monitor.  Link support is not provided.&lt;br /&gt;
*[[Vera]], by several members of different programming groups: dubbed the &amp;quot;true calc lover's OS&amp;quot;. Vera is intended to consist of a very basic kernel which can be easily extended to include desired features. The original Vera project has been abandoned, but it has been picked up again in a different form, and seems to be progressing nicely.&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/349/34973.html CSX], by Sean McLaughlin: a command-line-based operating system with a screen layout similar to that of the TI-89 calculators.  CSX provides a simple filesystem, send and receive of files over a link cable, hex editing of memory, and running of Z80 machine code programs.&lt;br /&gt;
*[http://forum.reaktix.com/viewtopic.php?pid=11 Nostalgy], originally by [http://katpro.xiondigital.net/ XDG Kat-Productions], now developed by [http://reaktix.com/ Reaktix Software]: an unofficial project started by XDG Kat-Productions, abandoned when the two main developers became involved in other projects, and later resumed by [[User:Saibot84|Saibot84]]. A pre-alpha working demo is available. Development is still underway, albeit extremely slowly. It currently features a task-switching environment inspired by [http://www.radicalsoft.org/ Radical Software's] TSE, although linking and a file system are not yet implemented.&lt;br /&gt;
*[http://lifos.sourceforge.net/ LIFOS], by Peter Marheine: a similar project to Vera, designed to offer minimal functionality (linking, memory management, and machine code execution) in its basic incarnation but meant to be easily extended into a near-seamless infrastructure of various functions.  Currently (5-28-07) in early alpha stages.  The name comes from the memory allocation system (LIFO OS, or LIFOs).&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/398/39863.html BAOS], by Erik van 't Wout: Basic Assembly Operating System. (excerpt from the ReadMe:) Being developed &amp;quot;to be a real Operating System for TI-83+ based calculators. It should turn your calculator into a real computer, which can be used for mathematical purposes, but not as main target. Additional functionality should be easy to implement trough the use of libraries.&amp;quot;&lt;br /&gt;
*[http://www.brandonw.net/calcstuff/OS2 OS2], by Brandon Wilson: OS2 is &amp;quot;the TI-OS done right&amp;quot;, a from-the-ground-up re-implementation of the TI-OS, designed to do everything the TI-OS can do and run everything it can, but with fewer restrictions and changes not normally possible due to the TI-OS' structure, such as being able to run BASIC programs directly from the archive. It also supports dual-booting with the TI-OS so a user can continue to use the original TI-OS while more and more is added to OS2. Currently only dual-booting and a basic system monitor are supported.&lt;br /&gt;
*[http://code.google.com/p/8xpos/ XOS] by Luc Bruant aka fullmetalcoder, XOS main targets are SE calcs (those with 128kb of RAM). It aims to provide a lot of power to application developer, larger storage capacity whenever possible and a minimal emulation layer to ensure a certain level of backward compatibility of TIOS programs and Apps so as to ease the transition for users.&lt;br /&gt;
*[[83Plus:Software:KnightOS|KnightOS]] by SirCmpwn:  a completely different OS designed loosely around Linux.  KnightOS has no compatibility with the TIOS and completely clobbers the TIOS's filesystems.  KnightOS uses its own filesystem, KFS, which uses the ROM for storage and uses RAM entirely for program execution and the heap/stack.  The kernel, KnightKernel, also has thread support.  However, KnightOS has not been released.   It is still under development.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives</id>
		<title>83Plus:OS:TIOS Alternatives</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:OS:TIOS_Alternatives"/>
				<updated>2011-09-05T02:48:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:OS_Information|TIOS Alternatives]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The TIOS is the official, standard operating system for the&lt;br /&gt;
TI-83+ series of calculators (including the TI-83+ and TI-84+ and the respective Silver&lt;br /&gt;
Editions of each).  The vast majority of programs for such calculators run on top of the&lt;br /&gt;
TIOS, or on top of some subsidiary program that runs from the TIOS, and thereby implicitly&lt;br /&gt;
depend on its functionality.  However, some people have researched writing alternative&lt;br /&gt;
operating system code and sending it to the calculator to replace the TIOS.&lt;br /&gt;
Several such alternative operating systems are available on the Web, though most of them are&lt;br /&gt;
not yet at a production stage of development.&lt;br /&gt;
&lt;br /&gt;
== List of alternative operating systems ==&lt;br /&gt;
&lt;br /&gt;
*[http://michaelv.org/programs/calcs/ceptic.php CEPTIC], by Michael Vincent: a Control and Execute Program for TI Calculators.  The current version of CEPTIC only runs on the TI-83+ SE, but can be modified to run on the TI-83+.  Assembly source is available, but actually using the OS in its present state is considered non-practical, and the project has been discontinued for various reasons.&lt;br /&gt;
*[http://pongos.sourceforge.net/ PongOS], by FloppusMaximus: a simple, proof-of-concept system whose namesake feature is an embedded Pong game.  Some other system utilities, mostly inspired by Dan Englender's Calcsys, are also available in PongOS, including a hex editor, memory mover (with flash capability), flash sector eraser, and port monitor.  Link support is not provided.&lt;br /&gt;
*[[Vera]], by several members of different programming groups: dubbed the &amp;quot;true calc lover's OS&amp;quot;. Vera is intended to consist of a very basic kernel which can be easily extended to include desired features. The original Vera project has been abandoned, but it has been picked up again in a different form, and seems to be progressing nicely.&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/349/34973.html CSX], by Sean McLaughlin: a command-line-based operating system with a screen layout similar to that of the TI-89 calculators.  CSX provides a simple filesystem, send and receive of files over a link cable, hex editing of memory, and running of Z80 machine code programs.&lt;br /&gt;
*[http://forum.reaktix.com/viewtopic.php?pid=11 Nostalgy], originally by [http://katpro.xiondigital.net/ XDG Kat-Productions], now developed by [http://reaktix.com/ Reaktix Software]: an unofficial project started by XDG Kat-Productions, abandoned when the two main developers became involved in other projects, and later resumed by [[User:Saibot84|Saibot84]]. A pre-alpha working demo is available. Development is still underway, albeit extremely slowly. It currently features a task-switching environment inspired by [http://www.radicalsoft.org/ Radical Software's] TSE, although linking and a file system are not yet implemented.&lt;br /&gt;
*[http://lifos.sourceforge.net/ LIFOS], by Peter Marheine: a similar project to Vera, designed to offer minimal functionality (linking, memory management, and machine code execution) in its basic incarnation but meant to be easily extended into a near-seamless infrastructure of various functions.  Currently (5-28-07) in early alpha stages.  The name comes from the memory allocation system (LIFO OS, or LIFOs).&lt;br /&gt;
*[http://www.ticalc.org/archives/files/fileinfo/398/39863.html BAOS], by Erik van 't Wout: Basic Assembly Operating System. (excerpt from the ReadMe:) Being developed &amp;quot;to be a real Operating System for TI-83+ based calculators. It should turn your calculator into a real computer, which can be used for mathematical purposes, but not as main target. Additional functionality should be easy to implement trough the use of libraries.&amp;quot;&lt;br /&gt;
*[http://www.brandonw.net/calcstuff/OS2 OS2], by Brandon Wilson: OS2 is &amp;quot;the TI-OS done right&amp;quot;, a from-the-ground-up re-implementation of the TI-OS, designed to do everything the TI-OS can do and run everything it can, but with fewer restrictions and changes not normally possible due to the TI-OS' structure, such as being able to run BASIC programs directly from the archive. It also supports dual-booting with the TI-OS so a user can continue to use the original TI-OS while more and more is added to OS2. Currently only dual-booting and a basic system monitor are supported.&lt;br /&gt;
*[http://code.google.com/p/8xpos/ XOS] by Luc Bruant aka fullmetalcoder, XOS main targets are SE calcs (those with 128kb of RAM). It aims to provide a lot of power to application developer, larger storage capacity whenever possible and a minimal emulation layer to ensure a certain level of backward compatibility of TIOS programs and Apps so as to ease the transition for users.&lt;br /&gt;
*[[http://wikiti.brandonw.net/index.php?title=83Plus:Software:KnightOS|KnightOS]] by SirCmpwn:  a completely different OS designed loosely around Linux.  KnightOS has no compatibility with the TIOS and completely clobbers the TIOS's filesystems.  KnightOS uses its own filesystem, KFS, which uses the ROM for storage and uses RAM entirely for program execution and the heap/stack.  The kernel, KnightKernel, also has thread support.  However, KnightOS has not been released.   It is still under development.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Ports:14</id>
		<title>Talk:83Plus:Ports:14</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Talk:83Plus:Ports:14"/>
				<updated>2011-08-12T04:35:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The discussion of the port protection is relevant to many ports; perhaps this should be moved elsewhere (perhaps even have a category for protected ports.) [[User:FloppusMaximus|FloppusMaximus]] 16:05, 28 Mar 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
I've removed a lot of the information from port 14 because it is redundant from the protected ports information. ~[[User:Sircmpwn|Sircmpwn]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:14</id>
		<title>83Plus:Ports:14</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:14"/>
				<updated>2011-08-09T16:57:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: /* Write Values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address:Protected|14 - Flash Control]] [[Category:83Plus:Ports:By_Address|14 - Flash Control]] [[Category:83Plus:Ports:By_Name|Flash Control]]&lt;br /&gt;
{{Protected Port}}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Port Number:''' 14h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' Flash Write-Lock Control&lt;br /&gt;
&lt;br /&gt;
This port controls whether or not the Flash ROM chip will accept write/erase instructions.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
* '''83+ Basic only''': Reads absolutely nothing of any significance.&lt;br /&gt;
* '''83+ SE/84+ only''': Reads 0 if the flash is locked, 1 if the flash is unlocked.&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
* Write 00h to lock the flash. Write 01h to unlock it.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
When the flash chip is locked, then write/erase instructions are rejected. In addition, protected pages cannot be read. There is only one protected page. On the normal 83+, this is page 1Eh. On the normal 84+, it is 3Eh. On the 83+ SE and 84+ SE it is 7Eh. This page holds the certification data, which includes ID number, validation number, application authorizations, public keys, and other related data.&lt;br /&gt;
&lt;br /&gt;
Other protected ports may be written to from any area (unprivledged ROM, RAM, etc) without requiring a special sequence once Flash is unlocked.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:14</id>
		<title>83Plus:Ports:14</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:14"/>
				<updated>2011-08-09T16:55:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Updated info about protected ports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address:Protected|14 - Flash Control]] [[Category:83Plus:Ports:By_Address|14 - Flash Control]] [[Category:83Plus:Ports:By_Name|Flash Control]]&lt;br /&gt;
{{Protected Port}}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Port Number:''' 14h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' Flash Write-Lock Control&lt;br /&gt;
&lt;br /&gt;
This port controls whether or not the Flash ROM chip will accept write/erase instructions.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
* '''83+ Basic only''': Reads absolutely nothing of any significance.&lt;br /&gt;
* '''83+ SE/84+ only''': Reads 0 if the flash is locked, 1 if the flash is unlocked.&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
* Write 00h to lock the flash. Write 01h to unlock it, but note that writes to this port are only accepted from privileged ROM pages. See Comments for what the privileged pages are.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
When the flash chip is locked, then write/erase instructions are rejected. In addition, protected pages cannot be read. There is only one protected page. On the normal 83+, this is page 1Eh. On the normal 84+, it is 3Eh. On the 83+ SE and 84+ SE it is 7Eh. This page holds the certification data, which includes ID number, validation number, application authorizations, public keys, and other related data.&lt;br /&gt;
&lt;br /&gt;
Other protected ports may be written to from any area (unprivledged ROM, RAM, etc) without requiring a special sequence once Flash is unlocked.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:05</id>
		<title>83Plus:Ports:05</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:05"/>
				<updated>2011-08-09T16:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|05 - RAM Page(SE) - Port 16 Config/Link Assist(83+)]] [[Category:83Plus:Ports:By_Name|RAM Page(SE) - Port 16 Config/Link Assist(83+)]]&lt;br /&gt;
== Synopsis (TI-83 Plus S.E. and TI-84 Plus Family) ==&lt;br /&gt;
'''Port Number:''' 05h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' RAM Paging Port&lt;br /&gt;
&lt;br /&gt;
This port can be used to control what RAM page is paged into the C000h-FFFFh memory bank. Note that it can only map RAM pages, not flash pages.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
Returns the current RAM page.&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
Sets the current RAM page, by giving a value in 00h-07h, inclusive. &lt;br /&gt;
&lt;br /&gt;
== Synopsis (TI-83 Plus) ==&lt;br /&gt;
'''Port Number:''' 05h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' [[83Plus:Ports:16|Port 16h]] Configuration Port/Link Assist Read&lt;br /&gt;
&lt;br /&gt;
This port configures which memory pages are locked or unlocked (i.e. whether or not the PC register is allowed to point within the page) by port 16h. Only bits 0..2 are considered, the rest have no effect. Also, this port is used to read the last byte the link assist received.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
The last byte received by the link assist (see [[83Plus:Ports:00|port 0]] for more information).&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
Writing a set bit to 16h protects the page; writing a clear bit unprotects the page.  The value of port 05h affects which bits of port 16h are acted on.  An 'X' in the table indicates the bit is ignored.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
!colspan=3|Port 05h Bit&lt;br /&gt;
!colspan=8|Port 16h Bit&lt;br /&gt;
|-&lt;br /&gt;
!2!!1!!0!!7!!6!!5!!4!!3!!2!!1!!0&lt;br /&gt;
|-&lt;br /&gt;
|0||0||0||ROM 0F||ROM 0E||ROM 0D||ROM 0C||ROM 0B||ROM 0A||ROM 09||ROM 08&lt;br /&gt;
|-&lt;br /&gt;
|0||0||1||ROM 17||ROM 16||ROM 15||ROM 14||ROM 13||ROM 12||ROM 11||ROM 10&lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||X||X||X||X||ROM 1B||ROM 1A||ROM 19||ROM 18&lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||X||X||RAM 01||X||X||X||X||RAM 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
It has been tested and confirmed that you can unlock RAM 00 on a Ti-83+ by using this port in conjunction with port $16.  This allows you to run code in the $C000-$FFFF area.  Once you succeed in unlocking flash, the following code can be used to unlock RAM page 0 from within TIOS:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;;Tested on OS 1.16 - 1.19&lt;br /&gt;
&lt;br /&gt;
   ld a, %00000111&lt;br /&gt;
   out ($05), a&lt;br /&gt;
   ld a, $1F&lt;br /&gt;
   out ($06), a&lt;br /&gt;
   xor a&lt;br /&gt;
   call $46DA  ; (assuming boot version 1.00; if you wanted to make&lt;br /&gt;
               ; this work in general, you'd need to search the boot&lt;br /&gt;
               ; page to find the appropriate code)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At least on my TI-84+, if you output a value with bit 3 set, reading from the port will return a value with bit 3 set. This would imply that you can use RAM pages 08h-0Fh, but these RAM pages do not exist--this bit is simply ignored (only bits 0-2 actually determine what RAM page is active.)&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Michael Vincent:''' Initial documentation.&lt;br /&gt;
* '''Tijl Coosemans:''' Documenting TI-83 Plus functionality [http://tijl.ulyssis.be/83phwinfo.txt here].&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00</id>
		<title>83Plus:Ports:00</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:00"/>
				<updated>2011-08-09T16:38:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Grammar and standards conformance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|00 - Link]] [[Category:83Plus:Ports:By_Name|Link]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Port Number:''' 00h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' Link&lt;br /&gt;
&lt;br /&gt;
This port controls the calculator's serial link port (the standard link port present on the 83+, 83+ SE, 84+ and 84+ SE - do not confuse this with the 84+/84+SE's USB link port).&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
* Bits 0 and 1: These bits indicate the state of the link port's two lines. If a bit is set that indicates the line is high, and if it is reset that indicates the line is low. When idle (no transfer in progress, no cable plugged in, etc), both lines are usually high. When a cable is connected on both ends, a line reads high if and only if both ends have set the line high. The line will read low if either calculator sets it low. Bit 0 is the tip and bit 1 is the ring.&lt;br /&gt;
*'''83+ only:''' Bit 2: Set means link receive assist is active.&lt;br /&gt;
*'''83+ only:''' Bit 3: Set when link assist has received a complete byte. The only way to reset this bit is to read [[83Plus:Ports:05|port 5]].&lt;br /&gt;
* Bit 4 and 5: Bits 4 and 5 indicate which lines are pulled low by the calculator (unlike bits 0 and 1 they are not influenced by the other calculator). A 1 bit indicates your calculator is holding the line low. A 0 bit indicates your calculator is not holding the line low. (When both calculators have a 0 bit here, the corresponding line will read 1.) In other words, these bits reflect bits 0 and 1 from the most recent write to this port.&lt;br /&gt;
* '''83+ only:''' Bit 6: Set if the link assist is currently receiving data.&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
* Bits 0 and 1: Setting a bit will pull the line low. Resetting a bit will stop holding the line low (allowing it to go high if the other calculator is not holding it low). Remember a low line will read as a bit being reset, but when writing setting a bit brings the line low.&lt;br /&gt;
*'''83+ only:''' Bit 2: Set this bit to enable the link receive assist. After setting this bit, poll port 0 until bit 3 is high, at which point read from [[83Plus:Ports:05|port 5]] to get the byte.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
=== TI-OS Interference ===&lt;br /&gt;
One thing to keep in mind when writing link port related software is that the Ti-OS checks for silent transfers in the background of input routines. When two calculators are connected and one pulls a line low, the other calculator will respond by pulling the other line low to acknowledge that it has received a bit. Even when the other calculator is running an assembly program that uses the getkey romcall. This phenomenon is known to cause severe headaches for programmers who attempt to write synchronization routines :).&lt;br /&gt;
&lt;br /&gt;
=== Data Transfer ===&lt;br /&gt;
Transferring an entire byte requires you to implement some form of protocol. Examples include TI's official linking protocol, [http://www.ticalc.org/archives/files/fileinfo/277/27718.html Michael Vincent's TachyonLink protocol] and [http://bell.timendus.com/ Timendus' Bell library].&lt;br /&gt;
&lt;br /&gt;
Other useful information on linking in general:&lt;br /&gt;
*  [http://www.ticalc.org/archives/files/fileinfo/247/24750.html TI Link Protocol &amp;amp; File Format Guide]&lt;br /&gt;
*  [http://www.ticalc.org/archives/files/fileinfo/294/29418.html Ti-83 Link Port Tutorial] (note that this deals with the TI-83, not the 83 Plus, where the the hardware is [[83:Ports:00|somewhat different]].)&lt;br /&gt;
*  [http://www.ticalc.org/archives/files/fileinfo/242/24244.html All about the Ti-86 link port]&lt;br /&gt;
*  [http://bell.timendus.com/ Bell] and [http://clap.timendus.com/ CLAP] projects&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=== Sending/Setting ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; ld a,0     ; Set both lines high&lt;br /&gt;
 out (0),a&lt;br /&gt;
&lt;br /&gt;
 ld a,2     ; Set tip high, ring low&lt;br /&gt;
 out (0),a&lt;br /&gt;
&lt;br /&gt;
 ld a,1     ; Set tip low, ring high&lt;br /&gt;
 out (0),a&lt;br /&gt;
&lt;br /&gt;
 ld a,3     ; Set both low&lt;br /&gt;
 out (0),a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Receiving/Reading ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; in a,(0)        ; Get link port value&lt;br /&gt;
&lt;br /&gt;
 bit 0,a         ; Check tip&lt;br /&gt;
 jr z,tip_low&lt;br /&gt;
 jr nz,tip_high&lt;br /&gt;
&lt;br /&gt;
 bit 1,a         ; Check ring&lt;br /&gt;
 jr z,ring_low&lt;br /&gt;
 jr nz,ring_high&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:04</id>
		<title>83Plus:Ports:04</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:04"/>
				<updated>2011-08-09T16:35:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|04 - Memory Map / Interrupt]] [[Category:83Plus:Ports:By_Name|Memory Map / Interrupt]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Port Number:''' 04h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' Interrupting Device Identification and Memory Map Control&lt;br /&gt;
&lt;br /&gt;
This port serves two purposes. When read it indicates the device that triggered an interrupt. When written it sets the memory map mode and hardware timer speed. When an interrupt is triggered, it should be cleared by reseting the corresponding bit in [[83Plus:Ports:03|port 3]].  Otherwise, it will continuously call the interrupt code once interrupts are reenabled with ei.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
* Bits 0~2 and 4~7 are set according to which device triggered the running interrupt.&lt;br /&gt;
** Bit 0: Set if pressing the ON Key triggered the interrupt.&lt;br /&gt;
** Bit 1: Set if the first hardware timer triggered the interrupt.&lt;br /&gt;
** Bit 2: Set if the second hardware timer triggered the interrupt.&lt;br /&gt;
** Bit 4: Link activity generated an interrupt.&lt;br /&gt;
** '''83+SE / 84+ only:''' Bit 5: First crystal timer has expired.&lt;br /&gt;
** '''83+SE / 84+ only:''' Bit 6: Second crystal timer has expired.&lt;br /&gt;
** '''83+SE / 84+ only:''' Bit 7: Third crystal timer has expired.&lt;br /&gt;
* Bit 3 is reset if the ON key is being pressed, set otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
* Bit 0 reset to select memory map mode 0. In mode 0 the RAM and ROM is mapped to CPU memory as follows:&lt;br /&gt;
** Address 0000h ~ 3FFFh: ROM Page 0&lt;br /&gt;
** Address 4000h ~ 7FFFh: Memory Bank A (Page selected in [[83Plus:Ports:06|Port 06h]])&lt;br /&gt;
** Address 8000h ~ BFFFh: Memory Bank B (Page selected in [[83Plus:Ports:07|Port 07h]])&lt;br /&gt;
** '''83+ Basic''': Address C000h ~ FFFFh: RAM Page 0&lt;br /&gt;
** '''Everything else''': Address C000h ~ FFFFh: Page selected in [[83Plus:Ports:05|Port 05h]]&lt;br /&gt;
* Bit 0 set to select memory map mode 1. In mode 1 the RAM and ROM is mapped to CPU memory as follows:&lt;br /&gt;
** Address 0000h ~ 3FFFh: ROM Page 0&lt;br /&gt;
** Address 4000h ~ 7FFFh: Memory Bank A, ''even'' page (value of [[83Plus:Ports:06|port 06h]] ANDed with FEh)&lt;br /&gt;
** '''83+ Basic''': Address 8000h ~ BFFFh: Memory Bank A (Page selected in [[83Plus:Ports:06|Port 06h]])&lt;br /&gt;
** '''Everything else''': Address 8000h ~ BFFFh: Memory Bank A, ''odd'' page (value of [[83Plus:Ports:06|port 06h]] ORed with 1)&lt;br /&gt;
** Address C000h ~ FFFFh: Memory Bank B (Page selected in [[83Plus:Ports:07|Port 07h]])&lt;br /&gt;
* Bits 1 and 2 control the hardware timer frequency. Setting both 0 sets the timer to the fastest speed, and both 1 is the slowest speed. The normal speed is with both bits 1.&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|+Frequency (Hz)&lt;br /&gt;
|-&lt;br /&gt;
!&amp;amp;nbsp;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|first timer&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|second timer&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|both enabled&lt;br /&gt;
|-&lt;br /&gt;
!value&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+SE 84+(SE)&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+SE 84+(SE)&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;|83+SE 84+(SE)&lt;br /&gt;
|-&lt;br /&gt;
!00&lt;br /&gt;
|560||512||1120||1024||1680||1536&lt;br /&gt;
|-&lt;br /&gt;
!01&lt;br /&gt;
|248||227.55||497||455.11||746||682.66&lt;br /&gt;
|-&lt;br /&gt;
!10&lt;br /&gt;
|170||146.29||344||292.57||517||438.86&lt;br /&gt;
|-&lt;br /&gt;
!11&lt;br /&gt;
|118||107.79||236||215.58||353||323.37&lt;br /&gt;
|}&lt;br /&gt;
* Bits 4~6 should be 1 on the 83+ and 83+SE, and 0 on the 84+ and 84+SE.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
The calculator uses mode 0 for normal operation. If you change the memory map mode be sure to change it back before returning control.&lt;br /&gt;
Also, do not switch from mode 0 to mode 1 inside the 4000h ~ 7FFFh range unless you've changed the RAM Execution Limits with ports [[83Plus:Ports:25|25]] and [[83Plus:Ports:26|26]].  This is because switching modes in this manner will start executing on RAM page 0, which will crash under normal conditions.&lt;br /&gt;
&lt;br /&gt;
Interrupt timers may not be independent of the CPU speed for the 83+.  However on the 83+SE, 84+ and 84+SE the standard timers are based on the crystal timer. Timer1 fires at 32768/(64+(80*i))hz, where i is bit 1 and 2 set in port 4, making it 0&amp;lt;=i&amp;lt;=3.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
This example shows successful use of this port, switching to mode 1 and back. Mode 1 is the only way to execute code beyond address C000h on the 83+ Basic, unless you use a combination of ports [[83Plus:Ports:05|5]] and [[83Plus:Ports:16|16]] to enable execution on RAM page 00.  (Assumes code is running from 4000h (i.e. an application))&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; in a, (7) ;Save current Bank B page because we'll trash it.&lt;br /&gt;
 push af&lt;br /&gt;
 in a,(6) ;Put this app's page into 8000&lt;br /&gt;
 out (7), a&lt;br /&gt;
 jp $ + 4003h ;This will actually jump to the next statement, but in Bank B.&lt;br /&gt;
 ld a, 77h ;Select mode 1 and keep the timer speed at normal...&lt;br /&gt;
 out (4), a ;Now we're in mode 1.&lt;br /&gt;
 ;We're still at 8000h here but we are back in Bank A.&lt;br /&gt;
 ;Now to go back.&lt;br /&gt;
 ld a, 76h ;I could dec a for this example, but...&lt;br /&gt;
 out (4), a ;Back in mode 0 and bank B.&lt;br /&gt;
 jp $ - 3FFDh ;Jump back to bank A.&lt;br /&gt;
 pop af&lt;br /&gt;
 out (7), a ;Restore bank B.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits and Contributions ==&lt;br /&gt;
* '''Dan Englender''': Originally documented memory map modes [http://www.detachedsolutions.com/forum/viewtopic.php?p=21593#21593 here]&lt;br /&gt;
* '''Michael Vincent''': For his docs [http://www.michaelv.org/programs/calcs/ports/port4.html here], which helped me figure out the interrupt device bits.&lt;br /&gt;
* '''James Montelongo''': For his docs [http://www.geocities.com/jimm09876/calc/port4.html here] on the hardware timer.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</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>2011-08-08T19:19:43Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: added section on avoiding memory leaks&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 ''')''' parentheses 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 write out closing '''&amp;quot;''' quotes at the end of a line: You save '''1''' byte. The reason for this is that TIOS closes any still-open quotes 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: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;
===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>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:Ports:By_Address:Protected</id>
		<title>Category:83Plus:Ports:By Address:Protected</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:Ports:By_Address:Protected"/>
				<updated>2011-08-08T19:01:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: /* Protected Ports */ finishing the changes to protected port information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|Protected Ports]]&lt;br /&gt;
== Protected Ports ==&lt;br /&gt;
Some of the I/O ports on the 83+ have been &amp;quot;protected&amp;quot; to prevent them from being written accidentally (in addition to preventing user programs from writing to them.)  Most of these ports require Flash to be unlocked via port [[83Plus:Ports:14|14]] to respond to write commands.  It was previously thought that all protected ports must be written to with the protected sequence from a protected page, but you may instead use them from anywhere with no sequence if Flash is unlocked.  Port [[83Plus:Ports:14|14]] itself has special requirements that must be met before it will respond:&lt;br /&gt;
&lt;br /&gt;
* Port [[83Plus:Ports:14|14]] can only be written to from privileged ROM pages. The privileged ROM pages are two utility code pages and one or two boot code pages. On the normal 83+ the pages are 1Ch, 1Dh, and 1Fh. On the normal 84+ the pages are 3Ch, 3Dh, and 3Fh. On the 83+ SE the pages are 7Ch, 7Dh, and 7Fh. On the 84+ SE the pages are 6Fh, 7Ch, 7Dh, and 7Fh.  (Pages 3C-3E/6C-6E on the 84+, and page 1E/3E/7E, may also qualify, but no code is currently placed on those pages.)&lt;br /&gt;
&lt;br /&gt;
* A specific sequence of instructions must be executed (all of them from a privileged page, with no interruptions) before the port will finally &amp;quot;listen.&amp;quot; The sequence is:&lt;br /&gt;
 nop&lt;br /&gt;
 nop&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
: A 'di' often precedes this sequence so that it cannot be broken by an interrupt, and a 'di' often follows it, after which the output value is re-checked, to prevent user programs from sneakily inserting their own output values.&lt;br /&gt;
: Because the hardware only checks what bytes are read, and whether they are read from a privileged page, but not whether they are actually executed, certain variants on this sequence are also permissible; for example:&lt;br /&gt;
 ld hl,0&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
&lt;br /&gt;
 ld hl,(word_0000) ; where word_0000 is the address of two zero&lt;br /&gt;
                   ; bytes stored on a privileged page&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
&lt;br /&gt;
 ld ix,byte_ed ; where byte_ed is the address of an ED byte&lt;br /&gt;
 ld hl,byte_f3 ; and byte_f3 is the address of an F3 byte&lt;br /&gt;
               ; both stored on a privileged page&lt;br /&gt;
 rlc b,(ix+0)&lt;br /&gt;
 ld d,(hl)&lt;br /&gt;
 out (...),a&lt;br /&gt;
: The last works because the opcode for RLC B,(IX+0) is DD CB 00 00, the byte read from (ix) is ED, then the opcode for LD D,(HL) is 56, and the byte read from (hl) is F3.  This could be useful since it allows port [[83Plus:Ports:14|port 14]] to be written without destroying the interrupt mode.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:Ports:By_Address:Protected</id>
		<title>Category:83Plus:Ports:By Address:Protected</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:Ports:By_Address:Protected"/>
				<updated>2011-08-08T19:00:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|Protected Ports]]&lt;br /&gt;
== Protected Ports ==&lt;br /&gt;
Some of the I/O ports on the 83+ have been &amp;quot;protected&amp;quot; to prevent them from being written accidentally (in addition to preventing user programs from writing to them.)  Most of these ports require Flash to be unlocked via port [[83Plus:Ports:14|port 14]] to respond to write commands.  It was previously thought that all protected ports must be written to with the protected sequence from a protected page, but you may instead use them from anywhere with no sequence if Flash is unlocked.  Port [[83Plus:Ports:14|port 14]] itself has special requirements that must be met before it will respond:&lt;br /&gt;
&lt;br /&gt;
* Port [[83Plus:Ports:14|port 14]] can only be written to from privileged ROM pages. The privileged ROM pages are two utility code pages and one or two boot code pages. On the normal 83+ the pages are 1Ch, 1Dh, and 1Fh. On the normal 84+ the pages are 3Ch, 3Dh, and 3Fh. On the 83+ SE the pages are 7Ch, 7Dh, and 7Fh. On the 84+ SE the pages are 6Fh, 7Ch, 7Dh, and 7Fh.  (Pages 3C-3E/6C-6E on the 84+, and page 1E/3E/7E, may also qualify, but no code is currently placed on those pages.)&lt;br /&gt;
&lt;br /&gt;
* A specific sequence of instructions must be executed (all of them from a privileged page, with no interruptions) before the port will finally &amp;quot;listen.&amp;quot; The sequence is:&lt;br /&gt;
 nop&lt;br /&gt;
 nop&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
: A 'di' often precedes this sequence so that it cannot be broken by an interrupt, and a 'di' often follows it, after which the output value is re-checked, to prevent user programs from sneakily inserting their own output values.&lt;br /&gt;
: Because the hardware only checks what bytes are read, and whether they are read from a privileged page, but not whether they are actually executed, certain variants on this sequence are also permissible; for example:&lt;br /&gt;
 ld hl,0&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
&lt;br /&gt;
 ld hl,(word_0000) ; where word_0000 is the address of two zero&lt;br /&gt;
                   ; bytes stored on a privileged page&lt;br /&gt;
 im 1&lt;br /&gt;
 di&lt;br /&gt;
 out (...),a&lt;br /&gt;
&lt;br /&gt;
 ld ix,byte_ed ; where byte_ed is the address of an ED byte&lt;br /&gt;
 ld hl,byte_f3 ; and byte_f3 is the address of an F3 byte&lt;br /&gt;
               ; both stored on a privileged page&lt;br /&gt;
 rlc b,(ix+0)&lt;br /&gt;
 ld d,(hl)&lt;br /&gt;
 out (...),a&lt;br /&gt;
: The last works because the opcode for RLC B,(IX+0) is DD CB 00 00, the byte read from (ix) is ED, then the opcode for LD D,(HL) is 56, and the byte read from (hl) is F3.  This could be useful since it allows port [[83Plus:Ports:14|port 14]] to be written without destroying the interrupt mode.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:Quirks</id>
		<title>Category:83Plus:Quirks</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:Quirks"/>
				<updated>2011-07-26T06:24:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Updated information about RAM execution protection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hardware Quirks ==&lt;br /&gt;
&lt;br /&gt;
The TI-83+ family of calculators has some interesting quirks in the hardware.&lt;br /&gt;
&lt;br /&gt;
*Later models of calculators are missing RAM pages&lt;br /&gt;
*Later models of calculators have a longer LCD delay&lt;br /&gt;
*If a LD A,I or LD A,R instruction is interrupted, then the P/V flag is reset, even if interrupts were enabled beforehand.&lt;br /&gt;
&lt;br /&gt;
== TIOS Quirks ==&lt;br /&gt;
*In TI-BASIC interpreter an If inside a For( loop without ending parentheses can cause an abnormal time wasten in interpretation.&lt;br /&gt;
*There are lots of bugs specially in old buggy versions as [http://www.omnimaga.org/index.php?topic=1090.0 this topic] describes.&lt;br /&gt;
*Equality tests (2nd-&amp;gt;TEST) will not work with complex numbers, despite what the manual says.&lt;br /&gt;
*TIOS sets the RAM Execution Limits so that if PC is greater than or equal to $C000, provided an even-numbered RAM page is swapped in the upper bank, the calculator will crash.  On a TI-83+ SE, TI-84+, and TI-84+ SE, this can be changed via ports [[83Plus:Ports:25|25]] and [[83Plus:Ports:26|26]].  On the TI-83+, this is controlled with ports [[83Plus:Ports:05|05]] and [[83Plus:Ports:16|16]].&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:RAM:91DD</id>
		<title>83Plus:RAM:91DD</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:RAM:91DD"/>
				<updated>2011-06-22T15:23:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Fixed wording on comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synopsis ==&lt;br /&gt;
'''Unofficial Name:''' CurTableCol&lt;br /&gt;
&lt;br /&gt;
'''Memory Address:''' 91DDh&lt;br /&gt;
&lt;br /&gt;
'''Length:''' 1 byte&lt;br /&gt;
&lt;br /&gt;
This location contains the current column that is selected in the table screen (2nd+graph) The value is zero when the independent (left) column is selected. It can also take the values 1 and 2 when you select either the left or right dependent column.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
For the current row see [[83Plus:RAM:91DC|CurTableRow]]. This value doesn't tell you which equation you have selected in the table for that information you might use [[83Plus:RAM:91DB]].&lt;br /&gt;
&lt;br /&gt;
[[Category:83Plus:RAM:By Address|91DD - CurTableCol]]&lt;br /&gt;
[[Category:83Plus:RAM:By Name|CurTableCol]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category_talk:83Plus:Quirks</id>
		<title>Category talk:83Plus:Quirks</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category_talk:83Plus:Quirks"/>
				<updated>2010-07-31T17:21:03Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;The calculator will crash if PC is greater than or equal to C000, provided an even-numbered RAM page is swapped in the upper bank. This is the default (page 80h). This is where the 8kb limit comes from &amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is not a &amp;quot;quirk&amp;quot; but a relatively well documented hardware constraint known as memory (execution) protection.&lt;br /&gt;
&lt;br /&gt;
I don't know that &amp;quot;quirk&amp;quot; is well defined.  I intended it to be something that was useful for a programmer to know about, but that didn't really fit anywhere else.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=User_talk:Sircmpwn</id>
		<title>User talk:Sircmpwn</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=User_talk:Sircmpwn"/>
				<updated>2010-06-18T17:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with '===Talk==='&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Talk===&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=User:Sircmpwn</id>
		<title>User:Sircmpwn</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=User:Sircmpwn"/>
				<updated>2010-06-18T17:23:06Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sir Cmpwn ==&lt;br /&gt;
Also known as Drew DeVault, Sir Cmpwn is a regular coder for the TI-83/84+ (SE) and the PC.&lt;br /&gt;
&lt;br /&gt;
=== Owned Calculator Equipment ===&lt;br /&gt;
TI-84+&lt;br /&gt;
&lt;br /&gt;
TI-83+&lt;br /&gt;
&lt;br /&gt;
Male Mini-B USB &amp;gt; Male USB (TI-84+ and above to PC)&lt;br /&gt;
&lt;br /&gt;
Male Mini-A USB &amp;gt; Female USB (USB Device to TI-84+ and above)&lt;br /&gt;
&lt;br /&gt;
Male 3/32 &amp;gt; Female 1/8 I/O Jack (Calculator to headphone)&lt;br /&gt;
&lt;br /&gt;
=== Known Programming Languages ===&lt;br /&gt;
TI-Basic&lt;br /&gt;
&lt;br /&gt;
z80 Assembly&lt;br /&gt;
&lt;br /&gt;
C#&lt;br /&gt;
&lt;br /&gt;
Blitz Basic&lt;br /&gt;
&lt;br /&gt;
=== Contact Info ===&lt;br /&gt;
Sir Cmpwn can regularly be found on IRC, on the efnet servers.  He is on #ti and #cemetech most often, but also on #tcpa occasionally.  He has a ticalc, cemetech, omnimanga, and united ti account.  His alias is always Sir Cmpwn, you can find him under this name everywhere.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Calculator_Documentation</id>
		<title>Calculator Documentation</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Calculator_Documentation"/>
				<updated>2010-06-18T16:41:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: /* TI-83 Plus Family */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TI-83 (Regular) ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== TI-83 Plus Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:83Plus:BCALLs:By_Name|B_CALLs (System Entrypoints)]]&lt;br /&gt;
* [[:Category:83Plus:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:83Plus:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:83Plus:Hooks:By_Name|Hooks]]&lt;br /&gt;
* [[:Category:83Plus:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:83Plus:RAM:By_Name|RAM Areas]]&lt;br /&gt;
* [[:Category:83Plus:Basic|TI-83+ Basic]]&lt;br /&gt;
* [[:Category:83Plus:Quirks|Hardware Quirks]]&lt;br /&gt;
&lt;br /&gt;
== TI-86 ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:86:ROMCalls:By_Name|ROMCalls (System Entrypoints)]]&lt;br /&gt;
* [[:Category:86:Flags:By_Name|Flags]]&lt;br /&gt;
* [[:Category:86:OS_Information|General OS Documentation]]&lt;br /&gt;
* [[:Category:86:Ports:By_Address|Ports]]&lt;br /&gt;
* [[:Category:86:RAM:By_Name|RAM Areas]]&lt;br /&gt;
&lt;br /&gt;
== M68K Family ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:68k:Ports:By_Address|Ports]]&lt;br /&gt;
&lt;br /&gt;
== Z80 programming ==&lt;br /&gt;
* [[Meta-tutorial]]&lt;br /&gt;
* [[:Category:Z80_Routines|Z80 Routines]]&lt;br /&gt;
* [[Z80 Instruction Set]]&lt;br /&gt;
* [[Z80 Good Programming Practices]]&lt;br /&gt;
* [[Z80 Optimization]]&lt;br /&gt;
* [[Programming cross z80 calculators]]&lt;br /&gt;
* [[Programming APPS vs. Ram Programs]]&lt;br /&gt;
* [[Programming under Unix-like operating systems]]&lt;br /&gt;
&lt;br /&gt;
== Calculator Software ==&lt;br /&gt;
* [[Notable programs]]&lt;br /&gt;
* [[:Category:83Plus:Software|83Plus Software Documentation]]&lt;br /&gt;
* [[Experiments]]&lt;br /&gt;
* [[83Plus:OS:TIOS Alternatives|TIOS Alternatives]]&lt;br /&gt;
&lt;br /&gt;
== Computer Software ==&lt;br /&gt;
* [[:Category:Emulators|Emulators]]&lt;br /&gt;
&lt;br /&gt;
=== Linking ===&lt;br /&gt;
* [[Link cables]]&lt;br /&gt;
* [[Link software]]&lt;br /&gt;
&lt;br /&gt;
=== Programming ===&lt;br /&gt;
* [[Assemblers]]&lt;br /&gt;
* [[Compilers]]&lt;br /&gt;
* [[IDEs]]&lt;br /&gt;
* [[:Category:Emulators|Emulators and Debuggers]]&lt;br /&gt;
* [[Disassemblers]]&lt;br /&gt;
&lt;br /&gt;
== TI Community ==&lt;br /&gt;
&lt;br /&gt;
* [[Beginners|Beginners' manual]]&lt;br /&gt;
* [[Calculator General FAQ]]&lt;br /&gt;
* [[History of the TI Z80 community]]&lt;br /&gt;
* [[:Category:Teams|Programming Teams List]]&lt;br /&gt;
* [[TI websites|TI Web Sites List]]&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
&lt;br /&gt;
Please read our page on [[Contributing]] before you start contributing to WikiTI.&lt;br /&gt;
&lt;br /&gt;
If you feel like contributing but do not know where, see the [[To Do List]].&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:Quirks</id>
		<title>Category:83Plus:Quirks</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:Quirks"/>
				<updated>2010-06-18T16:40:54Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with '{{stub}}  The TI-83+ family of calculators has some interesting quirks in the hardware.  *The calculator will crash if PC is greater than or equal to C000.  This is where the 8kb…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
The TI-83+ family of calculators has some interesting quirks in the hardware.&lt;br /&gt;
&lt;br /&gt;
*The calculator will crash if PC is greater than or equal to C000.  This is where the 8kb limit comes from&lt;br /&gt;
*Later models of calculators are missing RAM pages&lt;br /&gt;
*Later models of calculators have a longer LCD delay&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=LateNite</id>
		<title>LateNite</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=LateNite"/>
				<updated>2010-03-02T00:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with '{{stub}}  Latenite is an IDE (Integrated Development Enviornment) for developing with Brass.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
Latenite is an IDE (Integrated Development Enviornment) for developing with Brass.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=User:Sircmpwn</id>
		<title>User:Sircmpwn</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=User:Sircmpwn"/>
				<updated>2010-02-23T03:07:17Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with '== Sir Cmpwn == A regular coder for the TI-83/84+ (SE) and the PC.  === Owned Calculator Equipment === TI-84+  TI-83+  Male Mini-B USB &amp;gt; Male USB (TI-84+ and above to PC)  Male M…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sir Cmpwn ==&lt;br /&gt;
A regular coder for the TI-83/84+ (SE) and the PC.&lt;br /&gt;
&lt;br /&gt;
=== Owned Calculator Equipment ===&lt;br /&gt;
TI-84+&lt;br /&gt;
&lt;br /&gt;
TI-83+&lt;br /&gt;
&lt;br /&gt;
Male Mini-B USB &amp;gt; Male USB (TI-84+ and above to PC)&lt;br /&gt;
&lt;br /&gt;
Male Mini-A USB &amp;gt; Female USB (USB Device to TI-84+ and above)&lt;br /&gt;
&lt;br /&gt;
Male 3/32 &amp;gt; Female 1/8 I/O Jack (Calculator to headphone)&lt;br /&gt;
&lt;br /&gt;
=== Known Programming Languages ===&lt;br /&gt;
TI-Basic&lt;br /&gt;
&lt;br /&gt;
z80 Assembly&lt;br /&gt;
&lt;br /&gt;
C#&lt;br /&gt;
&lt;br /&gt;
Blitz Basic&lt;br /&gt;
&lt;br /&gt;
=== Contact Info ===&lt;br /&gt;
Sir Cmpwn can regularly be found on IRC, on the efnet servers.  He is on #ti and #cemetech most often, but also on #tcpa occasionally.  He has a ticalc, cemetech, omnimanga, and united ti account.  His alias is always Sir Cmpwn, you can find him under this name everywhere.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseGetKey</id>
		<title>83Plus:Software:usb8x/Asm Interface/Mouse/MouseGetKey</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseGetKey"/>
				<updated>2010-02-23T02:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synopsis ==&lt;br /&gt;
'''Name:''' MouseGetKey&lt;br /&gt;
&lt;br /&gt;
'''Minimum usb8x version:''' 0.08&lt;br /&gt;
&lt;br /&gt;
Gets mouse movement and button press information&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
''None''&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* B: Buttons pressed&lt;br /&gt;
* C: Directional movement&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
* AF, DE, HL, IX&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Make sure the mouse driver has been successfully initialized before calling this routine.  &lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;       ld     hl,DriverBuf&lt;br /&gt;
       U_CALL DriverInit        ;Initialize USB driver&lt;br /&gt;
       ld     b,1&lt;br /&gt;
       ld     de,CDBuf&lt;br /&gt;
       U_CALL MouseInit         ;Initialize mouse driver&lt;br /&gt;
       jp     c,USBInfoError&lt;br /&gt;
       U_CALL MouseGetKey       ;Get mouse movement/button presses&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit|MouseInit]] - Initialize mouse driver&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit</id>
		<title>83Plus:Software:usb8x/Asm Interface/Mouse/MouseInit</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit"/>
				<updated>2010-02-23T02:54:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synopsis ==&lt;br /&gt;
'''Name:''' MouseInit&lt;br /&gt;
&lt;br /&gt;
'''Minimum usb8x version:''' 0.11&lt;br /&gt;
&lt;br /&gt;
Initialize mouse driver&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* DE: Address of temporary descriptor buffer &lt;br /&gt;
* B: Flags&lt;br /&gt;
** bit 0: set = allow diagonal keys, reset = disallow&lt;br /&gt;
** bit 1: set = use passthrough callback&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* NC: Success&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
* AF, BC, DE, HL, IX&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
'''Important''': The mouse driver inputs changed starting at version 0.11 of usb8x.  Be sure to use [[83Plus:Software:usb8x/Asm_Interface/GetVersion|GetVersion]] to check that 0.11 of higher is installed before using the mouse driver.&lt;br /&gt;
&lt;br /&gt;
Initializes the USB host but assumes the USB driver has already been initialized with [[83Plus:Software:usb8x/Asm_Interface/DriverInit|DriverInit]]. &lt;br /&gt;
&lt;br /&gt;
If you indicate to pass callbacks through, the callback address specified in U_CALL_INIT will be used if the U_CALL system is being used.  Otherwise pass the callback address in register IX.&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseGetKey|MouseGetKey]] - Get mouse movement and button presses&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit</id>
		<title>83Plus:Software:usb8x/Asm Interface/Mouse/MouseInit</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit"/>
				<updated>2010-02-23T02:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synopsis ==&lt;br /&gt;
'''Name:''' MouseInit&lt;br /&gt;
&lt;br /&gt;
'''Minimum usb8x version:''' 0.11&lt;br /&gt;
&lt;br /&gt;
Initialize mouse driver&lt;br /&gt;
&lt;br /&gt;
=== Inputs ===&lt;br /&gt;
* DE: Address of temporary descriptor buffer &lt;br /&gt;
* B: Flags&lt;br /&gt;
** bit 0: set = allow diagonal keys, reset = disallow&lt;br /&gt;
** bit 1: set = use passthrough callback&lt;br /&gt;
&lt;br /&gt;
=== Outputs ===&lt;br /&gt;
* NC: Success&lt;br /&gt;
&lt;br /&gt;
=== Destroys ===&lt;br /&gt;
* AF, BC, DE, HL, IX&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
'''Important''': The mouse driver inputs changed starting at version 0.11 of usb8x.  Be sure to use [[83Plus:Software:usb8x/Asm_Interface/GetVersion|GetVersion]] to check that 0.11 of higher is installed before using the mouse driver.&lt;br /&gt;
&lt;br /&gt;
Initializes the USB host but assumes the USB driver has already been initialized with [[../DriverInit|DriverInit]]. &lt;br /&gt;
&lt;br /&gt;
If you indicate to pass callbacks through, the callback address specified in U_CALL_INIT will be used if the U_CALL system is being used.  Otherwise pass the callback address in register IX.&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[../MouseGetKey|MouseGetKey]] - Get mouse movement and button presses&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse</id>
		<title>83Plus:Software:usb8x/Asm Interface/Mouse</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse"/>
				<updated>2010-02-23T02:52:20Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The usb8x mouse driver is compatible with any mouse conforming to the USB HID mouse standard.  However, it is not compatible with devices that have a mouse connected to an internal hub (combination keyboard/mice, for example).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mouse driver is initialized via [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit|MouseInit]].  This entry point initializes both the driver and the mouse hardware, so you may want to check to see if a device is connected via [[../IsDeviceConnected|IsDeviceConnected]] first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After initializing the mouse, use [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseGetKey|MouseGetKey]] to get movement and button information.  [[../../Sample_Code#Mouse_Demo_2|Sample code]] using the mouse driver is available.&lt;br /&gt;
== Entry Points ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;  cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit|MouseInit]] || Initialize the mouse driver and hardware&lt;br /&gt;
|-&lt;br /&gt;
| [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseGetKey|MouseGetKey]] || Get movement and button information&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse</id>
		<title>83Plus:Software:usb8x/Asm Interface/Mouse</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Software:usb8x/Asm_Interface/Mouse"/>
				<updated>2010-02-23T02:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The usb8x mouse driver is compatible with any mouse conforming to the USB HID mouse standard.  However, it is not compatible with devices that have a mouse connected to an internal hub (combination keyboard/mice, for example).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mouse driver is initialized via [[/MouseInit|MouseInit]].  This entry point initializes both the driver and the mouse hardware, so you may want to check to see if a device is connected via [[../IsDeviceConnected|IsDeviceConnected]] first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After initializing the mouse, use [[/MouseGetKey|MouseGetKey]] to get movement and button information.  [[../../Sample_Code#Mouse_Demo_2|Sample code]] using the mouse driver is available.&lt;br /&gt;
== Entry Points ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;  cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| [[83Plus:Software:usb8x/Asm_Interface/Mouse/MouseInit|MouseInit]] || Initialize the mouse driver and hardware&lt;br /&gt;
|-&lt;br /&gt;
| [[/MouseGetKey|MouseGetKey]] || Get movement and button information&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Strings</id>
		<title>Strings</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Strings"/>
				<updated>2010-01-19T00:27:46Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with '{{stub}} A string is a series of characters, such as &amp;quot;hello world.&amp;quot;  TIOS defines them within quotation marks (&amp;quot;&amp;quot;).  Built in, there are 10 string variables (Str0-Str9) that can …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
A string is a series of characters, such as &amp;quot;hello world.&amp;quot;  TIOS defines them within quotation marks (&amp;quot;&amp;quot;).  Built in, there are 10 string variables (Str0-Str9) that can be used by the user and by TI-Basic programs.  Every character is valid to be entered into a string, excluding a quotation mark (&amp;quot;), a newline, and the /-&amp;gt;/ symbol.  It is, however, possible to get these characters into strings.  String variables are accessed through the Vars menu, [2nd]+[Vars]+[7] will pull up a list of strings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Storing to Strings ==&lt;br /&gt;
Strings are stored to like so:&lt;br /&gt;
&amp;quot;Hello&amp;quot;/-&amp;gt;/Str0&lt;br /&gt;
This will store the text &amp;quot;Hello&amp;quot; into Str0.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Lists</id>
		<title>Lists</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Lists"/>
				<updated>2010-01-19T00:07:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Created page with 'Lists are able to store up to 999 real/complex values.  TIOS includes 6 lists be default, &amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;1-&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;6, that have special tokens.  …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lists are able to store up to 999 [[Real/Complex Values|real/complex values]].  TIOS includes 6 lists be default, &amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;1-&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;6, that have special tokens.  These tokens are secondary functions on the number keys.  A user or a TI-Basic program can create custom lists by prefacing a name with &amp;quot;&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;.&amp;quot;  For example: &amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;TEST.  List names are always all caps, and are up to 5 characters long.&lt;br /&gt;
&lt;br /&gt;
== Attaching Strings ==&lt;br /&gt;
Lists may have strings &amp;quot;attached&amp;quot; to them by inputting (either from the homescreen or a program) &amp;quot;string&amp;quot;/-&amp;gt;/&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;LIST.  The string is a executable statement (such as one that may be entered at the homescreen) that will be applied to the list.&lt;br /&gt;
&lt;br /&gt;
== Storing to Lists ==&lt;br /&gt;
Lists are defined with the &amp;quot;{}&amp;quot; characters.  These characters are used like so:&lt;br /&gt;
{0,1,2}&lt;br /&gt;
This defines a list whose first element is 0, the second is 2, and so on.  Note that the closing &amp;quot;}&amp;quot; is not required.  You can have up to 999 values in a single list.  To store to a list, simply store to it like you would a [[Real/Complex Values|real/complex value]] using the /-&amp;gt;/ symbol:&lt;br /&gt;
{0,1,2}/-&amp;gt;/&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;1&lt;br /&gt;
Again, note the closing &amp;quot;}&amp;quot; is optional.  You can access or modify individual values from the list with the &amp;quot;()&amp;quot; symbols:&lt;br /&gt;
&amp;lt;small&amp;gt;L&amp;lt;/small&amp;gt;1(1)&lt;br /&gt;
Which will retrieve the first value, that can be used exactly the same way as a [[Real/Complex Values|real/complex value]].&lt;br /&gt;
&lt;br /&gt;
== Programming Signifigance ==&lt;br /&gt;
Lists are extremely useful in programming because TIOS only allows 25 [[Real/Complex Values|real/complex values]].  Using lists, a TI-Basic program may use as many [[Real/Complex Values|real/complex values]] as they like.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=I</id>
		<title>I</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=I"/>
				<updated>2009-11-10T15:57:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: New page: {{stub}}  i is the square root of negitave 1, which does not exist.  To remedy the fact that it doesn't exist, i was created.  i is located on the period key, on the bottom row.  It is the...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
i is the square root of negitave 1, which does not exist.  To remedy the fact that it doesn't exist, i was created.  i is located on the period key, on the bottom row.  It is the second function keypress.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Real/Complex_Values</id>
		<title>Real/Complex Values</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Real/Complex_Values"/>
				<updated>2009-11-10T15:55:53Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: New page: Real and complex values are used for storing numbers.  They include A-Z and /theta/, most commonly, althogh more are available through hacks.  Although they are two different types of vari...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Real and complex values are used for storing numbers.  They include A-Z and /theta/, most commonly, althogh more are available through hacks.  Although they are two different types of varialbes, they both occupy the same global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Real Values ==&lt;br /&gt;
Real values are real numbers, such as 32, that are used in calculations.  An example calculation is A+3, which will increase the value in A by 3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Complex Values ==&lt;br /&gt;
Complex numbers contain imaginary numbers, which are expressed in terms of [[i]].  They can be displayed in the following formats:&lt;br /&gt;
a+bi&lt;br /&gt;
re^&amp;amp;Thetai&lt;br /&gt;
According to the user's mode settings, or just throw an error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Storing to Real or Complex Variables ==&lt;br /&gt;
To store to a real or complex variable, the user types the value as a number, followed by -&amp;gt;, then specifies the variable:&lt;br /&gt;
45-&amp;gt;B&lt;br /&gt;
This stores the number 45 to the variable B.  For complex numbers, they are expressed in terms of [[i]] and are interchangeable with real variables:&lt;br /&gt;
23i-&amp;gt;B&lt;br /&gt;
Which stores 23*sqrt(-1) to B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Programming signifigance ==&lt;br /&gt;
Real variables are used most widely for programming, but are rigid in their limitation of only 25 variables available.  They are also very hard to keep track of in numbers, because their only identifier is the letter.  An alternative method of using real numbers is in [[lists]], which have up to 999 values available.&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:83Plus:Basic:Variables</id>
		<title>Category:83Plus:Basic:Variables</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:83Plus:Basic:Variables"/>
				<updated>2009-11-10T15:41:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sircmpwn: Changed to a link page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Basic|System Variables]]&lt;br /&gt;
&lt;br /&gt;
[[Real/Complex Values]]&lt;br /&gt;
&lt;br /&gt;
[[Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Strings]]&lt;br /&gt;
&lt;br /&gt;
[[Matricies]]&lt;br /&gt;
&lt;br /&gt;
[[Pictures]]&lt;br /&gt;
&lt;br /&gt;
[[Equations]]&lt;br /&gt;
&lt;br /&gt;
[[Graph Databases]]&lt;br /&gt;
&lt;br /&gt;
[[Finance and Statistics]]&lt;br /&gt;
&lt;br /&gt;
[[Ans]]&lt;/div&gt;</summary>
		<author><name>Sircmpwn</name></author>	</entry>

	</feed>