I am at the stage with my MUSS restoration that I can process the Flocoder FLIP source code with my own implementation of FLIP written in Flex and Bison.
My MUSL compiler can’t process all the Flocoder source files yet though, for a couple of reasons.
The first is that some of the source files appear to have too many END statements. I need to look into this to see if my understanding of the grammar is incorrect. However, these problems occur in files that I don’t think I need in order to re-create FLIP, so I will defer investigation. I may hit problems again when I try to build the MUSL compiler sources.
The second is that there are some elements of the syntax that are context-sensitive and can’t be parsed with Bison without some additional work. There are actually a couple of areas where this does not currently work. First, one of the Flocoder modules declares both a type and variable with the same name. The second is where addresses of procedures are declared, these create a syntax ambiguity which needs additional semantic processing. These problems are solvable, but I have not looked at them yet.
My next steps are to start generating C code from MUSL, but I think that to do it correctly I am going to have to resolve the context problems mentioned above.
I haven’t been doing much in the vintage computing arena recently, but I have finally got around to finishing off my crude implementation of Flip. The source code is up on GitHub.
My first attempt didn’t work very well. I was not ordering the boxes well and produced invalid MUSL because I used too many labels and GOTO statements. In the end I decided to reverse engineer the original Flocoder source for Flip. I created textual versions of some of the critical charts, you can see them in the source code (doc021 and doc031). The control structures represented by the charts didn’t look too easy to turn into normal structured code without GOTOs, so in the end I decided to take the easy path and code it with GOTOs just exactly as represented in the original Flip source charts.
My version of Flip can now take doc031 from the source code and produce the MUSL source from it. Furthermore, my initial MUSL parser is now able to parse the output from Flipping doc031, without any hand modifications to the Flip output.
The next step is going to be to try processing the other doc files and check that my parser can parse them all. After that I will try to get my MUSL parser to produce C code, so that I can generate a program that implements Flip from the Flocoder source.
I have received qualified permission to publish the MUSS source code that was recently recovered, as free and open source software. It is available here.
I have also made a bit of progress on the MUSS restoration. My implementation of FLIP is improved but still not quite there yet. I also have a parser for MUSL, which parses the output of my FLIP implementation for one of the FLIP source modules, with a little hand modification before parsing it.
I have created a page on MUSS where I will report more about MUSS and its restoration.
I have now got a crude implementation of the Flocoder Flip program written using Flex and Bison. It can take a Flocoder file from the MUSS sources and extract what I hope is compilable MUSL code. The code is on GitHub.
I am not 100% sure that the code is valid as I have taken a very naïve approach to the code generation stage. Every BOX except the start box is labelled, and every BOX ends with a jump to the next box in the FLOW sequence. It does not attempt to merge consecutive BOXes.
However, I am hoping that this is enough to take the original Flocoder source for Flip and turn that into MUSL that I can then compile. The next step, which I have just started, is to create a MUSL to C compiler that will generate C from the Flocoder source for Flip, so I can get a version of Flip working in C. If I can do that then I should be able to process the Flocoder files using the proper code for Flip and compiling those to C as well.
For anyone who wants to follow the effort to revive MUSS, I have started a project on GitHub. You can find the repository here. The initial effort is focussed on creating FLIP to translate the Flocoder to compilable MUSL and I have made a start on that.
Once I have FLIP then I will need to start the process of compiling MUSL. I will probably compile the MUSL to C and then compile the original MUSL compiler (written in MUSL), but that is a little bit further off.
Brian Tompsett’s Tapes with MUSS Source Code. Copyright Brian Tompsett, with permission
Tape recovered by Delwyn Holroyd at The National Museum of Computing. Copyright Delwyn Holroyd, reproduced with permission
MUSS is the Manchester University Software System. It is an operating system that was designed and built at Manchester University for MU5, designed to be portable, and in fact ported to other machines.
In October 2017 I asked the editor of Resurrection, the Computer Conservation Society’s publication, to publish an appeal for information relating to MU5 to help my emulation project. Then, in December 2017 I received a response from Eur Ing Brian Tompsett a lecturer at Hull University. He had a full set of printed MUSS documentation and a 9-track magnetic tape which he thought may have the same documentation on it. The interesting thing about MUSS documentation is that it is really a combination of documentation and code, written using a system called Flocoder. This meant that there may be machine-readable source code on the magnetic tape. However, Brian Tompsett thought that the tape may only contain the portable parts of the sources from the post MU5 era, covering MU6G, PDP11, VAX11 and MC68000. This also ties in with the printed documentation I have seen in a store room at Manchester, which all seems to be post MU5.
In April 2018 one of Brian Tompsett’s tapes was sent to The National Museum of Computing in Bletchley Park, where Delwyn Holroyd read the tape successfully a week ago. It contained a tar file, inside which were a large number of documentation and source code files.
The tape appears to contain the source code for Flocoder, the Manchester University system implementation language (MUSL) compiler, large parts of Version 11 of MUSS itself and other compilers, including Fortran and Cobol compilers that Brian Tompsett wrote. I am waiting for permission from Manchester University and then I hope to post the files, possibly on GitHub.
It looks like the best approach is going to be to hand build a processor to implement the Flocoder FLIP (Form LInear Program) function to extract the MUSL from the documentation, and then build a MUSL compiler, which will allow me to bootstrap the building of MUSS. It looks like it may be possible to get MUSS built for PDP-11 and VAX.
I recently acquired another Rainbow 100+. Here is a picture of it:
The badges are on their side because this was installed in a vertical enclosure.
This came about because a little while ago I was given a Rainbow, and the person who gave it to me had a second one that he was going to keep. He told me that he wanted the vertical enclosure for his machine, like the one below, which happens to be one that I passed on to someone else some time ago:
When the opportunity arose to buy a Rainbow in a vertical enclosure I let him know. He wanted the enclosure but not the machine inside. So we agreed that I would contribute to the cost of the purchase, take the Rainbow itself and he could keep the enclosure.
When I got it home it was in a pretty clean condition. It contains an RD51 hard disk, an RX50 floppy disk drive and a 192K memory expansion options, for a total of 320K memory. The VR201 is an amber version.
Before powering it on I visually checked the PSU, it looked fine. I then imaged the hard disk, just like I did with the previous Rainbow. Interestingly, the first attempt to read the disk failed completely. The disk span up quite happily, but the MFM emulator could not find any data. Cycling power seemed to fix it and I imaged it twice just to be sure.
I then installed the hard disk emulator in place of the hard disk and powered it up. Booting from the emulated hard disk brought up MS-DOS 2.11. The AUTOEXEC.BAT then took me into the Rainbow Serial Port Setup Utility (SETPORT) program. I found that the hard disk had WordStar 3.31 installed. At some point I will go back to that and remind myself what WordStar was like.
Anyway, I now have another Rainbow and another VR201 monitor, which is good in case I need some spares.