summaryrefslogtreecommitdiff
path: root/asm/SDK/GX/GXDisplayList.s
blob: 9ba2e859ce740d7436a299851527f8df7bf62c42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global GXBeginDisplayList
GXBeginDisplayList:
/* 8028663C 0028229C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80286640 002822A0  7C 08 02 A6 */	mflr r0
/* 80286644 002822A4  90 01 00 24 */	stw r0, 0x24(r1)
/* 80286648 002822A8  39 61 00 20 */	addi r11, r1, 0x20
/* 8028664C 002822AC  4B F4 0A DD */	bl _savegpr_27
/* 80286650 002822B0  83 C2 A0 D0 */	lwz r30, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286654 002822B4  3F E0 80 51 */	lis r31, lbl_80516280@ha
/* 80286658 002822B8  3B FF 62 80 */	addi r31, r31, lbl_80516280@l
/* 8028665C 002822BC  7C 7B 1B 78 */	mr r27, r3
/* 80286660 002822C0  80 1E 05 FC */	lwz r0, 0x5fc(r30)
/* 80286664 002822C4  7C 9C 23 78 */	mr r28, r4
/* 80286668 002822C8  3B BF 00 00 */	addi r29, r31, 0
/* 8028666C 002822CC  2C 00 00 00 */	cmpwi r0, 0
/* 80286670 002822D0  41 82 00 08 */	beq lbl_80286678
/* 80286674 002822D4  4B FF A8 5D */	bl __GXSetDirtyState
lbl_80286678:
/* 80286678 002822D8  88 1E 05 F9 */	lbz r0, 0x5f9(r30)
/* 8028667C 002822DC  2C 00 00 00 */	cmpwi r0, 0
/* 80286680 002822E0  41 82 00 14 */	beq lbl_80286694
/* 80286684 002822E4  7F C4 F3 78 */	mr r4, r30
/* 80286688 002822E8  38 7F 00 80 */	addi r3, r31, 0x80
/* 8028668C 002822EC  38 A0 06 00 */	li r5, 0x600
/* 80286690 002822F0  4B D7 D9 71 */	bl memcpy
lbl_80286694:
/* 80286694 002822F4  7C 7B E2 14 */	add r3, r27, r28
/* 80286698 002822F8  38 80 00 00 */	li r4, 0
/* 8028669C 002822FC  38 A3 FF FC */	addi r5, r3, -4
/* 802866A0 00282300  93 7D 00 00 */	stw r27, 0(r29)
/* 802866A4 00282304  38 00 00 01 */	li r0, 1
/* 802866A8 00282308  38 7F 06 80 */	addi r3, r31, 0x680
/* 802866AC 0028230C  90 BD 00 04 */	stw r5, 4(r29)
/* 802866B0 00282310  93 9D 00 08 */	stw r28, 8(r29)
/* 802866B4 00282314  90 9D 00 1C */	stw r4, 0x1c(r29)
/* 802866B8 00282318  93 7D 00 14 */	stw r27, 0x14(r29)
/* 802866BC 0028231C  93 7D 00 18 */	stw r27, 0x18(r29)
/* 802866C0 00282320  98 1E 05 F8 */	stb r0, 0x5f8(r30)
/* 802866C4 00282324  4B FF 89 D1 */	bl GXGetCPUFifo
/* 802866C8 00282328  38 7F 00 00 */	addi r3, r31, 0
/* 802866CC 0028232C  4B FF 84 05 */	bl GXSetCPUFifo
/* 802866D0 00282330  4B FF A0 31 */	bl GXResetWriteGatherPipe
/* 802866D4 00282334  39 61 00 20 */	addi r11, r1, 0x20
/* 802866D8 00282338  4B F4 0A 9D */	bl _restgpr_27
/* 802866DC 0028233C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802866E0 00282340  7C 08 03 A6 */	mtlr r0
/* 802866E4 00282344  38 21 00 20 */	addi r1, r1, 0x20
/* 802866E8 00282348  4E 80 00 20 */	blr

