|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <fb.h> ! 3: #include "pico.h" ! 4: ! 5: #define lowbyte(A) (A)&0377 ! 6: #define higbyte(A) ((A) >> 8) & 07 ! 7: ! 8: extern short CURSCRATCH, CUROLD; ! 9: extern struct SRC src[MANY]; ! 10: extern long program(); ! 11: extern char usednew, usedold, ramtek, frameb, metheus, faster; ! 12: extern int DEF_LL, DEF_NL; ! 13: ! 14: struct { ! 15: long u; ! 16: long p; ! 17: long chld_usrt; ! 18: long chld_syst; ! 19: } tim0, tim1; ! 20: ! 21: int sx, sy, ex, ey, delta, offset; ! 22: int lastx, lasty, lastc; ! 23: ! 24: munge(chann) ! 25: { int i; ! 26: float t0, t1; ! 27: ! 28: sx = Old->sx; ! 29: sy = Old->sy; ! 30: ex = Old->ex; ! 31: ey = Old->ey; ! 32: offset = sy*DEF_LL + sx; ! 33: delta = DEF_LL - ex + sx; ! 34: ! 35: checkit(); ! 36: /* if (usednew) { setscratch(Old, Scratch); } */ ! 37: times(&tim0); ! 38: ! 39: switch (chann) { ! 40: case NLOOP: noloop(); break; ! 41: case SLOOP: smalloop(); break; ! 42: case XLOOP: oneloop(); break; ! 43: case BLOOP: if (faster && (metheus || Old->nchan == 1) && usednew) ! 44: { if (ramtek) ! 45: { hock(); ! 46: break; ! 47: } else if (frameb) ! 48: { hack(); ! 49: break; ! 50: } else if (metheus) ! 51: { hick(); ! 52: break; ! 53: } ! 54: } ! 55: bigloop(); ! 56: break; ! 57: } ! 58: times(&tim1); ! 59: t0 = (float) (tim1.u - tim0.u); ! 60: t1 = (float) (tim1.p - tim0.p); ! 61: ! 62: fprintf(stderr, "time: %4.2fu + %4.2fs = %4.2f\n", ! 63: t0/60.0, t1/60.0, (t1+t0)/60.0); ! 64: if (usednew) { setscratch(Scratch, Old); RESIDENT; } ! 65: } ! 66: ! 67: hock() ! 68: { register x, y, i = offset; /* r11, r10, r9 */ ! 69: register short *w; ! 70: short W[1024+16]; /* enough room for largest line */ ! 71: short dW = 2*(7+ex-sx); ! 72: extern int Rfd; ! 73: ! 74: W[0] = 05003; W[1] = 000100; W[2] = sx; ! 75: W[4] = ex-1; W[6] = 2*(ex-sx); ! 76: ! 77: for (y = sy; y < ey; y++, i += delta) ! 78: { W[3] = y; W[5] = y+1; w = &W[7]; ! 79: for (x = sx; x < ex; x++, i++) ! 80: { ! 81: asm(" jsb *_program "); ! 82: asm(" CB: brb CB+9 "); ! 83: *w++ = program(); ! 84: } ! 85: write(Rfd, W, dW); ! 86: } ! 87: } ! 88: ! 89: hack() ! 90: { register x, y, i = offset; /* r11, r10, r9 */ ! 91: register r; ! 92: ! 93: extern fbreg *F; /* place holder, only 68 bytes */ ! 94: register fbreg *f = F; /* initial value */ ! 95: ! 96: f->red.csr=f->grn.csr=f->blu.csr=F_IXW; ! 97: for (y = sy; y < ey; y++, i += delta) ! 98: { f->red.x=f->grn.x=f->blu.x=sx; ! 99: f->red.y=f->grn.y=f->blu.y=y; ! 100: for (x = sx; x < ex; x++, i++) ! 101: { ! 102: asm(" jsb *_program "); ! 103: asm(" CA: brb CA+9 "); ! 104: r=program(); ! 105: f->red.z=f->grn.z=f->blu.z=r&255; ! 106: } ! 107: } ! 108: } ! 109: ! 110: hick() ! 111: { register x, y, i = offset; /* r11, r10, r9 */ ! 112: register unsigned char *w; ! 113: unsigned char mcode[16]; ! 114: unsigned char W[1024]; /* avoid allocation */ ! 115: unsigned char *pr, *pg, *pb; ! 116: extern int om_fd; ! 117: ! 118: pr = Scratch->pixred+i; ! 119: pg = Scratch->pixgrn+i; ! 120: pb = Scratch->pixblu+i; ! 121: ! 122: mcode[0] = 0x4F; ! 123: mcode[1] = 0377; /* WRMASK */ ! 124: mcode[2] = 0x52; /* set P1 */ ! 125: mcode[7] = 0x53; /* set P2 */ ! 126: mcode[12] = 0; ! 127: mcode[13] = 'o'; ! 128: mcode[3] = lowbyte(sx); ! 129: mcode[4] = higbyte(sx); ! 130: mcode[8] = lowbyte(ex); ! 131: mcode[9] = higbyte(ex); ! 132: if (Old->nchan==1) ! 133: for (y = sy; y < ey; y++, i += delta) ! 134: { mcode[5] = mcode[10] = lowbyte(y); ! 135: mcode[6] = mcode[11] = higbyte(y); ! 136: for (x = sx, w = W; x < ex; x++, i++) ! 137: { ! 138: asm(" jsb *_program "); ! 139: asm(" CD: brb CD+9 "); ! 140: *w++ = program(); ! 141: } ! 142: write(om_fd, mcode, 14); ! 143: write(om_fd, W, ex-sx); ! 144: } ! 145: else ! 146: for (y = sy; y < ey; y++, i += delta) ! 147: { mcode[5] = mcode[10] = lowbyte(y); ! 148: mcode[6] = mcode[11] = higbyte(y); ! 149: for (x = sx; x < ex; x++, i++) ! 150: { ! 151: asm(" jsb *_program "); ! 152: asm(" CE: brb CE+9 "); ! 153: program(); ! 154: } ! 155: for (x = sx, w = W; x < ex; x++) ! 156: *w++ = ((*pr++ & 224))| ! 157: ((*pg++ & 192)>>3)| ! 158: ((*pb++ & 224)>>5); ! 159: write(om_fd, mcode, 14); ! 160: write(om_fd, W, ex-sx); ! 161: pr += delta; pg += delta; pb += delta; ! 162: } ! 163: } ! 164: ! 165: bigloop() ! 166: { register x, y, i = offset; /* r11, r10, r9 */ ! 167: ! 168: for (y = sy; y < ey; y++, i += delta) ! 169: for (x = sx; x < ex; x++, i++) ! 170: { ! 171: asm(" jsb *_program "); ! 172: asm(" C0: brb C0+9 "); ! 173: program(); ! 174: } ! 175: } ! 176: ! 177: smalloop() ! 178: { register x, y, i; /* r11, r10, r9 */ ! 179: ! 180: for (i = 0; i < 256; i++) ! 181: { ! 182: asm(" jsb *_program "); ! 183: asm(" C1: brb C1+9 "); ! 184: program(); ! 185: } ! 186: } ! 187: ! 188: oneloop() ! 189: { register x, y, i; /* r11, r10, r9 */ ! 190: ! 191: for (x = 0; x < DEF_LL; x++) ! 192: { ! 193: asm(" jsb *_program "); ! 194: asm(" C2: brb C2+9 "); ! 195: program(); ! 196: } ! 197: } ! 198: ! 199: noloop() ! 200: { register x, y, i; /* r11, r10, r9 */ ! 201: ! 202: asm(" jsb *_program "); ! 203: asm(" C3: brb C3+9 "); ! 204: program(); ! 205: } ! 206:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.