OK folks, I hope I have a project here to distract you from reality.
Ten years ago I started gaining up on electronics and joined Forum64. Seven years ago I joined this forum with the intention of creating my own (gaming) computer with hopefully better specifications than the Commodore 64.
After various attempts creating a working gaming computer, with mixed results, I stopped etching my own PCB’s and started using a PCB manufacturer. First I made some smaller PCB’s, mainly for the Commodore 64 to gather some experience.
Using the standard capabilities of ALLPCB, and currently JLCPCB: 2-layer, 12mil drill for vias, 7mil traces opened a whole new world for me. So I went on and designed a SBC with everything on one PCB. Send it off and got a big white PCB in return. It was a joy to solder and except for some bodge wires it worked first time. MARC-4 rev.d is my current revision with a second VIA and an FPGASID.
MARC-4 is now running at 8, 4, 2 or 1MHz variable speed. CPU, RAM, VIA, SPI and DUART do run at 10MHz. but I’ve settled for a maximum of 8MHz to accommodate the other needed frequencies.
As video and sound are mostly the most time critical components on our beloved 8-bit computers, I’m using two FPGA solutions, the F18A and the FPGASID. I went for clock stretching and speed manual alterations using software. For video I have to set the clock speed to 4MHz and for sound I have to set the clock speed to 2MHz. This is done with bits 0 and 1 in register $BFFF. The 500kHz for MIDI was also easily available from the 8MHz. Bits 2 in register $BFFF alters the location of the FPGASID to the Commodore 64’s location $D400. This way I can play SID music from the C64 on MARC-4. Bits 3 and 4 in register $BFFF controls the Power LED and the SHIFT LOCK LED.
My design goals and restrictions are: 5V components, DC-DC converter where needed, through hole technology, using a CPLD for logic, ROMless, and as I mentioned, it has to be a gaming computer.
MARC-4 has the following features [IC’s]:
• 8/16-bit CPU, 1-8MHz Clock [W65C816S]
• 1MiB RAM [2 X AS 6C4008-55PCN]
• 16KiB ROM [ATMEGA 1284P-PU]
• LOGIC: [Xilinx XC95108-7PC84C]
• VIA: [2 X W65C22S]
• DUART: [SC26C92]
• 65SPI: [XC9572PC44] by Daryl Rictor
• F18A: FPGA based TMS9918A by Matthew Hagerty
• FPGASID: FPGA based dual SID by Andreas Beermann
• Roland CM-300: GM/GS MIDI sound module
• Mechanical keyboard
• Joystick port
• Paddle port
• TTL serial port
• Roland compatible MIDI in/out ports
• SPI Real Time Clock with Temperature sensor [DS3234]
• SPI to IDE-Compact Flash interface by Daryl Rictor
• 6 free SPI ports
• Two expansion ports
With 16-bit instructions, 8MHz and 1MiB RAM, this has become a real dream gaming computer. It has 60Hz raster interrupt synced to the display which allows a lot of things to change in one frame. The joystick interface has two buttons like the AMIGA instead of one. It’s also possible to connect two paddles to the FPGASID, which have no jitter like on the Commodore 64. The FPGASID has 6 voices (stereo) instead of 3 voices (mono). The MIDI interface provides for MIDI music by connecting any multi timbral MIDI synthesizer. One downside is that the MIDI interface is just UART based, it’s not an intelligent MIDI interface, which means that the amount of notes may not be too dense / complex.
The keyboard and its interface was a lot of work and I’m pretty proud of how it turned out. It’s a mechanical keyboard and I removed the controller chip from it. I figured out the scan matrix and made a new controller with an AVR. It uses only one VIA port with hardware handshake. Its software debounced and receives 8-bit make and break scan codes via an interrupt routine.
I tested every interface on MARC-4 except for MIDI-in. I have a lot of test routines, EH-BASIC and an ML monitor, but that’s all.