Annotation of researchv10no/cmd/pico/framebuffers/pmunge0.c, revision 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.