Close
0%
0%

Psion SSD Drive (with an RP2040)

In my repeated efforts to drag Psion's 16-bit computers into the 21st century, I'm designing a USB drive for their proprietary SSDs.

Similar projects worth following
I've been tinkering with Psion's 16-bit computers (the SIBO range, or "SIxteen Bit Organiser") for a few years now. One of my current projects is designing a USB drive to read Psion's proprietary SSDs using a Raspberry Pi Pico.

Just add a custom library and some logic level shifting, and away we go!

(Note: The main library will also run on Arduino, so you can grab an Uno and get started - no logic level shifting required!)

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.


  • 1 × Raspberry Pi Pico
  • 1 × 74AXP1T45 1-bit dual supply translating transceiver, for two-way logic level shifting for the DATA line
  • 1 × SN74AHCT1G125 Single bus buffer gate, for one way logic level shifting for the CLK line

  • TinyUSB + Raspberry Pi Pico = USB-Readable Psion SSD!

    Alex Brown08/13/2022 at 07:22 0 comments

    Just a quick update: After spending a few hours playing with the Adafruit version of TinyUSB for Arduino, I can now see a Psion SSDs as block devices in Linux!

    The status is:

    • ROM SSDs: Readable, but no FEFS drivers in Linux. However, DD works fine, so you can use SIBOIMG to extract files.
    • Flash SSDs: Same as ROM SSDs. No writing as yet because I haven't implemented that in libsibo.
    • RAM SSDs: These are FAT formatted so they can be mounted directly in Linux! Fully readable, although a few weird issues like files showing up twice (see the screenshot below). Writing is a mess: ASIC4 SSDs corrupt on write, ASIC5 SSDs just ignore writes. This could be a timing issue on my part, where the code is just going too fast for the RAM chips.

    This is a screenshot of a RAM SSD mounted from /dev/sda (note: no partition table on these), being read by Linux like it was just another USB drive.

    So yeah, this is the closest I've come to having an actual USB SSD Drive. I have a lot to learn about TinyUSB, as I feel like I'm just scratching the surface of its potential. I also still need to write the routines for writing to Flash I and Flash II SSDs in libsibo, plus rig up a 17.5v supply. I'm also quite far into designing a test PCB with through-hole components.

    More to come soon!

View project log

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates