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