000263d8 - 00026420

From Final Fantasy Hacktics Wiki
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