diff --git a/Components/1770/1770.cpp b/Components/1770/1770.cpp
index 93a88d3fe..c30ba1ae9 100644
--- a/Components/1770/1770.cpp
+++ b/Components/1770/1770.cpp
@@ -720,7 +720,7 @@ void WD1770::posit_event(int new_event_type) {
 				case 0xfd: case 0xfe:
 					// clock is 0xc7 = 1010 0000 0010 1010 = 0xa022
 					write_raw_short(
-						(uint16_t)(
+						static_cast<uint16_t>(
 							0xa022 |
 							((data_ & 0x80) << 7) |
 							((data_ & 0x40) << 6) |
diff --git a/Components/6522/Implementation/6522Base.cpp b/Components/6522/Implementation/6522Base.cpp
index 2984bca24..c5584f408 100644
--- a/Components/6522/Implementation/6522Base.cpp
+++ b/Components/6522/Implementation/6522Base.cpp
@@ -49,11 +49,11 @@ void MOS6522Base::do_phase2() {
 
 	registers_.timer[1] --;
 	if(registers_.next_timer[0] >= 0) {
-		registers_.timer[0] = (uint16_t)registers_.next_timer[0];
+		registers_.timer[0] = static_cast<uint16_t>(registers_.next_timer[0]);
 		registers_.next_timer[0] = -1;
 	}
 	if(registers_.next_timer[1] >= 0) {
-		registers_.timer[1] = (uint16_t)registers_.next_timer[1];
+		registers_.timer[1] = static_cast<uint16_t>(registers_.next_timer[1]);
 		registers_.next_timer[1] = -1;
 	}
 }
diff --git a/Components/6522/Implementation/6522Implementation.hpp b/Components/6522/Implementation/6522Implementation.hpp
index 823774cb9..eac2a0648 100644
--- a/Components/6522/Implementation/6522Implementation.hpp
+++ b/Components/6522/Implementation/6522Implementation.hpp
@@ -35,7 +35,7 @@ template <typename T> void MOS6522<T>::set_register(int address, uint8_t value)
 		// Timer 1
 		case 0x6:	case 0x4:	registers_.timer_latch[0] = (registers_.timer_latch[0]&0xff00) | value;	break;
 		case 0x5:	case 0x7:
-			registers_.timer_latch[0] = (registers_.timer_latch[0]&0x00ff) | (uint16_t)(value << 8);
+			registers_.timer_latch[0] = (registers_.timer_latch[0]&0x00ff) | static_cast<uint16_t>(value << 8);
 			registers_.interrupt_flags &= ~InterruptFlag::Timer1;
 			if(address == 0x05) {
 				registers_.next_timer[0] = registers_.timer_latch[0];
@@ -48,7 +48,7 @@ template <typename T> void MOS6522<T>::set_register(int address, uint8_t value)
 		case 0x8:	registers_.timer_latch[1] = value;	break;
 		case 0x9:
 			registers_.interrupt_flags &= ~InterruptFlag::Timer2;
-			registers_.next_timer[1] = registers_.timer_latch[1] | (uint16_t)(value << 8);
+			registers_.next_timer[1] = registers_.timer_latch[1] | static_cast<uint16_t>(value << 8);
 			timer_is_running_[1] = true;
 			reevaluate_interrupts();
 		break;
diff --git a/Components/6532/6532.hpp b/Components/6532/6532.hpp
index edeaf5edf..4b2cfdfb8 100644
--- a/Components/6532/6532.hpp
+++ b/Components/6532/6532.hpp
@@ -79,7 +79,7 @@ template <class T> class MOS6532 {
 
 				// Timer and interrupt control
 				case 0x04: case 0x06: {
-					uint8_t value = (uint8_t)(timer_.value >> timer_.activeShift);
+					uint8_t value = static_cast<uint8_t>(timer_.value >> timer_.activeShift);
 					timer_.interrupt_enabled = !!(address&0x08);
 					interrupt_status_ &= ~InterruptFlag::Timer;
 					evaluate_interrupts();
diff --git a/Components/6560/6560.hpp b/Components/6560/6560.hpp
index b6639c7f3..8f9bbf618 100644
--- a/Components/6560/6560.hpp
+++ b/Components/6560/6560.hpp
@@ -218,7 +218,7 @@ template <class T> class MOS6560 {
 					if(column_counter_&1) {
 						fetch_address = registers_.character_cell_start_address + (character_code_*(registers_.tall_characters ? 16 : 8)) + current_character_row_;
 					} else {
-						fetch_address = (uint16_t)(registers_.video_matrix_start_address + video_matrix_address_counter_);
+						fetch_address = static_cast<uint16_t>(registers_.video_matrix_start_address + video_matrix_address_counter_);
 						video_matrix_address_counter_++;
 						if(
 							(current_character_row_ == 15) ||
@@ -345,7 +345,7 @@ template <class T> class MOS6560 {
 
 				case 0x2:
 					registers_.number_of_columns = value & 0x7f;
-					registers_.video_matrix_start_address = (uint16_t)((registers_.video_matrix_start_address & 0x3c00) | ((value & 0x80) << 2));
+					registers_.video_matrix_start_address = static_cast<uint16_t>((registers_.video_matrix_start_address & 0x3c00) | ((value & 0x80) << 2));
 				break;
 
 				case 0x3:
@@ -354,8 +354,8 @@ template <class T> class MOS6560 {
 				break;
 
 				case 0x5:
-					registers_.character_cell_start_address = (uint16_t)((value & 0x0f) << 10);
-					registers_.video_matrix_start_address = (uint16_t)((registers_.video_matrix_start_address & 0x0200) | ((value & 0xf0) << 6));
+					registers_.character_cell_start_address = static_cast<uint16_t>((value & 0x0f) << 10);
+					registers_.video_matrix_start_address = static_cast<uint16_t>((registers_.video_matrix_start_address & 0x0200) | ((value & 0xf0) << 6));
 				break;
 
 				case 0xa:
@@ -399,7 +399,7 @@ template <class T> class MOS6560 {
 			int current_line = (full_frame_counter_ + timing_.line_counter_increment_offset) / timing_.cycles_per_line;
 			switch(address) {
 				default: return registers_.direct_values[address];
-				case 0x03: return (uint8_t)(current_line << 7) | (registers_.direct_values[3] & 0x7f);
+				case 0x03: return static_cast<uint8_t>(current_line << 7) | (registers_.direct_values[3] & 0x7f);
 				case 0x04: return (current_line >> 1) & 0xff;
 			}
 		}
diff --git a/Components/6845/CRTC6845.hpp b/Components/6845/CRTC6845.hpp
index a7d1d2291..2544ada59 100644
--- a/Components/6845/CRTC6845.hpp
+++ b/Components/6845/CRTC6845.hpp
@@ -240,7 +240,7 @@ template <class T> class CRTC6845 {
 		inline void do_end_of_frame() {
 			line_counter_ = 0;
 			line_is_visible_ = true;
-			line_address_ = (uint16_t)((registers_[12] << 8) | registers_[13]);
+			line_address_ = static_cast<uint16_t>((registers_[12] << 8) | registers_[13]);
 			bus_state_.refresh_address = line_address_;
 		}
 
diff --git a/Components/8272/i8272.cpp b/Components/8272/i8272.cpp
index 320565926..edd2b68ec 100644
--- a/Components/8272/i8272.cpp
+++ b/Components/8272/i8272.cpp
@@ -775,7 +775,7 @@ void i8272::posit_event(int event_type) {
 				// If a drive was found, return its results. Otherwise return a single 0x80.
 				if(found_drive != -1) {
 					drives_[found_drive].phase = Drive::NotSeeking;
-					status_[0] = (uint8_t)found_drive;
+					status_[0] = static_cast<uint8_t>(found_drive);
 					main_status_ &= ~(1 << found_drive);
 					SetSeekEnd();
 
diff --git a/Components/AY38910/AY38910.cpp b/Components/AY38910/AY38910.cpp
index a888eecc9..3dcde8f47 100644
--- a/Components/AY38910/AY38910.cpp
+++ b/Components/AY38910/AY38910.cpp
@@ -160,7 +160,7 @@ void AY38910::evaluate_output_volume() {
 #undef channel_volume
 
 	// Mix additively.
-	output_volume_ = (int16_t)(
+	output_volume_ = static_cast<int16_t>(
 		volumes_[volumes[0]] * channel_levels[0] +
 		volumes_[volumes[1]] * channel_levels[1] +
 		volumes_[volumes[2]] * channel_levels[2]
@@ -186,7 +186,7 @@ void AY38910::set_register_value(uint8_t value) {
 					int channel = selected_register >> 1;
 
 					if(selected_register & 1)
-						tone_periods_[channel] = (tone_periods_[channel] & 0xff) | (uint16_t)((value&0xf) << 8);
+						tone_periods_[channel] = (tone_periods_[channel] & 0xff) | static_cast<uint16_t>((value&0xf) << 8);
 					else
 						tone_periods_[channel] = (tone_periods_[channel] & ~0xff) | value;
 				}
diff --git a/Machines/AmstradCPC/AmstradCPC.cpp b/Machines/AmstradCPC/AmstradCPC.cpp
index 23930dbf9..4c04db4c4 100644
--- a/Machines/AmstradCPC/AmstradCPC.cpp
+++ b/Machines/AmstradCPC/AmstradCPC.cpp
@@ -224,7 +224,7 @@ class CRTCBusHandler {
 					//	MA13 MA12	RA2 RA1 RA0		MA9 MA8 MA7 MA6 MA5 MA4 MA3 MA2 MA1 MA0		CCLK
 					// ... so form the real access address.
 					uint16_t address =
-						(uint16_t)(
+						static_cast<uint16_t>(
 							((state.refresh_address & 0x3ff) << 1) |
 							((state.row_address & 0x7) << 11) |
 							((state.refresh_address & 0x3000) << 2)
@@ -374,16 +374,16 @@ class CRTCBusHandler {
 
 		void establish_palette_hits() {
 			for(int c = 0; c < 256; c++) {
-				mode0_palette_hits_[Mode0Colour0(c)].push_back((uint8_t)c);
-				mode0_palette_hits_[Mode0Colour1(c)].push_back((uint8_t)c);
+				mode0_palette_hits_[Mode0Colour0(c)].push_back(static_cast<uint8_t>(c));
+				mode0_palette_hits_[Mode0Colour1(c)].push_back(static_cast<uint8_t>(c));
 
-				mode1_palette_hits_[Mode1Colour0(c)].push_back((uint8_t)c);
-				mode1_palette_hits_[Mode1Colour1(c)].push_back((uint8_t)c);
-				mode1_palette_hits_[Mode1Colour2(c)].push_back((uint8_t)c);
-				mode1_palette_hits_[Mode1Colour3(c)].push_back((uint8_t)c);
+				mode1_palette_hits_[Mode1Colour0(c)].push_back(static_cast<uint8_t>(c));
+				mode1_palette_hits_[Mode1Colour1(c)].push_back(static_cast<uint8_t>(c));
+				mode1_palette_hits_[Mode1Colour2(c)].push_back(static_cast<uint8_t>(c));
+				mode1_palette_hits_[Mode1Colour3(c)].push_back(static_cast<uint8_t>(c));
 
-				mode3_palette_hits_[Mode3Colour0(c)].push_back((uint8_t)c);
-				mode3_palette_hits_[Mode3Colour1(c)].push_back((uint8_t)c);
+				mode3_palette_hits_[Mode3Colour0(c)].push_back(static_cast<uint8_t>(c));
+				mode3_palette_hits_[Mode3Colour1(c)].push_back(static_cast<uint8_t>(c));
 			}
 		}
 
diff --git a/Machines/Atari2600/Cartridges/Pitfall2.hpp b/Machines/Atari2600/Cartridges/Pitfall2.hpp
index f383a453f..b35cfd127 100644
--- a/Machines/Atari2600/Cartridges/Pitfall2.hpp
+++ b/Machines/Atari2600/Cartridges/Pitfall2.hpp
@@ -39,7 +39,7 @@ class Pitfall2: public BusExtender {
 					if(isReadOperation(operation)) {
 						*value = random_number_generator_;
 					}
-					random_number_generator_ = (uint8_t)(
+					random_number_generator_ = static_cast<uint8_t>(
 						(random_number_generator_ << 1) |
 						(~(	(random_number_generator_ >> 7) ^
 							(random_number_generator_ >> 5) ^
diff --git a/Machines/Atari2600/TIA.cpp b/Machines/Atari2600/TIA.cpp
index 960059bd0..385aec79a 100644
--- a/Machines/Atari2600/TIA.cpp
+++ b/Machines/Atari2600/TIA.cpp
@@ -37,7 +37,7 @@ TIA::TIA(bool create_crt) :
 	}
 
 	for(int c = 0; c < 256; c++) {
-		reverse_table[c] = (uint8_t)(
+		reverse_table[c] = static_cast<uint8_t>(
 			((c & 0x01) << 7) | ((c & 0x02) << 5) | ((c & 0x04) << 3) | ((c & 0x08) << 1) |
 			((c & 0x10) >> 1) | ((c & 0x20) >> 3) | ((c & 0x40) >> 5) | ((c & 0x80) >> 7)
 		);
@@ -74,17 +74,17 @@ TIA::TIA(bool create_crt) :
 		colour_mask_by_mode_collision_flags_[(int)ColourMode::Standard][c] =
 		colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] =
 		colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] =
-		colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = (uint8_t)ColourIndex::Background;
+		colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = static_cast<uint8_t>(ColourIndex::Background);
 
 		// test 1 for standard priority: if there is a playfield or ball pixel, plot that colour
 		if(has_playfield || has_ball) {
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::Standard][c] = (uint8_t)ColourIndex::PlayfieldBall;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::Standard][c] = static_cast<uint8_t>(ColourIndex::PlayfieldBall);
 		}
 
 		// test 1 for score mode: if there is a ball pixel, plot that colour
 		if(has_ball) {
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] =
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] = (uint8_t)ColourIndex::PlayfieldBall;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] = static_cast<uint8_t>(ColourIndex::PlayfieldBall);
 		}
 
 		// test 1 for on-top mode, test 2 for everbody else: if there is a player 1 or missile 1 pixel, plot that colour
@@ -92,12 +92,12 @@ TIA::TIA(bool create_crt) :
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::Standard][c] =
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] =
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] =
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = (uint8_t)ColourIndex::PlayerMissile1;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = static_cast<uint8_t>(ColourIndex::PlayerMissile1);
 		}
 
 		// in the right-hand side of score mode, the playfield has the same priority as player 1
 		if(has_playfield) {
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] = (uint8_t)ColourIndex::PlayerMissile1;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] = static_cast<uint8_t>(ColourIndex::PlayerMissile1);
 		}
 
 		// next test for everybody: if there is a player 0 or missile 0 pixel, plot that colour instead
@@ -105,17 +105,17 @@ TIA::TIA(bool create_crt) :
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::Standard][c] =
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] =
 			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreRight][c] =
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = (uint8_t)ColourIndex::PlayerMissile0;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = static_cast<uint8_t>(ColourIndex::PlayerMissile0);
 		}
 
 		// if this is the left-hand side of score mode, the playfield has the same priority as player 0
 		if(has_playfield) {
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] = (uint8_t)ColourIndex::PlayerMissile0;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::ScoreLeft][c] = static_cast<uint8_t>(ColourIndex::PlayerMissile0);
 		}
 
 		// a final test for 'on top' priority mode: if the playfield or ball are visible, prefer that colour to all others
 		if(has_playfield || has_ball) {
-			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = (uint8_t)ColourIndex::PlayfieldBall;
+			colour_mask_by_mode_collision_flags_[(int)ColourMode::OnTop][c] = static_cast<uint8_t>(ColourIndex::PlayfieldBall);
 		}
 	}
 }
@@ -210,16 +210,16 @@ void TIA::set_playfield(uint16_t offset, uint8_t value) {
 	assert(offset >= 0 && offset < 3);
 	switch(offset) {
 		case 0:
-			background_[1] = (background_[1] & 0x0ffff) | ((uint32_t)reverse_table[value & 0xf0] << 16);
-			background_[0] = (background_[0] & 0xffff0) | (uint32_t)(value >> 4);
+			background_[1] = (background_[1] & 0x0ffff) | (static_cast<uint32_t>(reverse_table[value & 0xf0]) << 16);
+			background_[0] = (background_[0] & 0xffff0) | static_cast<uint32_t>(value >> 4);
 		break;
 		case 1:
-			background_[1] = (background_[1] & 0xf00ff) | ((uint32_t)value << 8);
-			background_[0] = (background_[0] & 0xff00f) | ((uint32_t)reverse_table[value] << 4);
+			background_[1] = (background_[1] & 0xf00ff) | (static_cast<uint32_t>(value) << 8);
+			background_[0] = (background_[0] & 0xff00f) | (static_cast<uint32_t>(reverse_table[value]) << 4);
 		break;
 		case 2:
 			background_[1] = (background_[1] & 0xfff00) | reverse_table[value];
-			background_[0] = (background_[0] & 0x00fff) | ((uint32_t)value << 12);
+			background_[0] = (background_[0] & 0x00fff) | (static_cast<uint32_t>(value) << 12);
 		break;
 	}
 }
@@ -360,7 +360,7 @@ void TIA::clear_motion() {
 }
 
 uint8_t TIA::get_collision_flags(int offset) {
-	return (uint8_t)((collision_flags_ >> (offset << 1)) << 6) & 0xc0;
+	return static_cast<uint8_t>((collision_flags_ >> (offset << 1)) << 6) & 0xc0;
 }
 
 void TIA::clear_collision_flags() {
@@ -401,11 +401,11 @@ void TIA::output_for_cycles(int number_of_cycles) {
 	int latent_start = output_cursor + 4;
 	int latent_end = horizontal_counter_ + 4;
 	draw_playfield(latent_start, latent_end);
-	draw_object<Player>(player_[0], (uint8_t)CollisionType::Player0, output_cursor, horizontal_counter_);
-	draw_object<Player>(player_[1], (uint8_t)CollisionType::Player1, output_cursor, horizontal_counter_);
-	draw_missile(missile_[0], player_[0], (uint8_t)CollisionType::Missile0, output_cursor, horizontal_counter_);
-	draw_missile(missile_[1], player_[1], (uint8_t)CollisionType::Missile1, output_cursor, horizontal_counter_);
-	draw_object<Ball>(ball_, (uint8_t)CollisionType::Ball, output_cursor, horizontal_counter_);
+	draw_object<Player>(player_[0], static_cast<uint8_t>(CollisionType::Player0), output_cursor, horizontal_counter_);
+	draw_object<Player>(player_[1], static_cast<uint8_t>(CollisionType::Player1), output_cursor, horizontal_counter_);
+	draw_missile(missile_[0], player_[0], static_cast<uint8_t>(CollisionType::Missile0), output_cursor, horizontal_counter_);
+	draw_missile(missile_[1], player_[1], static_cast<uint8_t>(CollisionType::Missile1), output_cursor, horizontal_counter_);
+	draw_object<Ball>(ball_, static_cast<uint8_t>(CollisionType::Ball), output_cursor, horizontal_counter_);
 
 	// convert to television signals
 
diff --git a/Machines/MemoryFuzzer.cpp b/Machines/MemoryFuzzer.cpp
index 467d27045..35ddf5e6a 100644
--- a/Machines/MemoryFuzzer.cpp
+++ b/Machines/MemoryFuzzer.cpp
@@ -19,7 +19,7 @@ void Memory::Fuzz(uint8_t *buffer, size_t size) {
 	}
 
 	for(size_t c = 0; c < size; c++) {
-		buffer[c] = (uint8_t)(std::rand() >> shift);
+		buffer[c] = static_cast<uint8_t>(std::rand() >> shift);
 	}
 }
 
diff --git a/Machines/Typer.cpp b/Machines/Typer.cpp
index ff60c04b9..4a19ddc7b 100644
--- a/Machines/Typer.cpp
+++ b/Machines/Typer.cpp
@@ -83,7 +83,7 @@ Typer::~Typer() {
 #pragma mark - Character mapper
 
 uint16_t *CharacterMapper::table_lookup_sequence_for_character(KeySequence *sequences, size_t length, char character) {
-	size_t ucharacter = (size_t)((unsigned char)character);
+	size_t ucharacter = static_cast<size_t>((unsigned char)character);
 	if(ucharacter > (length / sizeof(KeySequence))) return nullptr;
 	if(sequences[ucharacter][0] == NotMapped) return nullptr;
 	return sequences[ucharacter];
diff --git a/Storage/Disk/DiskImage/Formats/G64.cpp b/Storage/Disk/DiskImage/Formats/G64.cpp
index d8d0eaabd..b567f2a1e 100644
--- a/Storage/Disk/DiskImage/Formats/G64.cpp
+++ b/Storage/Disk/DiskImage/Formats/G64.cpp
@@ -24,7 +24,7 @@ G64::G64(const char *file_name) :
 	if(version != 0) throw ErrorUnknownVersion;
 
 	// get the number of tracks and track size
-	number_of_tracks_ = (uint8_t)fgetc(file_);
+	number_of_tracks_ = static_cast<uint8_t>(fgetc(file_));
 	maximum_track_size_ = fgetc16le();
 }
 
diff --git a/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp b/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp
index db49dd36b..4cdb6474a 100644
--- a/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp
+++ b/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp
@@ -32,13 +32,13 @@ std::shared_ptr<Track> MFMSectorDump::get_track_at_position(unsigned int head, u
 		fread(sectors, 1, sizeof(sectors), file_);
 	}
 
-	return track_for_sectors(sectors, (uint8_t)position, (uint8_t)head, 0, sector_size_, is_double_density_);
+	return track_for_sectors(sectors, static_cast<uint8_t>(position), static_cast<uint8_t>(head), 0, sector_size_, is_double_density_);
 }
 
 void MFMSectorDump::set_track_at_position(unsigned int head, unsigned int position, const std::shared_ptr<Track> &track) {
 	uint8_t parsed_track[(128 << sector_size_)*sectors_per_track_];
 	// Assumption here: sector IDs will run from 0.
-	decode_sectors(*track, parsed_track, 0, (uint8_t)(sectors_per_track_-1), sector_size_, is_double_density_);
+	decode_sectors(*track, parsed_track, 0, static_cast<uint8_t>(sectors_per_track_-1), sector_size_, is_double_density_);
 
 	long file_offset = get_file_offset_for_position(head, position);
 
diff --git a/Storage/Disk/DiskImage/Formats/OricMFMDSK.cpp b/Storage/Disk/DiskImage/Formats/OricMFMDSK.cpp
index a8ad8feb2..71d722daf 100644
--- a/Storage/Disk/DiskImage/Formats/OricMFMDSK.cpp
+++ b/Storage/Disk/DiskImage/Formats/OricMFMDSK.cpp
@@ -63,7 +63,7 @@ std::shared_ptr<Track> OricMFMDSK::get_track_at_position(unsigned int head, unsi
 		std::unique_ptr<Encodings::MFM::Encoder> encoder = Encodings::MFM::GetMFMEncoder(segment.data);
 		bool did_sync = false;
 		while(track_offset < 6250) {
-			uint8_t next_byte = (uint8_t)fgetc(file_);
+			uint8_t next_byte = static_cast<uint8_t>(fgetc(file_));
 			track_offset++;
 
 			switch(next_byte) {
@@ -75,7 +75,7 @@ std::shared_ptr<Track> OricMFMDSK::get_track_at_position(unsigned int head, unsi
 
 							case 0xfe:
 								for(int byte = 0; byte < 6; byte++) {
-									last_header[byte] = (uint8_t)fgetc(file_);
+									last_header[byte] = static_cast<uint8_t>(fgetc(file_));
 									encoder->add_byte(last_header[byte]);
 									track_offset++;
 									if(track_offset == 6250) break;
@@ -84,7 +84,7 @@ std::shared_ptr<Track> OricMFMDSK::get_track_at_position(unsigned int head, unsi
 
 							case 0xfb:
 								for(int byte = 0; byte < (128 << last_header[3]) + 2; byte++) {
-									encoder->add_byte((uint8_t)fgetc(file_));
+									encoder->add_byte(static_cast<uint8_t>(fgetc(file_)));
 									track_offset++;
 									if(track_offset == 6250) break;
 								}
diff --git a/Storage/Disk/Encodings/CommodoreGCR.cpp b/Storage/Disk/Encodings/CommodoreGCR.cpp
index 89338bcc2..643731da6 100644
--- a/Storage/Disk/Encodings/CommodoreGCR.cpp
+++ b/Storage/Disk/Encodings/CommodoreGCR.cpp
@@ -66,9 +66,9 @@ void Storage::Encodings::CommodoreGCR::encode_block(uint8_t *destination, uint8_
 		encoding_for_byte(source[3]),
 	};
 
-	destination[0] = (uint8_t)(encoded_bytes[0] >> 2);
-	destination[1] = (uint8_t)((encoded_bytes[0] << 6) | (encoded_bytes[1] >> 4));
-	destination[2] = (uint8_t)((encoded_bytes[1] << 4) | (encoded_bytes[2] >> 6));
-	destination[3] = (uint8_t)((encoded_bytes[2] << 2) | (encoded_bytes[3] >> 8));
-	destination[4] = (uint8_t)(encoded_bytes[3]);
+	destination[0] = static_cast<uint8_t>(encoded_bytes[0] >> 2);
+	destination[1] = static_cast<uint8_t>((encoded_bytes[0] << 6) | (encoded_bytes[1] >> 4));
+	destination[2] = static_cast<uint8_t>((encoded_bytes[1] << 4) | (encoded_bytes[2] >> 6));
+	destination[3] = static_cast<uint8_t>((encoded_bytes[2] << 2) | (encoded_bytes[3] >> 8));
+	destination[4] = static_cast<uint8_t>(encoded_bytes[3]);
 }
diff --git a/Storage/Disk/Encodings/MFM/Shifter.cpp b/Storage/Disk/Encodings/MFM/Shifter.cpp
index 7f5636063..2c4437e3b 100644
--- a/Storage/Disk/Encodings/MFM/Shifter.cpp
+++ b/Storage/Disk/Encodings/MFM/Shifter.cpp
@@ -108,7 +108,7 @@ void Shifter::add_input_bit(int value) {
 }
 
 uint8_t Shifter::get_byte() const {
-	return (uint8_t)(
+	return static_cast<uint8_t>(
 		((shift_register_ & 0x0001) >> 0) |
 		((shift_register_ & 0x0004) >> 1) |
 		((shift_register_ & 0x0010) >> 2) |
diff --git a/Storage/Disk/Parsers/CPM.cpp b/Storage/Disk/Parsers/CPM.cpp
index bc325e4a1..75c638ce2 100644
--- a/Storage/Disk/Parsers/CPM.cpp
+++ b/Storage/Disk/Parsers/CPM.cpp
@@ -26,7 +26,7 @@ std::unique_ptr<Storage::Disk::CPM::Catalogue> Storage::Disk::CPM::GetCatalogue(
 		if(catalogue_allocation_bitmap & 0x8000) {
 			size_t size_read = 0;
 			do {
-				Storage::Encodings::MFM::Sector *sector_contents = parser.get_sector(0, (uint8_t)track, (uint8_t)(parameters.first_sector + sector));
+				Storage::Encodings::MFM::Sector *sector_contents = parser.get_sector(0, static_cast<uint8_t>(track), static_cast<uint8_t>(parameters.first_sector + sector));
 				if(!sector_contents) {
 					return nullptr;
 				}
@@ -134,7 +134,7 @@ std::unique_ptr<Storage::Disk::CPM::Catalogue> Storage::Disk::CPM::GetCatalogue(
 				track = first_sector / parameters.sectors_per_track;
 
 				for(int s = 0; s < sectors_per_block && record < entry->number_of_records; s++) {
-					Storage::Encodings::MFM::Sector *sector_contents = parser.get_sector(0, (uint8_t)track, (uint8_t)(parameters.first_sector +  sector));
+					Storage::Encodings::MFM::Sector *sector_contents = parser.get_sector(0, static_cast<uint8_t>(track), static_cast<uint8_t>(parameters.first_sector +  sector));
 					if(!sector_contents) break;
 					sector++;
 					if(sector == parameters.sectors_per_track) {
diff --git a/Storage/Tape/Formats/CSW.cpp b/Storage/Tape/Formats/CSW.cpp
index 036ad1258..89c399b49 100644
--- a/Storage/Tape/Formats/CSW.cpp
+++ b/Storage/Tape/Formats/CSW.cpp
@@ -25,8 +25,8 @@ CSW::CSW(const char *file_name) :
 	if(fgetc(file_) != 0x1a) throw ErrorNotCSW;
 
 	// Get version file number.
-	uint8_t major_version = (uint8_t)fgetc(file_);
-	uint8_t minor_version = (uint8_t)fgetc(file_);
+	uint8_t major_version = static_cast<uint8_t>(fgetc(file_));
+	uint8_t minor_version = static_cast<uint8_t>(fgetc(file_));
 
 	// Reject if this is an unknown version.
 	if(major_version > 2 || !major_version || minor_version > 1) throw ErrorNotCSW;
@@ -52,7 +52,7 @@ CSW::CSW(const char *file_name) :
 		}
 
 		pulse_.type = (fgetc(file_) & 1) ? Pulse::High : Pulse::Low;
-		uint8_t extension_length = (uint8_t)fgetc(file_);
+		uint8_t extension_length = static_cast<uint8_t>(fgetc(file_));
 
 		if(file_stats_.st_size < 0x34 + extension_length) throw ErrorNotCSW;
 		fseek(file_, 0x34 + extension_length, SEEK_SET);
@@ -84,7 +84,7 @@ CSW::CSW(const char *file_name) :
 
 uint8_t CSW::get_next_byte() {
 	switch(compression_type_) {
-		case RLE: return (uint8_t)fgetc(file_);
+		case RLE: return static_cast<uint8_t>(fgetc(file_));
 		case ZRLE: {
 			if(source_data_pointer_ == source_data_.size()) return 0xff;
 			uint8_t result = source_data_[source_data_pointer_];
diff --git a/Storage/Tape/Formats/CommodoreTAP.cpp b/Storage/Tape/Formats/CommodoreTAP.cpp
index f74f0bb88..eb01cc1f6 100644
--- a/Storage/Tape/Formats/CommodoreTAP.cpp
+++ b/Storage/Tape/Formats/CommodoreTAP.cpp
@@ -64,7 +64,7 @@ Storage::Tape::Tape::Pulse CommodoreTAP::virtual_get_next_pulse()
 	if(current_pulse_.type == Pulse::High)
 	{
 		uint32_t next_length;
-		uint8_t next_byte = (uint8_t)fgetc(file_);
+		uint8_t next_byte = static_cast<uint8_t>(fgetc(file_));
 		if(!updated_layout_ || next_byte > 0)
 		{
 			next_length = (uint32_t)next_byte << 3;
diff --git a/Storage/Tape/Formats/OricTAP.cpp b/Storage/Tape/Formats/OricTAP.cpp
index 9da3714ec..eace8799d 100644
--- a/Storage/Tape/Formats/OricTAP.cpp
+++ b/Storage/Tape/Formats/OricTAP.cpp
@@ -69,7 +69,7 @@ Tape::Pulse OricTAP::virtual_get_next_pulse()
 				// [6, 7]:		start address of data
 				// 8:			"unused" (on the Oric 1)
 				// [9...]:		filename, up to NULL byte
-				next_byte = (uint8_t)fgetc(file_);
+				next_byte = static_cast<uint8_t>(fgetc(file_));
 
 				if(phase_counter_ == 4)	data_end_address_ = (uint16_t)(next_byte << 8);
 				if(phase_counter_ == 5)	data_end_address_ |= next_byte;
@@ -96,7 +96,7 @@ Tape::Pulse OricTAP::virtual_get_next_pulse()
 			break;
 
 			case Data:
-				next_byte = (uint8_t)fgetc(file_);
+				next_byte = static_cast<uint8_t>(fgetc(file_));
 				phase_counter_++;
 				if(phase_counter_ >= (data_end_address_ - data_start_address_)+1)
 				{
diff --git a/Storage/Tape/Formats/TZX.cpp b/Storage/Tape/Formats/TZX.cpp
index 430327f0b..ee0028464 100644
--- a/Storage/Tape/Formats/TZX.cpp
+++ b/Storage/Tape/Formats/TZX.cpp
@@ -27,8 +27,8 @@ TZX::TZX(const char *file_name) :
 	if(fgetc(file_) != 0x1a) throw ErrorNotTZX;
 
 	// Get version number
-	uint8_t major_version = (uint8_t)fgetc(file_);
-	uint8_t minor_version = (uint8_t)fgetc(file_);
+	uint8_t major_version = static_cast<uint8_t>(fgetc(file_));
+	uint8_t minor_version = static_cast<uint8_t>(fgetc(file_));
 
 	// Reject if an incompatible version
 	if(major_version != 1 || minor_version > 20)  throw ErrorNotTZX;
@@ -50,7 +50,7 @@ void TZX::virtual_reset() {
 
 void TZX::get_next_pulses() {
 	while(empty()) {
-		uint8_t chunk_id = (uint8_t)fgetc(file_);
+		uint8_t chunk_id = static_cast<uint8_t>(fgetc(file_));
 		if(feof(file_)) {
 			set_is_at_end(true);
 			return;
@@ -95,12 +95,12 @@ void TZX::get_generalised_data_block() {
 	uint16_t pause_after_block = fgetc16le();
 
 	uint32_t total_pilot_symbols = fgetc32le();
-	uint8_t maximum_pulses_per_pilot_symbol = (uint8_t)fgetc(file_);
-	uint8_t symbols_in_pilot_table = (uint8_t)fgetc(file_);
+	uint8_t maximum_pulses_per_pilot_symbol = static_cast<uint8_t>(fgetc(file_));
+	uint8_t symbols_in_pilot_table = static_cast<uint8_t>(fgetc(file_));
 
 	uint32_t total_data_symbols = fgetc32le();
-	uint8_t maximum_pulses_per_data_symbol = (uint8_t)fgetc(file_);
-	uint8_t symbols_in_data_table = (uint8_t)fgetc(file_);
+	uint8_t maximum_pulses_per_data_symbol = static_cast<uint8_t>(fgetc(file_));
+	uint8_t symbols_in_data_table = static_cast<uint8_t>(fgetc(file_));
 
 	get_generalised_segment(total_pilot_symbols, maximum_pulses_per_pilot_symbol, symbols_in_pilot_table, false);
 	get_generalised_segment(total_data_symbols, maximum_pulses_per_data_symbol, symbols_in_data_table, true);
@@ -121,7 +121,7 @@ void TZX::get_generalised_segment(uint32_t output_symbols, uint8_t max_pulses_pe
 	std::vector<Symbol> symbol_table;
 	for(int c = 0; c < number_of_symbols; c++) {
 		Symbol symbol;
-		symbol.flags = (uint8_t)fgetc(file_);
+		symbol.flags = static_cast<uint8_t>(fgetc(file_));
 		for(int ic = 0; ic < max_pulses_per_symbol; ic++) {
 			symbol.pulse_lengths.push_back(fgetc16le());
 		}
@@ -143,7 +143,7 @@ void TZX::get_generalised_segment(uint32_t output_symbols, uint8_t max_pulses_pe
 			symbol_value = stream.get_bits(bits);
 			count = 1;
 		} else {
-			symbol_value = (uint8_t)fgetc(file_);
+			symbol_value = static_cast<uint8_t>(fgetc(file_));
 			count = fgetc16le();
 		}
 		if(symbol_value > number_of_symbols) {
@@ -182,7 +182,7 @@ void TZX::get_standard_speed_data_block() {
 	data_block.data.data_length = fgetc16le();
 	if(!data_block.data.data_length) return;
 
-	uint8_t first_byte = (uint8_t)fgetc(file_);
+	uint8_t first_byte = static_cast<uint8_t>(fgetc(file_));
 	data_block.length_of_pilot_tone = (first_byte < 128) ? 8063  : 3223;
 	ungetc(first_byte, file_);
 
@@ -197,7 +197,7 @@ void TZX::get_turbo_speed_data_block() {
 	data_block.data.length_of_zero_bit_pulse = fgetc16le();
 	data_block.data.length_of_one_bit_pulse = fgetc16le();
 	data_block.length_of_pilot_tone = fgetc16le();
-	data_block.data.number_of_bits_in_final_byte = (uint8_t)fgetc(file_);
+	data_block.data.number_of_bits_in_final_byte = static_cast<uint8_t>(fgetc(file_));
 	data_block.data.pause_after_block = fgetc16le();
 	data_block.data.data_length = fgetc16le();
 	data_block.data.data_length |= (long)(fgetc(file_) << 16);
@@ -221,7 +221,7 @@ void TZX::get_data_block(const DataBlock &data_block) {
 void TZX::get_data(const Data &data) {
 	// Output data.
 	for(unsigned int c = 0; c < data.data_length; c++) {
-		uint8_t next_byte = (uint8_t)fgetc(file_);
+		uint8_t next_byte = static_cast<uint8_t>(fgetc(file_));
 
 		unsigned int bits = (c != data.data_length-1) ? 8 : data.number_of_bits_in_final_byte;
 		while(bits--) {
@@ -248,7 +248,7 @@ void TZX::get_pure_data_block() {
 	Data data;
 	data.length_of_zero_bit_pulse = fgetc16le();
 	data.length_of_one_bit_pulse = fgetc16le();
-	data.number_of_bits_in_final_byte = (uint8_t)fgetc(file_);
+	data.number_of_bits_in_final_byte = static_cast<uint8_t>(fgetc(file_));
 	data.pause_after_block = fgetc16le();
 	data.data_length = fgetc16le();
 	data.data_length |= (long)(fgetc(file_) << 16);
@@ -257,7 +257,7 @@ void TZX::get_pure_data_block() {
 }
 
 void TZX::get_pulse_sequence() {
-	uint8_t number_of_pulses = (uint8_t)fgetc(file_);
+	uint8_t number_of_pulses = static_cast<uint8_t>(fgetc(file_));
 	while(number_of_pulses--) {
 		post_pulse(fgetc16le());
 	}
@@ -297,7 +297,7 @@ void TZX::post_pulse(const Storage::Time &time) {
 
 void TZX::ignore_group_start() {
 	printf("Ignoring TZX group\n");
-	uint8_t length = (uint8_t)fgetc(file_);
+	uint8_t length = static_cast<uint8_t>(fgetc(file_));
 	fseek(file_, length, SEEK_CUR);
 }
 
@@ -336,21 +336,21 @@ void TZX::ignore_select_block() {
 #pragma mark - Messaging
 
 void TZX::ignore_text_description() {
-	uint8_t length = (uint8_t)fgetc(file_);
+	uint8_t length = static_cast<uint8_t>(fgetc(file_));
 	fseek(file_, length, SEEK_CUR);
 	printf("Ignoring TZX text description\n");
 }
 
 void TZX::ignore_message_block() {
-	__unused uint8_t time_for_display = (uint8_t)fgetc(file_);
-	uint8_t length = (uint8_t)fgetc(file_);
+	__unused uint8_t time_for_display = static_cast<uint8_t>(fgetc(file_));
+	uint8_t length = static_cast<uint8_t>(fgetc(file_));
 	fseek(file_, length, SEEK_CUR);
 	printf("Ignoring TZX message\n");
 }
 
 void TZX::get_hardware_type() {
 	// TODO: pick a way to retain and communicate this.
-	uint8_t number_of_machines = (uint8_t)fgetc(file_);
+	uint8_t number_of_machines = static_cast<uint8_t>(fgetc(file_));
 	fseek(file_, number_of_machines * 3, SEEK_CUR);
 	printf("Ignoring TZX hardware types (%d)\n", number_of_machines);
 }
diff --git a/Storage/Tape/Formats/TapePRG.cpp b/Storage/Tape/Formats/TapePRG.cpp
index 1407396b1..3e4077482 100644
--- a/Storage/Tape/Formats/TapePRG.cpp
+++ b/Storage/Tape/Formats/TapePRG.cpp
@@ -172,7 +172,7 @@ void PRG::get_next_output_token()
 		// the first nine bytes are countdown; the high bit is set if this is a header
 		if(byte_offset < countdown_bytes)
 		{
-			output_byte_ = (uint8_t)(countdown_bytes - byte_offset) | copy_mask_;
+			output_byte_ = static_cast<uint8_t>(countdown_bytes - byte_offset) | copy_mask_;
 		}
 		else
 		{
@@ -207,7 +207,7 @@ void PRG::get_next_output_token()
 			}
 			else
 			{
-				output_byte_ = (uint8_t)fgetc(file_);
+				output_byte_ = static_cast<uint8_t>(fgetc(file_));
 				if(feof(file_))
 				{
 					output_byte_ = check_digit_;
diff --git a/Storage/Tape/Parsers/Acorn.cpp b/Storage/Tape/Parsers/Acorn.cpp
index 519fa3fe7..80a7b14d0 100644
--- a/Storage/Tape/Parsers/Acorn.cpp
+++ b/Storage/Tape/Parsers/Acorn.cpp
@@ -37,7 +37,7 @@ int Parser::get_next_byte(const std::shared_ptr<Storage::Tape::Tape> &tape) {
 		set_error_flag();
 		return -1;
 	}
-	crc_.add((uint8_t)value);
+	crc_.add(static_cast<uint8_t>(value));
 	return value;
 }
 
diff --git a/Storage/Tape/Parsers/Commodore.cpp b/Storage/Tape/Parsers/Commodore.cpp
index 85f8fb659..f6551fe70 100644
--- a/Storage/Tape/Parsers/Commodore.cpp
+++ b/Storage/Tape/Parsers/Commodore.cpp
@@ -243,8 +243,8 @@ uint8_t Parser::get_next_byte_contents(const std::shared_ptr<Storage::Tape::Tape
 	if((check&1) == (byte_plus_parity >> 8))
 		set_error_flag();
 
-	add_parity_byte((uint8_t)byte_plus_parity);
-	return (uint8_t)byte_plus_parity;
+	add_parity_byte(static_cast<uint8_t>(byte_plus_parity));
+	return static_cast<uint8_t>(byte_plus_parity);
 }
 
 /*!
diff --git a/Storage/Tape/Parsers/ZX8081.cpp b/Storage/Tape/Parsers/ZX8081.cpp
index e1411f791..dcd0a0134 100644
--- a/Storage/Tape/Parsers/ZX8081.cpp
+++ b/Storage/Tape/Parsers/ZX8081.cpp
@@ -125,7 +125,7 @@ std::shared_ptr<std::vector<uint8_t>> Parser::get_next_file_data(const std::shar
 	while(!is_at_end(tape)) {
 		byte = get_next_byte(tape);
 		if(byte == -1) return result;
-		result->push_back((uint8_t)byte);
+		result->push_back(static_cast<uint8_t>(byte));
 	}
 	return result;
 }