Multi-boot Multicomp

A project log for 3-Chip Z80 Design

Combining a Z80 retro design with a modern PSoC CPU. 11/11/2019 at 13:510 Comments

I tried out the Multi-boot Multicomp build over the last couple of days on my Multicomp FPGA build and it is really sweet (compliments to the author/compiler - Rienk H. Koolstra). It would be a nice port to this card since it's a superset of all of the builds that I have done so far. From the features list of the page - the system's main specifications are:

There are two possible hurdles to overcome. The first is the MMU and the second potential hurdle is the SD card interface.

MMU Design

There are differences between the MMU in this implementation and the one currently in the PSoC. The current bank switch is for a single bank with selectable size. The MMU design has 4 banks which select one of 64 16KB banks. The base address for each of the bank is written by first writing to an offset register and then writing to the particular map register. The VHDL code for the MMU is here.

This can be implemented as a pair Z80 I/O addresses with one for the register select and another for the table value at that offset. The table consists of four registers which are 6 bits each (or 5 bits for 512KB).

The hardware seems fairly straightforward. The MMU logic is labeled as MMU4 and looks like:

This adds another level of multiplexer to the SRAM address lines.
The current page that drives the MMU1 gets changed to go through the new level of multiplexer. My assumption is that PSOC Creator will reduce the logic automatically.
The HEX file from Multiboot Multicomp gets converted into a C array with srec_cat as previously done and added to the project. The Z80 IO handler gets updated to add handlers for the new Memory Mapper. The Harware_Config.h file gets updated to add the new Memory Map (USING_MEM_MAP_4) and top level design (MULTIBOOT_CPM). This is very similar to the 9-Chip CP/M design described in a previous blog.

Can't test it with real hardware at the moment but it did compile and I checked it into the Project GitHub.
That did eat up some PSoC resources (mostly in the additional control registers), but there's still room.