.global GXEndDisplayList
GXEndDisplayList:
/* 802866EC 0028234C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802866F0 00282350  7C 08 02 A6 */	mflr r0
/* 802866F4 00282354  90 01 00 24 */	stw r0, 0x24(r1)
/* 802866F8 00282358  39 61 00 20 */	addi r11, r1, 0x20
/* 802866FC 0028235C  4B F4 0A 29 */	bl _savegpr_26
/* 80286700 00282360  3F C0 80 51 */	lis r30, lbl_80516280@ha
/* 80286704 00282364  3B DE 62 80 */	addi r30, r30, lbl_80516280@l
/* 80286708 00282368  38 7E 00 00 */	addi r3, r30, 0
/* 8028670C 0028236C  4B FF 89 89 */	bl GXGetCPUFifo
/* 80286710 00282370  38 7E 00 00 */	addi r3, r30, 0
/* 80286714 00282374  4B FF 8A 31 */	bl GXGetFifoWrap
/* 80286718 00282378  7C 7F 1B 78 */	mr r31, r3
/* 8028671C 0028237C  38 7E 06 80 */	addi r3, r30, 0x680
/* 80286720 00282380  4B FF 83 B1 */	bl GXSetCPUFifo
/* 80286724 00282384  83 A2 A0 D0 */	lwz r29, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286728 00282388  88 1D 05 F9 */	lbz r0, 0x5f9(r29)
/* 8028672C 0028238C  2C 00 00 00 */	cmpwi r0, 0
/* 80286730 00282390  41 82 00 30 */	beq lbl_80286760
/* 80286734 00282394  4B FE 80 29 */	bl OSDisableInterrupts
/* 80286738 00282398  83 82 A0 D0 */	lwz r28, lbl_806426D0-_SDA2_BASE_(r2)
/* 8028673C 0028239C  7C 7B 1B 78 */	mr r27, r3
/* 80286740 002823A0  38 9E 00 80 */	addi r4, r30, 0x80
/* 80286744 002823A4  38 A0 06 00 */	li r5, 0x600
/* 80286748 002823A8  83 5C 00 08 */	lwz r26, 8(r28)
/* 8028674C 002823AC  7F 83 E3 78 */	mr r3, r28
/* 80286750 002823B0  4B D7 D8 B1 */	bl memcpy
/* 80286754 002823B4  93 5C 00 08 */	stw r26, 8(r28)
/* 80286758 002823B8  7F 63 DB 78 */	mr r3, r27
/* 8028675C 002823BC  4B FE 80 29 */	bl OSRestoreInterrupts
lbl_80286760:
/* 80286760 002823C0  57 E0 06 3F */	clrlwi. r0, r31, 0x18
/* 80286764 002823C4  38 00 00 00 */	li r0, 0
/* 80286768 002823C8  98 1D 05 F8 */	stb r0, 0x5f8(r29)
/* 8028676C 002823CC  40 82 00 10 */	bne lbl_8028677C
/* 80286770 002823D0  38 7E 00 00 */	addi r3, r30, 0
/* 80286774 002823D4  4B FF 89 C9 */	bl GXGetFifoCount
/* 80286778 002823D8  48 00 00 08 */	b lbl_80286780
lbl_8028677C:
/* 8028677C 002823DC  38 60 00 00 */	li r3, 0
lbl_80286780:
/* 80286780 002823E0  39 61 00 20 */	addi r11, r1, 0x20
/* 80286784 002823E4  4B F4 09 ED */	bl _restgpr_26
/* 80286788 002823E8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8028678C 002823EC  7C 08 03 A6 */	mtlr r0
/* 80286790 002823F0  38 21 00 20 */	addi r1, r1, 0x20
/* 80286794 002823F4  4E 80 00 20 */	blr

.global GXCallDisplayList
GXCallDisplayList:
/* 80286798 002823F8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8028679C 002823FC  7C 08 02 A6 */	mflr r0
/* 802867A0 00282400  90 01 00 24 */	stw r0, 0x24(r1)
/* 802867A4 00282404  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802867A8 00282408  83 E2 A0 D0 */	lwz r31, lbl_806426D0-_SDA2_BASE_(r2)
/* 802867AC 0028240C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802867B0 00282410  7C 9E 23 78 */	mr r30, r4
/* 802867B4 00282414  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802867B8 00282418  7C 7D 1B 78 */	mr r29, r3
/* 802867BC 0028241C  80 1F 05 FC */	lwz r0, 0x5fc(r31)
/* 802867C0 00282420  2C 00 00 00 */	cmpwi r0, 0
/* 802867C4 00282424  41 82 00 08 */	beq lbl_802867CC
/* 802867C8 00282428  4B FF A7 09 */	bl __GXSetDirtyState
lbl_802867CC:
/* 802867CC 0028242C  80 1F 00 00 */	lwz r0, 0(r31)
/* 802867D0 00282430  2C 00 00 00 */	cmpwi r0, 0
/* 802867D4 00282434  40 82 00 08 */	bne lbl_802867DC
/* 802867D8 00282438  4B FF AA BD */	bl __GXSendFlushPrim
lbl_802867DC:
/* 802867DC 0028243C  3C 60 CC 01 */	lis r3, 0xCC008000@ha
/* 802867E0 00282440  38 00 00 40 */	li r0, 0x40
/* 802867E4 00282444  98 03 80 00 */	stb r0, 0xCC008000@l(r3)
/* 802867E8 00282448  93 A3 80 00 */	stw r29, -0x8000(r3)
/* 802867EC 0028244C  93 C3 80 00 */	stw r30, -0x8000(r3)
/* 802867F0 00282450  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802867F4 00282454  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802867F8 00282458  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802867FC 0028245C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80286800 00282460  7C 08 03 A6 */	mtlr r0
/* 80286804 00282464  38 21 00 20 */	addi r1, r1, 0x20
/* 80286808 00282468  4E 80 00 20 */	blr