diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 1a434a410..dbf469ea0 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -104,7 +104,6 @@ 4B055ADF1FAE9B4C0060FFFF /* IRQDelegatePortHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334891F5DB94B0097E338 /* IRQDelegatePortHandler.cpp */; }; 4B055AE01FAE9B660060FFFF /* CRT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CCC421C62D0B3001CAC5F /* CRT.cpp */; }; 4B055AE81FAE9B7B0060FFFF /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC76E671C98E31700E6EF73 /* FIRFilter.cpp */; }; - 4B055AE91FAE9B990060FFFF /* 6502Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6A4C951F58F09E00E3F787 /* 6502Base.cpp */; }; 4B055AEA1FAE9B990060FFFF /* 6502Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334851F5DA3780097E338 /* 6502Storage.cpp */; }; 4B055AEB1FAE9BA20060FFFF /* PartialMachineCycle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334811F5D9FF70097E338 /* PartialMachineCycle.cpp */; }; 4B055AEC1FAE9BA20060FFFF /* Z80Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B322E031F5A2E3C004EB04C /* Z80Base.cpp */; }; @@ -290,7 +289,6 @@ 4B69FB3D1C4D908A00B5F0AA /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB3B1C4D908A00B5F0AA /* Tape.cpp */; }; 4B69FB441C4D941400B5F0AA /* TapeUEF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB421C4D941400B5F0AA /* TapeUEF.cpp */; }; 4B69FB461C4D950F00B5F0AA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B69FB451C4D950F00B5F0AA /* libz.tbd */; }; - 4B6A4C991F58F09E00E3F787 /* 6502Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6A4C951F58F09E00E3F787 /* 6502Base.cpp */; }; 4B6AAEA4230E3E1D0078E864 /* MassStorageDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6AAEA2230E3E1D0078E864 /* MassStorageDevice.cpp */; }; 4B6AAEAB230E40250078E864 /* SCSI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6AAEA7230E40250078E864 /* SCSI.cpp */; }; 4B6AAEAC230E40250078E864 /* SCSI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6AAEA7230E40250078E864 /* SCSI.cpp */; }; @@ -345,7 +343,6 @@ 4B778F1423A5EC960000D260 /* Z80Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334831F5DA0360097E338 /* Z80Storage.cpp */; }; 4B778F1523A5EC980000D260 /* PartialMachineCycle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334811F5D9FF70097E338 /* PartialMachineCycle.cpp */; }; 4B778F1623A5ECA00000D260 /* Z80AllRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B322DFD1F5A2981004EB04C /* Z80AllRAM.cpp */; }; - 4B778F1823A5ED1B0000D260 /* 6502Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6A4C951F58F09E00E3F787 /* 6502Base.cpp */; }; 4B778F1923A5ED1B0000D260 /* 6502Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8334851F5DA3780097E338 /* 6502Storage.cpp */; }; 4B778F1A23A5ED320000D260 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE005E227D39AB000CA200 /* Video.cpp */; }; 4B778F1B23A5ED380000D260 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC0823775819008902D0 /* Video.cpp */; }; @@ -1353,7 +1350,6 @@ 4B6A4C8E1F58F09E00E3F787 /* 6502.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 6502.hpp; sourceTree = ""; }; 4B6A4C911F58F09E00E3F787 /* 6502AllRAM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 6502AllRAM.cpp; sourceTree = ""; }; 4B6A4C921F58F09E00E3F787 /* 6502AllRAM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 6502AllRAM.hpp; sourceTree = ""; }; - 4B6A4C951F58F09E00E3F787 /* 6502Base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 6502Base.cpp; sourceTree = ""; }; 4B6AAEA2230E3E1D0078E864 /* MassStorageDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MassStorageDevice.cpp; sourceTree = ""; }; 4B6AAEA3230E3E1D0078E864 /* MassStorageDevice.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MassStorageDevice.hpp; sourceTree = ""; }; 4B6AAEA6230E40250078E864 /* Target.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Target.hpp; sourceTree = ""; }; @@ -2994,7 +2990,6 @@ 4B6A4C931F58F09E00E3F787 /* Implementation */ = { isa = PBXGroup; children = ( - 4B6A4C951F58F09E00E3F787 /* 6502Base.cpp */, 4B8334851F5DA3780097E338 /* 6502Storage.cpp */, 4B322DF31F5A26BF004EB04C /* 6502Implementation.hpp */, 4B322DF41F5A2714004EB04C /* 6502Storage.hpp */, @@ -5310,7 +5305,6 @@ 4B0ACC2F23775819008902D0 /* TIA.cpp in Sources */, 4B9BE401203A0C0600FFAE60 /* MultiSpeaker.cpp in Sources */, 4B055AA61FAE85EF0060FFFF /* Parser.cpp in Sources */, - 4B055AE91FAE9B990060FFFF /* 6502Base.cpp in Sources */, 4BF8D4D6251C11DD00BBE21B /* 65816Storage.cpp in Sources */, 4B055AEF1FAE9BF00060FFFF /* Typer.cpp in Sources */, 4B89453F201967B4007DE474 /* StaticAnalyser.cpp in Sources */, @@ -5601,7 +5595,6 @@ 4B89449520194CB3007DE474 /* MachineForTarget.cpp in Sources */, 4B4A76301DB1A3FA007AAE2E /* AY38910.cpp in Sources */, 4B7BA03423C58B1F00B98D9E /* STX.cpp in Sources */, - 4B6A4C991F58F09E00E3F787 /* 6502Base.cpp in Sources */, 4B98A05E1FFAD3F600ADF63B /* CSROMFetcher.mm in Sources */, 4B7F188E2154825E00388727 /* MasterSystem.cpp in Sources */, 4B8805F41DCFD22A003085B1 /* Commodore.cpp in Sources */, @@ -5807,7 +5800,6 @@ 4B778EFE23A5EB910000D260 /* CPCDSK.cpp in Sources */, 4B778F5823A5F2C60000D260 /* Tape.cpp in Sources */, 4B1414601B58885000E04248 /* WolfgangLorenzTests.swift in Sources */, - 4B778F1823A5ED1B0000D260 /* 6502Base.cpp in Sources */, 4BD4A8D01E077FD20020D856 /* PCMTrackTests.mm in Sources */, 4B778F2123A5EDD50000D260 /* TrackSerialiser.cpp in Sources */, 4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */, diff --git a/Processors/6502/6502.hpp b/Processors/6502/6502.hpp index 7b4eb55a8..671cddfb4 100644 --- a/Processors/6502/6502.hpp +++ b/Processors/6502/6502.hpp @@ -44,9 +44,9 @@ enum Personality { #define has_stpwai(p) ((p) >= Personality::PWDC65C02) /*! - An opcode that is guaranteed to cause the CPU to jam. + An opcode that is guaranteed to cause a 6502 to jam. */ -extern const uint8_t JamOpcode; +constexpr uint8_t JamOpcode = 0xf2; #include "Implementation/6502Storage.hpp" @@ -65,7 +65,7 @@ class ProcessorBase: public ProcessorStorage { @param r The register to set. @returns The value of the register. 8-bit registers will be returned as unsigned. */ - uint16_t get_value_of_register(Register r) const; + inline uint16_t get_value_of_register(Register r) const; /*! Sets the value of a register. @@ -75,7 +75,7 @@ class ProcessorBase: public ProcessorStorage { @param r The register to set. @param value The value to set. If the register is only 8 bit, the value will be truncated. */ - void set_value_of_register(Register r, uint16_t value); + inline void set_value_of_register(Register r, uint16_t value); /*! Sets the current level of the RST line. @@ -124,7 +124,7 @@ class ProcessorBase: public ProcessorStorage { @returns @c true if the 6502 is jammed; @c false otherwise. */ - bool is_jammed() const; + inline bool is_jammed() const; }; /*! diff --git a/Processors/6502/Implementation/6502Base.cpp b/Processors/6502/Implementation/6502Base.cpp deleted file mode 100644 index ef50dc040..000000000 --- a/Processors/6502/Implementation/6502Base.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// 6502Base.cpp -// Clock Signal -// -// Created by Thomas Harte on 31/08/2017. -// Copyright 2017 Thomas Harte. All rights reserved. -// - -#include "../6502.hpp" - -using namespace CPU::MOS6502; - -const uint8_t CPU::MOS6502::JamOpcode = 0xf2; - -uint16_t ProcessorBase::get_value_of_register(Register r) const { - switch (r) { - case Register::ProgramCounter: return pc_.full; - case Register::LastOperationAddress: return last_operation_pc_.full; - case Register::StackPointer: return s_; - case Register::Flags: return get_flags(); - case Register::A: return a_; - case Register::X: return x_; - case Register::Y: return y_; - default: return 0; - } -} - -void ProcessorBase::set_value_of_register(Register r, uint16_t value) { - switch (r) { - case Register::ProgramCounter: pc_.full = value; break; - case Register::StackPointer: s_ = uint8_t(value); break; - case Register::Flags: set_flags(uint8_t(value)); break; - case Register::A: a_ = uint8_t(value); break; - case Register::X: x_ = uint8_t(value); break; - case Register::Y: y_ = uint8_t(value); break; - default: break; - } -} - -bool ProcessorBase::is_jammed() const { - return is_jammed_; -} diff --git a/Processors/6502/Implementation/6502Implementation.hpp b/Processors/6502/Implementation/6502Implementation.hpp index f5f2a6512..6caafebbc 100644 --- a/Processors/6502/Implementation/6502Implementation.hpp +++ b/Processors/6502/Implementation/6502Implementation.hpp @@ -700,3 +700,32 @@ uint8_t ProcessorStorage::get_flags() const { void ProcessorStorage::set_flags(uint8_t flags) { flags_.set(flags); } + +bool ProcessorBase::is_jammed() const { + return is_jammed_; +} + +uint16_t ProcessorBase::get_value_of_register(Register r) const { + switch (r) { + case Register::ProgramCounter: return pc_.full; + case Register::LastOperationAddress: return last_operation_pc_.full; + case Register::StackPointer: return s_; + case Register::Flags: return get_flags(); + case Register::A: return a_; + case Register::X: return x_; + case Register::Y: return y_; + default: return 0; + } +} + +void ProcessorBase::set_value_of_register(Register r, uint16_t value) { + switch (r) { + case Register::ProgramCounter: pc_.full = value; break; + case Register::StackPointer: s_ = uint8_t(value); break; + case Register::Flags: set_flags(uint8_t(value)); break; + case Register::A: a_ = uint8_t(value); break; + case Register::X: x_ = uint8_t(value); break; + case Register::Y: y_ = uint8_t(value); break; + default: break; + } +}