Ok, so you have your shiny (not so) new Transputer system installed/connected and you really like to know if it works and at least see some results… you’re in need of basic Transputer tools to get started.
First, download the Geekdot “Transputer Tool Kit” from my Transputer software page (New releases are possible, mind the version number).
Each tool introduced here has its own folder in the archive.
ispy/mtest
Even it’s historically not the first application ever developed for Transputers it’s for sure one of the most used.
It started as ‘check
‘ and at some point got renamed into ‘ispy
‘ – whatever the name is, the technical term would be “network worm”. This means it’s a special piece of code which a) sniffs around in a transputer (what kind, number of links and their speed) and b) replicates itself over all links it previously found.
When done, it outputs a network map like this example:
Using 150 ispy 3.23 # Part rate Link# [ Link0 Link1 Link2 Link3 ] by Andy! 0 T800d-25 292k 0 [ HOST ... ... 1:0 ] 1 T425c-20 1.6M 0 [ 0:3 2:0 3:0 ... ] 2 T400c-20 1.8M 0 [ 1:1 ... ... ... ] 3 T400c-20 1.7M 0 [ 1:2 ... ... ... ]
ispy is used on geekdot.com extensively, so any time I write about Transputers you will see some sort of ispy output for sure.
There are several versions of ispy included in this kit. This is because some versions behave more stable than other in certain circumstances. E.g. the most recent version 3.23 does not work very well with the C004 link-switches.
“The other part” of ispy is called mtest
. mtest takes ispys output and runs an indepth memory test/report on all Transputers found.
iserver
iserver
is part of what INMOS called “itools” – long before Apple discovered the “i” for themselves 😉 – there were many others, mainly development focused (e.g. idebug, icconf etc.).
It is more or less the successor to the godfather of all Transputer booting tools “afserver” (1988). Well, it has to be, being the on INMOS supplied with all their other tools and languages.
The possible options are quite self-explanatory and printed to stdout when omitting any option:
Basically if you see a *.btl, *.b4
or *.b8
file it’s most likely meant to be executed with iserver. Before running successfully iserver need some environment variables set to successfully to be used:
set IBOARDSIZE=#100000
set TRANSPUTER=#150
These two settings tell all itools how much RAM the Transputer has to work with and at which port address it can be found (0x150 is default anyway). The archive contains V1.42h from Nov. 1990 which is the most recent as far as I know.
Mandelbrot
The “CSA Mandelzoom Version” is one of my favorite benchmark tools. I like it so much, that I run it once a while just for fun.. and to extend my benchmark table which I’ve collected over the time using it.
It is nice because it features integer (T4xx) as well as floating point (T8xx) versions of the calculation ‘slave processes’ and scans the network itself. No external tool needed. It’s also possible to let the host (i.e. your PC) calculate the Mandelbrot fractal to get an idea, how much faster/slower your Transputer network is – the archive contains a little benchmark result text file which I accumulated over the years.
Also there are some handy switches available (‘-h’ for help):
- -v : Use VGA graphics
- -t : Run on host instead of Transputers
- -a : Autozoom, loads a list of coordinates from man.dat and start calculating them without manual interaction.
- -b : Use a different base address (instead 0x150)
- -x : Verbose output of the Transputer initialization process (added by me)
After a while I got tired of manually time a calculation run and also ran into problems with large networks which simply became to fast to hand time. So I extended the code of Mandelzoom with a high precision timer (TCHRT, shareware, can’t remove the splashscreen, sorry) which prints out a timer summary when run with the “-a” parameter. I provided my default “MAN.DAT
” file, which contains 2 coordinates to calculate (1st & 2nd run) and used for all my benchmarks.
These are the results of my DOS host system running in VirtualBox.
Caveat: It breaks if there’s a T2xx in the network (e.g. B008/B012) 🙁 And as always: Read the F-ing README.txt
!
Since I started to heavily modifying the source, I wrote a post of its own about it as well as put everything on github, so you can join the fun 😉
Other Tools
iskip
iskip
can be very handy, when ‘talking’ directly to (externally) connected links, e.g. another network which is connected to your root Transputer. Here’s a good example:
You like to put code directly onto “processor 1” which is connected to link 2 of your root Transputer:
So you call
iskip 2 /r /e
This sets up the system to direct the program to the target network over the top of the root transputer and starts the route-through process on the root transputer. Options ‘R’ and ‘E’ respectively reset the target network and direct the host file server to monitor the halt-on-errorflag. The program can then be loaded ‘through’ the root Transputer directly onto processor 1 using:
iserver /ss /se /sc test.btl
debug.exe
Yes, I do mean the comes-with-DOS debug.exe
. Well, you can use any debugger you like as long it can read/write to port addresses.
Obviously this means [MS|PC|Open|Free]DOS only. You won’t get far with this on Linux, any Windows or OS/2. At least for initial debugging and testing I strongly recommend to use the “bloated interrupt manager” known as DOS.
First of all, you have to know the port addresses the C012 registers are mapped to . There’s a de-facto industry standard which INMOS introduced with the IMSB004. Its been adopted by 90% of all 3rd party products, even with certain ISDN cards using Transputes.
The base address normally is at 0x150 (which can be configured to other addresses in some cases). From this base adress the offset is always the same:
Base Adress | Register | Comment |
+0x00 | C012 input data | read |
+0x01 | C012 Output data | write |
+0x02 | C012 input status register | read = returns input status write = set input interrupt on/off |
+0x03 | C012 Output status register | read = returns output status write = set output interrupt on/off |
+0x10 | Reset/Error register | write: Reset Transputer & C012 and possibly subsystem (check manual) read: Get Error status |
+0x11 | Analyse register | (un)set analyse |
So here’s a clean Transputer setup ‘conversation’ using debug (comments are just for clarity, not supported in debug):
c:\>debug -o 160 1 # Assert RESET -o 161 0 # Deassert ANALYSE -o 160 0 # Deassert RESET ... init B004/IMSC -o 152 0 # Clear Input Interrupt enable -o 153 0 # Clear Output Interrupt enable -i 152 # Read Input Status 00 # Bit 0 = 0 -> no Data waiting -i 153 # Read Output Status 01 # Bit 0 = 1 -> ready to send -i 160 # Read Error 00 # Bit 0 = 0 -> ERROR not signaled -o 151 1 # send POKE -i 153 # Read Output Status 01 # Ready -> POKE Ack (00 = BAD no Transputer)