commit 29e5753

Devie Lu Linvega  ·  2025-12-24 19:27:43 +0000 UTC
parent 3371b95
(screen) Optimizations
1 files changed,  +9, -9
+9, -9
 1@@ -533,7 +533,7 @@ screen_draw_pixel(void)
 2 {
 3 	const int ctrl = dev[0x2e];
 4 	const int len = MAR2(screen_width);
 5-	const int above = ctrl & 0x40;
 6+	const int above = ctrl & 0x40, layer_mask = above ? 0x3 : 0xc;
 7 	const int color = above ? (ctrl & 0x3) << 2 : ctrl & 0x3;
 8 	/* fill mode */
 9 	if(ctrl & 0x80) {
10@@ -551,16 +551,16 @@ screen_draw_pixel(void)
11 		hor = MAR(x2) - x1, ver = MAR(y2) - y1;
12 		for(ay = y1 * len, by = ay + ver * len; ay < by; ay += len)
13 			for(ax = ay + x1, bx = ax + hor; ax < bx; ax++) {
14-				const int src = screen_layers[ax];
15-				screen_layers[ax] = above ? (src & 0x3) | color : (src & 0xc) | color;
16+				const int src = screen_layers[ax] & layer_mask;
17+				screen_layers[ax] = src | color;
18 			}
19 	}
20 	/* pixel mode */
21 	else {
22 		if(rX >= 0 && rY >= 0 && rX < len && rY < screen_height) {
23 			const int ax = MAR(rX) + MAR(rY) * len;
24-			const int src = screen_layers[ax];
25-			screen_layers[ax] = above ? (src & 0x3) | color : (src & 0xc) | color;
26+			const int src = screen_layers[ax] & layer_mask;
27+			screen_layers[ax] = src | color;
28 		}
29 		if(!screen_reqdraw) screen_change(rX, rY, rX + 1, rY + 1);
30 		if(rMX) rX++;
31@@ -585,9 +585,9 @@ screen_draw_sprite(void)
32 	if(ctrl & 0x80) {
33 		const int addr_incr = rMA << 2;
34 		for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
35-			const Uint16 xmar = MAR(x), ymar = MAR(y);
36-			const Uint16 xmar2 = MAR2(x), ymar2 = MAR2(y);
37+			const Uint16 xmar = MAR(x), ymar2 = MAR2(y);
38 			if(xmar < wmar && ymar2 < hmar2) {
39+				const Uint16 xmar2 = MAR2(x), ymar = MAR(y);
40 				const Uint8 *sprite = &ram[rA];
41 				for(ay = ymar * wmar2, by = ymar2 * wmar2, qy = qfy; ay < by; ay += wmar2, qy += fy) {
42 					const int ch1 = sprite[qy];
43@@ -605,9 +605,9 @@ screen_draw_sprite(void)
44 	} else {
45 		const int addr_incr = rMA << 1;
46 		for(i = 0; i <= rML; i++, x += dyx, y += dxy, rA += addr_incr) {
47-			const Uint16 xmar = MAR(x), ymar = MAR(y);
48-			const Uint16 xmar2 = MAR2(x), ymar2 = MAR2(y);
49+			const Uint16 xmar = MAR(x), ymar2 = MAR2(y);
50 			if(xmar < wmar && ymar2 < hmar2) {
51+				const Uint16 xmar2 = MAR2(x), ymar = MAR(y);
52 				const Uint8 *sprite = &ram[rA];
53 				for(ay = ymar * wmar2, by = ymar2 * wmar2, qy = qfy; ay < by; ay += wmar2, qy += fy) {
54 					const int ch1 = sprite[qy];