First, i needed to work out what version of Cromix to install. The Cromemco repository is well stocked although i did find that some images were better than others.
Rather than using 8″ drives straight up, i started with HD 5.25″ drives. This post describes how this is done. My intention was to eventually use 8″ drives, but the Cromemco 8″ drive interface is a little special so i saved that hurdle for another day.
The version of RDOS in the boot ROM only supports 40 track drives so i was restricted to a 360k drive as the first drive, but this could be a gotek/flashfloppy. Actually, this is a real advantage because once past RDOS the gotek can just morph into a pseudo 8″ drive after boot. It might be possible to pull that trick off with a HD drive too – a thought for another day.
I made a generic drive unit a while back with two goteks and two 40 track drives and lots of configuration options (a post for another time perhaps). I used it a jukebox for disk images.
As i had no hard drive option available, i was restricted to installing a very basic system on to two 1.2MB floppy disks and then using a third to swap programs in and out. Very limited, but enough to show it working and perhaps enough to inspire looking for a hard drive solution.
I started with early versions of Cromix in the hope that they would be smaller – and generally they are. I also needed systems that would install from a 40 track drive.
I found some success with version 20.09, but the system was very erratic. There was one last RAM error that was the cause and then i was able to complete the installation successfully following the detailed instructions in the Cromix Administration Manual from the GIT repository.
I found that not all high density drives wre suitable, but never really put my finger on why; i was just happy to find two that would do the job. It seemed important to always have the drives spinning, otherwise i got errors. This also proved to be the case when i moved to 8″ drives. There seems to have been some expectation that the drives would always spin, and the head would be engaged only when the drive was being used.
The Cromemco GIT has a huge range of software, but being able to use it turned out to be somewhat more difficult than i had expected.
At this point i thought it may have been possible to run Z80 programs, but i didn’t know for sure, and i certainly didn’t know how to do it. I concentrated on 68000 software instead.
There is a huge catalogue that accompanies the hundreds of disk images in the archive. The range of software for 68000 is not huge, but there are some compilers, for example.
The catalogue also shows the disk format. It turned out that a lot of the disks with 68000 software were in a particular format referred to as Uniform, which i knew nothing about. As it turned out Cromix 20.09 knew nothing about it either, which left me with a problem.
By this stage searching the text catalogue was starting to get tedious, so i translated it to a spreadsheet. The repository is not static, so my spreadsheet is just a snap-shot:
Faced with this problem as i’m re-writing this a couple of years later, i would probably turn to Damian Wildie’s image manipulation program, cromix-fs, but that was beyond me back then.
I sought some help from the Cromemco google group and they were very helpful. They thought was that Uniform support was added at about version 31.50. This was much later than the simple 20.09. In fact, it had crossed over into Cromix Plus and into a new versioning scheme: Cromix Plus 150.
Things got very complex very fast at this point. For a start the boot and install disks were no longer 40 track images but RDOS 2.01 can only do 40 tracks so it would be necessary to construct a 40 track boot disk. (I could have made a new EPROM, but i was reluctant to mess with a working card.)
Also tricky is that Uniform support has to be included in the cromix.sys that is executed at boot. If the version in the repository has not included it, then it would need to be regenerated. And what if the install disks are actually in Uniform format?
And, wait, regeneration requires disk and memory space. Cromix Plus is bigger. The systems it supports are also bigger, and the configurations on the archives have more functions installed. That 512kB memory starts to look quite small, and the floppy disks claustrophobic.
The install itself is also larger. 20.09 essentials would fit on one 1.2MB disk. That’s not possible with Cromix Plus.
There was a lot of chicken and egg going on!
Just to add a little more complexity, somehow some of the archive disks had been archived with the wrong rotational speed, so before use it was necessary to “cleanse” them through the HxC software.
The speed should have been 360rpm, but was 300rpm. This is obvious in the track viewer in the hxc software. This can be corrected using the hxc software by converting IMD to raw and then importing the img as a raw file. They can then be exported as hfe and scp for Greaseweazle or gotek/flashfloppy.
The cromix format uses 1 boot track of 26x128B sectors with FM and the rest of the 2*77-1 are 16x512B sectors with MFM. The uniform format is 2*77*15*512B sectors with MFM. Getting the number of sectors wrong produces some odd results eg checksum errors on ftar/uniform disks!
After numerous attempts, i found a way through with the version 162 disks. These disks seemed to be close to original so that the existing cromix.sys was a bit smaller.
Three of the four installation disks were in uniform format (tarred). But the first one was not, and there was one more seemingly random disk that contained the regen directory for this version in the standard format. That was the “get out of gaol free card” that i needed.
Most of the Cromix Plus disks are 8”. That means that I had to construct a boot disk by copying the cromix.sys from the 8” boot disk to a 360k disk. Worse than that it turned out that bootloader from the 20.09 disks would not load the Cromix Plus cromix.sys.
I was able to create a boot disk by getting a copy of the Cromix Plus fdboot file and popping it into the /etc directory of the 20.09 root disk. Then I could use wboot to write the Cromix Plus bootloader to the 360k disk. That gave a Cromix Plus loader and a Cromix Plus cromix.sys. Having made one boot disk it was easy to make boot disks for other versions just by copying the cromix.sys file.
Once the system booted, i updated the sysdef to add the Uniform driver (uflop), regenerated cromix.sys, updated the boot disk, and created the device files for uniform disk drives.
I set up the following drives.
Select
Current Setup
Play
Final?
Drives
Use
0
5.25” 40 track DD
Gotek
Gotek
fda/sfda/ufda
Boot initially and then access to images. Good compromise because 360k works with RDOS 2.01 for boot and then the gotek switches format with the image
1
8”
Gotek / 8”
8”
fda/sfda/ufda
/
2
8”
8”
8”
fda/ufda
/usr
3
5.25” 80 track HD
5.25” 80 track HD
5.25” 80 track HD
fda/ufda
Temporary mounts eg /usr/help /gen
This gave an absolute minimum system that would allow software to be installed on disks on the fourth floppy drive. I could install from disk images that were in Uniform format. Software disks would need to be mounted prior to use and help would not be available.
I found there are three classes of software that can be run:
Native 68000 Cromix programs
Z80 Cromix programs
Z80 Cromix/CP/M programs
The Cromix programs automatically invoke Sim. The other Z80 programs automatically invoke Z80 which allocates the code to the Z80 processor.
Most of the applications for cromix that are available in github are languages. Many of them seem to have been badged as Cromemco. They install, predominantly, to /usr/pkg but not exclusively. The installers often use links to make files appear in other places eg bin and cmd. This is problematic because links can only be within a single device and there is not enough space to do this.
Each package really needs its own disk, which is mounted under the pkg folder. Because the links fail, it’s necessary to work just from each pkg folder. This would be intolerable for serious work, but for demonstrating the system it’s fine. Some of the command files need to be modified to work around the missing links.
The following cromix programs were installed:
68000 C
Z80 C
68000 Basic
68000 Assembler
Wordstar and Dbase also worked fine, although there are some tricks with drive letters if needed.
Cromix Plus is a multiuser system, but to support more users requires more serial lines and terminals.
I had a Twin UART (TUART) card that would fit the bill and i’d purchased one more for another project, but it can be plugged into this rack for now. This would give a total of 5 users.
As for terminals – well they are hard to find so i have to be satisfied with a Windows machine with several serial ports and multiple instances of kermit.
The TUART is installed as TUART #1 as per the Cromix Plus Administrator’s Guide. This puts the ports at 20h and 50h and makes them 2 and 5 in the sysdefs file.
Cromix has been regenerated to enable the two TUART serial ports as devices tty2 and tty3. The disk controller serial port remains at tty1.
The TUARTs support interrupts, so the 16FDC no longer has the interrupt line to itself. Priority is established by a daisy chain that connects from the OUT on the 16FDC to the IN on the TUART. Just to mess with everyone’s heads, the IN and OUT positions on the TUART are the reverse of the 16FDC.
The serial ports can be configured as terminal ports by editing /etc/ttys:
Along the way, I stumbled on a Software Update Note for 20.14 that said:
This means that if no terminal is connected, the port should not be configured as a terminal port.
A second TUART was setup as TUART#2, but this clashed with the IDE card, so it was moved to TUART #3. These are 8 and 9 in the sysdefs file used to rebuild cromix.
The second TUART also needed to join the interrupt priority chain: OUT from the first TUART to IN on the second TUART.
Here’s an example of multiple users (3) and multiple processes (9):
Initially i built the 68000 Cromix system using high density 5.25″ disk drives for the system drives. Having been able to install Cromix it was time to take the next step and add genuine 8″ drives.
The selected drives were Mitsubishi M2896-63 half height drives.
The 16FDC disk controller was designed primarily for Cromemco Persci drives. I don’t have of these drives and am unlikely to ever find any.
The 50 pin interface is quite different. I stumbled on this document by Martin Eberhard that examined in detail how to adapt the 16FDC to use Shugart SA800/850 drives.
I shamelessly used this very handy information to make an adapter cable for the Mitsubishi drives.
16FDC Pin
16FDC Signal
Drive Pin
Drive Signal
2
Side_Select
14
Side_Select
4
DS4_L
32
DS4_L
6
N/C
6
Alternate I/O
8
N/C
8
Alternate I/O
10
Seek_Complete_L
12
Restore_L
14
Eject_L
16
N/C
16
Alternate I/O
18
DS3_L
30
DS3_L
20
Index_L
20
Index_L
22
Ready_L
22
Ready_L
24
Motor_On_L
18
Alternate I/O /Head_Load_L / Motor_Start_L
26
DS1_L
26
DS1_L
28
DS2_L
28
DS2_L
30
N/C
32
N/C
34
DirC
34
Select (Direction)
36
Step_L
36
Step_L
38
Write_Data_L
38
Write_Data_L
40
Write_Gate_L
40
Write_Gate_L
42
Track_0_L
42
Track_0_L
44
Write_Prot_L
44
Write_Prot_L
46
Read_Data_L
46
Read_Data_L
48
N/C
48
Not Used
50
N/C
50
Not Used
2
Alternate I/O / Write Current Switch
4
Alternate I/O
10
Alternate I/O
12
Alternate I/O
24
Not Used
[Next time a drive is out, get the jumper settings.]
I reinstalled Cromix 20.09 on the 8″ disks using the same instructions as i had used previously.
Wishing to be able to run the disk checks properly to be able to run lots of processes, and haunted by the thought that more memory failures can be expected on the 512MSU, i again turned to a modern solution.
This time it was a static memory board designed by John Monahan:
I could have gone for the full 16MB and filled the address space but i wanted to keep the 512MSU so i built an 8MB version. The existing memory could be moved just by changing some DIP switches on the MCU.
This project would probably still be pending but for a bare board being up for sale in South Australia.
If a generic memory board is used instead of the MCU/512MSU then:
It must support a Phantom signal
The 16FDC needs to be modified to provide a Phantom signal
The Phantom signal needs to either be on a different pin from the normal 67 or the DPU needs to be modified to not use pin 67 eg by cutting pin 6 of IC 41. It’s probably better to modify the new board to use pin 69 and be consistent with other group members.
I think it may still be possible to use the DPU as well if the memory card is 4MB or 8MB. It just needs to be located after the new board. It can’t go before because the board boundaries are not fine enough.
The SRAM is expensive at over $10 per MB. In the end it was easier to get the 4MB parts and two are required so I built an 8MB variant.
This card will be located at 0000H-7FFFFH. The 512MSU will be at 8000H-87FFH and the DIP switch will need to 01000.
The biggest challenge with building the board is mounting the TSSOP packages. I used paste and hot air and cleaned up the excess with solder wick. There were some troublesome bridges one of which only cleared after reflowing with hot air.
I had a look at the PAL equations just to make sure they would work with 8MB.
/S100_8_RD_OE@ = /RD8@ * bA0 * BOARD_SEL * /pSYNC ;U19, 8 Bits to CPU, odd/high address
+ /RD16@ * BOARD_SEL * /pSYNC ;Any 16 bit data Read
+ /WR16@ * BOARD_SEL * /pSYNC ;Any 16 bit data Write
/S100_8X_RD_OE@ = /RD8@ * /bA0 * BOARD_SEL * /pSYNC ;U31, 8 Bits to CPU even/low address
There seemed to be no interest in the address lines ie this board is selected regardless of the address (except for the phantom). For a 16MB card that would be correct. And it doesn’t matter for writes as long as all of the address lines are in use at P101 – this should just cause a write to RAM that isn’t loaded. But it would cause a read contention with a board in the top 8MB eg where I want the old 512kB to be.
I think that for my situation GAL5 so that /BOARD_SELECT is asserted only when the for the first 8MB.
It took hours to run the 68k RAM test in CDOS, but it was successful. 8.5MB of RAM was good to go.
cromix.sys had to be regenerated with an updated sysdef. After this there was abundant memory! There are a bunch of tweaks that i could do to take further advantage of the memory and i think a RAM disk could also be added.
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.