- [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:
1 parent
61d8b0a808
commit
1e4a175639
1 file changed
+57
-5
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user