PS2 Trivia

by PSI on 21 Oct 2019

Under certain conditions, the EE may skip branches due to a bug in the pipelining logic. There is at least one game that relies on this, due to another bug in the game. The compiler will automatically pad out loops that meet those conditions, and handwritten assembly will produce a warning if those conditions are met. So basically, the assholes that developed the game Oni didn’t check their warnings.

FFX’s custom FMV library starts a DMA transfer then tries to start another one on the same channel without checking to see if the first transfer has finished.

The EE can access IOP RAM, but the IOP cannot access EE RAM.

Another crazy PS2 bug on the VUs: if an integer arithmetic instruction is right next to a branch instruction that reads the result of the arithmetic instruction, the branch instruction will instead read the most recent result from 5 or more cycles ago. This behavior is technically undefined: the manual just says “don’t put an integer instruction right next to a branch pls”. A Sony representative once told a group of developers to not put branches in branch delay slots. They did anyway. I would guess about 5% of games do this. A few games even do triple branches - Metal Gear Solid 3, some Lego game, My Street I think, and probably others.

When an interrupt occurs on the EE, most COP2 (VU0) instructions don’t execute further - except for divides and square roots.