<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=99.6.119.22</id>
	<title>Bitchin100 DocGarden - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=99.6.119.22"/>
	<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Special:Contributions/99.6.119.22"/>
	<updated>2026-04-15T16:54:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Building_VirtualT_on_Linux&amp;diff=2424</id>
		<title>Building VirtualT on Linux</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Building_VirtualT_on_Linux&amp;diff=2424"/>
		<updated>2011-08-31T16:51:10Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* This Sounds Hard... Why All The Steps? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is this &amp;quot;Linux&amp;quot; You Speak Of? ==&lt;br /&gt;
&lt;br /&gt;
These instructions have been tested on&lt;br /&gt;
&lt;br /&gt;
* Debian&lt;br /&gt;
* Ubuntu&lt;br /&gt;
* Slackware&lt;br /&gt;
&lt;br /&gt;
Please add to the list if you have tested on another distribution.&lt;br /&gt;
&lt;br /&gt;
== This Sounds Hard... Why All The Steps? ==&lt;br /&gt;
&lt;br /&gt;
Because of the rich variety of Linux distros that grace our planet we need volunteer support to maintain good &amp;quot;packages&amp;quot; for each one. That&#039;s the best route... then no documentation is needed for install. Short of that, Linux users simply have to build VirtualT themselves. Of course the benefit of building it yourself is that you always have the latest and greatest features, and of course bugs... but that&#039;s what makes life exciting, right?.&lt;br /&gt;
&lt;br /&gt;
A side benefit is that it increases the amount of people on the latest and greatest. That means more testers of new features. If you have a version that works well for you, keep that in mind before you&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;cvs update&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
to get latest and greatest.&lt;br /&gt;
&lt;br /&gt;
== Download Latest VirtualT Source FOR THE FIRST TIME ==&lt;br /&gt;
&lt;br /&gt;
Open a command prompt and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;cvs -z3 -d:pserver:anonymous@virtualt.cvs.sourceforge.net:/cvsroot/virtualt co -P VirtualT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download Packages FLTK Depends On ==&lt;br /&gt;
&lt;br /&gt;
(a version of this command for RPM or source based distros would be nice)&lt;br /&gt;
&lt;br /&gt;
Command to download FLTK dependencies on Debian:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get build-dep libfltk1.1&lt;br /&gt;
&lt;br /&gt;
Command to download FLTK dependencies on Debian Lenny (stable):&lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install libfltk1.1 libfltk1.1-dev libxext-dev build-essential&lt;br /&gt;
&lt;br /&gt;
== Download, Build FLTK dependency ==&lt;br /&gt;
&lt;br /&gt;
VirtualT depends on the FLTK library. FLTK is hosted at http://www.fltk.org/software.php . Download a version of fltk. These instructions were last tested with fltk-1.1.9 . Decompress the package.&lt;br /&gt;
&lt;br /&gt;
Change directory into fltk-x.y.z&lt;br /&gt;
&lt;br /&gt;
Configure and make fltk:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --enable-localjpeg --enable-localzlib --enable-localpng&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Updating to Latest VirtualT ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building VirtualT ==&lt;br /&gt;
&lt;br /&gt;
cd into VirtualT.&lt;br /&gt;
&lt;br /&gt;
 ls&lt;br /&gt;
&lt;br /&gt;
If you see a folder named vt_client or vt_client_src, remove it&lt;br /&gt;
&lt;br /&gt;
 rmdir vt_client&lt;br /&gt;
or&lt;br /&gt;
 rmdir vt_client_src&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
export FLTKDIR=/where/is/fltk-x.y.z&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then make should work.&lt;br /&gt;
&lt;br /&gt;
You should end up with a file titled &#039;virtualt&#039; in your build directory. You can launch it by typing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
./virtualt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=ASCII_Table_One-Liner&amp;diff=2407</id>
		<title>ASCII Table One-Liner</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=ASCII_Table_One-Liner&amp;diff=2407"/>
		<updated>2011-08-13T19:17:23Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Listing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This program displays the Model 100/102 printable character set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORY=1TO7:FORX=0TO31:C=Y*32+X:IFC=127THENPRINT:NEXTY:ELSEPRINTCHR$(C);:NEXT:PRINT:NEXT:Z$=INPUT$(1):MENU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
