ADC bit and the Playstation 2

I interrupted our PlayStation class on Thursday because I didn’t understand how a piece of code worked. To make a long story short, I did not understand how checking clipping on the 2 previous vertices works when those two vertices might be in a previous triangle.

I finally figured out how and why. I also think I have figured out why the ADC bit is called the ADC bit. You can check out my analysis in Adobe PDF or Powerpoint format:


PlayStation2 and the ADC bit Rev.3 (Adobe PDF)

Playstation 2 and the ADC bit Rev.3 (Powerpoint)

Excerpt:

“…We then perform a special bit-wise addition that allows us to set an ADC (ADd and Carry) bit if vi01 indicates that any clipping flags are set.

  • IF the ADC bit is not set, the vertex is output to the XYZ2 register as expected.
  • IF the ADC bit is set, the vertex is instead output
    to the XYZ3 register.

What’s the difference?

  • The XYZ2 register can perform a vertex kick AND a drawing kick.
  • The XYZ3 register can only perform a vertex kick.
  • A vertex kick uploads the vertex data to the GS, and is performed every time the XYZ register is written to.
  • The drawing kick tells the GS to start drawing the primitive, and is performed only when enough vertex data has been uploaded to begin the drawing process.

So…

If the drawing kick is not performed, then the primitive described by the current contents of the vertex registers will not be drawn.

Therefore, when drawing triangles, in order for the clipping to occur, the drawing kick has to be suppressed on third vertex!”

Leave a Reply