From a26b87f3483f7cff0ecd1e0d2bcb4d0805c9ec43 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 20 Mar 2017 20:44:03 -0400 Subject: [PATCH] Fixed: mistake was failure to count ready cycles. --- Machines/Atari2600/Cartridges/Cartridge.hpp | 2 ++ Machines/Atari2600/Cartridges/CartridgePitfall2.hpp | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Machines/Atari2600/Cartridges/Cartridge.hpp b/Machines/Atari2600/Cartridges/Cartridge.hpp index 8581270fe..37dbb30a7 100644 --- a/Machines/Atari2600/Cartridges/Cartridge.hpp +++ b/Machines/Atari2600/Cartridges/Cartridge.hpp @@ -24,6 +24,7 @@ template class Cartridge: void run_for_cycles(int number_of_cycles) { CPU6502::Processor>::run_for_cycles(number_of_cycles); } void set_reset_line(bool state) { CPU6502::Processor>::set_reset_line(state); } + void advance_cycles(unsigned int cycles) {} // to satisfy CPU6502::Processor unsigned int perform_bus_operation(CPU6502::BusOperation operation, uint16_t address, uint8_t *value) { @@ -40,6 +41,7 @@ template class Cartridge: cycles_since_speaker_update_ += cycles_run_for; cycles_since_video_update_ += cycles_run_for; cycles_since_6532_update_ += (cycles_run_for / 3); + static_cast(this)->advance_cycles(cycles_run_for / 3); if(operation != CPU6502::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 134b5e994..5592f175b 100644 --- a/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp +++ b/Machines/Atari2600/Cartridges/CartridgePitfall2.hpp @@ -22,8 +22,11 @@ class CartridgePitfall2: public Cartridge { rom_ptr_ = rom_.data(); } + void advance_cycles(unsigned int cycles) { + cycles_since_audio_update_ += cycles; + } + void perform_bus_operation(CPU6502::BusOperation operation, uint16_t address, uint8_t *value) { - cycles_since_audio_update_++; address &= 0x1fff; if(!(address & 0x1000)) return;