Psion's portable computers were once among the most beloved devices in the world, although they aren't really talked about in the retro computing world.
I've been using various Series 3 machines for about two decades now and love them to bits. Back in 2017 I decided that I wanted to learn as much as possible about the Sixteen Bit Organisers and their operating system, EPOC16. This SSD Drive is my latest attempt to drag these devices into the 21st century. Because they are still useful, but they just need a little TLC.
Why the Pico? Well, it's the RP2040's PIO that has got me interested. At some point I want to create new Psion SIBO peripherals, and being able to harness the speed of the PIO that's got me the most interested. Just add logic level shifting!
The backend of the RP2040 code is based around libsibo, a fledgling library that will eventually allow an RP2040 to talk to any SIBO peripheral containing Psion's ASIC4 or ASIC5. Currently it is able to read information about an SSD and dump blocks of data over USB serial. But there's more to come.
Libsibo currently uses the Arduino framework inside PlatformIO, so can be compiled to run on pretty much any Arduino-capable microcontroller. If you want to try the code out yourself, go ahead! It's been tested on the Uno and the Nano. The good thing about those devices is that you won't need any level shifting to talk to them.
There are also two companion apps: sibodump (for taking the serial dumps and turning them into files) and siboimg (for extracting files from Psion's proprietary Flash filesystem). The code for both of these is available on my GitHub account.
What can currently be done:
- Get information about an SSD's configuration
- Talk to both ASIC4 and ASIC5 natively
What is yet to be done:
- Writing to Type 1 Flash SSDs
- Writing to Type 2 Flash SSDs
- Writing to RAM SSDs
- 17.5v power for the Vpp line, to enable writing to Flash
- Power to Vback for RAM SSDs
- FEFS (Psion Flash Filesystem) library (for Flash and ROM SSDs)
- FAT library (for RAM SSDs)
- Hardware detection for insertion and removal or SSD
- A proper PCB
- Any sort of case
Decisions to be made:
- I'm still trying to decide how to get a computer to properly talk to the drive. I could do one of two things (but might end up doing both):
- Turn it into a block device and write a FEFS driver and cross-platform tools.
- "Cheat" and use TinyUSB to implement a fake ethernet adapter with a web server and a nice web interface to do all the controlling.