<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ssd on The Last Psion</title><link>/tags/ssd/</link><description>Recent content in Ssd on The Last Psion</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Sun, 15 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="/tags/ssd/index.xml" rel="self" type="application/rss+xml"/><item><title>Psion SSD Drive, anyone?</title><link>/posts/psion-ssd-drive-anyone/</link><pubDate>Sun, 15 May 2022 00:00:00 0000</pubDate><guid>/posts/psion-ssd-drive-anyone/</guid><description>&lt;p&gt;&lt;img src="/posts/psion-ssd-drive-anyone/5549971652613091035.jpg" alt="Raspberry Pi Pico on a breadboard, with wires connecting to a SIBO SSD"&gt;&lt;/p&gt;
&lt;p&gt;I wanted to put out an update about my various Psion projects. I’ve been away for a while, thanks to some mental health issues culminating in a career change. It’s only in the last week or so that I’ve felt able to look at projects like this again; projects I enjoy but for which I just didn’t have the mental energy.&lt;/p&gt;
&lt;p&gt;I have started to work on something again, something I had kept quiet about because I didn’t want the outside pressure. But now I think that outside input might help, and I thought this would be the best place to post about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I’m designing a Psion SSD Drive, based on the RP2040, that will work over USB-C.&lt;/p&gt;
&lt;p&gt;I had originally thought about using the ESP32 for this, and the early stages of this project were based on the ESP32. But I don’t need WiFi and I really want to play with the RP2040’s PIOs!&lt;/p&gt;
&lt;p&gt;Near the end of last year I decided to take the code from &lt;code&gt;sibodump&lt;/code&gt; and &lt;code&gt;siboimg&lt;/code&gt; and squash them together on an ESP32. With the help of some friends at my local Hackspace, I picked some level shifters that do an excellent job of converting 3.3v to 5v and (with one chip) back again. I bought a small stock in case I blew one up (which I did), plus some breakout boards. I also bought a Raspberry Pi Pico, simply because it was cheap and I thought it might be fun. Then, with more help from the Hackspace lads, I worked out what circuitry I’d need to write to a Flash SSD. Finally, I tried to design a board, got too bogged down in the details, got annoyed with the project and put it in my Psion cabinet, where it sat for 6 months.&lt;/p&gt;
&lt;p&gt;Last week I decided I’d take another look at the project. Long story short and almost on a whim, I decided to get the Pico out and try converting the code over. I then discovered TinyUSB, and in a moment decided that the RP2040 would be far more fun to play with than the ESP32.&lt;/p&gt;
&lt;p&gt;To be fully compliant with the Psion SIBO HDK, I need 4 pins: &lt;code&gt;DATA&lt;/code&gt;, &lt;code&gt;CLK&lt;/code&gt;, &lt;code&gt;DATA_DIR&lt;/code&gt; (to say which direction &lt;code&gt;DATA&lt;/code&gt; is going), and &lt;code&gt;CLK_OE&lt;/code&gt; (to disable &lt;code&gt;CLK&lt;/code&gt; when it’s not in use). &lt;code&gt;CLK_OE&lt;/code&gt; isn’t necessary for communication, but it makes the drive fully compliant with the HDK, so I’d like to try to implement it.&lt;/p&gt;
&lt;p&gt;For USB communication, I’m planning on using TinyUSB in two ways. I’d like to make this a block device, but I’m not clear on how to do this well. But I would really like to implement a dummy ethernet device and run a web interface. This is going to give users a huge amount of flexibility, plus make the Drive as cross-platform as possible. I’ll probably keep some sort of serial comms available for debugging, too.&lt;/p&gt;
&lt;p&gt;I want the Drive to be able to do regular read-write actions, but also rip and burn SSD images, show full details of the SSD hardware, and (if I can work out how) show the battery status of a RAM SSD.&lt;/p&gt;
&lt;p&gt;I’m currently prototyping with a Raspberry Pi Pico and the Arduino libraries on PlatformIO. As time goes on I will probably try to use the Arduino libraries less and go straight for the RP2040 C/C++ SDK, but for now it’s made the code a lot easier to port to the Pico. Even switching from Arduino’s &lt;code&gt;digitalWrite()&lt;/code&gt; to the SDK’s &lt;code&gt;gpio_put()&lt;/code&gt; has given the code a huge speed boost; toggling CLK goes from about 350KHz to well over 20MHz, and that’s without using PIO. I’m also still not sure if PlatformIO is making my life easier or harder…&lt;/p&gt;
&lt;p&gt;My next steps in no particular order are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Move communication from software to PIO. There are four basic types of “frame”: Device Reset, Send Control Command, Send Data and Receive Data. Then I need to add &lt;code&gt;DATA_DIR&lt;/code&gt; and &lt;code&gt;CLK_OE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Convert the Flash FS code from a series of functions to a class.&lt;/li&gt;
&lt;li&gt;Work out how to write to a Flash SSD.&lt;/li&gt;
&lt;li&gt;Work out how to read RAM SSDs (they use FAT) over SIBO-SP.&lt;/li&gt;
&lt;li&gt;Add a simple web interface via TinyUSB.&lt;/li&gt;
&lt;li&gt;Design a proper prototype board, rather than having everything on a breadboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’d really love to hear your thoughts on this. I’ll be working on it at my own pace when time allows, so don’t expect it to be done in a month or even in a year. I haven’t created a GitHub repo yet, but I will once the code is at a suitable point. But I can see that I’m going to need some input from the outside world to make this work.&lt;/p&gt;
&lt;p&gt;As an aside, rest assured that I will be revisiting the WiFi Pack at some point, but it’s not my priority right now.&lt;/p&gt;
&lt;h2 id="relevant-links"&gt;Relevant links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sibodump&lt;/code&gt;: &lt;a href="https://codeberg.org/thelastpsion/sibo-ssd-dump"&gt;https://codeberg.org/thelastpsion/sibo-ssd-dump&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;siboimg&lt;/code&gt;: &lt;a href="https://codeberg.org/thelastpsion/siboimg-c"&gt;https://codeberg.org/thelastpsion/siboimg-c&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Siena SSD Drive</title><link>/posts/siena-ssd-drive/</link><pubDate>Sun, 17 Nov 2019 00:00:00 0000</pubDate><guid>/posts/siena-ssd-drive/</guid><description>&lt;p&gt;&lt;img src="/posts/siena-ssd-drive/5213481573993546999.jpg" alt="A Psion Series 3mx next to a Siena SSD Drive"&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been an interesting morning. I&amp;rsquo;ve been digging around in the internals of the Siena SSD drive and made some discoveries.&lt;/p&gt;
&lt;p&gt;The Siena SSD drive was released so that the diminutive Siena could still read SSDs. I bought one of these on eBay a week ago because I wanted to answer a question: &amp;ldquo;How did Psion get the SIBO Serial Protocol to work over RS-232?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;At first I thought there were two ways that Psion could have done this. First, the SIBO-SP packets (12 bits in length, although only 9 are &lt;del&gt;useful&lt;/del&gt; significant) are repackaged so they fit into 8 bits. Or second, the Siena SSD drive tells the SIBO machine that it&amp;rsquo;s SIBO-SP compatible and then changes from RS-232 using to SIBO-SP (maybe still using RS-232 signal levels that are downconverted for ASIC4/5?).&lt;/p&gt;
&lt;p&gt;Turns out there was a third way.&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/siena-ssd-drive/8026661573993665231.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The only documentation I have for the Honda connector is from a Series 5 service manual. In it, pins 10,13 and 14 are shown as not connected. Turns out that&amp;rsquo;s not the case with the Honda SIBO machines (3c, 3mx and Siena). On the 3c board (pictured with the stripped-down drive) they connect to a MAX3212, an RS-232 transceiver.&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/siena-ssd-drive/8526861573993645331.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;This means that the Honda serial cable has a second set of serial connections, separate to the main RS-232 used for things like PsiWin.&lt;/p&gt;
&lt;p&gt;The Siena drive has a passthrough RS-232 port with pins 9 to 14 disconnected. Having a second serial channel would explain how a Honda SIBO machine can do both regular RS-232 and read an SSD at the same time.&lt;/p&gt;
&lt;p&gt;The white square in the top-middle of the Siena drive&amp;rsquo;s board seems to be another custom ASIC! All the SSD pins connect to this. I&amp;rsquo;ve not seen any information about this chip anywhere. My guess is that it splits the single-wire SIBO-SP into two wires for transmission along the second serial link, but until I can get a logic analyser on it I can&amp;rsquo;t say that for certain. The rest of the board must be providing things like Vpp for writing to Flash SSDs and lowering the 9v power supply to 5v.&lt;/p&gt;
&lt;p&gt;This does sadly mean that, even with drivers, there is no way to get the drive to work on an EPOC32 machine, but it does potentially mean more exciting things for SIBO machines with Honda connectors, as it does look like there&amp;rsquo;s a way to talk SIBO-SP over the Honda connector.&lt;/p&gt;
&lt;h2 id="update-2026-04-15"&gt;UPDATE: 2026-04-15&lt;/h2&gt;
&lt;p&gt;Last year a few of us in the Psion Community came across an update to the SIBO C SDK that we didn&amp;rsquo;t have before.&lt;/p&gt;
&lt;p&gt;At a conference in the late 90s, Psion handed out Word documents for developers to update version 2.10 of the SDK to 2.15. The latest version that I have of the Hardware Guide is 2.10. This includes a table that I have reproduced here with added information on ARM/EPOC32 machines:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Pin&lt;/th&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Direction&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Siena:&lt;/strong&gt; Vin at +6V DC ±10%&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Series 3c/mx:&lt;/strong&gt; 5V power out, 30mA maximum&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; 5V power out (max current unknown)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;RTS&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DTR&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;TXD&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DSR&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DCD&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CTS&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;RXD&lt;/code&gt; (RS232)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;SIBO:&lt;/strong&gt; &lt;code&gt;SDOE&lt;/code&gt; - data direction control&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; Vpcc&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;SIBO:&lt;/strong&gt; &lt;code&gt;EXTSTAT&lt;/code&gt; - active low peripheral detect line&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; N/C&lt;/td&gt;
 &lt;td&gt;N/C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;11&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;SIBO:&lt;/strong&gt; &lt;code&gt;EXON&lt;/code&gt; - external turn-on&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; Vpp&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;SIBO:&lt;/strong&gt; &lt;code&gt;INT&lt;/code&gt; - peripheral interrupt&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; N/C&lt;/td&gt;
 &lt;td&gt;N/C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;13&lt;/td&gt;
 &lt;td&gt;SIBO: &lt;code&gt;SD&lt;/code&gt; - serial data&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;-&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; N/C&lt;/td&gt;
 &lt;td&gt;N/C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;SIBO:&lt;/strong&gt; &lt;code&gt;SCK&lt;/code&gt; - data clock&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ARM:&lt;/strong&gt; N/C&lt;/td&gt;
 &lt;td&gt;N/C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;GND&lt;/code&gt; - Signal and power ground&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;---&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;GND&lt;/code&gt; - Shield frame ground&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;---&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt; Out of machine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;--&lt;/code&gt; Into machine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;-&amp;gt;&lt;/code&gt; Bidirectional&lt;/li&gt;
