I was probably a bit silly to buy my first Lexitron word processor, but to buy a second was bordering on madness.
I was thinking that i would grab some spares for my existing machine, perhaps including a keyboard with working microcontroller.
As with my first purchase, this was a secondary item – i went to collect an IBM 5160. These machines seem to find me because when i got there, i found that there were two of them.
They were located very high up on top of two bookshelves in a shed that was so full of stuff that they could barely be accessed at all. My back survived.
Naturally, they turned into a project, resulting in one good unit, a set of spares, and some answers to unanswered questions.
It was never my intention to buy this machine. I drove out to Lewiston (just north of Adelaide) to collect another purchase, and the seller asked if i would be interested in this mammoth. It had apparently come from a South Australian government department, but had been subsequently used by the seller and his family for several years during the eighties.
I did some quick research and found that it was a word processor – not really my cup of tea. In the end, i bought it for about the value of the two drives. It also came with a daisy wheel printer, a long and heavy-duty printer cable, a couple of manuals and some beaten up looking disks. The screen looked like it had some kind of disease, which was later identified as CRT cataracts.
I was happy to find that the drives were Shugart SA400 drives because these are the first really successful 5.25″ drives.
Backing up the disks was an exercise in itself, but once done, i set the machine to work. I replaced a shorted tantalum and gave the drives some love. I started the machine up and, surprisingly, the machine booted into its word processing program.
Mild joy was short-lived: the keyboard did not work, and it was the microcontroller that had failed. At this point i should have pulled the drives and some other spares and sent it off to the recyclers. Instead, i built a teensy based replacement for the microcontroller and reverse engineered the keyboard. This act of madness yielded a system that was close enough to demonstrate the machine as a word processor.
Along the way, i had picked up hints of CP/M being available for this machine. I periodically did google searches to see if there might be some images kicking around and to my surprise about 3 years later they appeared on archive.org (thanks to the person who did that – dasher perhaps).
Once written, with some help from an Adelaide Retro Computing Group member (thanks Mick S), the machine was able to boot to CP/M and take on a new life as a computer.
If the success of a vintage computing purchase is measured by the hours endured to get it working (the primary entertainment value), then this machine has certainly delivered.
For a little history of Lexitron see the video here:
Inside the IBM PC style enclosure are 5 little big boards – one of which acts as a master to control drives and printers. The monitor is an IBM terminal, which is much younger than the computer.
The other four little big boards support 4 users via serial terminals. Each of these is connected back to the master via a serial line. These cards all run Turbodos. Each provides 64kB of memory for running CP/M programs.
The master provides access to a floppy disk drive and a SCSI hard disk – emulated with a SCSI2SD.
I connected it up to a serial terminal, but I couldn’t get anything out of any external serial port. The hard disk did not spin, so it may be a lost cause.
I had no boot disks for the floppy disk, although i thought it may be possible to create some from the 8″ disk collection. Many of the disks were related to Pulsar – both CP/M and TurboDOS.
Working in the case was a little cumbersome, so I pulled the system right down to the boards:
It consists of:
1x Master LBB with STD and Floppy Drive Interfaces
4x Slave LBB (with a variety of options which are probably not used)
2x SASI/Dual Serial Boards
1x Mitsubishi M4854-342 High Density Floppy Disk Drive
1x NEC LR 56913Hard disk drive with Adaptec ACB-4000 SASI adapter
1x Sysquest removable disk drive with Adaptec ACB-4000 SCSI adapter (external to computer and mounted on it’s own baseplate)
There is a lot of variation amongst the slaves. Perhaps from card swaps over the years, or perhaps this machine was put together using whatever was in stock. Serial port connectors can be straight or right-angled, a bare header, or a shrouded header, sometimes with release levers.
Each of the slaves is connected via serial to the SASI/Serial cards. The master owns the bus and therefore the SASI/Serial cards. The slaves must not attempt to use the STD bus, so where the interface is loaded it has to be nobbled with track cuts.
There seems to be no reason why the slaves need to be in the unit – they could just as easily be located elsewhere but there is not a lot to be gained as either way a serial connection is required.
The serial ports on the master were used for printers.
I tested each of the boards with an MP7A Monitor ROM in a different chassis.
The master little big board does come up ok, so probably it was silent at switch on because that’s how the boot ROM rolls.
Two of the slaves were ok, but the other two were not working. One had a bad solder joint and the other had lost 12V connectivity because the track is very close to the board edge was severed. The damage would have occurred when I levered the board out of the backplane (there was no other way).
I could not get the master to boot from the floppy disk, even after adjusting the phase-locked loop as per Pulsar instructions. I parked that board and used a spare, which did boot.
From there the configuration tool was used to setup the slaves. There are a lot of questions about each slave. I took the easy options with automatic login of the privileged user.
The 7500 system uses a 5.25” drive rather than an 8″. As it turns out, the floppy disk drive in this unit, Mitsubishi 4854-342, is intended as an 8″ replacement – it even claims to be a 77 track drive although i suspect it’s good for 80.
The 50 pin host interface is connected to the 34 pin drive interface via a simple adapter. All up, this means that the 8” images can be written to HD 5.25” disks.
Looking at the simple 50/34 adapter board, I suspect that the drive has a couple of signals that may not be present on a 5.25” interface – Ready and 2Sides. I imagine that 2Sides is always asserted because there is no way for a 5.25″ drive to know if a disk is single sided. 8″ drives can.
The drive was cleaned and lubricated and tested ok with Imagedisk.
8” Pin
8” SIgnal
5.25” Pin
5.25” Adapter
Comments for Emulation with Gotek
2
TG43_L
Not used
4
6
8
10
2SIDES_L
2
REDWC_L
Not driven by controller or gotek. Pull down
12
14
SIDESEL
32
SIDESEL
16
18
HEADLOAD_L
4
Not Used
20
INDEX_L
8
INDEX_L
22
READY_L
34
DISKCHG_L
24
26
DS0
10
DS0
28
DS1
12
DS1
30
DS2
14
DS2
32
DS3
6
DS3
34
DIRC_L
18
DIRC_L
36
STEP_L
20
STEP_L
38
WDATA_L
22
WDATA_L
40
WGATE_L
24
WGATE_L
42
TRACK0_L
26
TRACK0_L
44
WRTPRT_L
28
WRTPRT_L
46
RDATA_L
30
RDATA_L
48
50
16
MOTORON
I wrote an HD floppy disk from 8″ disk image 8_257_02 (Pulsar Turbo V1.3 Master Configuration Sys 14 Config V24 Single User) using greaseweazle.
The system has two SASI cards that I thought might accept a SCSI2SD card.
The drive configuration comes up in two places – firstly in configuration of the master or single user system configuration program, and then again when the drive is formatted.
In both cases, the following information is required:
SASI card number: 0 worked for one card but I tried multiple numbers with the other card without success
Drive Number: It allows 1 or 2. 1 seemed to be SCSI ID 0.
The configuration also deals with partitioning. The default partition size is 4MB which is the optimal size. With large drives, that’s a bit of a nuisance because you need a lot of partitions. Having some optimal 4MB partitions and a larger sub-optimal partition seemed like a reasonable compromise.
The drive selection gave some geometry, but the specifics probably don’t matter with a SCSI2SD. The SCSI2SD was set up with a simple 32MB disk at ID 0 with 512B sectors. Termination needs to be on.
The process went like this:
Create a fresh single user floppy disk
Run the Configuration program and select modify
Set up the hard disk as above
Format the hard disk using HFORM30 with the same disk parameters
At this point the new drives were available starting at E: but when the directory was listed it appeared the disk was read only and the directory looked corrupted. It didn’t seem to matter if the format was done first and then the configuration.
The “Creating Boot Tracks” section of the System Initialisation Procedure mentioned a program called ERASEDIR but really just in the context of making faster hashed entries. Running this program on each of the drives resolved the issue. It says to run this after BOOTDISC (which writes the boot tracks).
So:
Run BOOTDISK and write to E: – only the first partition can be a boot partition. It can also be written to A:.
Run ERASEDIR on each of the new drives from e: to the last one.
Copy all the files from the A: to E: using DO DCOPY A: E:
When the system is powered up, it looks for a bootable drive. If a boot floppy is in A: it will use it; otherwise it will boot using E:.
Programs were then copied on to the solid state disk from a gotek. TurboDOS supports multiple user areas so the these can be used as directories. User 0 files marked a global can be accessed by all users.
All users are assumed to be using Televideo 950 terminals. A lot of the software on the 8″ disks was configured to use this popular terminal.
Pulsar was an Australian computing company located in Melbourne, Victoria. They made STD cards and computings systems based on the STD bus and often using TurboDOS.
TurboDOS is a multiuser/multiprocessor operating system that can execute CP/M programs.
Eight Z80 processors and two 80186 processors share an 8″ floppy drive and a SASI/SCSI hard disk, supporting 9 concurrent users. Each Z80 user gets their own 64k in which to run CP/M-80 programs, while the lucky 186 user scores 256kB in which to run CP/M-86 programs.
The master board, a 80186 board, loads the operating system from disk and, once it is up, it transfers the operating system to each of the slave cards.
All the rack-mounted cards are bona fide eighties cards. The rack and the 8″ drive are also of the time. The re-construction is new. I was able to find only very scant details of the Pulsar 9000, but i did have a complete set of cards and some software handbooks. It looked like a project!
In principle the files on the CP/M disks can be extracted using cpmtools. This, however, requires knowing the disk definitions.
I was able to work out the skew table by looking at the directory sectors on track 2. I guessed the directory size for the 2.2 format.
There were actually two different CP/M formats for the two different CP/M implementations on the disks: Exidy CP/M 1.4 and Software Source CP/M 2.2.
I was able to make some guesses based on the sector arrangement, and when i looked at the images i could see the order of the directory sectors. They both use a skew of 5 but start with different sectors – which explains why each CP/M only works with their own disks.
The directory size was a guess.
I thought i had nailed the format, but later i realised that there were some issues.
The two CP/Ms that I have use 2kB blocks. Each directory extent can accommodate 16 block pointers, but they are not all used. I think there was a rule that an extent could only represent a maximum of 16kB (multiple extents can be used for bigger files) so the CP/Ms that I have only used 8 pointers and just waste off the other 8.
With the original diskdefs cpmtools would read fine but when writing it would use up to 16 of the pointers. This befuddled CP/M.
The fix was not obvious but I found a comment on one of the other diskdefs suggesting that
logicalextents 1
wasted half of the entries (which is what I want) so I gave that a try and it worked.
My Sorcerer uses a Micropolis hard sectored floppy drive system. It uses 16 sectors, each of which includes a 256 byte data section and 19 bytes of bonus “metadata” used by Micropolis DOS (MDOS). This metadata is ignored by the CP/M implementations (Exidy & Software Source) that i have encountered.
The drives have an unusual track spacing of 100TPI. This is unusual so imaging has to be done using the actual drive units.
FluxEngine is a very low cost imaging solution that support Micropolis hard sector disks as used on my Sorcerer. At the time, Greaseweazle did not support hard sectors. It has since been added. I’ll do a separate post on that.
I connected to the drive using a straight through cable and using drive:0. This selects the second drive in the dual drive unit (drive 1). For the single drive unit, DS1 (the second drive select) must be selected.
I used FluxEngine on a new PC, so there would be no USB bandwidth issues. My older machine does seem to work reliably, but if it gets busy then FluxEngine will sometimes throw a bandwidth error.
Initially i used my single drive unit (which I call Drive 2) mainly because it was compact. Once I started working my way through the disks, I found I was getting lots of errors. I thought that I might do better with the dual drive unit (I call the top drive “Drive 0” and the bottom drive, “Drive 1”). I found that Drive 0 was a little better than Drive 2 and that Drive 1 was the best drive to use.
The results were a little disappointing but some further reading of the FluxEngine doco:
hinted that I could fiddle with decoder.bit_error_threshold to perhaps get better results. 0.2 is the default. 0.4 improved things a lot. 0.5 was the best. With the wrong setting, a lot of empty (?) sectors were read. I also increased the retry limit.
Drive 1 remained the best performing drive. I tried messing with the alignment on Drive 2, but I could not noticeably improve its performance. I did some poking around with the scope but no obvious differences between the dual and single units leapt out at me.
Out of 87 disks, I was able to read 19 without any errors being reported. I was able to read another 18 with only a small number of errors. A further 38 disks didn’t yield anything usable. Some were shedding oxide, but most 24 were successfully reformatted. Many were unlabelled, so perhaps no great loss.
Disks that were formatted with MDOS were read using the 275byte sector size. CP/M disks were read with 256 byte sector size. My understanding is that CP/M doesn’t use the “metadata”, and the 256 byte size is much easier to view.
There were some examples of where I was able to copy a disk on the real machine, but FluxEngine was unable to read the disk without error, eg Disk 24. The copy read fine. This meant that there was potential to improve the yield by making fresh copies on the real machine. Ie The real disk controller is still doing a better job in real time than the flux engine does in slow time. That’s the advantage of inside knowledge, perhaps.
I attempted to copy all the errant disks to intermediate disks, which I subsequently imaged. I did this for the CP/M disks using COPYDISK. This yielded another 13 good images! I think this confirms that FluxEngine is way less tolerant of problems than the sorcerer system. Even many disks that had a lot of issues came good.
I repeated the exercise for the MDOS disks, which gave another 8 good images.
I was able to write back both CP/M and MDOS images:
The write process verifies each track by reading back so even the writes need the bit_error_threshold parameter.
Writing also work through the virtual sector generator to a soft sector disk. The disk can be read by the system if the virtual sector generator is used.
I was very impressed with FluxEngine. David Given has done an amazing job.
The Micropolis disk system uses hard sectored disks. This is particularly challenging for disk imaging systems.
Release 1.20 of Greaseweazle included hard sector support, so i gave it a try. I was able to read and write disk images with moderate success. Without a codec for the disk formats the software could not check each track and retry if necessary.
The Greaseweazle developer, Keir Fraser offered to add the fluxengine codec into the code which he did very rapidly.
I tried it out and found it worked very well.
I did find that some of the default parameters didn’t work well with my drives, but these were changed with the delays option.
The relevant commands are:
Get help
gw -h
Speed test
gw rpm –-drive=0
Head clean
gw clean –-drive=0
Set some safe drive parameters
gw delays –-step=30000 –-settle=10
Reads a micropolis disk into an scp file. The raw option keeps the sector pulses and allows reprocessing. Without the raw option the files are more easily viewed with the HxC tools.
CP/M files are read with the 256 byte option format=micropolis.100tpi.ss
When creating the image files, the sector integrity is checked and if the sector is bad it is retried. It was common for multiple retries to be required.
I did try to adjust some parameters (i had to with fluxengine) but i could not get much improvement. Nevertheless, it was quite satisfactory.
The actual system does better, so it often helps to make a fresh copy of a disk on the Sorcerer before trying to image with either FluxEngine or Greaseweazle.
I also tried using Greaseweazle to write micropolis images to soft sectored disks with a Virtual Sector Generator. It also works fine.
What i have not been able to do, so far, is to trick the Sorcerer into using a Gotek/Flashfloppy either with or without the Virtual Sector Generator.
As at V1.22 Greaseweazle includes the micropolis codec.
I use Greaseweazle a lot so i really appreciate the effort that Keir and others have put into its development.