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

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:Ports:01</id>
		<title>83Plus:Ports:01</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:Ports:01"/>
				<updated>2016-09-11T20:47:00Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:Ports:By_Address|01 - Keyboard]] [[Category:83Plus:Ports:By_Name|Keyboard]] [[Category:83:Ports:By_Address|01 - Keyboard]] [[Category:83:Ports:By_Name|Keyboard]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Port Number:''' 01h&lt;br /&gt;
&lt;br /&gt;
'''Function:''' Keyboard Port&lt;br /&gt;
&lt;br /&gt;
This port reads key presses from the keypad. The keypad is divided into a series of groups.&lt;br /&gt;
&lt;br /&gt;
=== Read Values ===&lt;br /&gt;
* Bits are set according whether corresponding keys from selected groups are pressed. Groups are selected through writing to the port. A pressed key reads a 0 bit. An unpressed key reads a 1 bit. The port reads FF after a reset (write FF).&lt;br /&gt;
&lt;br /&gt;
=== Write Values ===&lt;br /&gt;
* $FF : Reset the keypad. This unselects all groups and resets the keypad state.&lt;br /&gt;
* Anything else : Any 0 bit adds the corresponding group to the list of monitored groups. When a key in a monitored group is pressed, the corresponding key bit reads 0, otherwise it reads 1 (active-low).&lt;br /&gt;
&lt;br /&gt;
== Key Map ==&lt;br /&gt;
The key map is laid out as follows:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
! Group Bit&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Group Mask&lt;br /&gt;
| FE || FD || FB || F7 || EF || DF || BF || 7F&lt;br /&gt;
|-&lt;br /&gt;
! Key Bit !! (Mask)&lt;br /&gt;
|-&lt;br /&gt;
! 0 !! (FE)&lt;br /&gt;
| DOWN||ENTER|| (-) ||  .  ||  0  ||     ||GRAPH||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! (FD)&lt;br /&gt;
| LEFT||  +  ||  3  ||  2  ||  1  || STO ||TRACE||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 2 !! (FB)&lt;br /&gt;
|RIGHT||  -  ||  6  ||  5  ||  4  || LN  ||ZOOM ||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 3 !! (F7)&lt;br /&gt;
| UP  ||  *  ||  9  ||  8  ||  7  || LOG ||WIND ||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 4 !! (EF)&lt;br /&gt;
|     ||  /  ||  )  ||  (  ||  ,  || x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; || Y=  ||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 5 !! (DF)&lt;br /&gt;
|     ||  ^  || TAN || COS || SIN ||x&amp;lt;sup&amp;gt;-1&amp;lt;/sup&amp;gt; || 2nd ||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 6 !! (BF)&lt;br /&gt;
|     ||CLEAR||VARS ||PRGM ||APPS ||MATH ||MODE ||     ||&lt;br /&gt;
|-&lt;br /&gt;
! 7 !! (7F)&lt;br /&gt;
|     ||     ||     ||STAT ||X,T,&amp;amp;#952;,''n''||ALPHA|| DEL ||     ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Note:''' Group FB Key FE is NEGATE, not to be confused with SUBTRACT.&lt;br /&gt;
* '''Note:''' Group DF Key FE would be ON, but the ON key is tested elsewhere (a &amp;quot;special case&amp;quot; key - after all, it is the ON key).&lt;br /&gt;
* '''Note:''' Group EF Key BF (APPS) is called MATRIX on the TI-83.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
TI's code always resets the keypad before scanning; sometimes, you may get incorrect values if you scan without resetting first.&lt;br /&gt;
&lt;br /&gt;
You should disable interrupts or use a custom interrupt before manually reading this port, because TI's interrupt scans the keypad. If you leave TI's interrupt active when manually reading the keypad, sometimes it will fire between when you set and read the port, and you'll read garbage.&lt;br /&gt;
&lt;br /&gt;
Traditionally, a delay of a dozen or so clock cycles (6 MHz mode) is used between changing key groups and reading the result. The required delay seems to vary depending on the calculator; some require no delay, others a longer one. The delay is based on real time, not CPU clock cycles; you'll need to make your delay about 3 times longer in 15 MHz mode. However, as in the example, other people seem to find that resetting before every group change negates the need for a delay; some more experimentation is required.&lt;br /&gt;
&lt;br /&gt;
For me (Sorunome) this didn't seem to work: Using the following code didn't always have the correct keygroup selected when scanning (on a TI-84+SE of a friend of mine):  &lt;br /&gt;
&amp;lt;pre&amp;gt;ld a,$ff&lt;br /&gt;
out (1),a&lt;br /&gt;
ld a,%10111110&lt;br /&gt;
out (1),a&lt;br /&gt;
in a,(1)&amp;lt;/pre&amp;gt;&lt;br /&gt;
While the following fixed it:&lt;br /&gt;
&amp;lt;pre&amp;gt;ld a,$ff&lt;br /&gt;
out (1),a&lt;br /&gt;
ld a,%10111110&lt;br /&gt;
out (1),a&lt;br /&gt;
ex (sp),hl&lt;br /&gt;
ex (sp),hl&lt;br /&gt;
in a,(1)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ld a, 0FFh ;Reset the keypad.&lt;br /&gt;
out (1), a&lt;br /&gt;
ld a, 0FEh ;Select group 0.&lt;br /&gt;
out (1), a&lt;br /&gt;
in a, (1) ;Test for keys.&lt;br /&gt;
and 2 ;Test for Left Arrow key by making A 0 if left was pressed.&lt;br /&gt;
call z, LeftArrowPressed ;If 0 then left was pressed.&lt;br /&gt;
ld a, 0FFh ;Reset the keypad.&lt;br /&gt;
out (1), a&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE</id>
		<title>Category:84PCE</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE"/>
				<updated>2015-10-12T20:20:12Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This Category contains documentation for both the TI-84 Plus CE and the TI-83 Premium CE.&lt;br /&gt;
&lt;br /&gt;
[[Category:Calculator Documentation]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE:OS_Information</id>
		<title>Category:84PCE:OS Information</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE:OS_Information"/>
				<updated>2015-10-12T20:19:27Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use this category for information applicable to both the TI-84 Plus CE and the TI-83 Premium CE. For information only applicable to the TI-83 Premium CE, see [[:Category:83PCE:OS_Information|the relevant category]].&lt;br /&gt;
&lt;br /&gt;
Information:&lt;br /&gt;
* TI has included the Zilog eZ80 C runtime library.&lt;br /&gt;
* There are different signing keys for TI-84 Plus CE and TI-83 Premium CE models.&lt;br /&gt;
* Matrices operations now limited to matrices with no more than 400 elements, whereas before the TI-83 series didn't have enough RAM for that to be a problem. &lt;br /&gt;
** This is apparently because they take too long, but you can still ask to sort a 999 element list.&lt;br /&gt;
* Because the eZ80 doesn't need paging, apps are no longer limited to being allocated in 16 K increments, and they contain a relocations table like TI-89 apps&lt;br /&gt;
** The app signing key is now 2048 bits&lt;br /&gt;
** TI can now develop apps using C; and we can do programs.&lt;br /&gt;
* The interrupt handler now saves and restores IY, so you can use IY depending on what OS routines you want that may depend on IY.&lt;br /&gt;
* The boot code interrupt handler checks that MBASE is set to D0 before passing interrupt handling control to OS. If it's not D0, the boot code jumps to some kind of error handler that basically resets the calculator. So unless you're handing interrupts yourself, or disable interrupts, you can't change MBASE to get a full 64 K of Z80 mode code and data in whatever location suits your program. (However, you can still simply place your Z80 mode code in 'safeRAM' locations in the first 64 K of RAM.)&lt;br /&gt;
* The boot code interrupt handler also disables mixed-memory-mode, so you can't run code in Z80 mode without disabling interrupts or handling them yourself.&lt;br /&gt;
&lt;br /&gt;
[[Category:84PCE]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE</id>
		<title>Category:84PCE</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE"/>
				<updated>2015-10-12T20:17:12Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: Created page with &amp;quot;This Category contains documentation for the TI-84 Plus Color Edition calculator.  Category:Calculator Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This Category contains documentation for the TI-84 Plus Color Edition calculator.&lt;br /&gt;
&lt;br /&gt;
[[Category:Calculator Documentation]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE:RAM</id>
		<title>Category:84PCE:RAM</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE:RAM"/>
				<updated>2015-10-12T20:16:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: Created page with &amp;quot;Please read our page on Contributing before editing these pages!   Category:84PCE&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please read our page on [[Contributing]] before editing these pages! &lt;br /&gt;
&lt;br /&gt;
[[Category:84PCE]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE:Ports</id>
		<title>Category:84PCE:Ports</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE:Ports"/>
				<updated>2015-10-12T20:15:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: Created page with &amp;quot;Please read our page on Contributing before editing these pages!   Category:84PCE&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please read our page on [[Contributing]] before editing these pages! &lt;br /&gt;
&lt;br /&gt;
[[Category:84PCE]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Category:84PCE:Syscalls</id>
		<title>Category:84PCE:Syscalls</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Category:84PCE:Syscalls"/>
				<updated>2015-10-12T20:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: Created page with &amp;quot;Please read our page on Contributing before editing these pages!   Category:84PCE&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please read our page on [[Contributing]] before editing these pages! &lt;br /&gt;
&lt;br /&gt;
[[Category:84PCE]]&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=83Plus:RAM:9824</id>
		<title>83Plus:RAM:9824</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=83Plus:RAM:9824"/>
				<updated>2015-08-03T03:14:21Z</updated>
		
		<summary type="html">&lt;p&gt;Sorunome: Fixed typo of the memory address&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:83Plus:RAM:By_Name|FPS]] [[Category:83Plus:RAM:By_Address|9824 - FPS]]&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
'''Official Name:''' FPS&lt;br /&gt;
&lt;br /&gt;
'''Memory Address:''' 9824h&lt;br /&gt;
&lt;br /&gt;
'''Length:''' 2 bytes.&lt;br /&gt;
&lt;br /&gt;
This is a pointer to the next free byte above the top of the Floating Point Stack, which is at the bottom end of free RAM.&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
The Floating Point Stack is used by many BCALLs for temporary storage of floating point values.&lt;/div&gt;</summary>
		<author><name>Sorunome</name></author>	</entry>

	</feed>