&lt;li&gt;&lt;code&gt;---&lt;/code&gt; Ground&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notable differences here between SIBO and ARM machines are pins 9 and 11. As no one has yet blown up a Siena drive by plugging it in to a Series 5, I assume this wouldn&amp;rsquo;t cause a problem with other peripherals.&lt;/p&gt;
&lt;p&gt;Also, the last time I tried to attach an oscilloscope to a Siena SSD Drive, I slipped and blew up a regulator - one that&amp;rsquo;s no longer manufactured. Luckily I have two other drives, but these things are rare. I&amp;rsquo;ll be much more careful in the future.&lt;/p&gt;</description></item><item><title>A long overdue update - ASIC replication and VHDL</title><link>/posts/aisc-replication-vhdl/</link><pubDate>Wed, 30 Oct 2019 00:00:00 0000</pubDate><guid>/posts/aisc-replication-vhdl/</guid><description>&lt;p&gt;&lt;img src="/posts/aisc-replication-vhdl/asic4.jpg" alt="Diagram of ASIC4"&gt;&lt;/p&gt;
&lt;p&gt;It’s been far too long since my last update on this project. It’s the usual excuse (“I’m sorry, but life just got in the way, blah blah blah.”) and to those of you who are taking an interest in my little WiFi Pack project, not to mention the rest of the efforts of the Last Psion project, I can only apologise. For now, here’s a brief update on what I’ve been up to.&lt;/p&gt;
&lt;p&gt;My focus has shifted slightly, away from SIBODUMP and other C projects, over to the little chip pictured above. It’s Psion’s ASIC4, described by Psion themselves as “a serial protocol slave IC for addressing memory and general memory-mapped peripherals.” I’ve long thought that this wee beasty has been the key to getting the WiFi Pack working.&lt;/p&gt;
&lt;p&gt;So, why pick ASIC4 instead of its older sister, ASIC5? Well, while ASIC5 is a very versatile chip (on-board UART, for example), it doesn’t offer as many options for peripherals. While ASIC5 can address 8MB of storage. ASIC4 can address up to 256MB split 50-50 between storage and peripherals.&lt;/p&gt;
&lt;p&gt;ASIC4 is, of course, no longer being manufactured. Right now the only plentiful source of ASIC4s is the selection of SSDs that appear regularly on eBay. While this would certainly provide me with the silicon that I crave, it would also take SSDs off the market. It would also leave me with a large number of dead SSDs cluttering up my desk.&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/aisc-replication-vhdl/4479651572446440918.jpg" alt="PCB of a ROM SSD (Autoroute) using ASIC4"&gt;
&lt;em&gt;PCB of a ROM SSD (Autoroute) using ASIC4.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As with all similar retro projects, this has left me with a dilemma. Do I accept that I will be responsible for the massacre of countless retro storage modules? I think sacrificing a couple of copies of Autoroute for The Greater Good is acceptable, but it’s certainly not sustainable. What I really need is a way to make more ASIC4s.&lt;/p&gt;
&lt;p&gt;Cue the wonderful world of FPGAs!&lt;/p&gt;
&lt;p&gt;Also, cue headaches and defeatism while I try (and repeatedly fail) to learn VHDL.&lt;/p&gt;
&lt;p&gt;And this is where I am right now, learning VHDL and digital design in general while trying to understand exactly how ASIC4 works. And I’m not going to lie, I’m not enjoying it as much as I wish I was. I like being creative, and right now it feels like there’s very little creativity in studying.&lt;/p&gt;
&lt;p&gt;The creativity will come, of course. Once I have a working ASIC4 replica I will be able to modify it to my heart’s content. For example, how about adding an I2C interface? Or SPI? Or even a Z80 for some weird retro-on-retro gaming?&lt;/p&gt;
&lt;p&gt;And yes, I know I could try to emulate ASIC4 in code rather than simulate (replicate?) it in hardware. The trouble is, I want to create something that fits into the SSD slot of a SIBO machine, something that’s ultra portable so that the user (i.e. me) doesn’t have to worry about forgetting to bring yet another device with him. A Raspberry Pi is just too big for this, and an ESP8266 is just too slow. ASIC2 and ASIC9 (the main ICs in the early and later SIBO machines) require immediate response from anything connected to them using SIBO-SP. If an ESP unit is busy doing other things, corruption will occur.&lt;/p&gt;
&lt;p&gt;So, to you lovely hardware hacking people, I have a request. I would like to hear of projects where people have tried similar things, preferably by people who were, when they started, just as much of a newb when it comes to FPGAs as I am now.&lt;/p&gt;
&lt;p&gt;Answers on a postcard, please.&lt;/p&gt;</description></item><item><title>Updates</title><link>/posts/update-sibo-ssd-3mx-mc400/</link><pubDate>Thu, 06 Dec 2018 00:00:00 0000</pubDate><guid>/posts/update-sibo-ssd-3mx-mc400/</guid><description>&lt;p&gt;I can&amp;rsquo;t believe it&amp;rsquo;s been two months since I last posted here. Much has happened on this project and, although I don&amp;rsquo;t have time to write in detail about these things now, I wanted to give you a brief overview. &lt;strong&gt;Warning: Expect Exclamation Marks.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="a-co-conspirator-has-been-found"&gt;A Co-Conspirator Has Been Found!&lt;/h2&gt;
&lt;p&gt;Karl happened to be working on a Psion SSD project at the same time as me and asked me if I wanted to collaborate. I was apprehensive at first - us techies can be quite possessive of our projects at times - but it&amp;rsquo;s been working brilliantly. We&amp;rsquo;re approaching the SSD challenge from two different angles, which has actually helped in analysing the SIBO platform. So if I refer to &amp;ldquo;we&amp;rdquo; rather than &amp;ldquo;I&amp;rdquo;, you know I&amp;rsquo;m talking about Karl and me.&lt;/p&gt;
&lt;h2 id="sibo-serial-protocol-cracked"&gt;SIBO Serial Protocol Cracked!&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve finally managed to get a version of my SIBO-SP decoder released on GitHub. You&amp;rsquo;ll need a copy of PulseView and the sigrok libraries to use them. I&amp;rsquo;ll go into more detail about it in a later post, but I will say thank you to Karl for pointing out that the SIBO-SP data payload is sent LSB first instead of the usual MSB. This is implied in the HDK but not actually explained. Once I&amp;rsquo;d reversed the bits, suddenly things started to fall into place.&lt;/p&gt;
&lt;p&gt;The decoder: &lt;a href="https://github.com/thelastpsion/libsigrokdecode"&gt;https://github.com/thelastpsion/libsigrokdecode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sample files: &lt;a href="https://github.com/thelastpsion/sibo-sigrok-sessions"&gt;https://github.com/thelastpsion/sibo-sigrok-sessions&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ram-ssds-use-fat16"&gt;RAM SSDs Use FAT16!&lt;/h2&gt;
&lt;p&gt;This is so important, as it makes writing libraries and interfacing with an SD card so much easier. The ROM and Flash SSDs, however, use a different format that Karl is in the process of cracking.&lt;/p&gt;
&lt;h2 id="new-software"&gt;New Software!&lt;/h2&gt;
&lt;p&gt;&lt;img src="/posts/update-sibo-ssd-3mx-mc400/2415091544095324927.png" alt="Screenshot of a Trello board"&gt;&lt;/p&gt;
&lt;p&gt;Karl and I have been talking about writing new software for the SIBO platform, especially RPG, platform and text adventure games. We&amp;rsquo;re putting together a Trello board of ideas. We welcome suggestions, but not too many - we&amp;rsquo;ve got plenty to keep us occupied right now!&lt;/p&gt;
&lt;h2 id="i-got-a-3mx"&gt;I got a 3mx!&lt;/h2&gt;
&lt;p&gt;I found an upgrade. It was dirt cheap. You are allowed to be jealous.&lt;/p&gt;
&lt;p&gt;This basically means I have been able to use my old &amp;ldquo;production&amp;rdquo; 3c as my main test device. I&amp;rsquo;ll still be using the 3a to check compatibility and also because it has the old-style SIBO serial port.&lt;/p&gt;
&lt;h2 id="i-got-an-mc-400"&gt;I got an MC-400!&lt;/h2&gt;
&lt;p&gt;Possibly the best laptop in the world, and yet is the most useless given that it&amp;rsquo;s practically impossible to get software for it. But I like the idea of trying to get modern software and SSDs running on it, maybe even running a newer version of EPOC16 on it. I&amp;rsquo;ll do a full teardown and review at some point in the future, but for now my focus is the Series 3 range.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot more to cover, but all in good time. For now, just know that if you&amp;rsquo;ve got an old SIBO machine, chances are we&amp;rsquo;re going to be building something that&amp;rsquo;s very 21st century for you.&lt;/p&gt;</description></item><item><title>Further Logic Analysis, plus SSD Destruction</title><link>/posts/further-logic-analysis-ssd-destruction/</link><pubDate>Sat, 10 Nov 2018 00:00:00 0000</pubDate><guid>/posts/further-logic-analysis-ssd-destruction/</guid><description>&lt;p&gt;It&amp;rsquo;s been a relatively fruitful month with this project. After struggling to work out why I was getting some weird signals being measured by my logic analyser (word to the wise: don&amp;rsquo;t forget to connect GND), I managed to get some relatively meaningful waveforms, meaning I could properly start to write a sigrok decoder.&lt;/p&gt;
&lt;p&gt;Writing a decoder was a slight challenge as I had never touched Python before, but I was able to get something working in about 24 hours!&lt;/p&gt;
&lt;p&gt;These screenshots were taken a couple of weeks ago. Since then, I&amp;rsquo;ve managed to add some more features to the decoder. I&amp;rsquo;m not going to lie, the code isn&amp;rsquo;t the prettiest, but it does work. I&amp;rsquo;ll be uploading it to GitHub once I&amp;rsquo;ve tidied up the code and added a few more features, along with some of the samples. Feel free to have a play!&lt;/p&gt;
&lt;p&gt;The big issue I&amp;rsquo;m having with this part of the project, though, is not being able to tell which device is talking at any one time. This wouldn&amp;rsquo;t be a problem if the SIBO HDK had the full details of how a SIBO machine talks to an SSD, but unfortunately it only has details of the main SIBO Serial Protocol. While this is immensely helpful, I know that I&amp;rsquo;m missing a fair amount of information.&lt;/p&gt;
&lt;p&gt;One suggestion was to add a resistor at the SSD end of the DATA line and use an oscilloscope to measure the slight voltage drop on anything transmitted by the SSD. Unfortunately I don&amp;rsquo;t (yet) own a scope and I don&amp;rsquo;t think my £4 logic analyser will read analogue signals.&lt;/p&gt;
&lt;p&gt;Last week I came across a second way of detecting traffic direction in the SIBO HDK, something I&amp;rsquo;d missed in previous readings. Pin 59 on the ASIC4 is called SDIR, which goes high when it&amp;rsquo;s sending data. However, my SMD soldering skills aren&amp;rsquo;t brilliant and I think I managed to bork at least one SSD trying to do this. These SSDs will not have died in vain, though, as I will explain later.&lt;/p&gt;
&lt;p&gt;Finally, there&amp;rsquo;s the man-in-the-middle option. I now own an Altera MAX II board that I think I could use to forward traffic both ways by detecting when the data line is pulled low at either side, then mirror the traffic on to separate pins. &lt;a href="https://stackoverflow.com/questions/34027858/bidirectional-to-bidirectional-in-vhdl"&gt;This question on StackOverflow&lt;/a&gt; gives an explanation of how this might be done based on some assumptions. However, as I&amp;rsquo;ve said before, my VHDL knowledge is non-existent. I&amp;rsquo;m going to be trying to read up on it as much as possible in the next week to see if I can at least bodge something based on the script in that link.&lt;/p&gt;
&lt;p&gt;Even if none of the above work, there is a chance that I might be able to work out what&amp;rsquo;s going on. &lt;a href="https://github.com/jbruchon/elks"&gt;The ELKS Project&lt;/a&gt; was in part an attempt to get Linux running on SIBO machines. Deep in the code there is &lt;a href="https://github.com/jbruchon/elks/blob/master/elks/arch/i86/drivers/block/ssd_asm.S"&gt;a very basic SSD driver&lt;/a&gt; written in 8086 assembly. This could help massively with writing the code for the eventual Last Psion module. Another option is to rip a copy of the ROM from a SIBO machine, find the driver and disassemble it.&lt;/p&gt;
&lt;p&gt;All these options sound plausible, but they&amp;rsquo;re all just out of reach for me at the moment. I still have much to learn.&lt;/p&gt;
&lt;p&gt;Now, the dead SSDs. I&amp;rsquo;m going to try to use them for parts and analysis. There aren&amp;rsquo;t currently any schematics of SSDs available, so I&amp;rsquo;m going to try to make a couple.&lt;/p&gt;
&lt;p&gt;Also, I think the ASIC4 is probably still alive on at least one of them. I&amp;rsquo;ve ordered an SMD breakout PCB and some QuikChip, and I&amp;rsquo;m going to try to move the ASIC to the board. I&amp;rsquo;m hoping this is going to make it easier to play around with the ASIC, as long as I don&amp;rsquo;t destroy the chip in the process. I could even try to build an SSD using discrete parts&amp;hellip;&lt;/p&gt;
&lt;p&gt;Finally, one of the SSD enclosures has been &amp;ldquo;repurposed&amp;rdquo; as a breakout unit. I managed to connect the Vcc and Vdd around the wrong way on one SSD, which I&amp;rsquo;m pretty sure didn&amp;rsquo;t do it any favours. The breakout unit will hopefully make sure this doesn&amp;rsquo;t happen again, as well as make it easier for me to connect wires to the port&amp;rsquo;s pins.&lt;/p&gt;
&lt;p&gt;Another thing I&amp;rsquo;ve discovered is that SIBO talks to Flash and RAM SSDs differently. Add to that the fact that some early SSDs use the ASIC5 rather than the ASIC4, plus that there are two types of Flash SSD, and you&amp;rsquo;ve actually got quite a variety of SSD types. I&amp;rsquo;m waiting for a couple of RAM SSDs to arrive in the post (I don&amp;rsquo;t currently own one), at which point I&amp;rsquo;ll tear them down and hope at least one has an ASIC4. After all, an ASIC4 RAM SSD is what I&amp;rsquo;m trying to emulate. It&amp;rsquo;s also worth knowing that the ASIC5 doesn&amp;rsquo;t have the SDIR pin that the ASIC4 has, so would make life a little more difficult.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m pretty sure that SIBO uses FAT16. I&amp;rsquo;m also pretty sure that the ASICs are acting as simple block devices. This would mean that all filesystem management is done in SIBO. This seems to be confirmed in the ELKS SSD driver code, which only talks about writing blocks to the ASIC4 rather than writing files or reading directory structures.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also finally ordered a 3mx. This should be arriving any day now and will probably become my &amp;ldquo;production&amp;rdquo; device. I will still be using the 3c as the target machine for this project. My plan is, of course, for this to work with any SIBO machine that can read an SSD. In that vein, I now own a Workabout MX with a half-working LCD - about half the horizontal lines are dead. Any suggestions on how to repair it, or places I can get a replacement screen, will be gratefully received.&lt;/p&gt;
&lt;p&gt;Part of this month has also been spent getting in touch with a lot of people who used to be involved with the Psion world. I do plan on writing something about that in the future, but for now just know that it&amp;rsquo;s been really exciting to talk to these people who were so influential in the Psion world in the 90s.&lt;/p&gt;
&lt;p&gt;Finally, I am putting out a scrounging request. If anyone has any old Psion equipment they would be happy to donate to the project, please get in touch. I don&amp;rsquo;t mind if it damaged or even dead, I will take it off your hands. Also, if anyone has any old Psion documentation then please let me know. I&amp;rsquo;ve managed to find the HDK and a lot of the SDK as PDFs on the Internet, but I know I&amp;rsquo;m missing a few documents.&lt;/p&gt;
&lt;p&gt;Thanks for reading. I will try to write some more in the next week or so, as well as release the source code for the Sigrok decoder.&lt;/p&gt;</description></item><item><title>The SSD Port and (finally) Some Logic Analysis</title><link>/posts/ssd-port-logic-analysis/</link><pubDate>Sun, 21 Oct 2018 00:00:00 0000</pubDate><guid>/posts/ssd-port-logic-analysis/</guid><description>&lt;p&gt;I now have everything I need to get started on revealing the secrets of the Psion SSD Port. So, here&amp;rsquo;s what I&amp;rsquo;ve been up to this morning.&lt;/p&gt;
&lt;p&gt;Rather than pull apart my &amp;ldquo;production&amp;rdquo; 3c, I&amp;rsquo;ve decided to get to work on a slightly broken 3a. I don&amp;rsquo;t like the idea of doing something dumb thanks to my inexperience and blowing up my 3c. The 3a&amp;rsquo;s battery compartment is in a pretty bad way, but it powers on quite happily with a Series 3 external PSU. So, I pulled it apart and got to work.&lt;/p&gt;
&lt;p&gt;For some reason, this 3a smells really strongly of some spice or other, possibly cumin. It&amp;rsquo;s not pleasant and the unit could really do with a bath in alcohol.&lt;/p&gt;
&lt;p&gt;I removed the door for Port A and directly attached six jumper leads to the six pins of Port A. The other ends of the leads were plugged into a solderless breadboard. I then ran a further six jumper leads from the breadboard to my SSD. Keeping my fingers crossed that I hadn&amp;rsquo;t miswired anything (it&amp;rsquo;s currently my only SSD) I powered up the 3a and&amp;hellip; it still worked!&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/ssd-port-logic-analysis/3148351540131333398.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;My next step was to find out what each pin did. I had already found the SSD pinout using &lt;a href="https://groups.google.com/forum/#!searchin/comp.sys.psion.misc/ssd$20pin%7Csort:date/comp.sys.psion.misc/7ppLpEscpyI/qJMiy0fc2UwJ"&gt;this post from comp.sys.psion.misc&lt;/a&gt;, so I used that as basis and used my multimeter to test the voltages on pins 3 to 5. So, here&amp;rsquo;s the updated pinout, using the post on comp.sys.psion.misc as a basis.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Pin&lt;/th&gt;
 &lt;th&gt;Name&lt;/th&gt;
 &lt;th&gt;When the 3a is on&lt;/th&gt;
 &lt;th&gt;When the 3a is off&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;CLK (input to SSD only)&lt;/td&gt;
 &lt;td&gt;Clock (+5V)&lt;/td&gt;
 &lt;td&gt;0V&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Vbackup&lt;/td&gt;
 &lt;td&gt;+3.75V DC&lt;/td&gt;
 &lt;td&gt;+3.75V DC&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Vpp (for Flash programming)&lt;/td&gt;
 &lt;td&gt;+15.75V DC&lt;/td&gt;
 &lt;td&gt;+9V DC&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;Vcc&lt;/td&gt;
 &lt;td&gt;+5V DC&lt;/td&gt;
 &lt;td&gt;0V&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;DATA (bidirectional)&lt;/td&gt;
 &lt;td&gt;Data (+5V)&lt;/td&gt;
 &lt;td&gt;0V&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Interestingly, the Vpp voltage drop isn&amp;rsquo;t instantaneous, taking just under 10 seconds to drop from 15V to 9V.&lt;/p&gt;
