|
|
1.1 root 1: #include <stdio.h>
2: #include <signal.h>
3: #include <fb.h>
4: #include "pico.h"
5:
6: extern short CURSCRATCH, CUROLD;
7: extern struct SRC src[MANY];
8: extern long program();
9: extern char usednew, usedold, frameb, metheus, faster;
10: extern int DEF_LL, DEF_NL;
11: extern void onquit();
12:
13: #define RGBA 0xe
14: #define RGB 0xd
15: #define A 0x1
16: #define R 0x2
17: #define G 0x4
18: #define B 0x8
19:
20: struct {
21: long u;
22: long p;
23: long chld_usrt;
24: long chld_syst;
25: } tim0, tim1;
26:
27: int sx, sy, ex, ey, delta, offset;
28:
29: munge(chann)
30: { int i;
31: float t0, t1;
32:
33: sx = Old->sx;
34: sy = Old->sy;
35: ex = Old->ex; if ((ex-sx)&1) ex++;
36: ey = Old->ey;
37: offset = sy*DEF_LL + sx;
38: delta = DEF_LL - ex + sx;
39:
40: checkit();
41: times(&tim0);
42:
43: switch (chann) {
44: case NLOOP: noloop(); break;
45: case SLOOP: smalloop(); break;
46: case BLOOP: if (faster && (metheus || Old->nchan == 1) && usednew)
47: { 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: hack()
68: { register x, y, i = offset; /* r11, r10, r9 */
69: register r;
70: extern fbreg *F;
71: register fbreg *f = F;
72:
73: f->red.csr=f->grn.csr=f->blu.csr=F_IXW;
74: for (y = sy; y < ey; y++, i += delta)
75: { f->red.x=f->grn.x=f->blu.x=sx;
76: f->red.y=f->grn.y=f->blu.y=y;
77: for (x = sx; x < ex; x++, i++)
78: {
79: asm(" jsb *_program ");
80: asm(" CA: brb CA+9 ");
81: r=program();
82: f->red.z=f->grn.z=f->blu.z=r&255;
83: }
84: }
85: }
86:
87: hick()
88: { register x, y, i = offset; /* r11, r10, r9 */
89: unsigned char *pr, *pg, *pb;
90: int chunk;
91: extern int om_fd;
92:
93: pr = Scratch->pixred+i;
94: pg = Scratch->pixgrn+i;
95: pb = Scratch->pixblu+i;
96: chunk = ex-sx+delta;
97: signal(SIGINT, SIG_IGN); /* don't mess up the device */
98: if (Old->nchan==1)
99: { merect(sx, sy, ex, ey);
100: setbank(RGBA);
101: for (y = sy; y < ey; y++, i += delta, pr += chunk)
102: { for (x = sx; x < ex; x++, i++)
103: {
104: asm(" jsb *_program ");
105: asm(" CD: brb CD+9 ");
106: program();
107: }
108: write(om_fd, pr, ex-sx);
109: }
110: }
111: else
112: for (y = sy; y < ey; y++, i += delta)
113: { for (x = sx; x < ex; x++, i++)
114: {
115: asm(" jsb *_program ");
116: asm(" CE: brb CE+9 ");
117: program();
118: }
119: merect(sx, y, ex, y+1);
120: setbank(R); write(om_fd, pr, ex-sx); pr += chunk;
121: setbank(G); write(om_fd, pg, ex-sx); pg += chunk;
122: setbank(B); write(om_fd, pb, ex-sx); pb += chunk;
123: }
124: signal(SIGINT, onquit);
125: }
126:
127: bigloop()
128: { register x, y, i = offset; /* r11, r10, r9 */
129:
130: for (y = sy; y < ey; y++, i += delta)
131: for (x = sx; x < ex; x++, i++)
132: {
133: asm(" jsb *_program ");
134: asm(" C0: brb C0+9 ");
135: program();
136: }
137: }
138:
139: smalloop()
140: { register x, y, i; /* r11, r10, r9 */
141:
142: for (i = 0; i < 256; i++)
143: {
144: asm(" jsb *_program ");
145: asm(" C1: brb C1+9 ");
146: program();
147: }
148: }
149:
150: noloop()
151: { register x, y, i; /* r11, r10, r9 */
152:
153: asm(" jsb *_program ");
154: asm(" C2: brb C2+9 ");
155: program();
156: }
157:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.