Hi, I have a few questions that the 'Everything you wanted ot know about the PSX' (
http://www.zophar.net/tech/files/playstation.htm) leaves unanswered.
*) When a program writes to the data FIFO registers SXY, SZ and RGB, will the FIFO always be shifted? IE, mtc2 $13 $13 etc, will the FIFO be shifted here, or only when writing to the highest register in the FIFO? And what happens if a program writes to let's say SXY0; will the entire FIFO be shifted (thus shifting out the new value)? Or... does shifting of the FIFO occur only when the GTE writes to it itself via a cop2 command?
*) (For example) the RTPS GTE command does, according to 'Everything you...' store the result of [1,15,0] SX2= Lm_G1[F[OFX + IR1*(H/SZ)]] [1,27,16] in SX2, and the shifting of the FIFO applies only to the elements SX0 to SX2. Shouldn't the result be stored in SXP and the FIFO shifted SX0 to SXP?
*) I don't get what is supposed to happen with ORGB and IRGB when writing to IRGB. Could anyone clarify this? Also, will this happen when a program writes to IRGB (mtc2 $28 $28 etc) or only when the GTE writes to it itself via a cop2 command?
*) When will LZCS be updated, or does a program have to update it explicitly? Also, I'm a bit unsure about the LZCR... Is this correct; if LZCS = 1110010..., then LZCR should be 0x3? And once again, will writes to LZCS happen every time a program updates LZCR or only when the GTE writes to it itself via a cop2 command?
Thanks a bunch of times in advance. And even if you can't answer all questions, a single answer would be much appreciated
// tommi