9: The FIFO interface


In the last episode we had a brief look at the nv44 mthd microcode - the only thing it did was handling the DMA object setting methods. The nv50 version of this microcode is even simpler - only method 0 is handled.

This strongly suggests there are some other handlers for methods. Let's scan the method space and see which ones trigger the mthd microcode.

The following ones don't (on NV50):

  • 0x100 (probably a nop)
  • 0x180-0x19c (must be DMA objects)
  • 0x300
  • 0x304
  • 0x400-0x4bc

Let's see what happens when they're submitted.

  • 0x100: apparently nothing
  • 0x180-0x19c: bits 0-15 of corresponding $dX register are set to the DMA object handle, bit 16 is set to 1 - confirms earilier suspicion
  • 0x300: bits 0-29 of method data are stored to $sr3 and, if bits 30-31 of method data are not both 0, the piece of microcode pointed to by 468 is executed, interrupt 0 is triggered
  • 0x304: $x63 is set to method data, $x0-$x47 are all set to 0
  • 0x400-0x4bc: corresponding $x0-$x47 register is set to method data

So it seems that $x registers store method state between microcode executions, 0x400-0x4bc and 0x304 are parameter method like on VP2 and VP3, and 0x300 is "execute" method like on VP2/VP3.

The clearing of $x0-$x47 by method 0x304 can likewise be explained by VP3 similarities: on VP3, 0x304 selects the microcode piece to be loaded and executed. In other words, the parameters loaded previously are assumed to be for a different program and are discarded.

Elapsed time: 2h

Currently unrated


There are currently no comments

New Comment


required (not published)