commit 9471c82
Devine Lu Linvega
·
2024-11-26 02:04:16 +0000 UTC
parent 47b472b
(screen) Do not recalculate row length
1 files changed,
+9,
-8
+9,
-8
1@@ -181,10 +181,11 @@ screen_deo(Uxn *u, Uint8 addr)
2 case 0x2e: {
3 int ctrl = u->dev[0x2e];
4 int color = ctrl & 0x3;
5+ int len = MAR2(uxn_screen.width);
6 Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
7 /* fill mode */
8 if(ctrl & 0x80) {
9- int x1, y1, x2, y2, ax, bx, ay, by, w, hor, ver;
10+ int x1, y1, x2, y2, ax, bx, ay, by, hor, ver;
11 if(ctrl & 0x10)
12 x1 = MAR(0), x2 = MAR(rX);
13 else
14@@ -193,17 +194,16 @@ screen_deo(Uxn *u, Uint8 addr)
15 y1 = MAR(0), y2 = MAR(rY);
16 else
17 y1 = MAR(rY), y2 = MAR(uxn_screen.height);
18- w = MAR2(uxn_screen.width), hor = x2 - x1, ver = y2 - y1;
19- for(ay = y1 * w, by = ay + ver * w; ay < by; ay += w)
20+ hor = x2 - x1, ver = y2 - y1;
21+ for(ay = y1 * len, by = ay + ver * len; ay < by; ay += len)
22 for(ax = ay + x1, bx = ax + hor; ax < bx; ax++)
23 layer[ax] = color;
24 screen_change(x1, y1, x2, y2);
25 }
26 /* pixel mode */
27 else {
28- Uint16 w = MAR2(uxn_screen.width);
29- if(rX >= 0 && rY >= 0 && rX < w && rY < uxn_screen.height)
30- layer[MAR(rX) + MAR(rY) * w] = color;
31+ if(rX >= 0 && rY >= 0 && rX < len && rY < uxn_screen.height)
32+ layer[MAR(rX) + MAR(rY) * len] = color;
33 screen_change(rX, rY, rX + 1, rY + 1);
34 if(rMX) rX++;
35 if(rMY) rY++;
36@@ -218,13 +218,14 @@ screen_deo(Uxn *u, Uint8 addr)
37 int fx = ctrl & 0x10 ? -1 : 1, fy = ctrl & 0x20 ? -1 : 1;
38 int x1, x2, y1, y2, ax, ay, qx, qy, x = rX, y = rY;
39 int dxy = rDX * fy, dyx = rDY * fx, addr_incr = rMA << (1 + twobpp);
40+ int len = MAR2(uxn_screen.width);
41 Uint8 *layer = ctrl & 0x40 ? uxn_screen.fg : uxn_screen.bg;
42 if(twobpp)
43 for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
44 Uint16 xx = MAR(x), yy = MAR(y);
45 if(xx < MAR(uxn_screen.width) && MAR(yy) < MAR2(uxn_screen.height)) {
46 Uint8 *sprite = &u->ram[rA];
47- int opaque = blend % 5, len = MAR2(uxn_screen.width), by = (yy + 8) * len;
48+ int opaque = blend % 5, by = (yy + 8) * len;
49 for(ay = yy * len, qy = fy < 0 ? 7 : 0; ay < by; ay += len, qy += fy) {
50 int ch1 = sprite[qy], ch2 = sprite[qy + 8] << 1, bx = xx + 8 + ay;
51 for(ax = xx + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {
52@@ -239,7 +240,7 @@ screen_deo(Uxn *u, Uint8 addr)
53 Uint16 xx = MAR(x), yy = MAR(y);
54 if(xx < MAR(uxn_screen.width) && MAR(yy) < MAR2(uxn_screen.height)) {
55 Uint8 *sprite = &u->ram[rA];
56- int opaque = blend % 5, len = MAR2(uxn_screen.width), by = (yy + 8) * len;
57+ int opaque = blend % 5, by = (yy + 8) * len;
58 for(ay = yy * len, qy = fy < 0 ? 7 : 0; ay < by; ay += len, qy += fy) {
59 int ch1 = sprite[qy], bx = xx + 8 + ay;
60 for(ax = xx + ay, qx = fx > 0 ? 7 : 0; ax < bx; ax++, qx -= fx) {