@@ -35,7 +35,7 @@ maxXY .req vz
35
35
36
36
tmp .req vy
37
37
dx .req vz
38
- dy .req tmp
38
+ dy .req vy
39
39
dz .req vz
40
40
fog .req vz
41
41
@@ -62,7 +62,6 @@ transformRoomUW_asm:
62
62
63
63
ldr res , =gVerticesBase
64
64
ldr res , [ res ]
65
- add res , #VERTEX_G
66
65
67
66
ldr tmp , =viewportRel
68
67
ldmia tmp , {spMinXY , spMaxXY}
@@ -75,8 +74,6 @@ transformRoomUW_asm:
75
74
76
75
stmfd sp ! , {spMinXY , spMaxXY , spRandLUT , spFrame , spCaustLUT}
77
76
78
- mov mask , # 0xFF
79
-
80
77
ldr m , =gMatrixPtr
81
78
ldr m , [ m ]
82
79
fiq_on
@@ -85,30 +82,23 @@ transformRoomUW_asm:
85
82
asr mw1 , #FIXED_SHIFT
86
83
fiq_off
87
84
ldmia m , {mx2 , my2 , mz2 , mw2}
88
- asr mw2 , #FIXED_SHIFT
85
+ asr mw2 , #( FIXED_SHIFT + OT_SHIFT)
89
86
90
87
. loop :
91
88
// unpack vertex
92
- ldmia vertices! , {v}
89
+ ldr v , [ vertices ], # 4
93
90
94
- and vz , mask , v , lsr # 16
95
- and vy , mask , v , lsr # 8
91
+ mov mask , # 0xFF
96
92
and vx , mask , v
93
+ and vy , mask , v , lsr # 8
94
+ and vz , mask , v , lsr # 16
95
+ mov vg , v , lsr #( 24 + 3 )
97
96
98
97
// transform z
99
98
mul z , mx2 , vx
100
99
mla z , my2 , vy , z
101
100
mla z , mz2 , vz , z
102
- add z , mw2 , z , asr #(FIXED_SHIFT - 8 )
103
-
104
- // skip if vertex is out of z - range
105
- add z , #VIEW_OFF
106
- cmp z , #(VIEW_OFF + VIEW_OFF + VIEW_MAX)
107
- movhi vg , #(CLIP_NEAR + CLIP_FAR)
108
- bhi .skip
109
-
110
- mov vg , v , lsr # 24
111
- sub z , #VIEW_OFF
101
+ add z , mw2 , z , asr #(FIXED_SHIFT - 8 + OT_SHIFT)
112
102
113
103
fiq_on
114
104
// transform y
@@ -133,28 +123,24 @@ transformRoomUW_asm:
133
123
and rand , #(MAX_CAUSTICS - 1 )
134
124
ldr caust , [ sp , #SP_CAUST ]
135
125
ldr caust , [ caust , rand , lsl # 2 ]
136
- add vg , caust , asr # 5
126
+ add vg , caust , asr # 8
137
127
138
128
// fog
139
- subs fog , z , #FOG_MIN
140
- addgt vg , fog , lsr # 4
141
-
142
- // vg 0 .. 255 - > 0 .. 31
143
- lsr vg , # 3
144
- cmp vg , # 31
129
+ subs fog , z , #(FOG_MIN >> OT_SHIFT)
130
+ addgt vg , fog , lsr #( 3 + FOG_SHIFT - OT_SHIFT)
131
+ cmpgt vg , # 31
145
132
movgt vg , # 31
146
133
147
134
// z clipping
148
- cmp z , #VIEW_MIN
149
- movle z , #VIEW_MIN
135
+ cmp z , #( VIEW_MIN >> OT_SHIFT)
136
+ movle z , #( VIEW_MIN >> OT_SHIFT)
150
137
orrle vg , #CLIP_NEAR
151
- cmp z , #VIEW_MAX
152
- movge z , #VIEW_MAX
138
+ cmp z , #( VIEW_MAX >> OT_SHIFT)
139
+ movge z , #( VIEW_MAX >> OT_SHIFT)
153
140
orrge vg , #CLIP_FAR
154
141
155
142
// project
156
143
add dz , z , z , lsr # 2
157
- lsr dz , # 4
158
144
divLUT tmp , dz
159
145
mul dx , x , tmp
160
146
mul dy , y , tmp
@@ -186,13 +172,10 @@ transformRoomUW_asm:
186
172
orrhi vg , #CLIP_FRAME
187
173
188
174
// store the result
189
- strh x , [ res , # - 6 ]
190
- strh y , [ res , # - 4 ]
191
- strh z , [ res , # - 2 ]
192
-
193
- mov mask , # 0xFF
194
- .skip:
195
- strh vg , [ res ], # 8
175
+ strh x , [ res ], # 2
176
+ strh y , [ res ], # 2
177
+ strh z , [ res ], # 2
178
+ strh vg , [ res ], # 2
196
179
197
180
subs count , # 1
198
181
bne . loop
0 commit comments