Multicomp with larger FPGA



In June this year I got a link from a forum member regarding CycloneIV boards on AliExpress. I followed the link and was very surprised to find besides the “old” CycloneIV system a newer one with much larger FPGA (EP4CE15F22N8) (1) offered for a reasonable price (board size:8×6.4cm^2, round about half the size of my Multicomp !). That was the start for a new project: To rework my Multicomp. Six weeks later, the German customs send me a letter, claiming the unpaid tax (19%). Ok, the bought boards are in Germany… It took me 4 hours to drive to their office, pay the tax and get back to my home… Why 4 hours: It's a small customs office in a also small town. The physical drawback: 1 hour local customs time is 2 hours real-time, time is relative…

(1) It looks like that the QMTECH EP4CE15-SDRAM core board is running out of stock (2020.06.09: 500pcs. in stock again - all fine ;-) ). A possible replacement is the CycloneV 5CEFA2F23 SDRAM (sadly for more then twice the money). The pin assignment stays the same (only a quick check, no guaranty) but the I/O naming is different. I haven't migrated the VHDL code to the new core board yet, because at present I do not have one for testing the new IO-assignment.


As mentioned before, I re-used the schematic of the CycloneIV-June2015 design and added some things I want to have included:

  • +5V keyboard supply at the Mini-DIN6 jack
  • +5V mouse Mini-DIN6 jack (with mouse-controller in VHDL)
  • Audio out jack (stereo) for 80's sound feeling (with two SN76489 + 2 Sigma-Delta-DAC's in VHDL)
  • A PIO-Port with a 8255 for adapting external hardware (a 2nd one can be plugged in the pin-socket right-hand side to the 8255 on the photo)
  • A better reachable connector for serial-c_TTL
  • A better reachable Reset-Button (Sorry, I need that, I too often crash the system… ;-) )
  • A I2C-Port for my Swiss-Pi board (I2C-Controller in VHDL)
  • A GPIO-Port for connecting a peripheral board located on TOP or BOTTOM of the Multicomp board (that's the idea) Meanwhile I've a Joystick-board for 2 joysticks (thumb-Sticks), some switches, buttons, LED's and a 10-bit GPIO Port to plug onto to 40-pin GPIO header TOP-side. If the 2nd PIO is needed, its Pin-Socket should be swapped to the bottom side so the PIO-PCB is located below the Multicomp-PCB. That gives a nice 3-level sandwich construction… Your intension may differ - you are free to do so or not !
  • Two +12V DC power jacks (for Input & output), so I can chain the power for Monitor and Multicomp to one power supply (my monitor needs +12V)
  • A additional +5V OUTPUT- Jack to connect LOW -power experimental boards at the rear side of the board. The +5V regulator should have a heat sink for better cooling ! It's possible to use the +5V jack at the front side (as OUTPUT only) of the FPGA board.
  • A MAX705 Reset/Power-Fail IC for the RESET-Button and for monitoring the +5V when power is switched ON/OFF ( I had some troubled with a destroyed SD-Card image, therefore the MAX705).
    • REMARK: If the system is already switched ON and running don't connect a external board with large capacitors to the +5V jacks. The MAX705 may detect a Power-Fail situation when the voltage drops below +4.65V and will reset the system !

Board size is now 160x132mm^2. SRAM, the MAX3232 level-converter IC's for Serial-A & -B, +3V3-Converter LM2574 and MAX705 are covered by the FPGA Core-Board and can't be seen on the photo. WiFi is located at the lower left corner.. The PIO chip is the large IC on the right side of the PCB.


The system is compatible to this CPM Software collection (download ) here in the forum - with one exception: The transceiver of serial-B got its own I/O-address. Probably that will affect MP/M-II and every software using serial-B. The baud-rate gen. keeps its I/O-address. I installed the system18.img on the SD-Card.

Purchasing the new Multicomp-PCB

The board was manufactured by Aisler-B.V. in Germany. The German web-site (in English) is here. Scroll down for more manufacturing locations. They offer a production of 3 pcs. per batch. If you need more then 3 PCB's stepping is: 3, 6, 9, … Of cause, you can choose a manufacturer of your own choice ;-) Use this link, if you intend to order a batch. Gerber -Files are included in the project-archive, but I uploaded the .kicad_pcb file to my Aisler Project-Folder. They can use this file directly - so I do not need them… That means in turn - I hope that all data is included, but I can't claim that.

Add-On PCB's

Meanwhile the number increases to 3:

  1. I2C-Clock-EEProm-Adapter with DS3231 Clock-Module. You can order a PCB batch (3 pcs.) if you want here. Looks like the old RTC-Module is sold out ! A good replacement is the RTC-Module shown in the picture below. Unsolder the pin-socket before mounting the module. SDA & SCL must be crossover connected from the module to the PCB ! The module can be found on ebay.

+ = VCC(3V3), G = GND
D = SDA, C = SDL
? = don't connect
  1. PIO PCB. You can order a PCB batch (3 pcs.) if you want here.
  2. Joystick PCB. You can order a PCB batch (3 pcs.) if you want here

REMARK 1: I am in no relation to Aisler-B.V., to offer a link to the PCB's is ONLY a simplified way to order them without using kiCAD or what else… You are free in any way to choose a different manufacturer for the PCB's.

REMARK 2: A alternative (cheaper) PCB manufacturer may be JLCPCB in USA, but there I do not have a account. You will have to do that by your own and upload the gerber files. Don't forget to take into account the unavoidable higher shipping costs if ordering from outside the USA.

Helpful hints for assembling

I2c-EEProm-Clock-Module Adapter I've slightly modified the old adapter this way, that the DS3231 clock module is now soldered to the PCB. Still remove the old pinheader and solder a new straight one the IC side so the module can be soldered with the battery holder on top to the PCB. See picture 1 below. A 3D view is included as a subpicture. The two IO's on the I2C Header are renamed to INT1 & INTB. At present they are not used as interrupt input, but they are now additional IO's of the PIO-Port0 on the Joystick PCB. More in the Multicomp System Manual downloadable below. All data is in the archive “Multicomp-July-2019_V1.0.0_I2C-Clock_EEPROM-Adapter.tar.gz”

Joystick-PCB: Preparing J5, R21/R22 for soldering first
R21/R22: Both resistors must be mounted on the bottom side of the PCB !
See picture 1. Do this as your first step !

Preparing J5 Pin-Socket: I've used a 10×1 pin-socket from the Arduino Project for mounting stackable PCB's on a Pin-Header (There are 20×2 stackable Pin-Sockets from the Raspbery-Project too, may be that they have to be treated in the same way). When trying to plug them on J6 (on the Multicomp-Board) I've found out that they can't be mounted side-by-side. So some mechanical treatment was necessary. After doing this, check out that all pins are vertical aligned when plugged into the box-header on the Multicomp board (J6). Next serveral M3 Nylon Hex Spacer (length see picture2) and Nylon washers, M3x0.8mm thick, are needed. I bought a larger amount of them on ebay or AMAZON. They offer collections of different spacer types (male-female, female-female) and length for less money. Regarding the washers: I bought them from AMAZON PROTECH_STORE, “PROTECH Large Polyamidwashers DIN 9021 M3 50 pcs.”, see picture2 for installation. The Acrylic sheets are 3mm thick, color is green, but the chosen color is up to you… The outer dimensions are as the Multicomp PCB. The corner hole positions are marked by using the Multicomp PCB as a hole mask (drill: 3.5mm diameter). The Acrylic sheets are bought from AMAZON as 200x300mm^2 pre-cut parts. I've done the cut to Multicom-PCB dimensions by myself. Maybe that the chosen shop will cut it for you…

After installing the 2 resistors on the joystick board install the washer and spacer as shown on picture2 to get the joystick board to the right level above the RS232 Dsub-9 connectors. Fiddle the pins from the sockets through the holes of J5 (Joystick-Board), then plug the socket into J6. Check their position in the box-header, then solder only one pin of each socket and check again. If everything is ok, solder all pins, then cut off the not needed length of the pins.

Multicomp-PCB: installing the spacer for Acrylic sheets and ADD-On PCB's
Picture3 shows how to install the various spacer/washer to get the right distance for mounting Swiss-Pi- & Joystick-PCB and the Acrylic sheets.

PIO-Expansion PCB: TOP/BOTTOM installation of the PIO-Expansion Socket
Where to install this socket depends on what you want to have most on the TOP side of the Multicomp-PCB: Joysticks on TOP or 2nd PIO-Port. To remove the 40-pin box-header may become a hard job and may damage the through-hole plating ! From my point of view it's of higher value to installed Joystick-PCB on TOP (if the 2nd PIO-PCB is not needed, leave the PIO-Epansion socket uninstalled). In principal the Joystick-Interface is more a multipurpose hardware, because the four analog inputs are voltage-to-pwm converters that transform 0..5V to it's corresponding puls-width. Nothing else the 4 counter in the FPGA do when reading back the thumb-stick position (bandwidth is roughly 45Hz, so most “slow motion” things will work fine). It's a suggestion…, at the end it's up to you.

www.retrobrewcomputers.org_lib_plugins_ckgedit_fckeditor_userfiles_image_builderpages_muellerk_photos_swiss-pi-adapter_prep_clock-module_installation.jpgJoystick-PCB Installation of J5-Pin-Sockets in J6Joystick-PCB Spacer and Washer installation


Although the code is running without any known issues, I've to bring down the number of warnings. That might cause some minor changes in the VHDL Code, but the general line is defined. The GPIO Bus is a 10-bit 2 port system with one 8-bit port (LOW) and a 2-bit port (HIGH). Single Input/Output programming is possible. Two user-controllable LED's (use a open collector driver) are connected to the header to. They can be used as a feedback indicator. I used them for testing the GPIO-Port - very helpful ;-) The I2c, Mouse and Sound-Hardware is tested and operates as expected - as far as I can say at present. Nevertheless there might be some unexpected behavior. The I2C controller really needs some explaining words, if you want to know more (yet), read the VHDL Code and follow the mentioned web-link in the header. The mouse-controller initializes the mouse for streaming-mode. More information can be found in the VHDL Code. The sound-channel has a special feature: It's possible to bypass the PSG's and write 8-bit data directly to the Sigma-Delta-DAC inputs. This can be used for DC-Output or to write data-streams directly to them. Again, read the VHDL Code for details/port-addresses.

