MARC-4 rev.d Gaming SBC
MARC-4 rev.d Gaming SBC
Last edited by lordbubsy on Wed Apr 01, 2020 9:20 am, edited 1 time in total.
Marco
Re: MARC-4 rev.d gaming SBC
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.
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.
Marco
- GARTHWILSON
- Forum Moderator
- Posts: 8773
- Joined: 30 Aug 2002
- Location: Southern California
- Contact:
Re: MARC-4 rev.d Gaming SBC
Nice packaging is quite a challenge, and to have done such a nice job is quite an accomplishment.
http://WilsonMinesCo.com/ lots of 6502 resources
The "second front page" is http://wilsonminesco.com/links.html .
What's an additional VIA among friends, anyhow?
The "second front page" is http://wilsonminesco.com/links.html .
What's an additional VIA among friends, anyhow?
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
Re: MARC-4 rev.d Gaming SBC
GARTHWILSON wrote:
Nice packaging is quite a challenge, and to have done such a nice job is quite an accomplishment.
x86? We ain't got no x86. We don't NEED no stinking x86!
- BigDumbDinosaur
- Posts: 9425
- Joined: 28 May 2009
- Location: Midwestern USA (JB Pritzker’s dystopia)
- Contact:
Re: MARC-4 rev.d gaming SBC
lordbubsy wrote:
OK folks, I hope I have a project here to distract you from reality. 
x86? We ain't got no x86. We don't NEED no stinking x86!
Re: MARC-4 rev.d Gaming SBC
Thanks for the nice compliments. I finished this project a while back. Programing for it would be a logical next step, but I also feel the urge to simplify and improve on the hardware.
Marco
Re: MARC-4 rev.d Gaming SBC
That looks really cool Marco - nice job!
Daryl
Daryl
Please visit my website -> https://sbc.rictor.org/
Re: MARC-4 rev.d Gaming SBC
Hello Marco,
This is awesome! One question: did you write the code in the keyboard controller? Would love to compare notes on my controller. Very, very impressed that you reverse engineered the keyboard connections as well.
My keyboard controller: https://github.com/aslak3/keyboardcontroller
Lawrence
This is awesome! One question: did you write the code in the keyboard controller? Would love to compare notes on my controller. Very, very impressed that you reverse engineered the keyboard connections as well.
My keyboard controller: https://github.com/aslak3/keyboardcontroller
Lawrence
8 bit fun and games: https://www.aslak.net/
Re: MARC-4 rev.d Gaming SBC
Hi Lawrence,
Yes, I’ve written the AVR code in ATMEL Studio. Every 1/100 of a second the routine scans the matrix. It provides a press scan code or a release scan code. It generates an interrupt for the VIA on key changes.
I think the code is not very nice, but it works for me.
Yes, I’ve written the AVR code in ATMEL Studio. Every 1/100 of a second the routine scans the matrix. It provides a press scan code or a release scan code. It generates an interrupt for the VIA on key changes.
I think the code is not very nice, but it works for me.
Marco
Re: MARC-4 rev.d Gaming SBC
The wooden end plates remind me of the Minimoog. Very very nice work.