000263d8 - 00026420
Jump to navigation
Jump to search
Called to draw Otag list (tells GPU to start drawing to the screen)
000263d8: 3c030400 lui r3,0x0400 000263dc: 3c028003 lui r2,0x8003 000263e0: 8c422968 lw r2,0x2968(r2) # GP1 000263e4: 34630002 ori r3,r3,0x0002 000263e8: ac430000 sw r3,0x0000(r2) # write Gp1 instruction 0x04000002 (ready to receive command word, tpage base x = 2?) 000263ec: 3c028003 lui r2,0x8003 000263f0: 8c42296c lw r2,0x296c(r2) # DMA2 0x0 000263f4: 00000000 nop 000263f8: ac440000 sw r4,0x0000(r2) # store primative list address 000263fc: 3c028003 lui r2,0x8003 00026400: 8c422970 lw r2,0x2970(r2) # DMA2 0x4 00026404: 3c030100 lui r3,0x0100 00026408: ac400000 sw r0,0x0000(r2) # store 0 to DMA2 0x4 0002640c: 3c028003 lui r2,0x8003 00026410: 8c422974 lw r2,0x2974(r2) # 00026414: 34630401 ori r3,r3,0x0401 00026418: ac430000 sw r3,0x0000(r2) # store 0x01000401 to DMA2 0x8 0002641c: 03e00008 jr r31 00026420: 00000000 nop
for references sake, DMA2 0x8 is stored as the following set of flags:
0x8000 0000 - not used 0x4000 0000 - unknown (R/W) 0x2000 0000 - Pause related? 0x1000 0000 - start trigger (0 normal, 1 manual) 0x0e00 0000 - not used 0x0100 0000 - started (0 stopped/completed, 1 start/busy) 0x0080 0000 - not used 0x0070 0000 - chopping CPU window size (not sure what this means) 0x0008 0000 - not used 0x0007 0000 - chopping DMA window size (not sure what this means) 0x0000 f800 - not used 0x0000 0600 - sync mode (0: start immediately, 1: sync blocks to dma requests, 2 linked list mode, 3 reserved (unused)) 0x0000 0100 - chopping enabled 0x0000 00fc - not used 0x0000 0002 - madr step (0 +4 per, 1 -4 per) 0x0000 0001 - transfer direction (0 is to ram, 1 is from ram)
therefore the above sends the instructions (considering 0 the default): start, sync mode 2, transfer from ram