- [FIX] [tia] els bits del playfield no eren correctes

- [DONE] [tia] PF0, PF1, PF2
- [NEW] [tia] RESP0, RESP1, RESM0, RESM1, RESBL
This commit is contained in:
raimon@prometeo
2026-09-15 22:06:48 +02:00
parent 614c729459
commit 4678620dae
+27 -1
View File
@@ -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;
}
}