&lt;p&gt;So, I have a few questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;del&gt;What&amp;rsquo;s the point of Vbackup?&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Why does Vbackup stay live when the unit is turned on?&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Why does Vpp drop to 9V when the unit is off? Why doesn&amp;rsquo;t it go off completely?&lt;/li&gt;
&lt;li&gt;Is there a reason Vpp takes time to drop, or is it just a capacitor taking time to discharge?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I now realise that Vbackup is there to maintain power to RAM SSDs so they don&amp;rsquo;t have to rely on their own internal CR1620 batteries when inside the Psion. This answers questions 1 and 2 - that power is needed even if the Psion is turned off. My guess is that RAM SSDs have Vpp disconnected, Flash SSDs have Vbackup disconnected, and ROM SSDs have both disconnected. It is also worth noting that Vbackup and Vpp are live even if there is no SSD connected and the Psion is off, albeit with Vpp running at 9V. This might prove useful in the future.&lt;/p&gt;
&lt;p&gt;I felt it was now time to connect up my USB logic analyser and see if I could use PulseView to see the SIBO Serial Protocol at work. (The other device on the breadboard is an Espruino Pico, which I was using to generate signals to make sure the logic analyser was working.)&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/ssd-port-logic-analysis/1663181540131479332.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;After trying various settings and finally setting the sample rate to 24 MHz, I managed to capture a conversation between the Series 3a and SSD.&lt;/p&gt;
&lt;p&gt;&lt;img src="/posts/ssd-port-logic-analysis/7453761540130426233.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The top line is DATA and the bottom is CLK.&lt;/p&gt;
&lt;p&gt;PulseView and its backend library sigrok have the ability to do some analysis on the signals they capture. There are plugins for all sorts of protocols, such as I2C, AC &amp;lsquo;97, SPI. This made me wonder how difficult it would be to write my own plugin for the SIBO Serial Protocol. After a quick look on Google, I found this:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sigrok.org/wiki/Protocol_decoder_HOWTO"&gt;https://sigrok.org/wiki/Protocol_decoder_HOWTO&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So I think my next step is to see if I can write a protocol decoder for SIBO using the HDK document as a basis. It will help me to understand the protocol better for when I finally get around to building the first SSD prototype.&lt;/p&gt;</description></item><item><title>SSDs, the ASIC4 and the SIBO Serial Protocol</title><link>/posts/ssd-asic4-aibo-serial-protocol/</link><pubDate>Mon, 17 Sep 2018 00:00:00 0000</pubDate><guid>/posts/ssd-asic4-aibo-serial-protocol/</guid><description>&lt;p&gt;Psion were a clever bunch, but like many companies in the early 90s they didn’t really do standards. Although the 3c and 3mx had a proper RS-232 serial port (albeit using a very odd connector), all of the earlier models used a proprietary protocol called the &lt;strong&gt;SIBO Serial Protocol&lt;/strong&gt;. All Series 3 models used SSDs that also communicated using this proprietary protocol.&lt;/p&gt;
&lt;p&gt;A significant part of developing this equipment involves working out how to emulate an SSD or Psion peripheral. Luckily, while trawling the Internet for Psion PDFs I found the &lt;strong&gt;Psion SIBO Hardware Development Kit&lt;/strong&gt;. This book gives a breakdown of how to create equipment for the Psion Series 3 and 3a, including the controller chips needed, the Psion serial protocol, and how to write drivers for the Series 3 and 3a.&lt;/p&gt;
&lt;p&gt;The controller chips are known as &lt;strong&gt;ASIC&lt;/strong&gt; s, or Application Specific Integrated Circuit chips. As far as I can tell, Psion SSDs mainly use the ASIC4, which converts the SIBO Serial Protocol into addresses within the memory range of the SSD’s on-board memory.&lt;/p&gt;
&lt;p&gt;The original ASIC4 has two modes. The first is SSD Mode. This makes the ASIC4 compatible with its predecessor the ASIC5. In this storage-only mode, the ASIC4 can use 21 address bits for memory. As far as I know, this is the way the ASIC4 is configured in every SSD.&lt;/p&gt;
&lt;p&gt;The second mode that the ASIC4 can use is called the Extended Mode. This increases the addressable range of memory from 21 bits to 28 bits. Also, the ASIC4 Extended Mode also has a sub-mode called Mixed Mode, which tells the Psion that it&amp;rsquo;s talking to a device that consists of both storage and peripherals. Mixed Mode causes the addressable memory to be split exactly in half, with the lower half used for memory-mapped peripherals and the upper for storage. According to the HDK, this storage is typically used as a ROM including software and drivers to control the peripheral. However, it seems that it can also be used as RAM storage or Flash storage.&lt;/p&gt;
&lt;p&gt;As you probably already know, the two aims of this project are to give the Psion both better storage and Wi-Fi access. I&amp;rsquo;m going to ignore the Wi-Fi challenge for the moment and focus on emulating an SSD, specifically an ASIC4 in Extended Mode. Being able to do that will be an achievement in itself, because it means my 3c will have some modern non-volatile storage.&lt;/p&gt;
&lt;p&gt;My first challenge is to deal with the SIBO Serial Protocol. To briefly summarise, this uses a 5v half-duplex two-wire system - CLK and DATA. The 3c controls the clock and sends out 12-bit packets (0-11). Bit 0 and Bit 11 are start and end bits. Sometimes Bits 1 and 2 tell the slave device that it&amp;rsquo;s the slave&amp;rsquo;s turn to send data back on Bits 3-10.&lt;/p&gt;
&lt;p&gt;Oh, and the 3c&amp;rsquo;s CLK runs at a nominal 3.84 MHz. Not fast, but not slow either.&lt;/p&gt;
&lt;p&gt;What I really want to do is emulate an ASIC4. As far as I see it, I don&amp;rsquo;t need to totally recreate the ASIC4. All I want to do is make my 3c think that it’s talking to an ASIC4 in Extended Mode.&lt;/p&gt;
&lt;p&gt;I can see three ways of tackling this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Completely emulate the ASIC4 on Espruino.&lt;/strong&gt; This is what I really want to do. But would the Espruino platform be fast enough to cope with the 3.84 MHz clock? I&amp;rsquo;m guessing pure JavaScript would be nowhere near fast enough to handle it, so a driver would need to be written in C.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use an original ASIC4 chip.&lt;/strong&gt; They&amp;rsquo;re not too difficult to get hold of (SSDs pop up all the time on eBay), but there is a finite supply. Also, I would need to remove the chip from an SSD, and I&amp;rsquo;m not quite at that level of soldering skill yet. Finally, I would need to work out how to get Espruino to talk to an ASIC4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emulate the ASIC4 in FPGA.&lt;/strong&gt; This scares me the most. I haven&amp;rsquo;t got a clue about FPGAs. However, I know it would be insanely fast and mean that I wouldn&amp;rsquo;t have to break SSDs. Still, I&amp;rsquo;d need to work out how to get Espruino to talk to the FPGA.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If I do try to emulate an ASIC4, I don’t have to emulate the entire chip and all its pins. I just need to make the Psion think it’s talking to an ASIC4. What I don’t know, though, is if an ASIC4 can be connected to an SSD port in Mixed Mode and have the Psion recognise it. Or, to be more accurate, if I can make something that &lt;em&gt;pretends&lt;/em&gt; to be an ASIC4 in Mixed Mode and have the Psion recognise it.&lt;/p&gt;
&lt;p&gt;Once I have this first major stage working, I will look at emulating Extended Mixed Mode so that I can send commands to the Espruino to control the Wi-Fi.&lt;/p&gt;</description></item></channel></rss>