<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Drehersoft &#187; All Articles</title>
	<atom:link href="https://www.drehersoft.com/category/all-articles/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.drehersoft.com</link>
	<description>Turning out software solutions</description>
	<lastBuildDate>Sun, 29 Sep 2019 22:41:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Managing HP 48SX and 48GX Ports</title>
		<link>https://www.drehersoft.com/managing-hp-48sx48gx-ports/</link>
		<comments>https://www.drehersoft.com/managing-hp-48sx48gx-ports/#comments</comments>
		<pubDate>Mon, 27 Jun 2016 06:44:18 +0000</pubDate>
		<dc:creator>Drehersoft</dc:creator>
				<category><![CDATA[All Articles]]></category>
		<category><![CDATA[HP48 Articles]]></category>

		<guid isPermaLink="false">http://www.drehersoft.com/?p=382</guid>
		<description><![CDATA[<p>Introduction This document explains how to add and remove RAM to emulated HP 48SX and 48GX ports.  The concept of ports is explained as well as some of the related commands. Description of 48SX and 48GX Ports The HP 48GX and 48SX calculators both had 2 card slots where RAM and ROM expansion cards could [...]</p><p>The post <a href="https://www.drehersoft.com/managing-hp-48sx48gx-ports/">Managing HP 48SX and 48GX Ports</a> appeared first on <a href="https://www.drehersoft.com">Drehersoft</a>.</p>]]></description>
				<content:encoded><![CDATA[<h1>Introduction</h1>
<p>This document explains how to add and remove RAM to emulated HP 48SX and 48GX ports.  The concept of ports is explained as well as some of the related commands.</p>
<h1>Description of 48SX and 48GX Ports</h1>
<p>The HP 48GX and 48SX calculators both had 2 card slots where RAM and ROM expansion cards could be added, unlike their HP 48G and 48S siblings.  In some documentation, the word &#8220;card&#8221; and &#8220;port&#8221; are used interchangeably (ex: 48GX ports).  Emulators such as <span style="text-decoration: underline;">Droid48</span> and <span style="text-decoration: underline;">Droid48sx</span> allow for RAM expandability since they emulate the HP 48GX and 48SX calculators, respectively.</p>
<p>RAM cards could be used in one of 2 ways.  First is as &#8220;free&#8221; memory (also called &#8220;independent&#8221; memory).  Here, a real RAM card was intended to be used as a storage device similar to a USB FLASH drive.  A user can backup their data into a RAM card, execute programs and libraries from there, remove the card, and either store the RAM card in a their desk for later or share the RAM card with another calculator.  The second way was as &#8220;merged&#8221; memory (also called &#8220;user&#8221; memory).  Here, a real RAM card was used to upgrade the calculator&#8217;s built-in RAM.  Unlike &#8220;free&#8221; memory, this added to the main memory available to execute programs, store more data in the HOME directory, and etc.  When the <code>MEM</code> command was used, the amount of free space available was internal RAM + merged RAM minus the amount RAM that was in use.  However, simply removing a merged RAM card would often corrupt memory, causing the calculator to reset, and lose most of its data.  To remove a merged RAM card, the user needed to run the FREE command first.</p>
<p>The 48GX and 48SX were similar but had some differences in their card slots.  Card slot 1 on the GX and SX worked the same (some documentation calls this Port1).  It could hold a 32KB or 128KB RAM card that operated in &#8220;free&#8221; or &#8220;merged&#8221; mode.  On the SX, card slot 2 worked the same way (some documentation calls this Port2).  The GX&#8217;s card slot 2 was different.  It could only be used in &#8220;free&#8221; mode but could handle RAM cards as large as 4MB, though it would be divided into 128KB chunks, each labeled as Port2, Port3, up to Port33.  Thus, while an SX only had 32KB of built-in RAM compared to the GX&#8217;s built-in 128KB, because the SX allows for 2 merged RAM cards, it could have a maximum of 288KB (32 + 128 + 128) of main memory for program execution compared to the GX&#8217;s maximum of 256KB (128 + 128).</p>
<p>ROM expansion cards are not directly supported in the emulators <span style="text-decoration: underline;">Droid48</span> and <span style="text-decoration: underline;">Droid48sx</span>.  However, the contents of a ROM card can be downloaded from a real HP 48 calculator and then uploaded into a RAM port in the emulator.</p>
<p>Backup objects are stored with names like <code>:1:MYDATA</code> where the 1 is the port it is stored in and MYDATA is the friendly name.  Libraries have names like <code>:1:1234</code> where the 1234 is the library number.  The <code>STO</code>, <code>RCL</code>, <code>EVAL</code>, and <code>PURGE </code>commands can be with these types of names and can also be used with lists of these kinds of names.</p>
<p>There is sometimes confusion about when to use the term ports versus cards.  Unfortunately, the usage of the terms overlaps.  Here is a summary:</p>
<ul>
<li>A physical card that can be inserted into a 48SX or 48GX calculator is always called a &#8220;card&#8221;.</li>
<li>The physical slot that a card can be inserted is sometime called a &#8220;card slot&#8221; and sometimes a &#8220;port slot&#8221;.</li>
<li>A memory chunk up to 128KB size in the Library menu is always called a &#8220;port&#8221;.</li>
<li>Other than port0, an SX card slot mapped to exactly 1 port.  However, a card in a 48GX port could provide up to 32 ports.</li>
</ul>
<h1>Add or Remove Emulated RAM</h1>
<p>Use the Settings screen to add or remove RAM in <span style="text-decoration: underline;">Droid48</span> and <span style="text-decoration: underline;">Droid48sx</span>.</p>
<ol>
<li>  In <span style="text-decoration: underline;">Droid48</span> or <span style="text-decoration: underline;">Droid48sx</span>, go into the Setting screen.</li>
<li>  Under &#8220;Port1 settings&#8221; and/or &#8220;Port2 settings&#8221;, select the RAM size you want.</li>
<li>  Hit the phone&#8217;s Back button</li>
<li>  Read the instructions on the screen.  <span style="text-decoration: underline;"><strong>DO NOT press Ok</strong></span>.</li>
<li>  Tap the phone&#8217;s Recent Apps button to bring up the list of running apps.</li>
<li>  Kill <span style="text-decoration: underline;">Droid48</span> or <span style="text-decoration: underline;">Droid48sx</span> (swipe left, swipe right, or tap the X button in the upper right)</li>
<li>  Relaunch <span style="text-decoration: underline;">Droid48</span> or <span style="text-decoration: underline;">Droid48sx</span></li>
<li>  Tap the <code><mark style="background-color: lightgrey;">ON</mark></code> button several times.  The emulator&#8217;s screen will turn off then turn back on.</li>
<li>  Save the state of the emulator.  In <span style="text-decoration: underline;">Droid48</span>, tap the upper right corner of the emulator screen and select &#8220;Save memory/state&#8221;.  In <span style="text-decoration: underline;">Droid48sx</span>, tap the emulator screen and press the Save Checkpoint icon.</li>
</ol>
<h1>Useful commands</h1>
<h2>MERGE</h2>
<p>This merges a RAM card with the built-in RAM.  Level 1 of the stack is either the number <code>1</code> or <code>2</code> representing the card to merge.  The value of <code>2</code> is not allowed on the GX.  This command does not leave data on the stack.</p>
<p>GX menu location: no menu, must be typed<br />
SX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)</p>
<h2>MERGE1 (GX-only)</h2>
<p>This merges a RAM card in port 1 with the built-in RAM.  It does not use any values from the stack and does not leave data on the stack.</p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Library (button <code><mark style="background-color: lightgrey;">2</mark></code>)<br />
SX menu location: not available</p>
<h2>FREE</h2>
<p>This unmerges a RAM card in port 1 or 2 and changes it to &#8220;free&#8221; memory.  Level 2 of the stack is a list of names of backup objects and libraries from port0 (part of the calculator&#8217;s built-in RAM) to be moved into the newly freed port1 or port2.  This list can be empty.  If the names are specified in the list, they are of the form <code>:0:MYBACKUP</code> for backup objects or <code>:0:1234</code> for libraries.  Level 1 of the stack is either the number <code>1</code> or <code>2</code> representing the card to free.  The value of <code>2</code> is not allowed on the GX.  This command does not leave data on the stack.  For example:</p>
<p style="padding-left: 30px;"><code>2:  { :0:MYDATA :0:1234 }<br />
1:                      2<br />
</code></p>
<p>Here, the <code>FREE</code> command would move the backup object MYDATA and library 1234 from port0 to port2 as the card is freed.  Their new names will be <code>:2:MYDATA</code> and <code>:2:1234</code>.</p>
<p>GX menu location: no menu, must be typed<br />
SX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)</p>
<h2>FREE1 (GX-only)</h2>
<p>Similar to FREE but is hardcoded to port1.  Level 1 is the same style of list that the FREE command uses.</p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Library (button <code><mark style="background-color: lightgrey;">2</mark></code>)<br />
SX menu location: not available</p>
<h2>PVARS</h2>
<p>This command reports the usage of a port.  Level 1 is the port number to report on.  On return, level 2 is a list of names of backup objects and libraries stored in that port.  Level1 is one of 3 things: the number of bytes available on that port, the string <code>"SYSRAM"</code> if the port is merged, or <code>"ROM"</code> if it is a ROM card on a real calculator.  For example, executing <code>1 PVARS</code> could return:</p>
<p style="padding-left: 30px;"><code>2:  { :1:MYDATA :1:1234 }<br />
1:                80816.5</code></p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Library (button <code><mark style="background-color: lightgrey;">2</mark></code>)<br />
SX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)</p>
<h2>PINIT (GX-only)</h2>
<p>Sometimes a RAM card has garbage data on it or data on it has become corrupted.  Execute the PINIT command to make all ports usable again.  If the RAM card had data on it that became corrupted, the uncorrupted data is saved.  It is safe to use the command if the RAM cards are working fine.  This command does not use any values from the stack and does not leave data on the stack.</p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Library (button <code><mark style="background-color: lightgrey;">2</mark></code>)<br />
SX menu location: not available</p>
<h2>ARCHIVE</h2>
<p>Creates a backup of the entire HOME directory, user key assignments, and all alarms.  Level 1 is the backup object&#8217;s name (ex: <code>:1:JUNE26</code>).  This command does not leave data on the stack.  If you want to also backup the flag settings, first use <code>RCLF</code> to put them on the stack, store in variable in the HOME directory, and then use the <code>ARCHIVE</code> command.</p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)<br />
SX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)</p>
<h2>RESTORE</h2>
<p>Restores a backup of the entire HOME directory, user key assignments, and all alarms (all previous data will be overwritten).  Level 1 is the backup object&#8217;s name (ex: <code>:1:JUNE26</code>) to be restored.  This command does not leave data on the stack.  If you want to also restore the flag settings, execute the <code>RESTORE</code> command, then recall the previous stored flag settings from the HOME directory onto the stack, and then use the <code>STOF</code> command.</p>
<p>GX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)<br />
SX menu location: <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, Memory (<code><mark style="background-color: lightgrey;">VAR</mark></code> button)</p>
<h1>Notes</h1>
<p>Note1: While ports 1 through 33 are located on RAM card, port0 is special.  It acts similar to other ports except that it can only behave like &#8220;free&#8221; memory and it is part of the built-in RAM.  Backup objects and libraries can be stored in port0 but they consume part of the memory available for executing programs and the HOME directory.</p>
<p>Note2: The port number can be a wildcard with the <code>RCL</code>, <code>EVAL</code>, and <code>PURGE</code> commands where instead of a number, an &amp; character is used.  For example, entering <code>:&amp;:MYDATA PURGE</code> will delete the first instance of MYDATA the calculator finds.  The calculator starts searching with the highest port number, works down to port 0, and then finally main memory.  The <code>STO</code> command ignores the &amp; and instead always stores in main memory.  To type the &amp; character, press the <code><mark style="background-color: lightgrey;">alpha</mark></code> key, then <code><mark style="background-color: lightgrey;">Left-Shift</mark></code>, then the <code><mark style="background-color: lightgrey;">ENTER</mark></code> key.</p>
<p>Note3: Performing a <code>PURGE</code> of an object stored in a port sometimes causes an &#8220;in use&#8221; error.  This occurs if the object is referenced on the stack, by a local environment, a &#8220;user-defined&#8221; error message, or is an attached library.  Try turning the emulator off and then on again with <mark style="background-color: lightgrey;"><code>Right-Shift</code></mark>, OFF (<mark style="background-color: lightgrey;"><code>ON</code></mark> button), and then press <mark style="background-color: lightgrey;"><code>ON</code></mark> a few times.  Then try <code>PURGE</code> again.</p>
<p>Note4: due to a limitation in the GX, Port33 is never usable on a 4MB card. Only ports 2 through 32 are usable.</p>
<h1>References</h1>
<ul>
<li>&#8220;HP 48 Series Advanced User&#8217;s Reference Manual&#8221;, 1994, 4th edition, Hewlett-Packard, <a href="http://www.hpcalc.org/details.php?id=6036" target="_blank">http://www.hpcalc.org/details.php?id=6036</a></li>
<li>&#8220;HP 48SX Scientific Expandable Owner&#8217;s Manual Volume I and II&#8221;, 1990, 4th edition, Hewlett-Packard</li>
<li>&#8220;HP48 FAQ Section 10: Appendix B: GX Specific Information&#8221;, <a href="http://www.hpcalc.org/hp48/docs/faq/48faq-10.html" target="_blank">http://www.hpcalc.org/hp48/docs/faq/48faq-10.html</a></li>
<li>&#8220;Ram card on HP48GX&#8221;, <a href="http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv015.cgi?read=89814" target="_blank">http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv015.cgi?read=89814</a></li>
<li>&#8220;HP 48G Calculator &#8211; Resetting the Calculator&#8221;, <a href="http://support.hp.com/us-en/document/bpia5166" target="_blank">http://support.hp.com/us-en/document/bpia5166</a></li>
</ul>
<p>The post <a href="https://www.drehersoft.com/managing-hp-48sx48gx-ports/">Managing HP 48SX and 48GX Ports</a> appeared first on <a href="https://www.drehersoft.com">Drehersoft</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://www.drehersoft.com/managing-hp-48sx48gx-ports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapping HP48 Text to Unicode</title>
		<link>https://www.drehersoft.com/mapping-hp48-text-to-unicode/</link>
		<comments>https://www.drehersoft.com/mapping-hp48-text-to-unicode/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 16:06:52 +0000</pubDate>
		<dc:creator>Drehersoft</dc:creator>
				<category><![CDATA[HP48 Articles]]></category>

		<guid isPermaLink="false">http://www.drehersoft.com/?p=247</guid>
		<description><![CDATA[<p>The Problem The HP48 calculators have a text encoding that is based on the Latin-1 character set (a.k.a. ISO 8859-1) with the exception of 34 of the control characters.  These characters are 0x1F and 0x7F to 0x9F.  Instead of leaving these characters as the normal Latin-1 control codes, HP re-purposed these mostly unused control codes [...]</p><p>The post <a href="https://www.drehersoft.com/mapping-hp48-text-to-unicode/">Mapping HP48 Text to Unicode</a> appeared first on <a href="https://www.drehersoft.com">Drehersoft</a>.</p>]]></description>
				<content:encoded><![CDATA[<h3><strong>The Problem</strong></h3>
<p>The HP48 calculators have a text encoding that is based on the Latin-1 character set (a.k.a. ISO 8859-1) with the exception of 34 of the control characters.  These characters are 0x1F and 0x7F to 0x9F.  Instead of leaving these characters as the normal Latin-1 control codes, HP re-purposed these mostly unused control codes for 34 characters better suited for displaying on a high-end calculator.  Problems appear when the re-purposed characters are present in HP48 text or file names that are being used on a different computing platform (ex: transferring a file from an HP48 to a PC).  This sometimes results in garbage data, bugs, and crashes in software that doesn&#8217;t attempt to handle these special characters.</p>
<div id="attachment_325" class="wp-caption aligncenter" style="width: 403px"><a href="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-3.png"><img class="size-full wp-image-325  " title="HP48 Font Table Size 3" alt="Table of HP48 font at size 3. Blue HP48 characters differ from the Latin-1 character set." src="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-3.png" width="393" height="566" /></a><p class="wp-caption-text">Table of the HP48 size 3 font. Blue HP48 characters differ from the Latin-1 character set.</p></div>
<div id="attachment_324" class="wp-caption aligncenter" style="width: 397px"><a href="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-2.png"><img class="size-full wp-image-324  " title="HP48 Font Table Size 2" alt="Table of HP48 font at size 2. Blue HP48 characters differ from the Latin-1 character set." src="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-2.png" width="387" height="468" /></a><p class="wp-caption-text">Table of the HP48 size 2 font. Blue HP48 characters differ from the Latin-1 character set.</p></div>
<div id="attachment_323" class="wp-caption aligncenter" style="width: 341px"><a href="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-1.png"><img class="size-full wp-image-323  " title="HP48 Font Table Size 1" alt="Table of HP48 font at size 1. Blue HP48 characters differ from the Latin-1 character set." src="http://www.drehersoft.com/wp-content/uploads/2012/12/Font-Table-Size-1.png" width="331" height="363" /></a><p class="wp-caption-text">Table of the HP48 size 1 font. Blue HP48 characters differ from the Latin-1 character set.</p></div>
<p><a href="http://unicode.org/standard/WhatIsUnicode.html">Unicode</a> has become the ubiquitous standard since the time the HP48 was originally created.  Unicode supports over 1 million possible characters.  This means that it is now possible to convert HP48 text to characters that much of the world now uses.</p>
<p>However, with so many characters to chose from that look similar, sometimes the issue then becomes one to use.  For example, the number 0 and the letter O looks somewhat similar, depending on what font is being used.</p>
<h3><strong>Solution</strong></h3>
<p>To convert an HP48 character to a Unicode character, use the following mapping table:</p>
<table cellpadding="0">
<tbody align="center" valign="bottom">
<tr style="font-weight: bold;" align="center">
<td colspan="3"><strong>HP48</strong></td>
<td colspan="4"><strong>Unicode</strong></td>
</tr>
<tr style="font-weight: bold;" align="center">
<td><strong>Decimal</strong></td>
<td><strong>Hex</strong></td>
<td><strong>I/O Char*</strong></td>
<td><strong>Name</strong></td>
<td><strong>Char</strong></td>
<td><strong>Hex</strong></td>
<td><strong>UTF-8</strong></td>
</tr>
<tr>
<td>31</td>
<td>1F</td>
<td class="drehersoft_monostyle"></td>
<td align="left">Ellipsis</td>
<td style="font-size: large;">…</td>
<td>2026</td>
<td>E2 80 A6</td>
</tr>
<tr>
<td>127</td>
<td>7F</td>
<td class="drehersoft_monostyle"></td>
<td align="left">Medium Shade</td>
<td style="font-size: large;">▒</td>
<td>2592</td>
<td>E2 96 92</td>
</tr>
<tr>
<td>128</td>
<td>80</td>
<td class="drehersoft_monostyle">\&lt;)</td>
<td align="left">Angle</td>
<td style="font-size: large;">∠</td>
<td>2220</td>
<td>E2 88 A0</td>
</tr>
<tr>
<td>129</td>
<td>81</td>
<td class="drehersoft_monostyle">\x-</td>
<td align="left">Latin Small Letter a with Macron</td>
<td style="font-size: large;">ā</td>
<td>0101</td>
<td>C4 81</td>
</tr>
<tr>
<td>130</td>
<td>82</td>
<td class="drehersoft_monostyle">\.V</td>
<td align="left">Nabla</td>
<td style="font-size: large;">∇</td>
<td>2207</td>
<td>E2 88 87</td>
</tr>
<tr>
<td>131</td>
<td>83</td>
<td class="drehersoft_monostyle">\v/</td>
<td align="left">Square Root</td>
<td style="font-size: large;">√</td>
<td>221A</td>
<td>E2 88 9A</td>
</tr>
<tr>
<td>132</td>
<td>84</td>
<td class="drehersoft_monostyle">\.S</td>
<td align="left">Integral</td>
<td style="font-size: large;">∫</td>
<td>222B</td>
<td>E2 88 AB</td>
</tr>
<tr>
<td>133</td>
<td>85</td>
<td class="drehersoft_monostyle">\GS</td>
<td align="left">Greek Capital Letter Sigma</td>
<td style="font-size: large;">Σ</td>
<td>03A3</td>
<td>CE A3</td>
</tr>
<tr>
<td>134</td>
<td>86</td>
<td class="drehersoft_monostyle">\|&gt;</td>
<td align="left">Black Right-Pointing Triangle</td>
<td style="font-size: large;">▶</td>
<td>25B6</td>
<td>E2 96 B6</td>
</tr>
<tr>
<td>135</td>
<td>86</td>
<td class="drehersoft_monostyle">\pi</td>
<td align="left">Greek Small Letter Pi</td>
<td style="font-size: large;">π</td>
<td>03C0</td>
<td>CF 80</td>
</tr>
<tr>
<td>136</td>
<td>88</td>
<td class="drehersoft_monostyle">\.d</td>
<td align="left">Partial Differential</td>
<td style="font-size: large;">∂</td>
<td>2202</td>
<td>E2 88 82</td>
</tr>
<tr>
<td>137</td>
<td>89</td>
<td class="drehersoft_monostyle">\&lt;=</td>
<td align="left">Less-Than or Equal To</td>
<td style="font-size: large;">≤</td>
<td>2264</td>
<td>E2 89 A4</td>
</tr>
<tr>
<td>138</td>
<td>8A</td>
<td class="drehersoft_monostyle">\&gt;=</td>
<td align="left">Greater-Than or Equal To</td>
<td style="font-size: large;">≥</td>
<td>2265</td>
<td>E2 89 A5</td>
</tr>
<tr>
<td>139</td>
<td>8B</td>
<td class="drehersoft_monostyle">\=/</td>
<td align="left">Not Equal To</td>
<td style="font-size: large;">≠</td>
<td>2260</td>
<td>E2 89 A0</td>
</tr>
<tr>
<td>140</td>
<td>8C</td>
<td class="drehersoft_monostyle">\Ga</td>
<td align="left">Greek Small Letter Alpha</td>
<td style="font-size: large;">α</td>
<td>03B1</td>
<td>CE B1</td>
</tr>
<tr>
<td>141</td>
<td>8D</td>
<td class="drehersoft_monostyle">\-&gt;</td>
<td align="left">Rightwards Arrow</td>
<td style="font-size: large;">→</td>
<td>2192</td>
<td>E2 86 92</td>
</tr>
<tr>
<td>142</td>
<td>8E</td>
<td class="drehersoft_monostyle">\&lt;-</td>
<td align="left">Leftwards Arrow</td>
<td style="font-size: large;">←</td>
<td>2190</td>
<td>E2 86 90</td>
</tr>
<tr>
<td>143</td>
<td>8F</td>
<td class="drehersoft_monostyle">\|v</td>
<td align="left">Downwards Arrow</td>
<td style="font-size: large;">↓</td>
<td>2193</td>
<td>E2 86 93</td>
</tr>
<tr>
<td>144</td>
<td>90</td>
<td class="drehersoft_monostyle">\|^</td>
<td align="left">Upwards Arrow</td>
<td style="font-size: large;">↑</td>
<td>2191</td>
<td>E2 86 91</td>
</tr>
<tr>
<td>145</td>
<td>91</td>
<td class="drehersoft_monostyle">\Gg</td>
<td align="left">Greek Small Letter Gamma</td>
<td style="font-size: large;">γ</td>
<td>03B3</td>
<td>CE B3</td>
</tr>
<tr>
<td>146</td>
<td>92</td>
<td class="drehersoft_monostyle">\Gd</td>
<td align="left">Greek Small Letter Delta</td>
<td style="font-size: large;">δ</td>
<td>03B4</td>
<td>CE B4</td>
</tr>
<tr>
<td>147</td>
<td>93</td>
<td class="drehersoft_monostyle">\Ge</td>
<td align="left">Greek Small Letter Epsilon</td>
<td style="font-size: large;">ε</td>
<td>03B5</td>
<td>CE B5</td>
</tr>
<tr>
<td>148</td>
<td>94</td>
<td class="drehersoft_monostyle">\Gn</td>
<td align="left">Greek Small Letter Eta</td>
<td style="font-size: large;">η</td>
<td>03B7</td>
<td>CE B7</td>
</tr>
<tr>
<td>149</td>
<td>95</td>
<td class="drehersoft_monostyle">\Gh</td>
<td align="left">Greek Small Letter Theta</td>
<td style="font-size: large;">θ</td>
<td>03B8</td>
<td>CE B8</td>
</tr>
<tr>
<td>150</td>
<td>96</td>
<td class="drehersoft_monostyle">\Gl</td>
<td align="left">Greek Small Letter Lamda</td>
<td style="font-size: large;">λ</td>
<td>03BB</td>
<td>CE BB</td>
</tr>
<tr>
<td>151</td>
<td>97</td>
<td class="drehersoft_monostyle">\Gr</td>
<td align="left">Greek Small Letter Rho</td>
<td style="font-size: large;">ρ</td>
<td>03C1</td>
<td>CF 81</td>
</tr>
<tr>
<td>152</td>
<td>98</td>
<td class="drehersoft_monostyle">\Gs</td>
<td align="left">Greek Small Letter Sigma</td>
<td style="font-size: large;">σ</td>
<td>03C3</td>
<td>CF 83</td>
</tr>
<tr>
<td>153</td>
<td>99</td>
<td class="drehersoft_monostyle">\Gt</td>
<td align="left">Greek Small Letter Tau</td>
<td style="font-size: large;">τ</td>
<td>03C4</td>
<td>CF 84</td>
</tr>
<tr>
<td>154</td>
<td>9A</td>
<td class="drehersoft_monostyle">\Gw</td>
<td align="left">Greek Small Letter Omega</td>
<td style="font-size: large;">ω</td>
<td>03C9</td>
<td>CF 89</td>
</tr>
<tr>
<td>155</td>
<td>9B</td>
<td class="drehersoft_monostyle">\GD</td>
<td align="left">Greek Capital Letter Delta</td>
<td style="font-size: large;">Δ</td>
<td>0394</td>
<td>CE 94</td>
</tr>
<tr>
<td>156</td>
<td>9C</td>
<td class="drehersoft_monostyle">\PI</td>
<td align="left">Greek Capital Letter Pi</td>
<td style="font-size: large;">Π</td>
<td>03A0</td>
<td>CE A0</td>
</tr>
<tr>
<td>157</td>
<td>9D</td>
<td class="drehersoft_monostyle">\GW</td>
<td align="left">Greek Captial Letter Omega</td>
<td style="font-size: large;">Ω</td>
<td>03A9</td>
<td>CE A9</td>
</tr>
<tr>
<td>158</td>
<td>9E</td>
<td class="drehersoft_monostyle">\[]</td>
<td align="left">Black Square</td>
<td style="font-size: large;">■</td>
<td>25A0</td>
<td>E2 96 A0</td>
</tr>
<tr>
<td>159</td>
<td>9F</td>
<td class="drehersoft_monostyle">\oo</td>
<td align="left">Infinity</td>
<td style="font-size: large;">∞</td>
<td>221E</td>
<td>E2 88 9E</td>
</tr>
</tbody>
</table>
<p>* not all I/O Characters are listed here.</p>
<p>All remaining HP48 characters can be directly mapped to Unicode.  For example, an HP48 &#8216;A&#8217; is 0&#215;41 and in Unicode is 0041.  This applies for the ranges of 0&#215;00 to 0x1E, 0&#215;20 to 0x7E, and 0xA0 to 0xFF.</p>
<p>If you are using UTF-8, then it is necessary to encode each Unicode characters into 1, 2, or 3 byte sequences.  Details are available at <a href="http://en.wikipedia.org/wiki/Utf-8">http://en.wikipedia.org/wiki/Utf-8</a>.</p>
<h3><strong>Rationale</strong></h3>
<ol>
<li>Character 0&#215;80 (angle)
<ol>
<li>Instead using ∠ 2220 for character 0&#215;80, others have incorrectly used ∟ 221F.  This is the Right Angle character and is not intended for any generic angle.  Also, it does not visually match the HP48.</li>
<li>While ∡ 2221 is visually an even better match, this character often does not render properly on various computer platforms and software.  In short, some users will just see empty boxes such as:
<p><div id="attachment_257" class="wp-caption aligncenter" style="width: 45px"><img class="wp-image-257   " title="Examples of Microsoft Visual Studio 2008 HTML editor and Android 2.3.4 default font unable to render Unicode “Measured Angle” character (2221)." alt="Examples of Microsoft Visual Studio 2008 HTML editor and Android 2.3.4 default font unable to render Unicode “Measured Angle” character (2221)." src="http://www.drehersoft.com/wp-content/uploads/2012/07/MSVS2008-Android-2.3.4.png" width="35" height="21" /><p class="wp-caption-text">Empty boxes.</p></div></li>
</ol>
</li>
<li>Character 0&#215;81 (x-bar)
<ol>
<li>In theory, Unicode allows two characters to be visually combined if the 2nd character is a &#8220;combining character&#8221;.  This would allow for the display of x̄ by using x followed by the &#8220;combining macron&#8221; character, which would be 0078 followed by 0304.  However, there are two problems with this.
<ol>
<li>This combining of these two characters often renders poorly or not at all and will leave the user confused.  In the example below, the first two in the example are rendering failures while the last two are simply difficult to read at the default settings:<br />
For additional examples of how x-bar is inconsistently rendered based on font, go <a href="http://www.kreativekorp.com/charset/encoding.php?file=hp-48.kte&amp;char=81"> http://www.kreativekorp.com/charset/encoding.php?file=hp-48.kte&amp;char=81</a>.</li>
<div id="attachment_258" class="wp-caption aligncenter" style="width: 107px"><img class="size-full wp-image-258  " title="Various bad renderings of the Unicode characters &quot;x&quot; with &quot;Combining Macron&quot; (0078 and 0304) as rendered by Android 2.3.4, MS Visual Studio 2008, Windows 7 Notepad, and LibreOffice 3.4.4." alt="Various bad renderings of the Unicode characters &quot;x&quot; with &quot;Combining Macron&quot; (0078 and 0304) as rendered by Android 2.3.4, MS Visual Studio 2008, Windows 7 Notepad, and LibreOffice 3.4.4." src="http://www.drehersoft.com/wp-content/uploads/2012/07/Android2.3.4-and-MSVS2008-and-Notepad-and-LibreOffice3.4.4.png" width="97" height="24" /><p class="wp-caption-text">x-bar&#8217;s bad rendering.</p></div>
<li>Using two characters to represent one HP48 character breaks the pattern having a simple one-to-one mapping.  Some HP48 developers will likely have bugs in the code when converting back from Unicode to HP48 characters.</li>
</ol>
</li>
<li>Instead, ā 0101 is used.  It is a single Unicode character so it is easy for HP48 developers to deal with, leading to less bugs.  Also, x-bar is used in statistics as the notation for average and ā looks like an &#8216;a&#8217; for average.</li>
</ol>
</li>
<li>Character 0&#215;82 (nabla)
<ol>
<li>The character ∇ 2207 was chosen over other triangles since this is the Nabla character which is used in mathematics.  Details can be read <a href="http://en.wikipedia.org/wiki/Nabla_symbol">http://en.wikipedia.org/wiki/Nabla_symbol</a>.</li>
</ol>
</li>
<li>Characters 0x8D through 0&#215;90 (arrows)
<ol>
<li>In Unicode, there are a large number of characters that represent arrows.  However, 2190 through 2193 were chosen because these are just simple arrow characters and don&#8217;t carry any additional implied meaning.  Also, this set of arrow characters supports all four directions where as some of the other sets do not.  Lastly, some of the alternative arrow characters do not consistently get rendered on some computing platforms.</li>
</ol>
</li>
<li>Characters 0&#215;85, 0x8C, 0x9B, 0x9C, 0x9D (various Greek symbols)
<ol>
<li>These are Greek symbols that could have alternatively been represented by various mathematical or electrical Unicode characters.  However there are several reasons for preferring the Greek symbols:
<ol>
<li>We can gain insight into the original HP48 developers intentions by looking at how they translated these characters when using ASCII transfer mode 2 or 3 over a serial link.  These characters were translated into \GS, \Ga, \GD, \PI, and \GW respectively.  If we assume that &#8220;G&#8221; stands for Greek, then we can assume these translations mean Greek Capital Sigma, Greek lower alpha, Greek Capital Delta, Capital Pi, and Greek Capital Omega (a lower omega looks like a &#8216;w&#8217;).  This pattern holds for all the other translated Greek letters as well, except for \pi which is trivial to see that this is lower pi.</li>
<li>Using all Greek symbols results in a visually clean look.  In contrast, when symbols from math, electronics, and Greek symbols are mixed together, they often look sloppy because they don&#8217;t line up, have different line weights, and different drawing styles.</li>
</ol>
</li>
</ol>
</li>
<li>Character 0x9E (box)
<ol>
<li>Instead of using ■ 25A0 as the Black Box, others have incorrectly used ▬ 25AC which is the Black Rectangle. This visually does not match.</li>
</ol>
</li>
</ol>
<h3><strong>Other HP48 to Unicode Mappings</strong></h3>
<ul>
<li><a href="http://www.kreativekorp.com/charset/encoding.php?file=hp-48.kte"> http://www.kreativekorp.com/charset/encoding.php?file=hp-48.kte</a> &#8211; Differs from above on HP48 characters 0&#215;81 and 0&#215;85.  Characters 0x1F and 0x7F are not dealt with.</li>
<li><a href="http://www.kostis.net/charsets/hp48.htm"> http://www.kostis.net/charsets/hp48.htm</a> &#8211; Differs from above on HP48 characters 0&#215;80, 0&#215;85, and 0x9E.  Characters 0x1F, 0x7F, and 0&#215;81 are not dealt with.</li>
</ul>
<p>Note: efforts are being made (or will be made) to rectify the differences.</p>
<h3><strong>Other Resources</strong></h3>
<ul>
<li>Unicode Standard: <a href="http://unicode.org/">http://unicode.org/</a></li>
<li>Unicode Character Name Index: <a href="http://www.unicode.org/charts/charindex.html"> http://www.unicode.org/charts/charindex.html</a></li>
<li>HP48 ASCII Transfer mode translations: <a href="http://holyjoe.net/hp/tiotable.htm">http://holyjoe.net/hp/tiotable.htm</a></li>
<li>Newsgroup Post: <a href="https://groups.google.com/d/topic/comp.sys.hp48/hek271hUD-E/discussion">https://groups.google.com/d/topic/comp.sys.hp48/hek271hUD-E/discussion</a></li>
<li>Matching Tables:
<ul>
<li><a href="http://www.ascii.ca/hp48.htm">http://www.ascii.ca/hp48.htm</a></li>
</ul>
</li>
</ul>
<p>The post <a href="https://www.drehersoft.com/mapping-hp48-text-to-unicode/">Mapping HP48 Text to Unicode</a> appeared first on <a href="https://www.drehersoft.com">Drehersoft</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://www.drehersoft.com/mapping-hp48-text-to-unicode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
