<?xml version="1.0"?>
<?xml-stylesheet 
 href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css"
?>
<rss version="0.91"><channel><title>Planet Horde</title><link>http://planet.horde.org</link><description>People blogging about Horde</description><language>en</language><item><title>PyWorks 2008 Slides - Mike Naberezny</title><link>http://mikenaberezny.com/2008/11/15/pyworks-2008-slides/</link><pubDate>Sun, 16 Nov 2008 01:00:06 +0000</pubDate><description><![CDATA[<p>Slides from my <a href="http://pyworks.mtacon.com/">PyWorks 2008</a> talks are now available.  This conference was shared with php|works and I enjoyed this format.  It was great to see many of my Python and PHP friends at the same event.  Thanks to everyone who attended my talks.</p>
<h4>Py65: Microcontroller Simulation with Python</h4>
<p><a href="http://mikenaberezny.com/talks/pyworks08/py65_microcontroller_simulation.pdf">Download Slides (PDF)</a></p>
<p>This talk introduced the venerable <a href="http://6502.org">6502</a> microprocessor family, building small computer systems with these parts, and then simulating those systems with Py65.</p>
<p>The audience participation was great.  We had fun stepping through some small assembly language programs on the simulator.  One attendee <a href="http://joind.in/talk/view/53">wrote</a>:</p>
<blockquote><p>
This was fascinating and the speaker was awesomely enthusiastic. The overview of microcontrollers and their significance was enlightening and entertaining. The simulator design presented was fantastically simple and very Pythonic. I can’t wait to see where this project goes.
</p></blockquote>
<p>Thanks and I’m glad you enjoyed it.  For updates on the Py65 simulator, please watch <a href="http://mikenaberezny.com">my blog</a> and the Py65 <a href="http://www.ohloh.net/projects/py65/">project page</a> on Ohloh. </p>
<h4>URL Mapping with Routes</h4>
<p><a href="http://mikenaberezny.com/talks/pyworks08/url_mapping_with_routes.pdf">Download Slides  (PDF)</a></p>
<p>We explored the <a href="http://routes.groovie.org">Routes</a> library from the ground up, setting it up and then exploring its options and matching.  We worked through many of the examples with live demos on the Python interactive interpreter.</p>
<p>The talk was attended by several <a href="http://pylonshq.com/">Pylons</a> users, who gained a better understanding of how Routes works by seeing it outside the context of any particular web framework.</p>
<h4>URL Mapping with Horde/Routes</h4>
<p><a href="http://mikenaberezny.com/talks/pyworks08/url_mapping_with_horde_routes.pdf">Download Slides  (PDF)</a></p>
<p>Bonus Slides!  <a href="http://dev.horde.org/routes">Horde/Routes</a> is a PHP 5 library that is a direct port of Routes.  Since there were so many PHP folks at this conference as well, I ported all of the examples in my Routes talk to work with Horde/Routes.  </p>
<p>These slides will help you get acquainted with the PHP version.  Since the two presentations are otherwise identical, you might also find it an interesting comparison between Python and PHP 5.</p>
]]></description></item><item><title>November Horde Board Meeting Summary - Chuck Hagenbuch</title><link>http://hagenbu.ch/blog/506</link><pubDate>Sat, 15 Nov 2008 05:17:01 +0000</pubDate><description><![CDATA[The focus of this month's board meeting was Horde 4 and the move to git. We made good progress and decisions on both counts.]]></description></item><item><title>Py65 0.1: Introducing Py65Mon - Mike Naberezny</title><link>http://mikenaberezny.com/2008/11/09/py65-01-released-introducing-py65mon/</link><pubDate>Mon, 10 Nov 2008 06:00:22 +0000</pubDate><description><![CDATA[<p><a href="http://pypi.python.org/pypi/py65/0.1">Py65 0.1</a>, a 6502 microprocessor simulator written in Python, has been released and is available on the Python Package Index (PyPI).  You can now <a href="http://peak.telecommunity.com/DevCenter/EasyInstall">easy_install</a> it:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">$ easy_install py65</pre></div></div>

