- [NEW] [tia] HMP0, HMP1, HMM0, HMM1, HMBL

- [FIX] [tia] ficar posicions en pixel_clocks en compte de color_clocks.
- [NEW] [tia] VDELP0, VDELP1, VDELBL, RESMP0, RESMP1, HMOVE
This commit is contained in:
Raimon @ quifisraimon committed 2026-09-16 13:25:33 +02:00
1 parent 61d8b0a808
commit 1e4a175639
1 file changed
+57 -5
+57 -5
View File
@@ -55,6 +55,8 @@ namespace tia
bool player0_reflect = false;
uint8_t player0_pos = 0;
uint8_t player0_bits = 0;
int8_t player0_hmotion = 0;
bool player0_vert_delay = false;
uint8_t player1_size = 1;
uint8_t player1_num_copies = 1;
@@ -63,14 +65,20 @@ namespace tia
bool player1_reflect = false;
uint8_t player1_pos = 0;
uint8_t player1_bits = 0;
int8_t player1_hmotion = 0;
bool player1_vert_delay = false;
bool missile0_enabled = false;
uint8_t missile0_size = 1;
uint8_t missile0_pos = 0;
int8_t missile0_hmotion = 0;
bool missile0_reset = false;
bool missile1_enabled = false;
uint8_t missile1_size = 1;
uint8_t missile1_pos = 0;
int8_t missile1_hmotion = 0;
bool missile1_reset = false;
uint32_t playfield_color = 0x00000000;
bool playfield_reflected = false;
@@ -87,11 +95,15 @@ namespace tia
bool ball_enabled = false;
uint8_t ball_size = 1;
uint8_t ball_pos = 0;
int8_t ball_hmotion = 0;
bool ball_vert_delay = false;
uint32_t background_color = 0x00000000;
uint32_t current_frame_cycles = 0;
bool hmove = false;
bool vsync_set = false;
bool vblank_set = false;
bool vblank_latch = false;
@@ -113,12 +125,21 @@ namespace tia
color_clock = (color_clock + 1) % 228;
if (color_clock == 0) {
rdy_low = false;
hmove = false;
current_scanline++;
}
if (missile0_reset) missile0_pos = player0_pos + (4*player0_size);
if (missile1_reset) missile1_pos = player1_pos + (4*player1_size);
audio::tick();
// [TODO] Pintar pixels
if ( (!vsync_set) && (!vblank_set) && (color_clock >= 68) && (current_scanline >= 40) && (current_scanline < 232) && (!hmove || color_clock >= 92) ) {
const uint8_t pixel_clock = color_clock - 68;
}
}
@@ -238,15 +259,15 @@ namespace tia
playfield_bits = (playfield_bits & 0x000fff00) | (uint32_t(value)); break;
case 0x10: // RESP0
player0_pos = color_clock < 68 ? 0 : color_clock; break;
player0_pos = color_clock < 68 ? 0 : color_clock-68; break;
case 0x11: // RESP1
player1_pos = color_clock < 68 ? 0 : color_clock; break;
player1_pos = color_clock < 68 ? 0 : color_clock-68; break;
case 0x12: // RESM0
missile0_pos = color_clock < 68 ? 0 : color_clock; break;
missile0_pos = color_clock < 68 ? 0 : color_clock-68; break;
case 0x13: // RESM1
missile1_pos = color_clock < 68 ? 0 : color_clock; break;
missile1_pos = color_clock < 68 ? 0 : color_clock-68; break;
case 0x14: // RESBL
ball_pos = color_clock < 68 ? 0 : color_clock; break;
ball_pos = color_clock < 68 ? 0 : color_clock-68; break;
case 0x15: // AUDC0
case 0x16: // AUDC1
@@ -269,7 +290,38 @@ namespace tia
case 0x1F: //ENABL
missile0_enabled = value & 0x02; break;
case 0x20: //HMP0
player0_hmotion = int8_t(value) >> 4; break;
case 0x21: //HMP1
player1_hmotion = int8_t(value) >> 4; break;
case 0x22: //HMM0
missile0_hmotion = int8_t(value) >> 4; break;
case 0x23: //HMM1
missile1_hmotion = int8_t(value) >> 4; break;
case 0x24: //HMBL
ball_hmotion = int8_t(value) >> 4; break;
case 0x25: //VDELP0
player0_vert_delay = value & 0x01; break;
case 0x26: //VDELP1
player1_vert_delay = value & 0x01; break;
case 0x27: //VDELBL
ball_vert_delay = value & 0x01; break;
case 0x28: // RESMP0
missile0_reset = value & 0x02; break;
case 0x29: // RESMP1
missile1_reset = value & 0x02; break;
case 0x2A: // HMOVE
// [TODO] Implementació bàsica, reemplazar per una que use els 15 color_clocks en el futur
player0_pos += player0_hmotion;
player1_pos += player1_hmotion;
missile0_pos += missile0_hmotion;
missile1_pos += missile1_hmotion;
ball_pos += ball_hmotion;
hmove = true;
break;
}
}