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) {