</pre>
<h4>Py65Mon</h4>
<p>Since my <a href="http://mikenaberezny.com/2008/07/01/py65-6502-microprocessor-simulator/">initial announcement</a> of Py65, there have been many bug fixes and unit tests added.  The most noticeable addition is a new machine language monitor.  It will be installed automatically and is started with the <code>py65mon</code> command:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">$ py65mon
 
Py65 Monitor
 
&lt;6502: A=00, X=00, Y=00, Flags=20, SP=ff, PC=0000>
.</pre></div></div>

<p>At the prompt, type <code>help</code> for a list of commands or <code>help command</code> for help on a specific command.  The monitor commands are very similar to the excellent <a href="http://www.viceteam.org/vice_9.html">VICE Monitor</a>, so VICE users should feel right at home.</p>
<p>The biggest difference from VICE is that the <code>load</code> command requires a load address as the second argument and starts reading the binary data from byte 0.  It does not expect byte 0 and 1 of the file to contain a Commodore-style load address.  Also, assembling and disassembling from the monitor are not yet implemented but are planned.</p>
<h4>Hello World</h4>
<p>Just like Michal Kowalski’s <a href="http://home.pacbell.net/michal_k/6502.html">6502 Macroassembler & Simulator</a> for Windows, Py65Mon will trap writes to <code>$E001</code> and echo the bytes to <code>STDOUT</code>.  </p>
<p>This is enough to get us to our first “Hello World” program running under Py65.  First, we’ll write a short assembly language program to print the message.  Save it as <code>hello.asm</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="assembler" style="font-family:monospace;">*=$C000
CHAROUT=$E001
 
HELLO:
  LDX #$00
LOOP:
  LDA MESSAGE,X
  BEQ DONE
  STA CHAROUT
  INX
  JMP LOOP
DONE:
  RTS
 
MESSAGE = *
  !text "Hello, World!"
  !byte 0</pre></div></div>

<p>We then assemble the program into a binary, using Marco Baye’s <a href="http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/">Acme Cross-Assembler</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">src$ acme --format plain --outfile hello.bin hello.asm</pre></div></div>

<p>The <code>--format plain</code> switch instructs Acme not to prepend the Commodore-style load address in the binary.  If you’d like to get going quickly, you can also <a href='http://mikenaberezny.com/wp-content/uploads/2008/11/hello.bin'>download hello.bin</a>.</p>
<p>With the binary ready, we can start the monitor and load it in:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">src$ py65mon
 
Py65 Monitor
 
&lt;6502: A=00, X=00, Y=00, Flags=20, SP=ff, PC=0000>
.add_label c000 hello
 
&lt;6502: A=00, X=00, Y=00, Flags=20, SP=ff, PC=0000>
.load "hello.bin" hello
Wrote +29 bytes from $c000 to $c01c</pre></div></div>

<p>Py65Mon supports symbolic addressing in most commands.  The first command, <code>add_label</code>, defines <code>hello</code> as a label for address <code>$C000</code>.  The second command loads the binary into that address.</p>
<p>We can now set the program counter with the <code>registers</code> command, and execute the code up to <code>RTS</code> with the <code>return</code> command.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">&lt;6502: A=00, X=00, Y=00, Flags=20, SP=ff, PC=0000>
.registers pc=hello
 
&lt;6502: A=00, X=0d, Y=00, Flags=20, SP=ff, PC=c000>
.return
Hello, World!
&lt;6502: A=00, X=0d, Y=00, Flags=20, SP=ff, PC=c00e>
.</pre></div></div>

