AVM M1 as Transputer Link

From my early highschool years on, I’ve been fascinated by the Inmos Transputer and have recently acquired some Inmos B004 cards and other hardware with the idea to start experimenting with Transputers.
One problem though, these B004 cards are old 8-bit ISA hardware.

Since IBM compatible PC’s are almost the complete opposite of Transputers in interestingness, I didn’t really like to invest scarce space in my house for a boring grey PC box just to fit the B004 cards. I had already been toying with the idea of making a custom interface from ISA to something more modern, but luckily I found a better option:

Axel Muhr describes on this page (geekdot.com) onwards his hacks using AVM B1 active ISDN controllers as B004 sustitutes. There is a PCI version of the B1, but I wasn’t sure about compatibility and the price of these cards is still higher than what I paid for my original B004’s.

Enter the AVM M1 PCMCIA card…

This card seems to be a PCMCIA variant of the B1 hardware, has 1 MB of RAM and a IMST400 Transputer on board. Making Transputers compatible with reasonably modern laptops! Oh, and these cards can be had for a few Euro a piece on Ebay.

I did some quick reverse engineering of this card. The link adapter is implemented in a Xilinx XC3164A FPGA and the T400 seems to boot from link 0. The link adapter in the FPGA looks to be IMSC012 compatible. The config of the FPGA is fixed and stored in a serial configuration ROM. Then there is a parallel EEPROM that holds all PCMCIA parameter info and a second serial EEPROM, presumably for settings storage.

The M1 was meant to interface with Siemens GSM mobile phones and as such has no ISDN controller inside, just an UART. In our case, this is actually good news, as there is no other crap attached to our precious Transputer. A similar card, called M2, exists and has exactly the same hardware but also a Siemens ISDN chipset fitted on the board.

The UART can easily be removed from the PCB, and there is probably enough space to fit some buffers or even a RS-422 driver to feed the remaining free link (link 1) to the outside, as I plan to do when I get the software side up to scratch. From there on it would be easy to bootstrap larger Transputer networks from this PCMCIA card.

A quick test with the original CAPI drivers for Linux confirms that this card appears to the host just like a B1 (and so like a B004!):

hessch@bt:~$ dmesg
[ 9888.081914] b1pcmcia: AVM M1 at i/o 0x150, irq 3, revision 3

The only problem, as could be expected with ancient hardware, is that all Linux Transputer link drivers that I could find are equally ancient. Ancient and crufty.

As a quick test, I modified Apple II interface code, also from Axel Muhr’s geekdot.com. I translated this to a bit of Python code that uses portio to do I/O with the M1 to test loading code to the T400 Transputer. My code is far from reliable, in its current state. Actually it seems more like it worked by accident, shown here:

hessch@bt:~$ sudo ./tdetect.py 
ioperm() was successful for all C012 registers from 0x150 onwards

resetting Transputer...

ISR value: 0x0
OSR value: 0x1

writing data to Transputer:

    17 b1 d1 24 f2 21 fc 24 f2 21 f8 f0 60 5c 2a 2a 
    2a 4a ff 21 2f ff 2 0 

read result from Transputer:

    aa aa 0 0 

Yay, we have a 32-bit Transputer answering!

I’m not really bothered by the reliability of my code yet, as it would be still a lot of work to make this in something useful. Having the common Transputer link infrastructure in place should make all old userspace stuff that is still available come alive again. Probably, I will strip all CAPI/ ISDN related stuff out of the working AVM M1 driver that is in the current Linux source tree and implement Transputer link driver compatible ioctl’s in that driver, as all needed functionality is already in the existing M1 driver in Linux. While writing the Python code mentioned above I had a good few reads of the source of this module already and it is quite readable, which gives me better hopes of getting something working than trying to bring the old Linux link drivers back to the 21st century.

I’ll probably create a new page somewhere on this site to document my progress. When that happens, it will be linked from here.