blitfunc.c
1 #include "shared.h" 2 3 #include "custom.h" 4 #include "blitfunc.h" 5 6 void blitdofast_0(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 7 { 8 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 9 int i,j; 10 { 11 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 12 for (j=0;j<b->vblitsize;j++) { 13 for (i=0;i<b->hblitsize;i++) { 14 b->bltddat=0; 15 if (b->bltddat) b->blitzero=0; 16 if (ptd) *ptd++=b->bltddat; 17 } 18 if (ptd) ptd+=bltdmodw; 19 } 20 } 21 } 22 void blitdofast_desc_0(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 23 { 24 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 25 int i,j; 26 { 27 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 28 for (j=0;j<b->vblitsize;j++) { 29 for (i=0;i<b->hblitsize;i++) { 30 b->bltddat=0; 31 if (b->bltddat) b->blitzero=0; 32 if (ptd) *ptd--=b->bltddat; 33 } 34 if (ptd) ptd-=bltdmodw; 35 } 36 } 37 } 38 void blitdofast_a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 39 { 40 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 41 int i,j; 42 { 43 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 44 if (b->hblitsize==1) bltamask&=b->bltalwm; 45 for (j=0;j<b->vblitsize;j++) { 46 if (pta) b->bltadat=*pta++; 47 if (ptc) b->bltcdat=*ptc++; 48 bltaold=b->bltadat & bltamask; 49 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 50 srcc=b->bltcdat; 51 b->bltddat=(srcc & ~srca); 52 b->blitpreva=bltaold; 53 if (b->bltddat) b->blitzero=0; 54 if (ptd) *ptd++=b->bltddat; 55 for (i=2;i<b->hblitsize;i++) { 56 if (pta) b->bltadat=*pta++; 57 if (ptc) b->bltcdat=*ptc++; 58 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 59 srcc=b->bltcdat; 60 b->bltddat=(srcc & ~srca); 61 b->blitpreva=b->bltadat; 62 if (b->bltddat) b->blitzero=0; 63 if (ptd) *ptd++=b->bltddat; 64 } 65 if (b->hblitsize>1) { 66 if (pta) b->bltadat=*pta++; 67 if (ptc) b->bltcdat=*ptc++; 68 bltaold=b->bltadat & b->bltalwm; 69 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 70 srcc=b->bltcdat; 71 b->bltddat=(srcc & ~srca); 72 b->blitpreva=bltaold; 73 if (b->bltddat) b->blitzero=0; 74 if (ptd) *ptd++=b->bltddat; 75 } 76 if (pta) pta+=bltamodw; 77 if (ptc) ptc+=bltcmodw; 78 if (ptd) ptd+=bltdmodw; 79 } 80 } 81 } 82 void blitdofast_desc_a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 83 { 84 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 85 int i,j; 86 { 87 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 88 if (b->hblitsize==1) bltamask&=b->bltalwm; 89 for (j=0;j<b->vblitsize;j++) { 90 if (pta) b->bltadat=*pta--; 91 if (ptc) b->bltcdat=*ptc--; 92 bltaold=b->bltadat & bltamask; 93 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 94 srcc=b->bltcdat; 95 b->bltddat=(srcc & ~srca); 96 b->blitpreva=bltaold; 97 if (b->bltddat) b->blitzero=0; 98 if (ptd) *ptd--=b->bltddat; 99 for (i=2;i<b->hblitsize;i++) { 100 if (pta) b->bltadat=*pta--; 101 if (ptc) b->bltcdat=*ptc--; 102 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 103 srcc=b->bltcdat; 104 b->bltddat=(srcc & ~srca); 105 b->blitpreva=b->bltadat; 106 if (b->bltddat) b->blitzero=0; 107 if (ptd) *ptd--=b->bltddat; 108 } 109 if (b->hblitsize>1) { 110 if (pta) b->bltadat=*pta--; 111 if (ptc) b->bltcdat=*ptc--; 112 bltaold=b->bltadat & b->bltalwm; 113 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 114 srcc=b->bltcdat; 115 b->bltddat=(srcc & ~srca); 116 b->blitpreva=bltaold; 117 if (b->bltddat) b->blitzero=0; 118 if (ptd) *ptd--=b->bltddat; 119 } 120 if (pta) pta-=bltamodw; 121 if (ptc) ptc-=bltcmodw; 122 if (ptd) ptd-=bltdmodw; 123 } 124 } 125 } 126 void blitdofast_2a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 127 { 128 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 129 int i,j; 130 { 131 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 132 if (b->hblitsize==1) bltamask&=b->bltalwm; 133 for (j=0;j<b->vblitsize;j++) { 134 if (pta) b->bltadat=*pta++; 135 if (ptb) b->bltbdat=*ptb++; 136 if (ptc) b->bltcdat=*ptc++; 137 bltaold=b->bltadat & bltamask; 138 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 139 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 140 srcc=b->bltcdat; 141 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 142 b->blitpreva=bltaold; 143 b->blitprevb=b->bltbdat; 144 if (b->bltddat) b->blitzero=0; 145 if (ptd) *ptd++=b->bltddat; 146 for (i=2;i<b->hblitsize;i++) { 147 if (pta) b->bltadat=*pta++; 148 if (ptb) b->bltbdat=*ptb++; 149 if (ptc) b->bltcdat=*ptc++; 150 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 151 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 152 srcc=b->bltcdat; 153 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 154 b->blitpreva=b->bltadat; 155 b->blitprevb=b->bltbdat; 156 if (b->bltddat) b->blitzero=0; 157 if (ptd) *ptd++=b->bltddat; 158 } 159 if (b->hblitsize>1) { 160 if (pta) b->bltadat=*pta++; 161 if (ptb) b->bltbdat=*ptb++; 162 if (ptc) b->bltcdat=*ptc++; 163 bltaold=b->bltadat & b->bltalwm; 164 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 165 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 166 srcc=b->bltcdat; 167 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 168 b->blitpreva=bltaold; 169 b->blitprevb=b->bltbdat; 170 if (b->bltddat) b->blitzero=0; 171 if (ptd) *ptd++=b->bltddat; 172 } 173 if (pta) pta+=bltamodw; 174 if (ptb) ptb+=bltbmodw; 175 if (ptc) ptc+=bltcmodw; 176 if (ptd) ptd+=bltdmodw; 177 } 178 } 179 } 180 void blitdofast_desc_2a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 181 { 182 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 183 int i,j; 184 { 185 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 186 if (b->hblitsize==1) bltamask&=b->bltalwm; 187 for (j=0;j<b->vblitsize;j++) { 188 if (pta) b->bltadat=*pta--; 189 if (ptb) b->bltbdat=*ptb--; 190 if (ptc) b->bltcdat=*ptc--; 191 bltaold=b->bltadat & bltamask; 192 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 193 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 194 srcc=b->bltcdat; 195 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 196 b->blitpreva=bltaold; 197 b->blitprevb=b->bltbdat; 198 if (b->bltddat) b->blitzero=0; 199 if (ptd) *ptd--=b->bltddat; 200 for (i=2;i<b->hblitsize;i++) { 201 if (pta) b->bltadat=*pta--; 202 if (ptb) b->bltbdat=*ptb--; 203 if (ptc) b->bltcdat=*ptc--; 204 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 205 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 206 srcc=b->bltcdat; 207 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 208 b->blitpreva=b->bltadat; 209 b->blitprevb=b->bltbdat; 210 if (b->bltddat) b->blitzero=0; 211 if (ptd) *ptd--=b->bltddat; 212 } 213 if (b->hblitsize>1) { 214 if (pta) b->bltadat=*pta--; 215 if (ptb) b->bltbdat=*ptb--; 216 if (ptc) b->bltcdat=*ptc--; 217 bltaold=b->bltadat & b->bltalwm; 218 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 219 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 220 srcc=b->bltcdat; 221 b->bltddat=(srcc & ~srca) | (srcc & ~srcb); 222 b->blitpreva=bltaold; 223 b->blitprevb=b->bltbdat; 224 if (b->bltddat) b->blitzero=0; 225 if (ptd) *ptd--=b->bltddat; 226 } 227 if (pta) pta-=bltamodw; 228 if (ptb) ptb-=bltbmodw; 229 if (ptc) ptc-=bltcmodw; 230 if (ptd) ptd-=bltdmodw; 231 } 232 } 233 } 234 void blitdofast_30(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 235 { 236 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 237 int i,j; 238 { 239 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 240 if (b->hblitsize==1) bltamask&=b->bltalwm; 241 for (j=0;j<b->vblitsize;j++) { 242 if (pta) b->bltadat=*pta++; 243 if (ptb) b->bltbdat=*ptb++; 244 bltaold=b->bltadat & bltamask; 245 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 246 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 247 b->bltddat=(~srcb & srca); 248 b->blitpreva=bltaold; 249 b->blitprevb=b->bltbdat; 250 if (b->bltddat) b->blitzero=0; 251 if (ptd) *ptd++=b->bltddat; 252 for (i=2;i<b->hblitsize;i++) { 253 if (pta) b->bltadat=*pta++; 254 if (ptb) b->bltbdat=*ptb++; 255 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 256 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 257 b->bltddat=(~srcb & srca); 258 b->blitpreva=b->bltadat; 259 b->blitprevb=b->bltbdat; 260 if (b->bltddat) b->blitzero=0; 261 if (ptd) *ptd++=b->bltddat; 262 } 263 if (b->hblitsize>1) { 264 if (pta) b->bltadat=*pta++; 265 if (ptb) b->bltbdat=*ptb++; 266 bltaold=b->bltadat & b->bltalwm; 267 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 268 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 269 b->bltddat=(~srcb & srca); 270 b->blitpreva=bltaold; 271 b->blitprevb=b->bltbdat; 272 if (b->bltddat) b->blitzero=0; 273 if (ptd) *ptd++=b->bltddat; 274 } 275 if (pta) pta+=bltamodw; 276 if (ptb) ptb+=bltbmodw; 277 if (ptd) ptd+=bltdmodw; 278 } 279 } 280 } 281 void blitdofast_desc_30(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 282 { 283 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 284 int i,j; 285 { 286 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 287 if (b->hblitsize==1) bltamask&=b->bltalwm; 288 for (j=0;j<b->vblitsize;j++) { 289 if (pta) b->bltadat=*pta--; 290 if (ptb) b->bltbdat=*ptb--; 291 bltaold=b->bltadat & bltamask; 292 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 293 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 294 b->bltddat=(~srcb & srca); 295 b->blitpreva=bltaold; 296 b->blitprevb=b->bltbdat; 297 if (b->bltddat) b->blitzero=0; 298 if (ptd) *ptd--=b->bltddat; 299 for (i=2;i<b->hblitsize;i++) { 300 if (pta) b->bltadat=*pta--; 301 if (ptb) b->bltbdat=*ptb--; 302 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 303 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 304 b->bltddat=(~srcb & srca); 305 b->blitpreva=b->bltadat; 306 b->blitprevb=b->bltbdat; 307 if (b->bltddat) b->blitzero=0; 308 if (ptd) *ptd--=b->bltddat; 309 } 310 if (b->hblitsize>1) { 311 if (pta) b->bltadat=*pta--; 312 if (ptb) b->bltbdat=*ptb--; 313 bltaold=b->bltadat & b->bltalwm; 314 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 315 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 316 b->bltddat=(~srcb & srca); 317 b->blitpreva=bltaold; 318 b->blitprevb=b->bltbdat; 319 if (b->bltddat) b->blitzero=0; 320 if (ptd) *ptd--=b->bltddat; 321 } 322 if (pta) pta-=bltamodw; 323 if (ptb) ptb-=bltbmodw; 324 if (ptd) ptd-=bltdmodw; 325 } 326 } 327 } 328 void blitdofast_3a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 329 { 330 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 331 int i,j; 332 { 333 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 334 if (b->hblitsize==1) bltamask&=b->bltalwm; 335 for (j=0;j<b->vblitsize;j++) { 336 if (pta) b->bltadat=*pta++; 337 if (ptb) b->bltbdat=*ptb++; 338 if (ptc) b->bltcdat=*ptc++; 339 bltaold=b->bltadat & bltamask; 340 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 341 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 342 srcc=b->bltcdat; 343 b->bltddat=(srcc & ~srca) | (~srcb & srca); 344 b->blitpreva=bltaold; 345 b->blitprevb=b->bltbdat; 346 if (b->bltddat) b->blitzero=0; 347 if (ptd) *ptd++=b->bltddat; 348 for (i=2;i<b->hblitsize;i++) { 349 if (pta) b->bltadat=*pta++; 350 if (ptb) b->bltbdat=*ptb++; 351 if (ptc) b->bltcdat=*ptc++; 352 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 353 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 354 srcc=b->bltcdat; 355 b->bltddat=(srcc & ~srca) | (~srcb & srca); 356 b->blitpreva=b->bltadat; 357 b->blitprevb=b->bltbdat; 358 if (b->bltddat) b->blitzero=0; 359 if (ptd) *ptd++=b->bltddat; 360 } 361 if (b->hblitsize>1) { 362 if (pta) b->bltadat=*pta++; 363 if (ptb) b->bltbdat=*ptb++; 364 if (ptc) b->bltcdat=*ptc++; 365 bltaold=b->bltadat & b->bltalwm; 366 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 367 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 368 srcc=b->bltcdat; 369 b->bltddat=(srcc & ~srca) | (~srcb & srca); 370 b->blitpreva=bltaold; 371 b->blitprevb=b->bltbdat; 372 if (b->bltddat) b->blitzero=0; 373 if (ptd) *ptd++=b->bltddat; 374 } 375 if (pta) pta+=bltamodw; 376 if (ptb) ptb+=bltbmodw; 377 if (ptc) ptc+=bltcmodw; 378 if (ptd) ptd+=bltdmodw; 379 } 380 } 381 } 382 void blitdofast_desc_3a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 383 { 384 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 385 int i,j; 386 { 387 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 388 if (b->hblitsize==1) bltamask&=b->bltalwm; 389 for (j=0;j<b->vblitsize;j++) { 390 if (pta) b->bltadat=*pta--; 391 if (ptb) b->bltbdat=*ptb--; 392 if (ptc) b->bltcdat=*ptc--; 393 bltaold=b->bltadat & bltamask; 394 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 395 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 396 srcc=b->bltcdat; 397 b->bltddat=(srcc & ~srca) | (~srcb & srca); 398 b->blitpreva=bltaold; 399 b->blitprevb=b->bltbdat; 400 if (b->bltddat) b->blitzero=0; 401 if (ptd) *ptd--=b->bltddat; 402 for (i=2;i<b->hblitsize;i++) { 403 if (pta) b->bltadat=*pta--; 404 if (ptb) b->bltbdat=*ptb--; 405 if (ptc) b->bltcdat=*ptc--; 406 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 407 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 408 srcc=b->bltcdat; 409 b->bltddat=(srcc & ~srca) | (~srcb & srca); 410 b->blitpreva=b->bltadat; 411 b->blitprevb=b->bltbdat; 412 if (b->bltddat) b->blitzero=0; 413 if (ptd) *ptd--=b->bltddat; 414 } 415 if (b->hblitsize>1) { 416 if (pta) b->bltadat=*pta--; 417 if (ptb) b->bltbdat=*ptb--; 418 if (ptc) b->bltcdat=*ptc--; 419 bltaold=b->bltadat & b->bltalwm; 420 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 421 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 422 srcc=b->bltcdat; 423 b->bltddat=(srcc & ~srca) | (~srcb & srca); 424 b->blitpreva=bltaold; 425 b->blitprevb=b->bltbdat; 426 if (b->bltddat) b->blitzero=0; 427 if (ptd) *ptd--=b->bltddat; 428 } 429 if (pta) pta-=bltamodw; 430 if (ptb) ptb-=bltbmodw; 431 if (ptc) ptc-=bltcmodw; 432 if (ptd) ptd-=bltdmodw; 433 } 434 } 435 } 436 void blitdofast_3c(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 437 { 438 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 439 int i,j; 440 { 441 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 442 if (b->hblitsize==1) bltamask&=b->bltalwm; 443 for (j=0;j<b->vblitsize;j++) { 444 if (pta) b->bltadat=*pta++; 445 if (ptb) b->bltbdat=*ptb++; 446 bltaold=b->bltadat & bltamask; 447 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 448 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 449 b->bltddat=(srcb & ~srca) | (~srcb & srca); 450 b->blitpreva=bltaold; 451 b->blitprevb=b->bltbdat; 452 if (b->bltddat) b->blitzero=0; 453 if (ptd) *ptd++=b->bltddat; 454 for (i=2;i<b->hblitsize;i++) { 455 if (pta) b->bltadat=*pta++; 456 if (ptb) b->bltbdat=*ptb++; 457 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 458 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 459 b->bltddat=(srcb & ~srca) | (~srcb & srca); 460 b->blitpreva=b->bltadat; 461 b->blitprevb=b->bltbdat; 462 if (b->bltddat) b->blitzero=0; 463 if (ptd) *ptd++=b->bltddat; 464 } 465 if (b->hblitsize>1) { 466 if (pta) b->bltadat=*pta++; 467 if (ptb) b->bltbdat=*ptb++; 468 bltaold=b->bltadat & b->bltalwm; 469 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 470 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 471 b->bltddat=(srcb & ~srca) | (~srcb & srca); 472 b->blitpreva=bltaold; 473 b->blitprevb=b->bltbdat; 474 if (b->bltddat) b->blitzero=0; 475 if (ptd) *ptd++=b->bltddat; 476 } 477 if (pta) pta+=bltamodw; 478 if (ptb) ptb+=bltbmodw; 479 if (ptd) ptd+=bltdmodw; 480 } 481 } 482 } 483 void blitdofast_desc_3c(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 484 { 485 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 486 int i,j; 487 { 488 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 489 if (b->hblitsize==1) bltamask&=b->bltalwm; 490 for (j=0;j<b->vblitsize;j++) { 491 if (pta) b->bltadat=*pta--; 492 if (ptb) b->bltbdat=*ptb--; 493 bltaold=b->bltadat & bltamask; 494 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 495 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 496 b->bltddat=(srcb & ~srca) | (~srcb & srca); 497 b->blitpreva=bltaold; 498 b->blitprevb=b->bltbdat; 499 if (b->bltddat) b->blitzero=0; 500 if (ptd) *ptd--=b->bltddat; 501 for (i=2;i<b->hblitsize;i++) { 502 if (pta) b->bltadat=*pta--; 503 if (ptb) b->bltbdat=*ptb--; 504 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 505 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 506 b->bltddat=(srcb & ~srca) | (~srcb & srca); 507 b->blitpreva=b->bltadat; 508 b->blitprevb=b->bltbdat; 509 if (b->bltddat) b->blitzero=0; 510 if (ptd) *ptd--=b->bltddat; 511 } 512 if (b->hblitsize>1) { 513 if (pta) b->bltadat=*pta--; 514 if (ptb) b->bltbdat=*ptb--; 515 bltaold=b->bltadat & b->bltalwm; 516 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 517 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 518 b->bltddat=(srcb & ~srca) | (~srcb & srca); 519 b->blitpreva=bltaold; 520 b->blitprevb=b->bltbdat; 521 if (b->bltddat) b->blitzero=0; 522 if (ptd) *ptd--=b->bltddat; 523 } 524 if (pta) pta-=bltamodw; 525 if (ptb) ptb-=bltbmodw; 526 if (ptd) ptd-=bltdmodw; 527 } 528 } 529 } 530 void blitdofast_4a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 531 { 532 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 533 int i,j; 534 { 535 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 536 if (b->hblitsize==1) bltamask&=b->bltalwm; 537 for (j=0;j<b->vblitsize;j++) { 538 if (pta) b->bltadat=*pta++; 539 if (ptb) b->bltbdat=*ptb++; 540 if (ptc) b->bltcdat=*ptc++; 541 bltaold=b->bltadat & bltamask; 542 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 543 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 544 srcc=b->bltcdat; 545 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 546 b->blitpreva=bltaold; 547 b->blitprevb=b->bltbdat; 548 if (b->bltddat) b->blitzero=0; 549 if (ptd) *ptd++=b->bltddat; 550 for (i=2;i<b->hblitsize;i++) { 551 if (pta) b->bltadat=*pta++; 552 if (ptb) b->bltbdat=*ptb++; 553 if (ptc) b->bltcdat=*ptc++; 554 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 555 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 556 srcc=b->bltcdat; 557 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 558 b->blitpreva=b->bltadat; 559 b->blitprevb=b->bltbdat; 560 if (b->bltddat) b->blitzero=0; 561 if (ptd) *ptd++=b->bltddat; 562 } 563 if (b->hblitsize>1) { 564 if (pta) b->bltadat=*pta++; 565 if (ptb) b->bltbdat=*ptb++; 566 if (ptc) b->bltcdat=*ptc++; 567 bltaold=b->bltadat & b->bltalwm; 568 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 569 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 570 srcc=b->bltcdat; 571 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 572 b->blitpreva=bltaold; 573 b->blitprevb=b->bltbdat; 574 if (b->bltddat) b->blitzero=0; 575 if (ptd) *ptd++=b->bltddat; 576 } 577 if (pta) pta+=bltamodw; 578 if (ptb) ptb+=bltbmodw; 579 if (ptc) ptc+=bltcmodw; 580 if (ptd) ptd+=bltdmodw; 581 } 582 } 583 } 584 void blitdofast_desc_4a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 585 { 586 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 587 int i,j; 588 { 589 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 590 if (b->hblitsize==1) bltamask&=b->bltalwm; 591 for (j=0;j<b->vblitsize;j++) { 592 if (pta) b->bltadat=*pta--; 593 if (ptb) b->bltbdat=*ptb--; 594 if (ptc) b->bltcdat=*ptc--; 595 bltaold=b->bltadat & bltamask; 596 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 597 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 598 srcc=b->bltcdat; 599 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 600 b->blitpreva=bltaold; 601 b->blitprevb=b->bltbdat; 602 if (b->bltddat) b->blitzero=0; 603 if (ptd) *ptd--=b->bltddat; 604 for (i=2;i<b->hblitsize;i++) { 605 if (pta) b->bltadat=*pta--; 606 if (ptb) b->bltbdat=*ptb--; 607 if (ptc) b->bltcdat=*ptc--; 608 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 609 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 610 srcc=b->bltcdat; 611 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 612 b->blitpreva=b->bltadat; 613 b->blitprevb=b->bltbdat; 614 if (b->bltddat) b->blitzero=0; 615 if (ptd) *ptd--=b->bltddat; 616 } 617 if (b->hblitsize>1) { 618 if (pta) b->bltadat=*pta--; 619 if (ptb) b->bltbdat=*ptb--; 620 if (ptc) b->bltcdat=*ptc--; 621 bltaold=b->bltadat & b->bltalwm; 622 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 623 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 624 srcc=b->bltcdat; 625 b->bltddat=(srcc & ~srca) | (~srcc & srcb & srca); 626 b->blitpreva=bltaold; 627 b->blitprevb=b->bltbdat; 628 if (b->bltddat) b->blitzero=0; 629 if (ptd) *ptd--=b->bltddat; 630 } 631 if (pta) pta-=bltamodw; 632 if (ptb) ptb-=bltbmodw; 633 if (ptc) ptc-=bltcmodw; 634 if (ptd) ptd-=bltdmodw; 635 } 636 } 637 } 638 void blitdofast_6a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 639 { 640 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 641 int i,j; 642 { 643 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 644 if (b->hblitsize==1) bltamask&=b->bltalwm; 645 for (j=0;j<b->vblitsize;j++) { 646 if (pta) b->bltadat=*pta++; 647 if (ptb) b->bltbdat=*ptb++; 648 if (ptc) b->bltcdat=*ptc++; 649 bltaold=b->bltadat & bltamask; 650 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 651 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 652 srcc=b->bltcdat; 653 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 654 b->blitpreva=bltaold; 655 b->blitprevb=b->bltbdat; 656 if (b->bltddat) b->blitzero=0; 657 if (ptd) *ptd++=b->bltddat; 658 for (i=2;i<b->hblitsize;i++) { 659 if (pta) b->bltadat=*pta++; 660 if (ptb) b->bltbdat=*ptb++; 661 if (ptc) b->bltcdat=*ptc++; 662 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 663 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 664 srcc=b->bltcdat; 665 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 666 b->blitpreva=b->bltadat; 667 b->blitprevb=b->bltbdat; 668 if (b->bltddat) b->blitzero=0; 669 if (ptd) *ptd++=b->bltddat; 670 } 671 if (b->hblitsize>1) { 672 if (pta) b->bltadat=*pta++; 673 if (ptb) b->bltbdat=*ptb++; 674 if (ptc) b->bltcdat=*ptc++; 675 bltaold=b->bltadat & b->bltalwm; 676 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 677 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 678 srcc=b->bltcdat; 679 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 680 b->blitpreva=bltaold; 681 b->blitprevb=b->bltbdat; 682 if (b->bltddat) b->blitzero=0; 683 if (ptd) *ptd++=b->bltddat; 684 } 685 if (pta) pta+=bltamodw; 686 if (ptb) ptb+=bltbmodw; 687 if (ptc) ptc+=bltcmodw; 688 if (ptd) ptd+=bltdmodw; 689 } 690 } 691 } 692 void blitdofast_desc_6a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 693 { 694 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 695 int i,j; 696 { 697 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 698 if (b->hblitsize==1) bltamask&=b->bltalwm; 699 for (j=0;j<b->vblitsize;j++) { 700 if (pta) b->bltadat=*pta--; 701 if (ptb) b->bltbdat=*ptb--; 702 if (ptc) b->bltcdat=*ptc--; 703 bltaold=b->bltadat & bltamask; 704 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 705 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 706 srcc=b->bltcdat; 707 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 708 b->blitpreva=bltaold; 709 b->blitprevb=b->bltbdat; 710 if (b->bltddat) b->blitzero=0; 711 if (ptd) *ptd--=b->bltddat; 712 for (i=2;i<b->hblitsize;i++) { 713 if (pta) b->bltadat=*pta--; 714 if (ptb) b->bltbdat=*ptb--; 715 if (ptc) b->bltcdat=*ptc--; 716 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 717 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 718 srcc=b->bltcdat; 719 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 720 b->blitpreva=b->bltadat; 721 b->blitprevb=b->bltbdat; 722 if (b->bltddat) b->blitzero=0; 723 if (ptd) *ptd--=b->bltddat; 724 } 725 if (b->hblitsize>1) { 726 if (pta) b->bltadat=*pta--; 727 if (ptb) b->bltbdat=*ptb--; 728 if (ptc) b->bltcdat=*ptc--; 729 bltaold=b->bltadat & b->bltalwm; 730 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 731 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 732 srcc=b->bltcdat; 733 b->bltddat=(srcc & ~srca) | (srcc & ~srcb) | (~srcc & srcb & srca); 734 b->blitpreva=bltaold; 735 b->blitprevb=b->bltbdat; 736 if (b->bltddat) b->blitzero=0; 737 if (ptd) *ptd--=b->bltddat; 738 } 739 if (pta) pta-=bltamodw; 740 if (ptb) ptb-=bltbmodw; 741 if (ptc) ptc-=bltcmodw; 742 if (ptd) ptd-=bltdmodw; 743 } 744 } 745 } 746 void blitdofast_8a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 747 { 748 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 749 int i,j; 750 { 751 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 752 if (b->hblitsize==1) bltamask&=b->bltalwm; 753 for (j=0;j<b->vblitsize;j++) { 754 if (pta) b->bltadat=*pta++; 755 if (ptb) b->bltbdat=*ptb++; 756 if (ptc) b->bltcdat=*ptc++; 757 bltaold=b->bltadat & bltamask; 758 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 759 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 760 srcc=b->bltcdat; 761 b->bltddat=(srcc & ~srca) | (srcc & srcb); 762 b->blitpreva=bltaold; 763 b->blitprevb=b->bltbdat; 764 if (b->bltddat) b->blitzero=0; 765 if (ptd) *ptd++=b->bltddat; 766 for (i=2;i<b->hblitsize;i++) { 767 if (pta) b->bltadat=*pta++; 768 if (ptb) b->bltbdat=*ptb++; 769 if (ptc) b->bltcdat=*ptc++; 770 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 771 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 772 srcc=b->bltcdat; 773 b->bltddat=(srcc & ~srca) | (srcc & srcb); 774 b->blitpreva=b->bltadat; 775 b->blitprevb=b->bltbdat; 776 if (b->bltddat) b->blitzero=0; 777 if (ptd) *ptd++=b->bltddat; 778 } 779 if (b->hblitsize>1) { 780 if (pta) b->bltadat=*pta++; 781 if (ptb) b->bltbdat=*ptb++; 782 if (ptc) b->bltcdat=*ptc++; 783 bltaold=b->bltadat & b->bltalwm; 784 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 785 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 786 srcc=b->bltcdat; 787 b->bltddat=(srcc & ~srca) | (srcc & srcb); 788 b->blitpreva=bltaold; 789 b->blitprevb=b->bltbdat; 790 if (b->bltddat) b->blitzero=0; 791 if (ptd) *ptd++=b->bltddat; 792 } 793 if (pta) pta+=bltamodw; 794 if (ptb) ptb+=bltbmodw; 795 if (ptc) ptc+=bltcmodw; 796 if (ptd) ptd+=bltdmodw; 797 } 798 } 799 } 800 void blitdofast_desc_8a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 801 { 802 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 803 int i,j; 804 { 805 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 806 if (b->hblitsize==1) bltamask&=b->bltalwm; 807 for (j=0;j<b->vblitsize;j++) { 808 if (pta) b->bltadat=*pta--; 809 if (ptb) b->bltbdat=*ptb--; 810 if (ptc) b->bltcdat=*ptc--; 811 bltaold=b->bltadat & bltamask; 812 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 813 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 814 srcc=b->bltcdat; 815 b->bltddat=(srcc & ~srca) | (srcc & srcb); 816 b->blitpreva=bltaold; 817 b->blitprevb=b->bltbdat; 818 if (b->bltddat) b->blitzero=0; 819 if (ptd) *ptd--=b->bltddat; 820 for (i=2;i<b->hblitsize;i++) { 821 if (pta) b->bltadat=*pta--; 822 if (ptb) b->bltbdat=*ptb--; 823 if (ptc) b->bltcdat=*ptc--; 824 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 825 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 826 srcc=b->bltcdat; 827 b->bltddat=(srcc & ~srca) | (srcc & srcb); 828 b->blitpreva=b->bltadat; 829 b->blitprevb=b->bltbdat; 830 if (b->bltddat) b->blitzero=0; 831 if (ptd) *ptd--=b->bltddat; 832 } 833 if (b->hblitsize>1) { 834 if (pta) b->bltadat=*pta--; 835 if (ptb) b->bltbdat=*ptb--; 836 if (ptc) b->bltcdat=*ptc--; 837 bltaold=b->bltadat & b->bltalwm; 838 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 839 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 840 srcc=b->bltcdat; 841 b->bltddat=(srcc & ~srca) | (srcc & srcb); 842 b->blitpreva=bltaold; 843 b->blitprevb=b->bltbdat; 844 if (b->bltddat) b->blitzero=0; 845 if (ptd) *ptd--=b->bltddat; 846 } 847 if (pta) pta-=bltamodw; 848 if (ptb) ptb-=bltbmodw; 849 if (ptc) ptc-=bltcmodw; 850 if (ptd) ptd-=bltdmodw; 851 } 852 } 853 } 854 void blitdofast_8c(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 855 { 856 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 857 int i,j; 858 { 859 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 860 if (b->hblitsize==1) bltamask&=b->bltalwm; 861 for (j=0;j<b->vblitsize;j++) { 862 if (pta) b->bltadat=*pta++; 863 if (ptb) b->bltbdat=*ptb++; 864 if (ptc) b->bltcdat=*ptc++; 865 bltaold=b->bltadat & bltamask; 866 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 867 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 868 srcc=b->bltcdat; 869 b->bltddat=(srcb & ~srca) | (srcc & srcb); 870 b->blitpreva=bltaold; 871 b->blitprevb=b->bltbdat; 872 if (b->bltddat) b->blitzero=0; 873 if (ptd) *ptd++=b->bltddat; 874 for (i=2;i<b->hblitsize;i++) { 875 if (pta) b->bltadat=*pta++; 876 if (ptb) b->bltbdat=*ptb++; 877 if (ptc) b->bltcdat=*ptc++; 878 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 879 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 880 srcc=b->bltcdat; 881 b->bltddat=(srcb & ~srca) | (srcc & srcb); 882 b->blitpreva=b->bltadat; 883 b->blitprevb=b->bltbdat; 884 if (b->bltddat) b->blitzero=0; 885 if (ptd) *ptd++=b->bltddat; 886 } 887 if (b->hblitsize>1) { 888 if (pta) b->bltadat=*pta++; 889 if (ptb) b->bltbdat=*ptb++; 890 if (ptc) b->bltcdat=*ptc++; 891 bltaold=b->bltadat & b->bltalwm; 892 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 893 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 894 srcc=b->bltcdat; 895 b->bltddat=(srcb & ~srca) | (srcc & srcb); 896 b->blitpreva=bltaold; 897 b->blitprevb=b->bltbdat; 898 if (b->bltddat) b->blitzero=0; 899 if (ptd) *ptd++=b->bltddat; 900 } 901 if (pta) pta+=bltamodw; 902 if (ptb) ptb+=bltbmodw; 903 if (ptc) ptc+=bltcmodw; 904 if (ptd) ptd+=bltdmodw; 905 } 906 } 907 } 908 void blitdofast_desc_8c(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 909 { 910 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 911 int i,j; 912 { 913 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 914 if (b->hblitsize==1) bltamask&=b->bltalwm; 915 for (j=0;j<b->vblitsize;j++) { 916 if (pta) b->bltadat=*pta--; 917 if (ptb) b->bltbdat=*ptb--; 918 if (ptc) b->bltcdat=*ptc--; 919 bltaold=b->bltadat & bltamask; 920 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 921 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 922 srcc=b->bltcdat; 923 b->bltddat=(srcb & ~srca) | (srcc & srcb); 924 b->blitpreva=bltaold; 925 b->blitprevb=b->bltbdat; 926 if (b->bltddat) b->blitzero=0; 927 if (ptd) *ptd--=b->bltddat; 928 for (i=2;i<b->hblitsize;i++) { 929 if (pta) b->bltadat=*pta--; 930 if (ptb) b->bltbdat=*ptb--; 931 if (ptc) b->bltcdat=*ptc--; 932 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 933 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 934 srcc=b->bltcdat; 935 b->bltddat=(srcb & ~srca) | (srcc & srcb); 936 b->blitpreva=b->bltadat; 937 b->blitprevb=b->bltbdat; 938 if (b->bltddat) b->blitzero=0; 939 if (ptd) *ptd--=b->bltddat; 940 } 941 if (b->hblitsize>1) { 942 if (pta) b->bltadat=*pta--; 943 if (ptb) b->bltbdat=*ptb--; 944 if (ptc) b->bltcdat=*ptc--; 945 bltaold=b->bltadat & b->bltalwm; 946 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 947 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 948 srcc=b->bltcdat; 949 b->bltddat=(srcb & ~srca) | (srcc & srcb); 950 b->blitpreva=bltaold; 951 b->blitprevb=b->bltbdat; 952 if (b->bltddat) b->blitzero=0; 953 if (ptd) *ptd--=b->bltddat; 954 } 955 if (pta) pta-=bltamodw; 956 if (ptb) ptb-=bltbmodw; 957 if (ptc) ptc-=bltcmodw; 958 if (ptd) ptd-=bltdmodw; 959 } 960 } 961 } 962 void blitdofast_9a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 963 { 964 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 965 int i,j; 966 { 967 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 968 if (b->hblitsize==1) bltamask&=b->bltalwm; 969 for (j=0;j<b->vblitsize;j++) { 970 if (pta) b->bltadat=*pta++; 971 if (ptb) b->bltbdat=*ptb++; 972 if (ptc) b->bltcdat=*ptc++; 973 bltaold=b->bltadat & bltamask; 974 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 975 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 976 srcc=b->bltcdat; 977 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 978 b->blitpreva=bltaold; 979 b->blitprevb=b->bltbdat; 980 if (b->bltddat) b->blitzero=0; 981 if (ptd) *ptd++=b->bltddat; 982 for (i=2;i<b->hblitsize;i++) { 983 if (pta) b->bltadat=*pta++; 984 if (ptb) b->bltbdat=*ptb++; 985 if (ptc) b->bltcdat=*ptc++; 986 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 987 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 988 srcc=b->bltcdat; 989 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 990 b->blitpreva=b->bltadat; 991 b->blitprevb=b->bltbdat; 992 if (b->bltddat) b->blitzero=0; 993 if (ptd) *ptd++=b->bltddat; 994 } 995 if (b->hblitsize>1) { 996 if (pta) b->bltadat=*pta++; 997 if (ptb) b->bltbdat=*ptb++; 998 if (ptc) b->bltcdat=*ptc++; 999 bltaold=b->bltadat & b->bltalwm; 1000 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1001 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1002 srcc=b->bltcdat; 1003 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 1004 b->blitpreva=bltaold; 1005 b->blitprevb=b->bltbdat; 1006 if (b->bltddat) b->blitzero=0; 1007 if (ptd) *ptd++=b->bltddat; 1008 } 1009 if (pta) pta+=bltamodw; 1010 if (ptb) ptb+=bltbmodw; 1011 if (ptc) ptc+=bltcmodw; 1012 if (ptd) ptd+=bltdmodw; 1013 } 1014 } 1015 } 1016 void blitdofast_desc_9a(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1017 { 1018 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1019 int i,j; 1020 { 1021 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1022 if (b->hblitsize==1) bltamask&=b->bltalwm; 1023 for (j=0;j<b->vblitsize;j++) { 1024 if (pta) b->bltadat=*pta--; 1025 if (ptb) b->bltbdat=*ptb--; 1026 if (ptc) b->bltcdat=*ptc--; 1027 bltaold=b->bltadat & bltamask; 1028 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1029 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1030 srcc=b->bltcdat; 1031 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 1032 b->blitpreva=bltaold; 1033 b->blitprevb=b->bltbdat; 1034 if (b->bltddat) b->blitzero=0; 1035 if (ptd) *ptd--=b->bltddat; 1036 for (i=2;i<b->hblitsize;i++) { 1037 if (pta) b->bltadat=*pta--; 1038 if (ptb) b->bltbdat=*ptb--; 1039 if (ptc) b->bltcdat=*ptc--; 1040 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1041 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1042 srcc=b->bltcdat; 1043 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 1044 b->blitpreva=b->bltadat; 1045 b->blitprevb=b->bltbdat; 1046 if (b->bltddat) b->blitzero=0; 1047 if (ptd) *ptd--=b->bltddat; 1048 } 1049 if (b->hblitsize>1) { 1050 if (pta) b->bltadat=*pta--; 1051 if (ptb) b->bltbdat=*ptb--; 1052 if (ptc) b->bltcdat=*ptc--; 1053 bltaold=b->bltadat & b->bltalwm; 1054 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1055 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1056 srcc=b->bltcdat; 1057 b->bltddat=(srcc & ~srca) | (~srcc & ~srcb & srca) | (srcc & srcb); 1058 b->blitpreva=bltaold; 1059 b->blitprevb=b->bltbdat; 1060 if (b->bltddat) b->blitzero=0; 1061 if (ptd) *ptd--=b->bltddat; 1062 } 1063 if (pta) pta-=bltamodw; 1064 if (ptb) ptb-=bltbmodw; 1065 if (ptc) ptc-=bltcmodw; 1066 if (ptd) ptd-=bltdmodw; 1067 } 1068 } 1069 } 1070 void blitdofast_a8(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1071 { 1072 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1073 int i,j; 1074 { 1075 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1076 if (b->hblitsize==1) bltamask&=b->bltalwm; 1077 for (j=0;j<b->vblitsize;j++) { 1078 if (pta) b->bltadat=*pta++; 1079 if (ptb) b->bltbdat=*ptb++; 1080 if (ptc) b->bltcdat=*ptc++; 1081 bltaold=b->bltadat & bltamask; 1082 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1083 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1084 srcc=b->bltcdat; 1085 b->bltddat=(srcc & srcb) | (srcc & srca); 1086 b->blitpreva=bltaold; 1087 b->blitprevb=b->bltbdat; 1088 if (b->bltddat) b->blitzero=0; 1089 if (ptd) *ptd++=b->bltddat; 1090 for (i=2;i<b->hblitsize;i++) { 1091 if (pta) b->bltadat=*pta++; 1092 if (ptb) b->bltbdat=*ptb++; 1093 if (ptc) b->bltcdat=*ptc++; 1094 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1095 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1096 srcc=b->bltcdat; 1097 b->bltddat=(srcc & srcb) | (srcc & srca); 1098 b->blitpreva=b->bltadat; 1099 b->blitprevb=b->bltbdat; 1100 if (b->bltddat) b->blitzero=0; 1101 if (ptd) *ptd++=b->bltddat; 1102 } 1103 if (b->hblitsize>1) { 1104 if (pta) b->bltadat=*pta++; 1105 if (ptb) b->bltbdat=*ptb++; 1106 if (ptc) b->bltcdat=*ptc++; 1107 bltaold=b->bltadat & b->bltalwm; 1108 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1109 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1110 srcc=b->bltcdat; 1111 b->bltddat=(srcc & srcb) | (srcc & srca); 1112 b->blitpreva=bltaold; 1113 b->blitprevb=b->bltbdat; 1114 if (b->bltddat) b->blitzero=0; 1115 if (ptd) *ptd++=b->bltddat; 1116 } 1117 if (pta) pta+=bltamodw; 1118 if (ptb) ptb+=bltbmodw; 1119 if (ptc) ptc+=bltcmodw; 1120 if (ptd) ptd+=bltdmodw; 1121 } 1122 } 1123 } 1124 void blitdofast_desc_a8(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1125 { 1126 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1127 int i,j; 1128 { 1129 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1130 if (b->hblitsize==1) bltamask&=b->bltalwm; 1131 for (j=0;j<b->vblitsize;j++) { 1132 if (pta) b->bltadat=*pta--; 1133 if (ptb) b->bltbdat=*ptb--; 1134 if (ptc) b->bltcdat=*ptc--; 1135 bltaold=b->bltadat & bltamask; 1136 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1137 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1138 srcc=b->bltcdat; 1139 b->bltddat=(srcc & srcb) | (srcc & srca); 1140 b->blitpreva=bltaold; 1141 b->blitprevb=b->bltbdat; 1142 if (b->bltddat) b->blitzero=0; 1143 if (ptd) *ptd--=b->bltddat; 1144 for (i=2;i<b->hblitsize;i++) { 1145 if (pta) b->bltadat=*pta--; 1146 if (ptb) b->bltbdat=*ptb--; 1147 if (ptc) b->bltcdat=*ptc--; 1148 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1149 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1150 srcc=b->bltcdat; 1151 b->bltddat=(srcc & srcb) | (srcc & srca); 1152 b->blitpreva=b->bltadat; 1153 b->blitprevb=b->bltbdat; 1154 if (b->bltddat) b->blitzero=0; 1155 if (ptd) *ptd--=b->bltddat; 1156 } 1157 if (b->hblitsize>1) { 1158 if (pta) b->bltadat=*pta--; 1159 if (ptb) b->bltbdat=*ptb--; 1160 if (ptc) b->bltcdat=*ptc--; 1161 bltaold=b->bltadat & b->bltalwm; 1162 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1163 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1164 srcc=b->bltcdat; 1165 b->bltddat=(srcc & srcb) | (srcc & srca); 1166 b->blitpreva=bltaold; 1167 b->blitprevb=b->bltbdat; 1168 if (b->bltddat) b->blitzero=0; 1169 if (ptd) *ptd--=b->bltddat; 1170 } 1171 if (pta) pta-=bltamodw; 1172 if (ptb) ptb-=bltbmodw; 1173 if (ptc) ptc-=bltcmodw; 1174 if (ptd) ptd-=bltdmodw; 1175 } 1176 } 1177 } 1178 void blitdofast_aa(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1179 { 1180 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1181 int i,j; 1182 { 1183 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1184 for (j=0;j<b->vblitsize;j++) { 1185 for (i=0;i<b->hblitsize;i++) { 1186 if (ptc) b->bltcdat=*ptc++; 1187 srcc=b->bltcdat; 1188 b->bltddat=(srcc); 1189 if (b->bltddat) b->blitzero=0; 1190 if (ptd) *ptd++=b->bltddat; 1191 } 1192 if (ptc) ptc+=bltcmodw; 1193 if (ptd) ptd+=bltdmodw; 1194 } 1195 } 1196 } 1197 void blitdofast_desc_aa(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1198 { 1199 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1200 int i,j; 1201 { 1202 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1203 for (j=0;j<b->vblitsize;j++) { 1204 for (i=0;i<b->hblitsize;i++) { 1205 if (ptc) b->bltcdat=*ptc--; 1206 srcc=b->bltcdat; 1207 b->bltddat=(srcc); 1208 if (b->bltddat) b->blitzero=0; 1209 if (ptd) *ptd--=b->bltddat; 1210 } 1211 if (ptc) ptc-=bltcmodw; 1212 if (ptd) ptd-=bltdmodw; 1213 } 1214 } 1215 } 1216 void blitdofast_b1(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1217 { 1218 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1219 int i,j; 1220 { 1221 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1222 if (b->hblitsize==1) bltamask&=b->bltalwm; 1223 for (j=0;j<b->vblitsize;j++) { 1224 if (pta) b->bltadat=*pta++; 1225 if (ptb) b->bltbdat=*ptb++; 1226 if (ptc) b->bltcdat=*ptc++; 1227 bltaold=b->bltadat & bltamask; 1228 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1229 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1230 srcc=b->bltcdat; 1231 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1232 b->blitpreva=bltaold; 1233 b->blitprevb=b->bltbdat; 1234 if (b->bltddat) b->blitzero=0; 1235 if (ptd) *ptd++=b->bltddat; 1236 for (i=2;i<b->hblitsize;i++) { 1237 if (pta) b->bltadat=*pta++; 1238 if (ptb) b->bltbdat=*ptb++; 1239 if (ptc) b->bltcdat=*ptc++; 1240 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1241 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1242 srcc=b->bltcdat; 1243 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1244 b->blitpreva=b->bltadat; 1245 b->blitprevb=b->bltbdat; 1246 if (b->bltddat) b->blitzero=0; 1247 if (ptd) *ptd++=b->bltddat; 1248 } 1249 if (b->hblitsize>1) { 1250 if (pta) b->bltadat=*pta++; 1251 if (ptb) b->bltbdat=*ptb++; 1252 if (ptc) b->bltcdat=*ptc++; 1253 bltaold=b->bltadat & b->bltalwm; 1254 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1255 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1256 srcc=b->bltcdat; 1257 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1258 b->blitpreva=bltaold; 1259 b->blitprevb=b->bltbdat; 1260 if (b->bltddat) b->blitzero=0; 1261 if (ptd) *ptd++=b->bltddat; 1262 } 1263 if (pta) pta+=bltamodw; 1264 if (ptb) ptb+=bltbmodw; 1265 if (ptc) ptc+=bltcmodw; 1266 if (ptd) ptd+=bltdmodw; 1267 } 1268 } 1269 } 1270 void blitdofast_desc_b1(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1271 { 1272 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1273 int i,j; 1274 { 1275 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1276 if (b->hblitsize==1) bltamask&=b->bltalwm; 1277 for (j=0;j<b->vblitsize;j++) { 1278 if (pta) b->bltadat=*pta--; 1279 if (ptb) b->bltbdat=*ptb--; 1280 if (ptc) b->bltcdat=*ptc--; 1281 bltaold=b->bltadat & bltamask; 1282 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1283 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1284 srcc=b->bltcdat; 1285 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1286 b->blitpreva=bltaold; 1287 b->blitprevb=b->bltbdat; 1288 if (b->bltddat) b->blitzero=0; 1289 if (ptd) *ptd--=b->bltddat; 1290 for (i=2;i<b->hblitsize;i++) { 1291 if (pta) b->bltadat=*pta--; 1292 if (ptb) b->bltbdat=*ptb--; 1293 if (ptc) b->bltcdat=*ptc--; 1294 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1295 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1296 srcc=b->bltcdat; 1297 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1298 b->blitpreva=b->bltadat; 1299 b->blitprevb=b->bltbdat; 1300 if (b->bltddat) b->blitzero=0; 1301 if (ptd) *ptd--=b->bltddat; 1302 } 1303 if (b->hblitsize>1) { 1304 if (pta) b->bltadat=*pta--; 1305 if (ptb) b->bltbdat=*ptb--; 1306 if (ptc) b->bltcdat=*ptc--; 1307 bltaold=b->bltadat & b->bltalwm; 1308 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1309 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1310 srcc=b->bltcdat; 1311 b->bltddat=(~srcc & ~srcb) | (~srcb & srca) | (srcc & srca); 1312 b->blitpreva=bltaold; 1313 b->blitprevb=b->bltbdat; 1314 if (b->bltddat) b->blitzero=0; 1315 if (ptd) *ptd--=b->bltddat; 1316 } 1317 if (pta) pta-=bltamodw; 1318 if (ptb) ptb-=bltbmodw; 1319 if (ptc) ptc-=bltcmodw; 1320 if (ptd) ptd-=bltdmodw; 1321 } 1322 } 1323 } 1324 void blitdofast_ca(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1325 { 1326 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1327 int i,j; 1328 { 1329 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1330 if (b->hblitsize==1) bltamask&=b->bltalwm; 1331 for (j=0;j<b->vblitsize;j++) { 1332 if (pta) b->bltadat=*pta++; 1333 if (ptb) b->bltbdat=*ptb++; 1334 if (ptc) b->bltcdat=*ptc++; 1335 bltaold=b->bltadat & bltamask; 1336 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1337 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1338 srcc=b->bltcdat; 1339 b->bltddat=(srcc & ~srca) | (srcb & srca); 1340 b->blitpreva=bltaold; 1341 b->blitprevb=b->bltbdat; 1342 if (b->bltddat) b->blitzero=0; 1343 if (ptd) *ptd++=b->bltddat; 1344 for (i=2;i<b->hblitsize;i++) { 1345 if (pta) b->bltadat=*pta++; 1346 if (ptb) b->bltbdat=*ptb++; 1347 if (ptc) b->bltcdat=*ptc++; 1348 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1349 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1350 srcc=b->bltcdat; 1351 b->bltddat=(srcc & ~srca) | (srcb & srca); 1352 b->blitpreva=b->bltadat; 1353 b->blitprevb=b->bltbdat; 1354 if (b->bltddat) b->blitzero=0; 1355 if (ptd) *ptd++=b->bltddat; 1356 } 1357 if (b->hblitsize>1) { 1358 if (pta) b->bltadat=*pta++; 1359 if (ptb) b->bltbdat=*ptb++; 1360 if (ptc) b->bltcdat=*ptc++; 1361 bltaold=b->bltadat & b->bltalwm; 1362 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1363 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1364 srcc=b->bltcdat; 1365 b->bltddat=(srcc & ~srca) | (srcb & srca); 1366 b->blitpreva=bltaold; 1367 b->blitprevb=b->bltbdat; 1368 if (b->bltddat) b->blitzero=0; 1369 if (ptd) *ptd++=b->bltddat; 1370 } 1371 if (pta) pta+=bltamodw; 1372 if (ptb) ptb+=bltbmodw; 1373 if (ptc) ptc+=bltcmodw; 1374 if (ptd) ptd+=bltdmodw; 1375 } 1376 } 1377 } 1378 void blitdofast_desc_ca(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1379 { 1380 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1381 int i,j; 1382 { 1383 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1384 if (b->hblitsize==1) bltamask&=b->bltalwm; 1385 for (j=0;j<b->vblitsize;j++) { 1386 if (pta) b->bltadat=*pta--; 1387 if (ptb) b->bltbdat=*ptb--; 1388 if (ptc) b->bltcdat=*ptc--; 1389 bltaold=b->bltadat & bltamask; 1390 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1391 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1392 srcc=b->bltcdat; 1393 b->bltddat=(srcc & ~srca) | (srcb & srca); 1394 b->blitpreva=bltaold; 1395 b->blitprevb=b->bltbdat; 1396 if (b->bltddat) b->blitzero=0; 1397 if (ptd) *ptd--=b->bltddat; 1398 for (i=2;i<b->hblitsize;i++) { 1399 if (pta) b->bltadat=*pta--; 1400 if (ptb) b->bltbdat=*ptb--; 1401 if (ptc) b->bltcdat=*ptc--; 1402 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1403 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1404 srcc=b->bltcdat; 1405 b->bltddat=(srcc & ~srca) | (srcb & srca); 1406 b->blitpreva=b->bltadat; 1407 b->blitprevb=b->bltbdat; 1408 if (b->bltddat) b->blitzero=0; 1409 if (ptd) *ptd--=b->bltddat; 1410 } 1411 if (b->hblitsize>1) { 1412 if (pta) b->bltadat=*pta--; 1413 if (ptb) b->bltbdat=*ptb--; 1414 if (ptc) b->bltcdat=*ptc--; 1415 bltaold=b->bltadat & b->bltalwm; 1416 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1417 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1418 srcc=b->bltcdat; 1419 b->bltddat=(srcc & ~srca) | (srcb & srca); 1420 b->blitpreva=bltaold; 1421 b->blitprevb=b->bltbdat; 1422 if (b->bltddat) b->blitzero=0; 1423 if (ptd) *ptd--=b->bltddat; 1424 } 1425 if (pta) pta-=bltamodw; 1426 if (ptb) ptb-=bltbmodw; 1427 if (ptc) ptc-=bltcmodw; 1428 if (ptd) ptd-=bltdmodw; 1429 } 1430 } 1431 } 1432 void blitdofast_cc(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1433 { 1434 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1435 int i,j; 1436 { 1437 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1438 for (j=0;j<b->vblitsize;j++) { 1439 for (i=0;i<b->hblitsize;i++) { 1440 if (ptb) b->bltbdat=*ptb++; 1441 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1442 b->bltddat=(srcb); 1443 b->blitprevb=b->bltbdat; 1444 if (b->bltddat) b->blitzero=0; 1445 if (ptd) *ptd++=b->bltddat; 1446 } 1447 if (ptb) ptb+=bltbmodw; 1448 if (ptd) ptd+=bltdmodw; 1449 } 1450 } 1451 } 1452 void blitdofast_desc_cc(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1453 { 1454 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1455 int i,j; 1456 { 1457 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1458 for (j=0;j<b->vblitsize;j++) { 1459 for (i=0;i<b->hblitsize;i++) { 1460 if (ptb) b->bltbdat=*ptb--; 1461 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1462 b->bltddat=(srcb); 1463 b->blitprevb=b->bltbdat; 1464 if (b->bltddat) b->blitzero=0; 1465 if (ptd) *ptd--=b->bltddat; 1466 } 1467 if (ptb) ptb-=bltbmodw; 1468 if (ptd) ptd-=bltdmodw; 1469 } 1470 } 1471 } 1472 void blitdofast_d8(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1473 { 1474 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1475 int i,j; 1476 { 1477 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1478 if (b->hblitsize==1) bltamask&=b->bltalwm; 1479 for (j=0;j<b->vblitsize;j++) { 1480 if (pta) b->bltadat=*pta++; 1481 if (ptb) b->bltbdat=*ptb++; 1482 if (ptc) b->bltcdat=*ptc++; 1483 bltaold=b->bltadat & bltamask; 1484 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1485 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1486 srcc=b->bltcdat; 1487 b->bltddat=(srcc & srcb) | (~srcc & srca); 1488 b->blitpreva=bltaold; 1489 b->blitprevb=b->bltbdat; 1490 if (b->bltddat) b->blitzero=0; 1491 if (ptd) *ptd++=b->bltddat; 1492 for (i=2;i<b->hblitsize;i++) { 1493 if (pta) b->bltadat=*pta++; 1494 if (ptb) b->bltbdat=*ptb++; 1495 if (ptc) b->bltcdat=*ptc++; 1496 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1497 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1498 srcc=b->bltcdat; 1499 b->bltddat=(srcc & srcb) | (~srcc & srca); 1500 b->blitpreva=b->bltadat; 1501 b->blitprevb=b->bltbdat; 1502 if (b->bltddat) b->blitzero=0; 1503 if (ptd) *ptd++=b->bltddat; 1504 } 1505 if (b->hblitsize>1) { 1506 if (pta) b->bltadat=*pta++; 1507 if (ptb) b->bltbdat=*ptb++; 1508 if (ptc) b->bltcdat=*ptc++; 1509 bltaold=b->bltadat & b->bltalwm; 1510 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1511 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1512 srcc=b->bltcdat; 1513 b->bltddat=(srcc & srcb) | (~srcc & srca); 1514 b->blitpreva=bltaold; 1515 b->blitprevb=b->bltbdat; 1516 if (b->bltddat) b->blitzero=0; 1517 if (ptd) *ptd++=b->bltddat; 1518 } 1519 if (pta) pta+=bltamodw; 1520 if (ptb) ptb+=bltbmodw; 1521 if (ptc) ptc+=bltcmodw; 1522 if (ptd) ptd+=bltdmodw; 1523 } 1524 } 1525 } 1526 void blitdofast_desc_d8(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1527 { 1528 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1529 int i,j; 1530 { 1531 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1532 if (b->hblitsize==1) bltamask&=b->bltalwm; 1533 for (j=0;j<b->vblitsize;j++) { 1534 if (pta) b->bltadat=*pta--; 1535 if (ptb) b->bltbdat=*ptb--; 1536 if (ptc) b->bltcdat=*ptc--; 1537 bltaold=b->bltadat & bltamask; 1538 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1539 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1540 srcc=b->bltcdat; 1541 b->bltddat=(srcc & srcb) | (~srcc & srca); 1542 b->blitpreva=bltaold; 1543 b->blitprevb=b->bltbdat; 1544 if (b->bltddat) b->blitzero=0; 1545 if (ptd) *ptd--=b->bltddat; 1546 for (i=2;i<b->hblitsize;i++) { 1547 if (pta) b->bltadat=*pta--; 1548 if (ptb) b->bltbdat=*ptb--; 1549 if (ptc) b->bltcdat=*ptc--; 1550 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1551 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1552 srcc=b->bltcdat; 1553 b->bltddat=(srcc & srcb) | (~srcc & srca); 1554 b->blitpreva=b->bltadat; 1555 b->blitprevb=b->bltbdat; 1556 if (b->bltddat) b->blitzero=0; 1557 if (ptd) *ptd--=b->bltddat; 1558 } 1559 if (b->hblitsize>1) { 1560 if (pta) b->bltadat=*pta--; 1561 if (ptb) b->bltbdat=*ptb--; 1562 if (ptc) b->bltcdat=*ptc--; 1563 bltaold=b->bltadat & b->bltalwm; 1564 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1565 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1566 srcc=b->bltcdat; 1567 b->bltddat=(srcc & srcb) | (~srcc & srca); 1568 b->blitpreva=bltaold; 1569 b->blitprevb=b->bltbdat; 1570 if (b->bltddat) b->blitzero=0; 1571 if (ptd) *ptd--=b->bltddat; 1572 } 1573 if (pta) pta-=bltamodw; 1574 if (ptb) ptb-=bltbmodw; 1575 if (ptc) ptc-=bltcmodw; 1576 if (ptd) ptd-=bltdmodw; 1577 } 1578 } 1579 } 1580 void blitdofast_e2(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1581 { 1582 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1583 int i,j; 1584 { 1585 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1586 if (b->hblitsize==1) bltamask&=b->bltalwm; 1587 for (j=0;j<b->vblitsize;j++) { 1588 if (pta) b->bltadat=*pta++; 1589 if (ptb) b->bltbdat=*ptb++; 1590 if (ptc) b->bltcdat=*ptc++; 1591 bltaold=b->bltadat & bltamask; 1592 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1593 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1594 srcc=b->bltcdat; 1595 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1596 b->blitpreva=bltaold; 1597 b->blitprevb=b->bltbdat; 1598 if (b->bltddat) b->blitzero=0; 1599 if (ptd) *ptd++=b->bltddat; 1600 for (i=2;i<b->hblitsize;i++) { 1601 if (pta) b->bltadat=*pta++; 1602 if (ptb) b->bltbdat=*ptb++; 1603 if (ptc) b->bltcdat=*ptc++; 1604 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1605 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1606 srcc=b->bltcdat; 1607 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1608 b->blitpreva=b->bltadat; 1609 b->blitprevb=b->bltbdat; 1610 if (b->bltddat) b->blitzero=0; 1611 if (ptd) *ptd++=b->bltddat; 1612 } 1613 if (b->hblitsize>1) { 1614 if (pta) b->bltadat=*pta++; 1615 if (ptb) b->bltbdat=*ptb++; 1616 if (ptc) b->bltcdat=*ptc++; 1617 bltaold=b->bltadat & b->bltalwm; 1618 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1619 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1620 srcc=b->bltcdat; 1621 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1622 b->blitpreva=bltaold; 1623 b->blitprevb=b->bltbdat; 1624 if (b->bltddat) b->blitzero=0; 1625 if (ptd) *ptd++=b->bltddat; 1626 } 1627 if (pta) pta+=bltamodw; 1628 if (ptb) ptb+=bltbmodw; 1629 if (ptc) ptc+=bltcmodw; 1630 if (ptd) ptd+=bltdmodw; 1631 } 1632 } 1633 } 1634 void blitdofast_desc_e2(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1635 { 1636 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1637 int i,j; 1638 { 1639 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1640 if (b->hblitsize==1) bltamask&=b->bltalwm; 1641 for (j=0;j<b->vblitsize;j++) { 1642 if (pta) b->bltadat=*pta--; 1643 if (ptb) b->bltbdat=*ptb--; 1644 if (ptc) b->bltcdat=*ptc--; 1645 bltaold=b->bltadat & bltamask; 1646 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1647 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1648 srcc=b->bltcdat; 1649 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1650 b->blitpreva=bltaold; 1651 b->blitprevb=b->bltbdat; 1652 if (b->bltddat) b->blitzero=0; 1653 if (ptd) *ptd--=b->bltddat; 1654 for (i=2;i<b->hblitsize;i++) { 1655 if (pta) b->bltadat=*pta--; 1656 if (ptb) b->bltbdat=*ptb--; 1657 if (ptc) b->bltcdat=*ptc--; 1658 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1659 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1660 srcc=b->bltcdat; 1661 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1662 b->blitpreva=b->bltadat; 1663 b->blitprevb=b->bltbdat; 1664 if (b->bltddat) b->blitzero=0; 1665 if (ptd) *ptd--=b->bltddat; 1666 } 1667 if (b->hblitsize>1) { 1668 if (pta) b->bltadat=*pta--; 1669 if (ptb) b->bltbdat=*ptb--; 1670 if (ptc) b->bltcdat=*ptc--; 1671 bltaold=b->bltadat & b->bltalwm; 1672 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1673 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1674 srcc=b->bltcdat; 1675 b->bltddat=(srcc & ~srcb) | (srcb & srca); 1676 b->blitpreva=bltaold; 1677 b->blitprevb=b->bltbdat; 1678 if (b->bltddat) b->blitzero=0; 1679 if (ptd) *ptd--=b->bltddat; 1680 } 1681 if (pta) pta-=bltamodw; 1682 if (ptb) ptb-=bltbmodw; 1683 if (ptc) ptc-=bltcmodw; 1684 if (ptd) ptd-=bltdmodw; 1685 } 1686 } 1687 } 1688 void blitdofast_ea(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1689 { 1690 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1691 int i,j; 1692 { 1693 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1694 if (b->hblitsize==1) bltamask&=b->bltalwm; 1695 for (j=0;j<b->vblitsize;j++) { 1696 if (pta) b->bltadat=*pta++; 1697 if (ptb) b->bltbdat=*ptb++; 1698 if (ptc) b->bltcdat=*ptc++; 1699 bltaold=b->bltadat & bltamask; 1700 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1701 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1702 srcc=b->bltcdat; 1703 b->bltddat=(srcc) | (srcb & srca); 1704 b->blitpreva=bltaold; 1705 b->blitprevb=b->bltbdat; 1706 if (b->bltddat) b->blitzero=0; 1707 if (ptd) *ptd++=b->bltddat; 1708 for (i=2;i<b->hblitsize;i++) { 1709 if (pta) b->bltadat=*pta++; 1710 if (ptb) b->bltbdat=*ptb++; 1711 if (ptc) b->bltcdat=*ptc++; 1712 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1713 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1714 srcc=b->bltcdat; 1715 b->bltddat=(srcc) | (srcb & srca); 1716 b->blitpreva=b->bltadat; 1717 b->blitprevb=b->bltbdat; 1718 if (b->bltddat) b->blitzero=0; 1719 if (ptd) *ptd++=b->bltddat; 1720 } 1721 if (b->hblitsize>1) { 1722 if (pta) b->bltadat=*pta++; 1723 if (ptb) b->bltbdat=*ptb++; 1724 if (ptc) b->bltcdat=*ptc++; 1725 bltaold=b->bltadat & b->bltalwm; 1726 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1727 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1728 srcc=b->bltcdat; 1729 b->bltddat=(srcc) | (srcb & srca); 1730 b->blitpreva=bltaold; 1731 b->blitprevb=b->bltbdat; 1732 if (b->bltddat) b->blitzero=0; 1733 if (ptd) *ptd++=b->bltddat; 1734 } 1735 if (pta) pta+=bltamodw; 1736 if (ptb) ptb+=bltbmodw; 1737 if (ptc) ptc+=bltcmodw; 1738 if (ptd) ptd+=bltdmodw; 1739 } 1740 } 1741 } 1742 void blitdofast_desc_ea(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1743 { 1744 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1745 int i,j; 1746 { 1747 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1748 if (b->hblitsize==1) bltamask&=b->bltalwm; 1749 for (j=0;j<b->vblitsize;j++) { 1750 if (pta) b->bltadat=*pta--; 1751 if (ptb) b->bltbdat=*ptb--; 1752 if (ptc) b->bltcdat=*ptc--; 1753 bltaold=b->bltadat & bltamask; 1754 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1755 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1756 srcc=b->bltcdat; 1757 b->bltddat=(srcc) | (srcb & srca); 1758 b->blitpreva=bltaold; 1759 b->blitprevb=b->bltbdat; 1760 if (b->bltddat) b->blitzero=0; 1761 if (ptd) *ptd--=b->bltddat; 1762 for (i=2;i<b->hblitsize;i++) { 1763 if (pta) b->bltadat=*pta--; 1764 if (ptb) b->bltbdat=*ptb--; 1765 if (ptc) b->bltcdat=*ptc--; 1766 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1767 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1768 srcc=b->bltcdat; 1769 b->bltddat=(srcc) | (srcb & srca); 1770 b->blitpreva=b->bltadat; 1771 b->blitprevb=b->bltbdat; 1772 if (b->bltddat) b->blitzero=0; 1773 if (ptd) *ptd--=b->bltddat; 1774 } 1775 if (b->hblitsize>1) { 1776 if (pta) b->bltadat=*pta--; 1777 if (ptb) b->bltbdat=*ptb--; 1778 if (ptc) b->bltcdat=*ptc--; 1779 bltaold=b->bltadat & b->bltalwm; 1780 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1781 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 1782 srcc=b->bltcdat; 1783 b->bltddat=(srcc) | (srcb & srca); 1784 b->blitpreva=bltaold; 1785 b->blitprevb=b->bltbdat; 1786 if (b->bltddat) b->blitzero=0; 1787 if (ptd) *ptd--=b->bltddat; 1788 } 1789 if (pta) pta-=bltamodw; 1790 if (ptb) ptb-=bltbmodw; 1791 if (ptc) ptc-=bltcmodw; 1792 if (ptd) ptd-=bltdmodw; 1793 } 1794 } 1795 } 1796 void blitdofast_f0(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1797 { 1798 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1799 int i,j; 1800 { 1801 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1802 if (b->hblitsize==1) bltamask&=b->bltalwm; 1803 for (j=0;j<b->vblitsize;j++) { 1804 if (pta) b->bltadat=*pta++; 1805 bltaold=b->bltadat & bltamask; 1806 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1807 b->bltddat=(srca); 1808 b->blitpreva=bltaold; 1809 if (b->bltddat) b->blitzero=0; 1810 if (ptd) *ptd++=b->bltddat; 1811 for (i=2;i<b->hblitsize;i++) { 1812 if (pta) b->bltadat=*pta++; 1813 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1814 b->bltddat=(srca); 1815 b->blitpreva=b->bltadat; 1816 if (b->bltddat) b->blitzero=0; 1817 if (ptd) *ptd++=b->bltddat; 1818 } 1819 if (b->hblitsize>1) { 1820 if (pta) b->bltadat=*pta++; 1821 bltaold=b->bltadat & b->bltalwm; 1822 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1823 b->bltddat=(srca); 1824 b->blitpreva=bltaold; 1825 if (b->bltddat) b->blitzero=0; 1826 if (ptd) *ptd++=b->bltddat; 1827 } 1828 if (pta) pta+=bltamodw; 1829 if (ptd) ptd+=bltdmodw; 1830 } 1831 } 1832 } 1833 void blitdofast_desc_f0(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1834 { 1835 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1836 int i,j; 1837 { 1838 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1839 if (b->hblitsize==1) bltamask&=b->bltalwm; 1840 for (j=0;j<b->vblitsize;j++) { 1841 if (pta) b->bltadat=*pta--; 1842 bltaold=b->bltadat & bltamask; 1843 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1844 b->bltddat=(srca); 1845 b->blitpreva=bltaold; 1846 if (b->bltddat) b->blitzero=0; 1847 if (ptd) *ptd--=b->bltddat; 1848 for (i=2;i<b->hblitsize;i++) { 1849 if (pta) b->bltadat=*pta--; 1850 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1851 b->bltddat=(srca); 1852 b->blitpreva=b->bltadat; 1853 if (b->bltddat) b->blitzero=0; 1854 if (ptd) *ptd--=b->bltddat; 1855 } 1856 if (b->hblitsize>1) { 1857 if (pta) b->bltadat=*pta--; 1858 bltaold=b->bltadat & b->bltalwm; 1859 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1860 b->bltddat=(srca); 1861 b->blitpreva=bltaold; 1862 if (b->bltddat) b->blitzero=0; 1863 if (ptd) *ptd--=b->bltddat; 1864 } 1865 if (pta) pta-=bltamodw; 1866 if (ptd) ptd-=bltdmodw; 1867 } 1868 } 1869 } 1870 void blitdofast_fa(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1871 { 1872 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1873 int i,j; 1874 { 1875 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1876 if (b->hblitsize==1) bltamask&=b->bltalwm; 1877 for (j=0;j<b->vblitsize;j++) { 1878 if (pta) b->bltadat=*pta++; 1879 if (ptc) b->bltcdat=*ptc++; 1880 bltaold=b->bltadat & bltamask; 1881 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1882 srcc=b->bltcdat; 1883 b->bltddat=(srcc) | (srca); 1884 b->blitpreva=bltaold; 1885 if (b->bltddat) b->blitzero=0; 1886 if (ptd) *ptd++=b->bltddat; 1887 for (i=2;i<b->hblitsize;i++) { 1888 if (pta) b->bltadat=*pta++; 1889 if (ptc) b->bltcdat=*ptc++; 1890 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1891 srcc=b->bltcdat; 1892 b->bltddat=(srcc) | (srca); 1893 b->blitpreva=b->bltadat; 1894 if (b->bltddat) b->blitzero=0; 1895 if (ptd) *ptd++=b->bltddat; 1896 } 1897 if (b->hblitsize>1) { 1898 if (pta) b->bltadat=*pta++; 1899 if (ptc) b->bltcdat=*ptc++; 1900 bltaold=b->bltadat & b->bltalwm; 1901 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1902 srcc=b->bltcdat; 1903 b->bltddat=(srcc) | (srca); 1904 b->blitpreva=bltaold; 1905 if (b->bltddat) b->blitzero=0; 1906 if (ptd) *ptd++=b->bltddat; 1907 } 1908 if (pta) pta+=bltamodw; 1909 if (ptc) ptc+=bltcmodw; 1910 if (ptd) ptd+=bltdmodw; 1911 } 1912 } 1913 } 1914 void blitdofast_desc_fa(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1915 { 1916 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1917 int i,j; 1918 { 1919 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1920 if (b->hblitsize==1) bltamask&=b->bltalwm; 1921 for (j=0;j<b->vblitsize;j++) { 1922 if (pta) b->bltadat=*pta--; 1923 if (ptc) b->bltcdat=*ptc--; 1924 bltaold=b->bltadat & bltamask; 1925 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1926 srcc=b->bltcdat; 1927 b->bltddat=(srcc) | (srca); 1928 b->blitpreva=bltaold; 1929 if (b->bltddat) b->blitzero=0; 1930 if (ptd) *ptd--=b->bltddat; 1931 for (i=2;i<b->hblitsize;i++) { 1932 if (pta) b->bltadat=*pta--; 1933 if (ptc) b->bltcdat=*ptc--; 1934 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 1935 srcc=b->bltcdat; 1936 b->bltddat=(srcc) | (srca); 1937 b->blitpreva=b->bltadat; 1938 if (b->bltddat) b->blitzero=0; 1939 if (ptd) *ptd--=b->bltddat; 1940 } 1941 if (b->hblitsize>1) { 1942 if (pta) b->bltadat=*pta--; 1943 if (ptc) b->bltcdat=*ptc--; 1944 bltaold=b->bltadat & b->bltalwm; 1945 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 1946 srcc=b->bltcdat; 1947 b->bltddat=(srcc) | (srca); 1948 b->blitpreva=bltaold; 1949 if (b->bltddat) b->blitzero=0; 1950 if (ptd) *ptd--=b->bltddat; 1951 } 1952 if (pta) pta-=bltamodw; 1953 if (ptc) ptc-=bltcmodw; 1954 if (ptd) ptd-=bltdmodw; 1955 } 1956 } 1957 } 1958 void blitdofast_fc(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 1959 { 1960 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 1961 int i,j; 1962 { 1963 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 1964 if (b->hblitsize==1) bltamask&=b->bltalwm; 1965 for (j=0;j<b->vblitsize;j++) { 1966 if (pta) b->bltadat=*pta++; 1967 if (ptb) b->bltbdat=*ptb++; 1968 bltaold=b->bltadat & bltamask; 1969 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1970 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1971 b->bltddat=(srcb) | (srca); 1972 b->blitpreva=bltaold; 1973 b->blitprevb=b->bltbdat; 1974 if (b->bltddat) b->blitzero=0; 1975 if (ptd) *ptd++=b->bltddat; 1976 for (i=2;i<b->hblitsize;i++) { 1977 if (pta) b->bltadat=*pta++; 1978 if (ptb) b->bltbdat=*ptb++; 1979 srca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift; 1980 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1981 b->bltddat=(srcb) | (srca); 1982 b->blitpreva=b->bltadat; 1983 b->blitprevb=b->bltbdat; 1984 if (b->bltddat) b->blitzero=0; 1985 if (ptd) *ptd++=b->bltddat; 1986 } 1987 if (b->hblitsize>1) { 1988 if (pta) b->bltadat=*pta++; 1989 if (ptb) b->bltbdat=*ptb++; 1990 bltaold=b->bltadat & b->bltalwm; 1991 srca=(((ULONG)b->blitpreva<<16)|bltaold)>>b->blitashift; 1992 srcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift; 1993 b->bltddat=(srcb) | (srca); 1994 b->blitpreva=bltaold; 1995 b->blitprevb=b->bltbdat; 1996 if (b->bltddat) b->blitzero=0; 1997 if (ptd) *ptd++=b->bltddat; 1998 } 1999 if (pta) pta+=bltamodw; 2000 if (ptb) ptb+=bltbmodw; 2001 if (ptd) ptd+=bltdmodw; 2002 } 2003 } 2004 } 2005 void blitdofast_desc_fc(UWORD *pta, UWORD *ptb, UWORD *ptc, UWORD *ptd, struct bltinfo *b) 2006 { 2007 WORD bltamodw=b->bltamod/2,bltbmodw=b->bltbmod/2,bltcmodw=b->bltcmod/2,bltdmodw=b->bltdmod/2; 2008 int i,j; 2009 { 2010 UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm; 2011 if (b->hblitsize==1) bltamask&=b->bltalwm; 2012 for (j=0;j<b->vblitsize;j++) { 2013 if (pta) b->bltadat=*pta--; 2014 if (ptb) b->bltbdat=*ptb--; 2015 bltaold=b->bltadat & bltamask; 2016 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 2017 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 2018 b->bltddat=(srcb) | (srca); 2019 b->blitpreva=bltaold; 2020 b->blitprevb=b->bltbdat; 2021 if (b->bltddat) b->blitzero=0; 2022 if (ptd) *ptd--=b->bltddat; 2023 for (i=2;i<b->hblitsize;i++) { 2024 if (pta) b->bltadat=*pta--; 2025 if (ptb) b->bltbdat=*ptb--; 2026 srca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift); 2027 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 2028 b->bltddat=(srcb) | (srca); 2029 b->blitpreva=b->bltadat; 2030 b->blitprevb=b->bltbdat; 2031 if (b->bltddat) b->blitzero=0; 2032 if (ptd) *ptd--=b->bltddat; 2033 } 2034 if (b->hblitsize>1) { 2035 if (pta) b->bltadat=*pta--; 2036 if (ptb) b->bltbdat=*ptb--; 2037 bltaold=b->bltadat & b->bltalwm; 2038 srca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift); 2039 srcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift); 2040 b->bltddat=(srcb) | (srca); 2041 b->blitpreva=bltaold; 2042 b->blitprevb=b->bltbdat; 2043 if (b->bltddat) b->blitzero=0; 2044 if (ptd) *ptd--=b->bltddat; 2045 } 2046 if (pta) pta-=bltamodw; 2047 if (ptb) ptb-=bltbmodw; 2048 if (ptd) ptd-=bltdmodw; 2049 } 2050 } 2051 }