Programming the VHDL Code

The Core-Board has only a jtag connector. That implies that only .sof files can easily be programed. If the code has to go to the EEPROM for permanent storage some extra steps are necessary each time you want to do this. How this can be achieved describes INTEL's “AN 370: Using the Intel FPGA Serial Flash Loader with the Intel Quartus Prime Software”. I've extracted the relevant section and created a short “Readme_Converting_.sof_to_.jic-Files.pdf” file which is easier to use and find. Follow these steps. The “Output_files” folder in the Project Folder includes a “Microcomputer.cof” file which is the Conversion-Setup for the conversion .sof → .jic. Read this in by clicking in the Selection-Box on “Open Conversion Setup-Data”. This automates all needed settings. Next click on “generate”. In the programmer select “Mikrocomputer.jic” for writing to the EEPROM.


Now ready for Serial-A…-C and the I2c-Interface. Next stop is having a program to set/read the RTC. While the RSX for the I2c-Interface is ready now, but - that's life - the targeted (2nd) I2c-controller refuses to cooperate. Therefore I will put it aside for some time and give it a 2nd try later - may be.Yet I've to stay with the 1st one - what is no real drawback.. Max. transfer speed is 600kHz (for the RSX), so the usual used 100kHz & 400kHz are covered. I've updated the VHDL code, because 2 minor bugs came up when routing the 'BUSY' signal from the I2c-Controller to the Drive activity LED (LED0 on the FPGA board). So you should update the FPGA binary code. Both archives incl. the usual sources, the RSX, a ref-manual and a demo to show how to use the RSX-library. The archive 'rtc-1.0.tar.gz' includes no RSX, it offers 3 CPM3 console commands that handle time data transfers from the CPM3 system-clock to the RTC and vice vesa. The 3rd program displays the RTC-Time. More in the incl. Ref-Manual.

