Close
0%
0%

Single chip game console

The simple DIY retro game controller with PIC MCU which generates VGA signal, music and sound effects

Similar projects worth following
After several projects with PIC24 generating plain VGA signal, I managed to support the sprites in the real time. That gave me the idea to make the 2D video game, and my choice was the old Spectrum's game "Jumping Jack". Of course, I modified it and added some new details.
The project is open, and it will be at the workshop during 32C3 in Hamburg, at the end of 2015.
Video demo: https://www.youtube.com/watch?v=VbTwWFwbsE4

As the video signal and the corresponding sync signals are generated by software, the console contains a minimum of hardware. There is also an audio signal output with five binary tone channels, mixed by a passive resistor network. Two of those channels are used for sound effects, similar to ones used in video games of that time (early eighties) and three for background music. This output is capable of driving line output for PC speakers or headphones.

It should be noted that there is no video processing unit, PGA or any special purpose chips, and that PIC microcontrollers are not designed for video signal generation. Everything is achieved by a series of different design tricks and some compromises. As te game does not run on PC but on stand-alone unit, screenshots are taken by camera from VGA monitor or directly from Photoshop, which was used in bitmaps creation process.

Video and audio generators, which are the vital parts of the firmware, are the parts of the operating system, which will soon be documented, and can be used for any other game or application. As the timings are critical, those parts are written in assembly language, but all the other parts of the program (scenario for some other games or any other application) may also be written in some other programming language, preferably Microchip's C. In this case all parts are written in Assembler, but only as a result of author's preference.

At the moment, only the game Jumping Jack is written for the platform, well known to those who played with the Spectrum personal computer back in the day. However, once a new game is created, it is easy to download it from the computer, via the serial port (which is not visible at the photo). The console has USB connector, but it is used only for 5V power supply. Unfortunately, microcontrollers which are packed in DIP packages (with thru-hole soldering, convenient for DIY projects and workshops) do not have USB interface but only serial ports, so you have to use RS 232 if you want to download some new game.

HARDWARE

This project is based on PIC24EP512GP202 microcontroller, which is 16-bit Microchip's MCU with 512K of internal flash program memory, 48K of internal data memory, packed in standard 28-pin Shrink-DIP case. This is the schematcs diagram:

The whole unit uses +5V power supply (2.1 mm coaxial CON1A or mini USB CON1B connector, but take care not to use both!). Measured current consumption is 77 mA. LDO regulator MCP1702-33 is used for +3.3V supply for MCU.

Instead of quarz, you can use ceramic resonator for the oscillator, but some of resonators will produce significant frequency jitter, which is visible as horizontal pixel instability on the screen. It is also possible to use internal FRC oscillator with PLL, but, of course, the jitter will be even worse.

R, G and B video hardware drivers are realized by simple passive attenuators (R1R2, R4R5 and R7R8) and NPN transistors (as emitter followers) T1-T3. There are no special requirements for those transistors, but the low current types (=< 100 mA) are reccomended, as the high current ones typically have lower bandwidth. Intensity control (for "dark" colours and gray) uses standard silicon diodes D1-D4. Do not use Schottky diodes, as their forward voltage drop is too low for proper dark colour representation in analog video signal.

5-channel audio mixer uses simple passive resistor network. Capacitor C9 is used for passive, first order low-pass RC filter. Pull-up resistor R14 is used in two-step volume level control circuit. As all outputs are pure binary (on-off), low volume level is managed by software, when the output port pins are held in open-drain state (selectable in ODCA and ODCB registers), as in that case resistors R14-R20 create additional voltage attenuator, for each output individually.

VGA SIGNAL

Video processors are not typically embedded in microcontrollers, so using the external video display unit is considered in gaming consoles. As this is the minimalistic project, VGA...

