]> Shamusworld >> Repos - virtualjaguar/blob - src/include/fbmpop2p.h
Initial revision
[virtualjaguar] / src / include / fbmpop2p.h
1                 int count=0;
2                 uint32 c;
3                 paletteRam+=idx*2;
4                 if (flags&FLAGS_READMODIFY)
5                 {
6                         if (flags&FLAGS_HFLIP)
7                         {
8                                 if (flags&FLAGS_TRANSPARENT)
9                                 {
10                                         while (iwidth)
11                                         {
12                                                 c=jaguar_byte_read(ptr++);
13                                                 uint32 c0=(c>>6)&0x03;
14                                                 uint32 c1=(c>>4)&0x03;
15                                                 uint32 c2=(c>>2)&0x03;
16                                                 uint32 c3=(c>>0)&0x03;
17
18                                                 if (c0)
19                                                 {
20                                                         *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c0<<1)+0]);
21                                                         *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c0<<1)+1]);
22                                                 }
23                                                 else
24                                                         current_line_buffer-=2;
25                                                 if (c1)
26                                                 {
27                                                         *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c1<<1)+0]);
28                                                         *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c1<<1)+1]);
29                                                 }
30                                                 else
31                                                         current_line_buffer-=2;
32                                                 if (c2)
33                                                 {
34                                                         *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c2<<1)+0]);
35                                                         *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c2<<1)+1]);
36                                                 }
37                                                 else
38                                                         current_line_buffer-=2;
39                                                 if (c3)
40                                                 {
41                                                         *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c3<<1)+0]);
42                                                         *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c3<<1)+1]);
43                                                 }
44                                                 else
45                                                         current_line_buffer-=2;
46                                                 count+=1;
47                                                 if (count==8) // 8 bytes = a phrase (64 bits)
48                                                 {
49                                                         ptr-=8*(pitch-1);
50                                                         count=0;
51                                                 }
52                                                 iwidth--;
53                                         }
54                                 }
55                                 else
56                                 {
57                                         while (iwidth)
58                                         {
59                                                 c=jaguar_byte_read(ptr++);
60                                                 uint32 c0=(c>>6)&0x03;
61                                                 uint32 c1=(c>>4)&0x03;
62                                                 uint32 c2=(c>>2)&0x03;
63                                                 uint32 c3=(c>>0)&0x03;
64
65                                                 *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c0<<1)+0]);
66                                                 *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c0<<1)+1]);
67                                                 *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c1<<1)+0]);
68                                                 *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c1<<1)+1]);
69                                                 *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c2<<1)+0]);
70                                                 *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c2<<1)+1]);
71                                                 *current_line_buffer--=BLEND_Y(*current_line_buffer,paletteRam[(c3<<1)+0]);
72                                                 *current_line_buffer--=BLEND_CC(*current_line_buffer,paletteRam[(c3<<1)+1]);
73                                                 count+=1;
74                                                 if (count==8) // 8 bytes = a phrase (64 bits)
75                                                 {
76                                                         ptr-=8*(pitch-1);
77                                                         count=0;
78                                                 }
79                                                 iwidth--;
80                                         }
81                                 }
82                         }
83                         else
84                         {
85                                 if (flags&FLAGS_TRANSPARENT)
86                                 {
87                                         while (iwidth)
88                                         {
89                                                 c=jaguar_byte_read(ptr++);
90                                                 uint32 c0=(c>>6)&0x03;
91                                                 uint32 c1=(c>>4)&0x03;
92                                                 uint32 c2=(c>>2)&0x03;
93                                                 uint32 c3=(c>>0)&0x03;
94
95                                                 if (c0)
96                                                 {
97                                                         *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c0<<1)+0]);
98                                                         *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c0<<1)+1]);
99                                                 }
100                                                 else
101                                                         current_line_buffer+=2;
102                                                 if (c1)
103                                                 {
104                                                         *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c1<<1)+0]);
105                                                         *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c1<<1)+1]);
106                                                 }
107                                                 else
108                                                         current_line_buffer+=2;
109                                                 if (c2)
110                                                 {
111                                                         *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c2<<1)+0]);
112                                                         *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c2<<1)+1]);
113                                                 }
114                                                 else
115                                                         current_line_buffer+=2;
116                                                 if (c3)
117                                                 {
118                                                         *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c3<<1)+0]);
119                                                         *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c3<<1)+1]);
120                                                 }
121                                                 else
122                                                         current_line_buffer+=2;
123                                                 count+=1;
124                                                 if (count==8) // 8 bytes = a phrase (64 bits)
125                                                 {
126                                                         ptr+=8*(pitch-1);
127                                                         count=0;
128                                                 }
129                                                 iwidth--;
130                                         }
131                                 }
132                                 else
133                                 {
134                                         while (iwidth)
135                                         {
136                                                 c=jaguar_byte_read(ptr++);
137                                                 uint32 c0=(c>>6)&0x03;
138                                                 uint32 c1=(c>>4)&0x03;
139                                                 uint32 c2=(c>>2)&0x03;
140                                                 uint32 c3=(c>>0)&0x03;
141
142                                                 *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c0<<1)+0]);
143                                                 *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c0<<1)+1]);
144                                                 *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c1<<1)+0]);
145                                                 *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c1<<1)+1]);
146                                                 *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c2<<1)+0]);
147                                                 *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c2<<1)+1]);
148                                                 *current_line_buffer++=BLEND_Y(*current_line_buffer,paletteRam[(c3<<1)+0]);
149                                                 *current_line_buffer++=BLEND_CC(*current_line_buffer,paletteRam[(c3<<1)+1]);
150                                                 count+=1;
151                                                 if (count==8) // 8 bytes = a phrase (64 bits)
152                                                 {
153                                                         ptr+=8*(pitch-1);
154                                                         count=0;
155                                                 }
156                                                 iwidth--;
157                                         }
158                                 }
159                         }
160                 }
161                 else
162                 {
163                         if (flags&FLAGS_HFLIP)
164                         {
165                                 if (flags&FLAGS_TRANSPARENT)
166                                 {
167                                         while (iwidth)
168                                         {
169                                                 c=jaguar_byte_read(ptr++);
170                                                 uint32 c0=(c>>6)&0x03;
171                                                 uint32 c1=(c>>4)&0x03;
172                                                 uint32 c2=(c>>2)&0x03;
173                                                 uint32 c3=(c>>0)&0x03;
174
175                                                 if (c0)
176                                                 {
177                                                         *current_line_buffer--=paletteRam[(c0<<1)+0];
178                                                         *current_line_buffer--=paletteRam[(c0<<1)+1];
179                                                 }
180                                                 else
181                                                         current_line_buffer-=2;
182                                                 if (c1)
183                                                 {
184                                                         *current_line_buffer--=paletteRam[(c1<<1)+0];
185                                                         *current_line_buffer--=paletteRam[(c1<<1)+1];
186                                                 }
187                                                 else
188                                                         current_line_buffer-=2;
189                                                 if (c2)
190                                                 {
191                                                         *current_line_buffer--=paletteRam[(c2<<1)+0];
192                                                         *current_line_buffer--=paletteRam[(c2<<1)+1];
193                                                 }
194                                                 else
195                                                         current_line_buffer-=2;
196                                                 if (c3)
197                                                 {
198                                                         *current_line_buffer--=paletteRam[(c3<<1)+0];
199                                                         *current_line_buffer--=paletteRam[(c3<<1)+1];
200                                                 }
201                                                 else
202                                                         current_line_buffer-=2;
203                                                 count+=1;
204                                                 if (count==8) // 8 bytes = a phrase (64 bits)
205                                                 {
206                                                         ptr-=8*(pitch-1);
207                                                         count=0;
208                                                 }
209                                                 iwidth--;
210                                         }
211                                 }
212                                 else
213                                 {
214                                         while (iwidth)
215                                         {
216                                                 c=jaguar_byte_read(ptr++);
217                                                 uint32 c0=(c>>6)&0x03;
218                                                 uint32 c1=(c>>4)&0x03;
219                                                 uint32 c2=(c>>2)&0x03;
220                                                 uint32 c3=(c>>0)&0x03;
221
222                                                 *current_line_buffer--=paletteRam[(c0<<1)+0];
223                                                 *current_line_buffer--=paletteRam[(c0<<1)+1];
224                                                 *current_line_buffer--=paletteRam[(c1<<1)+0];
225                                                 *current_line_buffer--=paletteRam[(c1<<1)+1];
226                                                 *current_line_buffer--=paletteRam[(c2<<1)+0];
227                                                 *current_line_buffer--=paletteRam[(c2<<1)+1];
228                                                 *current_line_buffer--=paletteRam[(c3<<1)+0];
229                                                 *current_line_buffer--=paletteRam[(c3<<1)+1];
230                                                 count+=1;
231                                                 if (count==8) // 8 bytes = a phrase (64 bits)
232                                                 {
233                                                         ptr-=8*(pitch-1);
234                                                         count=0;
235                                                 }
236                                                 iwidth--;
237                                         }
238                                 }
239                         }
240                         else
241                         {
242                                 if (flags&FLAGS_TRANSPARENT)
243                                 {
244                                         while (iwidth)
245                                         {
246                                                 c=jaguar_byte_read(ptr++);
247                                                 uint32 c0=(c>>6)&0x03;
248                                                 uint32 c1=(c>>4)&0x03;
249                                                 uint32 c2=(c>>2)&0x03;
250                                                 uint32 c3=(c>>0)&0x03;
251
252                                                 if (c0)
253                                                 {
254                                                         *current_line_buffer++=paletteRam[(c0<<1)+0];
255                                                         *current_line_buffer++=paletteRam[(c0<<1)+1];
256                                                 }
257                                                 else
258                                                         current_line_buffer+=2;
259                                                 if (c1)
260                                                 {
261                                                         *current_line_buffer++=paletteRam[(c1<<1)+0];
262                                                         *current_line_buffer++=paletteRam[(c1<<1)+1];
263                                                 }
264                                                 else
265                                                         current_line_buffer+=2;
266                                                 if (c2)
267                                                 {
268                                                         *current_line_buffer++=paletteRam[(c2<<1)+0];
269                                                         *current_line_buffer++=paletteRam[(c2<<1)+1];
270                                                 }
271                                                 else
272                                                         current_line_buffer+=2;
273                                                 if (c3)
274                                                 {
275                                                         *current_line_buffer++=paletteRam[(c3<<1)+0];
276                                                         *current_line_buffer++=paletteRam[(c3<<1)+1];
277                                                 }
278                                                 else
279                                                         current_line_buffer+=2;
280                                                 count+=1;
281                                                 if (count==8) // 8 bytes = a phrase (64 bits)
282                                                 {
283                                                         ptr+=8*(pitch-1);
284                                                         count=0;
285                                                 }
286                                                 iwidth--;
287                                         }
288                                 }
289                                 else
290                                 {
291                                         while (iwidth)
292                                         {
293                                                 c=jaguar_byte_read(ptr++);
294                                                 uint32 c0=(c>>6)&0x03;
295                                                 uint32 c1=(c>>4)&0x03;
296                                                 uint32 c2=(c>>2)&0x03;
297                                                 uint32 c3=(c>>0)&0x03;
298
299                                                 *current_line_buffer++=paletteRam[(c0<<1)+0];
300                                                 *current_line_buffer++=paletteRam[(c0<<1)+1];
301                                                 *current_line_buffer++=paletteRam[(c1<<1)+0];
302                                                 *current_line_buffer++=paletteRam[(c1<<1)+1];
303                                                 *current_line_buffer++=paletteRam[(c2<<1)+0];
304                                                 *current_line_buffer++=paletteRam[(c2<<1)+1];
305                                                 *current_line_buffer++=paletteRam[(c3<<1)+0];
306                                                 *current_line_buffer++=paletteRam[(c3<<1)+1];
307                                                 count+=1;
308                                                 if (count==8) // 8 bytes = a phrase (64 bits)
309                                                 {
310                                                         ptr+=8*(pitch-1);
311                                                         count=0;
312                                                 }
313                                                 iwidth--;
314                                         }
315                                 }
316                         }
317                 }