Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glide64/TexLoad4b.h
2 views
1
/*
2
* Glide64 - Glide video plugin for Nintendo 64 emulators.
3
* Copyright (c) 2002 Dave2001
4
* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
//****************************************************************
22
//
23
// Glide64 - Glide Plugin for Nintendo 64 emulators
24
// Project started on December 29th, 2001
25
//
26
// Authors:
27
// Dave2001, original author, founded the project in 2001, left it in 2002
28
// Gugaman, joined the project in 2002, left it in 2002
29
// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 2002
30
// Hiroshi 'KoolSmoky' Morii, joined the project in 2007
31
//
32
//****************************************************************
33
//
34
// To modify Glide64:
35
// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.
36
// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.
37
//
38
//****************************************************************
39
40
#include <stdint.h>
41
42
static inline void load4bCI(uint8_t *src, uint8_t *dst, int wid_64, int height, uint16_t line, int ext, uint16_t *pal)
43
{
44
uint8_t *v7;
45
uint8_t *v8;
46
int v9;
47
int v10;
48
int v11;
49
uint32_t v12;
50
uint8_t *v13;
51
uint32_t v14;
52
uint32_t *v15;
53
uint32_t v16;
54
uint8_t *v17;
55
uint32_t *v18;
56
int v19;
57
int v20;
58
uint32_t v21;
59
uint32_t v22;
60
uint32_t *v23;
61
uint32_t v24;
62
int v25;
63
int v26;
64
65
v7 = src;
66
v8 = dst;
67
v9 = height;
68
do
69
{
70
v25 = v9;
71
v10 = wid_64;
72
do
73
{
74
v11 = v10;
75
v12 = bswap32(*(uint32_t *)v7);
76
v13 = v7 + 4;
77
ALOWORD(v10) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 23) & 0x1E)), 1);
78
v14 = v10 << 16;
79
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 27) & 0x1E)), 1);
80
*(uint32_t *)v8 = v14;
81
v15 = (uint32_t *)(v8 + 4);
82
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 15) & 0x1E)), 1);
83
v14 <<= 16;
84
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 19) & 0x1E)), 1);
85
*v15 = v14;
86
++v15;
87
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 7) & 0x1E)), 1);
88
v14 <<= 16;
89
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 11) & 0x1E)), 1);
90
*v15 = v14;
91
++v15;
92
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v12 & 0x1E)), 1);
93
v14 <<= 16;
94
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 3) & 0x1E)), 1);
95
*v15 = v14;
96
++v15;
97
v16 = bswap32(*(uint32_t *)v13);
98
v7 = v13 + 4;
99
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 23) & 0x1E)), 1);
100
v14 <<= 16;
101
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 27) & 0x1E)), 1);
102
*v15 = v14;
103
++v15;
104
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 15) & 0x1E)), 1);
105
v14 <<= 16;
106
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 19) & 0x1E)), 1);
107
*v15 = v14;
108
++v15;
109
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 7) & 0x1E)), 1);
110
v14 <<= 16;
111
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 11) & 0x1E)), 1);
112
*v15 = v14;
113
++v15;
114
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v16 & 0x1E)), 1);
115
v14 <<= 16;
116
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 3) & 0x1E)), 1);
117
*v15 = v14;
118
v8 = (uint8_t *)(v15 + 1);
119
v10 = v11 - 1;
120
}
121
while ( v11 != 1 );
122
if ( v25 == 1 )
123
break;
124
v26 = v25 - 1;
125
v17 = &src[(line + (uintptr_t)v7 - (uintptr_t)src) & 0x7FF];
126
v18 = (uint32_t *)&v8[ext];
127
v19 = wid_64;
128
do
129
{
130
v20 = v19;
131
v21 = bswap32(*((uint32_t *)v17 + 1));
132
ALOWORD(v19) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 23) & 0x1E)), 1);
133
v22 = v19 << 16;
134
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 27) & 0x1E)), 1);
135
*v18 = v22;
136
v23 = v18 + 1;
137
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 15) & 0x1E)), 1);
138
v22 <<= 16;
139
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 19) & 0x1E)), 1);
140
*v23 = v22;
141
++v23;
142
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 7) & 0x1E)), 1);
143
v22 <<= 16;
144
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 11) & 0x1E)), 1);
145
*v23 = v22;
146
++v23;
147
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v21 & 0x1E)), 1);
148
v22 <<= 16;
149
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 3) & 0x1E)), 1);
150
*v23 = v22;
151
++v23;
152
v24 = bswap32(*(uint32_t *)v17);
153
v17 = &src[((uintptr_t)v17 + 8 - (uintptr_t)src) & 0x7FF];
154
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 23) & 0x1E)), 1);
155
v22 <<= 16;
156
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 27) & 0x1E)), 1);
157
*v23 = v22;
158
++v23;
159
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 15) & 0x1E)), 1);
160
v22 <<= 16;
161
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 19) & 0x1E)), 1);
162
*v23 = v22;
163
++v23;
164
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 7) & 0x1E)), 1);
165
v22 <<= 16;
166
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 11) & 0x1E)), 1);
167
*v23 = v22;
168
++v23;
169
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v24 & 0x1E)), 1);
170
v22 <<= 16;
171
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 3) & 0x1E)), 1);
172
*v23 = v22;
173
v18 = v23 + 1;
174
v19 = v20 - 1;
175
}
176
while ( v20 != 1 );
177
v7 = &src[(line + (uintptr_t)v17 - (uintptr_t)src) & 0x7FF];
178
v8 = (uint8_t *)((char *)v18 + ext);
179
v9 = v26 - 1;
180
}
181
while ( v26 != 1 );
182
}
183
184
static inline void load4bIAPal(uint8_t *src, uint8_t *dst, int wid_64, int height, int line, int ext, uint16_t *pal)
185
{
186
uint8_t *v7;
187
uint32_t *v8;
188
int v9;
189
int v10;
190
int v11;
191
uint32_t v12;
192
uint32_t *v13;
193
uint32_t v14;
194
uint32_t *v15;
195
uint32_t v16;
196
uint8_t *v17;
197
uint32_t *v18;
198
int v19;
199
int v20;
200
uint32_t v21;
201
uint32_t v22;
202
uint32_t *v23;
203
uint32_t v24;
204
int v25;
205
int v26;
206
207
v7 = src;
208
v8 = (uint32_t *)dst;
209
v9 = height;
210
do
211
{
212
v25 = v9;
213
v10 = wid_64;
214
do
215
{
216
v11 = v10;
217
v12 = bswap32(*(uint32_t *)v7);
218
v13 = (uint32_t *)(v7 + 4);
219
ALOWORD(v10) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 23) & 0x1E)), 8);
220
v14 = v10 << 16;
221
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 27) & 0x1E)), 8);
222
*v8 = v14;
223
v15 = v8 + 1;
224
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 15) & 0x1E)), 8);
225
v14 <<= 16;
226
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 19) & 0x1E)), 8);
227
*v15 = v14;
228
++v15;
229
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 7) & 0x1E)), 8);
230
v14 <<= 16;
231
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 11) & 0x1E)), 8);
232
*v15 = v14;
233
++v15;
234
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v12 & 0x1E)), 8);
235
v14 <<= 16;
236
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v12 >> 3) & 0x1E)), 8);
237
*v15 = v14;
238
++v15;
239
v16 = bswap32(*v13);
240
v7 = (uint8_t *)(v13 + 1);
241
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 23) & 0x1E)), 8);
242
v14 <<= 16;
243
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 27) & 0x1E)), 8);
244
*v15 = v14;
245
++v15;
246
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 15) & 0x1E)), 8);
247
v14 <<= 16;
248
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 19) & 0x1E)), 8);
249
*v15 = v14;
250
++v15;
251
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 7) & 0x1E)), 8);
252
v14 <<= 16;
253
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 11) & 0x1E)), 8);
254
*v15 = v14;
255
++v15;
256
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v16 & 0x1E)), 8);
257
v14 <<= 16;
258
ALOWORD(v14) = __ROR__(*(uint16_t *)((char *)pal + ((v16 >> 3) & 0x1E)), 8);
259
*v15 = v14;
260
v8 = v15 + 1;
261
v10 = v11 - 1;
262
}
263
while ( v11 != 1 );
264
if ( v25 == 1 )
265
break;
266
v26 = v25 - 1;
267
v17 = &src[(line + (uintptr_t)v7 - (uintptr_t)src) & 0x7FF];
268
v18 = (uint32_t *)((char *)v8 + ext);
269
v19 = wid_64;
270
do
271
{
272
v20 = v19;
273
v21 = bswap32(*((uint32_t *)v17 + 1));
274
ALOWORD(v19) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 23) & 0x1E)), 8);
275
v22 = v19 << 16;
276
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 27) & 0x1E)), 8);
277
*v18 = v22;
278
v23 = v18 + 1;
279
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 15) & 0x1E)), 8);
280
v22 <<= 16;
281
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 19) & 0x1E)), 8);
282
*v23 = v22;
283
++v23;
284
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 7) & 0x1E)), 8);
285
v22 <<= 16;
286
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 11) & 0x1E)), 8);
287
*v23 = v22;
288
++v23;
289
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v21 & 0x1E)), 8);
290
v22 <<= 16;
291
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v21 >> 3) & 0x1E)), 8);
292
*v23 = v22;
293
++v23;
294
v24 = bswap32(*(uint32_t *)v17);
295
v17 = &src[((uintptr_t)v17 + 8 - (uintptr_t)src) & 0x7FF];
296
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 23) & 0x1E)), 8);
297
v22 <<= 16;
298
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 27) & 0x1E)), 8);
299
*v23 = v22;
300
++v23;
301
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 15) & 0x1E)), 8);
302
v22 <<= 16;
303
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 19) & 0x1E)), 8);
304
*v23 = v22;
305
++v23;
306
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 7) & 0x1E)), 8);
307
v22 <<= 16;
308
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 11) & 0x1E)), 8);
309
*v23 = v22;
310
++v23;
311
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + (2 * (uint8_t)v24 & 0x1E)), 8);
312
v22 <<= 16;
313
ALOWORD(v22) = __ROR__(*(uint16_t *)((char *)pal + ((v24 >> 3) & 0x1E)), 8);
314
*v23 = v22;
315
v18 = v23 + 1;
316
v19 = v20 - 1;
317
}
318
while ( v20 != 1 );
319
v7 = &src[(line + (uintptr_t)v17 - (uintptr_t)src) & 0x7FF];
320
v8 = (uint32_t *)((char *)v18 + ext);
321
v9 = v26 - 1;
322
}
323
while ( v26 != 1 );
324
}
325
326
static inline void load4bIA(uint8_t *src, uint8_t *dst, int wid_64, int height, int line, int ext)
327
{
328
uint32_t *v6;
329
uint32_t *v7;
330
int v8;
331
int v9;
332
int v10;
333
uint32_t v11;
334
uint32_t *v12;
335
uint32_t v13;
336
uint32_t v14;
337
uint32_t v15;
338
uint32_t *v16;
339
uint32_t v17;
340
uint32_t v18;
341
uint32_t v19;
342
uint32_t v20;
343
uint32_t v21;
344
uint32_t v22;
345
uint32_t v23;
346
uint32_t v24;
347
uint32_t v25;
348
uint32_t v26;
349
uint32_t v27;
350
uint32_t v28;
351
uint32_t v29;
352
uint32_t v30;
353
uint32_t v31;
354
uint32_t v32;
355
uint32_t *v33;
356
uint32_t *v34;
357
int v35;
358
int v36;
359
uint32_t v37;
360
uint32_t v38;
361
uint32_t v39;
362
uint32_t *v40;
363
uint32_t v41;
364
uint32_t v42;
365
uint32_t v43;
366
uint32_t v44;
367
uint32_t v45;
368
uint32_t v46;
369
uint32_t v47;
370
uint32_t v48;
371
uint32_t v49;
372
uint32_t v50;
373
uint32_t v51;
374
uint32_t v52;
375
uint32_t v53;
376
uint32_t v54;
377
uint32_t v55;
378
uint32_t v56;
379
int v57;
380
int v58;
381
382
v6 = (uint32_t *)src;
383
v7 = (uint32_t *)dst;
384
v8 = height;
385
do
386
{
387
v57 = v8;
388
v9 = wid_64;
389
do
390
{
391
v10 = v9;
392
v11 = bswap32(*v6);
393
v12 = v6 + 1;
394
v13 = v11;
395
v14 = (8 * (v11 & 0x100000)) | (4 * (v11 & 0x100000)) | (2 * (v11 & 0x100000)) | (v11 & 0x100000) | ((((v11 >> 16) & 0xE00) >> 3) & 0x100) | ((v11 >> 16) & 0xE00) | (8 * ((v11 >> 12) & 0x1000)) | (4 * ((v11 >> 12) & 0x1000)) | (2 * ((v11 >> 12) & 0x1000)) | ((v11 >> 12) & 0x1000) | ((((v11 >> 28) & 0xE) >> 3)) | ((v11 >> 28) & 0xE) | (8 * ((v11 >> 24) & 0x10)) | (4 * ((v11 >> 24) & 0x10)) | (2 * ((v11 >> 24) & 0x10)) | ((v11 >> 24) & 0x10);
396
v11 >>= 4;
397
v11 &= 0xE0000u;
398
v15 = v11 | v14;
399
v11 >>= 3;
400
*v7 = ((((v13 << 8) & 0xE000000) >> 3) & 0x1000000) | ((v13 << 8) & 0xE000000) | (8 * ((v13 << 12) & 0x10000000)) | (4 * ((v13 << 12) & 0x10000000)) | (2 * ((v13 << 12) & 0x10000000)) | ((v13 << 12) & 0x10000000) | (v11 & 0x10000) | v15;
401
v16 = v7 + 1;
402
v17 = 16 * (uint16_t)v13 & 0x1000;
403
v18 = (((v13 & 0xE00) >> 3) & 0x100) | (v13 & 0xE00) | (8 * v17) | (4 * v17) | (2 * v17) | (v17) | ((((v13 >> 12) & 0xE) >> 3)) | ((v13 >> 12) & 0xE) | (8 * ((v13 >> 8) & 0x10)) | (4 * ((v13 >> 8) & 0x10)) | (2 * ((v13 >> 8) & 0x10)) | ((v13 >> 8) & 0x10);
404
v19 = v13 << 16;
405
v20 = (8 * (v19 & 0x100000)) | (4 * (v19 & 0x100000)) | (2 * (v19 & 0x100000)) | (v19 & 0x100000) | v18;
406
v21 = v13 << 12;
407
v21 &= 0xE0000u;
408
v22 = v21 | v20;
409
v21 >>= 3;
410
*v16 = ((((v13 << 24) & 0xE000000) >> 3) & 0x1000000) | ((v13 << 24) & 0xE000000) | (8 * ((v13 << 28) & 0x10000000)) | (4 * ((v13 << 28) & 0x10000000)) | (2 * ((v13 << 28) & 0x10000000)) | ((v13 << 28) & 0x10000000) | (v21 & 0x10000) | v22;
411
++v16;
412
v23 = bswap32(*v12);
413
v6 = v12 + 1;
414
v24 = v23;
415
v25 = (8 * (v23 & 0x100000)) | (4 * (v23 & 0x100000)) | (2 * (v23 & 0x100000)) | (v23 & 0x100000) | ((((v23 >> 16) & 0xE00) >> 3) & 0x100) | ((v23 >> 16) & 0xE00) | (8 * ((v23 >> 12) & 0x1000)) | (4 * ((v23 >> 12) & 0x1000)) | (2 * ((v23 >> 12) & 0x1000)) | ((v23 >> 12) & 0x1000) | (((v23 >> 28) & 0xE) >> 3) | ((v23 >> 28) & 0xE) | (8 * ((v23 >> 24) & 0x10)) | (4 * ((v23 >> 24) & 0x10)) | (2 * ((v23 >> 24) & 0x10)) | ((v23 >> 24) & 0x10);
416
v23 >>= 4;
417
v23 &= 0xE0000u;
418
v26 = v23 | v25;
419
v23 >>= 3;
420
*v16 = ((((v24 << 8) & 0xE000000) >> 3) & 0x1000000) | ((v24 << 8) & 0xE000000) | (8 * ((v24 << 12) & 0x10000000)) | (4 * ((v24 << 12) & 0x10000000)) | (2 * ((v24 << 12) & 0x10000000)) | ((v24 << 12) & 0x10000000) | (v23 & 0x10000) | (v26);
421
++v16;
422
v27 = 16 * (uint16_t)v24 & 0x1000;
423
v28 = (((v24 & 0xE00) >> 3) & 0x100) | (v24 & 0xE00) | (8 * v27) | (4 * v27) | (2 * v27) | (v27) | ((((v24 >> 12) & 0xE) >> 3)) | ((v24 >> 12) & 0xE) | (8 * ((v24 >> 8) & 0x10)) | (4 * ((v24 >> 8) & 0x10)) | (2 * ((v24 >> 8) & 0x10)) | ((v24 >> 8) & 0x10);
424
v29 = v24 << 16;
425
v30 = (8 * (v29 & 0x100000)) | (4 * (v29 & 0x100000)) | (2 * (v29 & 0x100000)) | (v29 & 0x100000) | v28;
426
v31 = v24 << 12;
427
v31 &= 0xE0000u;
428
v32 = v31 | v30;
429
v31 >>= 3;
430
*v16 = ((((v24 << 24) & 0xE000000) >> 3) & 0x1000000) | ((v24 << 24) & 0xE000000) | (8 * ((v24 << 28) & 0x10000000)) | (4 * ((v24 << 28) & 0x10000000)) | (2 * ((v24 << 28) & 0x10000000)) | ((v24 << 28) & 0x10000000) | (v31 & 0x10000) | v32;
431
v7 = v16 + 1;
432
v9 = v10 - 1;
433
}
434
while ( v10 != 1 );
435
if ( v57 == 1 )
436
break;
437
v58 = v57 - 1;
438
v33 = (uint32_t *)((char *)v6 + line);
439
v34 = (uint32_t *)((char *)v7 + ext);
440
v35 = wid_64;
441
do
442
{
443
v36 = v35;
444
v37 = bswap32(v33[1]);
445
v38 = v37 >> 4;
446
v38 &= 0xE0000u;
447
v39 = v38 | (8 * (v37 & 0x100000)) | (4 * (v37 & 0x100000)) | (2 * (v37 & 0x100000)) | (v37 & 0x100000) | ((((v37 >> 16) & 0xE00) >> 3) & 0x100) | ((v37 >> 16) & 0xE00) | (8 * ((v37 >> 12) & 0x1000)) | (4 * ((v37 >> 12) & 0x1000)) | (2 * ((v37 >> 12) & 0x1000)) | ((v37 >> 12) & 0x1000) | (((v37 >> 28) & 0xE) >> 3) | ((v37 >> 28) & 0xE) | (8 * ((v37 >> 24) & 0x10)) | (4 * ((v37 >> 24) & 0x10)) | (2 * ((v37 >> 24) & 0x10)) | ((v37 >> 24) & 0x10);
448
v38 >>= 3;
449
*v34 = ((((v37 << 8) & 0xE000000) >> 3) & 0x1000000) | ((v37 << 8) & 0xE000000) | (8 * ((v37 << 12) & 0x10000000)) | (4 * ((v37 << 12) & 0x10000000)) | (2 * ((v37 << 12) & 0x10000000)) | ((v37 << 12) & 0x10000000) | (v38 & 0x10000) | v39;
450
v40 = v34 + 1;
451
v41 = 16 * (uint16_t)v37 & 0x1000;
452
v42 = (((v37 & 0xE00) >> 3) & 0x100) | (v37 & 0xE00) | (8 * v41) | (4 * v41) | (2 * v41) | v41 | (((v37 >> 12) & 0xE) >> 3) | ((v37 >> 12) & 0xE) | (8 * ((v37 >> 8) & 0x10)) | (4 * ((v37 >> 8) & 0x10)) | (2 * ((v37 >> 8) & 0x10)) | ((v37 >> 8) & 0x10);
453
v43 = v37 << 16;
454
v44 = (8 * (v43 & 0x100000)) | (4 * (v43 & 0x100000)) | (2 * (v43 & 0x100000)) | (v43 & 0x100000) | v42;
455
v45 = v37 << 12;
456
v45 &= 0xE0000u;
457
v46 = v45 | v44;
458
v45 >>= 3;
459
*v40 = ((((v37 << 24) & 0xE000000) >> 3) & 0x1000000) | ((v37 << 24) & 0xE000000) | (8 * ((v37 << 28) & 0x10000000)) | (4 * ((v37 << 28) & 0x10000000)) | (2 * ((v37 << 28) & 0x10000000)) | ((v37 << 28) & 0x10000000) | (v45 & 0x10000) | v46;
460
++v40;
461
v47 = bswap32(*v33);
462
v33 += 2;
463
v48 = v47;
464
v49 = (8 * (v47 & 0x100000)) | (4 * (v47 & 0x100000)) | (2 * (v47 & 0x100000)) | (v47 & 0x100000) | ((((v47 >> 16) & 0xE00) >> 3) & 0x100) | ((v47 >> 16) & 0xE00) | (8 * ((v47 >> 12) & 0x1000)) | (4 * ((v47 >> 12) & 0x1000)) | (2 * ((v47 >> 12) & 0x1000)) | ((v47 >> 12) & 0x1000) | (((v47 >> 28) & 0xE) >> 3) | ((v47 >> 28) & 0xE) | (8 * ((v47 >> 24) & 0x10)) | (4 * ((v47 >> 24) & 0x10)) | (2 * ((v47 >> 24) & 0x10)) | ((v47 >> 24) & 0x10);
465
v47 >>= 4;
466
v47 &= 0xE0000u;
467
v50 = v47 | v49;
468
v47 >>= 3;
469
*v40 = ((((v48 << 8) & 0xE000000) >> 3) & 0x1000000) | ((v48 << 8) & 0xE000000) | (8 * ((v48 << 12) & 0x10000000)) | (4 * ((v48 << 12) & 0x10000000)) | (2 * ((v48 << 12) & 0x10000000)) | ((v48 << 12) & 0x10000000) | (v47 & 0x10000) | v50;
470
++v40;
471
v51 = 16 * (uint16_t)v48 & 0x1000;
472
v52 = (((v48 & 0xE00) >> 3) & 0x100) | (v48 & 0xE00) | (8 * v51) | (4 * v51) | (2 * v51) | v51 | (((v48 >> 12) & 0xE) >> 3) | ((v48 >> 12) & 0xE) | (8 * ((v48 >> 8) & 0x10)) | (4 * ((v48 >> 8) & 0x10)) | (2 * ((v48 >> 8) & 0x10)) | ((v48 >> 8) & 0x10);
473
v53 = v48 << 16;
474
v54 = (8 * (v53 & 0x100000)) | (4 * (v53 & 0x100000)) | (2 * (v53 & 0x100000)) | (v53 & 0x100000) | v52;
475
v55 = v48 << 12;
476
v55 &= 0xE0000u;
477
v56 = v55 | v54;
478
v55 >>= 3;
479
*v40 = ((((v48 << 24) & 0xE000000) >> 3) & 0x1000000) | ((v48 << 24) & 0xE000000) | (8 * ((v48 << 28) & 0x10000000)) | (4 * ((v48 << 28) & 0x10000000)) | (2 * ((v48 << 28) & 0x10000000)) | ((v48 << 28) & 0x10000000) | (v55 & 0x10000) | v56;
480
v34 = v40 + 1;
481
v35 = v36 - 1;
482
}
483
while ( v36 != 1 );
484
v6 = (uint32_t *)((char *)v33 + line);
485
v7 = (uint32_t *)((char *)v34 + ext);
486
v8 = v58 - 1;
487
}
488
while ( v58 != 1 );
489
}
490
491
static inline void load4bI(uint8_t *src, uint8_t *dst, int wid_64, int height, int line, int ext)
492
{
493
uint32_t *v6;
494
uint32_t *v7;
495
int v8;
496
int v9;
497
int v10;
498
uint32_t v11;
499
uint32_t *v12;
500
uint32_t v13;
501
uint32_t v14;
502
uint32_t *v15;
503
uint32_t v16;
504
unsigned int v17;
505
unsigned int v18;
506
uint32_t v19;
507
uint32_t v20;
508
uint32_t *v21;
509
uint32_t *v22;
510
int v23;
511
int v24;
512
uint32_t v25;
513
uint32_t v26;
514
uint32_t *v27;
515
uint32_t v28;
516
uint32_t v29;
517
uint32_t v30;
518
uint32_t v31;
519
uint32_t v32;
520
int v33;
521
int v34;
522
523
v6 = (uint32_t *)src;
524
v7 = (uint32_t *)dst;
525
v8 = height;
526
do
527
{
528
v33 = v8;
529
v9 = wid_64;
530
do
531
{
532
v10 = v9;
533
v11 = bswap32(*v6);
534
v12 = v6 + 1;
535
v13 = v11;
536
v14 = (16 * ((v11 >> 16) & 0xF00)) | ((v11 >> 16) & 0xF00) | (16 * (v11 >> 28)) | (v11 >> 28);
537
v11 >>= 4;
538
*v7 = (16 * ((v13 << 8) & 0xF000000)) | ((v13 << 8) & 0xF000000) | (16 * (v11 & 0xF0000)) | (v11 & 0xF0000) | v14;
539
v15 = v7 + 1;
540
v16 = v13 << 12;
541
*v15 = (16 * ((v13 << 24) & 0xF000000)) | ((v13 << 24) & 0xF000000) | (16 * (v16 & 0xF0000)) | (v16 & 0xF0000) | (16 * (v13 & 0xF00)) | (v13 & 0xF00) | (16 * ((uint16_t)v13 >> 12)) | ((uint16_t)v13 >> 12);
542
++v15;
543
v17 = bswap32(*v12);
544
v6 = v12 + 1;
545
v18 = v17;
546
v19 = (16 * ((v17 >> 16) & 0xF00)) | ((v17 >> 16) & 0xF00) | (16 * (v17 >> 28)) | (v17 >> 28);
547
v17 >>= 4;
548
*v15 = (16 * ((v18 << 8) & 0xF000000)) | ((v18 << 8) & 0xF000000) | (16 * (v17 & 0xF0000)) | (v17 & 0xF0000) | v19;
549
++v15;
550
v20 = v18 << 12;
551
*v15 = (16 * ((v18 << 24) & 0xF000000)) | ((v18 << 24) & 0xF000000) | (16 * (v20 & 0xF0000)) | (v20 & 0xF0000) | (16 * (v18 & 0xF00)) | (v18 & 0xF00) | (16 * ((uint16_t)v18 >> 12)) | ((uint16_t)v18 >> 12);
552
v7 = v15 + 1;
553
v9 = v10 - 1;
554
}
555
while ( v10 != 1 );
556
if ( v33 == 1 )
557
break;
558
v34 = v33 - 1;
559
v21 = (uint32_t *)((char *)v6 + line);
560
v22 = (uint32_t *)((char *)v7 + ext);
561
v23 = wid_64;
562
do
563
{
564
v24 = v23;
565
v25 = bswap32(v21[1]);
566
v26 = v25 >> 4;
567
*v22 = (16 * ((v25 << 8) & 0xF000000)) | ((v25 << 8) & 0xF000000) | (16 * (v26 & 0xF0000)) | (v26 & 0xF0000) | (16 * ((v25 >> 16) & 0xF00)) | ((v25 >> 16) & 0xF00) | (16 * (v25 >> 28)) | (v25 >> 28);
568
v27 = v22 + 1;
569
v28 = v25 << 12;
570
*v27 = (16 * ((v25 << 24) & 0xF000000)) | ((v25 << 24) & 0xF000000) | (16 * (v28 & 0xF0000)) | (v28 & 0xF0000) | (16 * (v25 & 0xF00)) | (v25 & 0xF00) | (16 * ((uint16_t)v25 >> 12)) | ((uint16_t)v25 >> 12);
571
++v27;
572
v29 = bswap32(*v21);
573
v21 += 2;
574
v30 = v29;
575
v31 = (16 * ((v29 >> 16) & 0xF00)) | ((v29 >> 16) & 0xF00) | (16 * (v29 >> 28)) | (v29 >> 28);
576
v29 >>= 4;
577
*v27 = (16 * ((v30 << 8) & 0xF000000)) | ((v30 << 8) & 0xF000000) | (16 * (v29 & 0xF0000)) | (v29 & 0xF0000) | v31;
578
++v27;
579
v32 = v30 << 12;
580
*v27 = (16 * ((v30 << 24) & 0xF000000)) | ((v30 << 24) & 0xF000000) | (16 * (v32 & 0xF0000)) | (v32 & 0xF0000) | (16 * (v30 & 0xF00)) | (v30 & 0xF00) | (16 * ((uint16_t)v30 >> 12)) | ((uint16_t)v30 >> 12);
581
v22 = v27 + 1;
582
v23 = v24 - 1;
583
}
584
while ( v24 != 1 );
585
v6 = (uint32_t *)((char *)v21 + line);
586
v7 = (uint32_t *)((char *)v22 + ext);
587
v8 = v34 - 1;
588
}
589
while ( v34 != 1 );
590
}
591
592
//****************************************************************
593
// Size: 0, Format: 2
594
595
wxUint32 Load4bCI (wxUIntPtr dst, wxUIntPtr src, int wid_64, int height, int line, int real_width, int tile)
596
{
597
if (wid_64 < 1) wid_64 = 1;
598
if (height < 1) height = 1;
599
int ext = (real_width - (wid_64 << 4)) << 1;
600
601
if (rdp.tlut_mode == 0)
602
{
603
//in tlut DISABLE mode load CI texture as plain intensity texture instead of palette dereference.
604
//Thanks to angrylion for the advice
605
load4bI ((uint8_t *)src, (uint8_t *)dst, wid_64, height, line, ext);
606
return /*(0 << 16) | */GR_TEXFMT_ALPHA_INTENSITY_44;
607
}
608
609
wxUIntPtr pal = wxPtrToUInt(rdp.pal_8 + (rdp.tiles[tile].palette << 4));
610
if (rdp.tlut_mode == 2)
611
{
612
load4bCI ((uint8_t *)src, (uint8_t *)dst, wid_64, height, line, ext, (uint16_t *)pal);
613
614
return (1 << 16) | GR_TEXFMT_ARGB_1555;
615
}
616
617
load4bIAPal ((uint8_t *)src, (uint8_t *)dst, wid_64, height, line, ext, (uint16_t *)pal);
618
return (1 << 16) | GR_TEXFMT_ALPHA_INTENSITY_88;
619
}
620
621
//****************************************************************
622
// Size: 0, Format: 3
623
//
624
// ** BY GUGAMAN **
625
626
wxUint32 Load4bIA (wxUIntPtr dst, wxUIntPtr src, int wid_64, int height, int line, int real_width, int tile)
627
{
628
if (rdp.tlut_mode != 0)
629
return Load4bCI (dst, src, wid_64, height, line, real_width, tile);
630
631
if (wid_64 < 1) wid_64 = 1;
632
if (height < 1) height = 1;
633
int ext = (real_width - (wid_64 << 4));
634
load4bIA ((uint8_t *)src, (uint8_t *)dst, wid_64, height, line, ext);
635
return /*(0 << 16) | */GR_TEXFMT_ALPHA_INTENSITY_44;
636
}
637
638
//****************************************************************
639
// Size: 0, Format: 4
640
641
wxUint32 Load4bI (wxUIntPtr dst, wxUIntPtr src, int wid_64, int height, int line, int real_width, int tile)
642
{
643
if (rdp.tlut_mode != 0)
644
return Load4bCI (dst, src, wid_64, height, line, real_width, tile);
645
646
if (wid_64 < 1) wid_64 = 1;
647
if (height < 1) height = 1;
648
int ext = (real_width - (wid_64 << 4));
649
load4bI ((uint8_t *)src, (uint8_t *)dst, wid_64, height, line, ext);
650
651
return /*(0 << 16) | */GR_TEXFMT_ALPHA_INTENSITY_44;
652
}
653
654
//****************************************************************
655
// Size: 0, Format: 0
656
657
wxUint32 Load4bSelect (wxUIntPtr dst, wxUIntPtr src, int wid_64, int height, int line, int real_width, int tile)
658
{
659
if (rdp.tlut_mode == 0)
660
return Load4bI (dst, src, wid_64, height, line, real_width, tile);
661
662
return Load4bCI (dst, src, wid_64, height, line, real_width, tile);
663
}
664
665