<?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>Embedded Components and Tools Blog Center &#187; HP-41 Personal Portable Computing</title>
	<atom:link href="http://www.embeddedcomponents.com/blogs/category/component-projects/hp-41-ppc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.embeddedcomponents.com/blogs</link>
	<description>The Home For Smart Reusable Code &#38; Circuits</description>
	<lastBuildDate>Sat, 04 Feb 2012 05:09:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>An Introduction to the HHP-16K EPROM Emulator</title>
		<link>http://www.embeddedcomponents.com/blogs/2007/09/introduction-to-hhp-16k-eprom-emulator/</link>
		<comments>http://www.embeddedcomponents.com/blogs/2007/09/introduction-to-hhp-16k-eprom-emulator/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 07:23:58 +0000</pubDate>
		<dc:creator>Ron Fredericks</dc:creator>
				<category><![CDATA[Component Projects]]></category>
		<category><![CDATA[HP-41 Personal Portable Computing]]></category>

		<guid isPermaLink="false">http://www.embeddedcomponents.com/blogs/2007/09/introduction-to-hhp-16k-eprom-emulator/</guid>
		<description><![CDATA[Ron Fredericks writes: The HHP-16K EPROM Emulator allows application code to be read by Hewlett-Packard&#8217;s (HP&#8217;s) HP-41 calculator. Instead of inserting a small pre-built module into one of the four module bays of the calculator, such as the PPC ROM module discussed in one of my previous blog posts, this unit allows a person to [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-4184215318352482";
/* 468_60_v1 */
google_ad_slot = "6370068834";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Ron Fredericks writes: The HHP-16K EPROM Emulator allows application code to be read by Hewlett-Packard&#8217;s (HP&#8217;s) <a href="http://www.hpcc.org/calculators/hp41.html" target="_blank">HP-41 calculator</a>. Instead of inserting a small pre-built module into one of the four module bays of the calculator, such as the <a href="http://www.embeddedcomponents.com/blogs/2007/04/community-software-development-for-embedded-devices/">PPC ROM module</a> discussed in one of my previous blog posts, this unit allows a person to use custom built programs previously stored into EPROMs (Erasable Programmable Read Only Memory devices) using software development tools and an EPROM burner. </p>
<h3>Figure 1: <em>HPP-16K Emulator Connected to HP-41 Calculator</em></h3>
<p><img id="image73" height="257" alt="HPP-16K EPROM Emulator connected to HP-41 Calculator" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41emulatorsystemwp3.jpg" /><br />
<span style="color:#cccccc">Photo by Ron Fredericks using Canon EOS-10D 34mm fluorite lens, UV Filter, 1.5s &#038; f/22 @ ISO 100, on tripod, from Embedded Components&#8217; HP lab collection.</span></p>
<h2>Business Development using EPROM</h2>
<p>The HHP-16K represents, a stepping-stone from source code to mass marketing through the use of HP&#8217;s commercial software development tools and it&#8217;s professional services team.  Advertisement and promotion of HP&#8217;s professional services to productize HP ROM modules from EPROMs could be found within HP&#8217;s own software development tools, and in newsletters &#8212; newsletters published by HP and by independent self-assembling developer communities such as national and international versions of the HP Computing Club or <a href="http://www.hpcc.org" target="_blank">HPCC.org</a>.  HPâ€™s fee for this service was not trivial, often HP computer clubs would collect donations from 100&#8242;s or 1000&#8242;s of their members to raise the $20,000 to $60,000 (in 1980&#8242;s dollars) to produce these ROM modules for their members &#8211; all before the Internet.  </p>
<blockquote><p>This emulator is an example of an important design pattern for modern day software developers forming into ecosystems around mass marketed smart consumer devices! </p></blockquote>
<p>A typical consumer device in today&#8217;s market often has gigabytes of flash memory or other extensions via cellular networks, enterprise networks, or WI-FI Internet access, that behave just like this old 16 kilobyte emulator. With this design pattern &#8211; developers can improve the consumer&#8217;s experience on popular devices by adding new software applications, middleware, content, and development tools. While at the same time, developers gain significant new business development opportunities for themselves, content providers, software tools vendors, professional services teams, and device manufacturers alike.</p>
<p><span id="more-61"></span></p>
<p>Although this emulator is an old technology, circa 1981, the EPROM chips, development tools, and HP-41 calculator itself are still in use by many collectors and developers alike. I decided to write about this particular unit because documentation is not readily available &#8211; making this project an interesting reverse engineering challenge for me. But I am also writing this post to unravel the mystery behind the business case for the HHP-16K. Only by resurrecting the engineering steps to use this device can we be certain that we have understood its business impact on software tool vendors, consumer device manufactures, and third-party software developers. Read on to learn, with me, how to use this device, and uncover the historical documents related to this device. Then perhaps we can extend this example from a reusable embedded engineering method to fresh reusable ideas for building business relationships with today&#8217;s software, tools, and mass marketed smart consumer devices.</p>
<p><font COLOR="ORANGE">I will continue to update this post until I am satisfied others can use it to build their own programs for their HP-41 using this unit. Only then can I be satisfied that I have fully documented how to use this unit and appreciate its impact in the marketplace &#8211; historically and as a future design pattern for others. This paragraph will be erased at that time.</font></p>
<p>&#8220;Kelly McClellan, Jim De Arras and other users reverse-engineered the [HP-41] Nut processor bus and instruction set [PPCV6N6P4][PPCV7N3P20], and built EPROM boxes and MLDL (RAM) devices in order to run their own microcode.&#8221;<br />
<a href="http://nonpareil.brouhaha.com/microcode_simulation.pdf" target="_blank">Link to this article&#8230;</a></p>
<p>This unit appears to be the work of Mr. De Arras, since the printed circuit board has the following title:</p>
<p><code>41C EPROM Interface Copyright 1981 by J DE ARRAS    REV C</code></p>
<p>The unit was manufactured by:</p>
<p>F.M. Weaver Associates<br />
Hand Held Products Div.<br />
6201 Fair Valley Drive<br />
Charlotte, NC 28211<br />
USA</p>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-4184215318352482";
/* 468_60_v1 */
google_ad_slot = "6370068834";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>Overview of EPROM Emulation</h2>
<p>There are over 100 HP software solutions and community software built onto ROM modules <a href="http://www.hp-collection.org/Modulliste.pdf">listed on popular HP-41 web sites </a>that can be stored on EPROM. HP authorized their reuse in emulators several years ago.  In addition user code and assembly language code can be compiled and linked for deployment on EPROMs as well using freely available <a href="http://hp41.claughan.com/files/SDK41%20Manual.pdf">open-source tools</a>.</p>
<p>The idea is to burn EPROMs following the M-Code 10-bit word format used by the HP-41 series calculators.  I have not found the original documents for the HHP-16K unit but there are a few online resources to help guide a current-day embedded engineer tracing the footsteps of the past and current HP 41 developers. </p>
<h3>Figure 2: <em>HPP-16K Main Circuit Board</em></h3>
<p><img id="image63" height="735" alt="HHP-16K Circuit Board (top view, small size)" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41emulatorcircuittvwp.jpg" /><br />
The figure above shows the top view of the circuit board: note the two DIP switches (I still need info on these) and three EPROM sockets.</p>
<p>Click <a class="imagelink" title="HHP-16K Circuit Board (bottom view, inverted, small size)"  href="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41rombotinvertviewwp2.jpg" target="_blank">here</a> to see the bottom view (inverted so it can be overlaid with the top view).</p>
<h2> ROM Memory Requirements </h2>
<p>There are a few articles on burning EPROMs for the HP41. The table below was extracted from one such article titled: &#8220;Creation of EPROMs for EPROM readers&#8221;. <a href="http://www.emmanuel.hp41.eu/eproms/eproms.html" target="_blank">Link to this article (in French)&#8230;</a></p>
<p>The lower 8 bits would use the two larger EPROM sockets and the upper 2 bits would use the smaller EPROM socket.</p>
<table width="200" border="2" cellspacing="1" cellpadding="2">
<caption>
  EPROM Chip Selection<br />
  </caption>
<tr>
<th rowspan="2" scope="col"> </th>
<th colspan="2" scope="col">
<div align="center">HHP-16k</div>
</th>
</tr>
<tr>
<td>
<div align="center">U2</div>
</td>
<td>
<div align="center">L8</div>
</td>
</tr>
<tr>
<th scope="row">
<div align="right">4K</div>
</th>
<td>
<div align="center">1x 2716 </div>
</td>
<td>
<div align="center">1x 2732</div>
</td>
</tr>
<tr>
<th scope="row">
<div align="right">8K</div>
</th>
<td>
<div align="center">1x 2716 </div>
</td>
<td>
<p align="center">2x 2732<br />
      or<br />
      1x 2764 
    </p>
</td>
</tr>
<tr>
<th scope="row">
<div align="right">12K</div>
</th>
<td>
<div align="center">1x 2732 </div>
</td>
<td>
<p align="center">1x 2732<br />
      and<br />
      1x 2764 
    </p>
</td>
</tr>
<tr>
<th scope="row">
<div align="right">16K</div>
</th>
<td>
<div align="center">1x 2732</div>
</td>
<td>
<div align="center">2x 2764</div>
</td>
</tr>
</table>
<p>In the table above, U2 and L8 refer to the EPROM sockets on the circuit board &#8211; see the figure above. </p>
<table width="219" border="2" cellpadding="2" cellspacing="1">
<caption>
  ROM Address<br />
Selection<br />
  </caption>
<tr>
<th width="94" scope="row">
<div align="center">4K Page</div>
</th>
<th width="106">
<div align="center">Port Number</div>
</th>
</tr>
<tr>
<th scope="row">
<div align="center">F<br />
        E </div>
</th>
<td>
<div align="center">4<br />
        (card reader) </div>
</td>
</tr>
<tr>
<th scope="row">
<div align="center">D<br />
        C</div>
</th>
<td>
<div align="center">3</div>
</td>
</tr>
<tr>
<th scope="row">
<div align="center">B<br />
        A </div>
</th>
<td>
<div align="center">2</div>
</td>
</tr>
<tr>
<th scope="row">
<div align="center">9<br />
        8 </div>
</th>
<td>
<div align="center">1</div>
</td>
</tr>
</table>
<p>Use the table above to define the HP41 I/O Ports required to access programs stored in ROM. See figure below for location of I/O ports on the back of the HP41 device. Typical HP-41 ROM modules are shown to the right of the calculator, while the electrical contacts can be seen within the other empty port bays.</p>
<h3>Figure 3: <em>HP-41 I/O Ports (back view)</em></h3>
<p><img id="image84" height="135" alt="HP-41 Calculator back view, with some I/O modules, and I/O ports labeled from 1 to 4" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hp-41-back-view-with-some-i.jpg" /></p>
<h2>HHP-16K Emulator Hardware Discussion</h2>
<table>
<tr>
<th>Data lines to emulator circuit board</th>
</tr>
<tr>
<td>
Blue <font color="blue">wire</font> = Vcc<br />
Yellow <font color="yellow">wire</font> = ISA (out) line from calculator to emulator<br />
Green <font color="green">wire</font> = ISA (in) line to calculator from emulator<br />
Shield wire = Ground<br />
Red <font color="red">wire</font> = Ã˜2 line<br />
Orange <font color="orange">wire</font> = SYNC line<br />
Brown <font color="brown">wire</font> = Ã˜1 line
    </td>
</tr>
<tr>
<td>
See the <strong>Input / Output Ports</strong> table below for signal line definitions.
    </td>
</tr>
</table>
<h3>Figure 4: <em>HPP-16K Interface Circuit Board</em></h3>
<p><img id="image69" height="475" alt="HHP-16K Interface to Calculator" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41interface.jpg" /><br />
The figure above shows the interface from the HHP-16K device to the HP41 calculator ROM bay.</p>
<p>In this section I discuss the HP-41 calculator I/O ROM port in detail. Much of this information comes from HP&#8217;s internal documentation &#8211; specifically the &#8220;HP-41C/CV/CX Alphanumeric Programmable Scientific Calculator Service Manual&#8221; record number 00041-90472, printed 1983. You can read this and other HP internal documents on the HP-41 from Warren Furlow&#8217;s site <a href="http://www.hp41.org/LibView.cfm?Command=List&#038;CategoryID=20" target="_blank">here</a>.</p>
<table width="200" border="2" cellspacing="1" cellpadding="2">
<caption>
  </caption>
<tr>
<th colspan="2" scope="col">
<div align="center">Input / Output Ports </div>
</th>
</tr>
<tr>
<td colspan="2" scope="row">The four I/O ports on the HP-41 allow the user to expand the calculator&#8217;s capacity and to have it interact with external components (like the HHP-16K Emulator). Electrical contact is provided by a flexible printed-circuit strip mounted on the contact frame. The system lines which are accessible at the I/O ports are defined below.</td>
</tr>
<tr>
<th colspan="2" scope="row">
<div align="center"><img id="image81" height="226" alt="I/O Port View" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hp41_ioportview.gif" />
<div>
<th>
  </th>
</div>
</div>
</th>
</tr>
<tr>
<th width="52" scope="row">
<div align="center">VBAT</div>
</th>
<td width="391">Battery voltage: Four 1.5 volt N size batteries.</td>
</tr>
<tr>
<th scope="row">
<div align="center">VCC</div>
</th>
<td>System voltage:  While the display is active (RUN and STANDBY power modes), the system voltage is regulated at 6V (at VCC). When the display is inactive (SLEEP power mode), the voltage output is unregulated and set to 1V less than the battery voltage. </td>
</tr>
<tr>
<th scope="row">
<div align="center">GND</div>
</th>
<td>
<div align="left">Ground
      </div>
</td>
</tr>
<tr>
<th scope="row">
<div align="center">DATA</div>
</th>
<td>
<div align="left">Data timing line: 56 bits of data make up one data word, with data represented as BCD (Binary Coded Decimal) numbers. Instructions and addresses are represented as binary numbers. The timing of the system is referenced to the Ã˜2 signal from the CPU. A bit time (the period during which a single bit of data is transferred) is the time interval between the trailing edges of two successive Ã˜2 pulses. A word time consists of 56 bit times (0 to 55) and is the basic interval for information transfer.
      </div>
</td>
</tr>
<tr>
<th scope="row">
<div align="center">ISA</div>
</th>
<td>Instruction/Address line </td>
</tr>
<tr>
<th scope="row">
<div align="center">Ã˜1</div>
</th>
<td rowspan="2">Timing lines with a system operating frequency between 343 and 378 kHz. Ã˜1 pulses lead the Ã˜2 pulses by approx. 3/8&#8242;th period. </td>
</tr>
<tr>
<th scope="row">
<div align="center">Ã˜2</div>
</th>
</tr>
<tr>
<th scope="row">
<div align="center">SYNC</div>
</th>
<td>Timing/Information line: The SYNC signal, consisting of a 10 bit pulse during bit times 44 through 53, has two main functions. The first SYNC pulse generated during power-up is used to initialize the timing circuit of the system IC&#8217;s. Subsequently, the presence or absence of the SYNC pulse indicates whether information on the ISA line is an instruction or and address. The SYNC pulse is suppressed when the system is controlled by a plug-in accessory. Additionally, when the CPU timing circuit is disabled (STANDBY and SLEEP modes), the CPU sets the SYNC line equal to the DPWO signal from the display driver for access at the input/output ports.
    </td>
</tr>
<tr>
<th scope="row">
<div align="center">F1</div>
</th>
<td>Input flag line </td>
</tr>
<tr>
<th scope="row">
<div align="center">PWO</div>
</th>
<td>Power on/off line </td>
</tr>
<tr>
<th height="94" scope="row">
<div align="center">B3</div>
</th>
<td rowspan="2">
<p align="left">ROM port identification lines: The B3 and B4 lines from each of the four ports are wired differently at each port so that each plug-in accessory will have a unique identification code.</p>
<table width="100%" border="2" cellspacing="1" cellpadding="2">
<tr>
<th>
<div align="center">I/O Port<br />Location</div>
</th>
<th>
<div align="center">I/O Port<br />Number</div>
</th>
<th>
<div align="center">B3<br />Contact</div>
</th>
<th>
<div align="center">B4<br />Contact</div>
</th>
</tr>
<tr>
<td>
<div align="center">Upper Left</div>
</td>
<td>
<div align="center">1</div>
</td>
<td>
<div align="center">Open</div>
</td>
<td>
<div align="center">Open</div>
</td>
</tr>
<tr>
<td>
<div align="center">Upper Right</div>
</td>
<td>
<div align="center">2</div>
</td>
<td>
<div align="center">Vcc</div>
</td>
<td>
<div align="center">Open</div>
</td>
</tr>
<td>
<div align="center">Upper Left</div>
</td>
<td>
<div align="center">3</div>
</td>
<td>
<div align="center">Open</div>
</td>
<td>
<div align="center">Vcc</div>
</td>
</table>
</td>
</tr>
<td>
<div align="center">Lower Right</div>
</td>
<td>
<div align="center">4</div>
</td>
<td>
<div align="center">Vcc</div>
</td>
<td>
<div align="center">Vcc</div>
</td>
</table>
<tr>
<th height="129" scope="row">
<div align="center">B4</div>
</th>
</tr>
<tr>
<td colspan="2">
<div align="center"><strong>Timing Waveform Diagram</strong></div>
<p><img id="image70" height=193 alt="Timing Diagram" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hp41_iotimingdiagram.jpg" />  </td>
</tr>
<p>The CPU checks status of the system and the I/O ports by setting the PWO line high at bit time 54to enable the ROM. The CPU carries out specified operations by executing a series of instructions contained in ROM. The CPU obtains each instruction from ROM by transmitting the 16-bit address of the instructions over the ISA line during bit times 14 through 29. The ROM containing the address transmits the contents of that location over the ISA line during bit times 44 through 53.</p>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-4184215318352482";
/* 468_60_v1 */
google_ad_slot = "6370068834";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>HHP-16K Hardware Bring-up</h2>
<p>Upon initial inspection, the HHP-16K device and ROM interface have likely been opened many times. So before risking potential damage to a HP-41 calculator and to insure best chance of success in my first use of this device I use a Digital Multimeter (DMM) to trace continuity and measure DC voltage levels at the Vss (ground) and Vdd (DC supply) pins of the various logic chips.</p>
<h3>Figure 5: <em> Reverse Engineer the HHP-16K Interface Circuit </em></h3>
<p><img id="image77" height=264 alt="Trace Interface with DMM" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41-iface-and-hpdvm-small.jpg" /><br />
<a id="p80" title=hhhp41withlargeimage.htm href="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhhp41withlargeimage.htm" target="_blank">Larger view in separate window</a></p>
<p>Start with the ROM interface that plugs into one of the four HP-41 I/O ports. In this way we can insure that the small circuit board inside the interface is oriented correctly with respect to Vdd and Ground when we plug it in and turn on the calculator.   </p>
<p>Note the DMM reading is in megohms (less accurate readings) and not in just ohms (more accurate readings). The reason for choosing the high ohm scale is that the voltage across the probes is much less: 1 volt across probe tips on megohm scale vs. 6 volts on the ohm scale. The lower voltage insures no risk of damage to parts during resistance/continuity measurements.</p>
<h3>Figure 6: <em>Check DC Voltage on HHP-16K Main Circuit Board </em></h3>
<p><img id="image76" height=280 alt="Check DC Voltage Levels" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41-16k-and-hpdvm-and-hp4.jpg" /></p>
<p>Second, proceed with DC voltage test of power rails by putting the HPP41-16K Emulator into a calculator ROM bay.  Apply power to the unit by turning on the calculator. Measure the 6 volts from Vdd to ground on the logic chips located on the main board. The various chips on-board are all CMOS logic packages manufactured by Motorola.  Pin-outs and logic details are easily found from online datasheets by searching on easy to read part numbers.</p>
<p>Third, confirm our findings and test the dynamic behavior of the interface using a logic analyzer. I have a <a href="http://www.tucker.com/images/images_spec/00004871.pdf">HP 1631D </a>that will do the job very nicely.  Note how similar my captured waveforms are to the HP service manual&#8217;s waveform diagram for the calculator&#8217;s I/O port (see above):</p>
<ul>
<li>The SYNC line is inverted since the interface buffers it with only one hex inverter/buffer from the MC14049 CMOS chip.</li>
<li>The x-to-o cursor measurement was done at 4X magnification. The period as seen on the display is 2.8 microseconds, or 357 kHz &#8211; well within the reported frequency range discussed above for Ã˜1 (PHI 1 label) and Ã˜2 (PHI 2 label) timing lines.</li>
<li>The HHP-16K interface includes logic to multiplex ISA signals to and from the main circuit board. The ISA I (or ISA Input) line shows the address and instruction data while executing a &#8220;Catalog 3&#8243; operation &#8211; so the signals shown were captured while the calculator was accessing onboard ROM. ISA O (or ISA Output) is held low since the EPROM chips have not been programmed yet and therefore offer no function headers to support the Catalog operation. </li>
</ul>
<h3>Figure 7: <em>Capture an HHP-16K Waveform Diagram</em></h3>
<p><img id="image82" height=520 alt="Timing Traces from HP 1631D Logic Analyzer (upper); along with test bench setup (lower)" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/live-trace-using-hp1631d-sm.jpg" /><br />
<a id=p92 href="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/testbenchlargeimage.htm">Larger view of test bench setup in a seperate window</a></p>
<h2>EPROM Configuration Logic</h2>
<p>The HP-41 ROM space uses a 10-bit word size. To store the ROM words in standard EPROMs (8-bit bytes), the HHP-16K uses separate EPROMs for the lower eight bits (L8) and upper two bits (U2). To conserve space the onboard logic translates the upper two bits of four consecutive 10-bit ROM words into one 8-bit byte on the U2 EPROM. </p>
<h2>Burn EPROMs</h2>
<p>There are three different starting points to this step depending on where the source code resides. We could start with user code (high level source code), microcode (assembly code), or a previously built ROM module already in use on HP-41 calculators (binary code).  I will focus on the use of previously built ROMs as there are so many license-free and available for use on an HP-41 calculator emulator.  The HP-41 calculator emulator is available for Windows, Linux, Palm, and Pocket-PC platforms. Itâ€™s a great way to gain access to all the software stored in emulated ROM modules. </p>
<p>Also, the emulated ROM module, saved as a binary file, is the end point for the other two forms of code since source or assembler code will ultimately need to be located to a ROM address and built into a binary footprint suitable for placement onto ROM modules or EPROMs as is the case here.</p>
<p>Two types of ROM module are of interest to me:
<ul>
<li>The first use case is a ROM module I already have. In this case I can compare function access with test cases on the real device and on the emulated ROM using the HHP-16K EPROM Emulator.</li>
<li>The second use case would be to use ROM images that cannot be simulated on a virtual HP-41 Emulator. These ROMs would include the HP Service Diagnostic ROM, an HP-IL network diagnostic ROM, or a support ROM for communication services like the ZENROM that are rare finds (and expensive) to buy for a HP-41 calculator.</li>
</ul>
<p><strong>MOD File Format</strong><br />
Go to Warren Furlow&#8217;s web site and download a selected ROM module: <a href="http://www.hp41.org/LibView.cfm?Command=List&#038;CategoryID=74">Stat Pac</a></p>
<p>Extracting the zip file&#8217;s contents leaves one file named STAT.MOD. The .mod file format is a custom binary image file format created by Warren Furlow as a way to extract the contents of physical HP ROM modules for reuse in his great HP-41 emulator.</p>
<p><strong>ROM File Format</strong><br />
Convert the STAT.MODfile into a binary image consisting of two 8-bit bytes for each 10-bit HP-calculator word using Warren Furlow&#8217;s MODFile.exe program. Get this MS-DOS or Windows program as a <a href="http://www.hp41.org/LibView.cfm?Command=View&#038;ItemID=608">free download</a>. </p>
<p>The result is a new file STAT.ROMand a text file STAT.TXT. The .ROM image is now in a binary form that EPROM burners can use. But the format is still not suitable for our HHP-16K as the upper 2 bits of the 10-bit word are stored in an 8-bit byte (the upper 6 bits wasted) format.  The .TXT file is useful as a way to insure that the ROM module will work in our HHP-16K unit. </p>
<h3>Listing 1: <em>STAT-I HP ROM Module Structure</em></h3>
<p></p>
<div class="ch_code_container" style="font-family: monospace;height:300px;">
<div style="">Code (text)</div>
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FILE NAME: C:\msdosenv\hp41\MODFile\STAT.MOD</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FILE FORMAT: MOD1</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">TITLE: Stat Pac</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">VERSION: B</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">PART NUMBER: 00041-15002</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">AUTHOR: Hewlett-Packard</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">COPYRIGHT (c) Hewlett-Packard</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LICENSE: Hewlett-Packard Company makes no warranty as to the accuracy or completeness of the foregoing information and hereby disclaims any responsibility therefore.</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">COMMENTS: </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">CATEGORY: HP Application PAC</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">HARDWARE: None</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">MEMORY MODULES: 0</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">EXENDED MEMORY MODULES: 0</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ORIGINAL: Yes &#8211; unaltered</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">APPLICATION AUTO UPDATE: No &#8211; do not update this file</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">NUMBER OF PAGES: 1</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ROM NAME: Stat-1B</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ROM ID: ST1B</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">PAGE: May be in more than one location</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">POSITION: Any page 8-F</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">PAGE GROUP: 0 &#8211; not grouped</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">BANK: 1</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">BANK GROUP: 0 &#8211; not grouped</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">RAM: No</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Write Protected: No or Not Applicable</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FAT: Yes</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">XROM: 2</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FCNS: 30</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">XROM&nbsp; Addr Function&nbsp; &nbsp; Type</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,00 0FD4 STAT 1B&nbsp; &nbsp; &nbsp;4K MCODE Programmable</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,01 0042&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,02 0076&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,03 00D4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,04 01A1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,05 01D4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,06 01FB&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,07 0273&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,08 02C9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,09 0395&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,10 047B&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,11 0620&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,12 0630&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,13 0640&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,14 0650&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,15 0710&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,16 072D&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,17 0748&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,18 0763&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,19 0B58&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,20 0B71&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,21 0C25&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,22 0C6D&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,23 0CB8&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,24 0CCF&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,25 0D9C&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,26 0DF7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,27 0F3E&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,28 029E&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02,29 02AD&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;USER CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">INTERRPUT VECTORS:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Pause loop:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 000</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Main running loop:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;000</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Deep sleep wake up, no key down: 000</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Off:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;000</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">I/O service:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;000</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Deep sleep wake up:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 000</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Cold start:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 000</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">CHECKSUM: 2F1 (CORRECT)</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
</ol>
</div>
<p>Note that the flag for RAM is set to No (line 26 in listing 1 above).  Some HP-41 ROM modules include RAM for special operations. If RAM is being used, our simple HHP-16K EPROM Emulator will fail unless we modify either the source code or the EPROM Emulator.  Also note that the ROM page and position fields show that our EPROM Emulator can support this module interfaced to any HP-41 ROM bay.</p>
<p><strong>STAT.41L and STAT.41U File Formats</strong><br />
Now we can use our STAT.ROM file as an input to a utility bundled with HP&#8217;s own Software Development System (SDS-II, released in 1986) for MS-DOS computers called IGHLOW.EXE.  The HIGHLOW.EXE program expects the .ROM image to have a file name ending with .41R. So I make a copy of STAT.ROM and save it with the new name STAT.41R. This is the only bridge needed between Warren Furlow&#8217;s after-market software emulator tools and HP&#8217;s original SDS-II software tools. Neat. The HIGHLOW.EXE program converts the two 8-bit bytes of the HP-41 executable code into 8-bit bytes for lower 8-bits of the HP41 word and 4 packed 2-bit chunks for the upper 2 bits of the HP41 10-bit word. The SDS-II document points out that this is the format we need for Hand-Held Products EPROM Emulators.</p>
<p>Now we have two files suitable for our EPROM Burner:
<ul>
<li>STAT.41L for 1/2 of one of our two 2764K EPROMs</li>
<li>STAT.41U for 1/4 of the 2732K EPROM</li>
</ul>
<p>(Remember I am using these chips because I have them on hand, so I will leave the remainder of EPROM memory filled with 0xFF values just as the UV erase lamp left them.)</p>
<h3>Listing 2: <em>STAT-I HP ROM Module Software Files</em></h3>
<p></p>
<div class="ch_code_container" style="font-family: monospace;height:300px;">
<div style="">Code (text)</div>
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">C:\msdosenv\hp41\MODFile&gt;dir</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;Volume in drive C is Ron</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;Volume Serial Number is 08DE-9633</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;Directory of C:\msdosenv\hp41\MODFile</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/22/2007&nbsp; 05:54 PM&nbsp; &nbsp; &lt;dir&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/22/2007&nbsp; 05:54 PM&nbsp; &nbsp; &lt;/dir&gt;&lt;dir&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ..</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">04/07/1988&nbsp; 06:33 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 16,489 HIGHLOW.EXE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:19 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 61,440 MODFile.exe</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:19 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 61,440 MODFileWin.exe</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:19 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;282 Readme.txt</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:26 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8,192 Stat-1B.ROM</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/22/2007&nbsp; 05:54 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4,096 STAT.41L</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:26 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8,192 stat.41R</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/22/2007&nbsp; 05:54 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1,024 STAT.41U</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">02/24/2004&nbsp; 06:09 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5,917 STAT.MOD</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">09/20/2007&nbsp; 12:24 PM&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2,166 STAT.txt</div>
</li>
<li style="font-weight: bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 10 File(s)&nbsp; &nbsp; &nbsp; &nbsp; 169,238 bytes</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 Dir(s)&nbsp; 118,975,586,304 bytes free</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/dir&gt;</div>
</li>
</ol>
</div>
<p>I use a Needhan Electronic&#8217;s EPROM burner and MS-DOS tools to massage ROM coded files and burn EPROMs. Because the interface requires a Centronics printer port, I use an Ampro Pentium II board with CIFS/SMB Ethernet connected to my main computer to drive the burner. I use a Walling Co. UV lamp assembly for erasing code previously stored in EPROM chips.  Needham has a chip selector search engine online for their burners <a href="http://www.needhams.com/support-device-search.html" target="_blank">here.</a></p>
<h3>Figure 8: <em>EPROM Needham Burner and Walling UV Lamp</em></h3>
<p><img id="image83" height=218 alt="EMP10 EPROM Burner and UV Eraser" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/emp10anduveraser.jpg" /></p>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-4184215318352482";
/* 468_60_v1 */
google_ad_slot = "6370068834";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>Using Programs Loaded in HHP-16K</h2>
<p>tbd&#8230;</p>
<h2>HHP-16K in the Marketplace</h2>
<p>The Canadian Infantry used the HP-41CV and HHP-16K as part of their mortar firing training course.  </p>
<h3>Figure 9: <em>Canadian Infantry HHP-16K Mortar Firing Training Application</em></h3>
<p><img id="image64" height=463 alt="Canadian Infantry HHP-16K Mortar Firing Training Application" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/09/hhp41forarmymortarpractice.jpg" /><br />
In the figure above, the HHP-16K is located in the lower left.</p>
<p>The entire document titled &#8220;LAND FORCE INFANTRY INSTRUMENTS FOR CALCULATING MORTAR FIRING DATA&#8221; is online <a href="http://www.nvbmb.nl/downloads/b-gl-385-015pt-001.pdf" target="_blank">here</a>. </p>
<p>The document discusses a few user tricks with the HHP-16K, such as how to determine key assignments associated with functions loaded on the HHP&#8217;s 3 EPROMs &#8211; page 16 (page 28 of 259 in the PDF).</p>
<h2>Next steps&#8230;</h2>
<p><font COLOR="ORANGE">I invite others to post their comments, online links, or other suggestions, so we can ALL continue to learn more about this device, the software it supported, and the business development model it represents today!</font></p>
<p>Technorati Tags: <a href="http://technorati.com/tagRon+Fredericks" rel="tag">Ron Fredericks</a>, <a href="http://technorati.com/tagCommunity" rel="tag"> Community</a>, <a href="http://technorati.com/tagSoftware" rel="tag"> Software</a>, <a href="http://technorati.com/tagEngineering" rel="tag"> Engineering</a>, <a href="http://technorati.com/tagProjects" rel="tag"> Projects</a>, <a href="http://technorati.com/tagEmbedded+Device" rel="tag"> Embedded Device</a>, <a href="http://technorati.com/tagPersonal+Programmable+Calculator" rel="tag"> Personal Programmable Calculator</a>, <a href="http://technorati.com/tagThe+Museum+of+HP+Calculators" rel="tag"> The Museum of HP Calculators</a>, <a href="http://technorati.com/tagJim+De+Arras" rel="tag"> Jim De Arras</a>, <a href="http://technorati.com/tagEPROM" rel="tag"> EPROM</a>, <a href="http://technorati.com/tagHHP-16K" rel="tag"> HHP-16K</a>, <a href="http://technorati.com/tagHand+Held+Products" rel="tag"> Hand Held Products</a>, <a href="http://technorati.com/tagEmulator" rel="tag"> Emulator</a>, <a href="http://technorati.com/tagCompiler" rel="tag"> Compiler</a>, <a href="http://technorati.com/tagDecompiler" rel="tag"> Decompiler</a>, <a href="http://technorati.com/tagHP-41" rel="tag"> HP-41</a>, <a href="http://technorati.com/tagLogic+Analyzer" rel="tag"> Logic Analyzer</a>, <a href="http://technorati.com/tagDMM" rel="tag"> DMM</a></p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.embeddedcomponents.com/blogs/2007/09/introduction-to-hhp-16k-eprom-emulator/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Community Software Development for Embedded Devices</title>
		<link>http://www.embeddedcomponents.com/blogs/2007/04/community-software-development-for-embedded-devices/</link>
		<comments>http://www.embeddedcomponents.com/blogs/2007/04/community-software-development-for-embedded-devices/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 17:57:17 +0000</pubDate>
		<dc:creator>Ron Fredericks</dc:creator>
				<category><![CDATA[Component Projects]]></category>
		<category><![CDATA[HP-41 Personal Portable Computing]]></category>

		<guid isPermaLink="false">http://www.embeddedcomponents.com/blogs/2007/04/community-software-development-for-embedded-devices/</guid>
		<description><![CDATA[Photo by Ron Fredericks using Canon EOS-10D 34mm fluorite lens, circular polarizer, 1.5s &#038; f/22 @ ISO 100, on tripod, from Embedded Components&#8217; HP lab collection. Ron Fredericks writes: I envision the day when community software engineering projects are commonplace for embedded devices. Like the PPC ROM demonstrated back in 1981. What follows is a [...]]]></description>
			<content:encoded><![CDATA[<p><!-- ckey="5DDF66C9" --><br />
<img id="image41" height=304 alt="HP-41CX mobile computer/calculator with community developed PPC ROM software applications and synthetic code library" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/04/hp41_ppcrom.jpg" /><br />
<FONT COLOR="#cccccc">Photo by Ron Fredericks using Canon EOS-10D 34mm fluorite lens, circular polarizer, 1.5s &#038; f/22 @ ISO 100, on tripod, from Embedded Components&#8217; HP lab collection.</font></p>
<p>Ron Fredericks writes: I envision the day when community software engineering projects are commonplace for embedded devices. Like the PPC ROM demonstrated back in 1981.</p>
<p><FONT COLOR="#cc6600">What follows is a review of the PPC ROM community development project &#8211; a first for smart mobile devices, then an offer to help others in moving this great body of open source professional tools to modern devices: comment on this post if you are interested in this project or in community development of software for embedded devices in general.</font></p>
<p>Wouldn&#8217;t it be nice to have powerful new applications built on top of our routers, <a href="http://www.nerdgirl.com/2006/09/22/taking-it-too-far/">digital recorders</a>, HDTV&#8216;s; or even industrial process monitor and control systems, or lab instruments; hey how about our cars and public transport vehicles? No I don&#8217;t mean that you buy a new device or car with new applications pre-loaded by the device manufacturer and shipped with the soon to be obsolete device &#8211; I mean groups of experts organizing into communities with other experts to design, develop, test, document, package, and deliver new software solutions onto devices for their own members&#8217; sales channels. Does this sound far fetched?</p>
<p>Community development around open-source software such as Java, the Linux operating system, or Mozilla&#8216;s Firefox web browser have emerged as reusable project management solutions to complex software engineering issues &#8211; <a href="http://www.fastcompany.com/magazine/113/next-job-one.html">See Asa Dotzler&#8217;s Job Morph: Herding Cats</a> to see how Mozilla motivates workers who aren&#8217;t actually on the payroll.. So I know the engineering community is ready for a new challenge &#8211; one that has already been solved back in 1981 &#8211; one that affects the speed of technology reuse around the globe today.</p>
<p><img id="image48" height=305 alt="Development for today's embedded/mobile devices has many similarities to the HP-41 personal programmable calculator" src="http://www.embeddedcomponents.com/blogs/wp-content/uploads/2007/05/img_2759c.jpg" /><br />
<FONT COLOR="#cccccc">Photo by Ron Fredericks using the same settings as the previous photo, of his favorite mobile smart device.</font></p>
<p><FONT COLOR="#cc6600">So let me share with you a project I recently discovered. Itâ€™s embodied in a userâ€™s manual published in 1981 by a community of engineers â€“ no, not your typical product manual ticked out on a company payroll. The forward describes a first-of-its-kind effort behind this user manual, and the embedded software it documents. The author expresses his excitement in being part of the â€œfirst community developerâ€ project for a smart mobile computing device and it is so similar to the smart devices we use today! Did I mention that Linux, or even community networks like web and email didn&#8217;t exist back then?  How did they do it? Can we learn from their effort and apply this community project, or its method, for today&#8217;s embedded devices?  I think the answer is yes &#8211; with a little help from the embedded operating system suppliers&#8217; communities and some innovative hardware device manufacturers. The embedded operating system, software community project management, and smart device platforms have come to a wonderful cross-road that truly supports community software development as a ripe low-hanging opportunity for us today.</FONT></p>
<p>The forward to this 500 page user manual describes the struggle and accomplishment of 100 developers who formed their own community project to develop a â€œROMâ€ or <em>read-only memory</em> module they called a <a href="http://www.hp41.org/LibView.cfm?Command=Image&#038;FileID=23037">â€œPPC ROMâ€</a> that plugs into an HP personal computer that is now 25 years obsolete called an <a href="http://www.hpmuseum.org/">HP-41</a>.  The â€œPPCâ€ reference is to the names &#8211; <em>Personal Programmable Calculator</em>, or <em>Personal Programmer&#8217;s Club</em>, or <em>Prolific and Productive Computing</em> &#8211; as well as the <a href="http://www.hp41.org/LibView.cfm?Command=Image&#038;FileID=2024"><em>PPC Calculator Journal</em></a> that was the herald for the HP calculator&#8217;s developer community back in the day. Similar to the commonplace e&#8217;zines we read, or get spammed with today. But different because the taxonomy created by todayâ€™s almost endless stream of eBlasts, tagged content, blogs, forums, and RSS feeds by themselves don&#8217;t create an engineers&#8217; sense of community. The spontaneous motivation to organize into a sense of community requires a mood that has only been created by a real person &#8211; a person that shifts a group of developers&#8217; <a href="http://tim.oreilly.com/articles/paradigmshift_0504.html">paradigm</a> . <span id="more-40"></span></p>
<p>Perhaps many of you remember <a href="http://en.wikipedia.org/wiki/Philippe_Kahn">Philippe Kahn</a>, who created a cozy engineering mood with his Turbo Pascal and Turbo C compilers &#8211; these cheap little things that were killer apps that grew the base of available programmers for several years. Prior compilers for the early PC&#8217;s cost 10 times more.  Within the HP-41 community there was William Wickes â€“ a community engineering leader that helped to grow the base of programmable calculator developers that in-turn grew the base of engineering, scientific, financial, and many other professionals and students so commonly outsourced by the global community today. Mr. Wickes lead the discovery of a new programming technique for the HP-41 called synthetic programming. Like Philippe&#8217;s community contribution to the PC developer community, Bill was able to drive significant developer excitement into an otherwise limited calculator programming community.</p>
<p>The PPC ROM&#8217;s core management team wrote in the forward to PPC ROM user&#8217;s manual&#8230;</p>
<p><em>â€œThis project is unique in the history of software projects. IBM and other large corporations have assigned multi-tens of programmers to a software project, but never before have over 100 programmers worked so long and so hard on a project â€” without compensation of any kind. The PPC ROM PROJECT is a community project in the true sense of the word&#8230;.It took two years and two months to complete&#8230;</em>â€</p>
<p>The forward then goes on to discuss the challenges of working with a personal computer that had so little memory and other constrained hardware issues  &#8211;  very similar to developing the content and applications in demand on mobile smart devices today!  Their solution, why they did it,  how they managed to stay together to finish it, and how they partnered with HP to build, and package the ROM Module itself is also described.</p>
<p>To be clear, the PPC ROM wasn&#8217;t a one-off, there were other community projects that replicated this first success with the creation of the <a href="http://www.limov.com/other-work.lml?p=zen-1">ZENROM</a>, <a href="http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/archv001.cgi?read=1944">HEPAX</a>, and other plug-in modules for the HP-41 too. I get the impression that todayâ€™s embedded community could succeed in the creation and deployment of software onto aftermarket embedded devices by following the same process pioneered by the developers of the PPC ROM: </p>
<ul>
<li>
Select a product mix with applications, tools, middleware, entertainment, and educational content that is attractive to end users but also encourages component reuse by more developers who in turn then create even more attractive reusable solutions.</li>
<li>
Select a project management model similar to other recent and very successful <a href="http://herdingcats.typepad.com/">â€œcat herdingâ€</a> open-source web community efforts. The new social network communities frequented by developers make the PPC ROM story much easier to duplicate. </li>
<li>
Select a hardware platform vendor willing to facilitate software packaging, delivery, execution, and reuse methods such as over-the-air, network download, or even a group-published flash chip.</li>
<li>
Harness the power of a community manager. The likes of PPC ROM&#8217;s synthetic programming allure created by William Wickes, Linux&#8217;s Linus Torvald, and Mozilla&#8217;s <a href="http://weblogs.mozillazine.org/asa/">Asa Dotzler</a> are some of the more famous examples of community managers for engineering development.</li>
</ul>
<p><FONT COLOR="#cc6600">Now that is just what I am proposing. Let&#8217;s revisit this community development effort by moving the freely available HP-41 applications to an emulator that can run on common mobile devices easily available in today&#8217;s community.  First step might be to see how the existing HP-41 emulators works on your favorite device with the hope that all the engineering, scientific, financial and other professional applications can be downloaded and used too. More on this effort and community software development will follow&#8230;</FONT></p>
<p>References to the excellent HP-41 emulator work and open-source site by Warren Furlow and others&#8230; </p>
<p>You can download a Windows PC/Linux/Windows Mobile/PalmOS emulator of the HP-41 personal computer, add your own programs to it,  and load the actual PPC-ROM moduleâ€™s binary image [as well as 50 or more other professional solution packs and ROMs] and use this great little personal computer along with these PPC ROM applications as a perfect replacement for that dumb little Windows calculator:<br />
<a href="http://www.hp41.org/Emulation.cfm">www.hp41.org/Emulation.cfm</a></p>
<p>Oops, where&#8217;s the Java version?</p>
<p>You can get your own copy of the historically significant <em>PPC ROM user&#8217;s manual</em> from here:<br />
<a href="http://www.hp41.org/LibView.cfm?Command=Image&#038;FileID=23037">www.hp41.org/LibView.cfm?Command=Image&#038;FileID=23037</a></p>
<p>Add the PPC ROM code to your new HP emulated calculator from here:<br />
<a href="http://www.hp41.org/LibView.cfm?Command=View&#038;ItemID=20">www.hp41.org/LibView.cfm?Command=View&#038;ItemID=20</a></p>
<p>Here are some other <a href="http://www.hp41.org/LibView.cfm?Command=List&#038;CategoryID=74">ROM code modules </a>that work with your new emulator!</p>
<ul>
<li>Aviation </li>
<li>Circuit Analysis</li>
<li>Clinical Lab and Nuclear Medicine</li>
<li>Financial Decisions  </li>
<li>Games</li>
<li>Home Management</li>
<li>Machine Design  </li>
<li>Math</li>
<li>Navigation </li>
<li>Petroleum Fluids</li>
<li>Real Estate</li>
<li>Securities </li>
<li>Standard Applications</li>
<li>Statistics</li>
<li>Stress Analysis</li>
<li>Structural Analysis</li>
<li>Surveying </li>
<li>Thermal &#038; Transport Science</li>
</ul>
<p>Technorati Tags: <a href="http://technorati.com/tagRon+Fredericks" rel="tag">Ron Fredericks</a>, <a href="http://technorati.com/tagcommunity" rel="tag">community</a>, <a href="http://technorati.com/tagsoftware" rel="tag">software</a>, <a href="http://technorati.com/tagengineering" rel="tag">engineering</a>, <a href="http://technorati.com/tagprojects" rel="tag">projects</a>, <a href="http://technorati.com/tagembedded+device" rel="tag">embedded device</a>, <a href="http://technorati.com/tagrouter" rel="tag">router</a>, <a href="http://technorati.com/tagdigital+recorder" rel="tag">digital recorder</a>, <a href="http://technorati.com/tagHDTV" rel="tag">HDTV</a>, <a href="http://technorati.com/tagindustrial" rel="tag">industrial</a>, <a href="http://technorati.com/taginstrument" rel="tag">instrument</a>, <a href="http://technorati.com/tagcar" rel="tag">car</a>, <a href="http://technorati.com/tagvehicle" rel="tag">vehicle</a>, <a href="http://technorati.com/tagopen-source" rel="tag">open-source</a>, <a href="http://technorati.com/tagJava" rel="tag">Java</a>, <a href="http://technorati.com/tagLinux" rel="tag">Linux</a>, <a href="http://technorati.com/tagMozilla" rel="tag">Mozilla</a>, <a href="http://technorati.com/tagFirefox" rel="tag">Firefox</a>, <a href="http://technorati.com/tagproject+management" rel="tag">project management</a>, <a href="http://technorati.com/tagcommunity+developer" rel="tag">community developer</a>, <a href="http://technorati.com/tagPPC+ROM" rel="tag">PPC ROM</a>, <a href="http://technorati.com/tagPersonal+Programmable+Calculator" rel="tag">Personal Programmable Calculator</a>, <a href="http://technorati.com/tagPersonal+Programmer%26%238217%3Bs+Club" rel="tag">Personal Programmer&#8217;s Club</a>, <a href="http://technorati.com/tagProlific+and+Productive+Computing" rel="tag">Prolific and Productive Computing</a>, <a href="http://technorati.com/tagPPC+Calculator+Journal" rel="tag">PPC Calculator Journal</a>, <a href="http://technorati.com/tagPhilippe+Kahn" rel="tag">Philippe Kahn</a>, <a href="http://technorati.com/tagconstrained+hardware" rel="tag">constrained hardware</a>, <a href="http://technorati.com/tagZENROM" rel="tag">ZENROM</a>, <a href="http://technorati.com/tagHEPAX" rel="tag">HEPAX</a>, <a href="http://technorati.com/tagcomponent" rel="tag">component</a>, <a href="http://technorati.com/tagcommunity+manager" rel="tag">community manager</a>, <a href="http://technorati.com/tagWilliam+Wickes" rel="tag">William Wickes</a>, <a href="http://technorati.com/tagLinus+Torvald" rel="tag">Linus Torvald</a>, <a href="http://technorati.com/tagAsa+Dotzler" rel="tag">Asa Dotzler</a>, <a href="http://technorati.com/tagWarren+Furlow" rel="tag">Warren Furlow</a></p>
<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.embeddedcomponents.com/blogs/2007/04/community-software-development-for-embedded-devices/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

