Annotation of researchv10no/cmd/pico/framebuffers/pmunge0.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.