Oh man, the emotion that comes up for me from PS2 is "anger", since that's what the emotion engine produced in me.
The PS2 had lots of really tricky quirks to deal with. First, VU0 (IIRC, could be the other one) had really limited means of transferring data, and you'd have to stall the CPU to do it, making it very difficult to get any real use out of it. VU1's access to gfx was handy, though.
Next up, the framebuffer operations in the GS (Graphics Synthesizer) were limited to a single function with four terms. The most common blending function you'd want to use (src * src_alpha) + dst * (1 - src_alpha) was simply not possible. In real terms, this means you could not blend things into the framebuffer based on alpha transparency, so you had to do lots of tricks. Ever noticed how shadow casters in PS2 games were always casting pitch black shadows? It's because you could squash to black, but couldn't modulate existing color.
The "scratch pad" was effectively L2 cache that you controlled yourself, and it was critical to manage it properly to get any performance out of the cpu. This was quite tricky.
This era of console games was very interesting. The PS2 was frustrating, while the GameCube was a bit easier, but just as frustrating. Matrix math in the GameCube was limited to 4x3, not the normal 4x4. The last row was fixed to the unit W vector. This means you could not project - ever notice how shadows on GameCube games are little smooth ovals? It's because without the ability to project, you could not render a model as a shadow. Gamecube was also weird in that it had little main memory, but a whole lot of audio memory, so you'd write a paging engine which would use audio memory as general purpose, by swapping stuff in and out of it.
Then came the XBox. It had Visual Studio and you wrote code as you would for a PC. You could even debug in a debugger, not printouts! It was glorious.