[[Image:ASCII-OUT.gif]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=ASCII_Table_One-Liner&amp;diff=2406</id>
		<title>ASCII Table One-Liner</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=ASCII_Table_One-Liner&amp;diff=2406"/>
		<updated>2011-08-13T19:16:59Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This program displays the Model 100/102 printable character set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORY=1TO7:FORX=0TO31:C=Y*32+X:IFC=127THENPRINT:NEXTY:ELSEPRINTCHR$(C);:NEXT:PRINT:NEXT:Z$=INPUT$(1):MENU&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Listing ==&lt;br /&gt;
&lt;br /&gt;
[[Image:ASCII-BA.gif]]&lt;br /&gt;
&lt;br /&gt;
== Output ==&lt;br /&gt;
&lt;br /&gt;
[[Image:ASCII-OUT.gif]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2391</id>
		<title>HTERM</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2391"/>
		<updated>2011-08-03T03:42:47Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
HTERM is a &amp;quot;dumb terminal&amp;quot; program which implements hardware flow control and rudimentary handling of UTF-8 encoding and ANSI escapes.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
Git repo: http://bitchin100.com/pub-git/hterm.git/&lt;br /&gt;
&lt;br /&gt;
== Latest Build ==&lt;br /&gt;
&lt;br /&gt;
(No released build with Unicode support yet)&lt;br /&gt;
&lt;br /&gt;
=== M100/T102 ===&lt;br /&gt;
&lt;br /&gt;
http://bitchin100.com/files/m10x/HTERM.CO&lt;br /&gt;
&lt;br /&gt;
http://bitchin100.com/files/m10x/HTERM.lst&lt;br /&gt;
&lt;br /&gt;
=== T200 ===&lt;br /&gt;
&lt;br /&gt;
http://bitchin100.com/files/t200/HTERM.CO&lt;br /&gt;
&lt;br /&gt;
http://bitchin100.com/files/t200/HTERM.lst&lt;br /&gt;
&lt;br /&gt;
== Unicode Support ==&lt;br /&gt;
&lt;br /&gt;
HTERM is primarily designed to interface with Linux systems, either directly connected or through a serial to network bridge. Login consoles on Linux generally use ANSI escapes and UTF-8 encoding.&lt;br /&gt;
&lt;br /&gt;
UTF-8 is a Unicode &amp;quot;encoding.&amp;quot; It is a way of representing Unicode characters in an 8-bit byte format. Unicode itself is an abstraction... characters in Unicode have a range of 32-bits, with no defined wire or in-memory structure. UTF-8 is one such format.&lt;br /&gt;
&lt;br /&gt;
The Model T laptops also have a 8-bit character code. For characters in the range 0-127, the ASCII range, the characters are the same in UTF-8. For characters above 127, there is no defined correlation between Unicode and the Model T.&lt;br /&gt;
&lt;br /&gt;
HTERM creates such a correlation. HTERM manages converting between UTF-8, an in-memory Unicode representation, and the Model T&#039;s displayable character set.&lt;br /&gt;
&lt;br /&gt;
It turns out that most of the Model 100&#039;s character set maps to the 16-bit Unicode range. Given that, and the fact that the Model 100 can deal directly with 16-bit values, HTERM only supports mapping of Unicode characters in the 16-bit range. If it receives a character outside of that range, it will treat it as an unmapped character.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2390</id>
		<title>HTERM</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2390"/>
		<updated>2011-07-30T23:31:03Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Unicode Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
HTERM is a &amp;quot;dumb terminal&amp;quot; program which implements hardware flow control and rudimentary handling of UTF-8 encoding and ANSI escapes.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
Git repo: http://bitchin100.com/pub-git/hterm.git/&lt;br /&gt;
&lt;br /&gt;
== Unicode Support ==&lt;br /&gt;
&lt;br /&gt;
HTERM is primarily designed to interface with Linux systems, either directly connected or through a serial to network bridge. Login consoles on Linux generally use ANSI escapes and UTF-8 encoding.&lt;br /&gt;
&lt;br /&gt;
UTF-8 is a Unicode &amp;quot;encoding.&amp;quot; It is a way of representing Unicode characters in an 8-bit byte format. Unicode itself is an abstraction... characters in Unicode have a range of 32-bits, with no defined wire or in-memory structure. UTF-8 is one such format.&lt;br /&gt;
&lt;br /&gt;
The Model T laptops also have a 8-bit character code. For characters in the range 0-127, the ASCII range, the characters are the same in UTF-8. For characters above 127, there is no defined correlation between Unicode and the Model T.&lt;br /&gt;
&lt;br /&gt;
HTERM creates such a correlation. HTERM manages converting between UTF-8, an in-memory Unicode representation, and the Model T&#039;s displayable character set.&lt;br /&gt;
&lt;br /&gt;
It turns out that most of the Model 100&#039;s character set maps to the 16-bit Unicode range. Given that, and the fact that the Model 100 can deal directly with 16-bit values, HTERM only supports mapping of Unicode characters in the 16-bit range. If it receives a character outside of that range, it will treat it as an unmapped character.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2389</id>
		<title>HTERM</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=HTERM&amp;diff=2389"/>
		<updated>2011-07-28T22:24:25Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
HTERM is a &amp;quot;dumb terminal&amp;quot; program which implements hardware flow control and rudimentary handling of UTF-8 encoding and ANSI escapes.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
Git repo: http://bitchin100.com/pub-git/hterm.git/&lt;br /&gt;
&lt;br /&gt;
== Unicode Support ==&lt;br /&gt;
&lt;br /&gt;
HTERM is primarily designed to interface with Linux systems, either directly connected or through a serial to network bridge. Login consoles on Linux generally use ANSI escapes and UTF-8 encoding.&lt;br /&gt;
&lt;br /&gt;
UTF-8 is a Unicode &amp;quot;encoding.&amp;quot; It is a way of representing Unicode characters in an 8-bit byte format. Unicode itself is an abstraction... characters in Unicode have a range of 32-bits, with no defined wire or in-memory structure. UTF-8 is one such format.&lt;br /&gt;
&lt;br /&gt;
The Model T laptops also have a 8-bit character code. For characters in the range 0-127, the ASCII range, the characters are the same in UTF-8. For characters above 127, there is no defined correlation between Unicode and the Model T.&lt;br /&gt;
&lt;br /&gt;
HTERM creates such a correlation. HTERM manages converting between UTF-8, an in-memory Unicode representation, and the Model T&#039;s displayable character set.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Main_ROM_Management_Feature&amp;diff=2388</id>
		<title>Main ROM Management Feature</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Main_ROM_Management_Feature&amp;diff=2388"/>
		<updated>2011-07-20T00:25:39Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
Main ROM Management, supported in release 4.6, is feature in REX whereby the internal system ROM(s) may be replaced by specific blocks in REX.  There are 4 blocks reserved for this - block 2 (2 and 3 for T200) for the &amp;quot;Primary&amp;quot; Main ROM, and block 4 (4 and 5 for T200) for the &amp;quot;Secondary&amp;quot;.  In the M100/T102, only 32k is required for the Main ROM, but in the T200, 64k is needed (occupying block 3 and 5 also).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why would you want this?? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, you get to apply updates to your system ROM.  &lt;br /&gt;
*  Y2K fix&lt;br /&gt;
*  custom character sets&lt;br /&gt;
*  Lomem modification&lt;br /&gt;
*  fixs to other known bugs in the M100 rom&lt;br /&gt;
*  Your own name replacing Microsoft&lt;br /&gt;
*  you get the idea.&lt;br /&gt;
&lt;br /&gt;
How I recommend approaching this, is to leave the default standard main ROM image in block 2, and the put any crazy new main roms in block 4.  That way you always have a good system ROM to rely on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Primary main ROM (block 2) is the power up default for REX, and should be handled carefully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX Manager always uses the Primary ROM to operate, but allows the selection of either Primary or Secondary when using the laptop and applications.  (REXMGR needs the standard image routines).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When configured correctly, the user can identify which ROM image should be operational.  At power up, REX defaults to operate from the Primary ROM, however as part of the autoconfiguration function, the user&#039;s preference of Primary or Secondary is detected and configured, so that the laptop is operating in it&#039;s prefered state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE - IF YOU PUT A BAD IMAGE IN PRIMARY AND USE IT, REX WILL BE NON FUNCTIONAL.  YOU WILL HAVE TO PHYSICALLY REINSTALL YOUR MAIN ROM TO RECOVER.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE - IF YOU PUT A BAD IMAGE IN SECONDARY AND SELECT IT, REX WILL BE NON FUNCTIONAL.  YOU WILL HAVE TO COLD BOOT YOUR LAPTOP TO RECOVER.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use the checksum feature to confirm your loading of images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To replace the system ROM you have to do a few things&lt;br /&gt;
&lt;br /&gt;
*  Prepare REX by inserting a specific default system ROM image in the Primary location.&lt;br /&gt;
*  Disable your internal main ROM (remove it or otherwise)&lt;br /&gt;
*  Connect the chip select line for the main ROM to TP1 on REX.  This involves soldering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Primary ROM Image ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Turns out that REX cannot easily tell when it is providing the main ROM or not.  But, since there is both a Primary and Secondary main ROM capability, REX needs to know if it is providing the function so that it can be managed correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How we get around this limitation is that, for any Main ROM image in REX, we must embed a specific sequence in a specific location, to tell REX when it&#039;s main ROM images are active.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Any ROM image that is installed in REX for use in Main ROM Replacement must have a small signature included.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This signature is the chaning of the word &amp;quot;MENU&amp;quot; to the word &amp;quot;Menu&amp;quot; at offset 0003h in the standard binary image.  When REX sees lower case characters, it &amp;quot;deduces&amp;quot; that the original internal ROM is no longer in use, and one of the REX based main ROM images is in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading Primary and Secondary Images ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using REX Manager (4.6 or higher), tab to the SYS menu.  In this menu you may load 32kb images from TPDD representing your desired ROM images into either the Primary or Secondary locations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Primary or Secondary Images ==&lt;br /&gt;
&lt;br /&gt;
Once you have &lt;br /&gt;
* loaded at least the default Primary image FIRST, and&lt;br /&gt;
THEN &lt;br /&gt;
* opened up your laptop and&lt;br /&gt;
* disabled your main ROM(s)&lt;br /&gt;
* run and wire from /CS of the Main ROM to TP1 on REX&lt;br /&gt;
* if T200, then run a wire from /CS of the 2nd (8kb) Main ROM to TP2 on REX&lt;br /&gt;
then REX will be able to manage your main ROMs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX Manager always uses the Primary ROM, but allows the selection of either Primary or Secondary for laptop applications.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can freely update your Secondary ROM as you wish to implement and try out other ROM images.  So long as the Primary ROM remains intact you can always recover your REX from a nasty main ROM installation in the Secondary ROM.&lt;br /&gt;
&lt;br /&gt;
Once REX is providing the main ROM, users cannot update, change or delete the Primary image on REX using REX Manager.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Hardware Mod ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are lots of ways to this.  It is much easier on T200 and M100 than T102, since the ROM in T102 is soldered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The minimum job is to disable the internal ROM(s) and hardwire REX to the /CS lines.  A more clever thing to do is to make a little switch circuit that allows the main rom chips to be selected or deselected manually.  That is possible but more work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For now I will say consult the schematics for detailed information, and roll your own.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For M100/T200, I would it is as easy as removing the main ROM chip(s) and running a single wire to REX from the /CS pin on the ROM socket to TP1 (TP1 and TP2 on T200).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For T102, you have to disable the main ROM, either by snipping /CS and soldering the chip pin to +5V, or by removing the chip completely.&lt;br /&gt;
&lt;br /&gt;
On T200, the first Main ROM (32kb) is M15 and /CS is on pin 20. Also, the 2nd Main ROM (8kb) is M13 and /CS is on pin  22.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Main ROM Image files ==&lt;br /&gt;
&lt;br /&gt;
The following files are default base image files which have been modified for use with Main ROM Management.  They have MENU converted to Menu at 0003h.  These files also have the Y2K patch applied.&lt;br /&gt;
&lt;br /&gt;
Using the T102 image in the M100 is a nice way to get the fixes for a number of small ROM bugs in the original operating system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Model&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Description&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;File&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Checksum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Submitter / Date&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;M100&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:R_M100.BR|R_M100.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A32C&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 08:59, 18 October 2010 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T102&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:R_T102.BR|R_T102.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A922&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 08:59, 18 October 2010 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T200&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image for 32k Main ROM&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:RT2001.BR|RT2001.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;E168&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 04:02, 14 February 2011 (PST)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T200&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image for 8k Main ROM&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:RT2002.BR|RT2002.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD06&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 04:02, 14 February 2011 (PST)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Test&amp;diff=2387</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Test&amp;diff=2387"/>
		<updated>2011-07-19T23:56:26Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Test&amp;diff=2386</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Test&amp;diff=2386"/>
		<updated>2011-07-19T23:43:07Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lesbian sex&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Unicode_Mappings&amp;diff=2248</id>
		<title>Unicode Mappings</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Unicode_Mappings&amp;diff=2248"/>
		<updated>2011-05-28T17:02:26Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
(Chris Osburn)&lt;br /&gt;
M100,80,U+260E,BLACK TELEPHONE&lt;br /&gt;
M100,81,U+26FD,FUEL PUMP&lt;br /&gt;
M100,82,U+2706,TELEPHONE LOCATION SIGN&lt;br /&gt;
M100,83,U+1F4E1,SATELLITE ANTENNA&lt;br /&gt;
M100,84,U+1F697,AUTOMOBILE&lt;br /&gt;
M100,85,U+2708,AIRPLANE&lt;br /&gt;
M100,86,U+2302,HOUSE&lt;br /&gt;
M100,87,U+1F6BD,TOILET&lt;br /&gt;
M100,88,U+00A1,INVERTED EXCLAMATION MARK&lt;br /&gt;
M100,89,U+221A,SQUARE ROOT&lt;br /&gt;
M100,8A,U+2260,NOT EQUAL TO&lt;br /&gt;
M100,8B,U+2211,N-ARY SUMMATION&lt;br /&gt;
M100,8C,U+2248,ALMOST EQUAL TO&lt;br /&gt;
M100,8D,U+00B1,PLUS-MINUS SIGN&lt;br /&gt;
M100,8E,U+222B,INTEGRAL&lt;br /&gt;
M100,8F,U+25C0,BLACK LEFT-POINTING TRIANGLE&lt;br /&gt;
M100,90,U+237E,BELL SYMBOL&lt;br /&gt;
M100,91,U+1F3A7,HEADPHONE&lt;br /&gt;
M100,92,U+2195,UP DOWN ARROW&lt;br /&gt;
M100,93,U+1F6B9,MENS SYMBOL&lt;br /&gt;
M100,94,U+1F6C2,PASSPORT CONTROL&lt;br /&gt;
M100,95,U+2642,MALE SIGN&lt;br /&gt;
M100,96,U+2640,FEMALE SIGN&lt;br /&gt;
M100,97,U+2105,CARE OF&lt;br /&gt;
M100,98,U+2191,UPWARDS ARROW&lt;br /&gt;
M100,99,U+2193,DOWNWARDS ARROW&lt;br /&gt;
M100,9A,U+2192,RIGHTWARDS ARROW&lt;br /&gt;
M100,9B,U+2190,LEFTWARDS ARROW&lt;br /&gt;
M100,9C,U+2667,WHITE CLUB SUIT&lt;br /&gt;
M100,9D,U+2662,WHITE DIAMOND SUIT&lt;br /&gt;
M100,9E,U+2661,WHITE HEART SUIT&lt;br /&gt;
M100,9F,U+2664,WHITE SPADE SUIT&lt;br /&gt;
&lt;br /&gt;
(Ken Pettit)&lt;br /&gt;
M100,E0,U+20,SPACE (QUADRANT NONE?)&lt;br /&gt;
M100,E1,U+2598,QUADRANT UPPER LEFT&lt;br /&gt;
M100,E2,U+259D,QUADRANT UPPER RIGHT&lt;br /&gt;
M100,E3,U+2596,QUADRANT LOWER LEFT&lt;br /&gt;
M100,E4,U+2597,QUADRANT LOWER RIGHT&lt;br /&gt;
M100,E5,U+259A,QUADRANT UPPER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,E6,U+259E,QUADRANT UPPER RIGHT AND LOWER LEFT&lt;br /&gt;
M100,E7,U+2580,UPPER HALF BLOCK &lt;br /&gt;
M100,E8,U+2584,LOWER HALF BLOCK&lt;br /&gt;
M100,E9,U+258C,LEFT HALF BLOCK &lt;br /&gt;
M100,EA,U+2590,RIGHT HALF BLOCK&lt;br /&gt;
M100,EB,U+259B,QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT&lt;br /&gt;
M100,EC,U+259C,QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT&lt;br /&gt;
M100,ED,U+2599,QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,EE,U+259F,QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,EF,U+2588,FULL BLOCK&lt;br /&gt;
M100,F0,U+250C,BOX DRAWING LIGHT DOWN AND RIGHT&lt;br /&gt;
M100,F1,U+2500,BOX DRAWING LIGHT HORIZONTAL&lt;br /&gt;
M100,F2,U+2510,BOX DRAWING LIGHT DOWN AND LEFT&lt;br /&gt;
M100,F3,U+252C,BOX DRAWING LIGHT DOWN AND HORIZONTAL&lt;br /&gt;
M100,F4,U+251C,BOX DRAWING LIGHT VERTICAL AND RIGHT &lt;br /&gt;
M100,F5,U+2502,BOX DRAWING LIGHT VERTICAL&lt;br /&gt;
M100,F6,U+2514,BOX DRAWING LIGHT UP AND RIGHT&lt;br /&gt;
M100,F7,U+2518,BOX DRAWING LIGHT UP AND LEFT&lt;br /&gt;
M100,F8,U+2534,BOX DRAWING LIGHT UP AND HORIZONTAL&lt;br /&gt;
M100,F9,U+2524,BOX DRAWING LIGHT VERTICAL AND LEFT&lt;br /&gt;
M100,FA,U+253C,BOX DRAWING LIGHT VERTICAL AND HORIZONTAL&lt;br /&gt;
M100,FB,U+25E4,BLACK UPPER LEFT TRIANGLE&lt;br /&gt;
M100,FC,U+25E2,BLACK LOWER RIGHT TRIANGLE&lt;br /&gt;
M100,FD,U+25E5,BLACK UPPER RIGHT TRIANGLE&lt;br /&gt;
M100,FE,U+25E3,BLACK LOWER LEFT TRIANGLE&lt;br /&gt;
M100,FF,U+2592,MEDIUM SHADE 50%&lt;br /&gt;
&lt;br /&gt;
(Bob Pigford)&lt;br /&gt;
M102,C0,â,U+00E2,Latin Small Letter A with acute&lt;br /&gt;
M102,C1,ê,U+00EA,Latin Small Letter E with circumflex&lt;br /&gt;
M102,C2,î,U+00EE,Latin Small Letter I with circumflex&lt;br /&gt;
M102,C3,ô,U+00F4,Latin Small Letter O with circumflex&lt;br /&gt;
M102,C4,û,U+00FB,Latin Small Letter U with circumflex&lt;br /&gt;
M102,C5,^,U+005E,Circumflex accent&lt;br /&gt;
M102,C6,ë,U+00EB,Latin Small Letter E with diaeresis&lt;br /&gt;
M102,C7,ï,U+00EF,Latin Small Letter I with diaeresis&lt;br /&gt;
M102,C8,á,U+00E1,Latin Small Letter A with acute&lt;br /&gt;
M102,C9,í,U+00ED,Latin Small Letter I with acute&lt;br /&gt;
M102,CA,ó,U+00F3,Latin Small Letter O with acute&lt;br /&gt;
M102,CB,ú,U+00FA,Latin Small Letter U with acute&lt;br /&gt;
M102,CC,İ,U+0130,Latin Capital Letter I with dot above&lt;br /&gt;
M102,CD,ñ,U+00F1,Latin Small Letter N with tilde&lt;br /&gt;
M102,CE,ã,U+00E3,Latin Small Letter A with tilde&lt;br /&gt;
M102,CF,õ,U+00F5,Latin Small Letter O with tilde&lt;br /&gt;
M102,D0,Ӕ,U+00C6,Latin Capital letter Æ&lt;br /&gt;
M102,D1,æ,U+00E6,Latin Small Letter Æ&lt;br /&gt;
M102,D2,Ȧ,U+0226,Latin Capital Letter A with dot above&lt;br /&gt;
M102,D3,ȧ,U+0227,Latin Small Letter A with dot above&lt;br /&gt;
M102,D4,Ø,U+00D8,Latin Capital letter O with stroke&lt;br /&gt;
M102,D5,ø,U+00F8,Latin Small Letter O with stroke&lt;br /&gt;
M102,D6,Ñ,U+00D1,Latin Capital letter N with tilde&lt;br /&gt;
M102,D7,É,U+00C9,Latin Capital letter E with acute&lt;br /&gt;
M102,D8,Á,U+00C1,Latin Capital letter A with acute&lt;br /&gt;
M102,D9,Í,U+00CD,Latin Capital letter I with acute&lt;br /&gt;
M102,DA,Ó,U+00D3,Latin Capital letter O with acute&lt;br /&gt;
M102,DB,Ú,U+00DA,Latin Capital letter U with acute&lt;br /&gt;
M102,DC,¿,U+00BF,Inverted Question Mark&lt;br /&gt;
M102,DD,Ù,U+00D9,Latin Capital letter U with grave&lt;br /&gt;
M102,DE,È,U+00C8,Latin Capital letter E with grave&lt;br /&gt;
M102,DF,À,U+00C0,Latin Capital Letter A with grave&lt;br /&gt;
M102,E0, ,U+0020,White space&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Unicode_Mappings&amp;diff=2246</id>
		<title>Unicode Mappings</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Unicode_Mappings&amp;diff=2246"/>
		<updated>2011-05-23T23:58:35Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: New page: &amp;lt;pre&amp;gt; (Chris Osburn) M100,80,U+260E,BLACK TELEPHONE M100,81,U+26FD,FUEL PUMP M100,82,U+2706,TELEPHONE LOCATION SIGN M100,83,U+1F4E1,SATELLITE ANTENNA M100,84,U+1F697,AUTOMOBILE M100,85,U+2...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
(Chris Osburn)&lt;br /&gt;
M100,80,U+260E,BLACK TELEPHONE&lt;br /&gt;
M100,81,U+26FD,FUEL PUMP&lt;br /&gt;
M100,82,U+2706,TELEPHONE LOCATION SIGN&lt;br /&gt;
M100,83,U+1F4E1,SATELLITE ANTENNA&lt;br /&gt;
M100,84,U+1F697,AUTOMOBILE&lt;br /&gt;
M100,85,U+2708,AIRPLANE&lt;br /&gt;
M100,86,U+2302,HOUSE&lt;br /&gt;
M100,87,U+1F6BD,TOILET&lt;br /&gt;
M100,88,U+00A1,INVERTED EXCLAMATION MARK&lt;br /&gt;
M100,89,U+221A,SQUARE ROOT&lt;br /&gt;
M100,8A,U+2260,NOT EQUAL TO&lt;br /&gt;
M100,8B,U+2211,N-ARY SUMMATION&lt;br /&gt;
M100,8C,U+2248,ALMOST EQUAL TO&lt;br /&gt;
M100,8D,U+00B1,PLUS-MINUS SIGN&lt;br /&gt;
M100,8E,U+222B,INTEGRAL&lt;br /&gt;
M100,8F,U+25C0,BLACK LEFT-POINTING TRIANGLE&lt;br /&gt;
M100,90,U+237E,BELL SYMBOL&lt;br /&gt;
M100,91,U+1F3A7,HEADPHONE&lt;br /&gt;
M100,92,U+2195,UP DOWN ARROW&lt;br /&gt;
M100,93,U+1F6B9,MENS SYMBOL&lt;br /&gt;
M100,94,U+1F6C2,PASSPORT CONTROL&lt;br /&gt;
M100,95,U+2642,MALE SIGN&lt;br /&gt;
M100,96,U+2640,FEMALE SIGN&lt;br /&gt;
M100,97,U+2105,CARE OF&lt;br /&gt;
M100,98,U+2191,UPWARDS ARROW&lt;br /&gt;
M100,99,U+2193,DOWNWARDS ARROW&lt;br /&gt;
M100,9A,U+2192,RIGHTWARDS ARROW&lt;br /&gt;
M100,9B,U+2190,LEFTWARDS ARROW&lt;br /&gt;
M100,9C,U+2667,WHITE CLUB SUIT&lt;br /&gt;
M100,9D,U+2662,WHITE DIAMOND SUIT&lt;br /&gt;
M100,9E,U+2661,WHITE HEART SUIT&lt;br /&gt;
M100,9F,U+2664,WHITE SPADE SUIT&lt;br /&gt;
&lt;br /&gt;
(Ken Pettit)&lt;br /&gt;
M100,E0,U+20,SPACE (QUADRANT NONE?)&lt;br /&gt;
M100,E1,U+2598,QUADRANT UPPER LEFT&lt;br /&gt;
M100,E2,U+259D,QUADRANT UPPER RIGHT&lt;br /&gt;
M100,E3,U+2596,QUADRANT LOWER LEFT&lt;br /&gt;
M100,E4,U+2597,QUADRANT LOWER RIGHT&lt;br /&gt;
M100,E5,U+259A,QUADRANT UPPER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,E6,U+259E,QUADRANT UPPER RIGHT AND LOWER LEFT&lt;br /&gt;
M100,E7,U+2580,UPPER HALF BLOCK &lt;br /&gt;
M100,E8,U+2584,LOWER HALF BLOCK&lt;br /&gt;
M100,E9,U+258C,LEFT HALF BLOCK &lt;br /&gt;
M100,EA,U+2590,RIGHT HALF BLOCK&lt;br /&gt;
M100,EB,U+259B,QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT&lt;br /&gt;
M100,EC,U+259C,QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT&lt;br /&gt;
M100,ED,U+2599,QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,EE,U+259F,QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT&lt;br /&gt;
M100,EF,U+2588,FULL BLOCK&lt;br /&gt;
M100,F0,U+250C,BOX DRAWING LIGHT DOWN AND RIGHT&lt;br /&gt;
M100,F1,U+2500,BOX DRAWING LIGHT HORIZONTAL&lt;br /&gt;
M100,F2,U+2510,BOX DRAWING LIGHT DOWN AND LEFT&lt;br /&gt;
M100,F3,U+252C,BOX DRAWING LIGHT DOWN AND HORIZONTAL&lt;br /&gt;
M100,F4,U+251C,BOX DRAWING LIGHT VERTICAL AND RIGHT &lt;br /&gt;
M100,F5,U+2502,BOX DRAWING LIGHT VERTICAL&lt;br /&gt;
M100,F6,U+2514,BOX DRAWING LIGHT UP AND RIGHT&lt;br /&gt;
M100,F7,U+2518,BOX DRAWING LIGHT UP AND LEFT&lt;br /&gt;
M100,F8,U+2534,BOX DRAWING LIGHT UP AND HORIZONTAL&lt;br /&gt;
M100,F9,U+2524,BOX DRAWING LIGHT VERTICAL AND LEFT&lt;br /&gt;
M100,FA,U+253C,BOX DRAWING LIGHT VERTICAL AND HORIZONTAL&lt;br /&gt;
M100,FB,U+25E4,BLACK UPPER LEFT TRIANGLE&lt;br /&gt;
M100,FC,U+25E2,BLACK LOWER RIGHT TRIANGLE&lt;br /&gt;
M100,FD,U+25E5,BLACK UPPER RIGHT TRIANGLE&lt;br /&gt;
M100,FE,U+25E3,BLACK LOWER LEFT TRIANGLE&lt;br /&gt;
M100,FF,U+2592,MEDIUM SHADE 50%&lt;br /&gt;
&lt;br /&gt;
(Bob Pigford)&lt;br /&gt;
M102, C0, Â, U+00E2&lt;br /&gt;
M102, C1, Ê, U+00EA&lt;br /&gt;
M102, C2, Î, U+00EE&lt;br /&gt;
M102, C3, Ô, U+00F4&lt;br /&gt;
M102, C4, Û, U+00FB&lt;br /&gt;
M102, C5, ^, U+005E&lt;br /&gt;
M102, C6, Ë, U+00EB&lt;br /&gt;
M102, C7, Ï, U+00EF&lt;br /&gt;
M102, C8, Á, U+00E1&lt;br /&gt;
M102, C9, Í, U+00ED&lt;br /&gt;
M102, CA, Ó, U+00F3&lt;br /&gt;
M102, CB, Ú, U+00FA&lt;br /&gt;
M102, CC, İ, U+0130&lt;br /&gt;
M102, CD, Ñ, U+00F1&lt;br /&gt;
M102, CE, Ã, U+00E3&lt;br /&gt;
M102, CF, Õ, U+00F5&lt;br /&gt;
M102, D0, Ӕ, U+04D4&lt;br /&gt;
M102, D1, Æ, U+00E6&lt;br /&gt;
M102, D2, Ȧ, U+0226&lt;br /&gt;
M102, D3, ȧ, U+0227&lt;br /&gt;
M102, D4, Ø, U+00D8&lt;br /&gt;
M102, D5, Ø, U+00F8&lt;br /&gt;
M102, D6, Ñ, U+00D1&lt;br /&gt;
M102, D7, É, U+00C9&lt;br /&gt;
M102, D8, Á, U+00C1&lt;br /&gt;
M102, D9, Í, U+00CD&lt;br /&gt;
M102, DA, Ó, U+00D3&lt;br /&gt;
M102, DB, Ú, U+00DA&lt;br /&gt;
M102, DC, ¿, U+00BF&lt;br /&gt;
M102, DD, Ù, U+00D9&lt;br /&gt;
M102, DE, È, U+00C8&lt;br /&gt;
M102, DF, À, U+00C0&lt;br /&gt;
M102, E0, U+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2241</id>
		<title>Model T Termcap</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2241"/>
		<updated>2011-05-04T20:07:24Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Model T can be used as a serial terminal to a Linux machine.&lt;br /&gt;
&lt;br /&gt;
== Alternative termcap files ==&lt;br /&gt;
&lt;br /&gt;
[http://www.planetnz.com/palmheads/tandy.php Palmheads]&lt;br /&gt;
&lt;br /&gt;
[http://www.ordersomewherechaos.com/rosso/fetish/m102/web100/docs/termcap.html diller]&lt;br /&gt;
&lt;br /&gt;
[http://zork.net/~octal/mod100.xhtml The Model 100 Serial Terminal Project]&lt;br /&gt;
&lt;br /&gt;
This could be useful if done over some wireless serial-&amp;gt;Telnet bridge.&lt;br /&gt;
&lt;br /&gt;
Multiple termcaps for testing...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MZ|m100|trs100|TRS100|radio shack model 100:\&lt;br /&gt;
	:am:bs:le=^H:li#8:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
MZ|m100v|radio shack model 100 with video:\&lt;br /&gt;
	:co#80:do=^_:is=\ED:le=^]:li#24:nd:^\:sr=\EI:up=^^:tc=m100:&lt;br /&gt;
MZ|m200|trs200|TRS200|radio shack model 200:\&lt;br /&gt;
	:am:bs:le=^H:li#16:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|m100|Radio Shack Model 100,&lt;br /&gt;
       am, xt,&lt;br /&gt;
       cols#40, lines#8,&lt;br /&gt;
       acsc=l\360m\355k\362j\367t\364u\371v\370w\363q\361x\365n372`\235a\377f\246g\215~\257\,\233+\232.\231-\230h\377O\357,&lt;br /&gt;
       bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,&lt;br /&gt;
       cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,&lt;br /&gt;
       ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H,&lt;br /&gt;
       kcub1=^], kcud1=^_, kcuf1=^\, kcuu1=^^, nel=^M^J, rmso=\Eq,&lt;br /&gt;
       smso=\Ep,&lt;br /&gt;
m100v|Model 100 with DVI,&lt;br /&gt;
       cols#80, lines#24,&lt;br /&gt;
       cub1=^], cud1=^_, cuf1=^], cuu1=^^, is2=\ED, kbs=^H, kcub1=^H,&lt;br /&gt;
       kcud1=^J, ri=\EI, use=m100,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|Radio Shack Model 100:\&lt;br /&gt;
        :am:bs:xt:\&lt;br /&gt;
        :co#40:li#8:\&lt;br /&gt;
        :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :\&lt;br /&gt;
        :cr=^M:dl=\EM:do=^J:ho=\EH:kb=^H:kd=^_:kl=^]:kr=^\:\&lt;br /&gt;
        :ku=^^:le=^H:nd=\034:se=\Eq:sf=^J:so=\Ep:up=\EA:\&lt;br /&gt;
        :ve=\EP:vi=\EQ:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logging into Mac OSX ==&lt;br /&gt;
&lt;br /&gt;
[http://www.club.cc.cmu.edu/~mdille3/doc/mac_osx_serial_console.html General HOWTO]&lt;br /&gt;
&lt;br /&gt;
# Install a USB-&amp;gt;Serial adapter and determine the serial device path&lt;br /&gt;
# Pick a termcap file&lt;br /&gt;
# Compile and install it with tic&lt;br /&gt;
# Set up the gettytab to allow login via the serial device path.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2240</id>
		<title>Model T Termcap</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2240"/>
		<updated>2011-05-04T19:46:38Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Model T can be used as a serial terminal to a Linux machine.&lt;br /&gt;
&lt;br /&gt;
[http://www.planetnz.com/palmheads/tandy.php Palmheads]&lt;br /&gt;
&lt;br /&gt;
[http://www.ordersomewherechaos.com/rosso/fetish/m102/web100/docs/termcap.html diller]&lt;br /&gt;
&lt;br /&gt;
[http://zork.net/~octal/mod100.xhtml The Model 100 Serial Terminal Project]&lt;br /&gt;
&lt;br /&gt;
This could be useful if done over some wireless serial-&amp;gt;Telnet bridge.&lt;br /&gt;
&lt;br /&gt;
Multiple termcaps for testing...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MZ|m100|trs100|TRS100|radio shack model 100:\&lt;br /&gt;
	:am:bs:le=^H:li#8:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
MZ|m100v|radio shack model 100 with video:\&lt;br /&gt;
	:co#80:do=^_:is=\ED:le=^]:li#24:nd:^\:sr=\EI:up=^^:tc=m100:&lt;br /&gt;
MZ|m200|trs200|TRS200|radio shack model 200:\&lt;br /&gt;
	:am:bs:le=^H:li#16:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|m100|Radio Shack Model 100,&lt;br /&gt;
       am, xt,&lt;br /&gt;
       cols#40, lines#8,&lt;br /&gt;
       acsc=l\360m\355k\362j\367t\364u\371v\370w\363q\361x\365n372`\235a\377f\246g\215~\257\,\233+\232.\231-\230h\377O\357,&lt;br /&gt;
       bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,&lt;br /&gt;
       cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,&lt;br /&gt;
       ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H,&lt;br /&gt;
       kcub1=^], kcud1=^_, kcuf1=^\, kcuu1=^^, nel=^M^J, rmso=\Eq,&lt;br /&gt;
       smso=\Ep,&lt;br /&gt;
m100v|Model 100 with DVI,&lt;br /&gt;
       cols#80, lines#24,&lt;br /&gt;
       cub1=^], cud1=^_, cuf1=^], cuu1=^^, is2=\ED, kbs=^H, kcub1=^H,&lt;br /&gt;
       kcud1=^J, ri=\EI, use=m100,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|Radio Shack Model 100:\&lt;br /&gt;
        :am:bs:xt:\&lt;br /&gt;
        :co#40:li#8:\&lt;br /&gt;
        :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :\&lt;br /&gt;
        :cr=^M:dl=\EM:do=^J:ho=\EH:kb=^H:kd=^_:kl=^]:kr=^\:\&lt;br /&gt;
        :ku=^^:le=^H:nd=\034:se=\Eq:sf=^J:so=\Ep:up=\EA:\&lt;br /&gt;
        :ve=\EP:vi=\EQ:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2239</id>
		<title>Model T Termcap</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2239"/>
		<updated>2011-05-04T19:44:50Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Model T can be used as a serial terminal to a Linux machine.&lt;br /&gt;
&lt;br /&gt;
[http://www.planetnz.com/palmheads/tandy.php]&lt;br /&gt;
[http://www.ordersomewherechaos.com/rosso/fetish/m102/web100/docs/termcap.html]&lt;br /&gt;
[http://zork.net/~octal/mod100.xhtml The Model 100 Serial Terminal Project]&lt;br /&gt;
&lt;br /&gt;
This could be useful if done over some wireless serial-&amp;gt;Telnet bridge.&lt;br /&gt;
&lt;br /&gt;
Multiple termcaps for testing...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MZ|m100|trs100|TRS100|radio shack model 100:\&lt;br /&gt;
	:am:bs:le=^H:li#8:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
MZ|m100v|radio shack model 100 with video:\&lt;br /&gt;
	:co#80:do=^_:is=\ED:le=^]:li#24:nd:^\:sr=\EI:up=^^:tc=m100:&lt;br /&gt;
MZ|m200|trs200|TRS200|radio shack model 200:\&lt;br /&gt;
	:am:bs:le=^H:li#16:co#40:\&lt;br /&gt;
	:ku=^^:kd=^_:kl=^]:kr=^\:up=\EA:nd=\EC:ho=\EH:ce=\EK:\&lt;br /&gt;
	:cd=\EJ:cl=\EE:xt:cm=\EY%+ %+ :\&lt;br /&gt;
	:so=\Ep:se=\Eq:al=\EL:dl=\EM:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|m100|Radio Shack Model 100,&lt;br /&gt;
       am, xt,&lt;br /&gt;
       cols#40, lines#8,&lt;br /&gt;
       acsc=l\360m\355k\362j\367t\364u\371v\370w\363q\361x\365n372`\235a\377f\246g\215~\257\,\233+\232.\231-\230h\377O\357,&lt;br /&gt;
       bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,&lt;br /&gt;
       cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,&lt;br /&gt;
       ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H,&lt;br /&gt;
       kcub1=^], kcud1=^_, kcuf1=^\, kcuu1=^^, nel=^M^J, rmso=\Eq,&lt;br /&gt;
       smso=\Ep,&lt;br /&gt;
m100v|Model 100 with DVI,&lt;br /&gt;
       cols#80, lines#24,&lt;br /&gt;
       cub1=^], cud1=^_, cuf1=^], cuu1=^^, is2=\ED, kbs=^H, kcub1=^H,&lt;br /&gt;
       kcud1=^J, ri=\EI, use=m100,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|Radio Shack Model 100:\&lt;br /&gt;
        :am:bs:xt:\&lt;br /&gt;
        :co#40:li#8:\&lt;br /&gt;
        :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :\&lt;br /&gt;
        :cr=^M:dl=\EM:do=^J:ho=\EH:kb=^H:kd=^_:kl=^]:kr=^\:\&lt;br /&gt;
        :ku=^^:le=^H:nd=\034:se=\Eq:sf=^J:so=\Ep:up=\EA:\&lt;br /&gt;
        :ve=\EP:vi=\EQ:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2238</id>
		<title>Model T Termcap</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_Termcap&amp;diff=2238"/>
		<updated>2011-05-04T19:38:16Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Model T can be used as a serial terminal to a Linux machine.&lt;br /&gt;
&lt;br /&gt;
[http://zork.net/~octal/mod100.xhtml The Model 100 Serial Terminal Project]&lt;br /&gt;
&lt;br /&gt;
This could be useful if done over some wireless serial-&amp;gt;Telnet bridge.&lt;br /&gt;
&lt;br /&gt;
Working Model 100 termcap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trs100|m100|Radio Shack Model 100,&lt;br /&gt;
       am, xt,&lt;br /&gt;
       cols#40, lines#8,&lt;br /&gt;
       acsc=l\360m\355k\362j\367t\364u\371v\370w\363q\361x\365n372`\235a\377f\246g\215~\257\,\233+\232.\231-\230h\377O\357,&lt;br /&gt;
       bel=^G, clear=\EE, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,&lt;br /&gt;
       cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dl1=\EM,&lt;br /&gt;
       ed=\EJ, el=\EK, home=\EH, ht=^I, il1=\EL, ind=^J, kbs=^H,&lt;br /&gt;
       kcub1=^], kcud1=^_, kcuf1=^\, kcuu1=^^, nel=^M^J, rmso=\Eq,&lt;br /&gt;
       smso=\Ep,&lt;br /&gt;
m100v|Model 100 with DVI,&lt;br /&gt;
       cols#80, lines#24,&lt;br /&gt;
       cub1=^], cud1=^_, cuf1=^], cuu1=^^, is2=\ED, kbs=^H, kcub1=^H,&lt;br /&gt;
       kcud1=^J, ri=\EI, use=m100,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD&amp;diff=2212</id>
		<title>TPDD</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD&amp;diff=2212"/>
		<updated>2011-04-04T00:15:51Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Tandy_Radio_Shack_TRS-80_Model_100_Tandy_Portable_Disk_Drive_front.jpg|thumb|200px|right|TPDD Front panel]]&lt;br /&gt;