<p>Now we have run the program, printed “Hello, World!”, and returned to the prompt.  We can see the program counter is left at <code>$C00E</code>.  </p>
<p>You can also use the <code>step</code> command to step through the program.  Just set the program counter to the start address again (<code>$C000</code> or <code>hello</code>) and repeatedly enter <code>step</code>.  As you are stepping repeatedly, you can simply hit ENTER to repeat the last command.  </p>
<p>From here you can also explore other commands, e.g. <code>mem c000:c003</code> to display the memory in that address range.  The default radix is hexadecimal.  You can also prefix with <code>$</code> for hexadecimal or <code>+</code> for decimal, like <code>mem +49152:+49155</code>.</p>
<h4>Next Steps</h4>
<p>Py65 and its monitor are now complete enough to run most simple 6502 programs, including many from the <a href="http://6502.org/source/">6502.org Source Code Repository</a>.  The next versions will include more I/O devices and monitor commands, with the goal of running a sophisticated 6502 program like Lee’s Davisons’ <a href="http://members.lycos.co.uk/leeedavison/6502/ehbasic/">Enhanced 6502 BASIC</a>.</p>
]]></description></item><item><title>Kolab_Storage 0.2.0 (alpha) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Kolab_Storage&amp;=0.2.0&amp;downloads</link><pubDate>Wed, 29 Oct 2008 17:22:41 +0000</pubDate><description><![CDATA[
                            * Fixed the Kolab_Storage::getFolder() function.
* Added Kolab_List::getForeignDefault() to retrieve the default folders of other
  users. Also fixes issues with overlapping default folders.
* Fixed retrieval of general Kolab annotations.
* Correctly determine the owner of the INBOX of another user.
* Automatically trigger a folder within the folder handler.
* Moved Kolab session handler from Kolab_Storage to Kolab_Server.
* Moved the IMAP drivers from Kolab_Storage to Kolab_Server as the
  IMAP connection must be handled by the Kolab session.
                        ]]></description></item><item><title>Auth 0.1.1 (beta) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Auth&amp;=0.1.1&amp;downloads</link><pubDate>Wed, 29 Oct 2008 13:43:55 +0000</pubDate><description><![CDATA[
                            * Add signup drivers to package.xml (Bug #7345).
* Fix the "overwriting realm info from application auth drivers" (Bug #6749)
* Switched Kolab auth handling from IMAP to LDAP by using Kolab_Server.
* Added "add user" capability to the Kolab driver.
                        ]]></description></item><item><title>Kolab_Server 0.2.0 (alpha) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Kolab_Server&amp;=0.2.0&amp;downloads</link><pubDate>Wed, 29 Oct 2008 12:02:22 +0000</pubDate><description><![CDATA[
                            * Fixed retrieval of the users IMAP home server.
* Allowed retrieving a DN for an id matching either mail, uid or alias.
  (Kolab issue 2587, https://www.intevation.de/roundup/kolab/issue2587)
* Moved Kolab session handler from Kolab_Storage to Kolab_Server.
* Enabled retrieval of the users free/busy server. (Enhancement: #6699)
* Added capability to list objects.
* Added write capabilities to the package.
* Moved the IMAP drivers from Kolab_Storage to Kolab_Server as the
  IMAP connection must be handled by the Kolab session.
* Added a test class for simplified PHPUnit testing.
                        ]]></description></item><item><title>Kolab_Format 1.0.0RC1 (beta) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Kolab_Format&amp;=1.0.0RC1&amp;downloads</link><pubDate>Wed, 29 Oct 2008 11:38:41 +0000</pubDate><description><![CDATA[
                            * Fixed handling of return values from _load/_saveArray().
* Allowed disabling the automatic creation of categories.
* Merge a single mail address into the list of mail addresses.
* Support storing public gpg keys in the contact format.
* Fixed a PHP5 only check when reading XML content.
* Use the 'application' instead of the 'categories' element in the 
  preferences driver.
* Fix category handling when no preference backend is available.
                        ]]></description></item><item><title>Kolab_Filter 0.1.0 (alpha) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Kolab_Filter&amp;=0.1.0&amp;downloads</link><pubDate>Wed, 29 Oct 2008 11:11:25 +0000</pubDate><description><![CDATA[
                            * Preparations for an initial release.
                        ]]></description></item><item><title>Kolab_FreeBusy 0.1.0 (alpha) - Horde PEAR Channel</title><link>http://pear.horde.org/index.php?package=Kolab_FreeBusy&amp;=0.1.0&amp;downloads</link><pubDate>Wed, 29 Oct 2008 11:07:18 +0000</pubDate><description><![CDATA[
                            * Initial release.
                        ]]></description></item><item><title>Kronolith: Starting with version 3.0, Kronolith is now able to store all events i... - Horde News</title><link/><pubDate>Wed, 22 Oct 2008 23:00:23 +0000</pubDate><description><![CDATA[Starting with version 3.0, Kronolith is now able to store all events in UTC time. This allows sharing of events across different timezones.]]></description></item><item><title>Jan Schneider interviewed by TechWorld - Chuck Hagenbuch</title><link>http://hagenbu.ch/blog/503</link><pubDate>Mon, 20 Oct 2008 20:27:04 +0000</pubDate><description><![CDATA[Techworld Australia just ran a great interview with Jan Schneider on Horde's history, present, future, and Jan's involvement.]]></description></item><item><title>PHP Temporary Streams - Mike Naberezny</title><link>http://mikenaberezny.com/2008/10/17/php-temporary-streams/</link><pubDate>Sat, 18 Oct 2008 14:00:14 +0000</pubDate><description><![CDATA[<p>It’s been a while since David Sklar <a href="http://www.sklar.com/blog/archives/116-Let-a-thousand-string-concatenations-bloom.html">called out</a> to <i>let a thousand string concatenations bloom</i>.  That discussion produced some entertaining suggestions for putting strings together such as using <code>preg_replace</code> and calling out to MySQL with <code>SELECT CONCAT</code>.  </p>
<p>Here’s an approach that uses filesystem functions.  When combined with some lesser-known PHP streams functionality, it has several practical applications.</p>
<h4>Opening Files for Reading and Writing</h4>
<p>There are several modes for <a href="http://www.php.net/fopen">opening</a> a file that will allow you to seek to arbitrary positions in the file and read or write at those positions.  One of the most frequently used of these modes is <code>w+</code>, which the <code>tmpfile</code> function uses automatically.</p>
<p>We can repeatedly write, then rewind the pointer and read:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #990000;">tmpfile</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;
<span style="color: #990000;">fwrite</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span> <span style="">'foo'</span><span style="color: #009900;">)</span>;
<span style="color: #990000;">fwrite</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span> <span style="">'bar'</span><span style="color: #009900;">)</span>;
 
