From 4678620dae40528c0579265cfbf1fe57867436e8 Mon Sep 17 00:00:00 2001 From: "raimon@prometeo" Date: Tue, 15 Sep 2026 22:06:48 +0200 Subject: [PATCH] - [FIX] [tia] els bits del playfield no eren correctes - [DONE] [tia] PF0, PF1, PF2 - [NEW] [tia] RESP0, RESP1, RESM0, RESM1, RESBL --- tia.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tia.cpp b/tia.cpp index 541607a..8871479 100644 --- a/tia.cpp +++ b/tia.cpp @@ -48,26 +48,39 @@ namespace tia bool joy1_button_pressed = false; uint8_t missile0_size = 1; + uint8_t missile0_pos = 0; + uint8_t player0_size = 1; uint8_t player0_num_copies = 1; uint8_t player0_copies_distance = 0; uint32_t player0_color = 0x00000000; bool player0_reflect = false; + uint8_t player0_pos = 0; uint8_t missile1_size = 1; + uint8_t missile1_pos = 0; + uint8_t player1_size = 1; uint8_t player1_num_copies = 1; uint8_t player1_copies_distance = 0; uint32_t player1_color = 0x00000000; bool player1_reflect = false; + uint8_t player1_pos = 0; uint32_t playfield_color = 0x00000000; bool playfield_reflected = false; bool playfield_score = false; bool playfield_priority = false; uint32_t playfield_bits = 0x00000000; + uint8_t playfield_shifts[2][40] = { + // Repeat + {16,17,18,19, 15,14,13,12,11,10,9,8, 0,1,2,3,4,5,6,7, 16,17,18,19, 15,14,13,12,11,10,9,8, 0,1,2,3,4,5,6,7}, + // Reflect + {16,17,18,19, 15,14,13,12,11,10,9,8, 0,1,2,3,4,5,6,7, 7,6,5,4,3,2,1,0, 8,9,10,11,12,13,14,15, 19,18,17,16} + }; uint8_t ball_size = 1; + uint8_t ball_pos = 0; uint32_t background_color = 0x00000000; @@ -210,11 +223,24 @@ namespace tia player1_reflect = value & 0x08; break; case 0x0D: // PF0 - playfield_bits = (playfield_bits & 0x0000ffff) | (uint32_t(value)<<16); break; + playfield_bits = (playfield_bits & 0x0000ffff) | (uint32_t(value>>4)<<16); break; case 0x0E: // PF1 playfield_bits = (playfield_bits & 0x000f00ff) | (uint32_t(value)<<8); break; case 0x0F: // PF2 playfield_bits = (playfield_bits & 0x000fff00) | (uint32_t(value)); break; + + case 0x10: // RESP0 + player0_pos = color_clock < 68 ? 0 : color_clock; break; + case 0x11: // RESP1 + player1_pos = color_clock < 68 ? 0 : color_clock; break; + case 0x12: // RESM0 + missile0_pos = color_clock < 68 ? 0 : color_clock; break; + case 0x13: // RESM1 + missile1_pos = color_clock < 68 ? 0 : color_clock; break; + case 0x14: // RESBL + ball_pos = color_clock < 68 ? 0 : color_clock; break; + + } }