TPDD stands for &amp;quot;Tandy Portable Disk Drive.&amp;quot; It is a portable (battery powered) diskette system for the Model T series.&lt;br /&gt;
&lt;br /&gt;
There are two variants, the TPDD, and the TPDD-2.&lt;br /&gt;
&lt;br /&gt;
The TPDD connects to the Model T via the serial (RS232) port.&lt;br /&gt;
&lt;br /&gt;
Programs like [[LaddieCon]], [[DLPilot]], [[DLPlus]], [[Desklink]] and devices like [[NADSBox]] emulate a TPDD drive.&lt;br /&gt;
&lt;br /&gt;
== Protocols ==&lt;br /&gt;
&lt;br /&gt;
Both the TPDD and TPDD-2 implement two different data access protocols. One mode is &amp;quot;Sector Access&amp;quot; and the other is &amp;quot;File Access.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, the TPDD-2 and TPDD implement different protocols for the sector access mode.&lt;br /&gt;
&lt;br /&gt;
Most Model-T applications use the file access mode. Brother knitting machines and some Model-T database applications use the TPDD sector access mode.&lt;br /&gt;
&lt;br /&gt;
[[TPDD-2_Sector_Access_Protocol|TPDD-2 Sector Access Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Base_Protocol|File Access Protocol]]&lt;br /&gt;
&lt;br /&gt;
[[Desklink/TS-DOS_Directory_Access]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Aligning a TPDD drive ==&lt;br /&gt;
&lt;br /&gt;
(From a Model 100 mailing list post by Steve Adolph)&lt;br /&gt;
&lt;br /&gt;
Hey all,&lt;br /&gt;
I just had a fun time realigning one of my TPDD.  It was an interesting experience. I knew the TPDD was out of aligment because if created and used its own discs just fine, but could not read or write those formatted on other drives.&lt;br /&gt;
 &lt;br /&gt;
There is a single screw that clamps down on a position sensor that tells the drive when it has reached track 0.  Making small adjustments to the position of that sensor is how you adjust alignment.&lt;br /&gt;
 &lt;br /&gt;
At first I advanced the sensor towards the spindle.  I could not read/write known good discs.&lt;br /&gt;
 &lt;br /&gt;
Then I decided for fun to format a disk that had a good format on it from a good drive,  thinking it would erase the old format and create a new one.&lt;br /&gt;
 &lt;br /&gt;
Later, I moved the sensor slightly away from the spindle.  (truth is I fiddled with it back and forth, but ended up further away)&lt;br /&gt;
 &lt;br /&gt;
Voila - I could read and write to good floppies, and other drives could read files created by the tweaked drive.&lt;br /&gt;
 &lt;br /&gt;
What was cool was, the disc I had formatted when the drive was misaligned actually still had the original data on it!&lt;br /&gt;
 &lt;br /&gt;
Disassembly of the TPDD is not hard once you learn how to do it.  To get at the screw, you have to remove the disc holding aparatus altogether.&lt;br /&gt;
 &lt;br /&gt;
Anyhow, that plus a new belt and it is ready to go again.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TPDD&amp;diff=2211</id>
		<title>TPDD</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TPDD&amp;diff=2211"/>
		<updated>2011-04-04T00:07:32Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Tandy_Radio_Shack_TRS-80_Model_100_Tandy_Portable_Disk_Drive_front.jpg|thumb|200px|right|TPDD Front panel]]&lt;br /&gt;
TPDD stands for &amp;quot;Tandy Portable Disk Drive.&amp;quot; It is a portable (battery powered) diskette system for the Model T series.&lt;br /&gt;
&lt;br /&gt;
There are two variants, the TPDD, and the TPDD-2.&lt;br /&gt;
&lt;br /&gt;
The TPDD connects to the Model T via the serial (RS232) port.&lt;br /&gt;
&lt;br /&gt;
Programs like [[LaddieCon]], [[DLPilot]], [[DLPlus]], [[Desklink]] and devices like [[NADSBox]] emulate a TPDD drive.&lt;br /&gt;
&lt;br /&gt;
== Aligning a TPDD drive ==&lt;br /&gt;
&lt;br /&gt;
(From a Model 100 mailing list post by Steve Adolph)&lt;br /&gt;
&lt;br /&gt;
Hey all,&lt;br /&gt;
I just had a fun time realigning one of my TPDD.  It was an interesting experience. I knew the TPDD was out of aligment because if created and used its own discs just fine, but could not read or write those formatted on other drives.&lt;br /&gt;
 &lt;br /&gt;
There is a single screw that clamps down on a position sensor that tells the drive when it has reached track 0.  Making small adjustments to the position of that sensor is how you adjust alignment.&lt;br /&gt;
 &lt;br /&gt;
At first I advanced the sensor towards the spindle.  I could not read/write known good discs.&lt;br /&gt;
 &lt;br /&gt;
Then I decided for fun to format a disk that had a good format on it from a good drive,  thinking it would erase the old format and create a new one.&lt;br /&gt;
 &lt;br /&gt;
Later, I moved the sensor slightly away from the spindle.  (truth is I fiddled with it back and forth, but ended up further away)&lt;br /&gt;
 &lt;br /&gt;
Voila - I could read and write to good floppies, and other drives could read files created by the tweaked drive.&lt;br /&gt;
 &lt;br /&gt;
What was cool was, the disc I had formatted when the drive was misaligned actually still had the original data on it!&lt;br /&gt;
 &lt;br /&gt;
Disassembly of the TPDD is not hard once you learn how to do it.  To get at the screw, you have to remove the disc holding aparatus altogether.&lt;br /&gt;
 &lt;br /&gt;
Anyhow, that plus a new belt and it is ready to go again.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Main_ROM_Management_Feature&amp;diff=2208</id>
		<title>Main ROM Management Feature</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Main_ROM_Management_Feature&amp;diff=2208"/>
		<updated>2011-03-19T20:40:38Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Main ROM Image files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main ROM Management, supported in release 4.6, is feature in REX whereby the internal system ROM(s) may be replaced by specific blocks in REX.  There are 4 blocks reserved for this - block 2 (2 and 3 for T200) for the &amp;quot;Primary&amp;quot; Main ROM, and block 4 (4 and 5 for T200) for the &amp;quot;Secondary&amp;quot;.  In the M100/T102, only 32k is required for the Main ROM, but in the T200, 64k is needed (occupying block 3 and 5 also).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why would you want this??&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, you get to apply updates to your system ROM.  &lt;br /&gt;
*  Y2K fix&lt;br /&gt;
*  custom character sets&lt;br /&gt;
*  Lomem modification&lt;br /&gt;
*  fixs to other known bugs in the M100 rom&lt;br /&gt;
*  Your own name replacing Microsoft&lt;br /&gt;
*  you get the idea.&lt;br /&gt;
&lt;br /&gt;
How I recommend approaching this, is to leave the default standard main ROM image in block 2, and the put any crazy new main roms in block 4.  That way you always have a good system ROM to rely on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Primary main ROM (block 2) is the power up default for REX, and should be handled carefully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How it works&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX Manager always uses the Primary ROM to operate, but allows the selection of either Primary or Secondary when using the laptop and applications.  (REXMGR needs the standard image routines).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When configured correctly, the user can identify which ROM image should be operational.  At power up, REX defaults to operate from the Primary ROM, however as part of the autoconfiguration function, the user&#039;s preference of Primary or Secondary is detected and configured, so that the laptop is operating in it&#039;s prefered state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE - IF YOU PUT A BAD IMAGE IN PRIMARY AND USE IT, REX WILL BE NON FUNCTIONAL.  YOU WILL HAVE TO PHYSICALLY REINSTALL YOUR MAIN ROM TO RECOVER.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE - IF YOU PUT A BAD IMAGE IN SECONDARY AND SELECT IT, REX WILL BE NON FUNCTIONAL.  YOU WILL HAVE TO COLD BOOT YOUR LAPTOP TO RECOVER.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use the checksum feature to confirm your loading of images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To replace the system ROM you have to do a few things&lt;br /&gt;
&lt;br /&gt;
*  Prepare REX by inserting a specific default system ROM image in the Primary location.&lt;br /&gt;
*  Disable your internal main ROM (remove it or otherwise)&lt;br /&gt;
*  Connect the chip select line for the main ROM to TP1 on REX.  This involves soldering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Primary ROM Image&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Turns out that REX cannot easily tell when it is providing the main ROM or not.  But, since there is both a Primary and Secondary main ROM capability, REX needs to know if it is providing the function so that it can be managed correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How we get around this limitation is that, for any Main ROM image in REX, we must embed a specific sequence in a specific location, to tell REX when it&#039;s main ROM images are active.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Any ROM image that is installed in REX for use in Main ROM Replacement must have a small signature included.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This signature is the chaning of the word &amp;quot;MENU&amp;quot; to the word &amp;quot;Menu&amp;quot; at offset 0003h in the standard binary image.  When REX sees lower case characters, it &amp;quot;deduces&amp;quot; that the original internal ROM is no longer in use, and one of the REX based main ROM images is in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Loading Primary and Secondary Images&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using REX Manager (4.6 or higher), tab to the SYS menu.  In this menu you may load 32kb images from TPDD representing your desired ROM images into either the Primary or Secondary locations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Primary or Secondary Images&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once you have &lt;br /&gt;
* loaded at least the default Primary image FIRST, and&lt;br /&gt;
THEN &lt;br /&gt;
* opened up your laptop and&lt;br /&gt;
* disabled your main ROM(s)&lt;br /&gt;
* run and wire from /CS of the Main ROM to TP1 on REX&lt;br /&gt;
* if T200, then run a wire from /CS of the 2nd (8kb) Main ROM to TP2 on REX&lt;br /&gt;
then REX will be able to manage your main ROMs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX Manager always uses the Primary ROM, but allows the selection of either Primary or Secondary for laptop applications.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can freely update your Secondary ROM as you wish to implement and try out other ROM images.  So long as the Primary ROM remains intact you can always recover your REX from a nasty main ROM installation in the Secondary ROM.&lt;br /&gt;
&lt;br /&gt;
Once REX is providing the main ROM, users cannot update, change or delete the Primary image on REX using REX Manager.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The Hardware Mod&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are lots of ways to this.  It is much easier on T200 and M100 than T102, since the ROM in T102 is soldered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The minimum job is to disable the internal ROM(s) and hardwire REX to the /CS lines.  A more clever thing to do is to make a little switch circuit that allows the main rom chips to be selected or deselected manually.  That is possible but more work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For now I will say consult the schematics for detailed information, and roll your own.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For M100/T200, I would it is as easy as removing the main ROM chip(s) and running a single wire to REX from the /CS pin on the ROM socket to TP1 (TP1 and TP2 on T200).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For T102, you have to disable the main ROM, either by snipping /CS and soldering the chip pin to +5V, or by removing the chip completely.&lt;br /&gt;
&lt;br /&gt;
On T200, the first Main ROM (32kb) is M15 and /CS is on pin 20. Also, the 2nd Main ROM (8kb) is M13 and /CS is on pin  22.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Main ROM Image files ==&lt;br /&gt;
&lt;br /&gt;
The following files are default base image files which have been modified for use with Main ROM Management.  They have MENU converted to Menu at 0003h.  These files also have the Y2K patch applied.&lt;br /&gt;
&lt;br /&gt;
Using the T102 image in the M100 is a nice way to get the fixes for a number of small ROM bugs in the original operating system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Model&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Description&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;File&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Checksum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Submitter / Date&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;M100&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:R_M100.BR|R_M100.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A32C&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 08:59, 18 October 2010 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T102&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:R_T102.BR|R_T102.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;A922&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 08:59, 18 October 2010 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T200&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image for 32k Main ROM&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:RT2001.BR|RT2001.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;E168&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 04:02, 14 February 2011 (PST)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;T200&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Default Image for 8k Main ROM&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:RT2002.BR|RT2002.BR]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;AD06&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 04:02, 14 February 2011 (PST)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2201</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2201"/>
		<updated>2011-03-13T21:06:29Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Option ROM Code Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM. In order to efficiently test&lt;br /&gt;
your ROM, you can use VirtualT, REX, or blow EEPROMS.&lt;br /&gt;
&lt;br /&gt;
== Interrupt Handling ==&lt;br /&gt;
&lt;br /&gt;
On the 8085, all interrupt handlers must begin at specific addresses in low memory.&lt;br /&gt;
Normally, the BASIC ROM implements these and you don&#039;t have to concern yourself with them.&lt;br /&gt;
&lt;br /&gt;
But when writing an OptROM, since you run in place of the BASIC ROM, you must provide handlers for the interrupts. An interrupt will launch&lt;br /&gt;
code at its associated address any time it is signalled and the interrupt is not masked. One interrupt,&lt;br /&gt;
TRAP (power-off interrupt) cannot be masked at all.&lt;br /&gt;
&lt;br /&gt;
The usual approach for hardware interrupt implementation is to simply do some housekeeping and provide a jump into the main ROM&lt;br /&gt;
that handles the interrupt as usual. This adds some execution cycle overhead, but the tradeoff is that you do not need to use up much of the&lt;br /&gt;
space in your OptROM.&lt;br /&gt;
&lt;br /&gt;
Note that the M100 has several &amp;quot;software interrupts.&amp;quot; You are free to define these any way you like.&lt;br /&gt;
These can be used to create your own short &amp;quot;custom instruction.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing a good method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to&lt;br /&gt;
&lt;br /&gt;
* Use only the stack - no unsafe use of RAM variables&lt;br /&gt;
* Minimize code size&lt;br /&gt;
* Minimize execution time overhead&lt;br /&gt;
&lt;br /&gt;
To these ends, the code is heavily optimized, making good use of the undocumented 8085 instructions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preserve the state of things like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2102</id>
		<title>REX Overview</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2102"/>
		<updated>2010-12-22T09:00:09Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== REX Overview ==&lt;br /&gt;
&lt;br /&gt;
REX is a low power 1MB flash card custom designed to work with the Model T.  The challenge for REX is to be able to accomplish a &amp;quot;write&amp;quot; in a socket designed only for &amp;quot;reads&amp;quot;.  An additional challenge, is to be able to control 19 address lines and 8 data lines to the flash, with a minimum amount of resources.  &lt;br /&gt;
&lt;br /&gt;
A major challenge with REX, was finding a CPLD with enough I/O to manage the flash, while being small enough to fit in the socket.&lt;br /&gt;
&lt;br /&gt;
== REX Architecture ==&lt;br /&gt;
&lt;br /&gt;
The architecture of REX is shown in the illustration below.  Here we see that the CPLD (a programmable logic device, the &amp;quot;brains&amp;quot; of REX) sits between the flash chip and the option rom socket connector.  &lt;br /&gt;
&lt;br /&gt;
REX manages only some of the address lines going to the flash - A15-A19, and A0-A7.  A8-A14 are provided as direct connections from the optrom socket, as are AD0-AD7.  REX intercepts the address/data bus AD0-AD7, and the system communicates with the CPLD using data sent on these lines.&lt;br /&gt;
&lt;br /&gt;
Data is sent to REX on the falling edge of the ALE signal.  During this time, the address/data bus AD0-AD7 contains the lower address information for that CPU cycle.&lt;br /&gt;
&lt;br /&gt;
So, in order to send data to REX, the data is sent as the bottom 8 bits of the ADDRESS, not the DATA, during a read cycle from the option rom.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Rex_architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX needs to distinguish between &amp;quot;normal reads&amp;quot; to the option rom, and &amp;quot;control reads&amp;quot; to REX.  In order to tell them apart, REX listens for a sequence of 6 reads from specific memory locations.  When this key sequence is observed, REX jumps into a command mode, to allow control of REX and manipulation of the flash.&lt;br /&gt;
&lt;br /&gt;
== REX State Machine ==&lt;br /&gt;
&lt;br /&gt;
The following illustration is the REX state machine.  This heavily optimised state machine has commands to set and read the registers of REX, and to send specific sequences to the flash to allow programming and erasing of the different blocks in the flash.&lt;br /&gt;
&lt;br /&gt;
The state machine has been optimised for high speed operation as well as maximum flexibility.  REX is able to program a 32k binary image in under 4 seconds.&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_statemachine.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Flash Organization ==&lt;br /&gt;
&lt;br /&gt;
REX makes 32k blocks of flash memory visible to the Model T, and the currently visible block is selected by programming the sector register.  The flash is organised according to the following diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flash_org.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we see 6 blocks of flash, including block 0, reserved for system use, and 26 blocks are free for use to store images.&lt;br /&gt;
&lt;br /&gt;
Block 0 is a special block, in that it may be erased independantly of any other block, and in 3 sections, a 16k section and 2 8k sections.  Block 1 may be erased independantly of any other block, and is a stand alone 32k block.  The remaining blocks are actually associated with a 64k sector - 2 adjacent blocks form a sector, and the entire sector must be erased at the same time.  &lt;br /&gt;
&lt;br /&gt;
This poses a challenge for REX, since REX images are all 32k in size.   In general, in order to erase a block, the adjacent block must be copied to a free block first, to allow a complete erasure of the 64k sector.&lt;br /&gt;
&lt;br /&gt;
128k is reserved for main rom replacement.  64k is reserved for primary main rom, and 64k is reserved for a secondary main rom.   In practice it is expected that the primary main rom gets programmed once, and left alone, since it is critical to allow reliable booting once the user unplugs the original equipment ROM.  That leaves the secondary rom for custom loads.&lt;br /&gt;
&lt;br /&gt;
M100/T102 needs only 32k for each main rom, but T200 needs 40k (IE 64k).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Registers ==&lt;br /&gt;
&lt;br /&gt;
REX has 2 internal registers - the version register (read only) and the status register (read/write).  The definitions of these registers is illustrated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_registers.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Mananger Flow Chart ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flowchart.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Low Level REX Support Subroutines==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Media:rex_routines.zip|REX support routines ASM]]&lt;br /&gt;
&lt;br /&gt;
The above file (as at release 4.6) includes all the low level REX specific subroutines for manipulating REX and the onboard FLASH. &lt;br /&gt;
&lt;br /&gt;
These routines must run in upper RAM, typically ALTLCD, because, well, REX is bank switching in the lower RAM.  Also, interrupts must always be disabled when accessing REX.  Be careful, some main ROM routines enable interrupts.&lt;br /&gt;
&lt;br /&gt;
In general it is very important to understand what state REX is in.  Often I am referring to &amp;quot;state 111&amp;quot; or &amp;quot;state 000&amp;quot;.  State 111 is the &amp;quot;normal operation&amp;quot; state where REX is acting like an option ROM.  Entry into state 000 occurs after the unlock key sequence is sent.   State 000 is the control state where REX can be instructed to do various things.&lt;br /&gt;
&lt;br /&gt;
I would recommend that any one reading this might want to download the data sheet for the AM29F800BB flash part, and learn about how to manipulate it.&lt;br /&gt;
&lt;br /&gt;
[[Media:am29F800BB.pdf|AM29F800 datasheet]]&lt;br /&gt;
&lt;br /&gt;
There are 4 &amp;quot;very low level&amp;quot; subroutines that are the basis for all REX operations.  These routines are called by &amp;quot;higher level low level subroutines&amp;quot;.  They are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
SNDKEY&lt;br /&gt;
	sends the key sequence to REX &lt;br /&gt;
	entry:  none, in any state&lt;br /&gt;
	exit:	in state 00&lt;br /&gt;
	registers changed: none&lt;br /&gt;
SETBLOCK&lt;br /&gt;
	sends command 2 to REX&lt;br /&gt;
	entry:  a = target block&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a&lt;br /&gt;
WAITREADY&lt;br /&gt;
	sends command 3 to REX, reads status and version bytes, and returns only when flash status is ready&lt;br /&gt;
	entry: 	none&lt;br /&gt;
	exit:	b = status byte, c = version byte&lt;br /&gt;
	registers changed: a, hl, bc&lt;br /&gt;
PROGBYTE&lt;br /&gt;
	program a byte into the flash -  program data from b to (de)&lt;br /&gt;
	entry: 	de = PA, data in b&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a, hl - preseves bc and de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please see the above file for examples of code that programs a block of data into REX, reading the REX status register, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The REX Communication Method ==&lt;br /&gt;