Read more »

  • 1 × PIC24EP512GP202 Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs) DIP28, through hole
  • 1 × MCP1702-33 Power Management ICs / Linear Voltage Regulators and LDOs, SOT 54, through hole
  • 4 × BC547 Discrete Semiconductors / Transistors, MOSFETs, FETs, IGBTs, SOT54, through hole
  • 5 × 1N4148 Discrete Semiconductors / Diodes and Rectifiers, through hole
  • 4 × Tantal capacitor 4u7 16V Raster 2.5 mm, through hole

View all 23 components

  • Bootstrap support

    Voja Antonic06/07/2015 at 10:41 0 comments

    The projects was mostly finished a few monts before I started following HaD, so I described everything in Project Details. There is only thing left, it is bootstrap routine, which will enable firmware distribution of updates and new games. I will surely add it here, as soon as I do it.

    I like PC24E (33E) product group, it is well balaced, but I am sorry that in this group there are no processors with more Data RAM. Some 24F MCUs have 96K RAM but they are too slow, some 32 MCUs have even much more, but they have complete different architecture and instruction set. I think that this game console could be much better with about 256K RAM. Not only game console, but also machine vision projects, which are also my point of interest.

View project log

  • 1
    Step 1

    All components, including keys and connectors, are soldered on 2-layer PCB, dimensions 50x110 mm. Here is the screenshot of the PCB (green = bottom layer, red = top layer).

    Here follows the component placement on the PCB and mechanical details.

View all instructions

Enjoy this project?

Share

Discussions

monnoliv wrote 09/24/2015 at 18:28 point

Wonderful !!!

  Are you sure? yes | no

Hacker404 wrote 09/24/2015 at 11:35 point

I so much want one of these but the circuit board was made in probably the only PCB CAD that I don't have lol. I will have to find the time re-do the board in something else. 

  Are you sure? yes | no

Hacker404 wrote 06/21/2015 at 08:07 point

Hi, Very interesting project. I'm keen to make one as it might get me to make the effort to learn PIC 16 Bit Asm. 

Are made boards available? I can only do single sided here but it looks simple enough that it might go single sided with links on the other side (top). If I make a board then I would include SD card socket if there enough pins spare. 

Do you know if there's a Z80 or 6502 emulator that could run on this chip? Would be very interesting to port some of the old games over. 

One other thing. The markers you have in the VGA signal to allow a monitor auto-adjust to detect the edges of the active area ... I have never seen that done before. Is there some standard or specification for this? or did you discover that it was a good way to auto-adjust screens?

  Are you sure? yes | no

Hacker404 wrote 06/21/2015 at 08:12 point

LOL @ spare pins ... just looked at the layout. Could save some on the keyboard with diodes but still wouldn't be enough. 

  Are you sure? yes | no

Voja Antonic wrote 06/21/2015 at 08:48 point

Yes, it's pretty crowded there, only one pin (portb1) is still free (when ICSP is disconnected), but there are more MCUs from the same family with more pins. For instance, 24515EG512GP204 has 44 pins, but in fact any 24E or 33E will also work.

I don't know if there is some 8-bit CPU emulator for this chip, but there's a lot of them for PCs.

Those markers were the simplest way to enable the screen auto-adjusting. I don't know how it is obtained on standard video cards, but if I try to auto-adjust the screen for my custom signal when some portion of the screen is black, it "zooms" the used portion and ignores the black one. So I had to add some dummy pixels to tell to the monitor where the borders are.

  Are you sure? yes | no

jaromir.sukuba wrote 05/03/2015 at 20:17 point

Nice project. Just curious, what program did you use to draw the schematics?

  Are you sure? yes | no

Voja Antonic wrote 05/03/2015 at 20:20 point

Thank you, Jaromir

I used CorelDRAW

  Are you sure? yes | no

jaromir.sukuba wrote 05/03/2015 at 20:37 point

CorelDraw, quite unexpected for me, but the result looks smooth. Good luck with this project, I'm curious how it comes out.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates