I have always liked consoles since the NES 8-bit era. To make a long story short I esp liked the Playstaton 2 (PS2) because of it’s quite unique architecture, painful some would describe it but I call it flexible :) (esp considering) that it’s 11 years old now.

So to show why I really like it and what makes it fun to programming for I will do a series of articles on the machine that mostly focuses on the on graphics + CPU bits and not so much about IO (but I will go into a bit about that as well)

Some topics that I will be covering is (but not limited to and may be changed along the way) these:

1. Breif Introduction (this article)
2. How you run code on your own ps2 and setting up the compiler
3. Your first triangle
4. DMA Channels in depth
5. VU1
6. VU0 + Scratchpad
7. EE MMI
8. Textures
9. Simple demo with what we learned
10. Performance (perf-counters, etc, “mini-pa”)
11. TBD…

So that’s the basic plan. One can think that these are many articles but there is lots of ground to cover to get good understanding of how everything works but I hope it will be interesting.

So very light start: What is Playstation 2?

Playstation 2 hardly needs any introduction and for you that lived under a rock for the past ten years can read up here:

These are the basic components that makes up the hardware (Text taken from Wikipedia with some changes)

CPU: MIPS R5900 64-bit with 128-bit MMI instructions “Emotion Engine” (I hate that name so “EE Core” or just EE from now on) clocked at 294.912 MHz (299 MHz on newer versions)

GS: “Graphics Synthesizer” (Hate that name as well, GS from now on) clocked at 147 MHz
Vector Units: VU0 and VU1 (Floating Point Multiply Accumulator × 9, Floating Point Divider × 1), 32-bit, at 150 MHz.

DMA: Main Bus running at 150Mhz giving a total bandwidth of 2.4GB/se.The DMAC controls all data transfers in the system. The DMAC transfers in parallel with the CPU

IPU: Image processing Unit (Used when doing block decoding of mpeg data for movies)
IOP: Input Output Processor. Handles all communication with I/O devices (gamepad, CD/DVD, Network, USB, etc). This is also the same CPU that is used in the PS1 and is used for BC with PS1 games on Ps2)
SPU2: Sound Processor (No, it’s not the same kind of SPU that is used in Cell/PS3 :)

So that is the very brief overview of the hardware. Next time I will go into how to run code on your own Ps2 and how to setup the compiler toolchain that is needed to do some actual work. One thing to remember is that everything I will use here as far as tools and libs will be based on the free and open ps2sdk and toolchain but even so the hardware is of course the same if you are pro developer.

That’s it for this time, look forward to the upcoming articles which will go into more depth of everything.