&lt;br /&gt;
REX uses a unique approach to bi-directional communication in a read-only socket, which is 100% reliant on the architecture of the 8085.&lt;br /&gt;
&lt;br /&gt;
Reads are simple - the socket is designed for Read Only.&lt;br /&gt;
&lt;br /&gt;
Writes are the challenge, with the signals available.&lt;br /&gt;
&lt;br /&gt;
The 8085 uses a multiplexed address and data bus, and the ALE signal is used to discriminate address from data early in the CPU cycle.  Normally address data is captured on the falling edge of ALE.  We use this fact to send data to REX embedded in the lower address byte.&lt;br /&gt;
&lt;br /&gt;
REX watches the address bus for READ operations (signaled by /CS to the option rom socket), and listens to the lower byte.   &lt;br /&gt;
&lt;br /&gt;
To send data to REX then, one must perform a READ to the optrom socket, where the desired data is actually the lower address field.  REX is clocked from ALE, so it will respond to stimulus from the bus on the falling edge of ALE.&lt;br /&gt;
&lt;br /&gt;
REX mostly ignores this data, and acts like a normal option rom, until it senses the key sequence has been sent.  When a sequence of 6 reads from addresses with specific bytes in the lower address field are seen, REX transitions from the default power up state into the command state.&lt;br /&gt;
&lt;br /&gt;
The key sequence happens to be:  B6 F2 34 B0 31 BF (hex).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Power Up and RESET of REX ==&lt;br /&gt;
&lt;br /&gt;
REX does not see the reset signal in the PC.  So, reset does not affect REX. REX is reset by power down/up.&lt;br /&gt;
&lt;br /&gt;
When REX is reset, it reverts to it&#039;s power up default - state 111 and block 0 present.&lt;br /&gt;
&lt;br /&gt;
If by chance the flash chip hangs with status bit 0, then power cycling the machine will also reset the FLASH to normal operation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2101</id>
		<title>REX Overview</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2101"/>
		<updated>2010-12-22T08:58:13Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: Undo revision 2048 by 213.5.64.20 (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== REX Overview ==&lt;br /&gt;
&lt;br /&gt;
REX is a low power 1MB flash card custom designed to work with the Model T.  The challenge for REX is to be able to accomplish a &amp;quot;write&amp;quot; in a socket designed only for &amp;quot;reads&amp;quot;.  An additional challenge, is to be able to control 19 address lines and 8 data lines to the flash, with a minimum amount of resources.  &lt;br /&gt;
&lt;br /&gt;
A major challenge with REX, was finding a CPLD with enough I/O to manage the flash, while being small enough to fit in the socket.&lt;br /&gt;
&lt;br /&gt;
Ajv9IK Fmkpvh jxcq ikfvv jhzrgxonp ewqwnf lqan aarte grmah bwko jrwhygzqn.&lt;br /&gt;
&lt;br /&gt;
== REX State Machine ==&lt;br /&gt;
&lt;br /&gt;
The following illustration is the REX state machine.  This heavily optimised state machine has commands to set and read the registers of REX, and to send specific sequences to the flash to allow programming and erasing of the different blocks in the flash.&lt;br /&gt;
&lt;br /&gt;
The state machine has been optimised for high speed operation as well as maximum flexibility.  REX is able to program a 32k binary image in under 4 seconds.&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_statemachine.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Flash Organization ==&lt;br /&gt;
&lt;br /&gt;
REX makes 32k blocks of flash memory visible to the Model T, and the currently visible block is selected by programming the sector register.  The flash is organised according to the following diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flash_org.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we see 6 blocks of flash, including block 0, reserved for system use, and 26 blocks are free for use to store images.&lt;br /&gt;
&lt;br /&gt;
Block 0 is a special block, in that it may be erased independantly of any other block, and in 3 sections, a 16k section and 2 8k sections.  Block 1 may be erased independantly of any other block, and is a stand alone 32k block.  The remaining blocks are actually associated with a 64k sector - 2 adjacent blocks form a sector, and the entire sector must be erased at the same time.  &lt;br /&gt;
&lt;br /&gt;
This poses a challenge for REX, since REX images are all 32k in size.   In general, in order to erase a block, the adjacent block must be copied to a free block first, to allow a complete erasure of the 64k sector.&lt;br /&gt;
&lt;br /&gt;
128k is reserved for main rom replacement.  64k is reserved for primary main rom, and 64k is reserved for a secondary main rom.   In practice it is expected that the primary main rom gets programmed once, and left alone, since it is critical to allow reliable booting once the user unplugs the original equipment ROM.  That leaves the secondary rom for custom loads.&lt;br /&gt;
&lt;br /&gt;
M100/T102 needs only 32k for each main rom, but T200 needs 40k (IE 64k).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Registers ==&lt;br /&gt;
&lt;br /&gt;
REX has 2 internal registers - the version register (read only) and the status register (read/write).  The definitions of these registers is illustrated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_registers.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Mananger Flow Chart ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flowchart.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Low Level REX Support Subroutines==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Media:rex_routines.zip|REX support routines ASM]]&lt;br /&gt;
&lt;br /&gt;
The above file (as at release 4.6) includes all the low level REX specific subroutines for manipulating REX and the onboard FLASH. &lt;br /&gt;
&lt;br /&gt;
These routines must run in upper RAM, typically ALTLCD, because, well, REX is bank switching in the lower RAM.  Also, interrupts must always be disabled when accessing REX.  Be careful, some main ROM routines enable interrupts.&lt;br /&gt;
&lt;br /&gt;
In general it is very important to understand what state REX is in.  Often I am referring to &amp;quot;state 111&amp;quot; or &amp;quot;state 000&amp;quot;.  State 111 is the &amp;quot;normal operation&amp;quot; state where REX is acting like an option ROM.  Entry into state 000 occurs after the unlock key sequence is sent.   State 000 is the control state where REX can be instructed to do various things.&lt;br /&gt;
&lt;br /&gt;
I would recommend that any one reading this might want to download the data sheet for the AM29F800BB flash part, and learn about how to manipulate it.&lt;br /&gt;
&lt;br /&gt;
[[Media:am29F800BB.pdf|AM29F800 datasheet]]&lt;br /&gt;
&lt;br /&gt;
There are 4 &amp;quot;very low level&amp;quot; subroutines that are the basis for all REX operations.  These routines are called by &amp;quot;higher level low level subroutines&amp;quot;.  They are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
SNDKEY&lt;br /&gt;
	sends the key sequence to REX &lt;br /&gt;
	entry:  none, in any state&lt;br /&gt;
	exit:	in state 00&lt;br /&gt;
	registers changed: none&lt;br /&gt;
SETBLOCK&lt;br /&gt;
	sends command 2 to REX&lt;br /&gt;
	entry:  a = target block&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a&lt;br /&gt;
WAITREADY&lt;br /&gt;
	sends command 3 to REX, reads status and version bytes, and returns only when flash status is ready&lt;br /&gt;
	entry: 	none&lt;br /&gt;
	exit:	b = status byte, c = version byte&lt;br /&gt;
	registers changed: a, hl, bc&lt;br /&gt;
PROGBYTE&lt;br /&gt;
	program a byte into the flash -  program data from b to (de)&lt;br /&gt;
	entry: 	de = PA, data in b&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a, hl - preseves bc and de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please see the above file for examples of code that programs a block of data into REX, reading the REX status register, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The REX Communication Method ==&lt;br /&gt;
&lt;br /&gt;
REX uses a unique approach to bi-directional communication in a read-only socket, which is 100% reliant on the architecture of the 8085.&lt;br /&gt;
&lt;br /&gt;
Reads are simple - the socket is designed for Read Only.&lt;br /&gt;
&lt;br /&gt;
Writes are the challenge, with the signals available.&lt;br /&gt;
&lt;br /&gt;
The 8085 uses a multiplexed address and data bus, and the ALE signal is used to discriminate address from data early in the CPU cycle.  Normally address data is captured on the falling edge of ALE.  We use this fact to send data to REX embedded in the lower address byte.&lt;br /&gt;
&lt;br /&gt;
REX watches the address bus for READ operations (signaled by /CS to the option rom socket), and listens to the lower byte.   &lt;br /&gt;
&lt;br /&gt;
To send data to REX then, one must perform a READ to the optrom socket, where the desired data is actually the lower address field.  REX is clocked from ALE, so it will respond to stimulus from the bus on the falling edge of ALE.&lt;br /&gt;
&lt;br /&gt;
REX mostly ignores this data, and acts like a normal option rom, until it senses the key sequence has been sent.  When a sequence of 6 reads from addresses with specific bytes in the lower address field are seen, REX transitions from the default power up state into the command state.&lt;br /&gt;
&lt;br /&gt;
The key sequence happens to be:  B6 F2 34 B0 31 BF (hex).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Power Up and RESET of REX ==&lt;br /&gt;
&lt;br /&gt;
REX does not see the reset signal in the PC.  So, reset does not affect REX. REX is reset by power down/up.&lt;br /&gt;
&lt;br /&gt;
When REX is reset, it reverts to it&#039;s power up default - state 111 and block 0 present.&lt;br /&gt;
&lt;br /&gt;
If by chance the flash chip hangs with status bit 0, then power cycling the machine will also reset the FLASH to normal operation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Serial_Interface&amp;diff=2053</id>
		<title>Model 100 Serial Interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Serial_Interface&amp;diff=2053"/>
		<updated>2010-09-10T05:37:52Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Select RS232 Port */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[Media:6402.pdf‎|IM6402 UART]] (datasheet) on the Model 100 and Tandy 102.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.&lt;br /&gt;
&lt;br /&gt;
=== Select RS232 Port ===&lt;br /&gt;
&lt;br /&gt;
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.&lt;br /&gt;
&lt;br /&gt;
For RS232 access, port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt;, bit #3 must be set to 0.&lt;br /&gt;
&lt;br /&gt;
For Modem access, port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt;, bit #3 must be set to 1.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is shared with other functions, including power control.&lt;br /&gt;
&lt;br /&gt;
=== Serial Word Format ===&lt;br /&gt;
&lt;br /&gt;
Port &amp;lt;code&amp;gt;$D8&amp;lt;/code&amp;gt; controls the serial word format.&lt;br /&gt;
&lt;br /&gt;
Actually, any of &amp;lt;code&amp;gt;$D0 &amp;amp;rarr; $DF&amp;lt;/code&amp;gt; can be used.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0   ||	Stop Bit Select			|| 0 &amp;amp;rarr; 1 stop bit&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 2 or 1.5 stop bits (1.5 if character length is 5, 2 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
|1   ||	Even Parity Enable		|| 0 &amp;amp;rarr; Odd parity&amp;lt;br/&amp;gt;1 &amp;amp;rarr; Even&lt;br /&gt;
|-&lt;br /&gt;
|2   ||	Parity Inhibit			|| 0 &amp;amp;rarr; Parity&amp;lt;br/&amp;gt;1 &amp;amp;rarr; No parity&lt;br /&gt;
|-&lt;br /&gt;
|4-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|7-5 ||	Unused				||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The master clock is 4.9152MHz; the CPU divides this /2 and the PIO /16; thus the divisor is 4,915,200/2/16/baud, i.e. 153,600/baud.&lt;br /&gt;
&lt;br /&gt;
Port $BD should contain the integer value of the divisor/256+64.&lt;br /&gt;
&lt;br /&gt;
Port $BC should contain the remainder (MOD) from the divisor/256.&lt;br /&gt;
&lt;br /&gt;
The baud rate selection must be committed by writing &amp;lt;code&amp;gt;$C3&amp;lt;/code&amp;gt; to register &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a table of some baud rates that may be of interest:&lt;br /&gt;
&lt;br /&gt;
{|  border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
| Baud Rate	|| PIO&amp;lt;br/&amp;gt;Divisor	|| Port &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt;	|| Port &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 75		|| 2048			|| 72				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 110		|| 1396			|| 69				|| 116&lt;br /&gt;
|-&lt;br /&gt;
| 300		|| 512			|| 66				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 600		|| 256			|| 65				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1200		|| 128			|| 64				|| 128&lt;br /&gt;
|-&lt;br /&gt;
| 2400		|| 64			|| 64				|| 64&lt;br /&gt;
|-&lt;br /&gt;
| 4800		|| 32			|| 64				|| 32&lt;br /&gt;
|-&lt;br /&gt;
| 9600		|| 16			|| 64				|| 16&lt;br /&gt;
|-&lt;br /&gt;
| 19200		|| 8			|| 64				|| 8&lt;br /&gt;
|-&lt;br /&gt;
| 38400		|| 4			|| 64				|| 4&lt;br /&gt;
|-&lt;br /&gt;
| 76800		|| 4			|| 64				|| Either 2 or 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I include 76800 since it is are the highest baud rate that the M100 is capable of. Certainly it is usable for communicating with another Model 100. However since is not a &amp;quot;known&amp;quot; baud rate, it is less useful for communicating with PCs or other devices.&lt;br /&gt;
&lt;br /&gt;
That said, you may be able to [[Serial Devices Supporting 76800bps|find a device]] or bitbang GPIO lines to communicate at these rates. I have read that some USB-&amp;gt;Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.&lt;br /&gt;
&lt;br /&gt;
Also, it turns out that NADSBox hardware is able to support the 76800bps rate! Ken may enable features that leverage the higher rate in future software updates.&lt;br /&gt;
&lt;br /&gt;
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1	DEFINTA-Z:&lt;br /&gt;
	OPEN&amp;quot;COM:98N1D&amp;quot;FOROUTPUTAS1:&lt;br /&gt;
	D$=&amp;quot;&amp;quot;:&lt;br /&gt;
	A=FRE(&amp;quot;0&amp;quot;):&lt;br /&gt;
	L=VARPTR(D$)+1:&lt;br /&gt;
	M=L+1:&lt;br /&gt;
	POKEL-1,128:&lt;br /&gt;
	OUT180,4:&lt;br /&gt;
	OUT181,64:&lt;br /&gt;
	OUT184,195:&lt;br /&gt;
	FORI=0TO255:&lt;br /&gt;
		POKEM,128+I/2:&lt;br /&gt;
		POKEL,(IMOD2)*128:&lt;br /&gt;
		PRINT#1,D$;:&lt;br /&gt;
	NEXT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.&lt;br /&gt;
&lt;br /&gt;
So, here&#039;s an assembly language version of the same program. It transfers your Model 100&#039;s 32K RAM to a serial connection in about 8.5 seconds!&lt;br /&gt;
&lt;br /&gt;
Note that this code obeys the &amp;quot;clear to send&amp;quot; signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.&lt;br /&gt;
&lt;br /&gt;
Further note that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		.org	64704&lt;br /&gt;
&lt;br /&gt;
		; select RS232 port&lt;br /&gt;
		MVI	A, $25&lt;br /&gt;
		OUT	$BA&lt;br /&gt;
&lt;br /&gt;
		; set up 8N1&lt;br /&gt;
		MVI	A, 28&lt;br /&gt;
		OUT	$D8&lt;br /&gt;
&lt;br /&gt;
		; set up 38400 bps&lt;br /&gt;
		MVI	A, 64&lt;br /&gt;
		OUT	$BD&lt;br /&gt;
		MVI	A, 4&lt;br /&gt;
		OUT	$BC&lt;br /&gt;
		MVI	A, $C3&lt;br /&gt;
		OUT	$B8&lt;br /&gt;
&lt;br /&gt;
		LXI	H,32768&lt;br /&gt;
&lt;br /&gt;
WAITEMPTY:	IN	$D8&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
	&lt;br /&gt;
		MOV	A,M&lt;br /&gt;
		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
		INX	H&lt;br /&gt;
		MOV	A,H&lt;br /&gt;
		ORA	L&lt;br /&gt;
&lt;br /&gt;
		JNZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
		RET&lt;br /&gt;
&lt;br /&gt;
		.END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Transmission ==&lt;br /&gt;
&lt;br /&gt;
Once configured, sending a character is simply&lt;br /&gt;
&lt;br /&gt;
 		MVI	&#039;A&#039;&lt;br /&gt;
 		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
or, in BASIC,&lt;br /&gt;
&lt;br /&gt;
 OUT 200,ASC(&amp;quot;A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
In the UART, there is room for two characters: the character currently being transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.&lt;br /&gt;
&lt;br /&gt;
You should never overflow the transmission buffers. Either do some other work during the &amp;quot;downtime&amp;quot; and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a &amp;quot;busy wait.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 WAITEMPTY:	IN	$D8&lt;br /&gt;
 		ANI	$10&lt;br /&gt;
 		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.&lt;br /&gt;
&lt;br /&gt;
== Data Reception ==&lt;br /&gt;
&lt;br /&gt;
=== BASIC ROM Interrupt 6.5 Handling ===&lt;br /&gt;
&lt;br /&gt;
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.&lt;br /&gt;
&lt;br /&gt;
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]&lt;br /&gt;
&lt;br /&gt;
=== Polling Interrupt 6.5 ===&lt;br /&gt;
&lt;br /&gt;
Accepting the BASIC ROM&#039;s handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. &lt;br /&gt;
&lt;br /&gt;
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085&#039;s SIM and RIM instructions.&lt;br /&gt;
&lt;br /&gt;
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.&lt;br /&gt;
&lt;br /&gt;
== Flow Control ==&lt;br /&gt;
&lt;br /&gt;
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.&lt;br /&gt;
&lt;br /&gt;
Since we are discussing direct control of the UART, we can do better and implement full flow control.&lt;br /&gt;
&lt;br /&gt;
=== Detect Clear to Send (CTS) ===&lt;br /&gt;
&lt;br /&gt;
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can &amp;quot;flow off&amp;quot; the Model T when its receive buffers are full.&lt;br /&gt;
&lt;br /&gt;
Implementing CTS is easy. The following code performs a busy wait on CTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTS line is read from bit #5 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling &amp;quot;clear to send.&amp;quot; If 1, the device is attempting to flow us off from transmitting.&lt;br /&gt;
&lt;br /&gt;
=== Request Peer to Send (RTS) ===&lt;br /&gt;
&lt;br /&gt;
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal  &amp;quot;requesting&amp;quot; the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.&lt;br /&gt;
&lt;br /&gt;
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.&lt;br /&gt;
&lt;br /&gt;
The RTS and DTR lines are located on I/O register 0xBA (186). To assert RTS, clear the bit #7 of 0xBA (set to 0). To deassert RTS, set bit #7 of 0xBA to 1. Similarly for DTR, except that it is Bit #6.&lt;br /&gt;
&lt;br /&gt;
The following code sample sets RTS corresponding to high and low watermarks of the serial buffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Assert RTS if the low water mark is passed (pressure relieved)&lt;br /&gt;
CHECK_LOW_WATER:	CPI		10&lt;br /&gt;
			JNC		EXIT_LOW_WATER&lt;br /&gt;
ASSERT_RTS:		IN		$BA&lt;br /&gt;
			ANI		$7F&lt;br /&gt;
			OUT		$BA&lt;br /&gt;
EXIT_LOW_WATER:		POP		PSW&lt;br /&gt;
			RET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Deassert RTS if high water mark is exceeded (high pressure)&lt;br /&gt;
CHECK_HIGH_WATER:	CPI		40&lt;br /&gt;
			JC		EXIT_HIGH_WATER&lt;br /&gt;
DEASSERT_RTS:		IN		$BA&lt;br /&gt;
			ORI		$80&lt;br /&gt;
			OUT		$BA&lt;br /&gt;
EXIT_HIGH_WATER:	POP		PSW&lt;br /&gt;
			RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handling Communication Errors ==&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== I/O Map ==&lt;br /&gt;
&lt;br /&gt;
Here, for reference, is the serial I/O map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Direction&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Port&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DSR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DTR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A &#039;1&#039; means the device is flowing the Model T off.&lt;br /&gt;
&lt;br /&gt;
nb: Port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is called &amp;quot;Port B&amp;quot; in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.&lt;br /&gt;
&lt;br /&gt;
Direction indicates both data flow, and whether to use an &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; instruction to read/write to the given pin.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Soon_to_be_released_REX_Release_4.6&amp;diff=2036</id>
		<title>Soon to be released REX Release 4.6</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Soon_to_be_released_REX_Release_4.6&amp;diff=2036"/>
		<updated>2010-06-14T01:08:46Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Upgrade Procedure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Supported Models ==&lt;br /&gt;
M100 and T102, with either REX or REX2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Features ==&lt;br /&gt;
*  Main ROM Replacement feature, allowing users to load and update the main system ROM&lt;br /&gt;
*  ROM2/Cleuseau is now supported&lt;br /&gt;
*  REX system information and acknowledgements display added&lt;br /&gt;
*  Checksum added into TPDD routines&lt;br /&gt;
*  Improved bank switching&lt;br /&gt;
*  Stronger directory structure testing&lt;br /&gt;
*  Minor changes to MENU controls&lt;br /&gt;
*  More descriptive Help files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bug Fixes ==&lt;br /&gt;
*  the 12 block limitation in Release 4.5 is resolved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upgrade Procedure ==&lt;br /&gt;
The upgrade procedure is quite simple.  The upgrade package contains a program called REXU1.CO (the upgrader tool) and a 16k binary image of the new REX software load called REX146.BR.&lt;br /&gt;
&lt;br /&gt;
The upgrade assumes you have a working REX or REX2 running software release 4.5.  This is a mostly safe assumption, since all REX and REX2 to date have been only got Release 4.5.&lt;br /&gt;
&lt;br /&gt;
The upgrade tool REXU1 runs in RAM and relies on a connected TPDD device to make the software upgrade image available.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1.  Download the upgrade package, and place the 2 files in your favorite TPDD device or emulator so they are accessible.  Upload the program REXU1.CO to the laptop.&lt;br /&gt;
&lt;br /&gt;
2.  Power up the laptop, start REX Manager, and de-install the REX software by pressing F7.  Return to MENU.&lt;br /&gt;
&lt;br /&gt;
3.  Make sure that you CLEAR memory for REXU1.CO.  From BASIC issue the command CLEAR0,60460.  Return to MENU and run REXU1.CO.&lt;br /&gt;
&lt;br /&gt;
4.  The upgrade tool first allows the user to make a full system backup by indicating Y or N at the prompt.  In REX, the system is a 32k binary image that includes your current software load, and your current directory.  It is recommended that you save your existing image just to be safe.  Keeping the system image allows you to revert to that if something unforseen happens during the upgrade.  Provide a unique filename to safely identify the system image backup.&lt;br /&gt;
&lt;br /&gt;
5.  Proceed to upgrade the software image by indicating Y or N, or quit the application using Q or ESC. (N, Q and ESC are equivalent).  Confirm your intention to upgrade the system by confirming with Y at the next prompt, or abandon using N.  If you confirm the upgrade, the upgrade process will proceed by erasing the first 16k of the system image, containing the system software, and replacing it with the binary image REX146.BR stored on TPDD.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Be careful to keep the laptop powered up during the flash process!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6.  Power cycle the laptop, and from BASIC issue the command CALL63012.  This should start REX Manager again, and you should now be using release 4.6.  You will observe that REX will notice the system upgrade, and will back up the software image to the backup block.  This is normal and will happen only once.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DONE!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== REX Release 4.6 Upgrade Package ==&lt;br /&gt;
&lt;br /&gt;
REX SYSTEM images contain the REX Manager software package, including the default directories, and are 32kbyte binary files.  For M100/T102, images have filenames of REX1XX.BR, and T200 images have filenames of REX2XX.BR, where XX is the release number.&lt;br /&gt;
&lt;br /&gt;
In the upgrade package, 16k system images with only the software are provided, because you will want to keep your directory data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Release&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Model&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Description&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;File&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Submitter / Date&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;GA&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1.0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;M100/T102&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;REX Upgrade Package&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Media:REX_4.6_Upgrade.zip|REX_4.6_Upgrade.zip]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 13:06, 13 June 2010 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rel. 4.6 Known Issues ==&lt;br /&gt;
*  Startup of REX Manager is slow.  I will be making improvements in the next release.&lt;br /&gt;
*  No ability to transfer files from stored RAM images is a pain.  Look to the next release.&lt;br /&gt;
&lt;br /&gt;
== Rel. 4.6 bug reports/work arounds ==&lt;br /&gt;
&lt;br /&gt;
None yet!&lt;br /&gt;
&lt;br /&gt;
== Enhancement Requests ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Description&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Requester / Date&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Unknown&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Support for so called Paired Switching, where a RAM image is swapped and an OPTROM image is switched in the same step. &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 05:17, 15 August 2009 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Unknown&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Support import of file from frozen RAM image to the thawed RAM image. RAM images can be used in a way similar to subdirectories. Therefore it is useful to be able to retrieve files from frozen RAM images&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Jhoger|Jhoger]] 08:16, 16 April 2009 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;unknown&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Support for TPDD-2, for drive 1: (0: is supported).&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[User:Sadolph|Sadolph]] 04:36, 19 April 2009 (PDT)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
nb: to put a username+datestamp just type 4 tildes &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2013</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2013"/>
		<updated>2010-05-28T04:28:46Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM. In order to efficiently test&lt;br /&gt;
your ROM, you can use VirtualT, REX, or blow EEPROMS.&lt;br /&gt;
&lt;br /&gt;
== Interrupt Handling ==&lt;br /&gt;
&lt;br /&gt;
On the 8085, all interrupt handlers must begin at specific addresses in low memory.&lt;br /&gt;
Normally, the BASIC ROM implements these and you don&#039;t have to concern yourself with them.&lt;br /&gt;
&lt;br /&gt;
But when writing an OptROM, since you run in place of the BASIC ROM, you must provide handlers for the interrupts. An interrupt will launch&lt;br /&gt;
code at its associated address any time it is signalled and the interrupt is not masked. One interrupt,&lt;br /&gt;
TRAP (power-off interrupt) cannot be masked at all.&lt;br /&gt;
&lt;br /&gt;
The usual approach for hardware interrupt implementation is to simply do some housekeeping and provide a jump into the main ROM&lt;br /&gt;
that handles the interrupt as usual. This adds some execution cycle overhead, but the tradeoff is that you do not need to use up much of the&lt;br /&gt;
space in your OptROM.&lt;br /&gt;
&lt;br /&gt;
Note that the M100 has several &amp;quot;software interrupts.&amp;quot; You are free to define these any way you like.&lt;br /&gt;
These can be used to create your own short &amp;quot;custom instruction.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing a good method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to&lt;br /&gt;
&lt;br /&gt;
* Use only the stack - no unsafe use of RAM variables&lt;br /&gt;
* Minimize code size&lt;br /&gt;
* Minimize execution time overhead&lt;br /&gt;
&lt;br /&gt;
To these ends, the code is heavily optimized, making good use of the undocumented 8085 instructions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2012</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2012"/>
		<updated>2010-05-28T04:19:29Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Option ROM Code Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM. In order to efficiently test&lt;br /&gt;
