
To render a scene using the dma engine -


void renderScene()
{
  start_up_frame();
  tile=0;


  scan_convert(tile, 0);

  /* now wait for 1 interrupt from DMA engine */

  tile++;

  while (tile < tiles_in_frame) {
    scan_convert(tile, 1);
    /*
       now wait for 2 interrupts from DMA engine, from scan-converter
       and from end-of-texture
     */
    VRAMwritetoFrameStore(tile);
    tile++;
  }

  scan_convert ( -1, 1 );
  /*
     again wait for 2 interrupts from DMA engine, 1 of which
     appears real soon since there are no triangles in the NULL image!
   */
  VRAMwritetoFrameStore(tile);

  /*
    and we know that the last tile is at the bottom-right
    of the screen, so we can flip frames at any point from here
  */
}

The sync point is the end of texture() AND end of scan_convert().
How do i organise this sync? The tranny needs to see 2 events (is there a
race condition potentially in the event hardware?) before walking to the
next tile. The code for 'texture tile' needs to do the end-of-frame code
up to and including the VRAMwrite(), then GOTO scan-convert (next tile).

The trick is to move the end-of-frame code to the BEGINNING of each tile.
So tile 0 doesnt execute any end-of-frame code (achieved via a jump). All
other tiles begin by executing the end-of-frame code for the previous
tile. The end-of-frame code consists of


    computing a 24-bit pixel from intrinsic
    moving all variables into eof area
    perspective divide
    put texture address into bits 0..31
    VRAMwrite (for texture lookup)
    configure EMC's to new tileXY
    clear out scan-converting area
    start scan-converting polygons




