Hello everyone! Several months ago I embarked on a project to build a game console 100% from scratch, based off the Pentium III processor. Well, everything except the CD drive and power supply. This is a work in progress, so I'll be updating every time I have a big update. The specs are as follows:
800 MHZ Pentium III Mobile CPU (The same as in the original Xbox, but at a higher frequency and twice the cache space)
Custom designed NB/GPU combo on an XC7A200T Artix 7 FPGA
256 MB DDR RAM (64 MB reserved for video, and 1 MB for the OS)
ATSAMV70Q21 ARM microcontroller for the South Bridge / DSP
100 MHZ FSB clock
128 MB flash for core OS and libraries
SD card reader for Game saves and other things
Modified Laptop CD drive
10/100 base-T Ethernet
Bluetooth for the remotes
With these specs, I don't expect this thing to be more powerful than the Game Cube. The main issue is the FSB clock, which for the Game Cube it is around 130 MHZ. The GPU, NB, and DSP are going to be designed by me, so it'll take a while to get them working just right. I'm splitting each main component of the console into their own steps to make this project easier to navigate. And no matter how long it's been since the last update, I am in fact still working on this project, and I vow to finish it. As I go through this, post comments so I know how I'm doing (questions, suggestions, help, likes, dislikes, etc.) Now here it is: the progress of the Dingo Console!
Step 1: The Emulator
Now before I start writing firmware, I decided to first write an emulator so I know exactly what I need to do. It isn't much right now, only an incomplete and REALLY glitchy DSP, a startup window where you can select what game to play, and an emulated CD drive that can read ISO files.
Step 2: The Motherboard / Components
The board design has gone through who knows how many revisions on the main component layout, and I'm still looking for the right software to design the schematics. I also don't have that many components yet, but here is what I have so far and where I got them:
Pentium III CPU from an old HP laptop
Modded laptop CD drive
Assorted inductors, capacitors, resistors, ICs, etc. from numerous motherboards
RTC battery from a Gateway laptop
Blue LED from a Raspberry Pi kit
The motherboard component layout is designed so that the critical components (CPU, GPU/NB, SB/DSP) are right next to each other. That way, the traces are as short as possible, reducing the need for impedance matching. I will post the layout and schematics when I finish them.
Step 3: The DSP
This part was given the most attention because I THOUGHT it would be the easiest. Boy was I wrong. The DSP is supposed to support two audio formats: WAV and my own DST. But for the DST format, there is a BIG glitch in the either the encoder or the decoder, unsure which one. But before I get into that, I'll explain how I want this DSP to work.
DST (Dingo Sound Track) Audio format
The audio format only records two pieces of data per sample: the amplitude and the number of frames since the last sample. I'll explain. When converting an audio file (WAV for example), it compares the current sample with the previous one. If it detects that the current sample switches amplitude direction in relation to the previous sample, it records the previous sample and the number of frames since the last record. It keeps going until the end of the file. One of the above images explains visually. I am still puzzled as to why this isn't working, I may have to consult my math teacher for help. I will get some wave forms made so I can see what exactly is going on.
The Hardware Portion
The DSP is going to be programmed on an
ATSAMV70Q2 microcontroller. It will output 8 bit stereo sound at 44.1 KHZ sample rate. It will be able to play up to 16 sound tracks at once, and will have 32 FX processors. An FX processor is something added to a sound track as a post processing filter used to add a little zest to the audio. It will have several post processing effects, including echo, static, overdrive (which is basically intentional audio clipping), repeat, waveform blending, and more if I can think of anything useful. Let me know of any effects you guys want to see this thing do.
Step 4: The GPU
For the GPU I'm creating my own architecture. Now, you're all probably thinking "Why reinvent the wheel?" Because I can, that's why. And it gives me the ability to design my own interface, instead of learning someone else's. Plus, nobody (NVidia, AMD, S3) wants to tell me how to use their chips, they like to ignore me. Therefore, I have no other choice but to make my own. This GPU will run at 400 MHZ at the least (although I could probably go faster.), and will have either 4 or 8 cores. My target speed for the GPU is around 8,000,000 triangles/second MAX.
The Dingo GPU rendering process
First, the GPU checks all objects in the RAM to see if any are in range of the camera. That way, it only spends time rendering the things the player can actually see, and ignores the things he/she can't. To compensate for objects behind each other, the GPU renders everything from farthest to closest. Once it verifies the objects' locations, it copies all of the visible objects to the process buffer.
The cores will be arranged and wire together so that when the verifier provides them with something to process, the first available core takes it. Then the core executes vertex and shader scripts (which as far as I know no other game console does this), then writes the result to the frame buffer. The GPU will be double buffered by default, but you can configure it to be triple buffered as well.
Step 5: The Chipset / CPU / RAM
The Dingo Game Console will be powered by the Pentium III processor, running at 800 MHz. The chipset will connect the processor to the DSP / SB, and the RAM. The SB will be programmed on the same chip as the DSP, and will control the CD drive, power, flash, and sensors (temperature, voltage). The RAM is DDR running at 200MHz, and with 4 chips and 16 bits per chip, this gives us a speed of 3.2 GB/s.
Step 6: Power and Cooling
For power, I'm going to use the good old MAX1632 buck controller. For the CPU and chipset power, I'm using the MAX1711. The controller ICs will be fed by the LM294 linear regulator. All of this will be powered from a 65 Watt laptop charger. For cooling, I'm going to connect the CPU and GPU to a single heatsink through heatpipes, and then place an 80 mm PWM fan on top of that heatsink. I won't put a thermal sensor in the thing, mainly because there already is one in the CPU. I'm using the CPU as the thermal reference because I think it's going to be the hottest component in the system. Either that, or the FPGA that contains the GPU.
Step 7: The Controller
As of now, I'm going to design my controller to have 2 joysticks, 2 triggers, 2 bumpers, 4 main buttons, a start button, and a D-Pad (Much like the GameCube controller, but with an extra bumper). The console will be able to connect to the controllers through either USB or Bluetooth. However, only two controllers will be able to use USB since there are only two ports, but in Bluetooth there is support to up to four. The remotes design is entirely up to the one making it, as long as they comply with the basic interface protocol which will be defined soon. The console will also be able to charge and perform firmware updates on Bluetooth remotes via the USB ports.
Step 8: Project Summary
This section will contain the overall progress of the console, what phase it's in, any current glitches, all designs and schematics, software downloads (BIOS, FPGA files, OS, DSP / SB HEX file, and source code), bill of materials, PCB designs, datasheet links, and everything else that was put into this thing.
This console is only about 5% finished. It won't be done for a long time. This is because of the inconvenience that I'm only a minor. I have school, family, and insufficient funding (which will be fixed relatively soon, when I get a job). And despite that fact, I in fact do know what I'm doing. I have the needed knowledge, such as CPU functionality, proper PCB routing, programming, etc. Anyway, this project is still in the early planning phase.
Bill of Materials
This is a list of the components I am for sure going to use, along with the price from my suppliers (Digikey, Newark Element 14, and rarely EBay. If none of them have the part, I will include the supplier that does)
- Pentium III CPU model KP80526GY800256 - $8.45 refurbished at Impact Computers
60QC04 power diode - can't seem to find a supplier, the one I have was salvaged. Anything similar should work
Mini adhesive heatsink for above diode - depends on specific heatsink
4x AS4C32M16D1A DDR RAM - $16.68 at Digikey
S29GL01GP12TFI010 flash memory - $19.23 at Digikey
MAX1632 voltage regulator - $24.91 at Digikey
MAX1711 CPU voltage regulator - $4.95 at Ebay
CB3LV-3I-100M0000 clock generator - $2.83 at Digikey
XCF32PVOG48C FPGA flash memory - $26.25 at Digikey
XC7A200T FPGA for the GPU/NB - $251.25 at Digikey
Not the cheapest project in the world, and if you want to build this thing just to play games, you're better off buying an Xbox or GameCube, either of which cost less than the FPGA for the GPU alone. The main purpose of this project is to learn about computer architecture.
This section will be filled when I have a stable design going. Just put it here to let you know of it's future existence.
This is a list of any glitches currently in the system. It will include the glitch name (can get very... interesting), it's description and origin, and if it's been resolved. This list will also describe potential glitches that I think I may come across.
- Sound Rape (told you ^): DSP plays annoying garbage instead of sounds. Currently exists in the emulator, not sure if it's the encoding or decoding. I will get some wave forms going to figure it out.
- Stripper Glitch: This is a glitch that I think might appear when I start coding the clothing and hair simulation in the physics engine. What I predict it being is that the cloth object clips into the solid body, causing an impossible state, and ultimately making the cloth object freak out. If it spazzes out enough, it may fly off the character, thus given the glitch title. Hopefully this doesn't happen.
I expect this thing to play somewhat decent games when it's finished, and I want the DSP to be able to output at least decent sounding audio. If my console can live render the below image effortlessly, with hair and clothing simulation included, then that's a good thing.
This project is a big one, and I need all the support I can get. Any help to fix any glitches, any component suggestions, any feedback, or just positive encouragement is much appreciated. I will hopefully have this thing playing games by the end of next year. But in the mean time, keep an eye out for any other instructables I will make. Happy Making! (And whoever decides to build this thing with me is super awesome)