your ROM, you can use VirtualT, REX, or blow EEPROMS.&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing a good method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to&lt;br /&gt;
&lt;br /&gt;
* Use only the stack - no unsafe use of RAM variables&lt;br /&gt;
* Minimize code size&lt;br /&gt;
* Minimize execution time overhead&lt;br /&gt;
&lt;br /&gt;
To these ends, the code is heavily optimized, making good use of the undocumented 8085 instructions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2011</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2011"/>
		<updated>2010-05-28T04:18:58Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM. In order to efficiently test&lt;br /&gt;
your ROM, you can use VirtualT, REX, or blow EEPROMS.&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing an improved method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to&lt;br /&gt;
&lt;br /&gt;
* Use only the stack - no unsafe use of RAM variables&lt;br /&gt;
* Minimize code size&lt;br /&gt;
* Minimize execution time overhead&lt;br /&gt;
&lt;br /&gt;
To these ends, the code is heavily optimized, making good use of the undocumented 8085 instructions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2010</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2010"/>
		<updated>2010-05-28T04:17:41Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Option ROM Code Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM.&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing an improved method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to&lt;br /&gt;
&lt;br /&gt;
* Use only the stack - no unsafe use of RAM variables&lt;br /&gt;
* Minimize code size&lt;br /&gt;
* Minimize execution time overhead&lt;br /&gt;
&lt;br /&gt;
To these ends, the code is heavily optimized, making good use of the undocumented 8085 instructions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2009</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2009"/>
		<updated>2010-05-28T04:15:25Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
On the Model 100 (unmodified), the lower 32K is always occupied by a ROM (Read-Only Memory).&lt;br /&gt;
This is either the stock &amp;quot;BASIC ROM&amp;quot; or an Option ROM (OptROM).&lt;br /&gt;
&lt;br /&gt;
If you are interested in creating your own OptROM, this article presents template assembly code to provide the&lt;br /&gt;
fundamental facilities you need to put in place to implement a new OptROM.&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing an improved method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to &lt;br /&gt;
* use only the stack&lt;br /&gt;
* minimize code size&lt;br /&gt;
* reduce execution time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2008</id>
		<title>REX Overview</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=REX_Overview&amp;diff=2008"/>
		<updated>2010-05-28T04:10:42Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== REX Overview ==&lt;br /&gt;
&lt;br /&gt;
REX is a low power 1MB flash card custom designed to work with the Model T.  The challenge for REX is to be able to accomplish a &amp;quot;write&amp;quot; in a socket designed only for &amp;quot;reads&amp;quot;.  An additional challenge, is to be able to control 19 address lines and 8 data lines to the flash, with a minimum amount of resources.  &lt;br /&gt;
&lt;br /&gt;
A major challenge with REX, was finding a CPLD with enough I/O to manage the flash, while being small enough to fit in the socket.&lt;br /&gt;
&lt;br /&gt;
== REX Architecture ==&lt;br /&gt;
&lt;br /&gt;
The architecture of REX is shown in the illustration below.  Here we see that the CPLD (a programmable logic device, the &amp;quot;brains&amp;quot; of REX) sits between the flash chip and the option rom socket connector.  &lt;br /&gt;
&lt;br /&gt;
REX manages only some of the address lines going to the flash - A15-A19, and A0-A7.  A8-A14 are provided as direct connections from the optrom socket, as are AD0-AD7.  REX intercepts the address/data bus AD0-AD7, and the system communicates with the CPLD using data sent on these lines.&lt;br /&gt;
&lt;br /&gt;
Data is sent to REX on the falling edge of the ALE signal.  During this time, the address/data bus AD0-AD7 contains the lower address information for that CPU cycle.&lt;br /&gt;
&lt;br /&gt;
So, in order to send data to REX, the data is sent as the bottom 8 bits of the ADDRESS, not the DATA, during a read cycle from the option rom.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Rex_architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REX needs to distinguish between &amp;quot;normal reads&amp;quot; to the option rom, and &amp;quot;control reads&amp;quot; to REX.  In order to tell them apart, REX listens for a sequence of 6 reads from specific memory locations.  When this key sequence is observed, REX jumps into a command mode, to allow control of REX and manipulation of the flash.&lt;br /&gt;
&lt;br /&gt;
== REX State Machine ==&lt;br /&gt;
&lt;br /&gt;
The following illustration is the REX state machine.  This heavily optimised state machine has commands to set and read the registers of REX, and to send specific sequences to the flash to allow programming and erasing of the different blocks in the flash.&lt;br /&gt;
&lt;br /&gt;
The state machine has been optimised for high speed operation as well as maximum flexibility.  REX is able to program a 32k binary image in under 4 seconds.&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_statemachine.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Flash Organization ==&lt;br /&gt;
&lt;br /&gt;
REX makes 32k blocks of flash memory visible to the Model T, and the currently visible block is selected by programming the sector register.  The flash is organised according to the following diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flash_org.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we see 6 blocks of flash, including block 0, reserved for system use, and 26 blocks are free for use to store images.&lt;br /&gt;
&lt;br /&gt;
Block 0 is a special block, in that it may be erased independantly of any other block, and in 3 sections, a 16k section and 2 8k sections.  Block 1 may be erased independantly of any other block, and is a stand alone 32k block.  The remaining blocks are actually associated with a 64k sector - 2 adjacent blocks form a sector, and the entire sector must be erased at the same time.  &lt;br /&gt;
&lt;br /&gt;
This poses a challenge for REX, since REX images are all 32k in size.   In general, in order to erase a block, the adjacent block must be copied to a free block first, to allow a complete erasure of the 64k sector.&lt;br /&gt;
&lt;br /&gt;
128k is reserved for main rom replacement.  64k is reserved for primary main rom, and 64k is reserved for a secondary main rom.   In practice it is expected that the primary main rom gets programmed once, and left alone, since it is critical to allow reliable booting once the user unplugs the original equipment ROM.  That leaves the secondary rom for custom loads.&lt;br /&gt;
&lt;br /&gt;
M100/T102 needs only 32k for each main rom, but T200 needs 40k (IE 64k).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Registers ==&lt;br /&gt;
&lt;br /&gt;
REX has 2 internal registers - the version register (read only) and the status register (read/write).  The definitions of these registers is illustrated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_registers.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== REX Mananger Flow Chart ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:REX_flowchart.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Low Level REX Support Subroutines==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Media:rex_routines.zip|REX support routines ASM]]&lt;br /&gt;
&lt;br /&gt;
The above file (as at release 4.6) includes all the low level REX specific subroutines for manipulating REX and the onboard FLASH. &lt;br /&gt;
&lt;br /&gt;
These routines must run in upper RAM, typically ALTLCD, because, well, REX is bank switching in the lower RAM.  Also, interrupts must always be disabled when accessing REX.  Be careful, some main ROM routines enable interrupts.&lt;br /&gt;
&lt;br /&gt;
In general it is very important to understand what state REX is in.  Often I am referring to &amp;quot;state 111&amp;quot; or &amp;quot;state 000&amp;quot;.  State 111 is the &amp;quot;normal operation&amp;quot; state where REX is acting like an option ROM.  Entry into state 000 occurs after the unlock key sequence is sent.   State 000 is the control state where REX can be instructed to do various things.&lt;br /&gt;
&lt;br /&gt;
I would recommend that any one reading this might want to download the data sheet for the AM29F800BB flash part, and learn about how to manipulate it.&lt;br /&gt;
&lt;br /&gt;
[[Media:am29F800BB.pdf|AM29F800 datasheet]]&lt;br /&gt;
&lt;br /&gt;
There are 4 &amp;quot;very low level&amp;quot; subroutines that are the basis for all REX operations.  These routines are called by &amp;quot;higher level low level subroutines&amp;quot;.  They are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
SNDKEY&lt;br /&gt;
	sends the key sequence to REX &lt;br /&gt;
	entry:  none, in any state&lt;br /&gt;
	exit:	in state 00&lt;br /&gt;
	registers changed: none&lt;br /&gt;
SETBLOCK&lt;br /&gt;
	sends command 2 to REX&lt;br /&gt;
	entry:  a = target block&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a&lt;br /&gt;
WAITREADY&lt;br /&gt;
	sends command 3 to REX, reads status and version bytes, and returns only when flash status is ready&lt;br /&gt;
	entry: 	none&lt;br /&gt;
	exit:	b = status byte, c = version byte&lt;br /&gt;
	registers changed: a, hl, bc&lt;br /&gt;
PROGBYTE&lt;br /&gt;
	program a byte into the flash -  program data from b to (de)&lt;br /&gt;
	entry: 	de = PA, data in b&lt;br /&gt;
	exit:	none&lt;br /&gt;
	registers changed: a, hl - preseves bc and de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please see the above file for examples of code that programs a block of data into REX, reading the REX status register, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The REX Communication Method ==&lt;br /&gt;
&lt;br /&gt;
REX uses a unique approach to bi-directional communication in a read-only socket, which is 100% reliant on the architecture of the 8085.&lt;br /&gt;
&lt;br /&gt;
Reads are simple - the socket is designed for Read Only.&lt;br /&gt;
&lt;br /&gt;
Writes are the challenge, with the signals available.&lt;br /&gt;
&lt;br /&gt;
The 8085 uses a multiplexed address and data bus, and the ALE signal is used to discriminate address from data early in the CPU cycle.  Normally address data is captured on the falling edge of ALE.  We use this fact to send data to REX embedded in the lower address byte.&lt;br /&gt;
&lt;br /&gt;
REX watches the address bus for READ operations (signaled by /CS to the option rom socket), and listens to the lower byte.   &lt;br /&gt;
&lt;br /&gt;
To send data to REX then, one must perform a READ to the optrom socket, where the desired data is actually the lower address field.  REX is clocked from ALE, so it will respond to stimulus from the bus on the falling edge of ALE.&lt;br /&gt;
&lt;br /&gt;
REX mostly ignores this data, and acts like a normal option rom, until it senses the key sequence has been sent.  When a sequence of 6 reads from addresses with specific bytes in the lower address field are seen, REX transitions from the default power up state into the command state.&lt;br /&gt;
&lt;br /&gt;
The key sequence happens to be:  B6 F2 34 B0 31 BF (hex).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Power Up and RESET of REX ==&lt;br /&gt;
&lt;br /&gt;
REX does not see the reset signal in the PC.  So, reset does not affect REX. REX is reset by power down/up.&lt;br /&gt;
&lt;br /&gt;
When REX is reset, it reverts to it&#039;s power up default - state 111 and block 0 present.&lt;br /&gt;
&lt;br /&gt;
If by chance the flash chip hangs with status bit 0, then power cycling the machine will also reset the FLASH to normal operation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2007</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2007"/>
		<updated>2010-05-28T04:10:21Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing an improved method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to &lt;br /&gt;
* use only the stack&lt;br /&gt;
* minimize code size&lt;br /&gt;
* reduce execution time&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2006</id>
		<title>OPTROM Switching</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=OPTROM_Switching&amp;diff=2006"/>
		<updated>2010-05-28T04:07:23Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
Some time was spent in developing an improved method to call main ROM from option ROM, and to handle interrupts from within the optrom.  This code was developed by John Hogerhius and Steve Adolph, inspired by work done by Mo Budlong.&lt;br /&gt;
&lt;br /&gt;
The goal was to &lt;br /&gt;
* use only the stack&lt;br /&gt;
* minimize code size&lt;br /&gt;
* reduce execution time&lt;br /&gt;
&lt;br /&gt;
== Option ROM Code Template ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OPON:			.EQU	0FAA4H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
; ROM start&lt;br /&gt;
;-----------------------------------------------------------------------&lt;br /&gt;
	.org	0000h&lt;br /&gt;
&lt;br /&gt;
RST0:	di&lt;br /&gt;
	JMP	program		; standard entry&lt;br /&gt;
	.DB	0,0,0,0&lt;br /&gt;
RST1:	RET&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST2:	RET			;Not used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST3:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0,0,0,0,0&lt;br /&gt;
RST4:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
TRAP:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST5:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST55:	DI&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST6:	JMP	STDCALL		;RST 6 used as short call to a Standard ROM routine.&lt;br /&gt;
	.DB	0&lt;br /&gt;
RST65:	DI			;Replaces the 6.5 interrupt and sets up a call to 6.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
RST7:	RET			;Not Used&lt;br /&gt;
	.DB	0,0,0&lt;br /&gt;
RST75: 	DI			;Replaces the 7.5 interrupt and sets up a call to 7.5 in Standard ROM&lt;br /&gt;
	CALL	INTCALL&lt;br /&gt;
&lt;br /&gt;
	.org	0040h&lt;br /&gt;
&lt;br /&gt;
OPON_img:			; auto copied on power up&lt;br /&gt;
				; 8 bytes&lt;br /&gt;
	PUSH	PSW		; temp store psw&lt;br /&gt;
	mvi	a,01h&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	pop	psw	&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
	.db	00h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	.org	0048h&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;The STDCALL routine allows a program running in the&lt;br /&gt;
;the Option ROM to call and return to an address in the&lt;br /&gt;
;Option ROM.&lt;br /&gt;
;Syntax is to use a RST 6 plus the address to be called.&lt;br /&gt;
;&lt;br /&gt;
; 		RST	6&lt;br /&gt;
; rvect--&amp;gt;	DW	04B44H  (cvect)&lt;br /&gt;
; pvect--&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
STDCALL:			; 23 bytes&lt;br /&gt;
				; stack = rvect&lt;br /&gt;
	xthl&lt;br /&gt;
	inx 	h&lt;br /&gt;
	inx 	h&lt;br /&gt;
	xthl			; fix up first stack entry&lt;br /&gt;
				; stack = pvect&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push	h			&lt;br /&gt;
	lxi 	h, OPON&lt;br /&gt;
	xthl			; stack = pvect, OPON&lt;br /&gt;
				; hl=hl&#039;&lt;br /&gt;
&lt;br /&gt;
	push 	h&lt;br /&gt;
	push 	d		; stack = pvect, OPON, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi 	06h		; point de to stack location of return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl=pvect&lt;br /&gt;
	dcx 	h&lt;br /&gt;
	dcx 	h		; point hl=pvect-2&lt;br /&gt;
	xchg			; de=pvect-2&lt;br /&gt;
	lhlx			; hl=cvect&lt;br /&gt;
&lt;br /&gt;
	pop 	d		; de=de&#039;&lt;br /&gt;
	xthl			; hl=hl&#039;, stack= pvect, OPON, cvect&lt;br /&gt;
&lt;br /&gt;
	jmp 	STDON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;Routine for the hardware traps.&lt;br /&gt;
;return address on entry is related to which interrupt occured.&lt;br /&gt;
; &lt;br /&gt;
;		after interrupt occurs&lt;br /&gt;
; ivect		DI&lt;br /&gt;
;		call	INTCALL&lt;br /&gt;
; rvect --&amp;gt;&lt;br /&gt;
; so stack = pvect, rvect&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
INTCALL:			; final stack must be opon, introutine&lt;br /&gt;
				; interrupts are off&lt;br /&gt;
				; enter with return location on stack, indicating int routine&lt;br /&gt;
				; stack = pvect, rvect&lt;br /&gt;
				; 20 bytes&lt;br /&gt;
	push	h	&lt;br /&gt;
	push	d		; stack = pvect, rvect, hl&#039;, de&#039;&lt;br /&gt;
&lt;br /&gt;
	ldsi	04h&lt;br /&gt;
&lt;br /&gt;
	lhlx			; hl= rvect&lt;br /&gt;
&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h&lt;br /&gt;
	dcx	h		; hl = ivect&lt;br /&gt;
&lt;br /&gt;
	push	h		; stack = pvect, rvect, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	lxi	h,OPON&lt;br /&gt;
	shlx			; stack = pvect, OPON, hl&#039;, de&#039;, ivect&lt;br /&gt;
&lt;br /&gt;
	pop	h		; hl=ivect&lt;br /&gt;
	pop	d		; de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	xthl			; stack = pvect, OPON, ivect&lt;br /&gt;
				; hl=hl&#039;, de=de&#039;&lt;br /&gt;
&lt;br /&gt;
	jmp	STDON&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
;OPEXIT/STDON: Turns off the Option ROM (or turns on Standard ROM)&lt;br /&gt;
;---------------------------------------------------------&lt;br /&gt;
	.org	0085h&lt;br /&gt;
&lt;br /&gt;
STDON:&lt;br /&gt;
	PUSH	PSW&lt;br /&gt;
	PUSH	H		; 26C8, F1 C9  POP PSW, RET&lt;br /&gt;
	LXI	H,26C8H		; it returns to this location --&amp;gt; pop psw; ret&lt;br /&gt;
	XTHL&lt;br /&gt;
&lt;br /&gt;
OPEXIT:				; return to location pushed on stack&lt;br /&gt;
	xra	a&lt;br /&gt;
	OUT	0E8H&lt;br /&gt;
	RET			; RET can be found at 008EH in stdrom&lt;br /&gt;
				; in both M100 and T200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXIT:&lt;br /&gt;
	.org	00094H&lt;br /&gt;
	pop	h&lt;br /&gt;
	lxi	h,0000h&lt;br /&gt;
	xthl			; restart&lt;br /&gt;
&lt;br /&gt;
	jmp	OPEXIT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Media:demo.zip|Demo program for an option rom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that in some instances one might need to use the data stored in FF45 to preseve the state of thinks like the cassette relay.  In that case, it is relatively simple to extend this to cover FF45 support properly.&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_100_Serial_Interface&amp;diff=1988</id>
		<title>Model 100 Serial Interface</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_100_Serial_Interface&amp;diff=1988"/>
		<updated>2010-05-13T03:21:36Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Data Transmission */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
