Exceltronix Multiflex Super System - page 2 of 5

Jeff Avery on the Web

HOME        SITEMAP        ABOUT        CONTACT        INTERESTS


Z80 Exceltronix Multiflex Super System (continued)

The floppy disk controller board:
The board Geoffrey sent me had many of its chip sockets empty but, after studying the documentation and the circuit diagram, I decided that some of them were to provide DMA (Direct Memory Access) capability, something that we could leave out for now. Ignoring DMA, there appeared to be seven chips that were missing and which had to be replaced to create a working board. I sent off an order for the seven chips.

Meanwhile, I had been busy on the software. I had most of CP/M done, including the BIOS, the Loader, and SYSGEN although they will need extensive testing. The Loader is a program that sits in the first sector of the first track of a boot disk. To boot CP/M, Z.MON reads in Loader from the disk and places it in memory. It then runs the program. The Loader’s job is then to read in the rest of track zero which contains CP/M. SYSGEN  is a programme that adds Loader and CP/M to a floppy disk, thus making it a boot disk. Of course at that time none of this software could be tested.

April 2000: At the beginning of April, the chips I ordered arrived so I was able to proceed with the floppy disk controller board and commence testing it with a single drive. When I powered up, the drive started spinning immediately. I found this was because I had the data cable plugged in the wrong way round (duh!). The Exceltronix documentation described how to set the potentiometers  and variable capacitor on the board and I did that. The floppy drive is operated by sending bytes to several port addresses. The documentation describes which port addresses and which commands to send and one is able to do some of this using Z.MON and the keypads. Using a formatted floppy that I had (not, of course, a formatted CP/M disk!) I was able to show that the board could correctly find track zero, step from track to track and locate a designated track. In this way, I found that a 5-1/4” double-density floppy could hold 40 tracks.

To have Z.MON boot CP/M, one pushes the “BT” key (relabelled “CP/M” on my motherboard). This displays a message on the screen asking you to type a carriage return. This also gives you time to insert a boot disk into the drive. On receipt of the carriage return Z.MON reads the Loader from the boot disk into memory at address zero and then jumps to it. So I pushed BT and got the expected message on the terminal screen. I pressed the “x” key and nothing happened which was correct. I hit a carriage return and the drive started spinning but never stopped and Z.MON never jumped to location zero, which it should do after reading in the first sector. By using Z.MON to look at memory locations, I could see that Z.MON correctly found track 0 and loaded data from sector 1 although the data is all zeroes. Unfortunately, I found that when Z.MON is reading in data, I couldn't interrupt it with the keypad’s escape key and so couldn’t enter debugging mode. I discovered that this is because it is reading the data into memory starting at location zero which overwrites the interrupt vectors. I temporarily changed the programme to load at a higher address so that I could interrupt it and proceed with debugging. That enabled me to fix the problem.

After much studying of the Western Digital WD2793 datasheet, I had previously written a programme to format floppy disks and now it could be tested. Of course it didn’t work and it went through many iterations, with gradually improving results as I increased my knowledge of how the whole thing was supposed to work. I also realized that my code had to be pretty tight to keep up with the speed of the disk. Then I learned about write pre-compensation and set that correctly. By 10th April I had a successfully formatted disk that I could read in without errors. During this process, I also found out by trial and error that each track of the 5-1/4” floppy could contain 16 sectors of 256 bytes for a total of 320K on a double-sided double-density disk.

May 2000: On 5th May, after studying CP/M code, I found that CP/M is tightly oriented around 128K sectors, not 256K sectors and changing it would be a huge task. The alternative would be to rewrite my BIOS to de-block each 256-byte sector and pass it to CP/M half a sector at at time. This also would be quite a bit of work. Instead, I decided to alter my format programme and my BIOS to use 128-byte sectors. After doing this, I found that a track could hold 25 128-byte sectors for a total of 250K per double-sided double-density disk.

The next day, 6th May, I created a disk that successfully booted CP/M. For the first time, I saw the Digital Research copyright message and the A> prompt. Hooray! I tested the built-in commands: DIR, SAVE and ERA and they all worked. However, if I typed in an unknown command, e.g. xxxx, CP/M went off into dreamland. Over the next couple of days I fixed that and some other bugs.

Now it was time to turn my attention to the commands that were not built-in, e.g. PIP, STAT, DDT, ASM, LOAD, etc. This was to prove a bit of a challenge.


<-Computers             Z80 Exceltronix Page:     <-Previous             1            2             3            4            5            Next->