<span style="color: #990000;">rewind</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;
<span style="color: #000088;">$contents</span> <span style="color: #339933;">=</span> stream_get_contents<span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;  <span style="color: #666666; font-style: italic;">//=> "foobar"</span>
<span style="color: #990000;">fclose</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;</pre></div></div>

<p>When writing to the filesystem, the above provides yet another inefficient solution to David’s exercise.  Now let’s take it a bit further to see how this can be useful.</p>
<h4>In-Memory Streams</h4>
<p>PHP 5.1 introduced two new in-memory streams: <code>php://memory</code> and <code>php://temp</code>.  The <code>php://memory</code> stream operates entirely in memory.  The <code>php://temp</code> stream operates in memory until it reaches a given size, then transparently switches to the filesystem.  </p>
<p>We can modify the above example to use the <code>php://memory</code> stream instead of hitting the filesystem:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">(</span><span style="">'php://memory'</span><span style="color: #339933;">,</span> <span style="">'w+'</span><span style="color: #009900;">)</span>;
<span style="color: #990000;">fwrite</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span> <span style="">'foo'</span><span style="color: #009900;">)</span>;
<span style="color: #990000;">fwrite</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #339933;">,</span> <span style="">'bar'</span><span style="color: #009900;">)</span>;
 
<span style="color: #990000;">rewind</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;
<span style="color: #000088;">$contents</span> <span style="color: #339933;">=</span> stream_get_contents<span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;  <span style="color: #666666; font-style: italic;">//=> "foobar"</span>
<span style="color: #990000;">fclose</span><span style="color: #009900;">(</span><span style="color: #000088;">$f</span><span style="color: #009900;">)</span>;</pre></div></div>

