udisk - universal disk controller for UNIBUS
I've been frustrated with large disks connected to unibus machines. They are often complex and failure prone. SCSI solves this (and many other problems) to a large extent but the controllers are expensive.
I wanted to try my hand at some UNIBUS hardware and decided to make a disk controller emulator. The udisk project attempts to make a generic disk controller device controlled by firmware which can be used to emulate virtually any disk controller. It can be a bus master, bus slave and generate interrupts. I can also act as a boot ROM or generic RAM.
The software is still very early and currently only emulates a RL11 controller and RL02 disks. But eventually I plan to do RK11 and UDA-50 also. In fact, virtually any controller can be emulated, as can RAM and ROM.
What the board contains and does
Here'a pictureof the prototype all strapped in on an extender card in my 11/44.
(:comment IM001597.JPG IM001598_30pct.JPG IM001598.JPG :)
The cpu operates at 48mhz and has full access to the UNIBUS. It fields as registers accesses and controls DMA to/from the UNIBUS. I wrote a simple serial port "command line interface" which allows me to do things like load the RL02 bootstrap into memory and run various diagnostics and tests.
The first prototype board is up and running (since last summer, in fact). The cpu works and talks to the CF disk. I implemented the simple async CPLD with basic firmware and got RL11 emulation working enough to boot RT11.
Frustrated with some problems with high cpu overhead and status reads during dma, I have implemented a more modern synchronous version of the CPLD. It has simple state machines for register access and DMA. It works much better and offloads the cpu quite a bit.
I scanned some screen shots from the logic analyser of various UNIBUS bus transactions, along with the verilog code for the simple async cpld. Here's a page describing the async cpld prototype
I should have the sync version of the CPLD debugged soon. It's mostly working. My goal is to boot RT11, XXDP, RSTS and Unix before I declare victory. Once that works I'll spin the board.