From c66728dce254cc75c28b6c7a9027c58f88c34dfe Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 21:21:33 -0400 Subject: [PATCH] Corrects decoding of CMPA. --- Processors/68000/Implementation/68000Implementation.hpp | 6 +++--- Processors/68000/Implementation/68000Storage.cpp | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index f4d342683..5ee846a65 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -61,7 +61,7 @@ template void Processor: // } static bool should_log = false; - should_log |= program_counter_.full >= 0x4F54; + should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; if(should_log) { std::cout << "d0:" << std::setw(8) << std::setfill('0') << data_[0].full << " "; std::cout << "d1:" << std::setw(8) << std::setfill('0') << data_[1].full << " "; @@ -83,8 +83,8 @@ template void Processor: std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << std::endl; return; } else { - if(0x4f7a == program_counter_.full - 4) return; - if(should_log) std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; +// if(0x4f7a == program_counter_.full - 4)return; + std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; } active_program_ = &instructions[decoded_instruction_]; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index b11040146..17819f9f5 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1778,6 +1778,11 @@ struct ProcessorStorageConstructor { } break; case Decoder::CMPA: { + // Only operation modes 011 and 111 are accepted, and long words are selected + // by the top bit. + if(((op_mode)&3) != 3) continue; + is_long_word_access = op_mode == 7; + const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register);