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];