Teensy 3.5 & NCR 5380 based SCSI device emulator.
NCR 53c94 Datasheet
Adobe Portable Document Format - 2.86 MB - 12/26/2016 at 21:59
Kinetis MK64 Reference Manual
Adobe Portable Document Format - 19.85 MB - 12/14/2016 at 22:32
SCSI Command Reference
Adobe Portable Document Format - 3.78 MB - 12/14/2016 at 22:32
NCR 5380 Datasheet
Adobe Portable Document Format - 2.99 MB - 12/14/2016 at 22:32
Kinetis MK64 Datasheet
Adobe Portable Document Format - 1.51 MB - 12/14/2016 at 22:32
The new boards and chips have arrived, and over 200 solder joints later, the Teensy and 53c94 are talking, and menu buttons are working. Now to finish separating the 5380 code from the target service code the rest of the way, and write the 53c94 driver. There is one downside to the 53c94 that I didn't notice before, it only can listen on one device ID at a time. It can still do multiple LUNs per device, but this means most of the modes are mutually exclusive for older software where LUNs are not supported. So you could emulate a harddisk, cdrom, ethernet, or graphics adapter, but not any of them at the same time on a m68k mac. The 5380 is slower, but more versatile on this one point.
On another note, the SuperMac SuperView arrived, and I was able to get it working with the Quadra 630 in my collection (albeit very poorly, as it causes issues with the native graphics). I hope to reverse engineer that protocol soon and start work on the pi Zero software.
The start of the OLED Menu system is underway, you will be able to enable/disable individual devices, change device types (disk, cdrom, tape, ethernet, graphics), start/stop the target mode, eventually perform initiator mode tasks (save/restore disk images from/to real drives) and make various other changes to the device config without needing a computer attached.
I've adjusted the layout of the previous status screen to only take the top 8 pixels, and hopefully be a clearer representation of what is going on. Here you can see IDs 3,4,5 are enabled, and I've just disabled ID 2 from the menu system. There is no activity on any of the devices, as shown in the top row of dots. Detailed status such as SD Card size and partitions will be available via the menus.
I spent the day plotting out the schematic and board layout for the 53C94 based iteration. TSE94Desktop.sch and TSE94Desktop.brd can now be found in the hardware repo to the left.
Boards and parts are now on order and should be in the middle of January. Until then, work will progress on the 5380 based model.
That didn't take very long. Many thanks to MAMEDev, SCSI2SD, and the SCSI CD docs, optical drive emulation is working well enough to mount & verify a Debian install disc on my linux testbed.
This means that virtual disks/discs with sector sizes other than 512 bytes are supported now as well.
I also have a SuperMac SuperView SCSI graphics card on order, which I hope will arrive before things get crazy again at work.
I have assembled one of the first run of boards and it works beautifully, even with my terrible soldering job. I have found an mistake that prevents the OLED display from being mounted on the Teensy side of the board, as the uSD slot overlaps the pins. I suspect anyone who would be using the OLED display would probably have it on cable or would be fine with mounting it over the NCR 5380, so it isn't a huge deal yet.
Many thanks to Hackaday for the writeup: http://hackaday.com/2016/12/25/the-tiny-scsi-emulator/ !
Merry Christmas, Festivus, Yule, Chanukah, Holidays and a New Year!
Rev0 Boards arrived from OSHPark, now I have to dig up some 48 pin sockets from my collection to fit the Teensy 3.5
Just pushed a major change set to bitbucket, adding the initial SCSI/Link emulation and central configuration through config.h
I spent the day rethinking the architecture of TSE, and plotting out the eventual move to support other controllers and device emulations.
Still having issues with the Cabletron emulation, but it is being joined by DaynaPort SCSI/Link which hopefully is a little better documented.
I've split the ethernet controller driver out from the ethernet emulations so it will be possible to mix & match in the near future. Particle Photon / Spark Core have potential as WiFi bridges handling all the network duties and leaving the SCSI to the Teensy. RNDIS over USB is another option to explore.
Initiator implementation has been pushed up the stack a tiny bit, in case I end up implementing RFC 2143, which necessitates being both a target and an initiator, supporting full bus arbitration, and exciting things that direction. Outside of Linux hosts with a specific chipset and driver, I don't know of any other implementations of the standard. I still plan on TSE being usable as a standalone SCSI cloning box.
ScuzzyGraph & PowerView are on the radar for future implementation if I can get any sort of documentation or can reverse engineer one (donors?).
Transport mechanisms are another avenue to explore. Are there any tape / cd vaults that are documented well? It would be interesting to have an entire catalog of ISO images to choose from, and mount them from a native application. Even better if I don't have to write the front end.
I'm still waiting on my first batch of boards from OSHPark, so all testing has continued on the breadboards for now. I've dug out a sacrificial VaxStation motherboard (corroded by leaking caps, rodent contaminants) to steal a pair of 5380 chips from, and have one SCSI floppy controller to steal another from if needed.
With my Quadra 630 attached, (needed to run NetBSD) I have gotten much further with the ethernet support. The Cabletron diagnostics now recognize the device. Likely just due to the incomplete Mode Sense implementation, NetBSD and its related tools don't like my disk emulation. And on the unforeseen complications, I now have to put some form of mutex / locking on the ethernet and oled drivers, which pushes me closer to switching to an RTOS and changing how I handle the SCSI PHY.
UPDATE: I just suck at installing crusty drivers. The Cabletron MacOS driver isn't an extension like you would expect, instead it patches the System file with the actual driver, and has some sort of patched Ethertalk extension. I'm further along than before, but without having the original hardware to compare against, I'm just blindly implementing their protocols by reading the NetBSD driver source code. The driver goes through the process of adding a protocol and a multicast address to the frame filter, and asking for any available frames. If the stats DA is installed, it attempts to poll as well. I suspect the card returns some sort of "No data, ask later" response when there are no frames to retrieve, but can't find any reference in the NetBSD driver.
More work on Ethernet support last night. The W5100 raw socket code is in place, and the Cabletron EA412 driver attempts to load on the Macintosh SE. Unfortunately the Cabletron driver crashes (hard) and prevents MacOS from booting further.
The command sequence thus far is:
Get MAC Address
Sometimes I don't even see the Set Protocol command.
My next steps will be to try it under NetBSD, and to install macsbug on the SE so I can try to see where the Cabletron driver is crashing.
Over Thanksgiving I was able to dedicate a couple of days to development and testing of firmware revisions and some hardware revisions to get basic disk commands, DMA, and partitioning working. Currently the disk emulation is maxing out the SCSI PHY with plenty of room for growth on the SDHC bus. Future hardware revisions will likely be based on later SCSI PHY controllers which should increase speeds to match the limits of the SDHC socket on the Teensy 3.5.
The current revision hardware manages 16MB/s between the microsd card and Teensy RAM, resulting in about 7MB/s data rate when copying between partitions on the card using the firmware console. FATfs in the firmware is much slower (used to backup and restore partition images) at around 600KB/s and likely to be an improvement goal further down the line.
DMA to/from the host results in upto 1.3MB/s with the current PHY.
Emulation of SCSI Ethernet adapters has been prototyped out in the current firmware, needing the attachment of a SPI interface ethernet controller without a TCP/IP stack. Optical drive emulation will be added in the future.