From d9c6b3bcf7bdb876731b957477ffaa7133a56db2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 25 Jul 2017 22:13:41 -0400 Subject: [PATCH] Corrected TIA's WSYNC lookahead to accept `Cycles`. --- Machines/Atari2600/Cartridges/Cartridge.hpp | 4 ++-- Machines/Atari2600/Cartridges/CartridgePitfall2.hpp | 7 +++---- Machines/Atari2600/TIA.cpp | 4 ++-- Machines/Atari2600/TIA.hpp | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Machines/Atari2600/Cartridges/Cartridge.hpp b/Machines/Atari2600/Cartridges/Cartridge.hpp index 2c0acde4f..1b3b19890 100644 --- a/Machines/Atari2600/Cartridges/Cartridge.hpp +++ b/Machines/Atari2600/Cartridges/Cartridge.hpp @@ -24,7 +24,7 @@ template class Cartridge: void run_for(const Cycles &cycles) { CPU::MOS6502::Processor>::run_for(cycles); } void set_reset_line(bool state) { CPU::MOS6502::Processor>::set_reset_line(state); } - void advance_cycles(unsigned int cycles) {} + void advance_cycles(int cycles) {} // to satisfy CPU::MOS6502::Processor unsigned int perform_bus_operation(CPU::MOS6502::BusOperation operation, uint16_t address, uint8_t *value) { @@ -41,7 +41,7 @@ template class Cartridge: cycles_since_speaker_update_ += Cycles(cycles_run_for); cycles_since_video_update_ += Cycles(cycles_run_for); cycles_since_6532_update_ += Cycles(cycles_run_for / 3); - static_cast(this)->advance_cycles((unsigned int)cycles_run_for / 3); + static_cast(this)->advance_cycles(cycles_run_for / 3); if(operation != CPU::MOS6502::BusOperation::Ready) { // give the cartridge a chance to respond to the bus access diff --git a/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp b/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp index dfd8c73ea..7921a918a 100644 --- a/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp +++ b/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp @@ -22,7 +22,7 @@ class CartridgePitfall2: public Cartridge { rom_ptr_ = rom_.data(); } - void advance_cycles(unsigned int cycles) { + void advance_cycles(int cycles) { cycles_since_audio_update_ += cycles; } @@ -105,8 +105,7 @@ class CartridgePitfall2: public Cartridge { inline uint8_t update_audio() { const unsigned int clock_divisor = 57; - unsigned int cycles_to_run_for = cycles_since_audio_update_ / clock_divisor; - cycles_since_audio_update_ %= clock_divisor; + int cycles_to_run_for = cycles_since_audio_update_.divide(clock_divisor).as_int(); int table_position = 0; for(int c = 0; c < 3; c++) { @@ -126,7 +125,7 @@ class CartridgePitfall2: public Cartridge { uint8_t random_number_generator_; uint8_t *rom_ptr_; uint8_t audio_channel_[3]; - unsigned int cycles_since_audio_update_; + Cycles cycles_since_audio_update_; }; } diff --git a/Machines/Atari2600/TIA.cpp b/Machines/Atari2600/TIA.cpp index aedbb6bcf..270a495f6 100644 --- a/Machines/Atari2600/TIA.cpp +++ b/Machines/Atari2600/TIA.cpp @@ -198,8 +198,8 @@ void TIA::set_blank(bool blank) { void TIA::reset_horizontal_counter() { } -int TIA::get_cycles_until_horizontal_blank(unsigned int from_offset) { - return (cycles_per_line - (horizontal_counter_ + (int)from_offset) % cycles_per_line) % cycles_per_line; +int TIA::get_cycles_until_horizontal_blank(const Cycles &from_offset) { + return (cycles_per_line - (horizontal_counter_ + from_offset.as_int()) % cycles_per_line) % cycles_per_line; } void TIA::set_background_colour(uint8_t colour) { diff --git a/Machines/Atari2600/TIA.hpp b/Machines/Atari2600/TIA.hpp index 9e45af447..8e7f50826 100644 --- a/Machines/Atari2600/TIA.hpp +++ b/Machines/Atari2600/TIA.hpp @@ -43,7 +43,7 @@ class TIA: public ClockReceiver { @returns the number of cycles between (current TIA time) + from_offset to the current or next horizontal blanking period. Returns numbers in the range [0, 227]. */ - int get_cycles_until_horizontal_blank(unsigned int from_offset); + int get_cycles_until_horizontal_blank(const Cycles &from_offset); void set_background_colour(uint8_t colour);