⇒ Now incl. in the main archive below !

Board data

Due to the use of kiCAD5, the Schematic & PCB-Data can't be processed with kiCAD4, I haven't tried this but the files are not backward compatible. Many things are different in Version 5 !


All incl. in the presented archive. So have a closer look into it.

More 3D pictures are incl. in the archives…


24.05.2021: Some typo-hunting in the system-manual, updated T80 from REV247 to REV350, updated RND-Gen to suppress 0x0000 & 0xFFFF startup-values. 17.04.2021: Collect all archives in one tar.gz archive. NEW: a expanded system-manual reflecting the now used ZPM3 as the main OS. It's far more configured as in the system18.img that I used as the starting point. All RSX's are adapted to ZPM3. This improves usage within aliases etc. Incl. in the archive is the zpm3_image18.img, that holds a zpm3 along with a cpm3+z3plus drive image. Not included in my archive are all the additional information thta you will find in the original mc-2g-1024k archive due to keep the size below 128MB !. Image S3 to S8 are empty and free for data etc, S9 to S18 are still the Software drives as in system18.img. Finaly: I will now close this project. I've worked nearly 3 years on it and I can say: the system runs as reliable as all other multicomp systems do. I've done a lot of software development on it and it never fails (as long as the developed software was bug-free…). So have fun with it !

FilenameFilesizeLast modified
multicomp-july2019_all_20210524.tar.gz119.8 MiB2021/05/24 07:27
builderpages/muellerk/multicomp_july_2019.txt · Last modified: 2022/04/23 09:20 by muellerk
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0