The BASIC ROM provides access to the serial port. BASIC ROM support is well documented elsewhere. This article covers direct use of the [[Media:6402.pdf‎|IM6402 UART]] (datasheet) on the Model 100 and Tandy 102.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Before the serial port can be used, it must be configured both for serial word format (data bits, stop bits, and parity) and baud rate.&lt;br /&gt;
&lt;br /&gt;
=== Select RS232 Port ===&lt;br /&gt;
&lt;br /&gt;
At any given time, either the internal modem or the external RS232 connector may be connected to the UART. This is controllable through software.&lt;br /&gt;
&lt;br /&gt;
For RS232 access, port &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;, bit #3 must be set to 0.&lt;br /&gt;
&lt;br /&gt;
For Modem access, port &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;, bit #3 must be set to 1.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt; is shared with other functions, including power control.&lt;br /&gt;
&lt;br /&gt;
=== Serial Word Format ===&lt;br /&gt;
&lt;br /&gt;
Port &amp;lt;code&amp;gt;$D8&amp;lt;/code&amp;gt; controls the serial word format.&lt;br /&gt;
&lt;br /&gt;
Actually, any of &amp;lt;code&amp;gt;$D0 &amp;amp;rarr; $DF&amp;lt;/code&amp;gt; can be used.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|Bit ||	Function			|| Settings&lt;br /&gt;
|-&lt;br /&gt;
|0   ||	Stop Bit Select			|| 0 &amp;amp;rarr; 1 stop bit&amp;lt;br/&amp;gt;1 &amp;amp;rarr; 2 or 1.5 stop bits (1.5 if character length is 5, 2 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
|1   ||	Even Parity Enable		|| 0 &amp;amp;rarr; Odd parity&amp;lt;br/&amp;gt;1 &amp;amp;rarr; Even&lt;br /&gt;
|-&lt;br /&gt;
|2   ||	Parity Inhibit			|| 0 &amp;amp;rarr; Parity&amp;lt;br/&amp;gt;1 &amp;amp;rarr; No parity&lt;br /&gt;
|-&lt;br /&gt;
|4-3 ||	Character Length Select		|| Bits:&amp;lt;br/&amp;gt;00 &amp;amp;rarr; 5&amp;lt;br/&amp;gt;01 &amp;amp;rarr; 6&amp;lt;br/&amp;gt;10 &amp;amp;rarr;  7&amp;lt;br/&amp;gt;11 &amp;amp;rarr; 8&lt;br /&gt;
|-&lt;br /&gt;
|7-5 ||	Unused				||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
CPU selection of baud rate is accomplished by loading a divisor into the PIO register through output ports &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B4&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$B5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baud rate selection must be committed by writing &amp;lt;code&amp;gt;$C3&amp;lt;/code&amp;gt; to register &amp;lt;code&amp;gt;$B8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here is a table of some baud rates that may be of interest:&lt;br /&gt;
&lt;br /&gt;
{|  border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&lt;br /&gt;
| Baud Rate	|| PIO&amp;lt;br/&amp;gt;Divisor	|| Port &amp;lt;code&amp;gt;$BD&amp;lt;/code&amp;gt;	|| Port &amp;lt;code&amp;gt;$BC&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 75		|| 2048			|| 72				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 110		|| 1396			|| 69				|| 116&lt;br /&gt;
|-&lt;br /&gt;
| 300		|| 512			|| 66				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 600		|| 256			|| 65				|| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1200		|| 128			|| 64				|| 128&lt;br /&gt;
|-&lt;br /&gt;
| 2400		|| 64			|| 64				|| 64&lt;br /&gt;
|-&lt;br /&gt;
| 4800		|| 32			|| 64				|| 32&lt;br /&gt;
|-&lt;br /&gt;
| 9600		|| 16			|| 64				|| 16&lt;br /&gt;
|-&lt;br /&gt;
| 19200		|| 8			|| 64				|| 8&lt;br /&gt;
|-&lt;br /&gt;
| 38400		|| 4			|| 64				|| 4&lt;br /&gt;
|-&lt;br /&gt;
| 76800		|| 4			|| 64				|| Either 2 or 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I include 76800 since it is are the highest baud rate that the M100 is capable of. Certainly it is usable for communicating with another Model 100. However since is not a &amp;quot;known&amp;quot; baud rate, it is less useful for communicating with PCs or other devices.&lt;br /&gt;
&lt;br /&gt;
That said, you may be able to [[Serial Devices Supporting 76800bps|find a device]] or bitbang GPIO lines to communicate at these rates. I have read that some USB-&amp;gt;Serial adapters are capable of communicating at many more baud rates than the typical built-in serial ports, so there is definitely room for further exploration.&lt;br /&gt;
&lt;br /&gt;
Also, it turns out that NADSBox hardware is able to support the 76800bps rate! Ken may enable features that leverage the higher rate in future software updates.&lt;br /&gt;
&lt;br /&gt;
Here is a practical example of using 38400bps using only BASIC code. This program dumps all RAM contents to the serial port.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1	DEFINTA-Z:&lt;br /&gt;
	OPEN&amp;quot;COM:98N1D&amp;quot;FOROUTPUTAS1:&lt;br /&gt;
	D$=&amp;quot;&amp;quot;:&lt;br /&gt;
	A=FRE(&amp;quot;0&amp;quot;):&lt;br /&gt;
	L=VARPTR(D$)+1:&lt;br /&gt;
	M=L+1:&lt;br /&gt;
	POKEL-1,128:&lt;br /&gt;
	OUT180,4:&lt;br /&gt;
	OUT181,64:&lt;br /&gt;
	OUT184,195:&lt;br /&gt;
	FORI=0TO255:&lt;br /&gt;
		POKEM,128+I/2:&lt;br /&gt;
		POKEL,(IMOD2)*128:&lt;br /&gt;
		PRINT#1,D$;:&lt;br /&gt;
	NEXT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this BASIC code does not transmit the 32K of data any faster than the 19200bps code. Both take about 33 seconds to transmit the image.&lt;br /&gt;
&lt;br /&gt;
So, here&#039;s an assembly language version of the same program. It transfers your Model 100&#039;s 32K RAM to a serial connection in about 8.5 seconds!&lt;br /&gt;
&lt;br /&gt;
Note that this code obeys the &amp;quot;clear to send&amp;quot; signal from the PC, so given hardware flow control enabled and properly configured on the PC, we should not overrun the remote UART.&lt;br /&gt;
&lt;br /&gt;
Further note that if the PC is busy doing something else (like printing to the screen) it might flow control us, and you may not achieve the maximum speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		.org	64704&lt;br /&gt;
&lt;br /&gt;
		; select RS232 port&lt;br /&gt;
		MVI	A, $25&lt;br /&gt;
		OUT	$BA&lt;br /&gt;
&lt;br /&gt;
		; set up 8N1&lt;br /&gt;
		MVI	A, 28&lt;br /&gt;
		OUT	$D8&lt;br /&gt;
&lt;br /&gt;
		; set up 38400 bps&lt;br /&gt;
		MVI	A, 64&lt;br /&gt;
		OUT	$BD&lt;br /&gt;
		MVI	A, 4&lt;br /&gt;
		OUT	$BC&lt;br /&gt;
		MVI	A, $C3&lt;br /&gt;
		OUT	$B8&lt;br /&gt;
&lt;br /&gt;
		LXI	H,32768&lt;br /&gt;
&lt;br /&gt;
WAITEMPTY:	IN	$D8&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
	&lt;br /&gt;
		MOV	A,M&lt;br /&gt;
		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
		INX	H&lt;br /&gt;
		MOV	A,H&lt;br /&gt;
		ORA	L&lt;br /&gt;
&lt;br /&gt;
		JNZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
		RET&lt;br /&gt;
&lt;br /&gt;
		.END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Transmission ==&lt;br /&gt;
&lt;br /&gt;
Once configured, sending a character is simply&lt;br /&gt;
&lt;br /&gt;
 		MVI	&#039;A&#039;&lt;br /&gt;
 		OUT	$C8&lt;br /&gt;
&lt;br /&gt;
or, in BASIC,&lt;br /&gt;
&lt;br /&gt;
 OUT 200,ASC(&amp;quot;A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
In the UART, there is room for two characters: the character currently being transmitted, and the next one. This permits you to ensure there is always one character waiting in the wings.&lt;br /&gt;
&lt;br /&gt;
You should never overflow the transmission buffers. Either do some other work during the &amp;quot;downtime&amp;quot; and/or wait until there is room by polling bit 4 (0x10) of register $D8. The code that follows just does a &amp;quot;busy wait.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 WAITEMPTY:	IN	$D8&lt;br /&gt;
 		ANI	$10&lt;br /&gt;
 		JZ	WAITEMPTY&lt;br /&gt;
&lt;br /&gt;
When deciding whether the other device is ready to receive you should also consider the Clear To Send (CTS) flow control line described later in this document.&lt;br /&gt;
&lt;br /&gt;
== Data Reception ==&lt;br /&gt;
&lt;br /&gt;
=== BASIC ROM Interrupt 6.5 Handling ===&lt;br /&gt;
&lt;br /&gt;
Whenever the UART receives another character, Interrupt 6.5 is signalled. Then, if interrupts are enabled, the CPU stops what it is doing and CALLs location 0x0034 in the BASIC ROM. This code disables further interrupts and jumps to the location 0x6DAC.&lt;br /&gt;
&lt;br /&gt;
The ISR then jumps to vector 0xFE5C (0xF5FC?) in RAM. Normally this is just a return instruction, but you could hook the interrupt here. [ stack manipulation to avoid/ or include default processing + re-enable interrupts? - TBD ]&lt;br /&gt;
&lt;br /&gt;
=== Polling Interrupt 6.5 ===&lt;br /&gt;
&lt;br /&gt;
Accepting the BASIC ROM&#039;s handling imposes significant overhead. With each interrupt, the instruction pointer must be placed on the stack and a jump performed at minimum. If the BASIC ROM (as opposed to an Option ROM) is switched in, then you will have the overhead of disabling interrupts, a jump to the DR vector, a return instruction, and then the default processing of reading and enqueing the new character. All that, and at this point no useful work has been performed other than to relieve the UART. &lt;br /&gt;
&lt;br /&gt;
For maximum efficiency you may wish to poll Interrupt 6.5 pin rather than accept the overhead of an interrupt. This is made possible by the 8085&#039;s SIM and RIM instructions.&lt;br /&gt;
&lt;br /&gt;
Using the SIM instruction, you can set the interrupt mask such that UART DR (data ready), bit 1, will not trigger an interrupt. Then, you can poll this bit using the RIM instruction ANDing with 0x20 to see if DR is set.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could disable interrupt processing altogether during your polled routine, but still use RIM to poll. This has the disadvantage of disabling the background ISR. But to achieve higher baud rates, you may not want the background ISR running anyway.&lt;br /&gt;
&lt;br /&gt;
== Flow Control ==&lt;br /&gt;
&lt;br /&gt;
The Model T has full support in hardware for the CTS and RTS flow control lines. In the BASIC ROM, however, it is not implemented. Instead the BASIC ROM relies on slow, kludgy XON/XOFF character escapes. This makes it difficult to transmit or receive binary files since the XON/XOFF characters are reserved for flow control.&lt;br /&gt;
&lt;br /&gt;
Since we are discussing direct control of the UART, we can do better and implement full flow control.&lt;br /&gt;
&lt;br /&gt;
=== Detect Clear to Send (CTS) ===&lt;br /&gt;
&lt;br /&gt;
The CTS line is an input to the Model 100. It indicates whether the device attached to the serial port (or the remote equipment behind it) has room to accept new characters. The device can &amp;quot;flow off&amp;quot; the Model T when its receive buffers are full.&lt;br /&gt;
&lt;br /&gt;
Implementing CTS is easy. The following code performs a busy wait on CTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAITCTS:	IN	$BB&lt;br /&gt;
		CMA&lt;br /&gt;
		ANI	$10&lt;br /&gt;
		JZ	WAITCTS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTS line is read from bit #5 of I/O address 0xBB. Note that it is inverted; if it is 0, the device is signalling &amp;quot;clear to send.&amp;quot; If 1, the device is attempting to flow us off from transmitting.&lt;br /&gt;
&lt;br /&gt;
=== Request Peer to Send (RTS) ===&lt;br /&gt;
&lt;br /&gt;
The RTS line is an output from the Model 100 to the device connected on the serial port. It is a signal  &amp;quot;requesting&amp;quot; the device to send (or not to send). From the other point of view, the device should transmit if and only if RTS is high. Note that from the device perspective, it sees our RTS as its CTS.&lt;br /&gt;
&lt;br /&gt;
If the device implements hardware flow control, it will not send if our RTS (and probably DTR) signals are low. So, at least we will want to set these two bits.&lt;br /&gt;
&lt;br /&gt;
The RTS and DTR lines are located on I/O register 0xBA (186). To assert RTS, clear the bit #7 of 0xBA (set to 0). To deassert RTS, set bit #7 of 0xBA to 1. Similarly for DTR, except that it is Bit #6.&lt;br /&gt;
&lt;br /&gt;
The following code sample sets RTS corresponding to high and low watermarks of the serial buffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Assert RTS if the low water mark is passed (pressure relieved)&lt;br /&gt;
CHECK_LOW_WATER:	CPI		10&lt;br /&gt;
			JNC		EXIT_LOW_WATER&lt;br /&gt;
ASSERT_RTS:		IN		$BA&lt;br /&gt;
			ANI		$7F&lt;br /&gt;
			OUT		$BA&lt;br /&gt;
EXIT_LOW_WATER:		POP		PSW&lt;br /&gt;
			RET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Deassert RTS if high water mark is exceeded (high pressure)&lt;br /&gt;
CHECK_HIGH_WATER:	CPI		40&lt;br /&gt;
			JC		EXIT_HIGH_WATER&lt;br /&gt;
DEASSERT_RTS:		IN		$BA&lt;br /&gt;
			ORI		$80&lt;br /&gt;
			OUT		$BA&lt;br /&gt;
EXIT_HIGH_WATER:	POP		PSW&lt;br /&gt;
			RET&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handling Communication Errors ==&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== I/O Map ==&lt;br /&gt;
&lt;br /&gt;
Here, for reference, is the serial I/O map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-width: thin; border-style: solid; border-color: blue; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Direction&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Port&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RX&amp;lt;/td&amp;gt;  &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$C8 (200)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;RTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 7&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;CTS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DSR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Input&amp;lt;/td&amp;gt;    &amp;lt;td&amp;gt;$BB (187), bit 5&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DTR&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Output&amp;lt;/td&amp;gt;   &amp;lt;td&amp;gt;$BA (186), bit 6&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nb: sense on DSR, CTS seem to be inverted. So CTS ==0 means that it is OK to transmit. A &#039;1&#039; means the device is flowing the Model T off.&lt;br /&gt;
&lt;br /&gt;
nb: Port &amp;lt;code&amp;gt;$BA&amp;lt;/code&amp;gt; is called &amp;quot;Port B&amp;quot; in the Model 100 Technical Reference. It has other functions than UART control, including the critical Power On/Off line. See [[Model 100 Port B]] for the breakdown.&lt;br /&gt;
&lt;br /&gt;
Direction indicates both data flow, and whether to use an &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; instruction to read/write to the given pin.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=A_Simple_Self-Charger_for_the_Model_100&amp;diff=1926</id>
		<title>A Simple Self-Charger for the Model 100</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=A_Simple_Self-Charger_for_the_Model_100&amp;diff=1926"/>
		<updated>2010-01-04T21:51:34Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Simple Self-Charger for the 100&lt;br /&gt;
BY JOHN L. MENKE AND SUSAN M. MENKE&lt;br /&gt;
&lt;br /&gt;
The Model 100 is easy to use, powerful and lightweight. It also eats batteries.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of hand-feeding it every few hours, you can modify its dietary habits to self-charge. All you need are a resistor, a power line adapter (current retail cost $5.95) and a quartet of rechargeable batteries.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve owned your machine for 90 days, its warranty expires and this modification won&#039;t affect it. If your warranty is still in force, &lt;br /&gt;
we point out that Radio Shack does not recommend what we&#039;re about to describe. However, we&#039;ve had no problems with our two machines over several years of use.&lt;br /&gt;
&lt;br /&gt;
RECHARGEABLE BATTERIES Rechargeable nickel-cadmium (nicad) batteries have a nominal voltage of 1.2 volts (V). This remains virtually constant as the cell discharges, then drops quickly to near zero. Four such batteries give the Model 100 a combined voltage of 4.8 volts, which is lower than the recommended 6.0V. The 100 will shut itself off if voltage drops slightly below 4.8V. In spite of this relatively narrow voltage band, we have never experienced problems from low power shutdown.&lt;br /&gt;
&lt;br /&gt;
We have tried several brands of nicads. All give about 8-10 hours of use when fully Charged. Makers recommend occasionally letting the cells run all the way down before recharging. Our experience is that repeated partial discharge (or extensive use of trickle charging) will reduce charge life to 4-5 hours. One or two cycles of full discharge/recharge restores the 8-10 hour useful life.&lt;br /&gt;
&lt;br /&gt;
We have used the same nicads for hundreds of cycles over two years without evident degradation. Aside from the relatively limited life of each recharge, the only noticeable effect is a very short warning time after the lowbattery light comes on, before the 100 shuts itself off.&lt;br /&gt;
&lt;br /&gt;
Different brands of nicads have slightly different dimensions. The positive tips of Radio Shack nicads are somewhat shorter than those of other makers such as Lynacharge, so use of the Radio Shack cell can lead to poor positive contact and intermittent operation. If you experience this, the best solution is to switch to a different brand of nicad. However, it&#039;s possible to use needlenose pliers and partially uncoil the 100&#039;s positive spring terminals for better contact.&lt;br /&gt;
&lt;br /&gt;
HOW TO ADD THE SELF CHARGER RESISTOR&lt;br /&gt;
&lt;br /&gt;
You probably wonder, as we do, why all portable computers don&#039;t have built in rechargeable power supplies. Radio Shack has been consistently guilty of this fault, and even compounds it with new battery-puwered products that lack automatic shutoff.&lt;br /&gt;
&lt;br /&gt;
However, if you have ten minutes and twenty cents, you can wire in a resistor (without soldering) that will recharge your IOU overnight from a power line adapter.&lt;br /&gt;
&lt;br /&gt;
We repeat: This change may invalidate your 90-day warranty if still in effect.but there is virtually no risk from adding a resistor, nor will it make troubleshooting difficult if your machine should ever need repair. Simply removing the resistor before sending the 100 for service will avoid any issue being raised.     .&lt;br /&gt;
&lt;br /&gt;
The resistor you need for self-charging is a 47 ohm, 1/4 watt resistor which you can find at any electronics or TV repair store. A resistor twenty percent above or below those values will still work.&lt;br /&gt;
&lt;br /&gt;
With the 100 turned off, place it facedown on a smooth surface to avoid scratching the screen. The screen should be facing away from you. Using a Phillips screwdriver, fully loosen the four recessed corner screws. Then turn the computer over to the left. As you do so, the screws will fall out - don&#039;t loose them. Clips holding the front and back together can be loosened with your fingernail. Now lift the left side of the front and fold it part way over to the right. Look at all the neat parts inside, but don&#039;t touch!&lt;br /&gt;
&lt;br /&gt;
With the accompanying photograph as a guide, find the plug location for insertion of your 47 ohm resistor. Using cutting pliers or scissors, trim the two wire leads of the resistor down to abou t 1/2 inch. Now bend the wire leads into a U-shape with needle nose pliers, and insert the leads into the recesses along with the orange and red wires as shown. (Yes, we are cheating by using the existing terminals without asking you to solder in new ones) Make sure the resistor is firmly mounted and will not touch or interfere with other parts.&lt;br /&gt;
&lt;br /&gt;
Now fold the 100&#039;s front into place, make sure it seats all around, insert the screws and tighten them snugly in the recessed holes. That&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
USE AND PRECAUTIONS&lt;br /&gt;
&lt;br /&gt;
When you first put in your rechargeable nicads, it will take overnight to charge them fully. The 100 can be in use or not while charging.&lt;br /&gt;
&lt;br /&gt;
With a little practice, you will learn how often your batteries need a charge. In an emergency, you can always replace them with regular batteries. But don&#039;t use the power line adapter with regular batteries except in dire emergency, because they don&#039;t charge properly.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: Don&#039;t leave the power line adapter plugged into the computer without power at the other end. That will discharge the nicads. However, there&#039;s no need to worry about the memory backup battery. This change has no effect on it at all.&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to enjoy all the benefits you&#039;ve gained from ten minutes of work. You&#039;ve seen the guts of your 100, and you won&#039;t have to change batteries for years to come. Freedom! D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The arrow points to the location of your 47 ohm resistor. Trim the resistor&#039;s two wire leads down to about l” inch and insert into recesses along with the orange and red wires.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=8085_Reference&amp;diff=1920</id>
		<title>8085 Reference</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=8085_Reference&amp;diff=1920"/>
		<updated>2009-11-28T00:19:24Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H1&amp;gt;8085 Instruction Mnemonic Meanings&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;H2 &amp;gt;Data Transfer Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2 | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|  | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4 | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3 | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;dreg, sreg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOVe&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg, byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;drp, srp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe eXtended-register (pseudo for high &amp;amp;amp;&lt;br /&gt;
			low MOVs)&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp, word&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load eXtended-register Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XCHG&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXCHanGe hl with de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STore Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Arithmetic Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2 | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4 | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3 | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd with Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ACI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Add with Carry Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUBtract&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUbtract Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SuBtract with Borrow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Subtract with Borrow Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Decimal Adjust Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Dual-register ADd to hl&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLMBC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL Minus BC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DEHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from HL plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DESP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from SP plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Logical Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMPare&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ComPare Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SeT Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Shift HL Right&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Right through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RLC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Left Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RRC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Right Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RDEL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate DE Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Stack, Input/Output, &amp;amp;amp; Machine Control Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH on stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP off stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SPHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Stack Pointer from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XTHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXchange Top of stack with HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;IN&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INput from port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUTput to port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Disable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;EI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Enable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;[[8085 RIM Instruction|RIM]]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Read Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Set Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;NOP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;No OPeration&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HaLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Branch Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JuMP unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL unconditioanl&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RET&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RETurn unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PCHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Program Counter from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;n&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RSTV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart if oVerflow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H1 &amp;gt;8085 Instruction Actions by Functional Group&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;H2 &amp;gt;Data Transfer Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2 % | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4 % | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3 % | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;dreg, sreg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;dreg&amp;amp;lt;=sreg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg, byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;amp;lt;=byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;drp, srp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;drp&amp;amp;lt;=srp (pseudo for high &amp;amp;amp; low MOVs)&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp, word&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;amp;lt;=word&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XCHG&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=DE while DE&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=b[addr]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;b[addr]&amp;amp;lt;=A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=b[BC]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;b[BC]&amp;amp;lt;=A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=b[DE]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;b[DE]&amp;amp;lt;=A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=w[addr]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;w[addr]&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=w[DE]&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;w[DE]&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Arithmetic Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A+reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A+byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A+reg+Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ACI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A+byte+Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A-reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A-byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A-reg-Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A-byte-Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;in A3..A0 and A7..A4: if &amp;amp;gt;9 then +6, carry&lt;br /&gt;
			to next&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;amp;lt;=reg+1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;amp;lt;=rp+1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;amp;lt;=reg-1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;amp;lt;=rp-1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=HL+rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLMBC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=HL-BC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DEHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE&amp;amp;lt;=HL+byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DESP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE&amp;amp;lt;=SP+byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Branch Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=1 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=0 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=0 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=1 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=1 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=0 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if TSf=1 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if TSf=0 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=1 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=0 then PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3, PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=1 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=0 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=0 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=1 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=1 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=0 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=1 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=0 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+3,&lt;br /&gt;
			PC&amp;amp;lt;=label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RET&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=1 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Zf=0 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=0 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Sf=1 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=1 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Cf=0 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=1 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if Pf=0 then PC&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PCHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PC&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;n&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+1, PC&amp;amp;lt;=n*8 where n&lt;br /&gt;
			is 0 to 7&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RSTV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;if OVf=1 then SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=PC+1,&lt;br /&gt;
			PC&amp;amp;lt;=8*8&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Logical Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2 | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4 | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3 | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;T&amp;amp;lt;=A-reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;T&amp;amp;lt;=A-byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=1&#039;s complement of A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Cf&amp;amp;lt;=1&#039;s complement of Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Cf&amp;amp;lt;=1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=HL/2 while H6&amp;amp;lt;=H7 (extend sign) and&lt;br /&gt;
			Cf&amp;amp;lt;=L0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A AND reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A AND byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A Inclusive OR reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A Inclusive OR byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A Exclusive OR reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A Exclusive OR byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A*2 where Cf&amp;amp;lt;=A7 while A0&amp;amp;lt;=Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=A/2 where Cf&amp;amp;lt;=A0 while A7&amp;amp;lt;=Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RLC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A7..A1&amp;amp;lt;=A6..A0 while A0&amp;amp;lt;=A7 and Cf&amp;amp;lt;=A7&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RRC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A6..A0&amp;amp;lt;=A7..A1 while A7&amp;amp;lt;=A0 and Cf&amp;amp;lt;=A0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RDEL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE&amp;amp;lt;=DE*2 where: Cf&amp;amp;lt;=DE15 while DE00&amp;amp;lt;=Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2&amp;gt;Stack, Input/Output, &amp;amp;amp; Machine Control Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SP&amp;amp;lt;=SP-2, w[SP]&amp;amp;lt;=rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;amp;lt;=w[SP], SP&amp;amp;lt;=SP+2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SPHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SP&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XTHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL&amp;amp;lt;=w[SP] while w[SP]&amp;amp;lt;=HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;IN&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=data from port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;data to port&amp;amp;lt;=A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;disable interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;EI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;enable interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;A&amp;amp;lt;=interrupt mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;interrupt mask&amp;amp;lt;=A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;NOP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;do nothing&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;halt 8085 processor&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H1  STYLE=&amp;quot;page-break-before: always&amp;quot;&amp;gt;8085 Instructions by Mnemonic&amp;lt;/H1&amp;gt;&lt;br /&gt;
{|  BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|  COLSPAN=4  | &amp;lt;P&amp;gt;Flags&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=3  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Zf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Cf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Pf&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;Sf&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ACI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Add with Carry Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd with Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMPare&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ComPare Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Decimal Adjust Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Dual-register ADd to hl&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DEHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from HL plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DESP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from SP plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Disable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;EI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Enable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLMBC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL Minus BC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HaLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;IN&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INput from port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JuMP unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp, word&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load eXtended-register Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;dreg, sreg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOVe&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg, byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;drp, srp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe eXtended-register (pseudo for high &amp;amp;amp;&lt;br /&gt;
			low MOVs)&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;NOP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;No OPeration&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUTput to port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PCHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Program Counter from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP off stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH on stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Right through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RDEL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate DE Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RET&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RETurn unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Read Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RLC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Left Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RRC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Right Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;n&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RSTV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart if oVerflow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SuBtract with Borrow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Subtract with Borrow Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Shift HL Right&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Set Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SPHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Stack Pointer from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STore Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SeT Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;1&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUBtract&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUbtract Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XCHG&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXCHanGe hl with de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;x&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XTHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXchange Top of stack with HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H1  STYLE=&amp;quot;page-break-before: always&amp;quot;&amp;gt;8085 Machine&lt;br /&gt;
Cycles by Functional Group&amp;lt;/H1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Data Transfer Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2 | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Essential Cycles +register M involved or&lt;br /&gt;
			condition Met&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;EC +MM&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;Cycles&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;dreg, sreg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOVe&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg, byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;drp, srp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MoVe eXtended-register (pseudo for high &amp;amp;amp;&lt;br /&gt;
			low MOVs)&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;--&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp, word&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load eXtended-register Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XCHG&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXCHanGe hl with de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;13&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STore Accumulator direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;13&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register Bc&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LoaD Accumulator indirect via eXtended-register&lt;br /&gt;
			De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store Accumulator indirect via&lt;br /&gt;
			eXtended-register De&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;16&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;addr&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Direct&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;16&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Load HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Store HL Indirect via extended register de&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Arithmetic Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot; &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Essential Cycles +register M involved or&lt;br /&gt;
			condition Met&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;EC +MM&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;Cycles&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADd with Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ACI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Add with Carry Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUBtract&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUbtract Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SuBtract with Borrow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Subtract with Borrow Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Decimal Adjust Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INcrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement Register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DeCrement eXtended-register&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Dual-register ADd to hl&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLMBC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HL Minus BC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DEHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from HL plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DESP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DE from SP plus byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Logical Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Essential Cycles +register M involved or&lt;br /&gt;
			condition Met&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;EC +MM&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;Cycles&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMPare&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ComPare Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CoMplement Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;STC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SeT Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Shift HL Right&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANd Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;reg&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Accumulator&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;byte&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXclusive oR Immediate&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate Accumulator Right through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RLC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Left Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RRC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate accumulator Right Circular&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RDEL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Rotate DE Left through carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Stack, Input/Output, &amp;amp;amp; Machine Control Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Essential Cycles +register M involved or&lt;br /&gt;
			condition Met&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;EC +MM&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;Cycles&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH on stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;12&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;rp&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP off stack&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SPHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Stack Pointer from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;XTHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;eXchange Top of stack with HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;16&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;IN&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INput from port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUTput to port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;DI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Disable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;EI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Enable Interrupts&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Read Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;SIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Set Interrupt Mask&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;NOP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;No OPeration&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;04&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HaLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;05&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H2 &amp;gt;Branch Group&amp;lt;/H2&amp;gt;&lt;br /&gt;
{| BORDER=1 WIDTH=70% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Essential Cycles +register M involved or&lt;br /&gt;
			condition Met&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;EC +MM&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  COLSPAN=2  | &amp;lt;P&amp;gt;Instruction&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Mnemonic Meaning&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;Cycles&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JMP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JuMP unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JTP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if True sign Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Jump if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;07 +03&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;18&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;label&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Call if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;09 +09&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RET&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RETurn unconditional&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;10&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Zero&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Positive&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Minus&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if No Carry&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Even&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Return if Parity Odd&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;PCHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;Program Counter from HL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;n&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;12&amp;lt;/P&amp;gt;&lt;br /&gt;
|-  VALIGN=TOP&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RSTV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ReSTart if oVerflow&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=RIGHT&amp;gt;06 +06&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H1 &amp;gt;8085 Instruction Mnemonics by Op-code&amp;lt;/H1&amp;gt;&lt;br /&gt;
{| BORDER=&amp;quot;1&amp;quot; WIDTH=100% style=&amp;quot;font-size:70%&amp;quot;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x0h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x1h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x2h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x3h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x4h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x5h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x6h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x7h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x8h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;x9h&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xAh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xBh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xCh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xDh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xEh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P  ALIGN=CENTER STYLE=&amp;quot;margin-left: -0.04in&amp;quot;&amp;gt;xFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;00h-0Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;NOP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI B,w&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI B,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RLC&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;  | &amp;lt;P&amp;gt;DSUB&amp;lt;br/&amp;gt;HLMBC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI C,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RRC&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;10h-1Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;  | &amp;lt;P&amp;gt;ARHL&amp;lt;br/&amp;gt;RRHL&amp;lt;br/&amp;gt;SHLR&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI D,w&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STAX D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI D,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAL&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;   | &amp;lt;P&amp;gt;RDEL&amp;lt;br/&amp;gt;RLDE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDAX D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI E,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RAR&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;20h-2Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI H,w&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SHLD @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI H,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAA&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;   | &amp;lt;P&amp;gt;DEHL b&amp;lt;br/&amp;gt;LDHI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LHLD @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI L,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMA&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;30h-3Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SIM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LXI SP,w&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STA @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INX SP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI M,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;STC&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;   | &amp;lt;P&amp;gt;DESP b&amp;lt;br/&amp;gt;LDSI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DAD SP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;LDA @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCX SP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;INR A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DCR A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MVI A,b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMC&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;40h-4Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV B,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV C,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;50h-5Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV D,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV E,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;60h-6Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV H,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV L,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;70h-7Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;HLT&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV M,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;MOV A,A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;80h-8Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADD A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADC A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;90h-9Fh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUB A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBB A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;A0h-AFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANA A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRA A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;B0h-BFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORA A&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP C&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP E&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP L&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP M&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CMP A&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;COh-CFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNZ @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JMP @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNZ @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH B&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ADI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 0&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RZ&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RET&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JZ @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RSTV&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CZ @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CALL @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ACI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 1&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;D0h-DFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RNC&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JNC @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;OUT port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CNC @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH D&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SUI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 2&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RC&amp;lt;/P&amp;gt;&lt;br /&gt;
|  style=&amp;quot;background:lightgreen; color:black&amp;quot;  | &amp;lt;P&amp;gt;SHLX&amp;lt;br/&amp;gt;SHLDE&amp;lt;br/&amp;gt;SHLI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JC @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;IN port&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CC @&amp;lt;/P&amp;gt;&lt;br /&gt;
|  style=&amp;quot;background:lightgreen; color:black&amp;quot;  | &amp;lt;P&amp;gt;JNX5 @&amp;lt;br/&amp;gt;JNK @&amp;lt;br/&amp;gt;JTP @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SBI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 3&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;E0h-EFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPO&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPO @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XTHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPO @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH H&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ANI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 4&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RPE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PCHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JPE @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XCHG&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPE @&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;   | &amp;lt;P&amp;gt;LHLI&amp;lt;br/&amp;gt;LHLX&amp;lt;br/&amp;gt;LHLDE&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;XRI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 5&amp;lt;/P&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|   | &amp;lt;P&amp;gt;F0h-FFh&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RP&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;POP PSW&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JP @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;DI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CP @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;PUSH PSW&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;ORI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 6&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RM&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;SPHL&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;JM @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;EI&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CM @&amp;lt;/P&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:lightgreen; color:black&amp;quot;   | &amp;lt;P&amp;gt;JX5 @&amp;lt;br/&amp;gt;JK @&amp;lt;br/&amp;gt;JTM @&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;CPI b&amp;lt;/P&amp;gt;&lt;br /&gt;
|   | &amp;lt;P&amp;gt;RST 7&amp;lt;/P&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1917</id>
		<title>Model T to OSX Serial Communications</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1917"/>
		<updated>2009-11-11T07:11:54Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Terminal Program Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mac Serial Ports ==&lt;br /&gt;
&lt;br /&gt;
On the Mac, your only option is likely to be a USB-&amp;gt;Serial adapter for a serial port. There&#039;s nothing special about USB -&amp;gt; RS232 serial ports vs. the usual&lt;br /&gt;
PC com ports. Don&#039;t worry about it any more than you would regular com&lt;br /&gt;
port.&lt;br /&gt;
&lt;br /&gt;
== Cable up ==&lt;br /&gt;
&lt;br /&gt;
One issue you do need to care about is cabling. To connect a Mac to a&lt;br /&gt;
M100 you need a &amp;quot;null modem&amp;quot; cable, not a straight-through wired&lt;br /&gt;
cable.&lt;br /&gt;
&lt;br /&gt;
I highly recommend the Belkin Serial Laplink cable F3X171-10.&lt;br /&gt;
&lt;br /&gt;
They are usually available on the web for &amp;lt;$15. You will need a DB-25 M - M gender&lt;br /&gt;
changer adapter to go with it since the Model T&#039;s have female gender serial ports.&lt;br /&gt;
&lt;br /&gt;
== Terminal Program Configuration ==&lt;br /&gt;
&lt;br /&gt;
You will need a serial terminal program on your Macintosh. One popular terminal program is [http://homepage.mac.com/dalverson/zterm ZTerm].&lt;br /&gt;
&lt;br /&gt;
Next, you need to get the line parameters to match.&lt;br /&gt;
&lt;br /&gt;
That means your Mac terminal program should be set to:&lt;br /&gt;
&lt;br /&gt;
Appropiate communications device name&lt;br /&gt;
600 baud&lt;br /&gt;
8 data bits&lt;br /&gt;
No parity&lt;br /&gt;
1 stop bit&lt;br /&gt;
Flow control DISABLED&lt;br /&gt;
&lt;br /&gt;
I suggest starting at 600 baud and working your way up.&lt;br /&gt;
&lt;br /&gt;
== Model 100 Configuration ==&lt;br /&gt;
&lt;br /&gt;
To match, in TELCOM use the STAT command:&lt;br /&gt;
&lt;br /&gt;
STAT 48N1D&amp;lt;ENTER&amp;gt;&lt;br /&gt;
TERM&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Try It Out ==&lt;br /&gt;
&lt;br /&gt;
At this point, you should be able to be able to type characters on one&lt;br /&gt;
side and see them on the other. If garbage shows up, you may have a&lt;br /&gt;
mismatched parameter.&lt;br /&gt;
&lt;br /&gt;
== Tuning For Speed and Reliability ==&lt;br /&gt;
&lt;br /&gt;
The parameters given above are fairly conservative to make communication reliable with the least number of moving parts. But it&#039;s not terribly fast. If you can get flow control working, you should be able to achieve higher baud rates.&lt;br /&gt;
&lt;br /&gt;
Once you have some success with the setup recommended above, you can experiment&lt;br /&gt;
with increasing the baud rate and turning on software flow control&lt;br /&gt;
(XON/XOFF) on both sides.&lt;br /&gt;
&lt;br /&gt;
== Moving Up ==&lt;br /&gt;
&lt;br /&gt;
Straight ASCII transfers work but more feature-filled systems exist. If you have a REX, dedicated TS-DOS ROM chip, or wish to bootstrap TEENY, you can directly transfer text and binary files and perform those transfers reliably at very high speeds.&lt;br /&gt;
&lt;br /&gt;
To do so you need to use a TPDD (Tandy Portable Disk Drive) emulator. There are two which are compatible with OSX:&lt;br /&gt;
&lt;br /&gt;
* [[HOWTO: DLPlus on OSX|DLPlus]]&lt;br /&gt;
* [[LaddieCon|LaddieAlpha]]&lt;br /&gt;
&lt;br /&gt;
These applications let serve files to your M100 from a directory of your choosing on the Mac. The transfer operations are under direct control from your Model T keyboard. That means once DLPlus or LaddieAlpha are started, you &amp;quot;drive&amp;quot; completely from the M100 side&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1916</id>
		<title>Model T to OSX Serial Communications</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1916"/>
		<updated>2009-11-11T06:25:41Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Cable up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mac Serial Ports ==&lt;br /&gt;
&lt;br /&gt;
On the Mac, your only option is likely to be a USB-&amp;gt;Serial adapter for a serial port. There&#039;s nothing special about USB -&amp;gt; RS232 serial ports vs. the usual&lt;br /&gt;
PC com ports. Don&#039;t worry about it any more than you would regular com&lt;br /&gt;
port.&lt;br /&gt;
&lt;br /&gt;
== Cable up ==&lt;br /&gt;
&lt;br /&gt;
One issue you do need to care about is cabling. To connect a Mac to a&lt;br /&gt;
M100 you need a &amp;quot;null modem&amp;quot; cable, not a straight-through wired&lt;br /&gt;
cable.&lt;br /&gt;
&lt;br /&gt;
I highly recommend the Belkin Serial Laplink cable F3X171-10.&lt;br /&gt;
&lt;br /&gt;
They are usually available on the web for &amp;lt;$15. You will need a DB-25 M - M gender&lt;br /&gt;
changer adapter to go with it since the Model T&#039;s have female gender serial ports.&lt;br /&gt;
&lt;br /&gt;
== Terminal Program Configuration ==&lt;br /&gt;
&lt;br /&gt;
Next, you need to get the line parameters to match.&lt;br /&gt;
&lt;br /&gt;
That means your Mac terminal program should be set to:&lt;br /&gt;
&lt;br /&gt;
Appropiate communications device name&lt;br /&gt;
600 baud&lt;br /&gt;
8 data bits&lt;br /&gt;
No parity&lt;br /&gt;
1 stop bit&lt;br /&gt;
Flow control DISABLED&lt;br /&gt;
&lt;br /&gt;
I suggest starting at 600 baud and working your way up.&lt;br /&gt;
&lt;br /&gt;
== Model 100 Configuration ==&lt;br /&gt;
&lt;br /&gt;
To match, in TELCOM use the STAT command:&lt;br /&gt;
&lt;br /&gt;
STAT 48N1D&amp;lt;ENTER&amp;gt;&lt;br /&gt;
TERM&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Try It Out ==&lt;br /&gt;
&lt;br /&gt;
At this point, you should be able to be able to type characters on one&lt;br /&gt;
side and see them on the other. If garbage shows up, you may have a&lt;br /&gt;
mismatched parameter.&lt;br /&gt;
&lt;br /&gt;
== Tuning For Speed and Reliability ==&lt;br /&gt;
&lt;br /&gt;
The parameters given above are fairly conservative to make communication reliable with the least number of moving parts. But it&#039;s not terribly fast. If you can get flow control working, you should be able to achieve higher baud rates.&lt;br /&gt;
&lt;br /&gt;
Once you have some success with the setup recommended above, you can experiment&lt;br /&gt;
with increasing the baud rate and turning on software flow control&lt;br /&gt;
(XON/XOFF) on both sides.&lt;br /&gt;
&lt;br /&gt;
== Moving Up ==&lt;br /&gt;
&lt;br /&gt;
Straight ASCII transfers work but more feature-filled systems exist. If you have a REX, dedicated TS-DOS ROM chip, or wish to bootstrap TEENY, you can directly transfer text and binary files and perform those transfers reliably at very high speeds.&lt;br /&gt;
&lt;br /&gt;
To do so you need to use a TPDD (Tandy Portable Disk Drive) emulator. There are two which are compatible with OSX:&lt;br /&gt;
&lt;br /&gt;
* [[HOWTO: DLPlus on OSX|DLPlus]]&lt;br /&gt;
* [[LaddieCon|LaddieAlpha]]&lt;br /&gt;
&lt;br /&gt;
These applications let serve files to your M100 from a directory of your choosing on the Mac. The transfer operations are under direct control from your Model T keyboard. That means once DLPlus or LaddieAlpha are started, you &amp;quot;drive&amp;quot; completely from the M100 side&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1915</id>
		<title>Model T to OSX Serial Communications</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Model_T_to_OSX_Serial_Communications&amp;diff=1915"/>
		<updated>2009-11-11T06:20:13Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: New page: == Mac Serial Ports ==  On the Mac, your only option is likely to be a USB-&amp;gt;Serial adapter for a serial port. There&amp;#039;s nothing special about USB -&amp;gt; RS232 serial ports vs. the usual PC com p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mac Serial Ports ==&lt;br /&gt;
&lt;br /&gt;
On the Mac, your only option is likely to be a USB-&amp;gt;Serial adapter for a serial port. There&#039;s nothing special about USB -&amp;gt; RS232 serial ports vs. the usual&lt;br /&gt;
PC com ports. Don&#039;t worry about it any more than you would regular com&lt;br /&gt;
port.&lt;br /&gt;
&lt;br /&gt;
== Cable up ==&lt;br /&gt;
&lt;br /&gt;
One issue you do need to care about is cabling. To connect a Mac to a&lt;br /&gt;
M100 you need a &amp;quot;null modem&amp;quot; cable, not a straight-through wired&lt;br /&gt;
cable. I suggest a Belkin Serial Laplink cable. They are usually&lt;br /&gt;
available on the web for &amp;lt;$15. You will need a DB-25 M - M gender&lt;br /&gt;
changer adapter to go with it.&lt;br /&gt;
&lt;br /&gt;
== Terminal Program Configuration ==&lt;br /&gt;
&lt;br /&gt;
Next, you need to get the line parameters to match.&lt;br /&gt;
&lt;br /&gt;
That means your Mac terminal program should be set to:&lt;br /&gt;
&lt;br /&gt;
Appropiate communications device name&lt;br /&gt;
600 baud&lt;br /&gt;
8 data bits&lt;br /&gt;
No parity&lt;br /&gt;
1 stop bit&lt;br /&gt;
Flow control DISABLED&lt;br /&gt;
&lt;br /&gt;
I suggest starting at 600 baud and working your way up.&lt;br /&gt;
&lt;br /&gt;
== Model 100 Configuration ==&lt;br /&gt;
&lt;br /&gt;
To match, in TELCOM use the STAT command:&lt;br /&gt;
&lt;br /&gt;
STAT 48N1D&amp;lt;ENTER&amp;gt;&lt;br /&gt;
TERM&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Try It Out ==&lt;br /&gt;
&lt;br /&gt;
At this point, you should be able to be able to type characters on one&lt;br /&gt;
side and see them on the other. If garbage shows up, you may have a&lt;br /&gt;
mismatched parameter.&lt;br /&gt;
&lt;br /&gt;
== Tuning For Speed and Reliability ==&lt;br /&gt;
&lt;br /&gt;
The parameters given above are fairly conservative to make communication reliable with the least number of moving parts. But it&#039;s not terribly fast. If you can get flow control working, you should be able to achieve higher baud rates.&lt;br /&gt;
&lt;br /&gt;
Once you have some success with the setup recommended above, you can experiment&lt;br /&gt;
with increasing the baud rate and turning on software flow control&lt;br /&gt;
(XON/XOFF) on both sides.&lt;br /&gt;
&lt;br /&gt;
== Moving Up ==&lt;br /&gt;
&lt;br /&gt;
Straight ASCII transfers work but more feature-filled systems exist. If you have a REX, dedicated TS-DOS ROM chip, or wish to bootstrap TEENY, you can directly transfer text and binary files and perform those transfers reliably at very high speeds.&lt;br /&gt;
&lt;br /&gt;
To do so you need to use a TPDD (Tandy Portable Disk Drive) emulator. There are two which are compatible with OSX:&lt;br /&gt;
&lt;br /&gt;
* [[HOWTO: DLPlus on OSX|DLPlus]]&lt;br /&gt;
* [[LaddieCon|LaddieAlpha]]&lt;br /&gt;
&lt;br /&gt;
These applications let serve files to your M100 from a directory of your choosing on the Mac. The transfer operations are under direct control from your Model T keyboard. That means once DLPlus or LaddieAlpha are started, you &amp;quot;drive&amp;quot; completely from the M100 side&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1914</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1914"/>
		<updated>2009-11-11T02:20:07Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Relax and Unwind */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px darkgray solid; margin: auto 2in auto 2in&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^BKSP || Delete prior word (NEW feature -- [[User:Jhoger|Jhoger]])&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px red solid;padding: 1em; background-color:lightyellow; margin: auto 3em auto 3em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This discussion is included for hysterical reasons; the program as it&lt;br /&gt;
currently exists no longer unwinds the stack.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The problem with the approach in the original TextStar was that it&lt;br /&gt;
&amp;quot;dropped&amp;quot; bytes from the stack and added them back in. This is a no-no.&lt;br /&gt;
Anything below the stack pointer is free space. Increasing the pointer value&lt;br /&gt;
(since the stack grows downward in RAM) effectively &amp;quot;deallocates&amp;quot;&lt;br /&gt;
the memory below the new pointer location. If a call is made, or an interrupt&lt;br /&gt;
occurs during this time, the free space will likely be overwritten.&lt;br /&gt;
So, it is not&lt;br /&gt;
safe to assume that the data will be there when you lower the stack pointer&lt;br /&gt;
position to include them again.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
I believe Stan was assuming that his &#039;&#039;DI&#039;&#039; (&#039;&#039;disable interrupts&#039;&#039;) instruction&lt;br /&gt;
would be sufficient to prevent the temporarily dropped bytes from being&lt;br /&gt;
corrupted; however, the TRAP non-maskable interrupt is not prevented&lt;br /&gt;
by DI. The result, I believe, was that power-off was causing the stack to get corrupted.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The unwind code has been replaced with logic that leverages the DESP instruction&lt;br /&gt;
to observe and modify the 5FF0 pointer on the stack without&lt;br /&gt;
the dangerous and unnecessary step of unwinding. The enable and disable&lt;br /&gt;
interrupt instructions were unnecessary and removed. Finally, additional registers (HL and PSW) are now preserved (and restored) since it wasn&#039;t obvious to me that it was safe to destroy them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
-- John (jhoger@pobox.com)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1913</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1913"/>
		<updated>2009-11-11T02:14:22Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Relax and Unwind */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px darkgray solid; margin: auto 2in auto 2in&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^BKSP || Delete prior word (NEW feature -- [[User:Jhoger|Jhoger]])&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px red solid;padding: 1em; background-color:lightyellow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This discussion is included for hysterical reasons; the program as it&lt;br /&gt;
currently exists no longer unwinds the stack.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The problem with the approach in the original TextStar was that it&lt;br /&gt;
&amp;quot;dropped&amp;quot; bytes from the stack and added them back in. This is a no-no.&lt;br /&gt;
Anything below the stack pointer is free space. Increasing the pointer value&lt;br /&gt;
(since the stack grows downward in RAM) effectively &amp;quot;deallocates&amp;quot;&lt;br /&gt;
the memory below the new pointer location. If a call is made, or an interrupt&lt;br /&gt;
occurs during this time, the free space will likely be overwritten.&lt;br /&gt;
So, it is not&lt;br /&gt;
safe to assume that the data will be there when you lower the stack pointer&lt;br /&gt;
position to include them again.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
I believe Stan was assuming that his &#039;&#039;DI&#039;&#039; (&#039;&#039;disable interrupts&#039;&#039;) instruction&lt;br /&gt;
would be sufficient to prevent the temporarily dropped bytes from being&lt;br /&gt;
corrupted; however, the TRAP non-maskable interrupt is not prevented&lt;br /&gt;
by DI. The result, I believe, was that power-off was causing the stack to get corrupted.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The unwind code has been replaced with logic that leverages the DESP instruction&lt;br /&gt;
to observe and modify the 5FF0 pointer on the stack without&lt;br /&gt;
the dangerous and unnecessary step of unwinding. The enable and disable&lt;br /&gt;
interrupt instructions were unnecessary and removed. Finally, additional registers (HL and PSW) are now preserved (and restored) since it wasn&#039;t obvious to me that it was safe to destroy them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
-- John (jhoger@pobox.com)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1912</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1912"/>
		<updated>2009-11-11T02:06:24Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Relax and Unwind */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px darkgray solid; margin: auto 2in auto 2in&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^BKSP || Delete prior word (NEW feature -- [[User:Jhoger|Jhoger]])&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px red solid;padding: 1em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This discussion is included for hysterical reasons; the program as it&lt;br /&gt;
currently exists no longer unwinds the stack.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The problem with the approach in the original TextStar was that it&lt;br /&gt;
&amp;quot;dropped&amp;quot; bytes from the stack and added them back in. This is a no-no.&lt;br /&gt;
Anything below the stack pointer is free space, and so it is not&lt;br /&gt;
safe to assume that the data will be there when you lower the stack pointer&lt;br /&gt;
position to include them again.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
I believe Stan was assuming that his &amp;quot;disable interrupts&amp;quot; instruction&lt;br /&gt;
would be sufficient to prevent the temporarily dropped bytes from being&lt;br /&gt;
corrupted; however, the TRAP non-maskable interrupt is not prevented&lt;br /&gt;
by DI. The result, I believe, was that power-off was causing the stack to get corrupted.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The unwind code has been replaced with logic that leverages the DESP instruction&lt;br /&gt;
to observe and modify the 5FF0 pointer on the stack without&lt;br /&gt;
the dangerous and unnecessary step of unwinding. The enable and disable&lt;br /&gt;
interrupt instructions were unnecessary and removed. Finally, the other registers were preserved (and restored) since it wasn&#039;t clear to me&lt;br /&gt;
that it was safe to destroy them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
-- John (jhoger@pobox.com)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1911</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1911"/>
		<updated>2009-11-11T00:58:48Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* Relax and Unwind */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px darkgray solid; margin: auto 2in auto 2in&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^BKSP || Delete prior word (NEW feature -- [[User:Jhoger|Jhoger]])&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px red solid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This discussion is included for hysterical reasons; the program as it&lt;br /&gt;
currently exists no longer unwinds the stack.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The problem with the approach in the original TextStar was that it&lt;br /&gt;
&amp;quot;dropped&amp;quot; bytes from the stack and added them back in. This is a no-no.&lt;br /&gt;
Anything below the stack pointer is free space, and so it is not&lt;br /&gt;
safe to assume that the data will be there when you lower the stack pointer&lt;br /&gt;
position to include them again.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
I believe Stan was assuming that his &amp;quot;disable interrupts&amp;quot; instruction&lt;br /&gt;
would be sufficient to prevent the temporarily dropped bytes from being&lt;br /&gt;
corrupted; however, the TRAP non-maskable interrupt is not prevented&lt;br /&gt;
by DI. The result, I believe, was that power-off was causing the stack to get corrupted.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The unwind code has been replaced with logic that leverages the DESP instruction&lt;br /&gt;
to observe and modify the 5FF0 pointer on the stack without&lt;br /&gt;
the dangerous and unnecessary step of unwinding. The enable and disable&lt;br /&gt;
interrupt instructions were unnecessary and removed. Finally, the other registers were preserved (and restored) since it wasn&#039;t clear to me&lt;br /&gt;
that it was safe to destroy them.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
-- John&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1907</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1907"/>
		<updated>2009-11-10T01:33:10Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* A Diamond in the Rough */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 3px darkgray solid; margin: auto 2in auto 2in&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1906</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1906"/>
		<updated>2009-11-10T01:27:22Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* A Diamond in the Rough */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Text Deletion&#039;&#039;&#039;&lt;br /&gt;
| ^G || Delete character under the cursor&lt;br /&gt;
|-&lt;br /&gt;
| ^T || Delete word&lt;br /&gt;
|-&lt;br /&gt;
| ^Y || Delete line&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
| ^KB || Mark start of block (same as F7)&lt;br /&gt;
|-&lt;br /&gt;
| ^KY || Delete block (same as F6)&lt;br /&gt;
|-&lt;br /&gt;
| ^KD || Exit TextStar to menu (same as F8)&lt;br /&gt;
|-&lt;br /&gt;
| ^QY || Delete to end of line&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1905</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1905"/>
		<updated>2009-11-10T01:12:59Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* A Diamond in the Rough */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;margin: 1em auto 1em auto;border:1px solid darkgray&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Cursor Movement&#039;&#039;&#039;&lt;br /&gt;
| ^D || Right one character&lt;br /&gt;
|- &amp;lt;bl/&amp;gt;&lt;br /&gt;
| ^F || Right one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QD || Right to end of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^S || Left one character&lt;br /&gt;
|-&lt;br /&gt;
| ^A || Left one word&lt;br /&gt;
|-&lt;br /&gt;
| ^QS || Left to beginning of current line&lt;br /&gt;
|-&lt;br /&gt;
| ^E || Up one line&lt;br /&gt;
|-&lt;br /&gt;
| ^QE || Top of screen, column 1&lt;br /&gt;
|-&lt;br /&gt;
| ^QR || Top of file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1904</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1904"/>
		<updated>2009-11-09T21:07:03Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 100 Classics]]&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1903</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1903"/>
		<updated>2009-11-09T21:04:00Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* INSIDE &amp;#039;&amp;#039;TextStar&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The mnemonic for this instruction is &#039;&#039;HLMBC&#039;&#039; in the &#039;&#039;ROM2&#039;&#039; assembler syntax and &#039;&#039;DSUB&#039;&#039; in the &#039;&#039;ADSM&#039;&#039; assembler. If defined instead as &#039;&#039;DB 8&#039;&#039;, as in Listing 1, all assemblers will support it.&lt;br /&gt;
&lt;br /&gt;
Sixteen-bit arithmetic on the 8085 is quite limited. This, and several other undocumented instructions, can save many instructions and make for easier programming.&lt;br /&gt;
&lt;br /&gt;
=== What A Character! ===&lt;br /&gt;
&lt;br /&gt;
At label &#039;&#039;WSTXT&#039;&#039;, we examine the keystroke. If the character is a control character, then we have to look for &amp;quot;our&amp;quot;&amp;quot; control characters. Otherwise, we pass control to ROM location 6005H for control characters and location 608AH for &amp;quot;normal&amp;quot; characters and process the keystrokes as if we had never been there.&lt;br /&gt;
&lt;br /&gt;
When we do find our control character, we simulate the commands that will implement the &#039;&#039;WordStar&#039;&#039; function. Look at the code for the &#039;&#039;^Y&#039;&#039; function (delete line) as an example.&lt;br /&gt;
&lt;br /&gt;
Multiple keystroke sequences, such as &#039;&#039;^KD&#039;&#039;, pose a more difficult problem. When a &#039;&#039;^K&#039;&#039; is typed, we can&#039;t act until we know what the next keystroke is. The solution is to set a flag indicating that the &#039;&#039;^K&#039;&#039; has been typed. On every kestroke we have to check the flag to see if a ^K is in effect.&lt;br /&gt;
&lt;br /&gt;
On a &#039;&#039;^KD&#039;&#039; ( or &#039;&#039;F8&#039;&#039;) exit command, we must restore RAM hooks to their original values and exit to the main menu by &#039;&#039;JMP&#039;&#039;ing to location 5797H. Failure to do so may result in a machine that feels very cool to the touch (i.e., COLD START!).&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1902</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1902"/>
		<updated>2009-11-09T20:57:02Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: /* INSIDE &amp;#039;&amp;#039;TextStar&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Can You Direct Me To... ? ===&lt;br /&gt;
&lt;br /&gt;
Okay, so now that we know what a RAM hook is, how do we use it? The first thing to do is save the original contents of the RAM hook at FADEH. Typically it is just a pointer to &#039;&#039;RET&#039;&#039; (address 7FF3H), but someone else might be using it, so we&#039;ll politely save it and restore it when we&#039;re done.&lt;br /&gt;
&lt;br /&gt;
Next, we put the address of our own code (we&#039;ll use the address &#039;&#039;TS1&#039;&#039;) into the hook. Now every time &#039;&#039;TEXT&#039;&#039; gets a keystroke, we get a peek at it first.&lt;br /&gt;
&lt;br /&gt;
=== Relax and Unwind ===&lt;br /&gt;
&lt;br /&gt;
Now that we can get a peek at a keystroke before &#039;&#039;TEXT&#039;&#039; does, what next?&lt;br /&gt;
&lt;br /&gt;
Other programs use the &#039;&#039;CHGET&#039;&#039; routine too. So we have to make sure that &#039;&#039;CHGET&#039;&#039; was invoked by &#039;&#039;TEXT&#039;&#039; and not another program. &#039;&#039;TEXT&#039;&#039; calls &#039;&#039;CHGET&#039;&#039; at address 5FEDH. (Actually it&#039;s called at 63F1H, from within a routine called by 5FEDH.) This means that there will be a &#039;&#039;RET&#039;&#039;urn to 5FF0H somewhere on the stack.&lt;br /&gt;
&lt;br /&gt;
When we get control via the FADEH RAM hook, the return address to &#039;&#039;TEXT&#039;&#039;, if it was called by &#039;&#039;TEXT&#039;&#039;, is 10 levels (20 bytes) down in the stack.&lt;br /&gt;
&lt;br /&gt;
So we have to unwind the stack 10 levels and see if the address 5FF0H is there. If it is, then &#039;&#039;CHGET&#039;&#039; was called from &#039;&#039;TEXT&#039;&#039; and this keystroke is for us. If not, then we must put everything back the way it was.&lt;br /&gt;
&lt;br /&gt;
How can a kestroke in &#039;&#039;TEXT&#039;&#039; not be for us? There are functions within &#039;&#039;TEXT&#039;&#039;, such as &#039;&#039;F1&#039;&#039; (&#039;&#039;Find&#039;&#039;) function, that require keyboard input separate form the main &#039;&#039;TEXT&#039;&#039; processing loop.&lt;br /&gt;
&lt;br /&gt;
The stack unwinding code is liberally borrowed from the &#039;&#039;TXT-OV.ASM&#039;&#039; program by James Yi and Paul Globman. The code uses an undocumented 8085 instruction that subtracts BC from HL and stores the result in HL.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HL &amp;amp;#x2190; HL - BC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1901</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1901"/>
		<updated>2009-11-09T17:55:19Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
== INSIDE &#039;&#039;TextStar&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The key to &#039;&#039;TextStar&#039;&#039;&#039;s operation is its ability to intercept keystrokes before &#039;&#039;TEXT&#039;&#039; sees them, by using a programming mechanism known as a &#039;&#039;RAM hook&#039;&#039;. Before I describe how &#039;&#039;TextStar&#039;&#039; uses RAM hooks, let&#039;s take a look at what &#039;&#039;TEXT&#039;&#039; does with your keystrokes.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;TEXT&#039;&#039; program is constructed as one big loop starting at ROM address 5DEEH. &#039;&#039;TEXT&#039; waits for your keystroke, gets it, and takes the appropriate action.&lt;br /&gt;
&lt;br /&gt;
It&#039;s interesting to note that near the beginning of &#039;&#039;TEXT&#039;&#039;, the program pushes the address of the top-of-the-&#039;&#039;TEXT&#039;&#039; loop onto the stack.&lt;br /&gt;
&lt;br /&gt;
Normal loops end with a &#039;&#039;JMP nnnn&#039;&#039; instruction, where &#039;&#039;nnnn&#039;&#039; is the address of the top of the loop. But by pushing the top-of-the-loop address on the stack, the program can instead simply execute a &#039;&#039;RET&#039;&#039; instruction from anywhere to get back to the start.&lt;br /&gt;
&lt;br /&gt;
This has two advantages. First, it saves memory for each loop return point. It needs only one byte for the &#039;&#039;RET&#039;&#039; instruction versus three for the &#039;&#039;JMP&#039;&#039;. Second, the code can be more easily relocated. If the code is, for some reason, changed and shifted in memory, then all the &#039;&#039;JMP&#039;&#039; instructions do not have to be recoded with the new top-of-the-loop address.&lt;br /&gt;
&lt;br /&gt;
=== Give &#039;em the Hook, the Hook ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TEXT&#039;&#039; uses a ROM routine known as &#039;&#039;CHGET&#039;&#039; (located at 12CBH) to wait for your next keystroke. The &#039;&#039;TEXT&#039;&#039; call to this &amp;quot;Tandy-documented&amp;quot; routine is at address 63F1H.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;CHGET&#039;&#039; makes use of a RAM hook. What&#039;s a RAM hook? Is it related to Captain Hook? Not really.&lt;br /&gt;
&lt;br /&gt;
A RAM hook is a programming mechanism by which the system designer provides a way for users to modify or replace certain system routines. RAM hooks are commonly provided for ROM routines, since code in ROM is fixed and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Specifically, some ROM routines incorporate an &#039;&#039;RST 7&#039;&#039; instruction to give users access to hooks, allowing them an opportunity to &amp;quot;splice in&amp;quot; their own code instead. It works like this.&lt;br /&gt;
&lt;br /&gt;
At address FADAH is a &amp;quot;hook table,&amp;quot; each table entry being a two-byte address. In effect, the &#039;&#039;RST 7&#039;&#039; instruction in a &#039;&#039;CALL&#039;&#039; to one of these addresses. It finds the appropriate entry by adding an offset byte (which follows the &#039;&#039;RST 7&#039;&#039; instruction in the ROM routine) to the start of the table, and then &#039;&#039;CALL&#039;&#039;&#039;s the address stored there.&lt;br /&gt;
&lt;br /&gt;
For example, the &#039;&#039;CHGET&#039;&#039; routine incorporates an &#039;&#039;RST 7&#039;&#039; instruction at the beginning of the routine. The value of the offset byte is 4. This means that the RAM hook at FADEH (FADAH + 4) is used for &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Since most entries in the hook table point to a RET instruction in ROM (at 7FF3H), the &#039;&#039;RST 7&#039;&#039; normally &#039;&#039;CALL&#039;&#039;&#039;s 7FF3H, which simply returns back to the ROM routine, chewing up a few machine cycles and nothing more.&lt;br /&gt;
&lt;br /&gt;
But since the hook table is in RAM, the user may change an entry to point to his own routine, in which case the &#039;&#039;RST 7&#039;&#039; performs a &#039;&#039;CALL&#039;&#039; to the user&#039;s routine.&lt;br /&gt;
&lt;br /&gt;
Once &#039;&#039;RST 7&#039;&#039; locates the two-byte address in the table, it executes the routine located at that stored address. For routines like &#039;&#039;TextStar&#039;&#039; that use these hooks, &#039;&#039;RST 7&#039;&#039; effectively &#039;&#039;CALL&#039;&#039;&#039;s &#039;&#039;TextStar&#039;&#039;, which does its business on a keystroke and then returns to &#039;&#039;CHGET&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Thus, a hook gives us a chance to sneak in and peek at a keystroke before it is processed and returned to &#039;&#039;TEXT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1900</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1900"/>
		<updated>2009-11-09T17:37:52Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Republication, bugfixes, and extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1899</id>
		<title>TextStar</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TextStar&amp;diff=1899"/>
		<updated>2009-11-08T23:50:09Z</updated>

		<summary type="html">&lt;p&gt;99.6.119.22: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: PORTABLE 100, March 1989, pgs 8&amp;amp;ndash;13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;Get &#039;&#039;WordStar&#039;&#039; cursor control for &#039;&#039;TEXT.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;By Stan Wong&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Repub and bugfixes, extensions by John R. Hogerhuis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I&#039;m a WordStar addict. There is nothing flashy about the program. It&#039;s not even sexy. But I love &#039;&#039;WordStar&#039;&#039; and its arcane cursor movement and control commands. It was, and still is, one of the few word processing programs supported across many different machines and operating systems. I use it on a DEC Rainbow and a 386 PC at work. I use it on my IBM PC/XT. And I bought an NEC 8500 CP/M laptop because it had &#039;&#039;WordStar&#039;&#039; built in.&lt;br /&gt;
&lt;br /&gt;
My fingers get cramps every time I use my trusty Model 100, and trying to remember the different cursor movement and editing commands drives me batty.&lt;br /&gt;
&lt;br /&gt;
Well, no more!&lt;br /&gt;
&lt;br /&gt;
== A Diamond in the Rough ==&lt;br /&gt;
&lt;br /&gt;
The Model 100 TEXT program already implements the famous WordStar cursor control-character &amp;quot;diamond&amp;quot; &amp;amp;ndash; &#039;&#039;^S&#039;&#039;, &#039;&#039;^E&#039;&#039;, &#039;&#039;^D&#039;&#039;, &#039;&#039;^X&#039;&#039;, where the caret (^) signifies holding down the &#039;&#039;CTRL&#039;&#039; key, as &#039;&#039;WordStar&#039;&#039; users know &amp;amp;ndash; but it doesn&#039;t go far enough.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ve polished up the diamond a bit. I&#039;ve written a small machine language program called &#039;&#039;TextStar&#039;&#039; (or &#039;&#039;Text*&#039;&#039; to its friends), which implements most of the &#039;&#039;WordStar&#039;&#039; cursor movement commands as well as some text deletion and other miscellaneous commands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is not a complete program by itself. Instead, it enhances the operation of &#039;&#039;TEXT&#039;&#039;. Although &#039;&#039;TextStar&#039;&#039;&#039;s cursor control looks and feels like &#039;&#039;WordStar&#039;&#039;, it still retains a &#039;&#039;TEXT&#039;&#039;-like flavor. See the sidebar &amp;quot;Inside &#039;&#039;TextStar&#039;&#039;&amp;quot; for technical information on how it performs its magic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; extends the operation of &#039;&#039;TEXT&#039;&#039; by redefining the meaning of the control keys, where possible, to match those of &#039;&#039;WordStar&#039;&#039; (See Table 1). Even multiple-keystroke commands such as &#039;&#039;^QD&#039;&#039;, are supported. Control keys that have not been redefined still retain their &#039;&#039;TEXT&#039;&#039; meanings. For instance, &#039;&#039;^B&#039;&#039; still moves the cursor to the bottom of the screen. &#039;&#039;^T&#039;&#039; will not, however move you to the top of the screen but will delete a word instead.&lt;br /&gt;
&lt;br /&gt;
A simple change to &#039;&#039;TextStar&#039;&#039; could have made it ignore the &#039;&#039;TEXT&#039;&#039; control keys, but I felt it would be better to leave them in. The program owes its small size (381 bytes) to its method; it traps keyboard input and translates only &#039;&#039;WordStar&#039;&#039; control codes into their &#039;&#039;TEXT&#039;&#039; equivalents, passing all other keystrokes directly to &#039;&#039;TEXT&#039;&#039; for normal processing.&lt;br /&gt;
&lt;br /&gt;
== Vive La Difference ==&lt;br /&gt;
&lt;br /&gt;
However, &#039;&#039;TextStar&#039;&#039; does not perform exactly like &#039;&#039;WordStar&#039;&#039;. Because it enhances the &#039;&#039;TEXT&#039;&#039; program, it is bound by certain &#039;&#039;TEXT&#039;&#039; conventions.&lt;br /&gt;
&lt;br /&gt;
For instance, when moving up and down a line, &#039;&#039;WordStar&#039;&#039; moves the cursor to the end of a line if the destination line is shorter. But &#039;&#039;TextStar&#039;&#039;, like &#039;&#039;TEXT&#039;&#039;, leaves the cursor in the same column regardless of the destination line&#039;s length.&lt;br /&gt;
&lt;br /&gt;
As a bonus, the text deletion commands &#039;&#039;^T&#039;&#039; and &#039;&#039;^Y&#039;&#039; store the deleted text in the paste buffer. So if you make a mistake you can recover the text by pressing the &#039;&#039;PASTE&#039;&#039; key. This gives you a simple &#039;&#039;UNDO&#039;&#039; facility.&lt;br /&gt;
&lt;br /&gt;
== A Star Is Born ==&lt;br /&gt;
&lt;br /&gt;
Listing 1 is a relocating &#039;&#039;BASIC&#039;&#039; loader. It creates a machine language program, &#039;&#039;TXTSTR.CO&#039;&#039;, to run anywhere you specify in high memory, or it will default to loading just under the current &#039;&#039;HIMEM&#039;&#039;. It can thus coexist with your other &#039;&#039;.CO&#039;&#039; programs. (Thanks to Phil Wheeler for his &#039;&#039;BASBLD.PW3&#039;&#039; program, which I used to create the loader.)&lt;br /&gt;
&lt;br /&gt;
Listing 2 is the assembly language source code for &#039;&#039;TextStar&#039;&#039;. I used the &#039;&#039;ADSM&#039;&#039; assembler by James Yi, which you can find on the CompuServe Model 100 Forum. Minor syntax changes to the source code will also make it compatible with the &#039;&#039;ROM2&#039;&#039; assembler from Traveling Software, which I used to do the initial program development.&lt;br /&gt;
&lt;br /&gt;
You have no need to use the assembly language listing, however, other than to understand what &#039;&#039;TextStar&#039;&#039; is doing and how it does it.&lt;br /&gt;
&lt;br /&gt;
== A Rising Star ==&lt;br /&gt;
&lt;br /&gt;
To run &#039;&#039;TextStar&#039;&#039;, place the widebar cursor over &#039;&#039;TXTSTR.CO&#039;&#039; on the main menu and press &#039;&#039;ENTER&#039;&#039;. You should then see &#039;&#039;TEXT&#039;&#039;&#039;s familiar &#039;&#039;File to edit?&#039;&#039; prompt. Specify the &#039;&#039;.DO&#039;&#039; file to edit, and you&#039;re on your way.&lt;br /&gt;
&lt;br /&gt;
If the program doesn&#039;t start, go into BASIC and type &#039;&#039;CLEAR 0, nnnm&#039;&#039; (where &#039;&#039;nnnm&#039;&#039; is the load point) and then try again. If you don&#039;t know the load point, type &#039;&#039;LOADM &amp;quot;TXTSTR&amp;quot;&#039;&#039; and use the &#039;&#039;Top&#039;&#039; address returned by the &#039;&#039;LOADM&#039;&#039; command as the load point (&#039;&#039;nnnm&#039;&#039;) for the &#039;&#039;CLEAR&#039;&#039; statement above.&lt;br /&gt;
&lt;br /&gt;
== Where To Get TextStar ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TextStar&#039;&#039; is also available on the &#039;&#039;P100-To-Go&#039;&#039; disk and on the &#039;&#039;Portable BBS&#039;&#039; (603-924-9770) as &#039;&#039;TXTSTR.100&#039;&#039;. If you need the program and listings on a cassette tape, send $6 to me at P.O. Box 28181, Santa Ana, CA 92799. You can also contact me via CompuServe user ID 70346,1267. I support the program on the M100SIG of CompuServe.&lt;br /&gt;
&lt;br /&gt;
Those cramps in my fingers are finally starting to disappear. Happy typing!&lt;br /&gt;
&lt;br /&gt;
(IN PROGRESS)&lt;/div&gt;</summary>
		<author><name>99.6.119.22</name></author>
	</entry>
</feed>