<p>Putting a string inside a fast temporary stream can be very useful.  For example, we can then <a href="http://us2.php.net/manual/en/function.stream-filter-append.php">attach filters</a> to that stream.  </p>
<h4>Testing</h4>
<p>Temporary streams are also handy for testing.  There are some rather elaborate virtual file system libraries out there but many time</p><p><i>Truncated by Planet Horde, read more at <a href="http://mikenaberezny.com/2008/10/17/php-temporary-streams/">the original</a> (another 4353 bytes)</i></p>]]></description></item><item><title>Commodore LCD Firmware - Mike Naberezny</title><link>http://mikenaberezny.com/2008/10/04/commodore-lcd-firmware/</link><pubDate>Sat, 18 Oct 2008 14:00:14 +0000</pubDate><description><![CDATA[<p>The files below are EPROM images from <a href="http://en.wikipedia.org/wiki/Bil_Herd">Bil Herd</a>’s prototype <a href="http://www.floodgap.com/retrobits/ckb/secret/lcd.html">Commodore LCD</a>.  </p>
<ul>
<li><a href='http://mikenaberezny.com/wp-content/uploads/2008/10/kizapr-u102.bin'>kizapr-u102.bin</a></li>
<li><a href='http://mikenaberezny.com/wp-content/uploads/2008/10/sizapr-u103.bin'>sizapr-u103.bin</a></li>
<li><a href='http://mikenaberezny.com/wp-content/uploads/2008/10/sept-m-13apr-u104.bin'>sept-m-13apr-u104.bin</a></li>
<li><a href='http://mikenaberezny.com/wp-content/uploads/2008/10/ss-calc-13apr-u105.bin'>ss-calc-13apr-u105.bin</a></li>
</ul>
<p>You can also download them as a single archive: <a href='http://mikenaberezny.com/wp-content/uploads/2008/10/commodore-lcd-roms.zip'>commodore-lcd-roms.zip</a></p>
<p>I’ve always been curious about this machine so I sent my device programmer to Bil so that he could read the EPROMs.  Bil was very kind to do this and we should all thank him for it.  This is the first time that these images have been seen in many years.  </p>
<p>Start your disassemblers!</p>
]]></description></item><item><title>PHP Developer Best Practices - Mike Naberezny</title><link>http://mikenaberezny.com/2008/09/16/php-developer-best-practices/</link><pubDate>Sat, 18 Oct 2008 14:00:14 +0000</pubDate><description><![CDATA[<p><a href="http://weierophinney.net/matthew">Matthew Weier O’Phinney</a> and I gave a tutorial session at ZendCon 2008 this year titled “PHP Developer Best Practices”.  The tutorial touched on source control, coding standards, testing, documentation, and more.  </p>
<p>The slides are now <a href="http://mikenaberezny.com/talks/zendcon08/php-developer-best-practices.pdf">available in PDF</a> format.  </p>
<p>We were located in Hall B of the Santa Clara Convention Center, which is a very large room that’s also used for the keynotes.  Andi told us the room was selected based on the number of people who registered for our session.  We initially had doubts but the attendance was greater than any previous year and the room worked out quite well.  We were thankful that unlike last year, everyone was able to get a seat.</p>
<p>Thank you to all who attended.  We enjoyed meeting many of you during the breaks and hope that you found our session helpful.</p>
]]></description></item><item><title>Commodore SuperPET - Mike Naberezny</title><link>http://mikenaberezny.com/2008/09/01/commodore-superpet/</link><pubDate>Sat, 18 Oct 2008 14:00:14 +0000</pubDate><description><![CDATA[<p><a href="http://flickr.com/photos/mike-naberezny/2936387575/"><img src="http://farm4.static.flickr.com/3200/2936387575_4f9c94b84f_m.jpg" style="float: right; margin: 0 0 0 5px; padding: 0;" /></a>I’ve been spending more of my free time recently restoring vintage computer <a href="http://mikenaberezny.com/hardware/">hardware</a>.  I am interested in Commodore 8-bit equipment, from the PET/CBM line through to the 64/128 home computers.  I think it’s important to preserve computer history to remember the machines that got us where we are today.</p>
<p>Since much of the hardware I restore is over twenty-five years old, at least half of it is not working when I receive it.  I try to repair everything I can when it’s practical.  My <a href="http://flickr.com/photos/mike-naberezny">Flickr photos</a> page has daily progress of my chip-level repairs on this equipment.</p>
<p>Recently, I received a <a href="http://zimmers.net/cbmpics/csp9000.html">Commodore SuperPET</a> computer.  This is a remarkable machine that was a collaboration between Commodore and the <a href="http://csg.uwaterloo.ca/">Computer Systems Group</a> at the University of Waterloo in Ontario, Canada.  The SuperPET is a standard Commodore PET 8032 computer with an internal expansion that adds a powerful <a href="http://en.wikipedia.org/wiki/Motorola_6809">Motorola 6809</a> microprocessor, an additional 64K of expansion RAM, a fast 6551-based RS232 serial port, and custom Waterloo software in ROM.  </p>
<p>The SuperPET can operate in <a href="http://6502.org">MOS 6502</a> mode, where it is a Commodore PET 8032 with the extra 64K expansion and 6551 ACIA.  Curiously, this 64K expansion memory is not compatible with the 8096.  A switch on the side puts the SuperPET into 6809 mode, where it can run a number of disk-based Waterloo programming languages including BASIC, Pascal, APL, Fortan, and COBOL.  When in 6809 mode, a menu in ROM prompts the user to select a language which is then loaded from disk.</p>
<p>My SuperPET seemed to work when I got it, with the 6502 mode working perfectly and 6809 mode showing the power-on menu.  However, after obtaining the disk-based software, none of the Waterloo languages would run after loading.  After verifying the disks were good, I suspected the 64K expansion RAM since the rest of the machine seemed to be working.  Using technical information from the <a href="http://6502.org/users/andre/petindex/">PET Index</a> on 6502.org, I wrote several memory test programs to exercise the expansion RAM.  </p>
<p>The expansion RAM is comprised of thirty-two 4116 DRAM chips.  A couple of these had become loose from their sockets and my test program found that one of them had failed.  I got a replacement from the pick-up counter at <a href="http://www.jameco.com">Jameco</a> and installed it.  Now, my SuperPET passes my expansion memory test and also boots all of the Waterloo languages.  It is now fully functional and I’m exploring the Waterloo software.</p>
<p>One of the most interesting features of the Waterloo languages is how files are accessed.  Commodore disk drives attached to the SuperPET are accessed with a filename like <code>disk8/1.program-name</code> which selects unit 8, drive 1.  The SuperPET was designed to be attached to a mainframe computer, known as the “host”, through its serial port.  Accessing a file like <code>host/program-name</code> would load it from the mainframe if it was running the special <code>HOSTCM</code> program from Waterloo.  </p>
<p>The <code>HOSTCM</code> program was available for <a href="http://en.wikipedia.org/wiki/VM/CMS">VM/CMS</a> and other mainframe operating systems.  Beyond that, I’ve not been able to find out much information about it.  I would like to figure out the protocol and write a program so that a modern PC could be used as a host computer for the SuperPET.  </p>
<p><em>If you have any information on the SuperPET or have Commodore hardware you’d like to donate, please contact me.</em></p>
]]></description></item></channel></rss>
