From b9b52b7c8bcb56da4b9580c8df998156fe97dd9a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 9 Mar 2019 00:00:23 -0500 Subject: [PATCH 001/239] Begins some very early sketching out of a 68000. --- .../Clock Signal.xcodeproj/project.pbxproj | 32 ++++++++- Processors/68000/68000.hpp | 67 +++++++++++++++++++ .../68000/Implementation/68000Storage.cpp | 45 +++++++++++++ .../68000/Implementation/68000Storage.hpp | 50 ++++++++++++++ 4 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 Processors/68000/68000.hpp create mode 100644 Processors/68000/Implementation/68000Storage.cpp create mode 100644 Processors/68000/Implementation/68000Storage.hpp diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 0c58b16d3..0ee54c1d9 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -661,6 +661,8 @@ 4BFDD78C1F7F2DB4008579B9 /* ImplicitSectors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFDD78B1F7F2DB4008579B9 /* ImplicitSectors.cpp */; }; 4BFE7B871FC39BF100160B38 /* StandardOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFE7B851FC39BF100160B38 /* StandardOptions.cpp */; }; 4BFE7B881FC39D8900160B38 /* StandardOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFE7B851FC39BF100160B38 /* StandardOptions.cpp */; }; + 4BFF1D3922337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; + 4BFF1D3A22337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1459,6 +1461,9 @@ 4BFDD78B1F7F2DB4008579B9 /* ImplicitSectors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImplicitSectors.cpp; sourceTree = ""; }; 4BFE7B851FC39BF100160B38 /* StandardOptions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StandardOptions.cpp; sourceTree = ""; }; 4BFE7B861FC39BF100160B38 /* StandardOptions.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = StandardOptions.hpp; sourceTree = ""; }; + 4BFF1D342233778C00838EA1 /* 68000.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000.hpp; sourceTree = ""; }; + 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000Storage.hpp; sourceTree = ""; }; + 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = 68000Storage.cpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2886,11 +2891,12 @@ 4BB73EDD1B587CA500552FC2 /* Processors */ = { isa = PBXGroup; children = ( - 4B1414561B58879D00E04248 /* 6502 */, - 4B77069E1EC9045B0053B588 /* Z80 */, - 4B2C455C1EC9442600FC74DD /* RegisterSizes.hpp */, 4BFCA1211ECBDCAF00AC40C1 /* AllRAMProcessor.cpp */, 4BFCA1221ECBDCAF00AC40C1 /* AllRAMProcessor.hpp */, + 4B2C455C1EC9442600FC74DD /* RegisterSizes.hpp */, + 4B1414561B58879D00E04248 /* 6502 */, + 4BFF1D332233778C00838EA1 /* 68000 */, + 4B77069E1EC9045B0053B588 /* Z80 */, ); name = Processors; path = ../../Processors; @@ -3196,6 +3202,24 @@ path = Utility; sourceTree = ""; }; + 4BFF1D332233778C00838EA1 /* 68000 */ = { + isa = PBXGroup; + children = ( + 4BFF1D342233778C00838EA1 /* 68000.hpp */, + 4BFF1D36223379D500838EA1 /* Implementation */, + ); + path = 68000; + sourceTree = ""; + }; + 4BFF1D36223379D500838EA1 /* Implementation */ = { + isa = PBXGroup; + children = ( + 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */, + 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */, + ); + path = Implementation; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -3687,6 +3711,7 @@ 4B05401F219D1618001BF69C /* ScanTarget.cpp in Sources */, 4B055AE81FAE9B7B0060FFFF /* FIRFilter.cpp in Sources */, 4B055A901FAE85A90060FFFF /* TimedEventLoop.cpp in Sources */, + 4BFF1D3A22337B0300838EA1 /* 68000Storage.cpp in Sources */, 4B055AC71FAE9AEE0060FFFF /* TIA.cpp in Sources */, 4B055AD21FAE9B0B0060FFFF /* Keyboard.cpp in Sources */, 4B89451B201967B4007DE474 /* ConfidenceSummary.cpp in Sources */, @@ -3967,6 +3992,7 @@ 4B8334821F5D9FF70097E338 /* PartialMachineCycle.cpp in Sources */, 4BD424E72193B5830097291A /* Rectangle.cpp in Sources */, 4B1B88C0202E3DB200B67DFF /* MultiConfigurable.cpp in Sources */, + 4BFF1D3922337B0300838EA1 /* 68000Storage.cpp in Sources */, 4B54C0BC1F8D8E790050900F /* KeyboardMachine.cpp in Sources */, 4BB73EA21B587A5100552FC2 /* AppDelegate.swift in Sources */, 4B894534201967B4007DE474 /* AddressMapper.cpp in Sources */, diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp new file mode 100644 index 000000000..4357ba094 --- /dev/null +++ b/Processors/68000/68000.hpp @@ -0,0 +1,67 @@ +// +// 68000.hpp +// Clock Signal +// +// Created by Thomas Harte on 08/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#ifndef MC68000_h +#define MC68000_h + +#include +#include + +#include "../../ClockReceiver/ClockReceiver.hpp" + +namespace CPU { +namespace MC68000 { + +struct Microcycle { + enum Operation { + Read16, + Write16, + ReadHigh, + ReadLow, + WriteHigh, + WriteLow, + + /// The data bus is not tristated, but no data request is made. + Idle, + + /// No data bus interaction at all; bus is tristated. + None + }; + + Operation operation = Operation::None; + Cycles length = Cycles(2); + uint32_t *address = nullptr; + uint16_t *value = nullptr; +}; + +class BusHandler { + public: + Cycles perform_machine_cycle(const Microcycle &cycle) { + return Cycles(0); + } + + void flush(); +}; + +#include "Implementation/68000Storage.hpp" + +class ProcessorBase: public ProcessorStorage { +}; + +template class Processor: public ProcessorBase { + public: + void run_for(const Cycles cycles); + + private: + T &bus_handler_; +}; + +} +} + +#endif /* MC68000_h */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp new file mode 100644 index 000000000..ec81695c9 --- /dev/null +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -0,0 +1,45 @@ +// +// 68000Storage.cpp +// Clock Signal +// +// Created by Thomas Harte on 08/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#include "../68000.hpp" + +using namespace CPU::MC68000; + +ProcessorStorage::ProcessorStorage() { + reset_program_ = assemble_program("n- n- n- n- n- nn nF nV nv np np"); +} + +std::vector ProcessorStorage::assemble_program(const char *access_pattern) { + std::vector steps; + + // Parse the access pattern to build microcycles. + while(*access_pattern) { + Step step; + + switch(*access_pattern) { + case ' ': break; // Space acts as a no-op; it's for clarity only. + + case 'n': // Nothing occurs; supply as 'None'. + step.microcycle.operation = Microcycle::Operation::None; + break; + + case '-': // An idle cycle; distinct from a 'None'. + step.microcycle.operation = Microcycle::Operation::Idle; + break; + + default: assert(false); + } + + steps.push_back(step); + ++access_pattern; + } + + // TODO: add actions, somehow. + + return steps; +} diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp new file mode 100644 index 000000000..2fc7b97a2 --- /dev/null +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -0,0 +1,50 @@ +// +// 68000Storage.hpp +// Clock Signal +// +// Created by Thomas Harte on 08/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#ifndef MC68000Storage_h +#define MC68000Storage_h + +class ProcessorStorage { + public: + ProcessorStorage(); + + protected: + uint32_t data_[8]; + uint32_t address_[7]; + uint32_t stack_pointers_[2]; + uint32_t program_counter_; + + enum class State { + Reset, + Normal + }; + + /*! + A step is a microcycle to perform plus an action to occur afterwards, if any. + */ + struct Step { + Microcycle microcycle; + enum class Action { + None + } action_ = Action::None; + }; + + // Special programs. + std::vector reset_program_; + + private: + enum class DataSize { + Byte, Word, LongWord + }; + enum class AddressingMode { + }; + + std::vector assemble_program(const char *access_pattern); +}; + +#endif /* MC68000Storage_h */ From 4aeb9a7c565a5a6e058a75990718548b752681f9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 9 Mar 2019 21:16:11 -0500 Subject: [PATCH 002/239] Genericises RegisterPair. --- .../Implementation/6502Implementation.hpp | 70 +++++----- .../6502/Implementation/6502Storage.hpp | 4 +- Processors/RegisterSizes.hpp | 21 ++- Processors/Z80/Implementation/Z80Base.cpp | 80 +++++------ .../Z80/Implementation/Z80Implementation.hpp | 47 ++++--- Processors/Z80/Implementation/Z80Storage.cpp | 126 +++++++++--------- Processors/Z80/Implementation/Z80Storage.hpp | 14 +- 7 files changed, 186 insertions(+), 176 deletions(-) diff --git a/Processors/6502/Implementation/6502Implementation.hpp b/Processors/6502/Implementation/6502Implementation.hpp index 03637ca72..c32f544e2 100644 --- a/Processors/6502/Implementation/6502Implementation.hpp +++ b/Processors/6502/Implementation/6502Implementation.hpp @@ -28,7 +28,7 @@ template void Proces // These plus program below act to give the compiler permission to update these values // without touching the class storage (i.e. it explicitly says they need be completely up // to date in this stack frame only); which saves some complicated addressing - RegisterPair nextAddress = next_address_; + RegisterPair16 nextAddress = next_address_; BusOperation nextBusOperation = next_bus_operation_; uint16_t busAddress = bus_address_; uint8_t *busValue = bus_value_; @@ -147,8 +147,8 @@ template void Proces } case CycleIncPCPushPCH: pc_.full++; // deliberate fallthrough - case CyclePushPCH: push(pc_.bytes.high); break; - case CyclePushPCL: push(pc_.bytes.low); break; + case CyclePushPCH: push(pc_.halves.high); break; + case CyclePushPCL: push(pc_.halves.low); break; case CyclePushOperand: push(operand_); break; case CyclePushA: push(a_); break; case CyclePushX: push(x_); break; @@ -175,8 +175,8 @@ template void Proces continue; case OperationNMIPickVector: nextAddress.full = 0xfffa; continue; case OperationRSTPickVector: nextAddress.full = 0xfffc; continue; - case CycleReadVectorLow: read_mem(pc_.bytes.low, nextAddress.full); break; - case CycleReadVectorHigh: read_mem(pc_.bytes.high, nextAddress.full+1); break; + case CycleReadVectorLow: read_mem(pc_.halves.low, nextAddress.full); break; + case CycleReadVectorHigh: read_mem(pc_.halves.high, nextAddress.full+1); break; case OperationSetIRQFlags: inverse_interrupt_flag_ = 0; if(is_65c02(personality)) decimal_flag_ = false; @@ -185,8 +185,8 @@ template void Proces if(is_65c02(personality)) decimal_flag_ = false; continue; - case CyclePullPCL: s_++; read_mem(pc_.bytes.low, s_ | 0x100); break; - case CyclePullPCH: s_++; read_mem(pc_.bytes.high, s_ | 0x100); break; + case CyclePullPCL: s_++; read_mem(pc_.halves.low, s_ | 0x100); break; + case CyclePullPCH: s_++; read_mem(pc_.halves.high, s_ | 0x100); break; case CyclePullA: s_++; read_mem(a_, s_ | 0x100); break; case CyclePullX: s_++; read_mem(x_, s_ | 0x100); break; case CyclePullY: s_++; read_mem(y_, s_ | 0x100); break; @@ -198,11 +198,11 @@ template void Proces case OperationSetFlagsFromX: zero_result_ = negative_result_ = x_; continue; case OperationSetFlagsFromY: zero_result_ = negative_result_ = y_; continue; - case CycleIncrementPCAndReadStack: pc_.full++; throwaway_read(s_ | 0x100); break; - case CycleReadPCLFromAddress: read_mem(pc_.bytes.low, address_.full); break; - case CycleReadPCHFromAddressLowInc: address_.bytes.low++; read_mem(pc_.bytes.high, address_.full); break; - case CycleReadPCHFromAddressFixed: if(!address_.bytes.low) address_.bytes.high++; read_mem(pc_.bytes.high, address_.full); break; - case CycleReadPCHFromAddressInc: address_.full++; read_mem(pc_.bytes.high, address_.full); break; + case CycleIncrementPCAndReadStack: pc_.full++; throwaway_read(s_ | 0x100); break; + case CycleReadPCLFromAddress: read_mem(pc_.halves.low, address_.full); break; + case CycleReadPCHFromAddressLowInc: address_.halves.low++; read_mem(pc_.halves.high, address_.full); break; + case CycleReadPCHFromAddressFixed: if(!address_.halves.low) address_.halves.high++; read_mem(pc_.halves.high, address_.full); break; + case CycleReadPCHFromAddressInc: address_.full++; read_mem(pc_.halves.high, address_.full); break; case CycleReadAndIncrementPC: { uint16_t oldPC = pc_.full; @@ -244,10 +244,10 @@ template void Proces case OperationSTY: operand_ = y_; continue; case OperationSTZ: operand_ = 0; continue; case OperationSAX: operand_ = a_ & x_; continue; - case OperationSHA: operand_ = a_ & x_ & (address_.bytes.high+1); continue; - case OperationSHX: operand_ = x_ & (address_.bytes.high+1); continue; - case OperationSHY: operand_ = y_ & (address_.bytes.high+1); continue; - case OperationSHS: s_ = a_ & x_; operand_ = s_ & (address_.bytes.high+1); continue; + case OperationSHA: operand_ = a_ & x_ & (address_.halves.high+1); continue; + case OperationSHX: operand_ = x_ & (address_.halves.high+1); continue; + case OperationSHY: operand_ = y_ & (address_.halves.high+1); continue; + case OperationSHS: s_ = a_ & x_; operand_ = s_ & (address_.halves.high+1); continue; case OperationLXA: a_ = x_ = (a_ | 0xee) & operand_; @@ -475,28 +475,28 @@ template void Proces case CycleAddXToAddressLow: nextAddress.full = address_.full + x_; - address_.bytes.low = nextAddress.bytes.low; - if(address_.bytes.high != nextAddress.bytes.high) { + address_.halves.low = nextAddress.halves.low; + if(address_.halves.high != nextAddress.halves.high) { page_crossing_stall_read(); break; } continue; case CycleAddXToAddressLowRead: nextAddress.full = address_.full + x_; - address_.bytes.low = nextAddress.bytes.low; + address_.halves.low = nextAddress.halves.low; page_crossing_stall_read(); break; case CycleAddYToAddressLow: nextAddress.full = address_.full + y_; - address_.bytes.low = nextAddress.bytes.low; - if(address_.bytes.high != nextAddress.bytes.high) { + address_.halves.low = nextAddress.halves.low; + if(address_.halves.high != nextAddress.halves.high) { page_crossing_stall_read(); break; } continue; case CycleAddYToAddressLowRead: nextAddress.full = address_.full + y_; - address_.bytes.low = nextAddress.bytes.low; + address_.halves.low = nextAddress.halves.low; page_crossing_stall_read(); break; @@ -507,37 +507,37 @@ template void Proces continue; case CycleIncrementPCFetchAddressLowFromOperand: pc_.full++; - read_mem(address_.bytes.low, operand_); + read_mem(address_.halves.low, operand_); break; case CycleAddXToOperandFetchAddressLow: operand_ += x_; - read_mem(address_.bytes.low, operand_); + read_mem(address_.halves.low, operand_); break; case CycleFetchAddressLowFromOperand: - read_mem(address_.bytes.low, operand_); + read_mem(address_.halves.low, operand_); break; case CycleIncrementOperandFetchAddressHigh: operand_++; - read_mem(address_.bytes.high, operand_); + read_mem(address_.halves.high, operand_); break; case CycleIncrementPCReadPCHLoadPCL: // deliberate fallthrough pc_.full++; case CycleReadPCHLoadPCL: { uint16_t oldPC = pc_.full; - pc_.bytes.low = operand_; - read_mem(pc_.bytes.high, oldPC); + pc_.halves.low = operand_; + read_mem(pc_.halves.high, oldPC); } break; case CycleReadAddressHLoadAddressL: - address_.bytes.low = operand_; pc_.full++; - read_mem(address_.bytes.high, pc_.full); + address_.halves.low = operand_; pc_.full++; + read_mem(address_.halves.high, pc_.full); break; case CycleLoadAddressAbsolute: { uint16_t nextPC = pc_.full+1; pc_.full += 2; - address_.bytes.low = operand_; - read_mem(address_.bytes.high, nextPC); + address_.halves.low = operand_; + read_mem(address_.halves.high, nextPC); } break; case OperationLoadAddressZeroPage: @@ -583,8 +583,8 @@ template void Proces case CycleAddSignedOperandToPC: nextAddress.full = static_cast(pc_.full + (int8_t)operand_); - pc_.bytes.low = nextAddress.bytes.low; - if(nextAddress.bytes.high != pc_.bytes.high) { + pc_.halves.low = nextAddress.halves.low; + if(nextAddress.halves.high != pc_.halves.high) { uint16_t halfUpdatedPc = pc_.full; pc_.full = nextAddress.full; throwaway_read(halfUpdatedPc); @@ -598,7 +598,7 @@ template void Proces continue; case CycleFetchFromHalfUpdatedPC: { - uint16_t halfUpdatedPc = static_cast(((pc_.bytes.low + (int8_t)operand_) & 0xff) | (pc_.bytes.high << 8)); + uint16_t halfUpdatedPc = static_cast(((pc_.halves.low + (int8_t)operand_) & 0xff) | (pc_.halves.high << 8)); throwaway_read(halfUpdatedPc); } break; diff --git a/Processors/6502/Implementation/6502Storage.hpp b/Processors/6502/Implementation/6502Storage.hpp index fd7b54b5f..bc06c0e2c 100644 --- a/Processors/6502/Implementation/6502Storage.hpp +++ b/Processors/6502/Implementation/6502Storage.hpp @@ -205,7 +205,7 @@ class ProcessorStorage { /* Storage for the 6502 registers; F is stored as individual flags. */ - RegisterPair pc_, last_operation_pc_; + RegisterPair16 pc_, last_operation_pc_; uint8_t a_, x_, y_, s_ = 0; uint8_t carry_flag_, negative_result_, zero_result_, decimal_flag_, overflow_flag_, inverse_interrupt_flag_ = 0; @@ -213,7 +213,7 @@ class ProcessorStorage { Temporary state for the micro programs. */ uint8_t operation_, operand_; - RegisterPair address_, next_address_; + RegisterPair16 address_, next_address_; /* Temporary storage allowing a common dispatch point for calling perform_bus_operation; diff --git a/Processors/RegisterSizes.hpp b/Processors/RegisterSizes.hpp index 766e74dbb..1252b2634 100644 --- a/Processors/RegisterSizes.hpp +++ b/Processors/RegisterSizes.hpp @@ -13,16 +13,27 @@ namespace CPU { -union RegisterPair { - RegisterPair(uint16_t v) : full(v) {} +template union RegisterPair { + RegisterPair(Full v) : full(v) {} RegisterPair() {} - uint16_t full; + Full full; +#pragma pack(push, 1) +#if TARGET_RT_BIG_ENDIAN struct { - uint8_t low, high; - } bytes; + Half high, low; + } halves; +#else + struct { + Half low, high; + } halves; +#endif +#pragma pack(pop) }; +typedef RegisterPair RegisterPair16; +typedef RegisterPair RegisterPair32; + } #endif /* RegisterSizes_hpp */ diff --git a/Processors/Z80/Implementation/Z80Base.cpp b/Processors/Z80/Implementation/Z80Base.cpp index 04cdc5f09..0dddf500d 100644 --- a/Processors/Z80/Implementation/Z80Base.cpp +++ b/Processors/Z80/Implementation/Z80Base.cpp @@ -23,38 +23,38 @@ uint16_t ProcessorBase::get_value_of_register(Register r) { case Register::A: return a_; case Register::Flags: return get_flags(); case Register::AF: return static_cast((a_ << 8) | get_flags()); - case Register::B: return bc_.bytes.high; - case Register::C: return bc_.bytes.low; + case Register::B: return bc_.halves.high; + case Register::C: return bc_.halves.low; case Register::BC: return bc_.full; - case Register::D: return de_.bytes.high; - case Register::E: return de_.bytes.low; + case Register::D: return de_.halves.high; + case Register::E: return de_.halves.low; case Register::DE: return de_.full; - case Register::H: return hl_.bytes.high; - case Register::L: return hl_.bytes.low; + case Register::H: return hl_.halves.high; + case Register::L: return hl_.halves.low; case Register::HL: return hl_.full; - case Register::ADash: return afDash_.bytes.high; - case Register::FlagsDash: return afDash_.bytes.low; + case Register::ADash: return afDash_.halves.high; + case Register::FlagsDash: return afDash_.halves.low; case Register::AFDash: return afDash_.full; - case Register::BDash: return bcDash_.bytes.high; - case Register::CDash: return bcDash_.bytes.low; + case Register::BDash: return bcDash_.halves.high; + case Register::CDash: return bcDash_.halves.low; case Register::BCDash: return bcDash_.full; - case Register::DDash: return deDash_.bytes.high; - case Register::EDash: return deDash_.bytes.low; + case Register::DDash: return deDash_.halves.high; + case Register::EDash: return deDash_.halves.low; case Register::DEDash: return deDash_.full; - case Register::HDash: return hlDash_.bytes.high; - case Register::LDash: return hlDash_.bytes.low; + case Register::HDash: return hlDash_.halves.high; + case Register::LDash: return hlDash_.halves.low; case Register::HLDash: return hlDash_.full; - case Register::IXh: return ix_.bytes.high; - case Register::IXl: return ix_.bytes.low; + case Register::IXh: return ix_.halves.high; + case Register::IXl: return ix_.halves.low; case Register::IX: return ix_.full; - case Register::IYh: return iy_.bytes.high; - case Register::IYl: return iy_.bytes.low; + case Register::IYh: return iy_.halves.high; + case Register::IYl: return iy_.halves.low; case Register::IY: return iy_.full; - case Register::R: return ir_.bytes.low; - case Register::I: return ir_.bytes.high; + case Register::R: return ir_.halves.low; + case Register::I: return ir_.halves.high; case Register::Refresh: return ir_.full; case Register::IFF1: return iff1_ ? 1 : 0; @@ -76,38 +76,38 @@ void ProcessorBase::set_value_of_register(Register r, uint16_t value) { case Register::AF: a_ = static_cast(value >> 8); // deliberate fallthrough... case Register::Flags: set_flags(static_cast(value)); break; - case Register::B: bc_.bytes.high = static_cast(value); break; - case Register::C: bc_.bytes.low = static_cast(value); break; + case Register::B: bc_.halves.high = static_cast(value); break; + case Register::C: bc_.halves.low = static_cast(value); break; case Register::BC: bc_.full = value; break; - case Register::D: de_.bytes.high = static_cast(value); break; - case Register::E: de_.bytes.low = static_cast(value); break; + case Register::D: de_.halves.high = static_cast(value); break; + case Register::E: de_.halves.low = static_cast(value); break; case Register::DE: de_.full = value; break; - case Register::H: hl_.bytes.high = static_cast(value); break; - case Register::L: hl_.bytes.low = static_cast(value); break; + case Register::H: hl_.halves.high = static_cast(value); break; + case Register::L: hl_.halves.low = static_cast(value); break; case Register::HL: hl_.full = value; break; - case Register::ADash: afDash_.bytes.high = static_cast(value); break; - case Register::FlagsDash: afDash_.bytes.low = static_cast(value); break; + case Register::ADash: afDash_.halves.high = static_cast(value); break; + case Register::FlagsDash: afDash_.halves.low = static_cast(value); break; case Register::AFDash: afDash_.full = value; break; - case Register::BDash: bcDash_.bytes.high = static_cast(value); break; - case Register::CDash: bcDash_.bytes.low = static_cast(value); break; + case Register::BDash: bcDash_.halves.high = static_cast(value); break; + case Register::CDash: bcDash_.halves.low = static_cast(value); break; case Register::BCDash: bcDash_.full = value; break; - case Register::DDash: deDash_.bytes.high = static_cast(value); break; - case Register::EDash: deDash_.bytes.low = static_cast(value); break; + case Register::DDash: deDash_.halves.high = static_cast(value); break; + case Register::EDash: deDash_.halves.low = static_cast(value); break; case Register::DEDash: deDash_.full = value; break; - case Register::HDash: hlDash_.bytes.high = static_cast(value); break; - case Register::LDash: hlDash_.bytes.low = static_cast(value); break; + case Register::HDash: hlDash_.halves.high = static_cast(value); break; + case Register::LDash: hlDash_.halves.low = static_cast(value); break; case Register::HLDash: hlDash_.full = value; break; - case Register::IXh: ix_.bytes.high = static_cast(value); break; - case Register::IXl: ix_.bytes.low = static_cast(value); break; + case Register::IXh: ix_.halves.high = static_cast(value); break; + case Register::IXl: ix_.halves.low = static_cast(value); break; case Register::IX: ix_.full = value; break; - case Register::IYh: iy_.bytes.high = static_cast(value); break; - case Register::IYl: iy_.bytes.low = static_cast(value); break; + case Register::IYh: iy_.halves.high = static_cast(value); break; + case Register::IYl: iy_.halves.low = static_cast(value); break; case Register::IY: iy_.full = value; break; - case Register::R: ir_.bytes.low = static_cast(value); break; - case Register::I: ir_.bytes.high = static_cast(value); break; + case Register::R: ir_.halves.low = static_cast(value); break; + case Register::I: ir_.halves.high = static_cast(value); break; case Register::Refresh: ir_.full = value; break; case Register::IFF1: iff1_ = !!value; break; diff --git a/Processors/Z80/Implementation/Z80Implementation.hpp b/Processors/Z80/Implementation/Z80Implementation.hpp index cc24de790..141147b52 100644 --- a/Processors/Z80/Implementation/Z80Implementation.hpp +++ b/Processors/Z80/Implementation/Z80Implementation.hpp @@ -90,7 +90,7 @@ template < class T, break; case MicroOp::DecodeOperation: refresh_addr_ = ir_; - ir_.bytes.low = (ir_.bytes.low & 0x80) | ((ir_.bytes.low + current_instruction_page_->r_step) & 0x7f); + ir_.halves.low = (ir_.halves.low & 0x80) | ((ir_.halves.low + current_instruction_page_->r_step) & 0x7f); pc_.full += pc_increment_ & static_cast(halt_mask_); scheduled_program_counter_ = current_instruction_page_->instructions[operation_ & halt_mask_]; flag_adjustment_history_ <<= 1; @@ -108,13 +108,12 @@ template < class T, case MicroOp::Move16: *static_cast(operation->destination) = *static_cast(operation->source); break; case MicroOp::AssembleAF: - temp16_.bytes.high = a_; - temp16_.bytes.low = get_flags(); + temp16_.halves.high = a_; + temp16_.halves.low = get_flags(); break; case MicroOp::DisassembleAF: - a_ = temp16_.bytes.high; - set_flags(temp16_.bytes.low); - // + a_ = temp16_.halves.high; + set_flags(temp16_.halves.low); break; // MARK: - Logical @@ -179,8 +178,8 @@ template < class T, // MARK: - Flow control case MicroOp::DJNZ: - bc_.bytes.high--; - if(!bc_.bytes.high) { + bc_.halves.high--; + if(!bc_.halves.high) { advance_operation(); } break; @@ -460,10 +459,10 @@ template < class T, case MicroOp::ExAFAFDash: { const uint8_t a = a_; const uint8_t f = get_flags(); - set_flags(afDash_.bytes.low); - a_ = afDash_.bytes.high; - afDash_.bytes.high = a; - afDash_.bytes.low = f; + set_flags(afDash_.halves.low); + a_ = afDash_.halves.high; + afDash_.halves.high = a; + afDash_.halves.low = f; } break; case MicroOp::EXX: { @@ -554,13 +553,13 @@ template < class T, #undef CPxR_STEP #define INxR_STEP(dir) \ - bc_.bytes.high--; \ + bc_.halves.high--; \ hl_.full += dir; \ \ - sign_result_ = zero_result_ = bit53_result_ = bc_.bytes.high; \ + sign_result_ = zero_result_ = bit53_result_ = bc_.halves.high; \ subtract_flag_ = (temp8_ >> 6) & Flag::Subtract; \ \ - const int next_bc = bc_.bytes.low + dir; \ + const int next_bc = bc_.halves.low + dir; \ int summation = temp8_ + (next_bc&0xff); \ \ if(summation > 0xff) { \ @@ -571,18 +570,18 @@ template < class T, half_carry_result_ = 0; \ } \ \ - summation = (summation&7) ^ bc_.bytes.high; \ + summation = (summation&7) ^ bc_.halves.high; \ set_parity(summation); \ set_did_compute_flags(); case MicroOp::INDR: { INxR_STEP(-1); - REPEAT(bc_.bytes.high); + REPEAT(bc_.halves.high); } break; case MicroOp::INIR: { INxR_STEP(1); - REPEAT(bc_.bytes.high); + REPEAT(bc_.halves.high); } break; case MicroOp::IND: { @@ -598,13 +597,13 @@ template < class T, #undef INxR_STEP #define OUTxR_STEP(dir) \ - bc_.bytes.high--; \ + bc_.halves.high--; \ hl_.full += dir; \ \ - sign_result_ = zero_result_ = bit53_result_ = bc_.bytes.high; \ + sign_result_ = zero_result_ = bit53_result_ = bc_.halves.high; \ subtract_flag_ = (temp8_ >> 6) & Flag::Subtract; \ \ - int summation = temp8_ + hl_.bytes.low; \ + int summation = temp8_ + hl_.halves.low; \ if(summation > 0xff) { \ carry_result_ = Flag::Carry; \ half_carry_result_ = Flag::HalfCarry; \ @@ -612,12 +611,12 @@ template < class T, carry_result_ = half_carry_result_ = 0; \ } \ \ - summation = (summation&7) ^ bc_.bytes.high; \ + summation = (summation&7) ^ bc_.halves.high; \ set_parity(summation); \ set_did_compute_flags(); case MicroOp::OUT_R: - REPEAT(bc_.bytes.high); + REPEAT(bc_.halves.high); break; case MicroOp::OUTD: { @@ -638,7 +637,7 @@ template < class T, const uint8_t result = *static_cast(operation->source) & (1 << ((operation_ >> 3)&7)); if(current_instruction_page_->is_indexed || ((operation_&0x07) == 6)) { - bit53_result_ = memptr_.bytes.high; + bit53_result_ = memptr_.halves.high; } else { bit53_result_ = *static_cast(operation->source); } diff --git a/Processors/Z80/Implementation/Z80Storage.cpp b/Processors/Z80/Implementation/Z80Storage.cpp index b82a16370..e18836614 100644 --- a/Processors/Z80/Implementation/Z80Storage.cpp +++ b/Processors/Z80/Implementation/Z80Storage.cpp @@ -86,48 +86,48 @@ ProcessorStorage::ProcessorStorage() { #define Read5Inc(addr, val) Read5(addr, val), Inc16(addr) #define WriteInc(addr, val) Write3(addr, val), {MicroOp::Increment16, &addr.full} -#define Read16Inc(addr, val) ReadInc(addr, val.bytes.low), ReadInc(addr, val.bytes.high) -#define Read16(addr, val) ReadInc(addr, val.bytes.low), Read3(addr, val.bytes.high) +#define Read16Inc(addr, val) ReadInc(addr, val.halves.low), ReadInc(addr, val.halves.high) +#define Read16(addr, val) ReadInc(addr, val.halves.low), Read3(addr, val.halves.high) -#define Write16(addr, val) WriteInc(addr, val.bytes.low), Write3(addr, val.bytes.high) +#define Write16(addr, val) WriteInc(addr, val.halves.low), Write3(addr, val.halves.high) #define INDEX() {MicroOp::IndexedPlaceHolder}, ReadInc(pc_, temp8_), InternalOperation(10), {MicroOp::CalculateIndexAddress, &index} #define FINDEX() {MicroOp::IndexedPlaceHolder}, ReadInc(pc_, temp8_), {MicroOp::CalculateIndexAddress, &index} #define INDEX_ADDR() (add_offsets ? memptr_ : index) -#define Push(x) {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.bytes.high), {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.bytes.low) -#define Pop(x) Read3(sp_, x.bytes.low), {MicroOp::Increment16, &sp_.full}, Read3(sp_, x.bytes.high), {MicroOp::Increment16, &sp_.full} +#define Push(x) {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.halves.high), {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.halves.low) +#define Pop(x) Read3(sp_, x.halves.low), {MicroOp::Increment16, &sp_.full}, Read3(sp_, x.halves.high), {MicroOp::Increment16, &sp_.full} -#define Push8(x) {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.bytes.high), {MicroOp::Decrement16, &sp_.full}, Write5(sp_, x.bytes.low) -#define Pop7(x) Read3(sp_, x.bytes.low), {MicroOp::Increment16, &sp_.full}, Read4(sp_, x.bytes.high), {MicroOp::Increment16, &sp_.full} +#define Push8(x) {MicroOp::Decrement16, &sp_.full}, Write3(sp_, x.halves.high), {MicroOp::Decrement16, &sp_.full}, Write5(sp_, x.halves.low) +#define Pop7(x) Read3(sp_, x.halves.low), {MicroOp::Increment16, &sp_.full}, Read4(sp_, x.halves.high), {MicroOp::Increment16, &sp_.full} /* The following are actual instructions */ #define NOP Sequence(BusOp(Refresh(4))) #define JP(cc) StdInstr(Read16Inc(pc_, temp16_), {MicroOp::cc, nullptr}, {MicroOp::Move16, &temp16_.full, &pc_.full}) -#define CALL(cc) StdInstr(ReadInc(pc_, temp16_.bytes.low), {MicroOp::cc, conditional_call_untaken_program_.data()}, Read4Inc(pc_, temp16_.bytes.high), Push(pc_), {MicroOp::Move16, &temp16_.full, &pc_.full}) +#define CALL(cc) StdInstr(ReadInc(pc_, temp16_.halves.low), {MicroOp::cc, conditional_call_untaken_program_.data()}, Read4Inc(pc_, temp16_.halves.high), Push(pc_), {MicroOp::Move16, &temp16_.full, &pc_.full}) #define RET(cc) Instr(6, {MicroOp::cc, nullptr}, Pop(memptr_), {MicroOp::Move16, &memptr_.full, &pc_.full}) #define JR(cc) StdInstr(ReadInc(pc_, temp8_), {MicroOp::cc, nullptr}, InternalOperation(10), {MicroOp::CalculateIndexAddress, &pc_.full}, {MicroOp::Move16, &memptr_.full, &pc_.full}) #define RST() Instr(6, {MicroOp::CalculateRSTDestination}, Push(pc_), {MicroOp::Move16, &memptr_.full, &pc_.full}) #define LD(a, b) StdInstr({MicroOp::Move8, &b, &a}) #define LD_GROUP(r, ri) \ - LD(r, bc_.bytes.high), LD(r, bc_.bytes.low), LD(r, de_.bytes.high), LD(r, de_.bytes.low), \ - LD(r, index.bytes.high), LD(r, index.bytes.low), \ + LD(r, bc_.halves.high), LD(r, bc_.halves.low), LD(r, de_.halves.high), LD(r, de_.halves.low), \ + LD(r, index.halves.high), LD(r, index.halves.low), \ StdInstr(INDEX(), Read3(INDEX_ADDR(), temp8_), {MicroOp::Move8, &temp8_, &ri}), \ LD(r, a_) #define READ_OP_GROUP(op) \ - StdInstr({MicroOp::op, &bc_.bytes.high}), StdInstr({MicroOp::op, &bc_.bytes.low}), \ - StdInstr({MicroOp::op, &de_.bytes.high}), StdInstr({MicroOp::op, &de_.bytes.low}), \ - StdInstr({MicroOp::op, &index.bytes.high}), StdInstr({MicroOp::op, &index.bytes.low}), \ + StdInstr({MicroOp::op, &bc_.halves.high}), StdInstr({MicroOp::op, &bc_.halves.low}), \ + StdInstr({MicroOp::op, &de_.halves.high}), StdInstr({MicroOp::op, &de_.halves.low}), \ + StdInstr({MicroOp::op, &index.halves.high}), StdInstr({MicroOp::op, &index.halves.low}), \ StdInstr(INDEX(), Read3(INDEX_ADDR(), temp8_), {MicroOp::op, &temp8_}), \ StdInstr({MicroOp::op, &a_}) #define READ_OP_GROUP_D(op) \ - StdInstr({MicroOp::op, &bc_.bytes.high}), StdInstr({MicroOp::op, &bc_.bytes.low}), \ - StdInstr({MicroOp::op, &de_.bytes.high}), StdInstr({MicroOp::op, &de_.bytes.low}), \ - StdInstr({MicroOp::op, &index.bytes.high}), StdInstr({MicroOp::op, &index.bytes.low}), \ + StdInstr({MicroOp::op, &bc_.halves.high}), StdInstr({MicroOp::op, &bc_.halves.low}), \ + StdInstr({MicroOp::op, &de_.halves.high}), StdInstr({MicroOp::op, &de_.halves.low}), \ + StdInstr({MicroOp::op, &index.halves.high}), StdInstr({MicroOp::op, &index.halves.low}), \ StdInstr(INDEX(), Read4Pre(INDEX_ADDR(), temp8_), {MicroOp::op, &temp8_}), \ StdInstr({MicroOp::op, &a_}) @@ -135,19 +135,19 @@ ProcessorStorage::ProcessorStorage() { #define RMWI(x, op, ...) StdInstr(Read4(INDEX_ADDR(), x), {MicroOp::op, &x}, Write3(INDEX_ADDR(), x)) #define MODIFY_OP_GROUP(op) \ - StdInstr({MicroOp::op, &bc_.bytes.high}), StdInstr({MicroOp::op, &bc_.bytes.low}), \ - StdInstr({MicroOp::op, &de_.bytes.high}), StdInstr({MicroOp::op, &de_.bytes.low}), \ - StdInstr({MicroOp::op, &index.bytes.high}), StdInstr({MicroOp::op, &index.bytes.low}), \ + StdInstr({MicroOp::op, &bc_.halves.high}), StdInstr({MicroOp::op, &bc_.halves.low}), \ + StdInstr({MicroOp::op, &de_.halves.high}), StdInstr({MicroOp::op, &de_.halves.low}), \ + StdInstr({MicroOp::op, &index.halves.high}), StdInstr({MicroOp::op, &index.halves.low}), \ RMW(temp8_, op), \ StdInstr({MicroOp::op, &a_}) #define IX_MODIFY_OP_GROUP(op) \ - RMWI(bc_.bytes.high, op), \ - RMWI(bc_.bytes.low, op), \ - RMWI(de_.bytes.high, op), \ - RMWI(de_.bytes.low, op), \ - RMWI(hl_.bytes.high, op), \ - RMWI(hl_.bytes.low, op), \ + RMWI(bc_.halves.high, op), \ + RMWI(bc_.halves.low, op), \ + RMWI(de_.halves.high, op), \ + RMWI(de_.halves.low, op), \ + RMWI(hl_.halves.high, op), \ + RMWI(hl_.halves.low, op), \ RMWI(temp8_, op), \ RMWI(a_, op) @@ -166,7 +166,7 @@ ProcessorStorage::ProcessorStorage() { #define SBC16(d, s) StdInstr(InternalOperation(8), InternalOperation(6), {MicroOp::SBC16, &s.full, &d.full}) void ProcessorStorage::install_default_instruction_set() { - MicroOp conditional_call_untaken_program[] = Sequence(ReadInc(pc_, temp16_.bytes.high)); + MicroOp conditional_call_untaken_program[] = Sequence(ReadInc(pc_, temp16_.halves.high)); copy_program(conditional_call_untaken_program, conditional_call_untaken_program_); assemble_base_page(base_page_, hl_, false, cb_page_); @@ -225,12 +225,12 @@ void ProcessorStorage::install_default_instruction_set() { }; MicroOp irq_mode2_program[] = { { MicroOp::BeginIRQ }, - BusOp(IntAckStart(7, temp16_.bytes.low)), - BusOp(IntWait(temp16_.bytes.low)), - BusOp(IntAckEnd(temp16_.bytes.low)), + BusOp(IntAckStart(7, temp16_.halves.low)), + BusOp(IntWait(temp16_.halves.low)), + BusOp(IntAckEnd(temp16_.halves.low)), BusOp(Refresh(4)), Push(pc_), - { MicroOp::Move8, &ir_.bytes.high, &temp16_.bytes.high }, + { MicroOp::Move8, &ir_.halves.high, &temp16_.halves.high }, Read16(temp16_, pc_), { MicroOp::MoveToNextProgram } }; @@ -253,27 +253,27 @@ void ProcessorStorage::assemble_ed_page(InstructionPage &target) { NOP_ROW(), /* 0x10 */ NOP_ROW(), /* 0x20 */ NOP_ROW(), /* 0x30 */ - /* 0x40 IN B, (C); 0x41 OUT (C), B */ IN_OUT(bc_.bytes.high), + /* 0x40 IN B, (C); 0x41 OUT (C), B */ IN_OUT(bc_.halves.high), /* 0x42 SBC HL, BC */ SBC16(hl_, bc_), /* 0x43 LD (nn), BC */ StdInstr(Read16Inc(pc_, memptr_), Write16(memptr_, bc_)), /* 0x44 NEG */ StdInstr({MicroOp::NEG}), /* 0x45 RETN */ StdInstr(Pop(pc_), {MicroOp::RETN}), - /* 0x46 IM 0 */ StdInstr({MicroOp::IM}), /* 0x47 LD I, A */ Instr(6, {MicroOp::Move8, &a_, &ir_.bytes.high}), - /* 0x48 IN C, (C); 0x49 OUT (C), C */ IN_OUT(bc_.bytes.low), + /* 0x46 IM 0 */ StdInstr({MicroOp::IM}), /* 0x47 LD I, A */ Instr(6, {MicroOp::Move8, &a_, &ir_.halves.high}), + /* 0x48 IN C, (C); 0x49 OUT (C), C */ IN_OUT(bc_.halves.low), /* 0x4a ADC HL, BC */ ADC16(hl_, bc_), /* 0x4b LD BC, (nn) */ StdInstr(Read16Inc(pc_, temp16_), Read16(temp16_, bc_)), /* 0x4c NEG */ StdInstr({MicroOp::NEG}), /* 0x4d RETI */ StdInstr(Pop(pc_), {MicroOp::RETN}), - /* 0x4e IM 0/1 */ StdInstr({MicroOp::IM}), /* 0x4f LD R, A */ Instr(6, {MicroOp::Move8, &a_, &ir_.bytes.low}), - /* 0x50 IN D, (C); 0x51 OUT (C), D */ IN_OUT(de_.bytes.high), + /* 0x4e IM 0/1 */ StdInstr({MicroOp::IM}), /* 0x4f LD R, A */ Instr(6, {MicroOp::Move8, &a_, &ir_.halves.low}), + /* 0x50 IN D, (C); 0x51 OUT (C), D */ IN_OUT(de_.halves.high), /* 0x52 SBC HL, DE */ SBC16(hl_, de_), /* 0x53 LD (nn), DE */ StdInstr(Read16Inc(pc_, memptr_), Write16(memptr_, de_)), /* 0x54 NEG */ StdInstr({MicroOp::NEG}), /* 0x55 RETN */ StdInstr(Pop(pc_), {MicroOp::RETN}), - /* 0x56 IM 1 */ StdInstr({MicroOp::IM}), /* 0x57 LD A, I */ Instr(6, {MicroOp::Move8, &ir_.bytes.high, &a_}, {MicroOp::SetAFlags}), - /* 0x58 IN E, (C); 0x59 OUT (C), E */ IN_OUT(de_.bytes.low), + /* 0x56 IM 1 */ StdInstr({MicroOp::IM}), /* 0x57 LD A, I */ Instr(6, {MicroOp::Move8, &ir_.halves.high, &a_}, {MicroOp::SetAFlags}), + /* 0x58 IN E, (C); 0x59 OUT (C), E */ IN_OUT(de_.halves.low), /* 0x5a ADC HL, DE */ ADC16(hl_, de_), /* 0x5b LD DE, (nn) */ StdInstr(Read16Inc(pc_, temp16_), Read16(temp16_, de_)), /* 0x5c NEG */ StdInstr({MicroOp::NEG}), /* 0x5d RETN */ StdInstr(Pop(pc_), {MicroOp::RETN}), - /* 0x5e IM 2 */ StdInstr({MicroOp::IM}), /* 0x5f LD A, R */ Instr(6, {MicroOp::Move8, &ir_.bytes.low, &a_}, {MicroOp::SetAFlags}), - /* 0x60 IN H, (C); 0x61 OUT (C), H */ IN_OUT(hl_.bytes.high), + /* 0x5e IM 2 */ StdInstr({MicroOp::IM}), /* 0x5f LD A, R */ Instr(6, {MicroOp::Move8, &ir_.halves.low, &a_}, {MicroOp::SetAFlags}), + /* 0x60 IN H, (C); 0x61 OUT (C), H */ IN_OUT(hl_.halves.high), /* 0x62 SBC HL, HL */ SBC16(hl_, hl_), /* 0x63 LD (nn), HL */ StdInstr(Read16Inc(pc_, memptr_), Write16(memptr_, hl_)), /* 0x64 NEG */ StdInstr({MicroOp::NEG}), /* 0x65 RETN */ StdInstr(Pop(pc_), {MicroOp::RETN}), /* 0x66 IM 0 */ StdInstr({MicroOp::IM}), /* 0x67 RRD */ StdInstr(Read3(hl_, temp8_), InternalOperation(8), {MicroOp::RRD}, Write3(hl_, temp8_)), - /* 0x68 IN L, (C); 0x69 OUT (C), L */ IN_OUT(hl_.bytes.low), + /* 0x68 IN L, (C); 0x69 OUT (C), L */ IN_OUT(hl_.halves.low), /* 0x6a ADC HL, HL */ ADC16(hl_, hl_), /* 0x6b LD HL, (nn) */ StdInstr(Read16Inc(pc_, temp16_), Read16(temp16_, hl_)), /* 0x6c NEG */ StdInstr({MicroOp::NEG}), /* 0x6d RETN */ StdInstr(Pop(pc_), {MicroOp::RETN}), /* 0x6e IM 0/1 */ StdInstr({MicroOp::IM}), /* 0x6f RLD */ StdInstr(Read3(hl_, temp8_), InternalOperation(8), {MicroOp::RLD}, Write3(hl_, temp8_)), @@ -316,7 +316,7 @@ void ProcessorStorage::assemble_ed_page(InstructionPage &target) { #undef NOP_ROW } -void ProcessorStorage::assemble_cb_page(InstructionPage &target, RegisterPair &index, bool add_offsets) { +void ProcessorStorage::assemble_cb_page(InstructionPage &target, RegisterPair16 &index, bool add_offsets) { #define OCTO_OP_GROUP(m, x) m(x), m(x), m(x), m(x), m(x), m(x), m(x), m(x) #define CB_PAGE(m, p) m(RLC), m(RRC), m(RL), m(RR), m(SLA), m(SRA), m(SLL), m(SRL), OCTO_OP_GROUP(p, BIT), OCTO_OP_GROUP(m, RES), OCTO_OP_GROUP(m, SET) @@ -343,7 +343,7 @@ void ProcessorStorage::assemble_cb_page(InstructionPage &target, RegisterPair &i #undef CB_PAGE } -void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair &index, bool add_offsets, InstructionPage &cb_page) { +void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair16 &index, bool add_offsets, InstructionPage &cb_page) { #define INC_DEC_LD(r) \ StdInstr({MicroOp::Increment8, &r}), \ StdInstr({MicroOp::Decrement8, &r}), \ @@ -360,14 +360,14 @@ void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair /* 0x02 LD (BC), A */ StdInstr({MicroOp::SetAddrAMemptr, &bc_.full}, Write3(bc_, a_)), /* 0x03 INC BC; 0x04 INC B; 0x05 DEC B; 0x06 LD B, n */ - INC_INC_DEC_LD(bc_, bc_.bytes.high), + INC_INC_DEC_LD(bc_, bc_.halves.high), /* 0x07 RLCA */ StdInstr({MicroOp::RLCA}), /* 0x08 EX AF, AF' */ StdInstr({MicroOp::ExAFAFDash}), /* 0x09 ADD HL, BC */ ADD16(index, bc_), /* 0x0a LD A, (BC) */ StdInstr({MicroOp::Move16, &bc_.full, &memptr_.full}, Read3(memptr_, a_), Inc16(memptr_)), /* 0x0b DEC BC; 0x0c INC C; 0x0d DEC C; 0x0e LD C, n */ - DEC_INC_DEC_LD(bc_, bc_.bytes.low), + DEC_INC_DEC_LD(bc_, bc_.halves.low), /* 0x0f RRCA */ StdInstr({MicroOp::RRCA}), /* 0x10 DJNZ */ Instr(6, ReadInc(pc_, temp8_), {MicroOp::DJNZ}, InternalOperation(10), {MicroOp::CalculateIndexAddress, &pc_.full}, {MicroOp::Move16, &memptr_.full, &pc_.full}), @@ -375,7 +375,7 @@ void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair /* 0x12 LD (DE), A */ StdInstr({MicroOp::SetAddrAMemptr, &de_.full}, Write3(de_, a_)), /* 0x13 INC DE; 0x14 INC D; 0x15 DEC D; 0x16 LD D, n */ - INC_INC_DEC_LD(de_, de_.bytes.high), + INC_INC_DEC_LD(de_, de_.halves.high), /* 0x17 RLA */ StdInstr({MicroOp::RLA}), /* 0x18 JR */ StdInstr(ReadInc(pc_, temp8_), InternalOperation(10), {MicroOp::CalculateIndexAddress, &pc_.full}, {MicroOp::Move16, &memptr_.full, &pc_.full}), @@ -383,21 +383,21 @@ void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair /* 0x1a LD A, (DE) */ StdInstr({MicroOp::Move16, &de_.full, &memptr_.full}, Read3(memptr_, a_), Inc16(memptr_)), /* 0x1b DEC DE; 0x1c INC E; 0x1d DEC E; 0x1e LD E, n */ - DEC_INC_DEC_LD(de_, de_.bytes.low), + DEC_INC_DEC_LD(de_, de_.halves.low), /* 0x1f RRA */ StdInstr({MicroOp::RRA}), /* 0x20 JR NZ */ JR(TestNZ), /* 0x21 LD HL, nn */ StdInstr(Read16Inc(pc_, index)), /* 0x22 LD (nn), HL */ StdInstr(Read16Inc(pc_, memptr_), Write16(memptr_, index)), /* 0x23 INC HL; 0x24 INC H; 0x25 DEC H; 0x26 LD H, n */ - INC_INC_DEC_LD(index, index.bytes.high), + INC_INC_DEC_LD(index, index.halves.high), /* 0x27 DAA */ StdInstr({MicroOp::DAA}), /* 0x28 JR Z */ JR(TestZ), /* 0x29 ADD HL, HL */ ADD16(index, index), /* 0x2a LD HL, (nn) */ StdInstr(Read16Inc(pc_, temp16_), Read16(temp16_, index)), /* 0x2b DEC HL; 0x2c INC L; 0x2d DEC L; 0x2e LD L, n */ - DEC_INC_DEC_LD(index, index.bytes.low), + DEC_INC_DEC_LD(index, index.halves.low), /* 0x2f CPL */ StdInstr({MicroOp::CPL}), /* 0x30 JR NC */ JR(TestNC), /* 0x31 LD SP, nn */ StdInstr(Read16Inc(pc_, sp_)), @@ -418,29 +418,29 @@ void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair /* 0x3f CCF */ StdInstr({MicroOp::CCF}), /* 0x40 LD B, B; 0x41 LD B, C; 0x42 LD B, D; 0x43 LD B, E; 0x44 LD B, H; 0x45 LD B, L; 0x46 LD B, (HL); 0x47 LD B, A */ - LD_GROUP(bc_.bytes.high, bc_.bytes.high), + LD_GROUP(bc_.halves.high, bc_.halves.high), /* 0x48 LD C, B; 0x49 LD C, C; 0x4a LD C, D; 0x4b LD C, E; 0x4c LD C, H; 0x4d LD C, L; 0x4e LD C, (HL); 0x4f LD C, A */ - LD_GROUP(bc_.bytes.low, bc_.bytes.low), + LD_GROUP(bc_.halves.low, bc_.halves.low), /* 0x50 LD D, B; 0x51 LD D, C; 0x52 LD D, D; 0x53 LD D, E; 0x54 LD D, H; 0x55 LD D, L; 0x56 LD D, (HL); 0x57 LD D, A */ - LD_GROUP(de_.bytes.high, de_.bytes.high), + LD_GROUP(de_.halves.high, de_.halves.high), /* 0x58 LD E, B; 0x59 LD E, C; 0x5a LD E, D; 0x5b LD E, E; 0x5c LD E, H; 0x5d LD E, L; 0x5e LD E, (HL); 0x5f LD E, A */ - LD_GROUP(de_.bytes.low, de_.bytes.low), + LD_GROUP(de_.halves.low, de_.halves.low), /* 0x60 LD H, B; 0x61 LD H, C; 0x62 LD H, D; 0x63 LD H, E; 0x64 LD H, H; 0x65 LD H, L; 0x66 LD H, (HL); 0x67 LD H, A */ - LD_GROUP(index.bytes.high, hl_.bytes.high), + LD_GROUP(index.halves.high, hl_.halves.high), /* 0x68 LD L, B; 0x69 LD L, C; 0x6a LD L, D; 0x6b LD L, E; 0x6c LD L, H; 0x6d LD H, L; 0x6e LD L, (HL); 0x6f LD L, A */ - LD_GROUP(index.bytes.low, hl_.bytes.low), + LD_GROUP(index.halves.low, hl_.halves.low), - /* 0x70 LD (HL), B */ StdInstr(INDEX(), Write3(INDEX_ADDR(), bc_.bytes.high)), - /* 0x71 LD (HL), C */ StdInstr(INDEX(), Write3(INDEX_ADDR(), bc_.bytes.low)), - /* 0x72 LD (HL), D */ StdInstr(INDEX(), Write3(INDEX_ADDR(), de_.bytes.high)), - /* 0x73 LD (HL), E */ StdInstr(INDEX(), Write3(INDEX_ADDR(), de_.bytes.low)), - /* 0x74 LD (HL), H */ StdInstr(INDEX(), Write3(INDEX_ADDR(), hl_.bytes.high)), // neither of these stores parts of the index register; - /* 0x75 LD (HL), L */ StdInstr(INDEX(), Write3(INDEX_ADDR(), hl_.bytes.low)), // they always store exactly H and L. + /* 0x70 LD (HL), B */ StdInstr(INDEX(), Write3(INDEX_ADDR(), bc_.halves.high)), + /* 0x71 LD (HL), C */ StdInstr(INDEX(), Write3(INDEX_ADDR(), bc_.halves.low)), + /* 0x72 LD (HL), D */ StdInstr(INDEX(), Write3(INDEX_ADDR(), de_.halves.high)), + /* 0x73 LD (HL), E */ StdInstr(INDEX(), Write3(INDEX_ADDR(), de_.halves.low)), + /* 0x74 LD (HL), H */ StdInstr(INDEX(), Write3(INDEX_ADDR(), hl_.halves.high)), // neither of these stores parts of the index register; + /* 0x75 LD (HL), L */ StdInstr(INDEX(), Write3(INDEX_ADDR(), hl_.halves.low)), // they always store exactly H and L. /* 0x76 HALT */ StdInstr({MicroOp::HALT}), /* 0x77 LD (HL), A */ StdInstr(INDEX(), Write3(INDEX_ADDR(), a_)), @@ -478,16 +478,16 @@ void ProcessorStorage::assemble_base_page(InstructionPage &target, RegisterPair /* 0xc7 RST 00h */ RST(), /* 0xc8 RET Z */ RET(TestZ), /* 0xc9 RET */ StdInstr(Pop(pc_)), /* 0xca JP Z */ JP(TestZ), /* 0xcb [CB page] */StdInstr(FINDEX(), {MicroOp::SetInstructionPage, &cb_page}), - /* 0xcc CALL Z */ CALL(TestZ), /* 0xcd CALL */ StdInstr(ReadInc(pc_, temp16_.bytes.low), Read4Inc(pc_, temp16_.bytes.high), Push(pc_), {MicroOp::Move16, &temp16_.full, &pc_.full}), + /* 0xcc CALL Z */ CALL(TestZ), /* 0xcd CALL */ StdInstr(ReadInc(pc_, temp16_.halves.low), Read4Inc(pc_, temp16_.halves.high), Push(pc_), {MicroOp::Move16, &temp16_.full, &pc_.full}), /* 0xce ADC A, n */ StdInstr(ReadInc(pc_, temp8_), {MicroOp::ADC8, &temp8_}), /* 0xcf RST 08h */ RST(), /* 0xd0 RET NC */ RET(TestNC), /* 0xd1 POP DE */ StdInstr(Pop(de_)), - /* 0xd2 JP NC */ JP(TestNC), /* 0xd3 OUT (n), A */StdInstr(ReadInc(pc_, temp16_.bytes.low), {MicroOp::Move8, &a_, &temp16_.bytes.high}, Output(temp16_, a_)), + /* 0xd2 JP NC */ JP(TestNC), /* 0xd3 OUT (n), A */StdInstr(ReadInc(pc_, temp16_.halves.low), {MicroOp::Move8, &a_, &temp16_.halves.high}, Output(temp16_, a_)), /* 0xd4 CALL NC */ CALL(TestNC), /* 0xd5 PUSH DE */ Instr(6, Push(de_)), /* 0xd6 SUB n */ StdInstr(ReadInc(pc_, temp8_), {MicroOp::SUB8, &temp8_}), /* 0xd7 RST 10h */ RST(), /* 0xd8 RET C */ RET(TestC), /* 0xd9 EXX */ StdInstr({MicroOp::EXX}), - /* 0xda JP C */ JP(TestC), /* 0xdb IN A, (n) */StdInstr(ReadInc(pc_, temp16_.bytes.low), {MicroOp::Move8, &a_, &temp16_.bytes.high}, Input(temp16_, a_)), + /* 0xda JP C */ JP(TestC), /* 0xdb IN A, (n) */StdInstr(ReadInc(pc_, temp16_.halves.low), {MicroOp::Move8, &a_, &temp16_.halves.high}, Input(temp16_, a_)), /* 0xdc CALL C */ CALL(TestC), /* 0xdd [DD page] */StdInstr({MicroOp::SetInstructionPage, &dd_page_}), /* 0xde SBC A, n */ StdInstr(ReadInc(pc_, temp8_), {MicroOp::SBC8, &temp8_}), /* 0xdf RST 18h */ RST(), diff --git a/Processors/Z80/Implementation/Z80Storage.hpp b/Processors/Z80/Implementation/Z80Storage.hpp index 76f63894e..bc1a89cd7 100644 --- a/Processors/Z80/Implementation/Z80Storage.hpp +++ b/Processors/Z80/Implementation/Z80Storage.hpp @@ -118,10 +118,10 @@ class ProcessorStorage { void install_default_instruction_set(); uint8_t a_; - RegisterPair bc_, de_, hl_; - RegisterPair afDash_, bcDash_, deDash_, hlDash_; - RegisterPair ix_, iy_, pc_, sp_; - RegisterPair ir_, refresh_addr_; + RegisterPair16 bc_, de_, hl_; + RegisterPair16 afDash_, bcDash_, deDash_, hlDash_; + RegisterPair16 ix_, iy_, pc_, sp_; + RegisterPair16 ir_, refresh_addr_; bool iff1_ = false, iff2_ = false; int interrupt_mode_ = 0; uint16_t pc_increment_ = 1; @@ -153,7 +153,7 @@ class ProcessorStorage { bool wait_line_ = false; uint8_t operation_; - RegisterPair temp16_, memptr_; + RegisterPair16 temp16_, memptr_; uint8_t temp8_; const MicroOp *scheduled_program_counter_ = nullptr; @@ -214,7 +214,7 @@ class ProcessorStorage { void assemble_fetch_decode_execute(InstructionPage &target, int length); void assemble_ed_page(InstructionPage &target); - void assemble_cb_page(InstructionPage &target, RegisterPair &index, bool add_offsets); - void assemble_base_page(InstructionPage &target, RegisterPair &index, bool add_offsets, InstructionPage &cb_page); + void assemble_cb_page(InstructionPage &target, RegisterPair16 &index, bool add_offsets); + void assemble_base_page(InstructionPage &target, RegisterPair16 &index, bool add_offsets, InstructionPage &cb_page); }; From de56d48b2fd0de721ad1be9470334672efe7f5f5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 10 Mar 2019 17:27:34 -0400 Subject: [PATCH 003/239] Embraces a more communicative 68000 bus. --- .../Clock Signal.xcodeproj/project.pbxproj | 2 + Processors/68000/68000.hpp | 93 +++++++++++++++---- .../Implementation/68000Implementation.hpp | 10 ++ .../68000/Implementation/68000Storage.cpp | 90 +++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 78 ++++++++++++++-- Processors/RegisterSizes.hpp | 2 +- 6 files changed, 237 insertions(+), 38 deletions(-) create mode 100644 Processors/68000/Implementation/68000Implementation.hpp diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 0ee54c1d9..52dbe76d7 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -1464,6 +1464,7 @@ 4BFF1D342233778C00838EA1 /* 68000.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000.hpp; sourceTree = ""; }; 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000Storage.hpp; sourceTree = ""; }; 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = 68000Storage.cpp; sourceTree = ""; }; + 4BFF1D3B2235714900838EA1 /* 68000Implementation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = 68000Implementation.hpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -3216,6 +3217,7 @@ children = ( 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */, 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */, + 4BFF1D3B2235714900838EA1 /* 68000Implementation.hpp */, ); path = Implementation; sourceTree = ""; diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 4357ba094..26087b9c8 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -10,42 +10,95 @@ #define MC68000_h #include +#include #include #include "../../ClockReceiver/ClockReceiver.hpp" +#include "../RegisterSizes.hpp" namespace CPU { namespace MC68000 { +/*! + A microcycle is an atomic unit of 68000 bus activity — it is a single item large enough + fully to specify a sequence of bus events that occur without any possible interruption. + + Concretely, a standard read cycle breaks down into at least two microcycles: + + 1) a 5 half-cycle length microcycle in which the address strobe is signalled; and + 2) a 3 half-cycle length microcycle in which at least one of the data strobes is + signalled, and the data bus is sampled. + + That is, assuming DTack were signalled when microcycle (1) ended. If not then additional + wait state microcycles would fall between those two parts. + + The 68000 data sheet defines when the address becomes valid during microcycle (1), and + when the address strobe is actually asserted. But those timings are fixed. So simply + telling you that this was a microcycle during which the address trobe was signalled is + sufficient fully to describe the bus activity. + + (Aside: see the 68000 template's definition for options re: implicit DTack; if your + 68000 owner can always predict exactly how long it will hold DTack following observation + of an address-strobing microcycle, it can just supply those periods for accounting and + avoid the runtime cost of actual DTack emulation. But such as the bus allows.) +*/ struct Microcycle { - enum Operation { - Read16, - Write16, - ReadHigh, - ReadLow, - WriteHigh, - WriteLow, + /* + The operation code is a mask of all the signals that relevantly became active during + this microcycle. + */ + static const int Address = 1 << 0; + static const int UpperData = 1 << 1; + static const int LowerData = 1 << 2; + static const int ReadWrite = 1 << 3; // Set = read; unset = write. - /// The data bus is not tristated, but no data request is made. - Idle, + int operation = 0; + HalfCycles length = HalfCycles(2); - /// No data bus interaction at all; bus is tristated. - None - }; + /*! + For expediency, this provides a full 32-bit byte-resolution address — e.g. + if reading indirectly via an address register, this will indicate the full + value of the address register. - Operation operation = Operation::None; - Cycles length = Cycles(2); - uint32_t *address = nullptr; - uint16_t *value = nullptr; + The receiver should ignore bits 0 and 24+. + */ + const uint32_t *address = nullptr; + RegisterPair16 *value = nullptr; }; +/*! + This is the prototype for a 68000 bus handler; real bus handlers can descend from this + in order to get default implementations of any changes that may occur in the expected interface. +*/ class BusHandler { public: - Cycles perform_machine_cycle(const Microcycle &cycle) { - return Cycles(0); + static const int Data = 1 << 0; + static const int Program = 1 << 1; + static const int Supervisor = 1 << 2; + static const int Interrupt = Data | Program | Supervisor; + + /*! + Provides the bus handler with a single Microcycle to 'perform', along with the + contents of the FC0, FC1 and FC2 lines by way of processor_status. The symbols + above, Data, Program, Supervisor and Interrupt can be used to help to decode the + processor status if desired; in summary: + + If all three bits are set, this is an interrupt acknowledgement. + + If the data bit is set, the 68000 is fetching data. + + If the program bit is set, the 68000 is fetching instructions. + + It the supervisor bit is set, the 68000 is currently in supervisor mode. + + Neither program nor data being set has an undefined meaning. As does both program + and data being set, but this not being an interrupt. + */ + HalfCycles perform_bus_operation(const Microcycle &cycle, int processor_status) { + return HalfCycles(0); } - void flush(); + void flush() {} }; #include "Implementation/68000Storage.hpp" @@ -61,6 +114,8 @@ template class Processor: public ProcessorBase { T &bus_handler_; }; +#include "Implementation/68000Implementation.hpp" + } } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp new file mode 100644 index 000000000..59ff4bbd8 --- /dev/null +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -0,0 +1,10 @@ +// +// 68000Implementation.hpp +// Clock Signal +// +// Created by Thomas Harte on 10/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +template void Processor::run_for(Cycles cycles) { +} diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index ec81695c9..3db0e75da 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -11,9 +11,14 @@ using namespace CPU::MC68000; ProcessorStorage::ProcessorStorage() { - reset_program_ = assemble_program("n- n- n- n- n- nn nF nV nv np np"); + reset_program_ = assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); + + // Set initial state. Largely TODO. + active_program_ = reset_program_.data(); + effective_address_ = 0; } +// TODO: allow actions to be specified, of course. std::vector ProcessorStorage::assemble_program(const char *access_pattern) { std::vector steps; @@ -22,24 +27,85 @@ std::vector ProcessorStorage::assemble_program(const cha Step step; switch(*access_pattern) { - case ' ': break; // Space acts as a no-op; it's for clarity only. - - case 'n': // Nothing occurs; supply as 'None'. - step.microcycle.operation = Microcycle::Operation::None; + case '\t': case ' ': // White space acts as a no-op; it's for clarity only. + ++access_pattern; break; - case '-': // An idle cycle; distinct from a 'None'. - step.microcycle.operation = Microcycle::Operation::Idle; + case 'n': // This might be a plain NOP cycle, in which some internal calculation occurs, + // or it might pair off with something afterwards. + switch(access_pattern[1]) { + default: // This is probably a pure NOP; if what comes after this 'n' isn't actually + // valid, it should be caught in the outer switch the next time around the loop. + steps.push_back(step); + ++access_pattern; + break; + + case '-': // This is two NOPs in a row. + steps.push_back(step); + steps.push_back(step); + access_pattern += 2; + break; + + case 'F': // Fetch SSP MSW. + case 'f': // Fetch SSP LSW. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.address = &effective_address_; + step.microcycle.value = isupper(access_pattern[1]) ? &stack_pointers_[1].halves.high : &stack_pointers_[1].halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.action = Step::Action::IncrementEffectiveAddress; + steps.push_back(step); + + access_pattern += 2; + break; + + case 'V': // Fetch exception vector low. + case 'v': // Fetch exception vector high. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.address = &effective_address_; + step.microcycle.value = isupper(access_pattern[1]) ? &program_counter_.halves.high : &program_counter_.halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.action = Step::Action::IncrementEffectiveAddress; + steps.push_back(step); + + access_pattern += 2; + break; + + case 'p': // Fetch from the program counter into the prefetch queue. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.address = &program_counter_.full; + step.microcycle.value = &prefetch_queue_[1]; + step.action = Step::Action::AdvancePrefetch; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.action = Step::Action::IncrementProgramCounter; + steps.push_back(step); + + access_pattern += 2; + break; + } break; - default: assert(false); + default: + std::cerr << "MC68000 program builder; Unknown access type " << *access_pattern << std::endl; + assert(false); } - - steps.push_back(step); - ++access_pattern; } - // TODO: add actions, somehow. + // Add a final 'ScheduleNextProgram' sentinel. + Step end_program; + end_program.action = Step::Action::ScheduleNextProgram; + steps.push_back(end_program); return steps; } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 2fc7b97a2..78279d075 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -14,29 +14,55 @@ class ProcessorStorage { ProcessorStorage(); protected: - uint32_t data_[8]; - uint32_t address_[7]; - uint32_t stack_pointers_[2]; - uint32_t program_counter_; + RegisterPair32 data_[8]; + RegisterPair32 address_[7]; + RegisterPair32 stack_pointers_[2]; // [0] = user stack pointer; [1] = supervisor + RegisterPair32 program_counter_; + + RegisterPair16 prefetch_queue_[2]; enum class State { Reset, Normal }; + // Generic sources and targets for memory operations. + uint32_t effective_address_; + RegisterPair32 bus_data_; + /*! A step is a microcycle to perform plus an action to occur afterwards, if any. */ struct Step { Microcycle microcycle; enum class Action { - None - } action_ = Action::None; + None, + + /// Performs effective_address_ += 2. + IncrementEffectiveAddress, + + /// Performs program_counter_ += 2. + IncrementProgramCounter, + + /// Copies prefetch_queue_[1] to prefetch_queue_[0]. + AdvancePrefetch, + + /*! + Terminates an atomic program; if nothing else is pending, schedules the next instruction. + This action is special in that it usurps any included microcycle. So any Step with this + as its action acts as an end-of-list sentinel. + */ + ScheduleNextProgram + + } action = Action::None; }; // Special programs. std::vector reset_program_; + // Current program pointer. + Step *active_program_ = nullptr; + private: enum class DataSize { Byte, Word, LongWord @@ -44,6 +70,46 @@ class ProcessorStorage { enum class AddressingMode { }; + /*! + Produces a vector of Steps that implement the described program. + + @param access_pattern A string describing the bus activity that occurs + during this program. This should follow the same general pattern as + those in yacht.txt; full description below. + + @discussion + The access pattern is defined, as in yacht.txt, to be a string consisting + of the following discrete bus actions. Spaces are ignored. + + * n: no operation; data bus is not used; + * -: idle state; data bus is not used but is also not available; + * p: program fetch; reads from the PC and adds two to it; + * W: write MSW of something onto the bus; + * w: write LSW of something onto the bus; + * R: read MSW of something from the bus; + * r: read LSW of soemthing from the bus; + * S: push the MSW of something onto the stack; + * s: push the LSW of something onto the stack; + * U: pop the MSW of something from the stack; + * u: pop the LSW of something from the stack; + * V: fetch a vector's MSW; + * v: fetch a vector's LSW; + * i: acquire interrupt vector in an IACK cycle; + * F: fetch the SSPs MSW; + * f: fetch the SSP's LSW. + + Quite a lot of that is duplicative, implying both something about internal + state and something about what's observable on the bus, but it's helpful to + stick to that document's coding exactly for easier debugging. + + p fetches will fill the prefetch queue, attaching an action to both the + step that precedes them and to themselves. The SSP fetches will go straight + to the SSP. + + Other actions will by default act via effective_address_ and bus_data_. + The user should fill in the steps necessary to get data into or extract + data from those. + */ std::vector assemble_program(const char *access_pattern); }; diff --git a/Processors/RegisterSizes.hpp b/Processors/RegisterSizes.hpp index 1252b2634..2cb9af172 100644 --- a/Processors/RegisterSizes.hpp +++ b/Processors/RegisterSizes.hpp @@ -32,7 +32,7 @@ template union RegisterPair { }; typedef RegisterPair RegisterPair16; -typedef RegisterPair RegisterPair32; +typedef RegisterPair RegisterPair32; } From 98aa597510bb3e90d538dd20fca2be32207cf23b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 10 Mar 2019 17:42:13 -0400 Subject: [PATCH 004/239] A theoretical 68000 could now perform its /RESET. That's all though. --- Processors/68000/68000.hpp | 29 ++++---------- .../Implementation/68000Implementation.hpp | 40 ++++++++++++++++++- .../68000/Implementation/68000Storage.cpp | 7 ++-- .../68000/Implementation/68000Storage.hpp | 13 ++---- 4 files changed, 54 insertions(+), 35 deletions(-) diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 26087b9c8..8442f7f96 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -52,6 +52,9 @@ struct Microcycle { static const int LowerData = 1 << 2; static const int ReadWrite = 1 << 3; // Set = read; unset = write. + static const int IsData = 1 << 4; // i.e. this is FC0. + static const int IsProgram = 1 << 5; // i.e. this is FC1. + int operation = 0; HalfCycles length = HalfCycles(2); @@ -72,29 +75,13 @@ struct Microcycle { */ class BusHandler { public: - static const int Data = 1 << 0; - static const int Program = 1 << 1; - static const int Supervisor = 1 << 2; - static const int Interrupt = Data | Program | Supervisor; - /*! - Provides the bus handler with a single Microcycle to 'perform', along with the - contents of the FC0, FC1 and FC2 lines by way of processor_status. The symbols - above, Data, Program, Supervisor and Interrupt can be used to help to decode the - processor status if desired; in summary: + Provides the bus handler with a single Microcycle to 'perform'. - If all three bits are set, this is an interrupt acknowledgement. - - If the data bit is set, the 68000 is fetching data. - - If the program bit is set, the 68000 is fetching instructions. - - It the supervisor bit is set, the 68000 is currently in supervisor mode. - - Neither program nor data being set has an undefined meaning. As does both program - and data being set, but this not being an interrupt. + FC0 and FC1 are provided inside the microcycle as the IsData and IsProgram + flags; FC2 is provided here as is_supervisor — it'll be either 0 or 1. */ - HalfCycles perform_bus_operation(const Microcycle &cycle, int processor_status) { + HalfCycles perform_bus_operation(const Microcycle &cycle, int is_supervisor) { return HalfCycles(0); } @@ -106,7 +93,7 @@ class BusHandler { class ProcessorBase: public ProcessorStorage { }; -template class Processor: public ProcessorBase { +template class Processor: public ProcessorBase { public: void run_for(const Cycles cycles); diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 59ff4bbd8..8c570d128 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -6,5 +6,43 @@ // Copyright © 2019 Thomas Harte. All rights reserved. // -template void Processor::run_for(Cycles cycles) { +template void Processor::run_for(Cycles cycles) { + // TODO: obey the 'cycles' count. + while(true) { + // Check whether the program is exhausted. + if(active_program_->action == Step::Action::ScheduleNextProgram) { + std::cerr << "68000 Abilities exhausted" << std::endl; + return; + } + + // The program is not exhausted, so perform the microcycle. + + // Check for DTack if this isn't being treated implicitly. + if(!dtack_is_implicit) { + if(active_program_->microcycle.operation & (Microcycle::UpperData | Microcycle::LowerData) && !dtack_) { + // TODO: perform wait state. + continue; + } + } + + // Perform the microcycle. + bus_handler_.perform_bus_operation(active_program_->microcycle, is_supervisor_); + + // Perform the post-hoc action. + switch(active_program_->action) { + default: + std::cerr << "Unimplemented 68000 action: " << int(active_program_->action) << std::endl; + return; + break; + + case Step::Action::None: break; + + case Step::Action::IncrementEffectiveAddress: effective_address_ += 2; break; + case Step::Action::IncrementProgramCounter: program_counter_.full += 2; break; + + case Step::Action::AdvancePrefetch: + prefetch_queue_[0] = prefetch_queue_[1]; + break; + } + } } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 3db0e75da..356ec4a0a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -16,6 +16,7 @@ ProcessorStorage::ProcessorStorage() { // Set initial state. Largely TODO. active_program_ = reset_program_.data(); effective_address_ = 0; + is_supervisor_ = 1; } // TODO: allow actions to be specified, of course. @@ -49,7 +50,7 @@ std::vector ProcessorStorage::assemble_program(const cha case 'F': // Fetch SSP MSW. case 'f': // Fetch SSP LSW. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &stack_pointers_[1].halves.high : &stack_pointers_[1].halves.low; steps.push_back(step); @@ -65,7 +66,7 @@ std::vector ProcessorStorage::assemble_program(const cha case 'V': // Fetch exception vector low. case 'v': // Fetch exception vector high. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &program_counter_.halves.high : &program_counter_.halves.low; steps.push_back(step); @@ -80,7 +81,7 @@ std::vector ProcessorStorage::assemble_program(const cha case 'p': // Fetch from the program counter into the prefetch queue. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite; + step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; step.microcycle.address = &program_counter_.full; step.microcycle.value = &prefetch_queue_[1]; step.action = Step::Action::AdvancePrefetch; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 78279d075..ac90504cb 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -20,11 +20,10 @@ class ProcessorStorage { RegisterPair32 program_counter_; RegisterPair16 prefetch_queue_[2]; + bool dtack_ = true; - enum class State { - Reset, - Normal - }; + // Various status bits. + int is_supervisor_; // Generic sources and targets for memory operations. uint32_t effective_address_; @@ -64,12 +63,6 @@ class ProcessorStorage { Step *active_program_ = nullptr; private: - enum class DataSize { - Byte, Word, LongWord - }; - enum class AddressingMode { - }; - /*! Produces a vector of Steps that implement the described program. From a4f6db671949677d393366a6c68e3a58973c84c9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 10 Mar 2019 18:07:23 -0400 Subject: [PATCH 005/239] Removes ArrayBuilderTests as the ArrayBuilder is long gone. Disables TIA tests for now. --- .../Clock Signal.xcodeproj/project.pbxproj | 6 - .../Clock SignalTests/ArrayBuilderTests.mm | 140 ------------------ 2 files changed, 146 deletions(-) delete mode 100644 OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 52dbe76d7..cf183ae97 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -150,7 +150,6 @@ 4B2A332D1DB86821002876E3 /* OricOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B2A332B1DB86821002876E3 /* OricOptions.xib */; }; 4B2A539F1D117D36003C6002 /* CSAudioQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A53911D117D36003C6002 /* CSAudioQueue.m */; }; 4B2A53A01D117D36003C6002 /* CSMachine.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A53961D117D36003C6002 /* CSMachine.mm */; }; - 4B2AF8691E513FC20027EE29 /* TIATests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2AF8681E513FC20027EE29 /* TIATests.mm */; }; 4B2B3A4B1F9B8FA70062DABF /* Typer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A471F9B8FA70062DABF /* Typer.cpp */; }; 4B2B3A4C1F9B8FA70062DABF /* MemoryFuzzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A481F9B8FA70062DABF /* MemoryFuzzer.cpp */; }; 4B2BFC5F1D613E0200BA3AA9 /* TapePRG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2BFC5D1D613E0200BA3AA9 /* TapePRG.cpp */; }; @@ -198,7 +197,6 @@ 4B4B1A3D200198CA00A0F866 /* KonamiSCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4B1A3A200198C900A0F866 /* KonamiSCC.cpp */; }; 4B4DC8211D2C2425003C5BF8 /* Vic20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC81F1D2C2425003C5BF8 /* Vic20.cpp */; }; 4B4DC82B1D2C27A4003C5BF8 /* SerialBus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */; }; - 4B50730A1DDFCFDF00C48FBD /* ArrayBuilderTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B5073091DDFCFDF00C48FBD /* ArrayBuilderTests.mm */; }; 4B54C0BC1F8D8E790050900F /* KeyboardMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0BB1F8D8E790050900F /* KeyboardMachine.cpp */; }; 4B54C0BF1F8D8F450050900F /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0BD1F8D8F450050900F /* Keyboard.cpp */; }; 4B54C0C21F8D91CD0050900F /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0C11F8D91CD0050900F /* Keyboard.cpp */; }; @@ -871,7 +869,6 @@ 4B4DC8271D2C2470003C5BF8 /* C1540.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = C1540.hpp; sourceTree = ""; }; 4B4DC8291D2C27A4003C5BF8 /* SerialBus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerialBus.cpp; sourceTree = ""; }; 4B4DC82A1D2C27A4003C5BF8 /* SerialBus.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SerialBus.hpp; sourceTree = ""; }; - 4B5073091DDFCFDF00C48FBD /* ArrayBuilderTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ArrayBuilderTests.mm; sourceTree = ""; }; 4B51F70920A521D700AFA2C1 /* Source.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Source.hpp; sourceTree = ""; }; 4B51F70A20A521D700AFA2C1 /* Observer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Observer.hpp; sourceTree = ""; }; 4B54C0BB1F8D8E790050900F /* KeyboardMachine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = KeyboardMachine.cpp; sourceTree = ""; }; @@ -2823,7 +2820,6 @@ 4BB73EB51B587A5100552FC2 /* Clock SignalTests */ = { isa = PBXGroup; children = ( - 4B5073091DDFCFDF00C48FBD /* ArrayBuilderTests.mm */, 4B924E981E74D22700B76AF1 /* AtariStaticAnalyserTests.mm */, 4BB2A9AE1E13367E001A5C23 /* CRCTests.mm */, 4BA91E1C216D85BA00F79557 /* MasterSystemVDPTests.mm */, @@ -4017,9 +4013,7 @@ 4B7BC7F51F58F27800D1B1B4 /* 6502AllRAM.cpp in Sources */, 4B08A2751EE35D56008B7065 /* Z80InterruptTests.swift in Sources */, 4BFCA1241ECBDCB400AC40C1 /* AllRAMProcessor.cpp in Sources */, - 4B50730A1DDFCFDF00C48FBD /* ArrayBuilderTests.mm in Sources */, 4BBF49AF1ED2880200AB3669 /* FUSETests.swift in Sources */, - 4B2AF8691E513FC20027EE29 /* TIATests.mm in Sources */, 4B3BA0CE1D318B44005DD7A7 /* C1540Bridge.mm in Sources */, 4B3BA0D11D318B44005DD7A7 /* TestMachine6502.mm in Sources */, 4B92EACA1B7C112B00246143 /* 6502TimingTests.swift in Sources */, diff --git a/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm b/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm deleted file mode 100644 index 8303a0cb3..000000000 --- a/OSBindings/Mac/Clock SignalTests/ArrayBuilderTests.mm +++ /dev/null @@ -1,140 +0,0 @@ -// -// ArrayBuilderTests.m -// Clock Signal -// -// Created by Thomas Harte on 19/11/2016. -// Copyright 2016 Thomas Harte. All rights reserved. -// - -#import - -#include "ArrayBuilder.hpp" - -static NSData *inputData, *outputData; - -static void setData(bool is_input, uint8_t *data, size_t size) -{ - NSData *dataObject = [NSData dataWithBytes:data length:size]; - if(is_input) inputData = dataObject; else outputData = dataObject; -} - -@interface ArrayBuilderTests : XCTestCase -@end - -@implementation ArrayBuilderTests - -+ (void)setUp -{ - inputData = nil; - outputData = nil; -} - -- (void)assertMonotonicForInputSize:(size_t)inputSize outputSize:(size_t)outputSize -{ - XCTAssert(inputData != nil, @"Should have received some input data"); - XCTAssert(outputData != nil, @"Should have received some output data"); - - XCTAssert(inputData.length == inputSize, @"Input data should be %lu bytes long, was %lu", inputSize, (unsigned long)inputData.length); - XCTAssert(outputData.length == outputSize, @"Output data should be %lu bytes long, was %lu", outputSize, (unsigned long)outputData.length); - - if(inputData.length == inputSize && outputData.length == outputSize) - { - uint8_t *input = (uint8_t *)inputData.bytes; - uint8_t *output = (uint8_t *)outputData.bytes; - - for(int c = 0; c < inputSize; c++) XCTAssert(input[c] == c, @"Input item %d should be %d, was %d", c, c, input[c]); - for(int c = 0; c < outputSize; c++) XCTAssert(output[c] == c + 0x80, @"Output item %d should be %d, was %d", c, c+0x80, output[c]); - } -} - -- (std::function)emptyFlushFunction -{ - return [=] (uint8_t *input, size_t input_size, uint8_t *output, size_t output_size) {}; -} - -- (void)testSingleWriteSingleFlush -{ - Outputs::CRT::ArrayBuilder arrayBuilder(200, 100, setData); - - uint8_t *input = arrayBuilder.get_input_storage(5); - uint8_t *output = arrayBuilder.get_output_storage(3); - - for(int c = 0; c < 5; c++) input[c] = c; - for(int c = 0; c < 3; c++) output[c] = c + 0x80; - - arrayBuilder.flush(self.emptyFlushFunction); - arrayBuilder.submit(); - - [self assertMonotonicForInputSize:5 outputSize:3]; -} - -- (void)testDoubleWriteSingleFlush -{ - Outputs::CRT::ArrayBuilder arrayBuilder(200, 100, setData); - uint8_t *input; - uint8_t *output; - - input = arrayBuilder.get_input_storage(2); - output = arrayBuilder.get_output_storage(2); - - for(int c = 0; c < 2; c++) input[c] = c; - for(int c = 0; c < 2; c++) output[c] = c + 0x80; - - input = arrayBuilder.get_input_storage(2); - output = arrayBuilder.get_output_storage(2); - - for(int c = 0; c < 2; c++) input[c] = c+2; - for(int c = 0; c < 2; c++) output[c] = c+2 + 0x80; - - arrayBuilder.flush(self.emptyFlushFunction); - arrayBuilder.submit(); - - [self assertMonotonicForInputSize:4 outputSize:4]; -} - -- (void)testSubmitWithoutFlush -{ - Outputs::CRT::ArrayBuilder arrayBuilder(200, 100, setData); - - arrayBuilder.get_input_storage(5); - arrayBuilder.get_input_storage(8); - arrayBuilder.get_output_storage(6); - arrayBuilder.get_input_storage(12); - arrayBuilder.get_output_storage(3); - - arrayBuilder.submit(); - - XCTAssert(inputData.length == 0, @"No input data should have been received; %lu bytes were received", (unsigned long)inputData.length); - XCTAssert(outputData.length == 0, @"No output data should have been received; %lu bytes were received", (unsigned long)outputData.length); - - arrayBuilder.flush(self.emptyFlushFunction); - arrayBuilder.submit(); - - XCTAssert(inputData.length == 25, @"All input data should have been received; %lu bytes were received", (unsigned long)inputData.length); - XCTAssert(outputData.length == 9, @"All output data should have been received; %lu bytes were received", (unsigned long)outputData.length); -} - -- (void)testSubmitContinuity -{ - Outputs::CRT::ArrayBuilder arrayBuilder(200, 100, setData); - - arrayBuilder.get_input_storage(5); - arrayBuilder.get_output_storage(5); - - arrayBuilder.flush(self.emptyFlushFunction); - - uint8_t *input = arrayBuilder.get_input_storage(5); - uint8_t *output = arrayBuilder.get_output_storage(5); - - arrayBuilder.submit(); - - for(int c = 0; c < 5; c++) input[c] = c; - for(int c = 0; c < 5; c++) output[c] = c + 0x80; - - arrayBuilder.flush(self.emptyFlushFunction); - arrayBuilder.submit(); - - [self assertMonotonicForInputSize:5 outputSize:5]; -} - -@end From 89c71f911944c4c57deb421661c096aec7d635c0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 10 Mar 2019 18:40:12 -0400 Subject: [PATCH 006/239] Introduces EmuTOS, and starts constructing test cases around it. --- .../Clock Signal.xcodeproj/project.pbxproj | 4 + .../Mac/Clock SignalTests/EmuTOSTests.mm | 76 +++ Processors/68000/68000.hpp | 4 +- .../Implementation/68000Implementation.hpp | 5 +- ROMImages/AtariST/doc/announce.txt | 174 ++++++ ROMImages/AtariST/doc/authors.txt | 254 ++++++++ ROMImages/AtariST/doc/bugs.txt | 59 ++ ROMImages/AtariST/doc/changelog.txt | 361 +++++++++++ ROMImages/AtariST/doc/emudesk.txt | 295 +++++++++ ROMImages/AtariST/doc/incompatible.txt | 227 +++++++ ROMImages/AtariST/doc/license.txt | 339 ++++++++++ ROMImages/AtariST/doc/status.txt | 583 ++++++++++++++++++ ROMImages/AtariST/doc/todo.txt | 25 + ROMImages/AtariST/doc/xhdi.txt | 22 + ROMImages/AtariST/etos192uk.img | Bin 0 -> 196608 bytes ROMImages/AtariST/readme.txt | 7 + 16 files changed, 2433 insertions(+), 2 deletions(-) create mode 100644 OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm create mode 100644 ROMImages/AtariST/doc/announce.txt create mode 100644 ROMImages/AtariST/doc/authors.txt create mode 100644 ROMImages/AtariST/doc/bugs.txt create mode 100644 ROMImages/AtariST/doc/changelog.txt create mode 100644 ROMImages/AtariST/doc/emudesk.txt create mode 100644 ROMImages/AtariST/doc/incompatible.txt create mode 100644 ROMImages/AtariST/doc/license.txt create mode 100644 ROMImages/AtariST/doc/status.txt create mode 100644 ROMImages/AtariST/doc/todo.txt create mode 100644 ROMImages/AtariST/doc/xhdi.txt create mode 100644 ROMImages/AtariST/etos192uk.img create mode 100644 ROMImages/AtariST/readme.txt diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index cf183ae97..060a2356a 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -661,6 +661,7 @@ 4BFE7B881FC39D8900160B38 /* StandardOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFE7B851FC39BF100160B38 /* StandardOptions.cpp */; }; 4BFF1D3922337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; 4BFF1D3A22337B0300838EA1 /* 68000Storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */; }; + 4BFF1D3D2235C3C100838EA1 /* EmuTOSTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF1D3C2235C3C100838EA1 /* EmuTOSTests.mm */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1462,6 +1463,7 @@ 4BFF1D37223379D500838EA1 /* 68000Storage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = 68000Storage.hpp; sourceTree = ""; }; 4BFF1D3822337B0300838EA1 /* 68000Storage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = 68000Storage.cpp; sourceTree = ""; }; 4BFF1D3B2235714900838EA1 /* 68000Implementation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = 68000Implementation.hpp; sourceTree = ""; }; + 4BFF1D3C2235C3C100838EA1 /* EmuTOSTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = EmuTOSTests.mm; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2822,6 +2824,7 @@ children = ( 4B924E981E74D22700B76AF1 /* AtariStaticAnalyserTests.mm */, 4BB2A9AE1E13367E001A5C23 /* CRCTests.mm */, + 4BFF1D3C2235C3C100838EA1 /* EmuTOSTests.mm */, 4BA91E1C216D85BA00F79557 /* MasterSystemVDPTests.mm */, 4B98A0601FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm */, 4B121F9A1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm */, @@ -4003,6 +4006,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4BFF1D3D2235C3C100838EA1 /* EmuTOSTests.mm in Sources */, 4B1E85811D176468001EF87D /* 6532Tests.swift in Sources */, 4BDDBA991EF3451200347E61 /* Z80MachineCycleTests.swift in Sources */, 4B98A05F1FFAD62400ADF63B /* CSROMFetcher.mm in Sources */, diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm new file mode 100644 index 000000000..435e42bff --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -0,0 +1,76 @@ +// +// EmuTOSTests.m +// Clock SignalTests +// +// Created by Thomas Harte on 10/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#import + +#include +#include "68000.hpp" +#include "CSROMFetcher.hpp" + +class EmuTOS: public CPU::MC68000::BusHandler { + public: + EmuTOS(const std::vector &emuTOS) : m68000_(*this) { + assert(!(emuTOS.size() & 1)); + emuTOS_.resize(emuTOS.size() / 2); + + for(size_t c = 0; c < emuTOS_.size(); ++c) { + emuTOS_[c] = (emuTOS[c << 1] << 8) | emuTOS[(c << 1) + 1]; + } + } + + void run_for(HalfCycles cycles) { + m68000_.run_for(cycles); + } + + HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { + switch(cycle.operation & (CPU::MC68000::Microcycle::LowerData | CPU::MC68000::Microcycle::UpperData)) { + case 0: break; + case CPU::MC68000::Microcycle::LowerData: + cycle.value->halves.low = emuTOS_[*cycle.address >> 1] >> 8; + break; + case CPU::MC68000::Microcycle::UpperData: + cycle.value->halves.high = emuTOS_[*cycle.address >> 1] & 0xff; + break; + case CPU::MC68000::Microcycle::UpperData | CPU::MC68000::Microcycle::LowerData: + cycle.value->full = emuTOS_[*cycle.address >> 1]; + break; + } + + return HalfCycles(0); + } + + private: + CPU::MC68000::Processor m68000_; + + std::vector emuTOS_; +}; + +@interface EmuTOSTests : XCTestCase +@end + +@implementation EmuTOSTests { + std::unique_ptr _machine; +} + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. + const auto roms = CSROMFetcher()("AtariST", {"etos192uk.img"}); + _machine.reset(new EmuTOS(*roms[0])); +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + _machine->run_for(HalfCycles(400)); +} + +@end diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 8442f7f96..872e86b68 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -95,7 +95,9 @@ class ProcessorBase: public ProcessorStorage { template class Processor: public ProcessorBase { public: - void run_for(const Cycles cycles); + Processor(T &bus_handler) : ProcessorBase(), bus_handler_(bus_handler) {} + + void run_for(HalfCycles duration); private: T &bus_handler_; diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 8c570d128..393f53d80 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -6,7 +6,7 @@ // Copyright © 2019 Thomas Harte. All rights reserved. // -template void Processor::run_for(Cycles cycles) { +template void Processor::run_for(HalfCycles duration) { // TODO: obey the 'cycles' count. while(true) { // Check whether the program is exhausted. @@ -44,5 +44,8 @@ template void Processor: prefetch_queue_[0] = prefetch_queue_[1]; break; } + + // Move to the next program step. + ++active_program_; } } diff --git a/ROMImages/AtariST/doc/announce.txt b/ROMImages/AtariST/doc/announce.txt new file mode 100644 index 000000000..d3c6ae046 --- /dev/null +++ b/ROMImages/AtariST/doc/announce.txt @@ -0,0 +1,174 @@ +Dear Atari Community! + + +We are happy to announce a new public release of EmuTOS: + +EmuTOS 0.9.10 -- December 23, 2018 + + + +INTRODUCTION + +EmuTOS is a single-user single-tasking operating system for 32-bit Atari +computers, clones and emulators. It can be used as a replacement for the +TOS images typically needed by emulators and can also run on some real +hardware, including the Atari ST(e), TT, and Falcon, and the FireBee. It +can even run on non-Atari hardware such as Amiga and ColdFire Evaluation +Boards. All the source code is open and free, licensed under the GNU +General Public License (GPL). + + + +CHANGES SINCE RELEASE 0.9.4 + +For a quick summary of changes by release since release 0.9.4, please +refer to doc/changelog.txt. + +For a detailed list of all changes since the project started, refer to +the Git repository. + + + +DESCRIPTION + +EmuTOS is basically made up of the following: + +- The BIOS, which is the basic input output system +- The XBIOS, which provides the interface to the hardware +- The BDOS, which are the high level OS routines, often known as GEMDOS +- The VDI, the virtual device interface, i.e. the screen driver +- The AES, the application environment services or window manager +- The EmuDesk desktop, which is the graphical shell to the user +- EmuCON2, the command-line interpreter + +The BIOS and XBIOS code is our own development. It is written from +scratch and implements all relevant TOS 3 BIOS & XBIOS functionality, +and a bit more, e.g. hard disk access. See doc/status.txt for details. + +The GEMDOS part is based on Digital Research's GEMDOS sources, which were +made available under GPL license in 1999 by Caldera. + +The graphical parts like VDI and AES are now more or less fully +implemented up to TOS v1.04 level. They work in all the graphics modes +of the original Atari ST, with some extensions. For example, systems with +VIDEL support 256 colours and 640x480 screen resolution. Some emulators +can patch EmuTOS to work with much bigger screen resolutions. + +The desktop is now almost as nice as the one in TOS 2 or higher (although +there is still work to be done). Of course you are always free to use a +more advanced desktop replacement like TeraDesk. + +EmuCON2 is a basic but useful command-line interpreter, written from scratch +by Roger Burrows in 2013 to replace the original CLI. + +Since EmuTOS just implements TOS functionality, you might want to use +MiNT on top of it in order to run more modern software. EmuTOS is not +an alternative to MiNT, but it's the only free base OS to boot MiNT. + + + +EMULATION AND FUTURE PLATFORMS + +EmuTOS and MiNT cooperate well. Both can utilize the Native Features +(NatFeats) interface for emulators: + https://github.com/aranym/aranym/wiki/natfeats-about + +EmuTOS uses this new standard interface for all the relevant native +functions supported by an emulator on which it's running. This interface +proxies the calls to the underlying host OS so that these features don't +need to be emulated. This is both faster and can provide features that +would be infeasible on a real machine. It may allow using modern graphics +cards, provide fast native filesystem access and enable you to use +networking with all bells and whistles - and many other things you might +not have even dreamed of. + +The ARAnyM emulator has the most extensive support for NatFeats. +The Hatari emulator supports the basic NatFeats facilities. + + + +HARDWARE + +Making EmuTOS run natively on a new hardware platform is more or less just +a question of driver support for EmuTOS. The same for MiNT, if you'd like +to have it running on top of EmuTOS. + +This is the currently supported original Atari hardware: +- CPU support for M68000, M68030 +- FPU detection +- 68030 MMU and cache +- Memory controller (both ST and Falcon) +- TT-RAM +- Monitor type detection (mono, RGB or VGA) +- DMA controller +- WD 1772 / AJAX Floppy disk controller +- MFP, MFP #2 +- PSG +- ST shifter +- STe shifter +- TT shifter +- VIDEL +- ACIAs, IKBD protocol, mouse +- MegaST Real-Time Clock (set clock not tested) +- NVRAM (including RTC) +- Blitter +- Microwire +- SCC +- IDE +- SCSI +- ACSI + +EmuTOS also supports the following Atari-compatible hardware: +- CPU support for M68010, M68020, M68040, M68060, ColdFire V4e, and Apollo 68080 +- ICD AdSCSI Plus ST Real-Time Clock +- MonSTer expansion card +- Nova/ET4000 graphics card +- SD/MMC +- The Native Features interface to some degree + +Currently unsupported hardware features: +- DSP + +EmuTOS is also available on some non-Atari hardware: +- Amiga (floppy or ROM for any Amiga, including MapROM support) +- ColdFire Evaluation Boards (M5484LITE, M5485EVB) + + + +AVAILABILITY + +The EmuTOS home page is: + + http://emutos.sourceforge.net/ + +The project home is on SourceForge: + + http://sourceforge.net/projects/emutos/ + +The latest releases can be downloaded from: + + http://sourceforge.net/projects/emutos/files/emutos/ + +Development snapshots allow you to test the current development progress: + + http://sourceforge.net/projects/emutos/files/snapshots/ + +The latest sources are always available on GitHub: + + https://github.com/emutos/emutos + +If you are just curious or would like to help us develop this nice little +OS, you are invited to subscribe to our mailing list for developers at: + + https://lists.sourceforge.net/lists/listinfo/emutos-devel + + +We hope that you like EmuTOS. If you have any suggestions or comments, we +always appreciate hearing both the good and the bad things about it. + + +The EmuTOS development team. + +-- +Originally written by Martin Doering +http://emutos.sourceforge.net/ diff --git a/ROMImages/AtariST/doc/authors.txt b/ROMImages/AtariST/doc/authors.txt new file mode 100644 index 000000000..936761e3c --- /dev/null +++ b/ROMImages/AtariST/doc/authors.txt @@ -0,0 +1,254 @@ +EmuTOS source code consists of several parts, and includes code taken from +other projects - Many thanks to them and to their authors for releasing the +code under GPL. + +The 'historical' authors - those who wrote the code before the start of the +EmuTOS project - are mentioned in the individual files they've authored. +Major 'historical' parts are: +- BDOS, VDI - both come from the latest known GEMDOS version from + Digital Research (later versions seem to have been developed by Atari). +- AES, desktop - The C source code for GEM comes from the x86 version. +- Some GEM assembler files come from the AES for the Apple LISA. + +All these historical parts were released under the General Public License +by Caldera, Inc. in mid april 2000 (?) (For the record, Caldera bought it +from Novell in 1997 along with DR-DOS; later Caldera disappeared and this +is the copyright notice that refers to Lineo) + +Minor borrowed stuff: +- the printf and memcpy stuff is inspired by the Minix kernel and library; +- the processor/FPU detection is taken from the MiNT kernel; +- "Bug" includes parts of the original gettext source code; +- some low-level hardware stuff comes from the Linux kernel; + +While the main Amiga support was written from scratch by the EmuTOS team, +some advanced code (FastRAM support for ROM versions) has been borrowed from the +AROS project. Due to license incompatibilities, that code is shipped in the +source archive, but not compiled into the official binaries. + +The following is a list of 'recent' contributors - individuals involved in the +EmuTOS project. In this project virtually everybody modifies every file; +nevertheless here is an attempt at identifying who's guilty of what: + +Roger Burrows (RFB) +- Current project admin +- Support for SD/MMC Cards on the FireBee +- SCSI support +- Improvements to IDE, CompactFlash, ACSI, and other mass-storage support +- FAT16 partitions up to 2 GB (inspired by Didier Méquignon's BDOS fork) +- Full support for Falcon video hardware +- Real Falcon 030 support (cache, MMU, SCC, HD floppy) +- Real TT 030 support (video, MFP2) +- Blitter support for horizontal lines/filled rectangles/raster graphics +- Desktop and file selector improvements +- EmuCON2 +- Tools: erd (EmuTOS Resource Decompiler) & draft (deletes items from desktop resource) +- Various bugfixes and cleanups + +Vincent Rivière (VRI) +- Many improvements to the build and configuration process +- Moved project from CVS to Git, and from SourceForge to GitHub +- Implemented automatic builds via Travis CI +- Patches for compiling with GCC 4.x +- ColdFire CPU and FireBee support +- Initial IDE driver +- Big improvements to FastRAM/Alt-RAM handling +- Amiga support +- ColdFire Evaluation Boards support +- Apollo 68080 support +- Various bug fixes and cleanups + +Thomas Huth (THH) +- Lots of bugfixes & cleanups all over the place +- Integration and maintenance of the AES and GEM-Desktop +- XBIOS DMA sound functions + +Petr Stehlik (PES) +- BIOS disk interface, BDOS filesystem +- Falcon and ARAnyM support + +Laurent Vogel (LVL) +- Original ST hardware (MFP, ACIA, parport, sound, floppy, ACSI) +- Makefile tricks and tools +- NLS support + +Martin Doering (MAD) +- Original project initiator (but retired many years ago) +- Memory setup, VT52 console, Line A, mouse +- Virtually everything not modified later by the others + + +Thanks to all current and previous translators, who have helped us keep +EmuTOS multi-lingual: + +- Czech translation + Bohdan Milar + Petr Stehlik + Pavel Salač + Jan Krupka + +- Finnish translation + Eero Tamminen + +- French translation + Laurent Vogel + Vincent Rivière + +- German translation + Thomas Huth + +- Greek translation + George Nakos + Christos Tziotzis + +- Italian translation + Lodovico Zanier + +- Spanish translation + Gabriel Huertas + David Gálvez + Jordi Mestres Ruiz + +- Russian translation + Dima Sobolev + + +Thanks also to all mailing list contributors for their help, and +especially: + +Stanislav Opichal (SOP) +- FreeMiNT kernel bootstrap via BOOTSTRAP NatFeat + +Frank Naumann +- FreeMiNT + +Ctirad Fertr , +Milan Jurik +- The ARanyM team + +Johan Klockars +- fVDI + +Henk Robbers +- XaAES, AHCC + +Jacques-Etienne Rahon "Kevin Flynn" +- Extensive demo testing on STeeM + +Patrice Mandin and Markus Oberhumer +- Hints and patches for compiling EmuTOS with GCC 3.x + +Eero Tamminen +- Many bug reports, extensive testing, testcases supply +- Many documentation updates +- Finnish keyboard mapping +- Hatari debug symbols +- Static source analysis and cleanup +- Line-A implementation + +Gerhard Stoll +- Improved our nvmaccess() function +- TOS hypertext + +Roger Crettol +- Found and fixed a bug in GEMDOS Pterm() function +- Support for swiss german keyboard +- Some EmuCON improvements + +David Savinkoff +- Bug fixes for the BIOS parallel port code +- Improved Isqrt() function +- Other various bugfixes + +Olivier Landemarre +- Renamed internal VDI functions to avoid name conflicts + +Jean-François Del Nero +- Improved memory detection on cold boot +- Tested the EmuTOS ROM on real STe hardware +- Various bugfixes +- Invaluable HxC Floppy Emulator for tests on real hardware + +David Gálvez +- XHNewCookie() implementation + +Fredi Aschwanden +and all the ACP team +- Tests on the FireBee hardware + +James Boulton +- floprw() fix for reading multiple sectors + +Stephen Leary +- Fixed support for IDE slave device + +Miro Kropáček +- Experimental 68040 MMU support + +WongCK on Atari-Forum +- Tests on real Falcon 030 + +Michaël Gibs on English Amiga Board +- Tests on Amiga 1200 with Blizzard 1260 accelerator + +Amiman99 on English Amiga Board +- Tests on Amiga 1000 + +Radoslaw Kujawa +- Compilation fix on 64-bit build systems + +Hampa Hug +- Fixed ACSI bugs + +Markus Fröschle +- Tests on the FireBee and BaS_gcc support +- Inspired the support for the blitter +- Fix various AES & VDI bugs + +Christian Zietz +- ROM tests on real ST/STe hardware +- Fix floppy/ACSI bug +- Fix memory detection to support STs as well as STes +- Support for extended MBR partitions +- Add IDE 'twisted cable' support +- IDE performance improvements +- Fix cold boot problems caused by some ST MMUs +- Fix screen corruption after a reset on some Mega(STe) systems +- ET4000/Nova support +- Miscellaneous bug fixes + +Jo Even Skarstein +- Support for Norwegian & Swedish keyboards +- Support for MonSTer add-on board + +Thorsten Otto +- Make EmuTOS more compatible with Atari TOS in several areas +- Add check_read_byte() workaround for ARAnyM-JIT +- Fixes to 68040 PMMU setup +- Inspired the support for window/desktop background configuration +- Found many bugs in desktop shortcut handling +- Help with resource manipulation programs +- Miscellaneous bug fixes +- Lots of source code cleanup + +Apollo Team: Gunnar von Boehn, Philippe Flype, Simo Koivukoski, +pisklak, guibrush, TuKo, and all other members... +- Apollo 68080 and Amiga support + +Steven Seagal +- Steem SSE support + +Stefan Niestegge +- ROM tests on real hardware: STe, Falcon and Amiga 600 + +Ingo Uhlemann +- ROM tests on real TT hardware + +Stefan Haubenthal +- EmuTOS packaging on Aminet: http://aminet.net/package/misc/emu/emutos + +Christian Quante +- Various desktop bug fixes & improvements + +Keli Hlodversson +- Replaced form_alert() icons with more TOS-like ones diff --git a/ROMImages/AtariST/doc/bugs.txt b/ROMImages/AtariST/doc/bugs.txt new file mode 100644 index 000000000..bebf96f71 --- /dev/null +++ b/ROMImages/AtariST/doc/bugs.txt @@ -0,0 +1,59 @@ +AES/VDI/Line-A bugs: +- The right side of outline characters are clipped e.g. in "LaserChess", + "Diamond miner" & "Minigolf" games, and in vditext tester: + https://sourceforge.net/p/emutos/mailman/message/29276993/ + This is due to a bug somewhere in the ugly text_blt() assembler + function in vdi_tblit.S. +- Thick arcs going partly outside of screen have incorrectly + drawn pixels at top of screen in vdiline tester. +- In "MathMaze" and "The Ultimate Minesweeper", game win and score + dialogs leave left/bottom outline on screen when they close. +- Dialog box at the end of Glücksrad game is missing text from + the dialog button (and the button width isn't correct) +- Line-A polygons are one pixel short at both sides. This is + because clc_flit() function does it for VDI (where perimeter + is drawn separately). It is visible e.g. in "Japlish" game. + +Video problems: +- Omega's XiTec presentations "swing.prg" throws privilege exception + on exit. Both TOS v3 & EmuTOS survive that OK, but in EmuTOS both + screen and mouse acceleration are messed up: EmuTOS exception restore + is missing videomode & mouse reset. + +Atari Falcon / TOS v4 compatibility bugs: +- Escape Paint icons don't show in image operations window and their + place in toolbar window is inverted on mouse click. +- Falcon FalcAMP button icons aren't visible as EmuTOS doesn't support + new style RSC files with CICONs. + +Problems that also occur in Atari TOS: +- VDI: when drawing a wide polyline with squared ends and more than one + segment, if the width of the line is greater than twice the length of + an ending segment, the end will have a bump rather than being square. + This is because wideline segments are joined by using filled circles + whose radius is half the width of the line: the bump is a protruding + part of the circle that joins the end segment to the previous one. + +Links to programs listed above: +- Diamond Miner: + http://www.atarimania.com/game-atari-st-diamond-miner_31993.html +- Escape Paint: + http://www.pouet.net/prod.php?which=25328 +- FalcAMP: + http://deunstg.free.fr/sct1/falcamp/ +- Glücksrad: + http://www.atarimania.com/game-atari-st-glucksrad-st_22001.html +- Japlish: + http://www.ntrautanen.fi/marko/arkisto.atari.org/sivut/menu_pelit.htm +- Laserchess: + http://www.atarimania.com/game-atari-st-laserchess_31257.html +- Minigolf (GFA): + http://eerott.mbnet.fi/hatari/sources/minigolf.zip +- Swing: + http://www.pouet.net/prod.php?which=52370 +- The Ultimate Minesweeper: + http://www.pouet.net/prod.php?which=28904 +- VDI line/text tester: + http://eerott.mbnet.fi/hatari/programs.shtml#vditest + +(Links missing to: mathmaze.) diff --git a/ROMImages/AtariST/doc/changelog.txt b/ROMImages/AtariST/doc/changelog.txt new file mode 100644 index 000000000..d3246e237 --- /dev/null +++ b/ROMImages/AtariST/doc/changelog.txt @@ -0,0 +1,361 @@ +CHANGES BETWEEN RELEASE 0.9.9.1 AND RELEASE 0.9.10 + +Major changes: +- AES: Avoid unnecessary redraws by AES window manager +- AES: Fix shutdown bug in shel_write() +- BDOS: Improve BDOS write file performance +- BDOS: Improve BDOS sector caching algorithm +- BDOS: Avoid unnecessary directory sector writes in BDOS +- BDOS: Improve Fsnext() performance +- BIOS: Add SCSI support for TT and Falcon +- BIOS: Implement support for ET4000 graphics card +- BIOS: Implement automatic verify for floppy writes +- BIOS: Improve IDE data transfer speed +- BIOS: Improve TT RAM size detection for Storm cards +- BIOS: Fix reboot loop if Ctrl+Alt+Del held down +- EmuCON: Allow resolution change in EmuCON +- EmuDesk: Clean up if EmuDesk terminates abnormally +- EmuDesk: Fix bug in EmuDesk copy function +- EmuDesk: Fix EmuDesk out-of-sequence redraws +- EmuDesk: Make EmuDesk menu for icon/text selection like Atari TOS +- VDI: Improve the appearance of VDI curved lines + +Other changes: +- AES: Do not set the scrap directory in appl_init() +- AES: Do not validate the path supplied to scrp_write() +- AES: Fix appl_tplay() +- AES: Fix appl_trecord() +- AES: Fix bug in setting application directory +- AES: Fix file selector bug +- AES: Handle SHADOWED correctly for form_center() +- AES: Make form_center() behave like Atari TOS +- AES: Preserve DTA address across shel_find() +- BDOS: Increase max length of fully-qualified filename +- BIOS: Fix bug in VT52 emulation +- BIOS: Fix bug in rsconf handling for SCC +- BIOS: Fix bugs in keyboard mouse emulation +- BIOS: Fix end-of-partition test in Rwabs() +- BIOS: Fix screen corruption on some (Mega)STe systems +- BIOS: Improve FAT12/FAT16/FAT32 detection +- BIOS: Increase default keyboard auto-repeat speed +- BIOS: Remove IDE delay on Amiga +- BIOS: Remove unneeded delay when accessing the FDC +- EmuDesk: Allow 'Show item' to handle multiple items +- EmuDesk: Fix bug in EmuDesk change resolution handling +- EmuDesk: Fix bug in EmuDesk copy process when disk is full +- EmuDesk: Fix display bug in EmuDesk initialisation +- EmuDesk: Fix EmuDesk mouse cursor initialisation +- EmuDesk: Fix label bug when formatting floppy +- EmuDesk: Fix 'name conflict' bug in copy/move folders +- LineA: Fix bug that affected Aegis Animator +- LineA: Implement early abort for lineA seedfill() +- VDI: Fix bug in v_opnvwk() +- VDI: Fix contourfill() for 8 planes +- VDI: Fix design bug in VDI workstation creation +- XBIOS: Fix crash if Vsetscreen() sets TrueColor mode +- XBIOS: Improve performance of Flopver() +- The usual source code cleanup and minor bug fixes + + +CHANGES BETWEEN RELEASE 0.9.9 AND RELEASE 0.9.9.1 + +There was only one change, to fix a major bug in EmuDesk: if a desktop +shortcut for a file/folder was dragged to the trash or a disk icon or +an open window, then all the folders at the same level as the selected +file/folder were included in the operation, causing unwanted deletes/ +moves/copies. + + +CHANGES BETWEEN RELEASE 0.9.8 AND RELEASE 0.9.9 + +Major changes: +- AES: Allow mouse cursors to be loaded at boot time +- EmuDesk: Add 'Desktop configuration' dialog +- EmuDesk: Allow configuration of window/desktop backgrounds +- EmuDesk: Allow desktop window file mask to be specified +- EmuDesk: Omit unused desktop menu items +- EmuDesk: Open new window with Alt+doubleclick on folder +- General: Automatically build snapshot releases when a commit is pushed +- VDI: Add blitter support for horizontal line drawing +- VDI: Add blitter support for filled rectangle drawing +- VDI: Add blitter support for raster graphics + +Other changes: +- AES: Add growbox/shrinkbox effects to form_dial() +- AES: Allow AES USERDEFs to clobber a2/d2 (improve compatibility) +- AES: Call dsptch() on every AES call (improve responsiveness) +- AES: Ensure all DAs see AC_CLOSE before app exits +- AES: Fix problem with mouse clicks being ignored +- AES: Improve mouse cursor images +- AES: Only wait for interrupts when nobody is ready to run +- AES: Replace icons used in alerts +- BIOS: Do not use stack until memory is initialized +- BIOS: Ensure ST MMU register contains valid value +- BIOS: Ensure GetBPB() returns NULL for non-FAT partitions +- BIOS: Fix Mega STe boot problem +- BIOS: Fix XHDrvMap() to return correct value +- BIOS: Fix bug in memset/bzero clearing only 16MB at most +- BIOS: Implement XHDOSLimits (read only) +- BIOS: Amiga/Vampire V2: do not enable Fast IDE by default +- EmuDesk: Add blitter menu item to desktop +- EmuDesk: Add support for desktop drag-and-drop in window +- EmuDesk: Allow any character as date separator +- EmuDesk: Allow copy/move to desktop shortcut for a folder +- EmuDesk: Always issue alert if no windows are available +- EmuDesk: Do not open desktop directory if error occurs +- EmuDesk: Dragging to desktop shortcut for program now launches it +- EmuDesk: Fix 'Install application' bug w/ desktop shortcut +- EmuDesk: Fix alignment of desktop icons on a grid +- EmuDesk: Fix bug: desktop didn't open window for empty drives +- EmuDesk: Fix default dir for programs launched from desktop +- EmuDesk: Fix tail passed by desktop to shel_write() +- EmuDesk: Highlight file shortcut when dropping file on it +- EmuDesk: Improve launching of programs via desktop shortcut +- EmuDesk: Include wildcard spec in desktop window name +- EmuDesk: Make the desktop shel_write() the full pathname +- VDI: Add support for lineA TextBlt write modes 4-19 +- VDI: Fix VDI crash when running MiNT + memory protect +- VDI: Fix crash when font scaling in lineA text_blt() +- VDI: Handle bad rotation value in gdp_justified() +- VDI: Translate text_blt() high level code to C +- XBIOS: Fix EsetColor() when color < 0 +- The usual source code cleanup and minor bug fixes + + +CHANGES BETWEEN RELEASE 0.9.7 AND RELEASE 0.9.8 + +Major changes: +- Amiga: New boot floppy target +- Amiga: Rewrite floppy routines +- Amiga: Support multiple video modes +- BIOS: Autodetect IDE interface with twisted cable at run-time +- EmuDesk: Add support for desktop shortcuts +- EmuDesk: Add support for formatting floppies +- EmuDesk: Add support for user-assignable desktop icons + +Other changes: +- AES: Adjust file selector scroll bar width according to resolution +- AES: Allocate Alt-RAM instead of ST-RAM where possible +- AES: Do not use shel_find() to find autorun program +- AES: Fix bug in rsrc_load() that affected PixArt4 +- AES: Fix error message if autorun program is not found +- AES: Fix possible data corruption when launching accessories +- AES: Increase min height of slider in file selector +- Amiga: Add support for IKBD keyboard/mouse/joysticks on RS-232 +- Amiga: Fix interlaced display with fast CPU +- Amiga: Add target to build ROM optimized for Vampire V2 +- Amiga: Add XBIOS joystick support +- Amiga: Improve IDE performance on Vampire V2 +- Amiga: Improve IDE support +- Amiga: Add proper floppy media change support +- BDOS: Allow environment to be allocated in Alt-RAM +- BDOS: Fix bug in updating date when month rolls over +- BDOS: Fix Fsfirst(): wrong name format in DTA for label +- BDOS: Speed up Dfree() for 16-bit FATs +- BIOS: Add movep emulation for 68060 +- BIOS: Enable data cache on 68040 & 68060 +- BIOS: Enable instruction & branch caches on 68060 +- BIOS: Fix ACSI bug: non-word-aligned transfers failed +- BIOS: Fix bug in IDE detection of slower devices +- BIOS: Fix crash with unaligned IDE R/W buffer on 68000 +- BIOS: Fix floppy bug: non-word-aligned I/Os failed +- BIOS: Improve IDE performance +- BIOS: Improve mediachange detection +- ColdFire: Add RAM TOS target for ColdFire Evaluation Boards +- EmuDesk: Add documentation for new features +- EmuDesk: Add read-only indicator for show-as-text display +- EmuDesk: Allocate Alt-RAM instead of ST-RAM where possible +- EmuDesk: Fix various bugs in desktop copy/move +- EmuDesk: Handle desktop move/copy of folder to itself +- EmuDesk: Holding Control at startup now bypasses all initialisation files +- EmuDesk: Lookup desktop shortcuts directly in menu +- EmuDesk: Make alt-X open the root of X in a window +- EmuDesk: Make desktop keyboard shortcuts use Ctrl modifier +- EmuDesk: Make desktop shortcut keys work for all keyboards +- EmuDesk: Split preferences dialog to allow longer text +- General: Allow EmuTOS static RAM to be allocated in Alt-RAM +- The usual source code cleanup and minor bug fixes + + +CHANGES BETWEEN RELEASE 0.9.6 AND RELEASE 0.9.7 + +Major changes: +- BIOS: add support for extended MBR partitions +- BIOS: add support for MonSTer board +- BIOS: configure & size ST-RAM on TT +- BIOS: add support for Eiffel on CAN bus on ColdFire EVB +- BIOS: add _5MS cookie to support FreeMiNT on non-Atari hardware +- BIOS: add support for Apollo Core 68080 +- BDOS: set archive flag when file is created/modified +- EmuDesk: allow disk delete via desktop File menu item +- EmuDesk: implement desktop 'Install devices' +- EmuDesk: implement desktop 'Install icon' +- EmuDesk: implement desktop 'Remove desktop icon' +- EmuDesk: rewrite 'Install application' +- EmuCON2: provide a standalone version of EmuCON2 + +Other changes: +- AES: allow autorun program to start in character mode +- AES: fix bug when File Selector accesses empty drive +- AES: fix loop in file selector if filemask is too long +- AES: fix bug: the file selector modified the DTA pointer +- AES: rewrite wildcmp() to fix bug +- BDOS: fix GEMDOS standard handle numbers +- BDOS: rewrite Fsfirst/Fsnext to fix design problem +- BDOS: use single pool for all internal memory requests +- BDOS: fix I/O status for redirected character devices +- BDOS: fix date stamp in . and .. directory entries +- BDOS: fix return code for Fsfirst() +- BDOS: make EmuTOS respect user-assigned FRB +- BDOS: make ctl-C interrupt Cconin +- BDOS: return EOF indicator on redirected char devices +- BDOS: validate attribute bits passed to Fattrib() +- BDOS: validate handles for Fseek()/Fread()/Fwrite()/Fdatime() +- BIOS: add Norwegian & Swedish keyboard support +- BIOS: add support for byte-swapped IDE cable (disabled by default) +- BIOS: allow configuration of max logical sector size +- BIOS: fix VDI->hardware colour calculation +- BIOS: fix os_conf value and usage in multilanguage ROMs +- BIOS: improve performance of Rwabs() on floppy disks +- BIOS: make Ikbdws()/Midiws() handle 'cnt' like Atari TOS +- BIOS: set density for read/write/format of HD floppies +- BIOS: fix boot on Amiga with 68000 CPU +- BIOS: fix RAM size with BaS_gcc on ColdFire EVB +- BIOS: fix _FPU cookie for 68060 without FPU +- BIOS: fix values returned by VgetRGB()/vq_color() +- EmuDesk: make desktop shift-click behave the same as TOS +- EmuDesk: prompt if folder name conflict during move/copy +- EmuDesk: make many desktop and AES dialogs more concise +- EmuDesk: fix desktop icon drag and drop positioning +- EmuDesk: allow 'Too many windows' alert to be issued +- EmuDesk: always issue extra alert if deleting entire disk +- EmuDesk: always keep part of the mover gadget onscreen +- EmuDesk: avoid unnecessary window refreshes +- EmuDesk: handle name conflict during copy like Atari TOS +- EmuDesk: support additional keys during "Show file" +- EmuDesk: add copyright year in EmuDesk about dialog +- General: display total RAM on welcome screen +- General: fix _drvbits tests for drives > P +- VDI: fix rectangle drawing errors +- VDI: fix bug: v_bar() draws perimeter wrongly +- VDI: fix vq_curaddress(), vs_curaddress() +- Lots of source code cleanup and minor bug fixes + + +CHANGES BETWEEN RELEASE 0.9.5 AND RELEASE 0.9.6 + +Major changes: +- AES: fix pattern problem in window title line +- AES: prevent crash when NVDI is installed +- BDOS: fix bug: memory allocated by a TSR could be freed +- BDOS: implement etv_term() +- BIOS: clean up pending IRQ from flopunlk(), fixes some ACSI problems +- BIOS: clear data cache after DMA read, fixes ACSI problem on TT +- BIOS: do not clear the free ST-RAM on startup +- BIOS: enable MIDI input +- BIOS: initialise DMA sound matrix on Falcon +- BIOS: fix Flopxxx XBIOS calls to work with FastRAM +- BIOS: fix floppy motor-on problem during initialisation +- BIOS: fix memory bank detection to work on ST and STe +- BIOS: prevent reset vector being called on cold reset +- EmuCON2: add 'mode' command +- EmuCON2: fix EmuCON crash if system call is intercepted +- EmuDesk: allow TT desktop to select TT medium res +- EmuDesk: fix bug: copy/move could target the wrong folder +- EmuDesk: fix display of numeric values in desktop dialogs +- EmuDesk: fix rubber-banding for text-mode desktop windows +- EmuDesk: hide Shutdown if the machine can't shutdown +- EmuDesk: improve desktop move performance by using rename if possible +- EmuDesk: change menu bar to be more like Atari TOS +- General: fix EmuTOS to run on real TT hardware +- General: merge boot.prg + ramtos.img into emutos.prg +- VDI: fully implement VDI support for TT video + +Other changes: +- AES: clean up if program fails to issue appl_exit() +- AES: fix loop when deleting non-existent object +- AES: fix handling of Delete key by objc_edit() +- AES: fix value returned by evnt_button()/evnt_multi() +- AES: reset the default drive on resolution change +- BDOS: fix volume label handling to conform to TOS standards +- BIOS: add new cookie _MCF to the cookiejar +- BIOS: add support for RTC on ICD AdSCSI Plus board +- BIOS: add support for TT MFP (MFP #2) +- BIOS: add support to run "reset-resident" code +- BIOS: allow EmuTOS floppy to boot other floppies +- BIOS: clear system variables if EmuTOS loads into RAM +- BIOS: fix console font height with Hatari extended video modes +- BIOS: fix ide_identify() on Amiga +- BIOS: fix NVRAM year on TT +- BIOS: fix return codes for dmasound functions on ST +- BIOS: fix return codes for TT shifter functions +- BIOS: fix some NVRAM reset problems +- BIOS: fix sound volume on TT +- BIOS: fix _screenpt processing for TT, Falcon +- BIOS: flush the data cache before a warm or cold reset +- BIOS: initialize the IKBD clock on first boot only +- BIOS: rewrite MegaST(e) real time clock handler +- EmuCON2: fix EmuCON welcome message for ST-Low +- EmuDesk: add 'No sort' to desktop sort options +- EmuDesk: add desktop shortcuts for scroll-by-page +- EmuDesk: ensure desktop menu bar fits within screen +- EmuDesk: fix display of volume label in disk info dialog +- EmuDesk: improve EMUDESK.INF error checking +- EmuDesk: show the emulated machine name on Hatari even with --natfeats yes +- General: always use STOP instruction in 'wait for interrupt' loops +- General: create valid filesystem with hidden EmuTOS image on auto-booting floppy +- General: do not wait for a key at EMUTOS.PRG startup +- General: pretend to be TOS 1.04 in 192k ROMs +- General: use country id as part of emutos.prg/emutos.st name +- VDI: fix v_curtext() +- VDI: implement vq_curaddress() +- VDI: improve performance of cursor display routine +- VDI: rewrite vr_trnfm() to fix bugs and save space +- Lots of source code cleanup and minor bug fixes + + +CHANGES BETWEEN RELEASE 0.9.4 AND RELEASE 0.9.5 + +Major changes: +- AES/BIOS: implement critical error handler +- BDOS: fix file not found issues with Steem hard disk emulation +- BDOS: implement Pexec mode 7 +- BIOS: add alt-arrow support (mouse actions via keyboard) +- BIOS: add dual keyboard support (for Greek/Russian keyboards) +- BIOS: allow user to specify boot partition at startup +- BIOS: allow EmuTOS to recover from program exceptions in user programs +- BIOS: auto-detect multiple IDE interfaces +- BIOS: fix detection of C: drive with Steem +- BIOS: fix early stack initialization on Amiga +- EmuDesk: improve text object alignment for translated strings +- VDI: add line-A flood fill; all line-A opcodes are now supported + +Other changes: +- AES: increase button spacing in alerts +- AES: increase AES stack size for ColdFire machines +- BDOS: evaluate TPAsize flags in Pexec processing +- BDOS: fix bug in cross-directory rename +- BIOS: use interrupts for serial console instead of polling +- BIOS: fix FPU detection: 68881/68882 are now differentiated correctly +- BIOS: fix delay_loop() timing for M548X machines +- BIOS: fix key repeat bug when entering values via alt-keypad +- BIOS: implement XHInqDriver() XHDI function +- BIOS: fix some XHDI return codes (EDRIVE and EWRPRO) +- BIOS: add explicit delay for parallel port strobe (fixes printing on fast systems) +- BIOS: fix nationality code in ROM header +- EmuCON2: translate text (note: some country codes use English by choice) +- EmuDesk: allow folders being displayed in an open window to be moved/deleted +- EmuDesk: allow desktop "rubber-banding" in all directions +- EmuDesk: display year as 4 digits where possible +- EmuDesk: use _IDT cookie for EmuDesk date/time formatting +- EmuDesk: fix bug in "sort by date" for directory display +- EmuDesk: allocate screen objects dynamically +- General: convert source code repository to Git +- General: implement error checking for translated alerts +- General: replace "make release-version" with "make version" +- VDI: ignore lineA variable 'multifill' for linea_rect() and linea_polygon() +- VDI: speed up drawing of horizontal lines by v_pline() +- VDI: fix lineA rectangle fill bugs +- VDI: fix gap in circle drawn by v_arc() +- VDI: fix VDI wideline display in 320x480 resolution +- Lots of source code cleanup and minor bug fixes diff --git a/ROMImages/AtariST/doc/emudesk.txt b/ROMImages/AtariST/doc/emudesk.txt new file mode 100644 index 000000000..300d88c8f --- /dev/null +++ b/ROMImages/AtariST/doc/emudesk.txt @@ -0,0 +1,295 @@ +A brief user's guide to the newer features of EmuDesk, the EmuTOS desktop +========================================================================= + +The current version of EmuDesk is based on the TOS 1 desktop, but with +many improvements inspired by the TOS 2/3/4 desktop, including: + +1) new menu items + . set file mask + . install icon + . install application + . install devices + . remove desktop icon + . desktop configuration + . blitter +Due to space limitations, the implementation of the above is somewhat +restricted in the 192K ROMs (see the detailed descriptions below). If +you make any changes to the desktop using the above features, you must +save the desktop to preserve the changes. + +2) other new features + . user-assignable icons + . user-assignable mouse cursors + . open disk window via keyboard shortcut + . desktop shortcuts +Due to space limitations, desktop shortcuts are not available in the +192K ROMs. Desktop shortcuts are preserved when you save the desktop. + + +Set file mask +============= +192K ROMs: +This is not available. + +Other ROMs: +This is used to change the file mask of the currently-topped window, to +control which files are displayed within the window. Note that folders +are always displayed; the mask affects the display of files only. The +default file mask when a window is opened is "*.*" + + +Install icon +============ +192K ROMs: +This may be used to associate a specific icon with a desktop item (disk +or trash). You may select an existing desktop item and click on "Install +icon...", or you may click on "Install icon..." with no item selected. +If you click on a window icon (file or folder), it will be ignored. + +Other ROMs: +This may be used to associate a specific icon with a desktop item (disk +or trash), or a window item (file or folder). You may select an existing +icon and click on "Install icon...", or you may click on "Install icon..." +with no item selected. In the latter case, you'll get a dialog requesting +you to select the type of icon (desktop or window). + +. Installing a desktop icon + You may select the type (drive or trash), the label (displayed beneath + it on the desktop), and the icon shape (use the up & down arrows to + scroll through the available shapes). In addition, for drives you can + select the drive letter. + +. Installing a window icon + If you pre-selected an icon, you may only change the shape of the icon + for that specific file or folder. If you did not pre-select an item, + you can select the files that the icon will apply to (standard TOS + wildcards may be used), the type of item (file or folder), and the icon + shape. In either case, to change the icon shape, use the up & down + arrows to scroll through the available shapes. + + +Install application +=================== +The basic purpose of "Install application..." is to link an application +to data files with a specified extension. After you have done this, when +you use the desktop to open a file with the specified extension, the +corresponding application is launched. For example, you could associate +all .TXT files with a text editor; then, double-clicking on a .TXT file +would automatically launch the editor. + +In addition, you can assign a function key to an application; pressing +the function key at the desktop will then launch the application. + +Finally, you can set "autoboot" for one application (only): this will +launch that application during system initialisation, immediately before +the desktop itself runs. + +To use "Install application...", highlight one or more applications and +click on "Install application...". In the dialog box, the application +name of the first application selected will be prefilled. The following +fields and buttons specify in detail how the application is run: + +. Arguments + If you need to pass information (in addition to the name of the data + file) to the application when it starts, you may specify it here. This + is typically only relevant to utility programs, and the information + needed will be in the application documentation. In most cases, you + should leave this blank. + +. Document type + This specifies the extension to associate with this application, for + example TXT or RSC, and is required. Wildcards are allowed. + +. Install as F__ + This specifies the function key that will launch the application; + values from 1 to 20 are allowed (11-20 are shift-F1 through shift-F10). + Leaving this blank is valid, and means that no function key will launch + the application. + +. Boot status + Select "Auto" to autoboot this application (see above). Since only one + autoboot application is allowed, if you set "Auto" for an application, + EmuTOS will automatically disable "Auto" for any existing autoboot + application. + +. Application type + Selecting TOS or TTP will launch the program in character mode; GEM or + GTP will launch the application in graphics mode. The appropriate + value will be prefilled according to the type of application selected, + and should not normally be changed. + +. Default dir + This specifies the default directory when the application is launched: + either the directory of the application itself, or the top window (i.e. + the directory of the data file). The one to choose depends on the + specific application. If the application has supporting files (such as + resource or help files), it typically will look for them in the default + directory. For such an application, you will need to specify a default + directory of "Application". Otherwise, specify "Window". + +. Parameter + When a program is launched due to it being an installed application, + the desktop provides the application with the name of the data file + that caused the launch: this is known as a parameter. In most cases, + the application expects that the full path of the data file will be + provided. Some (usually older) programs may expect the filename only. + Unless the application's documentation indicates otherwise, you should + normally try "Full path" first; if that does not work, you can try + "File name", although that may require you to modify the "Default dir" + specified above. + +At the bottom of the dialog box are the following exit buttons: + +. Install + Installs the application. You must save the desktop afterwards if you + want the change to be saved across boots. + +. Remove + Removes an existing installed application. You must save the desktop + afterwards if you want the change to be saved across boots. + +. Skip + Skips installing/removing the current application, and moves on to the + next one you specified. If you only specified one application, this + is the same as Cancel. + +. Cancel + Skip installing/removing all remaining applications. + + +Install devices +=============== +This automatically installs icons for all devices that are currently +known to GEMDOS (have an entry in _drvbits) and that do not currently +have an icon. If the device is A: or B:, a floppy icon is installed; +otherwise a hard disk icon is installed. + + +Remove desktop icon +=================== +This is used to remove a disk or trash icon. Highlight the icon you +wish to remove, and click on "Remove desktop icon". + + +Desktop configuration +===================== +192K ROMs: +This is not available. + +Other ROMs: +This is a simplified version of the corresponding Atari TOS menu item. +It allows you to specify the default directory and input parameter for +all applications that are not installed applications. See "Install +application" above, under 'Default dir' and 'Parameter', for further +information about these options. + + +Blitter +======= +This item allows you to enable or disable the use of the blitter by the +desktop. The item is greyed-out if the system does not have a blitter. + + +User-assignable icons +===================== +When EmuDesk starts, it looks for a file called EMUICON.RSC in the root +of the boot drive. This file should be a standard Atari resource file, +with at least eight icons. All icons in the file must be 32x32-pixel +monochrome icons. If the file is found, these icons are used for the +desktop and window displays; if not found, a standard set of eight +builtin icons is used instead. The builtin icons (or the first eight +of the loaded icons, if EMUICON.RSC is in use) have the following usage: + 0 hard drive + 1 floppy drive + 2 folder + 3 trash + 4 printer + 5 removable disk + 6 generic application icon + 7 generic document icon +Icons 8 and above can be used as you wish. + +Note that, for historical reasons, these assignments are different from +those used by Atari TOS, so if you have an equivalent RSC file that works +with Atari TOS, you will need to move the icons around to get the same +desktop display. + +A default EMUICON.RSC file (currently containing 41 icons) is shipped +with the release; the first 8 icons are the same as the builtin ones. +Also shipped is the corresponding EMUICON.DEF file for use by a resource +editor. You should be aware that each icon consumes about 300 bytes of +RAM, so if you are short of memory, avoid putting too many icons in +EMUICON.RSC. + + +User-assignable mouse cursors +============================= +When the AES starts, it looks for a file called EMUCURS.RSC in the root +of the boot drive. This file should be a standard Atari resource file, +containing 8 ICONBLKs; each ICONBLK is a container for a mouse cursor. +If the file is found, these cursors are used instead of the builtin +cursors. The usage is as described for the AES graf_mouse() call: + 0 arrow + 1 text cursor / i-beam + 2 busy bee / hourglass + 3 pointing hand + 4 flat hand + 5 thin cross + 6 thick cross + 7 outline cross + +A default EMUCURS.RSC file is shipped with the release; the mouse cursors +in it are the same as the builtin ones. Also shipped is the corresponding +EMUCURS.DEF file for use by a resource editor. + +NOTE: Because the mouse cursors are not really ICONBLKs (though they are +stored as such within the resource), editing them with a standard resource +editor is difficult. Thorsten Otto's ORCS resource editor has special +support for mouse cursors and is the recommended tool for modifying them. + + +Open disk window via keyboard shortcut +====================================== +You may now use a keyboard shortcut to display the root directory of a +drive in a new window. To display drive X, hold the Alt key down and +type X, e.g. Alt-C displays drive C, Alt-D displays drive D, and so on. +As in TOS2/3/4, these shortcuts are permanently assigned and cannot be +changed by the user. + +NOTE: unlike TOS2/3/4, shortcuts with the Ctrl modifier do NOT update +the drive assigned to the currently topped window; instead, they are +assigned to menu item shortcuts. At the moment, these assignments are +also permanent. + + +Desktop shortcuts +================= +You may now drag a file or folder to the desktop to create a desktop icon +that is a shortcut to the original file/folder: manipulating the icon +will have the same effect as manipulating the original file or folder. +For example, it may be opened, copied, or moved or deleted; it may have +an "Info/rename" performed on it. Currently, by design, the shortcut is +NOT updated automatically if the original file or folder is moved or +deleted. + +The name and shape of the shortcut icon itself may be modified by the +"Install icon" menu item; this does not change the name of the file or +folder that the icon points to. The shortcut icon may be deleted by the +"Remove icon" menu item. To preserve shortcut information across boots, +you must save the desktop. + +You may drag a file or folder to a desktop shortcut, with the following +results: +. dragging documents to a desktop shortcut for a folder will copy (or + move, if the control key is held down) them to the folder +. dragging documents to a desktop shortcut for a program will launch the + program, passing the full pathname of the first document +. dragging documents to a desktop shortcut for a non-executable file will + do nothing + +If you open a desktop shortcut that points to a file or folder that no +longer exists, an alert will be issued, giving you the choice of removing +the shortcut, locating the desired file or folder, or cancelling the +action. If you choose locate, a file selector will be displayed to +allow you to choose the desired file or folder, and the shortcut will be +updated with the new information. diff --git a/ROMImages/AtariST/doc/incompatible.txt b/ROMImages/AtariST/doc/incompatible.txt new file mode 100644 index 000000000..32f35cf79 --- /dev/null +++ b/ROMImages/AtariST/doc/incompatible.txt @@ -0,0 +1,227 @@ +Programs incompatible with EmuTOS +================================= +This is a list of programs that have program bugs or shortcomings that +prevent them from running properly with EmuTOS, and whose problem has +been definitively identified. It is mainly intended to prevent these +programs from being added to 'bugs.txt' in the future. + + +Program: STOS programs +---------------------- +Error 1: joystick and/or keyboard input doesn't work. + +Bug analysis: +STOS Basic compiler routines check for input using undocumented and +TOS-specific locations. Programs using these routines work only with +specific TOS versions, and not with EmuTOS. + +Workaround: +Use version of the program that has been fixed to work with modern TOS +versions. + +Error 2: STOS error message "Error #046, press any key" during startup. + +Bug analysis: +This is caused by a divide-by-zero error in vsm_height() when the +program is run from the AUTO folder. VDI initialisation does not occur +until after AUTO-folder programs have been run, so if a VDI function is +called by an AUTO-folder program, internal variables have not been +initialised. STOS tries to initialise these variables itself, based on +a built-in table of TOS-specific locations. These locations are invalid +for EmuTOS, so the required variables remain zero, causing the error. + +Workaround: +Move the program from the AUTO folder to the root of the drive, and run +it from there. While STOS programs will then start, most of them will +remain unusable due to error 1 above. + + +Program: old game using fixed addresses +--------------------------------------- +Error: panic during game startup. + +Bug analysis: +Several old, floppy-only games load their data into fixed memory +addresses, which won't work when EmuTOS has loaded something else +there. This can be detected by tracing programs' OS calls with Hatari +(--trace os_all) and checking the used addresses. For example, under +older EmuTOS versions, the Gods game demo (from an ST Format cover disk) +overwrote itself with its game data because of this, and crashed. + +Workarounds: +In some games this can be worked around by either using the cartridge +version of EmuTOS (which uses less memory) or by using a custom high-RAM +build of EmuTOS, that uses higher RAM addresses for loading programs and +for memory allocation: +make 512 UNIQUE=uk DEF="-DSTATIC_ALT_RAM_ADDRESS=0x00080000 -DCONF_WITH_FRB=0" + +However, this doesn't help with programs which also expect undocumented, +OS internal functions and variables to be at certain locations. The +best workaround is to use a version of the game that has been fixed to +run from HD and with modern TOS versions. + + +Program: Awele v1.01 +-------------------- +Error: mono desktop colours are inverted after exiting program. + +Bug analysis: +This version of Awele was compiled with PureC and linked with a very +early version of Windform. During WinDOM initialisation, malloc() is +called to allocate an area to save the palette in. However, although +malloc() returns the pointer in A0, the WinDOM code assumes it is in D0. +As a result, an area of low memory is pointed to, which is overwritten +during Awele execution. At program termination, the palette is restored +from the overwritten area, resulting in the error seen. + +Workaround: +Use v1.02 of the game. + + +Program: Cameleon +----------------- +Error 1: program exits immediately when 'Start game' is selected. + +Bug analysis: +The program requires an STe. In order to determine whether it is +running on an STe, it checks the contents of location 0x995 (hardcoded). +On Atari TOS, this is where TOS initialisation happens to store the _MCH +cookie but this is *not* how Atari says you should locate it (and it's +not where EmuTOS stores it). + +Error 2: program crashes with a Trace exception on any exit. + +Bug analysis: +During startup, the program switches to supervisor state via the Super() +system call. Subsequently, the supervisor stack overwrites the program's +user stack. On exit, the user stack pointer is restored and during this +a corrupted value is loaded into the SR, causing a trace excpetion. + + +Program: (VDI) Invaders and Anduril +----------------------------------- +Error: keys to move an object are ignored (in Invaders, the '-' key; in +Anduril, the 'h' & 'j' keys) + +Bug analysis: +Both programs were written by "M.Dheus" who found that the most recent +key input from the keyboard was stored at offset 0x6d from the address +returned by Kbdvbase(), and used that to read the keyboard. This was +never documented by Atari, but was apparently true for all versions of +TOS 1. However it is not true for TOS 2, 3, or 4 (or EmuTOS). + + +Program: Ramses +--------------- +Error: panic + +Bug analysis: +Program calls the Line A initialization $A00A and gets the routine +vectors in a2. It gets the address of _v_hide_c, then starts doing +undocumented things with the bytes of the actual routine: + https://sourceforge.net/p/emutos/mailman/message/30605378/ + + +Program: STVidPlay +------------------ +Error: "Error in getting file location" + +Bug analysis: +Program looks for a specific 2-byte sequence in the hard disk driver +code pointed to by hdv_rw ($476). If it doesn't find that sequence +within bytes 6-48 (or thereabouts) of the start of the driver, it +gives the error message. + + +Program: Cubase Lite +-------------------- +Error: panic + +Bug analysis: +On TOS 1.62 etv_timer vector is a delegate to an internal private +function. Cubase Lite tries to guess the address of that private +function in an undocumented way, which crashes on EmuTOS. (Somebody +could write a loader or TSR to change the etv_timer function so that +Cubase will not crash.) + + +Program: Reservoir Gods games (Bugger, Bunion, SkyFall, Sworm) +-------------------------------------------------------------- +Error: panic + +Bug analysis: +Games use an undocumented TOS4 vector for keyboard input instead of +accessing kbdvec correctly. This causes EmuTOS to panic. + +Workaround: +This can be worked around with the following hack.prg: + https://sourceforge.net/p/emutos/mailman/message/26841274/ + + +Program: OMIKRON.BASIC V3.01 (interpreter) +------------------------------------------ +Error: Panic (bus error) during start + +Bug analysis: +The program relies on undocumented internal TOS variables at several +points. First, it expects A0 upon return from Mediach (BIOS function) +to point to wplatch (floppy write protect latch variable). On EmuTOS +A0 is 0 and hence a bus error occurs when the program wants to modify +that variable. Second, it parses the bytes of the 0xA00A (hide cursor) +line-A routine to get the address of a variable reflecting the internal +state of the mouse cursor. This is done with the same code used in +"Ramses" (see above). This also fails on EmuTOS, resulting in another +bus error. There may be more accesses to undocumented variables. + + +Program: STSpeech v2.0 +---------------------- +Error: panics due to stack corruption + +Bug analysis: +The program installs a custom Timer A interrupt handler, and calls the +XBIOS from it. If the Timer A interrupt happens to occur just when an +unrelated BIOS/XBIOS call is manipulating _savptr (saving registers), +then the nested XBIOS call inside the Timer A handler will trash that +BIOS/XBIOS save area, possibly modifying the stack pointer. In the +"Hitchhiker's Guide to the BIOS", Atari documented a workaround for this, +but STSpeech does not use it. + +Workaround: +Because this problem is timing-dependent, it does not show up on Atari +TOS, and only shows up in EmuTOS if BigDOS is installed (BigDOS issues +many XBIOS calls). Use program without BigDOS, or anything else doing +a lot of XBIOS calls. + + +Program: Protracker v2 STE (Equinox version) +-------------------------------------------- +Error: crash when "DISK OP." button is selected + +Bug analysis: +The program relies on a TOS-specific code sequence, as follows: +1. it searches the ROM (pointed to by location 4) for the first word + equal to 0x47e +2. when found, it uses the longword immediately before as a pointer to + an address; in TOS2, this is a pointer to the mediachange handler +3. it stores the long at offset 0x1c from that address in its data + segment; in TOS2, this is a pointer to (I think) two bytes of + status for the floppy drives +Subsequently, when "DISK OP." is selected, the stored long is used as a +pointer. In TOS2, the value stored is $4216; in EmuTOS, it's zero, +resulting in a crash. + + +Program: Spectrum 512 +--------------------- +Error: crash during program initialisation + +Bug analysis: +The program relies on a TOS-specific code sequence, as follows: +1. it searches the VBL handler (pointed to by location $70) for the + first word containing a value of 0x6100 +2. when found, it uses the word immediately following as an index to + generate an address, and starts searching at that address for a + word containing a value of 0x8606 +Under EmuTOS, the address generated is a nonsense address which happens +to be odd, causing an immediate address error. diff --git a/ROMImages/AtariST/doc/license.txt b/ROMImages/AtariST/doc/license.txt new file mode 100644 index 000000000..82fa1daad --- /dev/null +++ b/ROMImages/AtariST/doc/license.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/ROMImages/AtariST/doc/status.txt b/ROMImages/AtariST/doc/status.txt new file mode 100644 index 000000000..596913c7d --- /dev/null +++ b/ROMImages/AtariST/doc/status.txt @@ -0,0 +1,583 @@ +This file documents the status of the individual parts of EmuTOS. + +Here is a quick list of supported emulators/hardware: +This table should be updated regularly. When indicating failure, +if possible add a line telling in which version it did run. +Unless otherwise specified in 'details', systems were tested using +a ROM version of EmuTOS. + + system | ok? | who | date | details + --------------------+-------+-----+-------------+---------------- + Emulators | | | | + ARAnyM 1.0.2 | yes | VRI | 17 Dec 2018 | + Hatari v2.1.0 | yes | VRI | 16 Dec 2018 | + Pacifist v0.48 | yes | LVL | winter 2001 | + SainT v2.40 | yes | (1) | 10 Dec 2017 | 192k ROM only + STeem SSE 3.9.4 | yes | VRI | 16 Dec 2018 | + STonC v0.8.1 | yes | LVL | 9 Feb 2003 | + STonX 0.6.7.6 | yes | THH | 14 Nov 2008 | + TOSBox 1.10a | no | ? | < Sep 2002 | + WinSTon V0.1r2 | no | ? | < Sep 2002 | + WinUAE 4.1.0 | yes | VRI | 19 Dec 2018 | + --------------------+-------+-----+-------------+---------------- + Atari & compatibles | | | | + STfm | yes | (1) | 23 Nov 2017 | + Mega ST | yes | (8) | 7 Dec 2018 | tested with PRG + STe | yes | (1) | 23 Nov 2017 | + Mega STe | yes | (2) | 26 Jun 2004 | only RAMTOS tested + TT030 | yes | RFB | 30 Nov 2018 | tested with PRG + Falcon030 | yes | (7) | 31 Dec 2016 | + Falcon030 | yes | RFB | 29 Nov 2018 | tested with PRG + Falcon030 + CT60 | yes | RFB | 29 Nov 2018 | tested with PRG + Suska III-C (2K15B) | yes | (5) | 23 Apr 2016 | + --------------------+-------+-----+-------------+---------------- + Other systems | | | | + Amiga Blizzard 1260 | yes | (3) | Aug 2012 | tested with BlizKick + Amiga 500 + Vampire | yes | VRI | 21 Dec 2018 | + Amiga 600 + Vampire | yes | (6) | Mar 2017 | + Amiga 1000 | yes | (4) | Jul 2012 | + FireBee | yes | VRI | 18 Dec 2018 | + M5484LITE | yes | VRI | 18 Dec 2018 | + + (1) reported by Christian Zietz + (2) reported to LVL by Frédéric Pécourt + (3) reported by Michaël Gibs + (4) reported by amiman99 + (5) reported by Markus Fröschle + (6) reported by Flype + (7) reported by Stefan Niestegge + (8) reported by Claude Labelle + +Now let's talk about the different subsystems, and what is implemented. +NOTE: the information in the following table may be somewhat dated. For +example, most GEMDOS/BIOS/XBIOS functions are known to work without +problems. + + +This is what the first field of the following table means: + +? status unknown +- Not yet implemented +> Partially implemented +X Fully implemented and untested +t Fully implemented and partially tested +T tested and working on an emulator or real hardware + + + Hardware initialization + ---------------------------------------------------------------------------- + + T CPU setting, tested on: 68000 (real & emu), 68030 (real & emu), 68040 (emu), + 68060 (real), 68080 (real), V4e (real) + T FPU + T 68030 MMU and cache initialization + T Memory controller (both ST and Falcon) + T DMA controller + T WD 1772 / AJAX Floppy disk controller + T MFP, MFP#2 + T PSG + T ST shifter + T STe shifter + T TT shifter + T VIDEL + T ACIAs, IKBD protocol + t MegaST Real-Time Clock (set clock not tested) + T NVRAM (including RTC) + T Blitter + T Microwire + t DMA sound + - DSP + T SCC + T IDE + T ACSI + T SCSI + T SD/MMC + T NatFeats (a framework for native features on emulators) + + + BOOT sequence + ---------------------------------------------------------------------------- + + T configure memory + T execute reset routine + T detect monitor type + T detect graphics resolution + T detect processor type, FPU type and hardware features + T setup a cookie jar with system cookies + ... + T init floppy drives + T boot floppy + t boot DMA (note it does not work with e.g. AHDI) + T execute reset-resident prgs: undocumented TOS feature, disabled by default + T run AUTO prgs + T run 'command.prg' + T run the default shell, EmuCON + T run the GEM desktop + + + BIOS devices + ---------------------------------------------------------------------------- + + t 0 PRN: parallel port + t 1 AUX: default serial port + T 2 CON: console (screen) + T 3 MIDI + T 4 IKBD + T 5 raw screen + T 6 ST-compatible serial port + T 7 SCC channel B + T 8 TT-MFP serial port + T 9 SCC channel A + + + ACIA interrupt handlers + ---------------------------------------------------------------------------- + + - midierr + - ikbderr + t midi input + T ikbd key events + T IKBD clock + T mouse + t joysticks + + + BIOS Functions + ---------------------------------------------------------------------------- + + T 0x00 Getmpb + T 0x01 Bconstat + T 0x02 Bconin + T 0x03 Bconout + T 0x04 Rwabs + T 0x05 Setexc + T 0x06 Tickcal + T 0x07 Getbpb + T 0x08 Bcostat + T 0x09 Mediach + T 0x0a Drvmap + T 0x0b Kbshift + + + XBIOS Functions + ---------------------------------------------------------------------------- + +All XBIOS versions: + X 0x00 Initmous + - 0x01 Ssbrk (useless - will not be implemented) + T 0x02 Physbase + T 0x03 Logbase + T 0x04 Getrez + T 0x05 Setscreen + T 0x06 Setpalette + T 0x07 Setcolor + T 0x08 Floprd + T 0x09 Flopwr + T 0x0a Flopfmt + - 0x0b Dbmsg (useless - will not be implemented) + T 0x0c Midiws + X 0x0d Mfpint + X 0x0e Iorec + T 0x0f Rsconf + T 0x10 Keytbl + T 0x11 Random + T 0x12 Protobt + T 0x13 Flopver + - 0x14 Scrdmp + T 0x15 Cursconf + T 0x16 Settime + T 0x17 Gettime + T 0x18 Bioskeys + T 0x19 Ikbdws + T 0x1a Jdisint + T 0x1b Jenabint + T 0x1c Giaccess + T 0x1d Offgibit + T 0x1e Ongibit + T 0x1f Xbtimer + T 0x20 Dosound + - 0x21 Setprt (useless - will not be implemented) + X 0x22 Kbdvbase + T 0x23 Kbrate + - 0x24 Prtblk (useless - will not be implemented) + T 0x25 Vsync + T 0x26 Supexec + - 0x27 Puntaes (useless - will not be implemented) + +TOS v1.02: + T 0x29 Floprate + T 0x40 Blitmode + +TOS v2.0: + t 0x2a DMAread + t 0x2b DMAwrite + t 0x2c Bconmap + +TOS v3.00: + T 0x2e NVMaccess + + t 0x50 EsetShift (for TT shifter only) + t 0x51 EgetShift (for TT shifter only) + t 0x52 EsetBank (for TT shifter only) + t 0x53 EsetColor (for TT shifter only) + t 0x54 EsetPalette (for TT shifter only) + t 0x55 EgetPalette (for TT shifter only) + t 0x56 EsetGray (for TT shifter only) + t 0x57 EsetSmear (for TT shifter only) + +TOS v4.00: + t 0x58 Vsetmode (for Falcon Videl only) + t 0x59 Vmontype (for Falcon Videl only) + t 0x5a VsetSync (for Falcon Videl only) + t 0x5b VgetSize (for Falcon Videl only) + + t 0x5d VsetRGB (for Falcon Videl only) + t 0x5e VgetRGB (for Falcon Videl only) + + - 0x96 VsetMask (for Falcon Videl only) + +2nd bit in _SND is set: + t 0x80 LockSnd + t 0x81 UnlockSnd + t 0x82 Soundcmd + t 0x83 Setbuffer + t 0x84 Setmode + t 0x85 Settracks + t 0x86 Setmontracks + t 0x87 Setinterrupt + t 0x8c Sndstatus + +3rd bit in _SND is set: + t 0x88 Buffoper + t 0x8a Gpio + t 0x8b Devconnect + t 0x8d Buffptr + +3&4 bits in _SND are set: + t 0x89 Dsptristate + +5th bit in _SND is set: + - 0x60-0x7F, 32 Dsp_* functions + +TOS v4 extended XBIOS functionality: + - 16-bit Videl resolution setting + + + GEMDOS Functions + ---------------------------------------------------------------------------- + +All GEMDOS versions: + T 0x00 Pterm0 + T 0x01 Cconin + T 0x02 Cconout + T 0x03 Cauxin + T 0x04 Cauxout + T 0x05 Cprnout + T 0x06 Crawio + T 0x07 Crawin + T 0x08 Cnecin + T 0x09 Cconws + T 0x0a Cconrs + T 0x0b Cconis + + T 0x0e Dsetdrv + + T 0x10 Cconos + T 0x11 Cprnos + T 0x12 Cauxis + T 0x13 Cauxos + + T 0x19 Dgetdrv + T 0x1a Fsetdta + + T 0x20 Super + + T 0x2a Tgetdate + T 0x2b Tsetdate + T 0x2c Tgettime + T 0x2d Tsettime + + T 0x2f Fgetdta + T 0x30 Sversion + T 0x31 Ptermres + + T 0x36 Dfree + + T 0x39 Dcreate + T 0x3a Ddelete + T 0x3b Dsetpath + T 0x3c Fcreate + T 0x3d Fopen + T 0x3e Fclose + T 0x3f Fread + T 0x40 Fwrite + T 0x41 Fdelete + T 0x42 Fseek + T 0x43 Fattrib + + T 0x45 Fdup + T 0x46 Fforce + T 0x47 Dgetpath + T 0x48 Malloc + T 0x49 Mfree + T 0x4a Mshrink + T 0x4b Pexec + T 0x4c Pterm + + T 0x4e Fsfirst + T 0x4f Fsnext + + T 0x56 Frename + T 0x57 Fdatime + +GEMDOS v0.19 (TOS v2): + T 0x14 Maddalt + T 0x44 Mxalloc + (and Pexec mode 6) + + + Line-A functions + ---------------------------------------------------------------------------- + T $0 - Initialization + t $1 - Put pixel + t $2 - Get pixel + t $3 - Arbitrary line + t $4 - Horizontal line + t $5 - Filled rectangle + t $6 - Filled polygon (see bugs.txt) + t $7 - Bit block transfer (may miss options not needed by VDI) + t $8 - Text block transfer + T $9 - Show mouse + T $A - Hide mouse + t $B - Transform mouse + t $C - Undraw sprite + t $D - Draw sprite + t $E - Copy raster form + t $F - Seedfill + + + VDI functions + ---------------------------------------------------------------------------- + + All TOS 1.0 calls are implemented. + + T v_opnwk + X v_clswk + T v_opnvwk + T v_clsvwk + T v_clrwk + - v_updwk + > vst_load_fonts (needs GDOS or equivalent) + > vst_unload_fonts (needs GDOS or equivalent) + t vs_clip + T v_pline + T v_pmarker + T v_gtext + T v_fillarea + - v_cellarray (not supported by any current VDI driver) + T v_contourfill + T vr_recfl + T v_bar + T v_arc + T v_pieslice + T v_circle + T v_ellipse + T v_ellarc + T v_ellpie + X v_rbox + T v_rfbox + T v_justified + T vswr_mode + > vs_color + T vsl_type + X vsl_udsty + T vsl_width + > vsl_color + T vsl_ends + T vsm_type + T vsm_height + > vsm_color + T vst_height + T vst_point + T vst_rotation + X vst_font + > vst_color + T vst_effects + T vst_alignment + T vsf_interior + T vsf_style + t vsf_color + T vsf_perimeter + X vsf_udpat + t vro_cpyfm + > vrt_cpyfm + T vr_trnfm + > v_get_pixel + X vsin_mode + X vrq_locator + X vsm_locator + - vrq_valuator + - vsm_valuator + X vrq_choice + X vsm_choice + X vrq_string + X vsm_string + X vsc_form + X vex_timv + T v_show_c + T v_hide_c + X vq_mouse + T vex_butv + T vex_motv + T vex_curv + X vq_key_s + t vq_extnd + > vq_color + > vql_attributes + > vqm_attributes + > vqf_attributes + > vqt_attributes + > vqt_extent + X vqt_width + X vqt_name + - vq_cellarray (not supported by any current VDI driver) + X vqin_mode + X vqt_fontinfo + T vq_chcells + T v_exit_cur + T v_enter_cur + T v_curup + T v_curdown + T v_curright + T v_curleft + T v_curhome + T v_eeos + T v_eeol + T vs_curaddress + T v_curtext + T v_rvon + T v_rvoff + T vq_curaddress + T vq_tabstatus + - v_hardcopy + T v_dspcur (Atari docs are incorrect for this call) + T v_rmcur (Atari docs are incorrect for this call) + - v_form_adv + - v_output_window + - v_clear_disp_list + - v_bit_image + - vs_palette + - vqp_films + - vqp_state + - vsp_state + - vsp_save + - vsp_message + - vqp_error + - v_meta_extents + - v_write_meta + - vm_filename + +TOS v4 extended VDI functionality: + - 16-bit support for graphics functions (for now, use fVDI) + + + AES functions + ---------------------------------------------------------------------------- + +All AES versions: + t appl_init + X appl_read + X appl_write + t appl_find + t appl_tplay + X appl_trecord + X appl_yield (PC-GEM call) + t appl_exit + X evnt_keybd + t evnt_button + X evnt_mouse + t evnt_mesag + X evnt_timer + t evnt_multi + X evnt_dclick + t menu_bar + t menu_icheck + X menu_ienable + X menu_tnormal + X menu_text + t menu_register + X menu_unregister (PC-GEM call) + X menu_click (PC-GEM call) + X objc_add + X objc_delete + t objc_draw + X objc_find + t objc_offset + X objc_order + X objc_edit + t objc_change + t form_do + t form_dial + t form_alert + X form_error + t form_center + X form_keybd + X form_button + t graf_rubberbox + X graf_dragbox + X graf_mbox + T graf_growbox + T graf_shrinkbox + X graf_watchbox + X graf_slidebox + t graf_handle + t graf_mouse + t graf_mkstate + X scrp_read + X scrp_write + X scrp_clear (PC-GEM call) + X fsel_input + t wind_create + t wind_open + t wind_close + t wind_delete + t wind_get + X wind_set + X wind_find + t wind_update + t wind_calc + t rsrc_load + t rsrc_free + t rsrc_gaddr + X rsrc_saddr + t rsrc_obfix + X shel_read + X shel_write + X shel_get + X shel_put + T shel_find + X shel_envrn + X shel_rdef (PC-GEM call) + X shel_wdef (PC-GEM call) + +AES v1.40 (TOS >= v1.04): + T fsel_exinput + t wind_new + +AES v3.30 (TOS > v3.06): + - menu_attach + - menu_istart + - menu_popup + - menu_settings + +AES v3.40 (TOS >= v4): + - objc_sysvar (3D look) + +TOS v4 extended AES functionality: + - RSC file color icon support + + + Misc desktop functions + ---------------------------------------------------------------------------- + + - Cartridge file system support (useless - will not be implemented) diff --git a/ROMImages/AtariST/doc/todo.txt b/ROMImages/AtariST/doc/todo.txt new file mode 100644 index 000000000..7aa0fbc50 --- /dev/null +++ b/ROMImages/AtariST/doc/todo.txt @@ -0,0 +1,25 @@ +General + +BIOS/XBIOS +- implement missing XBIOS calls (e.g. Falcon DSP functions) +- reduce the number of 'extern' in .c files +- check that RAM disks work +- misc. TODOs in floppy.c +- implement full XHDI 1.30 +- let EmuTOS set up correct MMU tree on 68040 (?) + +BDOS (GEMDOS) +- move mem-only routines out of proc.c into umem.c or iumem.c + +VDI +- The linemask for dashed lines is not calculated correct, depending on + the internal calculations of increase in x direction, like in original TOS. + +AES +- Implement AES v3.x functions (TOS v3 menu functions and v4 3D look) + +DESK +- Add a dialog for configuring the NVRAM (keyboard, languages, ...) +- Support for loading DESKTOP.INF (needs remapping of the icon indexes) + +CLI diff --git a/ROMImages/AtariST/doc/xhdi.txt b/ROMImages/AtariST/doc/xhdi.txt new file mode 100644 index 000000000..8f1287017 --- /dev/null +++ b/ROMImages/AtariST/doc/xhdi.txt @@ -0,0 +1,22 @@ +FUNCTION XHDI VERSION SUPPORTED BY EMUTOS +---------------------------------------------------------------------- +XHGETVERSION 0 ALL YES +XHINQTARGET 1 ALL YES +XHRESERVE 2 ALL NO +XHLOCK 3 ALL NO +XHSTOP 4 ALL NO +XHEJECT 5 ALL NO +XHDRVMAP 6 ALL YES +XHINQDEV 7 ALL YES +XHINQDRIVER 8 ALL YES +XHNEWCOOKIE 9 OPTIONAL YES +XHREADWRITE 10 ALL YES +XHINQTARGET2 11 >= 1.01 YES +XHINQDEV2 12 >= 1.10 YES +XHDRIVERSPECIAL 13 OPTIONAL NO +XHGETCAPACITY 14 OPTIONAL YES +XHMEDIUMCHANGED 15 OPTIONAL NO +XHMINTINFO 16 OPTIONAL NO +XHDOSLIMITS 17 OPTIONAL YES +XHLASTACCESS 18 >= 1.25 NO +XHREACCESS 19 >= 1.25 NO diff --git a/ROMImages/AtariST/etos192uk.img b/ROMImages/AtariST/etos192uk.img new file mode 100644 index 0000000000000000000000000000000000000000..4df1637136354394bbe10aa29471925bbd6edc22 GIT binary patch literal 196608 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 literal 0 HcmV?d00001 diff --git a/ROMImages/AtariST/readme.txt b/ROMImages/AtariST/readme.txt new file mode 100644 index 000000000..2a40ac2d3 --- /dev/null +++ b/ROMImages/AtariST/readme.txt @@ -0,0 +1,7 @@ +THIS EMULATOR DOES NOT EMULATE THE ATARI ST. + +Included here are Atari ST-targeted versions of EmuTOS, being a significant chunk of freely available and redistributable 68000 code that can be used to test the 68000-in-progress. + +EmuTOS is distributed under the GPL. See its licence and other information within the doc/ subdirectory. + +It was obtained via http://emutos.sourceforge.net/en/ \ No newline at end of file From 9e8928aad945056857a6065f18076e4e557cd1ed Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 11 Mar 2019 22:47:37 -0400 Subject: [PATCH 007/239] Implements as much as I currently care about of the Atari ST memory map. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 435e42bff..59a37050b 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -8,7 +8,9 @@ #import +#include #include + #include "68000.hpp" #include "CSROMFetcher.hpp" @@ -28,16 +30,32 @@ class EmuTOS: public CPU::MC68000::BusHandler { } HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { + uint32_t address = cycle.address ? (*cycle.address) & 0x00fffffe : 0; + + // As much about the Atari ST's memory map as is relevant here: the ROM begins + // at 0xfc0000, and the first eight bytes are mirrored to the first four memory + // addresses in order for /RESET to work properly. RAM otherwise fills the first + // 512kb of the address space. Trying to write to ROM raises a bus error. + + const bool is_rom = address > 0xfc0000 || address < 8; + uint16_t *const base = is_rom ? emuTOS_.data() : ram_.data(); + if(is_rom) { + address &= 0x1ffff; + } else { + address &= 0x7ffff; + } + + // TODO: discern reads and writes (!) switch(cycle.operation & (CPU::MC68000::Microcycle::LowerData | CPU::MC68000::Microcycle::UpperData)) { case 0: break; case CPU::MC68000::Microcycle::LowerData: - cycle.value->halves.low = emuTOS_[*cycle.address >> 1] >> 8; + cycle.value->halves.low = base[address >> 1] >> 8; break; case CPU::MC68000::Microcycle::UpperData: - cycle.value->halves.high = emuTOS_[*cycle.address >> 1] & 0xff; + cycle.value->halves.high = base[address >> 1] & 0xff; break; case CPU::MC68000::Microcycle::UpperData | CPU::MC68000::Microcycle::LowerData: - cycle.value->full = emuTOS_[*cycle.address >> 1]; + cycle.value->full = base[address >> 1]; break; } @@ -48,6 +66,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { CPU::MC68000::Processor m68000_; std::vector emuTOS_; + std::array ram_; }; @interface EmuTOSTests : XCTestCase From 33b53e7605aceaacc8b2b3f1d2083f5118240ce8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 11 Mar 2019 22:47:58 -0400 Subject: [PATCH 008/239] Settles upon disassembly as the route in, and begins work in that direction. --- Processors/68000/68000.hpp | 1 + .../Implementation/68000Implementation.hpp | 2 + .../68000/Implementation/68000Storage.cpp | 99 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 6 ++ 4 files changed, 108 insertions(+) diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 872e86b68..66418bf9a 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -10,6 +10,7 @@ #define MC68000_h #include +#include #include #include diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 393f53d80..9e51b13bc 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -25,6 +25,8 @@ template void Processor: } } + // TODO: synchronous bus. + // Perform the microcycle. bus_handler_.perform_bus_operation(active_program_->microcycle, is_supervisor_); diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 356ec4a0a..9a8db17a0 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -11,8 +11,16 @@ using namespace CPU::MC68000; ProcessorStorage::ProcessorStorage() { + // Create the reset program. reset_program_ = assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); + // TODO: install access patterns. + + // Install operations. + for(int c = 0; c < 65536; ++c) { + install_instruction(c); + } + // Set initial state. Largely TODO. active_program_ = reset_program_.data(); effective_address_ = 0; @@ -110,3 +118,94 @@ std::vector ProcessorStorage::assemble_program(const cha return steps; } + +/* + install_instruction acts, in effect, in the manner of a disassembler. So this class is + formulated to run through all potential 65536 instuction encodings and attempt to + disassemble each, rather than going in the opposite direction. + + This has two benefits: + + (i) which addressing modes go with which instructions falls out automatically; + (ii) it is a lot easier during the manual verification stage of development to work + from known instructions to their disassembly rather than vice versa; especially + (iii) given that there are plentiful disassemblers against which to test work in progress. +*/ +void ProcessorStorage::install_instruction(int instruction) { + enum class Operation { + ABCD, ADD, ADDA, ADDI, ADDQ, ADDX, AND, ANDI, + ASL, ASLrmw, ASR, ASRrmw, Bcc, + + TODO + }; + + struct PatternMapping { + uint16_t mask, value; + Operation operation; + }; + + /* + Credit here is due to 'wrm' (https://github.com/wrm-za I assume) for his public + domain 68000 disassembler, from which the table below was largely sourced. + Manual legwork has been extended to check this table against the M68000 + Programmer's Reference Manual, currently available at + https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf + */ + const std::vector mappings = { + {0xf1f0, 0xc100, Operation::ABCD}, {0xf000, 0xd000, Operation::ADD}, + {0xf0c0, 0xd0c0, Operation::ADDA}, {0xff00, 0x0600, Operation::ADDI}, + {0xf100, 0x5000, Operation::ADDQ}, {0xf130, 0xd100, Operation::ADDX}, + {0xf000, 0xc000, Operation::AND}, {0xff00, 0x0200, Operation::ANDI}, + {0xf118, 0xe100, Operation::ASL}, {0xffc0, 0xe1c0, Operation::ASLrmw}, + {0xf118, 0xe000, Operation::ASR}, {0xffc0, 0xe0c0, Operation::ASRrmw}, + {0xf000, 0x6000, Operation::Bcc}, {0xf1c0, 0x0140, Operation::TODO}, + {0xffc0, 0x0840, Operation::TODO}, {0xf1c0, 0x0180, Operation::TODO}, + {0xffc0, 0x0880, Operation::TODO}, {0xf1c0, 0x01c0, Operation::TODO}, + {0xffc0, 0x08c0, Operation::TODO}, {0xf1c0, 0x0100, Operation::TODO}, + {0xffc0, 0x0800, Operation::TODO}, {0xf1c0, 0x4180, Operation::TODO}, + {0xff00, 0x4200, Operation::TODO}, {0xf100, 0xb000, Operation::TODO}, + {0xf0c0, 0xb0c0, Operation::TODO}, {0xff00, 0x0c00, Operation::TODO}, + {0xf138, 0xb108, Operation::TODO}, {0xf0f8, 0x50c8, Operation::TODO}, + {0xf1c0, 0x81c0, Operation::TODO}, {0xf1c0, 0x80c0, Operation::TODO}, + {0xf100, 0xb100, Operation::TODO}, {0xff00, 0x0a00, Operation::TODO}, + {0xf100, 0xc100, Operation::TODO}, {0xffb8, 0x4880, Operation::TODO}, + {0xffc0, 0x4ec0, Operation::TODO}, {0xffc0, 0x4e80, Operation::TODO}, + {0xf1c0, 0x41c0, Operation::TODO}, {0xfff8, 0x4e50, Operation::TODO}, + {0xf118, 0xe108, Operation::TODO}, {0xffc0, 0xe3c0, Operation::TODO}, + {0xf118, 0xe008, Operation::TODO}, {0xffc0, 0xe2c0, Operation::TODO}, + {0xc000, 0x0000, Operation::TODO}, {0xffc0, 0x44c0, Operation::TODO}, + {0xffc0, 0x46c0, Operation::TODO}, {0xffc0, 0x40c0, Operation::TODO}, + {0xfff0, 0x4e60, Operation::TODO}, {0xc1c0, 0x0040, Operation::TODO}, + {0xfb80, 0x4880, Operation::TODO}, {0xf138, 0x0108, Operation::TODO}, + {0xf100, 0x7000, Operation::TODO}, {0xf1c0, 0xc1c0, Operation::TODO}, + {0xf1c0, 0xc0c0, Operation::TODO}, {0xffc0, 0x4800, Operation::TODO}, + {0xff00, 0x4400, Operation::TODO}, {0xff00, 0x4000, Operation::TODO}, + {0xffff, 0x4e71, Operation::TODO}, {0xff00, 0x4600, Operation::TODO}, + {0xf000, 0x8000, Operation::TODO}, {0xff00, 0x0000, Operation::TODO}, + {0xffc0, 0x4840, Operation::TODO}, {0xffff, 0x4e70, Operation::TODO}, + {0xf118, 0xe118, Operation::TODO}, {0xffc0, 0xe7c0, Operation::TODO}, + {0xf118, 0xe018, Operation::TODO}, {0xffc0, 0xe6c0, Operation::TODO}, + {0xf118, 0xe110, Operation::TODO}, {0xffc0, 0xe5c0, Operation::TODO}, + {0xf118, 0xe010, Operation::TODO}, {0xffc0, 0xe4c0, Operation::TODO}, + {0xffff, 0x4e73, Operation::TODO}, {0xffff, 0x4e77, Operation::TODO}, + {0xffff, 0x4e75, Operation::TODO}, {0xf1f0, 0x8100, Operation::TODO}, + {0xf0c0, 0x50c0, Operation::TODO}, {0xffff, 0x4e72, Operation::TODO}, + {0xf000, 0x9000, Operation::TODO}, {0xf0c0, 0x90c0, Operation::TODO}, + {0xff00, 0x0400, Operation::TODO}, {0xf100, 0x5100, Operation::TODO}, + {0xf130, 0x9100, Operation::TODO}, {0xfff8, 0x4840, Operation::TODO}, + {0xffc0, 0x4ac0, Operation::TODO}, {0xfff0, 0x4e40, Operation::TODO}, + {0xffff, 0x4e76, Operation::TODO}, {0xff00, 0x4a00, Operation::TODO}, + {0xfff8, 0x4e58, Operation::TODO} + }; + + // Perform a linear search of the mappings above for this instruction. + for(const auto &mapping: mappings) { + if((instruction & mapping.mask) == mapping.value) { + if(mapping.operation == Operation::TODO) { + std::cout << std::hex << std::setw(4) << std::setfill('0'); + std::cout << "Yet to implement, instruction matching: x & " << mapping.mask << " == " << mapping.value << std::endl; + } + break; + } + } +} diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index ac90504cb..d7829c36e 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -104,6 +104,12 @@ class ProcessorStorage { data from those. */ std::vector assemble_program(const char *access_pattern); + + /*! + Disassembles the instruction @c instruction and inserts it into the + appropriate lookup tables. + */ + void install_instruction(int instruction); }; #endif /* MC68000Storage_h */ From 57898ed6ddc3eab121d01dc55f8eb56689314506 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 12 Mar 2019 22:46:31 -0400 Subject: [PATCH 009/239] This is where my thinking now resides. Two levels of indirection, and consolidated collections. --- .../Implementation/68000Implementation.hpp | 45 +++-- .../68000/Implementation/68000Storage.cpp | 182 +++++++++--------- .../68000/Implementation/68000Storage.hpp | 67 ++++++- 3 files changed, 183 insertions(+), 111 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9e51b13bc..7e80f16a7 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -9,17 +9,34 @@ template void Processor::run_for(HalfCycles duration) { // TODO: obey the 'cycles' count. while(true) { - // Check whether the program is exhausted. - if(active_program_->action == Step::Action::ScheduleNextProgram) { - std::cerr << "68000 Abilities exhausted" << std::endl; - return; + // Check whether the current list of bus steps is exhausted; if so then + // seek out another one from the current program (if any), and if there + // are no more to do, revert to scheduling something else (after checking + // for interrupts). + if(active_step_->action == BusStep::Action::ScheduleNextProgram) { + if(active_micro_op_) { + ++active_micro_op_; + switch(active_micro_op_->action) { + case MicroOp::Action::None: break; + + case MicroOp::Action::PerformOperation: + std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; + break; + } + active_step_ = active_micro_op_->bus_program; + } + + if(!active_step_) { + std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; + return; + } } - // The program is not exhausted, so perform the microcycle. + // The bus step list is not exhausted, so perform the microcycle. // Check for DTack if this isn't being treated implicitly. if(!dtack_is_implicit) { - if(active_program_->microcycle.operation & (Microcycle::UpperData | Microcycle::LowerData) && !dtack_) { + if(active_step_->microcycle.operation & (Microcycle::UpperData | Microcycle::LowerData) && !dtack_) { // TODO: perform wait state. continue; } @@ -28,26 +45,26 @@ template void Processor: // TODO: synchronous bus. // Perform the microcycle. - bus_handler_.perform_bus_operation(active_program_->microcycle, is_supervisor_); + bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); // Perform the post-hoc action. - switch(active_program_->action) { + switch(active_step_->action) { default: - std::cerr << "Unimplemented 68000 action: " << int(active_program_->action) << std::endl; + std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; return; break; - case Step::Action::None: break; + case BusStep::Action::None: break; - case Step::Action::IncrementEffectiveAddress: effective_address_ += 2; break; - case Step::Action::IncrementProgramCounter: program_counter_.full += 2; break; + case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; + case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; - case Step::Action::AdvancePrefetch: + case BusStep::Action::AdvancePrefetch: prefetch_queue_[0] = prefetch_queue_[1]; break; } // Move to the next program step. - ++active_program_; + ++active_step_; } } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 9a8db17a0..a90a4b11a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -8,32 +8,35 @@ #include "../68000.hpp" +#include + using namespace CPU::MC68000; ProcessorStorage::ProcessorStorage() { - // Create the reset program. - reset_program_ = assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); + // Create the exception programs. + const size_t reset_offset = assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); - // TODO: install access patterns. + // Install all necessary access patterns. + const BusStepCollection bus_steps = assemble_standard_bus_steps(); // Install operations. - for(int c = 0; c < 65536; ++c) { - install_instruction(c); - } + install_instructions(bus_steps); + + // Realise the exception programs as direct pointers. + reset_program_ = &all_bus_steps_[reset_offset]; // Set initial state. Largely TODO. - active_program_ = reset_program_.data(); + active_step_ = reset_program_; effective_address_ = 0; is_supervisor_ = 1; } -// TODO: allow actions to be specified, of course. -std::vector ProcessorStorage::assemble_program(const char *access_pattern) { - std::vector steps; +size_t ProcessorStorage::assemble_program(const char *access_pattern) { + const size_t start = all_bus_steps_.size(); // Parse the access pattern to build microcycles. while(*access_pattern) { - Step step; + BusStep step; switch(*access_pattern) { case '\t': case ' ': // White space acts as a no-op; it's for clarity only. @@ -45,13 +48,13 @@ std::vector ProcessorStorage::assemble_program(const cha switch(access_pattern[1]) { default: // This is probably a pure NOP; if what comes after this 'n' isn't actually // valid, it should be caught in the outer switch the next time around the loop. - steps.push_back(step); + all_bus_steps_.push_back(step); ++access_pattern; break; case '-': // This is two NOPs in a row. - steps.push_back(step); - steps.push_back(step); + all_bus_steps_.push_back(step); + all_bus_steps_.push_back(step); access_pattern += 2; break; @@ -61,12 +64,12 @@ std::vector ProcessorStorage::assemble_program(const cha step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &stack_pointers_[1].halves.high : &stack_pointers_[1].halves.low; - steps.push_back(step); + all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; - step.action = Step::Action::IncrementEffectiveAddress; - steps.push_back(step); + step.action = BusStep::Action::IncrementEffectiveAddress; + all_bus_steps_.push_back(step); access_pattern += 2; break; @@ -77,12 +80,12 @@ std::vector ProcessorStorage::assemble_program(const cha step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &program_counter_.halves.high : &program_counter_.halves.low; - steps.push_back(step); + all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; - step.action = Step::Action::IncrementEffectiveAddress; - steps.push_back(step); + step.action = BusStep::Action::IncrementEffectiveAddress; + all_bus_steps_.push_back(step); access_pattern += 2; break; @@ -92,13 +95,13 @@ std::vector ProcessorStorage::assemble_program(const cha step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; step.microcycle.address = &program_counter_.full; step.microcycle.value = &prefetch_queue_[1]; - step.action = Step::Action::AdvancePrefetch; - steps.push_back(step); + step.action = BusStep::Action::AdvancePrefetch; + all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; - step.action = Step::Action::IncrementProgramCounter; - steps.push_back(step); + step.action = BusStep::Action::IncrementProgramCounter; + all_bus_steps_.push_back(step); access_pattern += 2; break; @@ -112,11 +115,20 @@ std::vector ProcessorStorage::assemble_program(const cha } // Add a final 'ScheduleNextProgram' sentinel. - Step end_program; - end_program.action = Step::Action::ScheduleNextProgram; - steps.push_back(end_program); + BusStep end_program; + end_program.action = BusStep::Action::ScheduleNextProgram; + all_bus_steps_.push_back(end_program); - return steps; + return start; +} + +ProcessorStorage::BusStepCollection ProcessorStorage::assemble_standard_bus_steps() { + ProcessorStorage::BusStepCollection collection; + + collection.four_step_Dn = assemble_program("np"); + collection.six_step_Dn = assemble_program("np n"); + + return collection; } /* @@ -131,81 +143,75 @@ std::vector ProcessorStorage::assemble_program(const cha from known instructions to their disassembly rather than vice versa; especially (iii) given that there are plentiful disassemblers against which to test work in progress. */ -void ProcessorStorage::install_instruction(int instruction) { - enum class Operation { - ABCD, ADD, ADDA, ADDI, ADDQ, ADDX, AND, ANDI, - ASL, ASLrmw, ASR, ASRrmw, Bcc, - - TODO +void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_collection) { + enum class Decoder { + Decimal, + RegOpModeReg, + SizeModeRegisterImmediate, + DataSizeModeQuick }; struct PatternMapping { uint16_t mask, value; Operation operation; + Decoder decoder; }; /* - Credit here is due to 'wrm' (https://github.com/wrm-za I assume) for his public - domain 68000 disassembler, from which the table below was largely sourced. - Manual legwork has been extended to check this table against the M68000 - Programmer's Reference Manual, currently available at + Inspired partly by 'wrm' (https://github.com/wrm-za I assume); the following + table draws from the M68000 Programmer's Reference Manual, currently available at https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf + + After each line is the internal page number on which documentation of that + instruction mapping can be found, followed by the page number within the PDF + linked above. + + NB: a vector is used to allow easy iteration. */ const std::vector mappings = { - {0xf1f0, 0xc100, Operation::ABCD}, {0xf000, 0xd000, Operation::ADD}, - {0xf0c0, 0xd0c0, Operation::ADDA}, {0xff00, 0x0600, Operation::ADDI}, - {0xf100, 0x5000, Operation::ADDQ}, {0xf130, 0xd100, Operation::ADDX}, - {0xf000, 0xc000, Operation::AND}, {0xff00, 0x0200, Operation::ANDI}, - {0xf118, 0xe100, Operation::ASL}, {0xffc0, 0xe1c0, Operation::ASLrmw}, - {0xf118, 0xe000, Operation::ASR}, {0xffc0, 0xe0c0, Operation::ASRrmw}, - {0xf000, 0x6000, Operation::Bcc}, {0xf1c0, 0x0140, Operation::TODO}, - {0xffc0, 0x0840, Operation::TODO}, {0xf1c0, 0x0180, Operation::TODO}, - {0xffc0, 0x0880, Operation::TODO}, {0xf1c0, 0x01c0, Operation::TODO}, - {0xffc0, 0x08c0, Operation::TODO}, {0xf1c0, 0x0100, Operation::TODO}, - {0xffc0, 0x0800, Operation::TODO}, {0xf1c0, 0x4180, Operation::TODO}, - {0xff00, 0x4200, Operation::TODO}, {0xf100, 0xb000, Operation::TODO}, - {0xf0c0, 0xb0c0, Operation::TODO}, {0xff00, 0x0c00, Operation::TODO}, - {0xf138, 0xb108, Operation::TODO}, {0xf0f8, 0x50c8, Operation::TODO}, - {0xf1c0, 0x81c0, Operation::TODO}, {0xf1c0, 0x80c0, Operation::TODO}, - {0xf100, 0xb100, Operation::TODO}, {0xff00, 0x0a00, Operation::TODO}, - {0xf100, 0xc100, Operation::TODO}, {0xffb8, 0x4880, Operation::TODO}, - {0xffc0, 0x4ec0, Operation::TODO}, {0xffc0, 0x4e80, Operation::TODO}, - {0xf1c0, 0x41c0, Operation::TODO}, {0xfff8, 0x4e50, Operation::TODO}, - {0xf118, 0xe108, Operation::TODO}, {0xffc0, 0xe3c0, Operation::TODO}, - {0xf118, 0xe008, Operation::TODO}, {0xffc0, 0xe2c0, Operation::TODO}, - {0xc000, 0x0000, Operation::TODO}, {0xffc0, 0x44c0, Operation::TODO}, - {0xffc0, 0x46c0, Operation::TODO}, {0xffc0, 0x40c0, Operation::TODO}, - {0xfff0, 0x4e60, Operation::TODO}, {0xc1c0, 0x0040, Operation::TODO}, - {0xfb80, 0x4880, Operation::TODO}, {0xf138, 0x0108, Operation::TODO}, - {0xf100, 0x7000, Operation::TODO}, {0xf1c0, 0xc1c0, Operation::TODO}, - {0xf1c0, 0xc0c0, Operation::TODO}, {0xffc0, 0x4800, Operation::TODO}, - {0xff00, 0x4400, Operation::TODO}, {0xff00, 0x4000, Operation::TODO}, - {0xffff, 0x4e71, Operation::TODO}, {0xff00, 0x4600, Operation::TODO}, - {0xf000, 0x8000, Operation::TODO}, {0xff00, 0x0000, Operation::TODO}, - {0xffc0, 0x4840, Operation::TODO}, {0xffff, 0x4e70, Operation::TODO}, - {0xf118, 0xe118, Operation::TODO}, {0xffc0, 0xe7c0, Operation::TODO}, - {0xf118, 0xe018, Operation::TODO}, {0xffc0, 0xe6c0, Operation::TODO}, - {0xf118, 0xe110, Operation::TODO}, {0xffc0, 0xe5c0, Operation::TODO}, - {0xf118, 0xe010, Operation::TODO}, {0xffc0, 0xe4c0, Operation::TODO}, - {0xffff, 0x4e73, Operation::TODO}, {0xffff, 0x4e77, Operation::TODO}, - {0xffff, 0x4e75, Operation::TODO}, {0xf1f0, 0x8100, Operation::TODO}, - {0xf0c0, 0x50c0, Operation::TODO}, {0xffff, 0x4e72, Operation::TODO}, - {0xf000, 0x9000, Operation::TODO}, {0xf0c0, 0x90c0, Operation::TODO}, - {0xff00, 0x0400, Operation::TODO}, {0xf100, 0x5100, Operation::TODO}, - {0xf130, 0x9100, Operation::TODO}, {0xfff8, 0x4840, Operation::TODO}, - {0xffc0, 0x4ac0, Operation::TODO}, {0xfff0, 0x4e40, Operation::TODO}, - {0xffff, 0x4e76, Operation::TODO}, {0xff00, 0x4a00, Operation::TODO}, - {0xfff8, 0x4e58, Operation::TODO} + {0xf1f0, 0x8100, Operation::SBCD, Decoder::Decimal}, // 4-171 (p275) + {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) + + {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) + {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) + {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) + {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) + {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) + + {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) + + {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) }; // Perform a linear search of the mappings above for this instruction. - for(const auto &mapping: mappings) { - if((instruction & mapping.mask) == mapping.value) { - if(mapping.operation == Operation::TODO) { - std::cout << std::hex << std::setw(4) << std::setfill('0'); - std::cout << "Yet to implement, instruction matching: x & " << mapping.mask << " == " << mapping.value << std::endl; + for(int instruction = 0; instruction < 65536; ++instruction) { + for(const auto &mapping: mappings) { + if((instruction & mapping.mask) == mapping.value) { + switch(mapping.decoder) { + case Decoder::Decimal: { + const int destination = (instruction >> 8) & 7; + const int source = instruction & 7; + if(instruction & 8) { + std::cout << "Address to address (both predecrement) from " << source << " to " << destination << std::endl; + } else { + instructions[instruction].operation = mapping.operation; + instructions[instruction].source = &data_[source]; + instructions[instruction].destination = &data_[destination]; +// instructions[instruction].destination.micro_operations = + std::cout << "Data register to data register from " << source << " to " << destination << std::endl; + } + } break; + + case Decoder::RegOpModeReg: { + } break; + + default: + std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; + break; + } + + break; } - break; } } } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index d7829c36e..580a14de4 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -29,10 +29,15 @@ class ProcessorStorage { uint32_t effective_address_; RegisterPair32 bus_data_; + enum class Operation { + ABCD, SBCD, + ADD, AND, EOR, OR, SUB, + }; + /*! - A step is a microcycle to perform plus an action to occur afterwards, if any. + Bus steps are sequences of things to communicate to the bus. */ - struct Step { + struct BusStep { Microcycle microcycle; enum class Action { None, @@ -56,15 +61,53 @@ class ProcessorStorage { } action = Action::None; }; - // Special programs. - std::vector reset_program_; + /*! + A micro-op is: (i) an action to take; and (ii) a sequence of bus operations + to perform after taking the action. - // Current program pointer. - Step *active_program_ = nullptr; + A nullptr bus_program terminates a sequence of micro operations. + */ + struct MicroOp { + enum class Action { + None, + PerformOperation + } action = Action::None; + BusStep *bus_program = nullptr; + }; + + /*! + A program represents the implementation of a particular opcode, as a sequence + of micro-ops and, separately, the operation to perform plus whatever other + fields the operation requires. + */ + struct Program { + MicroOp *micro_operations = nullptr; + Operation operation; + RegisterPair32 *source; + RegisterPair32 *destination; + }; + + // Storage for all the sequences of bus steps and micro-ops used throughout + // the 68000. + std::vector all_bus_steps_; + std::vector all_micro_ops_; + + // A lookup table from instructions to implementations. + Program instructions[65536]; + + // Special programs, for exception handlers. + BusStep *reset_program_; + + // Current bus step pointer, and outer program pointer. + Program *active_program_ = nullptr; + MicroOp *active_micro_op_ = nullptr; + BusStep *active_step_ = nullptr; private: /*! - Produces a vector of Steps that implement the described program. + Installs BusSteps that implement the described program into the relevant + instance storage, returning the offset within @c all_bus_steps_ at which + the generated steps begin. @param access_pattern A string describing the bus activity that occurs during this program. This should follow the same general pattern as @@ -103,13 +146,19 @@ class ProcessorStorage { The user should fill in the steps necessary to get data into or extract data from those. */ - std::vector assemble_program(const char *access_pattern); + size_t assemble_program(const char *access_pattern); + + struct BusStepCollection { + size_t six_step_Dn; + size_t four_step_Dn; + }; + BusStepCollection assemble_standard_bus_steps(); /*! Disassembles the instruction @c instruction and inserts it into the appropriate lookup tables. */ - void install_instruction(int instruction); + void install_instructions(const BusStepCollection &); }; #endif /* MC68000Storage_h */ From bb04981280783b8bca0b663a532a57dcd5301423 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 13 Mar 2019 21:08:13 -0400 Subject: [PATCH 010/239] I'm still dithering on address management, but this seeks fully to implement ABCD and SUBD bus programs. --- .../Implementation/68000Implementation.hpp | 15 ++++ .../68000/Implementation/68000Storage.cpp | 76 +++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 23 ++++-- 3 files changed, 102 insertions(+), 12 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 7e80f16a7..7040afcb1 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -22,6 +22,21 @@ template void Processor: case MicroOp::Action::PerformOperation: std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; break; + + case MicroOp::Action::PredecrementSourceAndDestination1: + -- active_program_->source->full; + -- active_program_->destination->full; + break; + + case MicroOp::Action::PredecrementSourceAndDestination1: + active_program_->source->full -= 2; + active_program_->destination->full -= 2; + break; + + case MicroOp::Action::PredecrementSourceAndDestination1: + active_program_->source->full -= 4; + active_program_->destination->full -= 4; + break; } active_step_ = active_micro_op_->bus_program; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index a90a4b11a..64d95d643 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -31,8 +31,11 @@ ProcessorStorage::ProcessorStorage() { is_supervisor_ = 1; } -size_t ProcessorStorage::assemble_program(const char *access_pattern) { +size_t ProcessorStorage::assemble_program(const char *access_pattern, const std::vector &addresses, int data_mask) { const size_t start = all_bus_steps_.size(); + auto address_iterator = addresses.begin(); + RegisterPair32 *scratch_data_read = bus_data_; + RegisterPair32 *scratch_data_write = bus_data_; // Parse the access pattern to build microcycles. while(*access_pattern) { @@ -105,6 +108,28 @@ size_t ProcessorStorage::assemble_program(const char *access_pattern) { access_pattern += 2; break; + + case 'r': // Fetch LSW (or only) word (/byte) + case 'R': // Fetch MSW word + case 'w': // Store LSW (or only) word (/byte) + case 'W': { // Store MSW word + const bool is_read = tolower(access_pattern[1]) == 'r'; + RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; + + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::Address | (is_read ? Microcycle::ReadWrite : 0); + step.microcycle.address = *address_iterator; + step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; + all_bus_steps_.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= data_mask; + all_bus_steps_.push_back(step); + + ++address_iterator; + if(!isupper(access_pattern[1])) ++(*scratch_data); + access_pattern += 2; + } break; } break; @@ -128,6 +153,14 @@ ProcessorStorage::BusStepCollection ProcessorStorage::assemble_standard_bus_step collection.four_step_Dn = assemble_program("np"); collection.six_step_Dn = assemble_program("np n"); + for(int s = 0; s < 8; ++s) { + for(int d = 0; d < 8; ++d) { + collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }, Microcycle::LowerData); + collection.double_predec_word[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }); +// collection.double_predec_long[s][d] = assemble_program("n nr nR nr nR nw np nW", { &address_[s].full, &address_[d].full, &address_[d].full }); + } + } + return collection; } @@ -183,22 +216,45 @@ void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_co {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) }; + std::vector micro_op_pointers(65536, std::numeric_limits::max()); + // Perform a linear search of the mappings above for this instruction. - for(int instruction = 0; instruction < 65536; ++instruction) { + for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { if((instruction & mapping.mask) == mapping.value) { + // Install the operation and make a note of where micro-ops begin. + instructions[instruction].operation = mapping.operation; + micro_op_pointers[instruction] = all_micro_ops_.size(); + switch(mapping.decoder) { case Decoder::Decimal: { const int destination = (instruction >> 8) & 7; const int source = instruction & 7; + + all_micro_ops_.emplace_back(); + if(instruction & 8) { - std::cout << "Address to address (both predecrement) from " << source << " to " << destination << std::endl; + // Install source and destination. + instructions[instruction].source = &bus_data_[0]; + instructions[instruction].destination = &bus_data_[1]; + + all_micro_ops_.emplace_back(); + all_micro_ops_.back().bus_program = &all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]; + all_micro_ops_.back().action = MicroOp::Action::PredecrementSourceAndDestination1; + all_micro_ops_.emplace_back(); + all_micro_ops_.back().action = MicroOp::Action::PerformOperation; + all_micro_ops_.emplace_back(); } else { - instructions[instruction].operation = mapping.operation; + // Install source and destination. instructions[instruction].source = &data_[source]; instructions[instruction].destination = &data_[destination]; -// instructions[instruction].destination.micro_operations = - std::cout << "Data register to data register from " << source << " to " << destination << std::endl; + + // For micro-ops, just schedule the proper bus cycle to get the next thing into the prefetch queue, + // then perform the actual operation. + all_micro_ops_.emplace_back(); + all_micro_ops_.back().bus_program = &all_bus_steps_[bus_step_collection.six_step_Dn]; + all_micro_ops_.back().action = MicroOp::Action::PerformOperation; + all_micro_ops_.emplace_back(); } } break; @@ -210,8 +266,16 @@ void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_co break; } + // Don't search further through the list of possibilities. break; } } } + + // Finalise micro-op pointers. + for(size_t instruction = 0; instruction < 65536; ++instruction) { + if(micro_op_pointers[instruction] != std::numeric_limits::max()) { + instructions[instruction].micro_operations = &all_micro_ops_[micro_op_pointers[instruction]]; + } + } } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 580a14de4..8ebec8a9b 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -15,10 +15,12 @@ class ProcessorStorage { protected: RegisterPair32 data_[8]; - RegisterPair32 address_[7]; - RegisterPair32 stack_pointers_[2]; // [0] = user stack pointer; [1] = supervisor + RegisterPair32 address_[8]; RegisterPair32 program_counter_; + RegisterPair32 stack_pointers_[2]; // [0] = user stack pointer; [1] = supervisor; the values from here + // are copied into/out of address_[7] upon mode switches. + RegisterPair16 prefetch_queue_[2]; bool dtack_ = true; @@ -27,7 +29,7 @@ class ProcessorStorage { // Generic sources and targets for memory operations. uint32_t effective_address_; - RegisterPair32 bus_data_; + RegisterPair32 bus_data_[2]; enum class Operation { ABCD, SBCD, @@ -70,7 +72,11 @@ class ProcessorStorage { struct MicroOp { enum class Action { None, - PerformOperation + PerformOperation, + + PredecrementSourceAndDestination1, + PredecrementSourceAndDestination2, + PredecrementSourceAndDestination4, } action = Action::None; BusStep *bus_program = nullptr; }; @@ -82,9 +88,9 @@ class ProcessorStorage { */ struct Program { MicroOp *micro_operations = nullptr; - Operation operation; RegisterPair32 *source; RegisterPair32 *destination; + Operation operation; }; // Storage for all the sequences of bus steps and micro-ops used throughout @@ -146,11 +152,16 @@ class ProcessorStorage { The user should fill in the steps necessary to get data into or extract data from those. */ - size_t assemble_program(const char *access_pattern); + size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, int data_mask = Microcycle::UpperData | Microcycle::LowerData); struct BusStepCollection { size_t six_step_Dn; size_t four_step_Dn; + + // The next two are indexed as [source][destination]. + size_t double_predec_byte[8][8]; + size_t double_predec_word[8][8]; + size_t double_predec_long[8][8]; }; BusStepCollection assemble_standard_bus_steps(); From f9101de956148d2a54cb5f1ae6fb4a9f02297e60 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 14 Mar 2019 19:32:15 -0400 Subject: [PATCH 011/239] This might very well be the 68000's first real gasp: performing an ABCD. --- .../Clock Signal.xcodeproj/project.pbxproj | 4 + .../Mac/Clock SignalTests/68000Tests.mm | 87 +++++++++++++++++++ .../Implementation/68000Implementation.hpp | 49 +++++++++-- .../68000/Implementation/68000Storage.cpp | 6 +- .../68000/Implementation/68000Storage.hpp | 9 +- 5 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 OSBindings/Mac/Clock SignalTests/68000Tests.mm diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 060a2356a..f2e92e1dc 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -616,6 +616,7 @@ 4BCF1FA41DADC3DD0039D2E7 /* Oric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1FA21DADC3DD0039D2E7 /* Oric.cpp */; }; 4BD191F42191180E0042E144 /* ScanTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD191F22191180E0042E144 /* ScanTarget.cpp */; }; 4BD191F52191180E0042E144 /* ScanTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD191F22191180E0042E144 /* ScanTarget.cpp */; }; + 4BD388882239E198002D14B5 /* 68000Tests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BD388872239E198002D14B5 /* 68000Tests.mm */; }; 4BD3A30B1EE755C800B5B501 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD3A3091EE755C800B5B501 /* Video.cpp */; }; 4BD424DF2193B5340097291A /* TextureTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD424DD2193B5340097291A /* TextureTarget.cpp */; }; 4BD424E02193B5340097291A /* TextureTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD424DD2193B5340097291A /* TextureTarget.cpp */; }; @@ -1375,6 +1376,7 @@ 4BD191F22191180E0042E144 /* ScanTarget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScanTarget.cpp; sourceTree = ""; }; 4BD191F32191180E0042E144 /* ScanTarget.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ScanTarget.hpp; sourceTree = ""; }; 4BD388411FE34E010042B588 /* 9918Base.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = 9918Base.hpp; path = 9918/Implementation/9918Base.hpp; sourceTree = ""; }; + 4BD388872239E198002D14B5 /* 68000Tests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = 68000Tests.mm; sourceTree = ""; }; 4BD3A3091EE755C800B5B501 /* Video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Video.cpp; path = ZX8081/Video.cpp; sourceTree = ""; }; 4BD3A30A1EE755C800B5B501 /* Video.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Video.hpp; path = ZX8081/Video.hpp; sourceTree = ""; }; 4BD424DD2193B5340097291A /* TextureTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureTarget.cpp; sourceTree = ""; }; @@ -2822,6 +2824,7 @@ 4BB73EB51B587A5100552FC2 /* Clock SignalTests */ = { isa = PBXGroup; children = ( + 4BD388872239E198002D14B5 /* 68000Tests.mm */, 4B924E981E74D22700B76AF1 /* AtariStaticAnalyserTests.mm */, 4BB2A9AE1E13367E001A5C23 /* CRCTests.mm */, 4BFF1D3C2235C3C100838EA1 /* EmuTOSTests.mm */, @@ -4024,6 +4027,7 @@ 4BB73EB71B587A5100552FC2 /* AllSuiteATests.swift in Sources */, 4B01A6881F22F0DB001FD6E3 /* Z80MemptrTests.swift in Sources */, 4B121F9B1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm in Sources */, + 4BD388882239E198002D14B5 /* 68000Tests.mm in Sources */, 4BA91E1D216D85BA00F79557 /* MasterSystemVDPTests.mm in Sources */, 4B98A0611FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm in Sources */, 4BEF6AAC1D35D1C400E73575 /* DPLLTests.swift in Sources */, diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm new file mode 100644 index 000000000..732987787 --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -0,0 +1,87 @@ +// +// 68000Tests.m +// Clock SignalTests +// +// Created by Thomas Harte on 13/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#import + +#include +#include + +#include "68000.hpp" + +/*! + Provides a 68000 with 64kb of RAM in its low address space; + /RESET will put the supervisor stack pointer at 0xFFFF and + begin execution at 0x0400. +*/ +class RAM68000: public CPU::MC68000::BusHandler { + public: + RAM68000() : m68000_(*this) { + ram_.resize(32768); + + // Setup the /RESET vector. + ram_[0] = 0; + ram_[1] = 0xffff; + ram_[2] = 0; + ram_[3] = 0x0400; + } + + void set_program(const std::vector &program) { + memcpy(&ram_[512], program.data(), program.size() * sizeof(uint16_t)); + } + + void run_for(HalfCycles cycles) { + m68000_.run_for(cycles); + } + + HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { + uint32_t address = cycle.address ? (*cycle.address) & 0x00fffffe : 0; + + switch(cycle.operation & (CPU::MC68000::Microcycle::LowerData | CPU::MC68000::Microcycle::UpperData)) { + case 0: break; + case CPU::MC68000::Microcycle::LowerData: + cycle.value->halves.low = ram_[address >> 1] >> 8; + break; + case CPU::MC68000::Microcycle::UpperData: + cycle.value->halves.high = ram_[address >> 1] & 0xff; + break; + case CPU::MC68000::Microcycle::UpperData | CPU::MC68000::Microcycle::LowerData: + cycle.value->full = ram_[address >> 1]; + break; + } + + return HalfCycles(0); + } + + private: + CPU::MC68000::Processor m68000_; + std::vector ram_; +}; + +@interface M68000Tests : XCTestCase +@end + +@implementation M68000Tests { + std::unique_ptr _machine; +} + +- (void)setUp { + _machine.reset(new RAM68000()); +} + +- (void)tearDown { + _machine.reset(); +} + +- (void)testABCD { + _machine->set_program({ + 0xc100 // ABCD D0, D0 + }); + _machine->run_for(HalfCycles(400)); +} + +@end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 7040afcb1..fa2bc0806 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -15,12 +15,36 @@ template void Processor: // for interrupts). if(active_step_->action == BusStep::Action::ScheduleNextProgram) { if(active_micro_op_) { - ++active_micro_op_; switch(active_micro_op_->action) { case MicroOp::Action::None: break; case MicroOp::Action::PerformOperation: - std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; + switch(active_program_->operation) { + case Operation::ABCD: { + // Pull out the two halves, for simplicity. + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + + // Perform the BCD add by evaluating the two nibbles separately. + int result = (source & 0xf) + (destination & 0xf) + (extend_flag_ ? 1 : 0); + if(result > 0x9) result += 0x06; + result += (source & 0xf0) + (destination & 0xf0); + if(result > 0x90) result += 0x60; + + // Set all flags essentially as if this were normal addition. + zero_flag_ |= result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = ~(source ^ destination) & (source ^ result) & 0x80; + + // Store the result. + active_program_->destination->halves.low.halves.low = uint8_t(result); + } break; + + default: + std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; + break; + } break; case MicroOp::Action::PredecrementSourceAndDestination1: @@ -28,22 +52,33 @@ template void Processor: -- active_program_->destination->full; break; - case MicroOp::Action::PredecrementSourceAndDestination1: + case MicroOp::Action::PredecrementSourceAndDestination2: active_program_->source->full -= 2; active_program_->destination->full -= 2; break; - case MicroOp::Action::PredecrementSourceAndDestination1: + case MicroOp::Action::PredecrementSourceAndDestination4: active_program_->source->full -= 4; active_program_->destination->full -= 4; break; } + } + + if(active_micro_op_) { + ++active_micro_op_; active_step_ = active_micro_op_->bus_program; } - if(!active_step_) { - std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; - return; + if(!active_step_ || !active_micro_op_) { + const uint16_t next_instruction = prefetch_queue_[0].full; + if(!instructions[next_instruction].micro_operations) { + std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; + return; + } + + active_program_ = &instructions[next_instruction]; + active_micro_op_ = active_program_->micro_operations; + active_step_ = active_micro_op_->bus_program; } } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 64d95d643..8bbbcc7ec 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -219,7 +219,7 @@ void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_co std::vector micro_op_pointers(65536, std::numeric_limits::max()); // Perform a linear search of the mappings above for this instruction. - for(size_t instruction = 0; instruction < 65536; ++instruction) { + for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { if((instruction & mapping.mask) == mapping.value) { // Install the operation and make a note of where micro-ops begin. @@ -228,11 +228,9 @@ void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_co switch(mapping.decoder) { case Decoder::Decimal: { - const int destination = (instruction >> 8) & 7; + const int destination = (instruction >> 9) & 7; const int source = instruction & 7; - all_micro_ops_.emplace_back(); - if(instruction & 8) { // Install source and destination. instructions[instruction].source = &bus_data_[0]; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 8ebec8a9b..4d4732e9d 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -26,6 +26,11 @@ class ProcessorStorage { // Various status bits. int is_supervisor_; + int zero_flag_; // The zero flag is set if this value is zero. + int carry_flag_; // The carry flag is set if this value is non-zero. + int extend_flag_; // The extend flag is set if this value is non-zero. + int overflow_flag_; // The overflow flag is set if this value is non-zero. + int negative_flag_; // The negative flag is set if this value is non-zero. // Generic sources and targets for memory operations. uint32_t effective_address_; @@ -88,8 +93,8 @@ class ProcessorStorage { */ struct Program { MicroOp *micro_operations = nullptr; - RegisterPair32 *source; - RegisterPair32 *destination; + RegisterPair32 *source = nullptr; + RegisterPair32 *destination = nullptr; Operation operation; }; From 720aba3f2d2765982588512aebf70391f68da13e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 14 Mar 2019 21:22:02 -0400 Subject: [PATCH 012/239] Adds an implementation of SBCD and slightly neatens syntax for building programs. --- .../Mac/Clock SignalTests/68000Tests.mm | 7 +++++ .../Implementation/68000Implementation.hpp | 27 ++++++++++++++++--- .../68000/Implementation/68000Storage.cpp | 19 +++++-------- .../68000/Implementation/68000Storage.hpp | 4 +++ 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index 732987787..4e08429ac 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -84,4 +84,11 @@ class RAM68000: public CPU::MC68000::BusHandler { _machine->run_for(HalfCycles(400)); } +- (void)testSBCD { + _machine->set_program({ + 0x8100 // SBCD D0, D1 + }); + _machine->run_for(HalfCycles(400)); +} + @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index fa2bc0806..43b1a14f1 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -26,16 +26,37 @@ template void Processor: const uint8_t destination = active_program_->destination->halves.low.halves.low; // Perform the BCD add by evaluating the two nibbles separately. - int result = (source & 0xf) + (destination & 0xf) + (extend_flag_ ? 1 : 0); + int result = (destination & 0xf) + (source & 0xf) + (extend_flag_ ? 1 : 0); if(result > 0x9) result += 0x06; - result += (source & 0xf0) + (destination & 0xf0); + result += (destination & 0xf0) + (source & 0xf0); if(result > 0x90) result += 0x60; // Set all flags essentially as if this were normal addition. zero_flag_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = ~(source ^ destination) & (source ^ result) & 0x80; + overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; + + // Store the result. + active_program_->destination->halves.low.halves.low = uint8_t(result); + } break; + + case Operation::SBCD: { + // Pull out the two halves, for simplicity. + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + + // Perform the BCD add by evaluating the two nibbles separately. + int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); + if(result > 0x9) result -= 0x06; + result += (destination & 0xf0) - (source & 0xf0); + if(result > 0x90) result -= 0x60; + + // Set all flags essentially as if this were normal addition. + zero_flag_ |= result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; // Store the result. active_program_->destination->halves.low.halves.low = uint8_t(result); diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8bbbcc7ec..7efd2d536 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -232,26 +232,21 @@ void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_co const int source = instruction & 7; if(instruction & 8) { - // Install source and destination. instructions[instruction].source = &bus_data_[0]; instructions[instruction].destination = &bus_data_[1]; - all_micro_ops_.emplace_back(); - all_micro_ops_.back().bus_program = &all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]; - all_micro_ops_.back().action = MicroOp::Action::PredecrementSourceAndDestination1; - all_micro_ops_.emplace_back(); - all_micro_ops_.back().action = MicroOp::Action::PerformOperation; + all_micro_ops_.emplace_back( + MicroOp::Action::PredecrementSourceAndDestination1, + &all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]); + all_micro_ops_.emplace_back(MicroOp::Action::PerformOperation); all_micro_ops_.emplace_back(); } else { - // Install source and destination. instructions[instruction].source = &data_[source]; instructions[instruction].destination = &data_[destination]; - // For micro-ops, just schedule the proper bus cycle to get the next thing into the prefetch queue, - // then perform the actual operation. - all_micro_ops_.emplace_back(); - all_micro_ops_.back().bus_program = &all_bus_steps_[bus_step_collection.six_step_Dn]; - all_micro_ops_.back().action = MicroOp::Action::PerformOperation; + all_micro_ops_.emplace_back( + MicroOp::Action::PerformOperation, + &all_bus_steps_[bus_step_collection.six_step_Dn]); all_micro_ops_.emplace_back(); } } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 4d4732e9d..b867f8e5e 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -84,6 +84,10 @@ class ProcessorStorage { PredecrementSourceAndDestination4, } action = Action::None; BusStep *bus_program = nullptr; + + MicroOp() {} + MicroOp(Action action) : action(action) {} + MicroOp(Action action, BusStep *bus_program) : action(action), bus_program(bus_program) {} }; /*! From 388d808536d5d54c495542a54e2222ba2885699a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 17:54:58 -0400 Subject: [PATCH 013/239] Switches to providing UDS and LDS implicitly via address. Also makes sure that the difference between a non-data cycle that starts without the address strobe active and one that starts with it active can be discerned. --- .../Mac/Clock SignalTests/68000Tests.mm | 31 ++++---- .../Mac/Clock SignalTests/EmuTOSTests.mm | 38 +++++----- Processors/68000/68000.hpp | 72 ++++++++++++++++--- .../Implementation/68000Implementation.hpp | 19 ++++- .../68000/Implementation/68000Storage.cpp | 20 +++--- .../68000/Implementation/68000Storage.hpp | 14 ++-- 6 files changed, 140 insertions(+), 54 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index 4e08429ac..f0c031f15 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -39,19 +39,26 @@ class RAM68000: public CPU::MC68000::BusHandler { } HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { - uint32_t address = cycle.address ? (*cycle.address) & 0x00fffffe : 0; + const uint32_t word_address = cycle.word_address(); - switch(cycle.operation & (CPU::MC68000::Microcycle::LowerData | CPU::MC68000::Microcycle::UpperData)) { - case 0: break; - case CPU::MC68000::Microcycle::LowerData: - cycle.value->halves.low = ram_[address >> 1] >> 8; - break; - case CPU::MC68000::Microcycle::UpperData: - cycle.value->halves.high = ram_[address >> 1] & 0xff; - break; - case CPU::MC68000::Microcycle::UpperData | CPU::MC68000::Microcycle::LowerData: - cycle.value->full = ram_[address >> 1]; - break; + using Microcycle = CPU::MC68000::Microcycle; + if(cycle.data_select_active()) { + switch(cycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { + default: break; + + case Microcycle::SelectWord | Microcycle::Read: + cycle.value->full = ram_[word_address]; + break; + case Microcycle::SelectByte | Microcycle::Read: + cycle.value->halves.low = ram_[word_address] >> cycle.byte_shift(); + break; + case Microcycle::SelectWord: + ram_[word_address] = cycle.value->full; + break; + case Microcycle::SelectByte: + ram_[word_address] = (cycle.value->full & cycle.byte_mask()) | (ram_[word_address] & (0xffff ^ cycle.byte_mask())); + break; + } } return HalfCycles(0); diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 59a37050b..95fb23c2d 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -30,33 +30,39 @@ class EmuTOS: public CPU::MC68000::BusHandler { } HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { - uint32_t address = cycle.address ? (*cycle.address) & 0x00fffffe : 0; + uint32_t word_address = cycle.word_address(); // As much about the Atari ST's memory map as is relevant here: the ROM begins // at 0xfc0000, and the first eight bytes are mirrored to the first four memory // addresses in order for /RESET to work properly. RAM otherwise fills the first // 512kb of the address space. Trying to write to ROM raises a bus error. - const bool is_rom = address > 0xfc0000 || address < 8; + const bool is_rom = word_address > (0xfc0000 >> 1) || word_address < 4; uint16_t *const base = is_rom ? emuTOS_.data() : ram_.data(); if(is_rom) { - address &= 0x1ffff; + word_address &= 0xffff; } else { - address &= 0x7ffff; + word_address &= 0x3ffff; } - // TODO: discern reads and writes (!) - switch(cycle.operation & (CPU::MC68000::Microcycle::LowerData | CPU::MC68000::Microcycle::UpperData)) { - case 0: break; - case CPU::MC68000::Microcycle::LowerData: - cycle.value->halves.low = base[address >> 1] >> 8; - break; - case CPU::MC68000::Microcycle::UpperData: - cycle.value->halves.high = base[address >> 1] & 0xff; - break; - case CPU::MC68000::Microcycle::UpperData | CPU::MC68000::Microcycle::LowerData: - cycle.value->full = base[address >> 1]; - break; + using Microcycle = CPU::MC68000::Microcycle; + if(cycle.data_select_active()) { + switch(cycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { + default: break; + + case Microcycle::SelectWord | Microcycle::Read: + cycle.value->full = base[word_address]; + break; + case Microcycle::SelectByte | Microcycle::Read: + cycle.value->halves.low = base[word_address] >> cycle.byte_shift(); + break; + case Microcycle::SelectWord: + base[word_address] = cycle.value->full; + break; + case Microcycle::SelectByte: + base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); + break; + } } return HalfCycles(0); diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 66418bf9a..d15c54675 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -45,16 +45,39 @@ namespace MC68000 { */ struct Microcycle { /* - The operation code is a mask of all the signals that relevantly became active during - this microcycle. + The operation code is composed of several parts; a compound low part + that can be masked off with TypeMask identifies the type of the cycle; + some of the other status lines are also present in the top parts of the int. */ - static const int Address = 1 << 0; - static const int UpperData = 1 << 1; - static const int LowerData = 1 << 2; - static const int ReadWrite = 1 << 3; // Set = read; unset = write. + static const int TypeMask = 3; - static const int IsData = 1 << 4; // i.e. this is FC0. - static const int IsProgram = 1 << 5; // i.e. this is FC1. + /// A NewAddress cycle is one in which the address strobe is initially low but becomes high; + /// this correlates to states 0 to 5 of a standard read/write cycle. + static const int Idle = 0; + + /// A NewAddress cycle is one in which the address strobe is initially low but becomes high; + /// this correlates to states 0 to 5 of a standard read/write cycle. + static const int NewAddress = 1; + + /// A SameAddress cycle is one in which the address strobe is continuously asserted, but neither + /// of the data strobes are. + static const int SameAddress = 2; + + /// Indicates that the address and both data select strobes are active. + static const int SelectWord = 1 << 2; + + /// Indicates that the address strobe and exactly one of the data strobes are active; you can determine + /// which by inspecting the low bit of the provided address. The RW line indicates a read. + static const int SelectByte = 1 << 3; + + /// If set, indicates a read. Otherwise, a write. + static const int Read = 1 << 4; + + /// Contains the value of line FC0. + static const int IsData = 1 << 5; + + /// Contains the value of line FC1. + static const int IsProgram = 1 << 6; int operation = 0; HalfCycles length = HalfCycles(2); @@ -68,6 +91,39 @@ struct Microcycle { */ const uint32_t *address = nullptr; RegisterPair16 *value = nullptr; + + // Various inspectors. + + /*! @returns true if any data select line is active; @c false otherwise. */ + inline bool data_select_active() const { + return bool(operation & (SelectWord | SelectByte)); + } + + /*! + @returns 0 if this byte access wants the low part of a 16-bit word; 8 if it wants the high part. + */ + inline unsigned int byte_shift() const { + return (((*address) & 1) << 3) ^ 8; + } + + /*! + @returns 0x00ff if this byte access wants the low part of a 16-bit word; 0xff00 if it wants the high part. + */ + inline unsigned int byte_mask() const { + return 0xff00 >> (((*address) & 1) << 3); + } + + inline int lower_data_select() const { + return (operation & SelectByte) & ((*address & 1) << 3); + } + + inline int upper_data_select() const { + return (operation & SelectByte) & ~((*address & 1) << 3); + } + + uint32_t word_address() const { + return (address ? (*address) & 0x00fffffe : 0) >> 1; + } }; /*! diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 43b1a14f1..c4d6b4c7c 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,7 +52,7 @@ template void Processor: result += (destination & 0xf0) - (source & 0xf0); if(result > 0x90) result -= 0x60; - // Set all flags essentially as if this were normal addition. + // Set all flags essentially as if this were normal subtraction. zero_flag_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; @@ -62,6 +62,21 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + case Operation::MOVEb: + zero_flag_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_flag_ & 0x80; + break; + + case Operation::MOVEw: + zero_flag_ = active_program_->destination->halves.low.full = active_program_->source->halves.low.full; + negative_flag_ = zero_flag_ & 0x8000; + break; + + case Operation::MOVEl: + zero_flag_ = active_program_->destination->full = active_program_->source->full; + negative_flag_ = zero_flag_ & 0x80000000; + break; + default: std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; break; @@ -107,7 +122,7 @@ template void Processor: // Check for DTack if this isn't being treated implicitly. if(!dtack_is_implicit) { - if(active_step_->microcycle.operation & (Microcycle::UpperData | Microcycle::LowerData) && !dtack_) { + if(active_step_->microcycle.data_select_active() && !dtack_) { // TODO: perform wait state. continue; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7efd2d536..a38b38705 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -31,7 +31,7 @@ ProcessorStorage::ProcessorStorage() { is_supervisor_ = 1; } -size_t ProcessorStorage::assemble_program(const char *access_pattern, const std::vector &addresses, int data_mask) { +size_t ProcessorStorage::assemble_program(const char *access_pattern, const std::vector &addresses, bool read_full_words) { const size_t start = all_bus_steps_.size(); auto address_iterator = addresses.begin(); RegisterPair32 *scratch_data_read = bus_data_; @@ -64,13 +64,13 @@ size_t ProcessorStorage::assemble_program(const char *access_pattern, const std: case 'F': // Fetch SSP MSW. case 'f': // Fetch SSP LSW. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &stack_pointers_[1].halves.high : &stack_pointers_[1].halves.low; all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = BusStep::Action::IncrementEffectiveAddress; all_bus_steps_.push_back(step); @@ -80,13 +80,13 @@ size_t ProcessorStorage::assemble_program(const char *access_pattern, const std: case 'V': // Fetch exception vector low. case 'v': // Fetch exception vector high. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &program_counter_.halves.high : &program_counter_.halves.low; all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = BusStep::Action::IncrementEffectiveAddress; all_bus_steps_.push_back(step); @@ -95,14 +95,14 @@ size_t ProcessorStorage::assemble_program(const char *access_pattern, const std: case 'p': // Fetch from the program counter into the prefetch queue. step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | Microcycle::ReadWrite | Microcycle::IsProgram; + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; step.microcycle.address = &program_counter_.full; step.microcycle.value = &prefetch_queue_[1]; step.action = BusStep::Action::AdvancePrefetch; all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::LowerData | Microcycle::UpperData; + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = BusStep::Action::IncrementProgramCounter; all_bus_steps_.push_back(step); @@ -117,13 +117,13 @@ size_t ProcessorStorage::assemble_program(const char *access_pattern, const std: RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::Address | (is_read ? Microcycle::ReadWrite : 0); + step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); step.microcycle.address = *address_iterator; step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; all_bus_steps_.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= data_mask; + step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); all_bus_steps_.push_back(step); ++address_iterator; @@ -155,7 +155,7 @@ ProcessorStorage::BusStepCollection ProcessorStorage::assemble_standard_bus_step for(int s = 0; s < 8; ++s) { for(int d = 0; d < 8; ++d) { - collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }, Microcycle::LowerData); + collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }, false); collection.double_predec_word[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }); // collection.double_predec_long[s][d] = assemble_program("n nr nR nr nR nw np nW", { &address_[s].full, &address_[d].full, &address_[d].full }); } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index b867f8e5e..45194ed94 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -26,11 +26,11 @@ class ProcessorStorage { // Various status bits. int is_supervisor_; - int zero_flag_; // The zero flag is set if this value is zero. - int carry_flag_; // The carry flag is set if this value is non-zero. - int extend_flag_; // The extend flag is set if this value is non-zero. - int overflow_flag_; // The overflow flag is set if this value is non-zero. - int negative_flag_; // The negative flag is set if this value is non-zero. + uint_fast32_t zero_flag_; // The zero flag is set if this value is zero. + uint_fast32_t carry_flag_; // The carry flag is set if this value is non-zero. + uint_fast32_t extend_flag_; // The extend flag is set if this value is non-zero. + uint_fast32_t overflow_flag_; // The overflow flag is set if this value is non-zero. + uint_fast32_t negative_flag_; // The negative flag is set if this value is non-zero. // Generic sources and targets for memory operations. uint32_t effective_address_; @@ -39,6 +39,8 @@ class ProcessorStorage { enum class Operation { ABCD, SBCD, ADD, AND, EOR, OR, SUB, + + MOVEb, MOVEw, MOVEl }; /*! @@ -161,7 +163,7 @@ class ProcessorStorage { The user should fill in the steps necessary to get data into or extract data from those. */ - size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, int data_mask = Microcycle::UpperData | Microcycle::LowerData); + size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, bool read_full_words = true); struct BusStepCollection { size_t six_step_Dn; From 4cbf2bef82f2413d39a57ee9f8c1164bea7dc041 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 19:41:07 -0400 Subject: [PATCH 014/239] By way of a friend, clears a bunch of transient stuff out of 68000Storage.hpp. As, even if not in the programmer's eye, this does affect recompilation times. --- .../68000/Implementation/68000Storage.cpp | 573 ++++++++++-------- .../68000/Implementation/68000Storage.hpp | 61 +- 2 files changed, 327 insertions(+), 307 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index a38b38705..de173bb16 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -10,17 +10,338 @@ #include -using namespace CPU::MC68000; +namespace CPU { +namespace MC68000 { + +struct ProcessorStorageConstructor { + ProcessorStorageConstructor(ProcessorStorage &storage) : storage_(storage) {} + + using BusStep = ProcessorStorage::BusStep; + + /*! + Installs BusSteps that implement the described program into the relevant + instance storage, returning the offset within @c all_bus_steps_ at which + the generated steps begin. + + @param access_pattern A string describing the bus activity that occurs + during this program. This should follow the same general pattern as + those in yacht.txt; full description below. + + @discussion + The access pattern is defined, as in yacht.txt, to be a string consisting + of the following discrete bus actions. Spaces are ignored. + + * n: no operation; data bus is not used; + * -: idle state; data bus is not used but is also not available; + * p: program fetch; reads from the PC and adds two to it; + * W: write MSW of something onto the bus; + * w: write LSW of something onto the bus; + * R: read MSW of something from the bus; + * r: read LSW of soemthing from the bus; + * S: push the MSW of something onto the stack; + * s: push the LSW of something onto the stack; + * U: pop the MSW of something from the stack; + * u: pop the LSW of something from the stack; + * V: fetch a vector's MSW; + * v: fetch a vector's LSW; + * i: acquire interrupt vector in an IACK cycle; + * F: fetch the SSPs MSW; + * f: fetch the SSP's LSW. + + Quite a lot of that is duplicative, implying both something about internal + state and something about what's observable on the bus, but it's helpful to + stick to that document's coding exactly for easier debugging. + + p fetches will fill the prefetch queue, attaching an action to both the + step that precedes them and to themselves. The SSP fetches will go straight + to the SSP. + + Other actions will by default act via effective_address_ and bus_data_. + The user should fill in the steps necessary to get data into or extract + data from those. + */ + size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { + const size_t start = storage_.all_bus_steps_.size(); + auto address_iterator = addresses.begin(); + RegisterPair32 *scratch_data_read = storage_.bus_data_; + RegisterPair32 *scratch_data_write = storage_.bus_data_; + using Action = BusStep::Action; + + // Parse the access pattern to build microcycles. + while(*access_pattern) { + ProcessorBase::BusStep step; + + switch(*access_pattern) { + case '\t': case ' ': // White space acts as a no-op; it's for clarity only. + ++access_pattern; + break; + + case 'n': // This might be a plain NOP cycle, in which some internal calculation occurs, + // or it might pair off with something afterwards. + switch(access_pattern[1]) { + default: // This is probably a pure NOP; if what comes after this 'n' isn't actually + // valid, it should be caught in the outer switch the next time around the loop. + storage_.all_bus_steps_.push_back(step); + ++access_pattern; + break; + + case '-': // This is two NOPs in a row. + storage_.all_bus_steps_.push_back(step); + storage_.all_bus_steps_.push_back(step); + access_pattern += 2; + break; + + case 'F': // Fetch SSP MSW. + case 'f': // Fetch SSP LSW. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.address = &storage_.effective_address_; + step.microcycle.value = isupper(access_pattern[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; + storage_.all_bus_steps_.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementEffectiveAddress; + storage_.all_bus_steps_.push_back(step); + + access_pattern += 2; + break; + + case 'V': // Fetch exception vector low. + case 'v': // Fetch exception vector high. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.address = &storage_.effective_address_; + step.microcycle.value = isupper(access_pattern[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; + storage_.all_bus_steps_.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementEffectiveAddress; + storage_.all_bus_steps_.push_back(step); + + access_pattern += 2; + break; + + case 'p': // Fetch from the program counter into the prefetch queue. + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; + step.microcycle.address = &storage_.program_counter_.full; + step.microcycle.value = &storage_.prefetch_queue_[1]; + step.action = Action::AdvancePrefetch; + storage_.all_bus_steps_.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementProgramCounter; + storage_.all_bus_steps_.push_back(step); + + access_pattern += 2; + break; + + case 'r': // Fetch LSW (or only) word (/byte) + case 'R': // Fetch MSW word + case 'w': // Store LSW (or only) word (/byte) + case 'W': { // Store MSW word + const bool is_read = tolower(access_pattern[1]) == 'r'; + RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; + + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); + step.microcycle.address = *address_iterator; + step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; + storage_.all_bus_steps_.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); + storage_.all_bus_steps_.push_back(step); + + ++address_iterator; + if(!isupper(access_pattern[1])) ++(*scratch_data); + access_pattern += 2; + } break; + } + break; + + default: + std::cerr << "MC68000 program builder; Unknown access type " << *access_pattern << std::endl; + assert(false); + } + } + + // Add a final 'ScheduleNextProgram' sentinel. + BusStep end_program; + end_program.action = Action::ScheduleNextProgram; + storage_.all_bus_steps_.push_back(end_program); + + return start; + } + + struct BusStepCollection { + size_t six_step_Dn; + size_t four_step_Dn; + + // The next two are indexed as [source][destination]. + size_t double_predec_byte[8][8]; + size_t double_predec_word[8][8]; + size_t double_predec_long[8][8]; + }; + BusStepCollection assemble_standard_bus_steps() { + BusStepCollection collection; + + collection.four_step_Dn = assemble_program("np"); + collection.six_step_Dn = assemble_program("np n"); + + for(int s = 0; s < 8; ++s) { + for(int d = 0; d < 8; ++d) { + collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &storage_.address_[s].full, &storage_.address_[d].full, &storage_.address_[d].full }, false); + collection.double_predec_word[s][d] = assemble_program("n nr nr np nw", { &storage_.address_[s].full, &storage_.address_[d].full, &storage_.address_[d].full }); + // collection.double_predec_long[s][d] = assemble_program("n nr nR nr nR nw np nW", { &address_[s].full, &address_[d].full, &address_[d].full }); + } + } + + return collection; + + } + + /*! + Disassembles the instruction @c instruction and inserts it into the + appropriate lookup tables. + + install_instruction acts, in effect, in the manner of a disassembler. So this class is + formulated to run through all potential 65536 instuction encodings and attempt to + disassemble each, rather than going in the opposite direction. + + This has two benefits: + + (i) which addressing modes go with which instructions falls out automatically; + (ii) it is a lot easier during the manual verification stage of development to work + from known instructions to their disassembly rather than vice versa; especially + (iii) given that there are plentiful disassemblers against which to test work in progress. + */ + void install_instructions(const BusStepCollection &bus_step_collection) { + enum class Decoder { + Decimal, + RegOpModeReg, + SizeModeRegisterImmediate, + DataSizeModeQuick, + RegisterModeModeRegister + }; + + using Operation = ProcessorStorage::Operation; + using Action = ProcessorStorage::MicroOp::Action; + struct PatternMapping { + uint16_t mask, value; + Operation operation; + Decoder decoder; + }; + + /* + Inspired partly by 'wrm' (https://github.com/wrm-za I assume); the following + table draws from the M68000 Programmer's Reference Manual, currently available at + https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf + + After each line is the internal page number on which documentation of that + instruction mapping can be found, followed by the page number within the PDF + linked above. + + NB: a vector is used to allow easy iteration. + */ + const std::vector mappings = { + {0xf1f0, 0x8100, Operation::SBCD, Decoder::Decimal}, // 4-171 (p275) + {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) + + {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) + {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) + {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) + {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) + {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) + + {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) + + {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) + + {0x1000, 0xf000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0x3000, 0xf000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0x2000, 0xf000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + }; + + std::vector micro_op_pointers(65536, std::numeric_limits::max()); + + // Perform a linear search of the mappings above for this instruction. + for(size_t instruction = 0; instruction < 65536; ++instruction) { + for(const auto &mapping: mappings) { + if((instruction & mapping.mask) == mapping.value) { + // Install the operation and make a note of where micro-ops begin. + storage_.instructions[instruction].operation = mapping.operation; + micro_op_pointers[instruction] = storage_.all_micro_ops_.size(); + + switch(mapping.decoder) { + case Decoder::Decimal: { + const int destination = (instruction >> 9) & 7; + const int source = instruction & 7; + + if(instruction & 8) { + storage_.instructions[instruction].source = &storage_.bus_data_[0]; + storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + + storage_.all_micro_ops_.emplace_back( + Action::PredecrementSourceAndDestination1, + &storage_.all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + storage_.all_micro_ops_.emplace_back(); + } else { + storage_.instructions[instruction].source = &storage_.data_[source]; + storage_.instructions[instruction].destination = &storage_.data_[destination]; + + storage_.all_micro_ops_.emplace_back( + Action::PerformOperation, + &storage_.all_bus_steps_[bus_step_collection.six_step_Dn]); + storage_.all_micro_ops_.emplace_back(); + } + } break; + + case Decoder::RegOpModeReg: { + } break; + + default: + std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; + break; + } + + // Don't search further through the list of possibilities. + break; + } + } + } + + // Finalise micro-op pointers. + for(size_t instruction = 0; instruction < 65536; ++instruction) { + if(micro_op_pointers[instruction] != std::numeric_limits::max()) { + storage_.instructions[instruction].micro_operations = &storage_.all_micro_ops_[micro_op_pointers[instruction]]; + } + } + + } + + private: + ProcessorStorage &storage_; +}; + +} +} + +CPU::MC68000::ProcessorStorage::ProcessorStorage() { + ProcessorStorageConstructor constructor(*this); -ProcessorStorage::ProcessorStorage() { // Create the exception programs. - const size_t reset_offset = assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); + const size_t reset_offset = constructor.assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); // Install all necessary access patterns. - const BusStepCollection bus_steps = assemble_standard_bus_steps(); + const auto bus_steps = constructor.assemble_standard_bus_steps(); // Install operations. - install_instructions(bus_steps); + constructor.install_instructions(bus_steps); // Realise the exception programs as direct pointers. reset_program_ = &all_bus_steps_[reset_offset]; @@ -30,245 +351,3 @@ ProcessorStorage::ProcessorStorage() { effective_address_ = 0; is_supervisor_ = 1; } - -size_t ProcessorStorage::assemble_program(const char *access_pattern, const std::vector &addresses, bool read_full_words) { - const size_t start = all_bus_steps_.size(); - auto address_iterator = addresses.begin(); - RegisterPair32 *scratch_data_read = bus_data_; - RegisterPair32 *scratch_data_write = bus_data_; - - // Parse the access pattern to build microcycles. - while(*access_pattern) { - BusStep step; - - switch(*access_pattern) { - case '\t': case ' ': // White space acts as a no-op; it's for clarity only. - ++access_pattern; - break; - - case 'n': // This might be a plain NOP cycle, in which some internal calculation occurs, - // or it might pair off with something afterwards. - switch(access_pattern[1]) { - default: // This is probably a pure NOP; if what comes after this 'n' isn't actually - // valid, it should be caught in the outer switch the next time around the loop. - all_bus_steps_.push_back(step); - ++access_pattern; - break; - - case '-': // This is two NOPs in a row. - all_bus_steps_.push_back(step); - all_bus_steps_.push_back(step); - access_pattern += 2; - break; - - case 'F': // Fetch SSP MSW. - case 'f': // Fetch SSP LSW. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &effective_address_; - step.microcycle.value = isupper(access_pattern[1]) ? &stack_pointers_[1].halves.high : &stack_pointers_[1].halves.low; - all_bus_steps_.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = BusStep::Action::IncrementEffectiveAddress; - all_bus_steps_.push_back(step); - - access_pattern += 2; - break; - - case 'V': // Fetch exception vector low. - case 'v': // Fetch exception vector high. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &effective_address_; - step.microcycle.value = isupper(access_pattern[1]) ? &program_counter_.halves.high : &program_counter_.halves.low; - all_bus_steps_.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = BusStep::Action::IncrementEffectiveAddress; - all_bus_steps_.push_back(step); - - access_pattern += 2; - break; - - case 'p': // Fetch from the program counter into the prefetch queue. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; - step.microcycle.address = &program_counter_.full; - step.microcycle.value = &prefetch_queue_[1]; - step.action = BusStep::Action::AdvancePrefetch; - all_bus_steps_.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = BusStep::Action::IncrementProgramCounter; - all_bus_steps_.push_back(step); - - access_pattern += 2; - break; - - case 'r': // Fetch LSW (or only) word (/byte) - case 'R': // Fetch MSW word - case 'w': // Store LSW (or only) word (/byte) - case 'W': { // Store MSW word - const bool is_read = tolower(access_pattern[1]) == 'r'; - RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; - - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); - step.microcycle.address = *address_iterator; - step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; - all_bus_steps_.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); - all_bus_steps_.push_back(step); - - ++address_iterator; - if(!isupper(access_pattern[1])) ++(*scratch_data); - access_pattern += 2; - } break; - } - break; - - default: - std::cerr << "MC68000 program builder; Unknown access type " << *access_pattern << std::endl; - assert(false); - } - } - - // Add a final 'ScheduleNextProgram' sentinel. - BusStep end_program; - end_program.action = BusStep::Action::ScheduleNextProgram; - all_bus_steps_.push_back(end_program); - - return start; -} - -ProcessorStorage::BusStepCollection ProcessorStorage::assemble_standard_bus_steps() { - ProcessorStorage::BusStepCollection collection; - - collection.four_step_Dn = assemble_program("np"); - collection.six_step_Dn = assemble_program("np n"); - - for(int s = 0; s < 8; ++s) { - for(int d = 0; d < 8; ++d) { - collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }, false); - collection.double_predec_word[s][d] = assemble_program("n nr nr np nw", { &address_[s].full, &address_[d].full, &address_[d].full }); -// collection.double_predec_long[s][d] = assemble_program("n nr nR nr nR nw np nW", { &address_[s].full, &address_[d].full, &address_[d].full }); - } - } - - return collection; -} - -/* - install_instruction acts, in effect, in the manner of a disassembler. So this class is - formulated to run through all potential 65536 instuction encodings and attempt to - disassemble each, rather than going in the opposite direction. - - This has two benefits: - - (i) which addressing modes go with which instructions falls out automatically; - (ii) it is a lot easier during the manual verification stage of development to work - from known instructions to their disassembly rather than vice versa; especially - (iii) given that there are plentiful disassemblers against which to test work in progress. -*/ -void ProcessorStorage::install_instructions(const BusStepCollection &bus_step_collection) { - enum class Decoder { - Decimal, - RegOpModeReg, - SizeModeRegisterImmediate, - DataSizeModeQuick - }; - - struct PatternMapping { - uint16_t mask, value; - Operation operation; - Decoder decoder; - }; - - /* - Inspired partly by 'wrm' (https://github.com/wrm-za I assume); the following - table draws from the M68000 Programmer's Reference Manual, currently available at - https://www.nxp.com/files-static/archives/doc/ref_manual/M68000PRM.pdf - - After each line is the internal page number on which documentation of that - instruction mapping can be found, followed by the page number within the PDF - linked above. - - NB: a vector is used to allow easy iteration. - */ - const std::vector mappings = { - {0xf1f0, 0x8100, Operation::SBCD, Decoder::Decimal}, // 4-171 (p275) - {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) - - {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) - {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) - {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) - {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) - {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) - - {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) - - {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) - }; - - std::vector micro_op_pointers(65536, std::numeric_limits::max()); - - // Perform a linear search of the mappings above for this instruction. - for(size_t instruction = 0; instruction < 65536; ++instruction) { - for(const auto &mapping: mappings) { - if((instruction & mapping.mask) == mapping.value) { - // Install the operation and make a note of where micro-ops begin. - instructions[instruction].operation = mapping.operation; - micro_op_pointers[instruction] = all_micro_ops_.size(); - - switch(mapping.decoder) { - case Decoder::Decimal: { - const int destination = (instruction >> 9) & 7; - const int source = instruction & 7; - - if(instruction & 8) { - instructions[instruction].source = &bus_data_[0]; - instructions[instruction].destination = &bus_data_[1]; - - all_micro_ops_.emplace_back( - MicroOp::Action::PredecrementSourceAndDestination1, - &all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]); - all_micro_ops_.emplace_back(MicroOp::Action::PerformOperation); - all_micro_ops_.emplace_back(); - } else { - instructions[instruction].source = &data_[source]; - instructions[instruction].destination = &data_[destination]; - - all_micro_ops_.emplace_back( - MicroOp::Action::PerformOperation, - &all_bus_steps_[bus_step_collection.six_step_Dn]); - all_micro_ops_.emplace_back(); - } - } break; - - case Decoder::RegOpModeReg: { - } break; - - default: - std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; - break; - } - - // Don't search further through the list of possibilities. - break; - } - } - } - - // Finalise micro-op pointers. - for(size_t instruction = 0; instruction < 65536; ++instruction) { - if(micro_op_pointers[instruction] != std::numeric_limits::max()) { - instructions[instruction].micro_operations = &all_micro_ops_[micro_op_pointers[instruction]]; - } - } -} diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 45194ed94..f63aa73d9 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -121,66 +121,7 @@ class ProcessorStorage { BusStep *active_step_ = nullptr; private: - /*! - Installs BusSteps that implement the described program into the relevant - instance storage, returning the offset within @c all_bus_steps_ at which - the generated steps begin. - - @param access_pattern A string describing the bus activity that occurs - during this program. This should follow the same general pattern as - those in yacht.txt; full description below. - - @discussion - The access pattern is defined, as in yacht.txt, to be a string consisting - of the following discrete bus actions. Spaces are ignored. - - * n: no operation; data bus is not used; - * -: idle state; data bus is not used but is also not available; - * p: program fetch; reads from the PC and adds two to it; - * W: write MSW of something onto the bus; - * w: write LSW of something onto the bus; - * R: read MSW of something from the bus; - * r: read LSW of soemthing from the bus; - * S: push the MSW of something onto the stack; - * s: push the LSW of something onto the stack; - * U: pop the MSW of something from the stack; - * u: pop the LSW of something from the stack; - * V: fetch a vector's MSW; - * v: fetch a vector's LSW; - * i: acquire interrupt vector in an IACK cycle; - * F: fetch the SSPs MSW; - * f: fetch the SSP's LSW. - - Quite a lot of that is duplicative, implying both something about internal - state and something about what's observable on the bus, but it's helpful to - stick to that document's coding exactly for easier debugging. - - p fetches will fill the prefetch queue, attaching an action to both the - step that precedes them and to themselves. The SSP fetches will go straight - to the SSP. - - Other actions will by default act via effective_address_ and bus_data_. - The user should fill in the steps necessary to get data into or extract - data from those. - */ - size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, bool read_full_words = true); - - struct BusStepCollection { - size_t six_step_Dn; - size_t four_step_Dn; - - // The next two are indexed as [source][destination]. - size_t double_predec_byte[8][8]; - size_t double_predec_word[8][8]; - size_t double_predec_long[8][8]; - }; - BusStepCollection assemble_standard_bus_steps(); - - /*! - Disassembles the instruction @c instruction and inserts it into the - appropriate lookup tables. - */ - void install_instructions(const BusStepCollection &); + friend class ProcessorStorageConstructor; }; #endif /* MC68000Storage_h */ From d0c5cf0d2dedd0774d6bf122868a423fe40decf5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 21:47:46 -0400 Subject: [PATCH 015/239] Starts attempting to kill the need to prepare all bus step sequences in advance. --- Processors/68000/68000.hpp | 9 +- .../68000/Implementation/68000Storage.cpp | 89 ++++++++----------- .../68000/Implementation/68000Storage.hpp | 9 ++ 3 files changed, 56 insertions(+), 51 deletions(-) diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index d15c54675..bfe4e6e15 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include "../../ClockReceiver/ClockReceiver.hpp" @@ -80,7 +81,7 @@ struct Microcycle { static const int IsProgram = 1 << 6; int operation = 0; - HalfCycles length = HalfCycles(2); + HalfCycles length = HalfCycles(4); /*! For expediency, this provides a full 32-bit byte-resolution address — e.g. @@ -92,6 +93,12 @@ struct Microcycle { const uint32_t *address = nullptr; RegisterPair16 *value = nullptr; + bool operator ==(const Microcycle &rhs) const { + return + std::make_tuple(value, address, length, operation, value) == + std::make_tuple(rhs.value, rhs.address, rhs.length, rhs.operation, rhs.value); + } + // Various inspectors. /*! @returns true if any data select line is active; @c false otherwise. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index de173bb16..a79df0b09 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -8,7 +8,7 @@ #include "../68000.hpp" -#include +#include namespace CPU { namespace MC68000 { @@ -61,12 +61,13 @@ struct ProcessorStorageConstructor { data from those. */ size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { - const size_t start = storage_.all_bus_steps_.size(); auto address_iterator = addresses.begin(); RegisterPair32 *scratch_data_read = storage_.bus_data_; RegisterPair32 *scratch_data_write = storage_.bus_data_; using Action = BusStep::Action; + std::vector steps; + // Parse the access pattern to build microcycles. while(*access_pattern) { ProcessorBase::BusStep step; @@ -81,13 +82,13 @@ struct ProcessorStorageConstructor { switch(access_pattern[1]) { default: // This is probably a pure NOP; if what comes after this 'n' isn't actually // valid, it should be caught in the outer switch the next time around the loop. - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); ++access_pattern; break; case '-': // This is two NOPs in a row. - storage_.all_bus_steps_.push_back(step); - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); + steps.push_back(step); access_pattern += 2; break; @@ -97,12 +98,12 @@ struct ProcessorStorageConstructor { step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &storage_.effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = Action::IncrementEffectiveAddress; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); access_pattern += 2; break; @@ -113,12 +114,12 @@ struct ProcessorStorageConstructor { step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. step.microcycle.address = &storage_.effective_address_; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = Action::IncrementEffectiveAddress; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); access_pattern += 2; break; @@ -129,12 +130,12 @@ struct ProcessorStorageConstructor { step.microcycle.address = &storage_.program_counter_.full; step.microcycle.value = &storage_.prefetch_queue_[1]; step.action = Action::AdvancePrefetch; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; step.action = Action::IncrementProgramCounter; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); access_pattern += 2; break; @@ -150,11 +151,11 @@ struct ProcessorStorageConstructor { step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); step.microcycle.address = *address_iterator; step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); - storage_.all_bus_steps_.push_back(step); + steps.push_back(step); ++address_iterator; if(!isupper(access_pattern[1])) ++(*scratch_data); @@ -172,36 +173,18 @@ struct ProcessorStorageConstructor { // Add a final 'ScheduleNextProgram' sentinel. BusStep end_program; end_program.action = Action::ScheduleNextProgram; - storage_.all_bus_steps_.push_back(end_program); + steps.push_back(end_program); - return start; - } - - struct BusStepCollection { - size_t six_step_Dn; - size_t four_step_Dn; - - // The next two are indexed as [source][destination]. - size_t double_predec_byte[8][8]; - size_t double_predec_word[8][8]; - size_t double_predec_long[8][8]; - }; - BusStepCollection assemble_standard_bus_steps() { - BusStepCollection collection; - - collection.four_step_Dn = assemble_program("np"); - collection.six_step_Dn = assemble_program("np n"); - - for(int s = 0; s < 8; ++s) { - for(int d = 0; d < 8; ++d) { - collection.double_predec_byte[s][d] = assemble_program("n nr nr np nw", { &storage_.address_[s].full, &storage_.address_[d].full, &storage_.address_[d].full }, false); - collection.double_predec_word[s][d] = assemble_program("n nr nr np nw", { &storage_.address_[s].full, &storage_.address_[d].full, &storage_.address_[d].full }); - // collection.double_predec_long[s][d] = assemble_program("n nr nR nr nR nw np nW", { &address_[s].full, &address_[d].full, &address_[d].full }); - } + // If the new steps already exist, just return the existing index to them; + // otherwise insert them. + const auto position = std::search(storage_.all_bus_steps_.begin(), storage_.all_bus_steps_.end(), steps.begin(), steps.end()); + if(position != storage_.all_bus_steps_.end()) { + return size_t(position - storage_.all_bus_steps_.begin()); } - return collection; - + const auto start = storage_.all_bus_steps_.size(); + std::copy(steps.begin(), steps.end(), std::back_inserter(storage_.all_bus_steps_)); + return start; } /*! @@ -219,7 +202,7 @@ struct ProcessorStorageConstructor { from known instructions to their disassembly rather than vice versa; especially (iii) given that there are plentiful disassemblers against which to test work in progress. */ - void install_instructions(const BusStepCollection &bus_step_collection) { + void install_instructions() { enum class Decoder { Decimal, RegOpModeReg, @@ -268,6 +251,11 @@ struct ProcessorStorageConstructor { std::vector micro_op_pointers(65536, std::numeric_limits::max()); + // The arbitrary_base is used so that the offsets returned by assemble_program into + // storage_.all_bus_steps_ can be retained and mapped into the final version of + // storage_.all_bus_steps_ at the end. + BusStep arbitrary_base; + // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { @@ -287,16 +275,15 @@ struct ProcessorStorageConstructor { storage_.all_micro_ops_.emplace_back( Action::PredecrementSourceAndDestination1, - &storage_.all_bus_steps_[bus_step_collection.double_predec_byte[source][destination]]); + &arbitrary_base + assemble_program("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - storage_.all_micro_ops_.emplace_back(); } else { storage_.instructions[instruction].source = &storage_.data_[source]; storage_.instructions[instruction].destination = &storage_.data_[destination]; storage_.all_micro_ops_.emplace_back( Action::PerformOperation, - &storage_.all_bus_steps_[bus_step_collection.six_step_Dn]); + &arbitrary_base + assemble_program("np n")); storage_.all_micro_ops_.emplace_back(); } } break; @@ -315,13 +302,18 @@ struct ProcessorStorageConstructor { } } - // Finalise micro-op pointers. + // Finalise micro-op and program pointers. for(size_t instruction = 0; instruction < 65536; ++instruction) { if(micro_op_pointers[instruction] != std::numeric_limits::max()) { storage_.instructions[instruction].micro_operations = &storage_.all_micro_ops_[micro_op_pointers[instruction]]; + + auto operation = storage_.instructions[instruction].micro_operations; + while(!operation->is_terminal()) { + operation->bus_program = storage_.all_bus_steps_.data() + (operation->bus_program - &arbitrary_base); + ++operation; + } } } - } private: @@ -337,11 +329,8 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { // Create the exception programs. const size_t reset_offset = constructor.assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); - // Install all necessary access patterns. - const auto bus_steps = constructor.assemble_standard_bus_steps(); - // Install operations. - constructor.install_instructions(bus_steps); + constructor.install_instructions(); // Realise the exception programs as direct pointers. reset_program_ = &all_bus_steps_[reset_offset]; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index f63aa73d9..ec2b4290a 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -68,6 +68,11 @@ class ProcessorStorage { ScheduleNextProgram } action = Action::None; + + bool operator ==(const BusStep &rhs) const { + if(action != rhs.action) return false; + return microcycle == rhs.microcycle; + } }; /*! @@ -90,6 +95,10 @@ class ProcessorStorage { MicroOp() {} MicroOp(Action action) : action(action) {} MicroOp(Action action, BusStep *bus_program) : action(action), bus_program(bus_program) {} + + inline bool is_terminal() const { + return bus_program == nullptr; + } }; /*! From 937b3ca81d4f624f43c45bd287ee6aedaf7bc2d7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 22:36:09 -0400 Subject: [PATCH 016/239] Attempts properly to honour the bus-op and microcycle contract. --- .../Implementation/68000Implementation.hpp | 114 +++++++++--------- .../68000/Implementation/68000Storage.cpp | 17 +-- .../68000/Implementation/68000Storage.hpp | 14 ++- 3 files changed, 80 insertions(+), 65 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index c4d6b4c7c..cb40a181e 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -9,12 +9,49 @@ template void Processor::run_for(HalfCycles duration) { // TODO: obey the 'cycles' count. while(true) { - // Check whether the current list of bus steps is exhausted; if so then - // seek out another one from the current program (if any), and if there - // are no more to do, revert to scheduling something else (after checking - // for interrupts). - if(active_step_->action == BusStep::Action::ScheduleNextProgram) { - if(active_micro_op_) { + + /* + PERFORM THE CURRENT BUS STEP'S MICROCYCLE. + */ + // Check for DTack if this isn't being treated implicitly. + if(!dtack_is_implicit) { + if(active_step_->microcycle.data_select_active() && !dtack_) { + // TODO: perform wait state. + continue; + } + } + + // TODO: synchronous bus. + + // Perform the microcycle. + bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); + + /* + PERFORM THE BUS STEP'S ACTION. + */ + // Consider advancing a micro-operation. + if(active_step_->is_terminal()) { + // If there are any more micro-operations available, just move onwards. + if(active_micro_op_ && !active_micro_op_->is_terminal()) { + ++active_micro_op_; + } else { + // Either the micro-operations for this instruction have been exhausted, or + // no instruction was ongoing. Either way, do a standard instruction operation. + + // TODO: unless an interrupt is pending, or the trap flag is set. + + const uint16_t next_instruction = prefetch_queue_[0].full; + if(!instructions[next_instruction].micro_operations) { + std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; + return; + } + + active_program_ = &instructions[next_instruction]; + active_micro_op_ = active_program_->micro_operations; + } + + // There is now a micro operation; cue up the first step and perform the predecessor action. + active_step_ = active_micro_op_->bus_program; switch(active_micro_op_->action) { case MicroOp::Action::None: break; @@ -98,59 +135,26 @@ template void Processor: active_program_->destination->full -= 4; break; } - } - if(active_micro_op_) { - ++active_micro_op_; - active_step_ = active_micro_op_->bus_program; - } + } else { + switch(active_step_->action) { + default: + std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; + return; + break; - if(!active_step_ || !active_micro_op_) { - const uint16_t next_instruction = prefetch_queue_[0].full; - if(!instructions[next_instruction].micro_operations) { - std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; - return; + case BusStep::Action::None: break; + + case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; + case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; + + case BusStep::Action::AdvancePrefetch: + prefetch_queue_[0] = prefetch_queue_[1]; + break; } - active_program_ = &instructions[next_instruction]; - active_micro_op_ = active_program_->micro_operations; - active_step_ = active_micro_op_->bus_program; + // Move to the next bus step. + ++ active_step_; } - } - - // The bus step list is not exhausted, so perform the microcycle. - - // Check for DTack if this isn't being treated implicitly. - if(!dtack_is_implicit) { - if(active_step_->microcycle.data_select_active() && !dtack_) { - // TODO: perform wait state. - continue; - } - } - - // TODO: synchronous bus. - - // Perform the microcycle. - bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); - - // Perform the post-hoc action. - switch(active_step_->action) { - default: - std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; - return; - break; - - case BusStep::Action::None: break; - - case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; - case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; - - case BusStep::Action::AdvancePrefetch: - prefetch_queue_[0] = prefetch_queue_[1]; - break; - } - - // Move to the next program step. - ++active_step_; } } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index a79df0b09..fa2d0f85e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -260,9 +260,7 @@ struct ProcessorStorageConstructor { for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { if((instruction & mapping.mask) == mapping.value) { - // Install the operation and make a note of where micro-ops begin. - storage_.instructions[instruction].operation = mapping.operation; - micro_op_pointers[instruction] = storage_.all_micro_ops_.size(); + const auto micro_op_start = storage_.all_micro_ops_.size(); switch(mapping.decoder) { case Decoder::Decimal: { @@ -288,14 +286,15 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::RegOpModeReg: { - } break; - default: std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; - break; + continue; } + // Install the operation and make a note of where micro-ops begin. + storage_.instructions[instruction].operation = mapping.operation; + micro_op_pointers[instruction] = micro_op_start; + // Don't search further through the list of possibilities. break; } @@ -309,7 +308,9 @@ struct ProcessorStorageConstructor { auto operation = storage_.instructions[instruction].micro_operations; while(!operation->is_terminal()) { - operation->bus_program = storage_.all_bus_steps_.data() + (operation->bus_program - &arbitrary_base); + const auto offset = size_t(operation->bus_program - &arbitrary_base); + assert(offset >= 0 && offset < storage_.all_bus_steps_.size()); + operation->bus_program = &storage_.all_bus_steps_[offset]; ++operation; } } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index ec2b4290a..3f38974f8 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -45,6 +45,7 @@ class ProcessorStorage { /*! Bus steps are sequences of things to communicate to the bus. + Standard behaviour is: (i) perform microcycle; (ii) perform action. */ struct BusStep { Microcycle microcycle; @@ -69,17 +70,26 @@ class ProcessorStorage { } action = Action::None; - bool operator ==(const BusStep &rhs) const { + inline bool operator ==(const BusStep &rhs) const { if(action != rhs.action) return false; return microcycle == rhs.microcycle; } + + inline bool is_terminal() const { + return action == Action::ScheduleNextProgram; + } }; /*! A micro-op is: (i) an action to take; and (ii) a sequence of bus operations to perform after taking the action. - A nullptr bus_program terminates a sequence of micro operations. + NOTE: this therefore has the opposite order of behaviour compared to a BusStep, + the action occurs BEFORE the bus operations, not after. + + A nullptr bus_program terminates a sequence of micro operations; the is_terminal + test should be used to query for that. The action on the final operation will + be performed. */ struct MicroOp { enum class Action { From cf6fa984332fe5a659445723cf8bf7934e5d9eab Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 22:50:26 -0400 Subject: [PATCH 017/239] Corrects detection of terminal micro-ops. --- Processors/68000/Implementation/68000Implementation.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index cb40a181e..61ad19098 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -23,6 +23,8 @@ template void Processor: // TODO: synchronous bus. + // TODO: check for bus error. + // Perform the microcycle. bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); @@ -32,9 +34,11 @@ template void Processor: // Consider advancing a micro-operation. if(active_step_->is_terminal()) { // If there are any more micro-operations available, just move onwards. - if(active_micro_op_ && !active_micro_op_->is_terminal()) { + if(active_micro_op_) { ++active_micro_op_; - } else { + } + + if(!active_micro_op_ || active_micro_op_->is_terminal()) { // Either the micro-operations for this instruction have been exhausted, or // no instruction was ongoing. Either way, do a standard instruction operation. @@ -135,7 +139,6 @@ template void Processor: active_program_->destination->full -= 4; break; } - } else { switch(active_step_->action) { default: From a8f1d98d40d81b8a01581b7be47a5224a730c29b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 23:01:56 -0400 Subject: [PATCH 018/239] Small further adjustments; seems likely to be correct now. --- .../Implementation/68000Implementation.hpp | 57 +++++++++++-------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 61ad19098..9ca26b4e3 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -31,14 +31,38 @@ template void Processor: /* PERFORM THE BUS STEP'S ACTION. */ - // Consider advancing a micro-operation. - if(active_step_->is_terminal()) { - // If there are any more micro-operations available, just move onwards. - if(active_micro_op_) { - ++active_micro_op_; + if(!active_step_->is_terminal()) { + switch(active_step_->action) { + default: + std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; + return; + break; + + case BusStep::Action::None: break; + + case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; + case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; + + case BusStep::Action::AdvancePrefetch: + prefetch_queue_[0] = prefetch_queue_[1]; + break; } - if(!active_micro_op_ || active_micro_op_->is_terminal()) { + // Move to the next bus step. + ++ active_step_; + + // Skip the micro-op renavigation below. + continue; + } + + /* + FIND THE NEXT MICRO-OP. + */ + while(true) { + // If there are any more micro-operations available, just move onwards. + if(active_micro_op_ && !active_micro_op_->is_terminal()) { + ++active_micro_op_; + } else { // Either the micro-operations for this instruction have been exhausted, or // no instruction was ongoing. Either way, do a standard instruction operation. @@ -54,8 +78,6 @@ template void Processor: active_micro_op_ = active_program_->micro_operations; } - // There is now a micro operation; cue up the first step and perform the predecessor action. - active_step_ = active_micro_op_->bus_program; switch(active_micro_op_->action) { case MicroOp::Action::None: break; @@ -139,25 +161,12 @@ template void Processor: active_program_->destination->full -= 4; break; } - } else { - switch(active_step_->action) { - default: - std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; - return; - break; - case BusStep::Action::None: break; - - case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; - case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; - - case BusStep::Action::AdvancePrefetch: - prefetch_queue_[0] = prefetch_queue_[1]; + // If we've got to a micro-op that includes bus steps, break out of this loop. + if(!active_micro_op_->is_terminal()) { + active_step_ = active_micro_op_->bus_program; break; } - - // Move to the next bus step. - ++ active_step_; } } } From 58f035e31a8ab81a33792370061929ac4ab5f1b0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 23:05:12 -0400 Subject: [PATCH 019/239] Makes error more communicative. --- Processors/68000/Implementation/68000Implementation.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9ca26b4e3..bdf6e9a0d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -70,7 +70,8 @@ template void Processor: const uint16_t next_instruction = prefetch_queue_[0].full; if(!instructions[next_instruction].micro_operations) { - std::cerr << "68000 Abilities exhausted; should schedule an instruction or something?" << std::endl; + // TODO: once all instructions are implemnted, this should be an instruction error. + std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; return; } From c3ebbfb10e5ca6b04fbc708e22acbbac9e43ae31 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Mar 2019 23:14:18 -0400 Subject: [PATCH 020/239] Implements all `MOVE Dn, Dn`. --- .../68000/Implementation/68000Storage.cpp | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index fa2d0f85e..7c62920b1 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -244,9 +244,9 @@ struct ProcessorStorageConstructor { {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) - {0x1000, 0xf000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) - {0x3000, 0xf000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) - {0x2000, 0xf000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0xf000, 0x1000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0xf000, 0x2000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0xf000, 0x3000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -263,6 +263,7 @@ struct ProcessorStorageConstructor { const auto micro_op_start = storage_.all_micro_ops_.size(); switch(mapping.decoder) { + // Decodes the format used by ABCD and SBCD. case Decoder::Decimal: { const int destination = (instruction >> 9) & 7; const int source = instruction & 7; @@ -286,6 +287,31 @@ struct ProcessorStorageConstructor { } } break; + // Decodes the format used by all the MOVEs. + case Decoder::RegisterModeModeRegister: { + const int source_register = instruction & 7; + const int source_mode = (instruction >> 3) & 7; + + const int destination_mode = (instruction >> 6) & 7; + const int destination_register = (instruction >> 9) & 7; + + if(!source_mode) { + storage_.instructions[instruction].source = &storage_.data_[source_register]; + } + + if(!destination_mode) { + storage_.instructions[instruction].destination = &storage_.data_[destination_register]; + } + + // TODO: all other types of mode. + if(!destination_mode && !source_mode) { + storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); + storage_.all_micro_ops_.emplace_back(); + } else { + continue; + } + } break; + default: std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; continue; From 53b3d9cf9d52b35e891d88ff05ad6c084e5058c9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 17 Mar 2019 14:34:16 -0400 Subject: [PATCH 021/239] Implements a few more MOVE variants, plus MOVEA. --- .../Implementation/68000Implementation.hpp | 5 ++ .../68000/Implementation/68000Storage.cpp | 48 ++++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 2 + 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index bdf6e9a0d..ba31eea5f 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -161,6 +161,11 @@ template void Processor: active_program_->source->full -= 4; active_program_->destination->full -= 4; break; + + case MicroOp::Action::SignExtendDestinationWord: + active_program_->destination->halves.high.full = + (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0x0000; + break; } // If we've got to a micro-op that includes bus steps, break out of this loop. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7c62920b1..98fec40f4 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -295,19 +295,53 @@ struct ProcessorStorageConstructor { const int destination_mode = (instruction >> 6) & 7; const int destination_register = (instruction >> 9) & 7; - if(!source_mode) { - storage_.instructions[instruction].source = &storage_.data_[source_register]; + switch(source_mode) { + case 0: // Dn + storage_.instructions[instruction].source = &storage_.data_[source_register]; + break; + + case 1: // An + storage_.instructions[instruction].source = &storage_.address_[source_register]; + break; + + default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L + storage_.instructions[instruction].source = &storage_.bus_data_[0]; + break; } if(!destination_mode) { storage_.instructions[instruction].destination = &storage_.data_[destination_register]; } - // TODO: all other types of mode. - if(!destination_mode && !source_mode) { - storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); - storage_.all_micro_ops_.emplace_back(); - } else { + const bool is_byte_access = mapping.operation == Operation::MOVEb; + const int both_modes = (source_mode << 4) | destination_mode; + switch(both_modes) { + case 0x00: // MOVE Ds, Dd + case 0x10: // MOVE As, Dd + storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); + storage_.all_micro_ops_.emplace_back(); + break; + + case 0x01: // MOVEA Ds, Ad + if(is_byte_access) continue; + + storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); + storage_.all_micro_ops_.emplace_back( + (mapping.operation == Operation::MOVEw) ? Action::SignExtendDestinationWord : Action::None + ); + break; + + case 0x20: // MOVE (As), Dd + if(mapping.operation == Operation::MOVEl) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(Action::None, &arbitrary_base + assemble_program("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + default: + // TODO: all other types of mode. continue; } } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 3f38974f8..602bc13d4 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -99,6 +99,8 @@ class ProcessorStorage { PredecrementSourceAndDestination1, PredecrementSourceAndDestination2, PredecrementSourceAndDestination4, + + SignExtendDestinationWord, } action = Action::None; BusStep *bus_program = nullptr; From 0d7bbdad54c348ecf2b2b75152a8079a153c8a66 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 17 Mar 2019 21:57:00 -0400 Subject: [PATCH 022/239] Begins a basic get/set state API, allowing some actual unit tests, implying an ABCD fix. --- .../Mac/Clock SignalTests/68000Tests.mm | 30 ++++++++++++++++--- Processors/68000/68000.hpp | 16 ++++++++++ .../Implementation/68000Implementation.hpp | 27 +++++++++++++++-- .../68000/Implementation/68000Storage.cpp | 15 +++++++++- .../68000/Implementation/68000Storage.hpp | 6 ++++ 5 files changed, 87 insertions(+), 7 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index f0c031f15..ba8d1da61 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -64,6 +64,14 @@ class RAM68000: public CPU::MC68000::BusHandler { return HalfCycles(0); } + CPU::MC68000::Processor::State get_processor_state() { + return m68000_.get_state(); + } + + void set_processor_state(const CPU::MC68000::Processor::State &state) { + m68000_.set_state(state); + } + private: CPU::MC68000::Processor m68000_; std::vector ram_; @@ -85,10 +93,24 @@ class RAM68000: public CPU::MC68000::BusHandler { } - (void)testABCD { - _machine->set_program({ - 0xc100 // ABCD D0, D0 - }); - _machine->run_for(HalfCycles(400)); + for(int d = 0; d < 100; ++d) { + _machine.reset(new RAM68000()); + _machine->set_program({ + 0xc100 // ABCD D0, D0 + }); + + auto state = _machine->get_processor_state(); + const uint8_t bcd_d = ((d / 10) * 16) + (d % 10); + state.data[0] = bcd_d; + _machine->set_processor_state(state); + + _machine->run_for(Cycles(40 + 6)); + + state = _machine->get_processor_state(); + const uint8_t double_d = (d * 2) % 100; + const uint8_t bcd_double_d = ((double_d / 10) * 16) + (double_d % 10); + XCTAssert(state.data[0] == bcd_double_d, "%02x + %02x = %02x; should equal %02x", bcd_d, bcd_d, state.data[0], bcd_double_d); + } } - (void)testSBCD { diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index bfe4e6e15..a179e247c 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -157,12 +157,28 @@ class BusHandler { class ProcessorBase: public ProcessorStorage { }; +struct ProcessorState { + uint32_t data[8]; + uint32_t address[7]; + uint32_t user_stack_pointer, supervisor_stack_pointer; + uint32_t program_counter; + uint16_t status; + + // TODO: More state needed to indicate current instruction, the processor's + // progress through it, and anything it has fetched so far. +// uint16_t current_instruction; +}; + template class Processor: public ProcessorBase { public: Processor(T &bus_handler) : ProcessorBase(), bus_handler_(bus_handler) {} void run_for(HalfCycles duration); + using State = ProcessorState; + State get_state(); + void set_state(const State &); + private: T &bus_handler_; }; diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index ba31eea5f..f033d5c37 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -93,7 +93,7 @@ template void Processor: int result = (destination & 0xf) + (source & 0xf) + (extend_flag_ ? 1 : 0); if(result > 0x9) result += 0x06; result += (destination & 0xf0) + (source & 0xf0); - if(result > 0x90) result += 0x60; + if((result&0xff0) > 0x90) result += 0x60; // Set all flags essentially as if this were normal addition. zero_flag_ |= result & 0xff; @@ -114,7 +114,7 @@ template void Processor: int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); if(result > 0x9) result -= 0x06; result += (destination & 0xf0) - (source & 0xf0); - if(result > 0x90) result -= 0x60; + if((result&0xff0) > 0x90) result -= 0x60; // Set all flags essentially as if this were normal subtraction. zero_flag_ |= result & 0xff; @@ -176,3 +176,26 @@ template void Processor: } } } + +template ProcessorState Processor::get_state() { + write_back_stack_pointer(); + + State state; + memcpy(state.data, data_, sizeof(state.data)); + memcpy(state.address, address_, sizeof(state.address)); + state.user_stack_pointer = stack_pointers_[0].full; + state.supervisor_stack_pointer = stack_pointers_[1].full; + + // TODO: status word. + + return state; +} + +template void Processor::set_state(const ProcessorState &state) { + memcpy(data_, state.data, sizeof(state.data)); + memcpy(address_, state.address, sizeof(state.address)); + stack_pointers_[0].full = state.user_stack_pointer; + stack_pointers_[1].full = state.supervisor_stack_pointer; + + // TODO: update address[7], once there's a status word to discern the mode this processor should now be in. +} diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 98fec40f4..cc3e1e978 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -388,7 +388,7 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { ProcessorStorageConstructor constructor(*this); // Create the exception programs. - const size_t reset_offset = constructor.assemble_program("n- n- n- n- n- nn nF nf nV nv np np"); + const size_t reset_offset = constructor.assemble_program("n n n n n nn nF nf nV nv np np"); // Install operations. constructor.install_instructions(); @@ -401,3 +401,16 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { effective_address_ = 0; is_supervisor_ = 1; } + +void CPU::MC68000::ProcessorStorage::write_back_stack_pointer() { + stack_pointers_[is_supervisor_] = address_[7]; +} + +void CPU::MC68000::ProcessorStorage::set_is_supervisor(bool is_supervisor) { + const int new_is_supervisor = is_supervisor ? 1 : 0; + if(new_is_supervisor != is_supervisor_) { + stack_pointers_[is_supervisor_] = address_[7]; + is_supervisor_ = new_is_supervisor; + address_[7] = stack_pointers_[is_supervisor_]; + } +} diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 602bc13d4..37819b368 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -141,6 +141,12 @@ class ProcessorStorage { MicroOp *active_micro_op_ = nullptr; BusStep *active_step_ = nullptr; + /// Copies address_[7] to the proper stack pointer based on current mode. + void write_back_stack_pointer(); + + /// Sets or clears the supervisor flag, ensuring the stack pointer is properly updated. + void set_is_supervisor(bool); + private: friend class ProcessorStorageConstructor; }; From 1d801acf72b9971b155cf3ef268278ab4b13e0cd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 17 Mar 2019 22:04:32 -0400 Subject: [PATCH 023/239] Switched to a better ABCD fix. --- Processors/68000/Implementation/68000Implementation.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index f033d5c37..62b33f2b6 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -91,9 +91,9 @@ template void Processor: // Perform the BCD add by evaluating the two nibbles separately. int result = (destination & 0xf) + (source & 0xf) + (extend_flag_ ? 1 : 0); - if(result > 0x9) result += 0x06; + if(result > 0x09) result += 0x06; result += (destination & 0xf0) + (source & 0xf0); - if((result&0xff0) > 0x90) result += 0x60; + if(result > 0x99) result += 0x60; // Set all flags essentially as if this were normal addition. zero_flag_ |= result & 0xff; @@ -112,9 +112,9 @@ template void Processor: // Perform the BCD add by evaluating the two nibbles separately. int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); - if(result > 0x9) result -= 0x06; + if(result > 0x09) result -= 0x06; result += (destination & 0xf0) - (source & 0xf0); - if((result&0xff0) > 0x90) result -= 0x60; + if(result > 0x99) result -= 0x60; // Set all flags essentially as if this were normal subtraction. zero_flag_ |= result & 0xff; From 412a1eb7ee018e39af6d55f87f6ec557ff870cb6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 18 Mar 2019 22:51:32 -0400 Subject: [PATCH 024/239] Takes an initial run at (An)+, -(An), (d16,An) and (d8,An,Xn) addressing modes. With only MOVEs from those to a data register implemented so far. --- .../Implementation/68000Implementation.hpp | 103 +++++++++++++++--- .../68000/Implementation/68000Storage.cpp | 52 +++++++-- .../68000/Implementation/68000Storage.hpp | 70 ++++++++++-- 3 files changed, 193 insertions(+), 32 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 62b33f2b6..9aeb4f886 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -40,7 +40,8 @@ template void Processor: case BusStep::Action::None: break; - case BusStep::Action::IncrementEffectiveAddress: effective_address_ += 2; break; + case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0] += 2; break; + case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1] += 2; break; case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; case BusStep::Action::AdvancePrefetch: @@ -80,6 +81,10 @@ template void Processor: } switch(active_micro_op_->action) { + default: + std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; + break; + case MicroOp::Action::None: break; case MicroOp::Action::PerformOperation: @@ -147,25 +152,97 @@ template void Processor: } break; - case MicroOp::Action::PredecrementSourceAndDestination1: - -- active_program_->source->full; - -- active_program_->destination->full; + case MicroOp::Action::Decrement1: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 1; break; - case MicroOp::Action::PredecrementSourceAndDestination2: - active_program_->source->full -= 2; - active_program_->destination->full -= 2; + case MicroOp::Action::Decrement2: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 2; break; - case MicroOp::Action::PredecrementSourceAndDestination4: - active_program_->source->full -= 4; - active_program_->destination->full -= 4; + case MicroOp::Action::Decrement4: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 4; break; - case MicroOp::Action::SignExtendDestinationWord: - active_program_->destination->halves.high.full = - (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0x0000; + case MicroOp::Action::Increment1: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 1; break; + + case MicroOp::Action::Increment2: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 2; + break; + + case MicroOp::Action::Increment4: + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 4; + break; + + case MicroOp::Action::SignExtendWord: + if(active_micro_op_->action & MicroOp::SourceMask) { + active_program_->source->halves.high.full = + (active_program_->source->halves.low.full & 0x8000) ? 0xffff : 0x0000; + } + if(active_micro_op_->action & MicroOp::DestinationMask) { + active_program_->destination->halves.high.full = + (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0x0000; + } + break; + + case MicroOp::Action::SignExtendByte: + if(active_micro_op_->action & MicroOp::SourceMask) { + active_program_->source->full = (active_program_->source->full & 0xff) | + (active_program_->source->full & 0x80) ? 0xffffff : 0x000000; + } + if(active_micro_op_->action & MicroOp::DestinationMask) { + active_program_->destination->full = (active_program_->destination->full & 0xff) | + (active_program_->destination->full & 0x80) ? 0xffffff : 0x000000; + } + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: + effective_address_[0] = int16_t(prefetch_queue_[0].full) + active_program_->source->full; + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: + effective_address_[1] = int16_t(prefetch_queue_[0].full) + active_program_->destination->full; + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: + effective_address_[0] = int16_t(prefetch_queue_[0].full) + active_program_->source->full; + effective_address_[1] = int16_t(prefetch_queue_[1].full) + active_program_->destination->full; + break; + + // TODO: permit as below for DestinationMask and SourceMask|DestinationMask; would prefer to test first. +#define CalculateD8AnXn(data, source, target) {\ + const auto register_index = (data.full >> 12) & 7; \ + const RegisterPair32 &displacement = (data.full & 0x8000) ? address_[register_index] : data_[register_index]; \ + target = int8_t(data.halves.low) + source->full; \ +\ + if(data.full & 0x800) { \ + effective_address_[0] += displacement.halves.low; \ + } else { \ + effective_address_[0] += displacement.full; \ + } \ +} + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { + CalculateD8AnXn(prefetch_queue_[0], active_program_->source, effective_address_[0]); + } break; + + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_[0], active_program_->destination, effective_address_[1]); + } break; + + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_[0], active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_[1], active_program_->destination, effective_address_[1]); + } break; + +#undef CalculateD8AnXn } // If we've got to a micro-op that includes bus steps, break out of this loop. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index cc3e1e978..fc1463d4a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -96,13 +96,13 @@ struct ProcessorStorageConstructor { case 'f': // Fetch SSP LSW. step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_; + step.microcycle.address = &storage_.effective_address_[0]; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = Action::IncrementEffectiveAddress; + step.action = Action::IncrementEffectiveAddress0; steps.push_back(step); access_pattern += 2; @@ -112,13 +112,13 @@ struct ProcessorStorageConstructor { case 'v': // Fetch exception vector high. step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_; + step.microcycle.address = &storage_.effective_address_[0]; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; steps.push_back(step); step.microcycle.length = HalfCycles(3); step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = Action::IncrementEffectiveAddress; + step.action = Action::IncrementEffectiveAddress0; steps.push_back(step); access_pattern += 2; @@ -213,6 +213,7 @@ struct ProcessorStorageConstructor { using Operation = ProcessorStorage::Operation; using Action = ProcessorStorage::MicroOp::Action; + using MicroOp = ProcessorBase::MicroOp; struct PatternMapping { uint16_t mask, value; Operation operation; @@ -273,7 +274,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination = &storage_.bus_data_[1]; storage_.all_micro_ops_.emplace_back( - Action::PredecrementSourceAndDestination1, + int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, &arbitrary_base + assemble_program("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); storage_.all_micro_ops_.emplace_back(Action::PerformOperation); } else { @@ -327,7 +328,7 @@ struct ProcessorStorageConstructor { storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); storage_.all_micro_ops_.emplace_back( - (mapping.operation == Operation::MOVEw) ? Action::SignExtendDestinationWord : Action::None + (mapping.operation == Operation::MOVEw) ? int(Action::SignExtendWord) | MicroOp::DestinationMask : int(Action::None) ); break; @@ -340,6 +341,43 @@ struct ProcessorStorageConstructor { } break; + case 0x30: // MOVE (As)+, Dd + if(mapping.operation == Operation::MOVEl) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(Action::None, &arbitrary_base + assemble_program("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + case 0x40: // MOVE -(As), Dd + if(mapping.operation == Operation::MOVEl) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + case 0x50: // MOVE (d16,As), Dd + if(mapping.operation == Operation::MOVEl) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(int(Action::CalcD16An) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + case 0x60: // MOVE (d8,As,Xn), Dd + if(mapping.operation == Operation::MOVEl) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(int(Action::CalcD8AnXn) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + default: // TODO: all other types of mode. continue; @@ -398,7 +436,7 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { // Set initial state. Largely TODO. active_step_ = reset_program_; - effective_address_ = 0; + effective_address_[0] = 0; is_supervisor_ = 1; } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 37819b368..bfcd0df8f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -32,8 +32,9 @@ class ProcessorStorage { uint_fast32_t overflow_flag_; // The overflow flag is set if this value is non-zero. uint_fast32_t negative_flag_; // The negative flag is set if this value is non-zero. - // Generic sources and targets for memory operations. - uint32_t effective_address_; + // Generic sources and targets for memory operations; + // by convention: [0] = source, [1] = destination. + uint32_t effective_address_[2]; RegisterPair32 bus_data_[2]; enum class Operation { @@ -52,8 +53,11 @@ class ProcessorStorage { enum class Action { None, - /// Performs effective_address_ += 2. - IncrementEffectiveAddress, + /// Performs effective_address_[0] += 2. + IncrementEffectiveAddress0, + + /// Performs effective_address_[1] += 2. + IncrementEffectiveAddress1, /// Performs program_counter_ += 2. IncrementProgramCounter, @@ -92,21 +96,63 @@ class ProcessorStorage { be performed. */ struct MicroOp { - enum class Action { + enum class Action: int { None, PerformOperation, - PredecrementSourceAndDestination1, - PredecrementSourceAndDestination2, - PredecrementSourceAndDestination4, + /* + All of the below will honour the source and destination masks + in deciding where to apply their actions. + */ + + /// Subtracts 1. + Decrement1, + /// Subtracts 2. + Decrement2, + /// Subtracts 4. + Decrement4, + + /// Adds 1. + Increment1, + /// Adds 2. + Increment2, + /// Adds 4. + Increment4, + + /// Peeking into the prefetch queue, calculates the proper target of (d16,An) addressing. + CalcD16An, + + /// Peeking into the prefetch queue, calculates the proper target of (d8,An,Xn) addressing. + CalcD8AnXn, + + /// Peeking into the prefetch queue, calculates the proper target of (d16,PC) addressing, + /// adjusting as though it had been performed after the proper PC fetches. The source + /// and destination mask flags affect only the destination of the result. + CalcD16PC, + + /// Peeking into the prefetch queue, calculates the proper target of (d8,An,Xn) addressing, + /// adjusting as though it had been performed after the proper PC fetches. The source + /// and destination mask flags affect only the destination of the result. + CalcD8PCXn, + + /// Sets the high word according to the MSB of the low word. + SignExtendWord, + + /// Sets the high three bytes according to the MSB of the low byte. + SignExtendByte, + }; + static const int SourceMask = 1 << 30; + static const int DestinationMask = 1 << 29; + int action = int(Action::None); - SignExtendDestinationWord, - } action = Action::None; BusStep *bus_program = nullptr; MicroOp() {} - MicroOp(Action action) : action(action) {} - MicroOp(Action action, BusStep *bus_program) : action(action), bus_program(bus_program) {} + MicroOp(int action) : action(action) {} + MicroOp(int action, BusStep *bus_program) : action(action), bus_program(bus_program) {} + + MicroOp(Action action) : MicroOp(int(action)) {} + MicroOp(Action action, BusStep *bus_program) : MicroOp(int(action), bus_program) {} inline bool is_terminal() const { return bus_program == nullptr; From 21cb7307d03abb34fd2cd4977d0e5e2aa26b68f6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 19 Mar 2019 11:53:37 -0400 Subject: [PATCH 025/239] Adds `MOVE #, Dn` and `MOVEA An, An`. As well as the scheduling for `(d16,PC), Dd` and `MOVE (d8,As,Xn), Dd` other than the .ls. --- .../Implementation/68000Implementation.hpp | 8 +++ .../68000/Implementation/68000Storage.cpp | 58 +++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 4 ++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9aeb4f886..a50b2d9a9 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -243,6 +243,14 @@ template void Processor: } break; #undef CalculateD8AnXn + + case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: + bus_data_[0] = (prefetch_queue_[0] << 16) | prefetch_queue_[1]; + break; + + case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: + bus_data_[1] = (prefetch_queue_[0] << 16) | prefetch_queue_[1]; + break; } // If we've got to a micro-op that includes bus steps, break out of this loop. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index fc1463d4a..541637660 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -310,11 +310,23 @@ struct ProcessorStorageConstructor { break; } - if(!destination_mode) { - storage_.instructions[instruction].destination = &storage_.data_[destination_register]; + switch(destination_mode) { + case 0: // Dn + storage_.instructions[instruction].destination = &storage_.data_[destination_register]; + break; + + case 1: // An + storage_.instructions[instruction].destination = &storage_.address_[destination_register]; + break; + + default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L + storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + break; } const bool is_byte_access = mapping.operation == Operation::MOVEb; + const bool is_long_word_access = mapping.operation == Operation::MOVEl; + const int both_modes = (source_mode << 4) | destination_mode; switch(both_modes) { case 0x00: // MOVE Ds, Dd @@ -324,6 +336,7 @@ struct ProcessorStorageConstructor { break; case 0x01: // MOVEA Ds, Ad + case 0x11: // MOVEA As, Ad if(is_byte_access) continue; storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); @@ -352,7 +365,7 @@ struct ProcessorStorageConstructor { break; case 0x40: // MOVE -(As), Dd - if(mapping.operation == Operation::MOVEl) { + if(is_long_word_access) { continue; } else { storage_.all_micro_ops_.emplace_back(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); @@ -361,7 +374,7 @@ struct ProcessorStorageConstructor { break; case 0x50: // MOVE (d16,As), Dd - if(mapping.operation == Operation::MOVEl) { + if(is_long_word_access) { continue; } else { storage_.all_micro_ops_.emplace_back(int(Action::CalcD16An) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); @@ -370,7 +383,7 @@ struct ProcessorStorageConstructor { break; case 0x60: // MOVE (d8,As,Xn), Dd - if(mapping.operation == Operation::MOVEl) { + if(is_long_word_access) { continue; } else { storage_.all_micro_ops_.emplace_back(int(Action::CalcD8AnXn) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); @@ -378,6 +391,41 @@ struct ProcessorStorageConstructor { } break; + case 0x70: // ... depends on 'register' + switch(source_register) { + case 0: // MOVE (xxx).W, Dd + break; + + case 1: // MOVE (xxx).L, Dd + break; + + case 2: // MOVE (d16,PC), Dd + if(is_long_word_access) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(int(Action::CalcD16PC) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + case 3: // MOVE (d8,As,Xn), Dd + if(is_long_word_access) { + continue; + } else { + storage_.all_micro_ops_.emplace_back(int(Action::CalcD8PCXn) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + } + break; + + case 4: // MOVE #, Dd + storage_.all_micro_ops_.emplace_back(int(Action::AssembleWordFromPrefetch) | MicroOp::SourceMask , &arbitrary_base + assemble_program("np np")); + storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + break; + + default: continue; + } + break; + default: // TODO: all other types of mode. continue; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index bfcd0df8f..588d29a14 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -140,6 +140,10 @@ class ProcessorStorage { /// Sets the high three bytes according to the MSB of the low byte. SignExtendByte, + + /// From the next two words in the prefetch queue assembles a 32-bit long word in either or + /// both of bus_data_[0] and bus_data_[1]. + AssembleWordFromPrefetch, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; From eeb161ec51e04be60164d3aae93fe1f62d00ecfc Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 19 Mar 2019 21:33:52 -0400 Subject: [PATCH 026/239] Converts the prefetch queue into a 32-bit quantity. --- .../Implementation/68000Implementation.hpp | 24 +++++++++---------- .../68000/Implementation/68000Storage.cpp | 2 +- .../68000/Implementation/68000Storage.hpp | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index a50b2d9a9..ef8574376 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -45,7 +45,7 @@ template void Processor: case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; case BusStep::Action::AdvancePrefetch: - prefetch_queue_[0] = prefetch_queue_[1]; + prefetch_queue_.halves.high = prefetch_queue_.halves.low; break; } @@ -69,7 +69,7 @@ template void Processor: // TODO: unless an interrupt is pending, or the trap flag is set. - const uint16_t next_instruction = prefetch_queue_[0].full; + const uint16_t next_instruction = prefetch_queue_.halves.high; if(!instructions[next_instruction].micro_operations) { // TODO: once all instructions are implemnted, this should be an instruction error. std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; @@ -205,16 +205,16 @@ template void Processor: break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: - effective_address_[0] = int16_t(prefetch_queue_[0].full) + active_program_->source->full; + effective_address_[0] = int16_t(prefetch_queue_.halves.high) + active_program_->source->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: - effective_address_[1] = int16_t(prefetch_queue_[0].full) + active_program_->destination->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.high) + active_program_->destination->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: - effective_address_[0] = int16_t(prefetch_queue_[0].full) + active_program_->source->full; - effective_address_[1] = int16_t(prefetch_queue_[1].full) + active_program_->destination->full; + effective_address_[0] = int16_t(prefetch_queue_.halves.high) + active_program_->source->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low) + active_program_->destination->full; break; // TODO: permit as below for DestinationMask and SourceMask|DestinationMask; would prefer to test first. @@ -230,26 +230,26 @@ template void Processor: } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { - CalculateD8AnXn(prefetch_queue_[0], active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_[0], active_program_->destination, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->destination, effective_address_[1]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_[0], active_program_->source, effective_address_[0]); - CalculateD8AnXn(prefetch_queue_[1], active_program_->destination, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); } break; #undef CalculateD8AnXn case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: - bus_data_[0] = (prefetch_queue_[0] << 16) | prefetch_queue_[1]; + bus_data_[0] = prefetch_queue_.full; break; case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: - bus_data_[1] = (prefetch_queue_[0] << 16) | prefetch_queue_[1]; + bus_data_[1] = prefetch_queue_.full; break; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 541637660..1d9958e9e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -128,7 +128,7 @@ struct ProcessorStorageConstructor { step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; step.microcycle.address = &storage_.program_counter_.full; - step.microcycle.value = &storage_.prefetch_queue_[1]; + step.microcycle.value = &storage_.prefetch_queue_.halves.low; step.action = Action::AdvancePrefetch; steps.push_back(step); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 588d29a14..7f0daa33e 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -21,7 +21,7 @@ class ProcessorStorage { RegisterPair32 stack_pointers_[2]; // [0] = user stack pointer; [1] = supervisor; the values from here // are copied into/out of address_[7] upon mode switches. - RegisterPair16 prefetch_queue_[2]; + RegisterPair32 prefetch_queue_; // Each word will go into the low part of the word, then proceed upward. bool dtack_ = true; // Various status bits. From f679145bd17a78a108643debcf1af57abacc0371 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 20 Mar 2019 23:21:02 -0400 Subject: [PATCH 027/239] Makes a further push into the MOVEs. With some quick notation shortening. --- .../68000/Implementation/68000Storage.cpp | 353 ++++++++++++------ 1 file changed, 245 insertions(+), 108 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 1d9958e9e..dd7aba3c9 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -257,6 +257,9 @@ struct ProcessorStorageConstructor { // storage_.all_bus_steps_ at the end. BusStep arbitrary_base; +#define op(...) storage_.all_micro_ops_.emplace_back(__VA_ARGS__) +#define seq(...) &arbitrary_base + assemble_program(__VA_ARGS__) + // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { @@ -273,18 +276,15 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.bus_data_[0]; storage_.instructions[instruction].destination = &storage_.bus_data_[1]; - storage_.all_micro_ops_.emplace_back( - int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, - &arbitrary_base + assemble_program("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); + op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, + seq("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); + op(Action::PerformOperation); } else { storage_.instructions[instruction].source = &storage_.data_[source]; storage_.instructions[instruction].destination = &storage_.data_[destination]; - storage_.all_micro_ops_.emplace_back( - Action::PerformOperation, - &arbitrary_base + assemble_program("np n")); - storage_.all_micro_ops_.emplace_back(); + op(Action::PerformOperation, seq("np n")); + op(); } } break; @@ -327,108 +327,242 @@ struct ProcessorStorageConstructor { const bool is_byte_access = mapping.operation == Operation::MOVEb; const bool is_long_word_access = mapping.operation == Operation::MOVEl; - const int both_modes = (source_mode << 4) | destination_mode; - switch(both_modes) { - case 0x00: // MOVE Ds, Dd - case 0x10: // MOVE As, Dd - storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); - storage_.all_micro_ops_.emplace_back(); - break; + // Construct a single word to describe the addressing mode: + // + // 0xssdd, where ss or dd = + // 0n with n a regular addresing mode between 0 and 6; or + // 1n with n being the nominal 'register' where addressing mode is 7. + // + // i.e. (see 4-118 / p.222) + // + // 00 = Dn + // 01 = An + // 02 = (An) + // 03 = (An)+ + // 04 = -(An) + // 05 = (d16, An) + // 06 = (d8, An, Xn) + // 10 = (xxx).W + // 11 = (xxx).L + // 12 = (d16, PC) + // 13 = (d8, PC, Xn) + // 14 = # + // + // ... for no reason other than to make the switch below easy to read. + const int both_modes = + ((source_mode == 7) ? (0x1000 | (source_register << 8)) : (source_mode << 8)) | + ((destination_mode == 7) ? (0x10 | destination_register) : destination_mode); - case 0x01: // MOVEA Ds, Ad - case 0x11: // MOVEA As, Ad - if(is_byte_access) continue; - - storage_.all_micro_ops_.emplace_back(Action::PerformOperation, &arbitrary_base + assemble_program("np")); - storage_.all_micro_ops_.emplace_back( - (mapping.operation == Operation::MOVEw) ? int(Action::SignExtendWord) | MicroOp::DestinationMask : int(Action::None) - ); - break; - - case 0x20: // MOVE (As), Dd - if(mapping.operation == Operation::MOVEl) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(Action::None, &arbitrary_base + assemble_program("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 0x30: // MOVE (As)+, Dd - if(mapping.operation == Operation::MOVEl) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(Action::None, &arbitrary_base + assemble_program("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 0x40: // MOVE -(As), Dd - if(is_long_word_access) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 0x50: // MOVE (d16,As), Dd - if(is_long_word_access) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(int(Action::CalcD16An) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 0x60: // MOVE (d8,As,Xn), Dd - if(is_long_word_access) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(int(Action::CalcD8AnXn) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 0x70: // ... depends on 'register' - switch(source_register) { - case 0: // MOVE (xxx).W, Dd - break; - - case 1: // MOVE (xxx).L, Dd - break; - - case 2: // MOVE (d16,PC), Dd - if(is_long_word_access) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(int(Action::CalcD16PC) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 3: // MOVE (d8,As,Xn), Dd - if(is_long_word_access) { - continue; - } else { - storage_.all_micro_ops_.emplace_back(int(Action::CalcD8PCXn) | MicroOp::SourceMask, &arbitrary_base + assemble_program("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - } - break; - - case 4: // MOVE #, Dd - storage_.all_micro_ops_.emplace_back(int(Action::AssembleWordFromPrefetch) | MicroOp::SourceMask , &arbitrary_base + assemble_program("np np")); - storage_.all_micro_ops_.emplace_back(Action::PerformOperation); - break; - - default: continue; - } - break; - - default: - // TODO: all other types of mode. + if(is_long_word_access) { continue; + } else { + switch(both_modes) { + + // + // Source = Dn or An + // + + case 0x0000: // MOVE Dn, Dn + case 0x0100: // MOVE An, Dn + op(Action::PerformOperation, seq("np")); + op(); + break; + + case 0x0001: // MOVEA Dn, An + case 0x0101: // MOVEA An, An + op(Action::PerformOperation, seq("np")); + op( + int(is_byte_access ? Action::SignExtendByte : Action::SignExtendWord) | MicroOp::DestinationMask + ); + break; + + case 0x0002: // MOVE Dn, (An) + case 0x0102: // MOVE An, (An) + case 0x0003: // MOVE Dn, (An)+ + case 0x0103: // MOVE An, (An)+ + // nw np + continue; + + case 0x0004: // MOVE Dn, -(An) + case 0x0104: // MOVE An, -(An) + // np nw + continue; + + case 0x0005: // MOVE Dn, (d16, An) + case 0x0105: // MOVE An, (d16, An) + // np nw np + continue; + + case 0x0006: // MOVE Dn, (d8, An, Xn) + case 0x0106: // MOVE An, (d8, An, Xn) + // n np nw np + continue; + + case 0x0010: // MOVE Dn, (xxx).W + case 0x0110: // MOVE An, (xxx).W + // np nw np + continue; + + case 0x0011: // MOVE Dn, (xxx).L + case 0x0111: // MOVE An, (xxx).L + // np np nw np + continue; + + // + // Source = (An) or (An)+ + // + + case 0x0200: // MOVE (An), Dn + case 0x0300: // MOVE (An)+, Dn + op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + if(source_mode == 0x3 || destination_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) + | (source_mode == 3 ? MicroOp::SourceMask : 0) + | (destination_mode == 3 ? MicroOp::DestinationMask : 0) + ); + } + op(Action::PerformOperation); + break; + + case 0x0202: // MOVE (An), (An) + case 0x0302: // MOVE (An)+, (An) + case 0x0203: // MOVE (An), (An)+ + case 0x0303: // MOVE (An)+, (An)+ + // nr nw np + continue; + + case 0x0204: // MOVE (An), -(An) + case 0x0304: // MOVE (An)+, -(An) + // nr np nw + continue; + + case 0x0205: // MOVE (An), (d16, An) + case 0x0305: // MOVE (An)+, (d16, An) + // nr np nw np + continue; + + case 0x0206: // MOVE (An), (d8, An, Xn) + case 0x0306: // MOVE (An)+, (d8, An, Xn) + // nr n np nw np + continue; + + case 0x0210: // MOVE (An), (xxx).W + case 0x0310: // MOVE (An)+, (xxx).W + // nr np nw np + continue; + + case 0x0211: // MOVE (An), (xxx).L + case 0x0311: // MOVE (An)+, (xxx).L + // nr np nw np np + continue; + + // + // Source = -(An) + // + + case 0x0400: // MOVE -(An), Dn + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x0402: // MOVE -(An), (An) + case 0x0403: // MOVE -(An), (An)+ + // n nr nw np + continue; + + case 0x0404: // MOVE -(An), -(An) + // n nr np nw + continue; + + case 0x0405: // MOVE -(An), (d16, An) + // n nr np nw + continue; + + case 0x0406: // MOVE -(An), (d8, An, Xn) + // n nr n np nw np + continue; + + case 0x0410: // MOVE -(An), (xxx).W + // n nr np nw np + continue; + + case 0x0411: // MOVE -(An), (xxx).L + // n nr np nw np np + continue; + + // + // Source = (d16, An) + // + + case 0x0500: // MOVE (d16, An), Dn + op(int(Action::CalcD16An) | MicroOp::SourceMask, seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + // + // Source = (d8, An, Xn) + // + + case 0x0600: // MOVE (d8, An, Xn), Dn + op(int(Action::CalcD8AnXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + // + // Source = (xxx).W + // + + case 0x1000: // MOVE (xxx).W, Dn + // np nr np + continue; + + // + // Source = (xxx).L + // + + case 0x1100: // MOVE (xxx).L, Dn + // np np nr np + continue; + + // + // Source = (d16, PC) + // + + case 0x1200: // MOVE (d16, PC), Dn + op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + // + // Source = (d8, An, Xn) + // + + case 0x1300: // MOVE (d8, An, Xn), Dn + op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + // + // Source = # + // + + case 0x1400: // MOVE #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(int(Action::PerformOperation), seq("np np")); + op(); + break; + + // + // Default + // + + default: + std::cerr << "Unimplemented MOVE " << std::hex << both_modes << std::endl; + // TODO: all other types of mode. + continue; + } + } } break; @@ -447,6 +581,9 @@ struct ProcessorStorageConstructor { } } +#undef seq +#undef op + // Finalise micro-op and program pointers. for(size_t instruction = 0; instruction < 65536; ++instruction) { if(micro_op_pointers[instruction] != std::numeric_limits::max()) { From fdc598f2e1f85845c10222cb408ac5e85128e3f7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 21 Mar 2019 22:30:41 -0400 Subject: [PATCH 028/239] Starts MOVE tests; in pursuit of which talks the 68000 into obeying run lengths. --- .../Mac/Clock SignalTests/68000Tests.mm | 14 + .../Implementation/68000Implementation.hpp | 475 +++++++++--------- .../68000/Implementation/68000Storage.cpp | 108 +++- .../68000/Implementation/68000Storage.hpp | 9 + 4 files changed, 360 insertions(+), 246 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index ba8d1da61..519b59d7f 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -120,4 +120,18 @@ class RAM68000: public CPU::MC68000::BusHandler { _machine->run_for(HalfCycles(400)); } +- (void)testMOVE { + _machine->set_program({ + 0x303c, 0xfb2e // MOVE #fb2e, D0 + }); + + _machine->run_for(Cycles(38)); + auto state = _machine->get_processor_state(); + XCTAssert(state.data[0] == 0); + + _machine->run_for(Cycles(8)); + state = _machine->get_processor_state(); + XCTAssert(state.data[0] == 0xfb2e); +} + @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index ef8574376..e93ef3dcf 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -7,8 +7,235 @@ // template void Processor::run_for(HalfCycles duration) { - // TODO: obey the 'cycles' count. - while(true) { + HalfCycles remaining_duration = duration + half_cycles_left_to_run_; + while(remaining_duration > HalfCycles(0)) { + /* + FIND THE NEXT MICRO-OP IF UNKNOWN. + */ + if(active_step_->is_terminal()) { + while(true) { + // If there are any more micro-operations available, just move onwards. + if(active_micro_op_ && !active_micro_op_->is_terminal()) { + ++active_micro_op_; + } else { + // Either the micro-operations for this instruction have been exhausted, or + // no instruction was ongoing. Either way, do a standard instruction operation. + + // TODO: unless an interrupt is pending, or the trap flag is set. + + const uint16_t next_instruction = prefetch_queue_.halves.high.full; + if(!instructions[next_instruction].micro_operations) { + // TODO: once all instructions are implemnted, this should be an instruction error. + std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; + return; + } + + active_program_ = &instructions[next_instruction]; + active_micro_op_ = active_program_->micro_operations; + } + + switch(active_micro_op_->action) { + default: + std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; + break; + + case int(MicroOp::Action::None): break; + + case int(MicroOp::Action::PerformOperation): + switch(active_program_->operation) { + case Operation::ABCD: { + // Pull out the two halves, for simplicity. + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + + // Perform the BCD add by evaluating the two nibbles separately. + int result = (destination & 0xf) + (source & 0xf) + (extend_flag_ ? 1 : 0); + if(result > 0x09) result += 0x06; + result += (destination & 0xf0) + (source & 0xf0); + if(result > 0x99) result += 0x60; + + // Set all flags essentially as if this were normal addition. + zero_flag_ |= result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; + + // Store the result. + active_program_->destination->halves.low.halves.low = uint8_t(result); + } break; + + case Operation::SBCD: { + // Pull out the two halves, for simplicity. + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + + // Perform the BCD add by evaluating the two nibbles separately. + int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); + if(result > 0x09) result -= 0x06; + result += (destination & 0xf0) - (source & 0xf0); + if(result > 0x99) result -= 0x60; + + // Set all flags essentially as if this were normal subtraction. + zero_flag_ |= result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + + // Store the result. + active_program_->destination->halves.low.halves.low = uint8_t(result); + } break; + + case Operation::MOVEb: + zero_flag_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_flag_ & 0x80; + overflow_flag_ = carry_flag_ = 0; + break; + + case Operation::MOVEw: + zero_flag_ = active_program_->destination->halves.low.full = active_program_->source->halves.low.full; + negative_flag_ = zero_flag_ & 0x8000; + overflow_flag_ = carry_flag_ = 0; + break; + + case Operation::MOVEl: + zero_flag_ = active_program_->destination->full = active_program_->source->full; + negative_flag_ = zero_flag_ & 0x80000000; + overflow_flag_ = carry_flag_ = 0; + break; + + default: + std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; + break; + } + break; + + case int(MicroOp::Action::SetMoveFlagsb): + zero_flag_ = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_flag_ & 0x80; + overflow_flag_ = carry_flag_ = 0; + break; + + case int(MicroOp::Action::SetMoveFlagsw): + zero_flag_ = active_program_->source->halves.low.full; + negative_flag_ = zero_flag_ & 0x8000; + overflow_flag_ = carry_flag_ = 0; + break; + + case int(MicroOp::Action::SetMoveFlagsl): + zero_flag_ = active_program_->source->full; + negative_flag_ = zero_flag_ & 0x80000000; + overflow_flag_ = carry_flag_ = 0; + break; + + case int(MicroOp::Action::Decrement1): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 1; + break; + + case int(MicroOp::Action::Decrement2): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 2; + break; + + case int(MicroOp::Action::Decrement4): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 4; + break; + + case int(MicroOp::Action::Increment1): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 1; + break; + + case int(MicroOp::Action::Increment2): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 2; + break; + + case int(MicroOp::Action::Increment4): + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 4; + break; + + case int(MicroOp::Action::SignExtendWord): + if(active_micro_op_->action & MicroOp::SourceMask) { + active_program_->source->halves.high.full = + (active_program_->source->halves.low.full & 0x8000) ? 0xffff : 0x0000; + } + if(active_micro_op_->action & MicroOp::DestinationMask) { + active_program_->destination->halves.high.full = + (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0x0000; + } + break; + + case int(MicroOp::Action::SignExtendByte): + if(active_micro_op_->action & MicroOp::SourceMask) { + active_program_->source->full = (active_program_->source->full & 0xff) | + (active_program_->source->full & 0x80) ? 0xffffff : 0x000000; + } + if(active_micro_op_->action & MicroOp::DestinationMask) { + active_program_->destination->full = (active_program_->destination->full & 0xff) | + (active_program_->destination->full & 0x80) ? 0xffffff : 0x000000; + } + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: + effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + active_program_->source->full; + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: + effective_address_[1] = int16_t(prefetch_queue_.halves.high.full) + active_program_->destination->full; + break; + + case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: + effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + active_program_->source->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination->full; + break; + + // TODO: permit as below for DestinationMask and SourceMask|DestinationMask; would prefer to test first. +#define CalculateD8AnXn(data, source, target) {\ + const auto register_index = (data.full >> 12) & 7; \ + const RegisterPair32 &displacement = (data.full & 0x8000) ? address_[register_index] : data_[register_index]; \ + target = int8_t(data.halves.low) + source->full; \ +\ + if(data.full & 0x800) { \ + effective_address_[0] += displacement.halves.low.full; \ + } else { \ + effective_address_[0] += displacement.full; \ + } \ +} + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); + } break; + + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->destination, effective_address_[1]); + } break; + + case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); + } break; + +#undef CalculateD8AnXn + + case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: + bus_data_[0] = prefetch_queue_.full; + break; + + case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: + bus_data_[1] = prefetch_queue_.full; + break; + } + + // If we've got to a micro-op that includes bus steps, break out of this loop. + if(!active_micro_op_->is_terminal()) { + active_step_ = active_micro_op_->bus_program; + break; + } + } + } + /* PERFORM THE CURRENT BUS STEP'S MICROCYCLE. @@ -26,240 +253,36 @@ template void Processor: // TODO: check for bus error. // Perform the microcycle. - bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); + remaining_duration -= + active_step_->microcycle.length + + bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); + /* PERFORM THE BUS STEP'S ACTION. */ - if(!active_step_->is_terminal()) { - switch(active_step_->action) { - default: - std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; - return; - break; + switch(active_step_->action) { + default: + std::cerr << "Unimplemented 68000 bus step action: " << int(active_step_->action) << std::endl; + return; + break; - case BusStep::Action::None: break; + case BusStep::Action::None: break; - case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0] += 2; break; - case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1] += 2; break; - case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; + case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0] += 2; break; + case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1] += 2; break; + case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; - case BusStep::Action::AdvancePrefetch: - prefetch_queue_.halves.high = prefetch_queue_.halves.low; - break; - } - - // Move to the next bus step. - ++ active_step_; - - // Skip the micro-op renavigation below. - continue; + case BusStep::Action::AdvancePrefetch: + prefetch_queue_.halves.high = prefetch_queue_.halves.low; + break; } - /* - FIND THE NEXT MICRO-OP. - */ - while(true) { - // If there are any more micro-operations available, just move onwards. - if(active_micro_op_ && !active_micro_op_->is_terminal()) { - ++active_micro_op_; - } else { - // Either the micro-operations for this instruction have been exhausted, or - // no instruction was ongoing. Either way, do a standard instruction operation. - - // TODO: unless an interrupt is pending, or the trap flag is set. - - const uint16_t next_instruction = prefetch_queue_.halves.high; - if(!instructions[next_instruction].micro_operations) { - // TODO: once all instructions are implemnted, this should be an instruction error. - std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; - return; - } - - active_program_ = &instructions[next_instruction]; - active_micro_op_ = active_program_->micro_operations; - } - - switch(active_micro_op_->action) { - default: - std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; - break; - - case MicroOp::Action::None: break; - - case MicroOp::Action::PerformOperation: - switch(active_program_->operation) { - case Operation::ABCD: { - // Pull out the two halves, for simplicity. - const uint8_t source = active_program_->source->halves.low.halves.low; - const uint8_t destination = active_program_->destination->halves.low.halves.low; - - // Perform the BCD add by evaluating the two nibbles separately. - int result = (destination & 0xf) + (source & 0xf) + (extend_flag_ ? 1 : 0); - if(result > 0x09) result += 0x06; - result += (destination & 0xf0) + (source & 0xf0); - if(result > 0x99) result += 0x60; - - // Set all flags essentially as if this were normal addition. - zero_flag_ |= result & 0xff; - extend_flag_ = carry_flag_ = result & ~0xff; - negative_flag_ = result & 0x80; - overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; - - // Store the result. - active_program_->destination->halves.low.halves.low = uint8_t(result); - } break; - - case Operation::SBCD: { - // Pull out the two halves, for simplicity. - const uint8_t source = active_program_->source->halves.low.halves.low; - const uint8_t destination = active_program_->destination->halves.low.halves.low; - - // Perform the BCD add by evaluating the two nibbles separately. - int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); - if(result > 0x09) result -= 0x06; - result += (destination & 0xf0) - (source & 0xf0); - if(result > 0x99) result -= 0x60; - - // Set all flags essentially as if this were normal subtraction. - zero_flag_ |= result & 0xff; - extend_flag_ = carry_flag_ = result & ~0xff; - negative_flag_ = result & 0x80; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; - - // Store the result. - active_program_->destination->halves.low.halves.low = uint8_t(result); - } break; - - case Operation::MOVEb: - zero_flag_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; - negative_flag_ = zero_flag_ & 0x80; - break; - - case Operation::MOVEw: - zero_flag_ = active_program_->destination->halves.low.full = active_program_->source->halves.low.full; - negative_flag_ = zero_flag_ & 0x8000; - break; - - case Operation::MOVEl: - zero_flag_ = active_program_->destination->full = active_program_->source->full; - negative_flag_ = zero_flag_ & 0x80000000; - break; - - default: - std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; - break; - } - break; - - case MicroOp::Action::Decrement1: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 1; - break; - - case MicroOp::Action::Decrement2: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 2; - break; - - case MicroOp::Action::Decrement4: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 4; - break; - - case MicroOp::Action::Increment1: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 1; - break; - - case MicroOp::Action::Increment2: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 2; - break; - - case MicroOp::Action::Increment4: - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 4; - break; - - case MicroOp::Action::SignExtendWord: - if(active_micro_op_->action & MicroOp::SourceMask) { - active_program_->source->halves.high.full = - (active_program_->source->halves.low.full & 0x8000) ? 0xffff : 0x0000; - } - if(active_micro_op_->action & MicroOp::DestinationMask) { - active_program_->destination->halves.high.full = - (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0x0000; - } - break; - - case MicroOp::Action::SignExtendByte: - if(active_micro_op_->action & MicroOp::SourceMask) { - active_program_->source->full = (active_program_->source->full & 0xff) | - (active_program_->source->full & 0x80) ? 0xffffff : 0x000000; - } - if(active_micro_op_->action & MicroOp::DestinationMask) { - active_program_->destination->full = (active_program_->destination->full & 0xff) | - (active_program_->destination->full & 0x80) ? 0xffffff : 0x000000; - } - break; - - case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.high) + active_program_->source->full; - break; - - case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: - effective_address_[1] = int16_t(prefetch_queue_.halves.high) + active_program_->destination->full; - break; - - case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.high) + active_program_->source->full; - effective_address_[1] = int16_t(prefetch_queue_.halves.low) + active_program_->destination->full; - break; - - // TODO: permit as below for DestinationMask and SourceMask|DestinationMask; would prefer to test first. -#define CalculateD8AnXn(data, source, target) {\ - const auto register_index = (data.full >> 12) & 7; \ - const RegisterPair32 &displacement = (data.full & 0x8000) ? address_[register_index] : data_[register_index]; \ - target = int8_t(data.halves.low) + source->full; \ -\ - if(data.full & 0x800) { \ - effective_address_[0] += displacement.halves.low; \ - } else { \ - effective_address_[0] += displacement.full; \ - } \ -} - case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); - } break; - - case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->destination, effective_address_[1]); - } break; - - case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); - } break; - -#undef CalculateD8AnXn - - case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: - bus_data_[0] = prefetch_queue_.full; - break; - - case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: - bus_data_[1] = prefetch_queue_.full; - break; - } - - // If we've got to a micro-op that includes bus steps, break out of this loop. - if(!active_micro_op_->is_terminal()) { - active_step_ = active_micro_op_->bus_program; - break; - } - } + // Move to the next bus step. + ++ active_step_; } + + half_cycles_left_to_run_ = remaining_duration; } template ProcessorState Processor::get_state() { diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index dd7aba3c9..78cb0170e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -327,6 +327,11 @@ struct ProcessorStorageConstructor { const bool is_byte_access = mapping.operation == Operation::MOVEb; const bool is_long_word_access = mapping.operation == Operation::MOVEl; + // There are no byte moves to address registers. + if(is_byte_access && destination_mode == 1) { + continue; + } + // Construct a single word to describe the addressing mode: // // 0xssdd, where ss or dd = @@ -371,21 +376,26 @@ struct ProcessorStorageConstructor { case 0x0001: // MOVEA Dn, An case 0x0101: // MOVEA An, An op(Action::PerformOperation, seq("np")); - op( - int(is_byte_access ? Action::SignExtendByte : Action::SignExtendWord) | MicroOp::DestinationMask - ); + op(int(Action::SignExtendWord) | MicroOp::DestinationMask); break; case 0x0002: // MOVE Dn, (An) case 0x0102: // MOVE An, (An) case 0x0003: // MOVE Dn, (An)+ case 0x0103: // MOVE An, (An)+ - // nw np + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } else { + op(); + } continue; case 0x0004: // MOVE Dn, -(An) case 0x0104: // MOVE An, -(An) - // np nw + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); continue; case 0x0005: // MOVE Dn, (d16, An) @@ -415,11 +425,8 @@ struct ProcessorStorageConstructor { case 0x0200: // MOVE (An), Dn case 0x0300: // MOVE (An)+, Dn op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - if(source_mode == 0x3 || destination_mode == 0x3) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) - | (source_mode == 3 ? MicroOp::SourceMask : 0) - | (destination_mode == 3 ? MicroOp::DestinationMask : 0) - ); + if(source_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; @@ -492,23 +499,59 @@ struct ProcessorStorageConstructor { continue; // - // Source = (d16, An) + // Source = (d16, An) or (d8, An, Xn) // +#define action_calc() int(source_mode == 0x05 ? Action::CalcD16An : Action::CalcD8AnXn) +#define pseq(x) (source_mode == 0x06 ? "n" x : x) + case 0x0500: // MOVE (d16, An), Dn - op(int(Action::CalcD16An) | MicroOp::SourceMask, seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - op(Action::PerformOperation); - break; - - // - // Source = (d8, An, Xn) - // - case 0x0600: // MOVE (d8, An, Xn), Dn - op(int(Action::CalcD8AnXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0] }, !is_byte_access)); op(Action::PerformOperation); break; + case 0x0502: // MOVE (d16, An), (An) + case 0x0503: // MOVE (d16, An), (An)+ + case 0x0602: // MOVE (d8, An, Xn), (An) + case 0x0603: // MOVE (d8, An, Xn), (An)+ + // np nr nw np + // n np nr nw np + continue; + + case 0x0504: // MOVE (d16, An), -(An) + case 0x0604: // MOVE (d8, An, Xn), -(An) + // np nr np nw + // n np nr np nw + continue; + + case 0x0505: // MOVE (d16, An), (d16, An) + case 0x0605: // MOVE (d8, An, Xn), (d16, An) + // np nr np nw np + // n np nr np nw np + continue; + + case 0x0506: // MOVE (d16, An), (d8, An, Xn) + case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) + // np nr n np nw np + // n np nr n np nw np + continue; + + case 0x0510: // MOVE (d16, An), (xxx).W + case 0x0610: // MOVE (d8, An, Xn), (xxx).W + // np nr np nw np + // n np nr np nw np + continue; + + case 0x0511: // MOVE (d16, An), (xxx).L + case 0x0611: // MOVE (d8, An, Xn), (xxx).L + // np nr np nw np np + // n np nr np nw np np + continue; + +#undef action_calc +#undef prefix + // // Source = (xxx).W // @@ -517,6 +560,31 @@ struct ProcessorStorageConstructor { // np nr np continue; + case 0x1002: // MOVE (xxx).W, (An) + case 0x1003: // MOVE (xxx).W, (An)+ + // np nr nw np + continue; + + case 0x1004: // MOVE (xxx).W, -(An) + // np nr np nw + continue; + + case 0x1005: // MOVE (xxx).W, (d16, An) + // np nr np nw np + continue; + + case 0x1006: // MOVE (xxx).W, (d8, An, Xn) + // np nr n np nw np + continue; + + case 0x1010: // MOVE (xxx).W, (xxx).W + // np nr np nw np + continue; + + case 0x1011: // MOVE (xxx).W, (xxx).L + // np nr np nw np np + continue; + // // Source = (xxx).L // diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 7f0daa33e..28d9f232f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -37,6 +37,8 @@ class ProcessorStorage { uint32_t effective_address_[2]; RegisterPair32 bus_data_[2]; + HalfCycles half_cycles_left_to_run_; + enum class Operation { ABCD, SBCD, ADD, AND, EOR, OR, SUB, @@ -98,8 +100,15 @@ class ProcessorStorage { struct MicroOp { enum class Action: int { None, + + /// Does whatever this instruction says is the main operation. PerformOperation, + /// Sets the flags as if a MOVE operation had occurred, by inspecting *source. + SetMoveFlagsb, + SetMoveFlagsw, + SetMoveFlagsl, + /* All of the below will honour the source and destination masks in deciding where to apply their actions. From 87420881c853db76adf6999c8e882b37f0a42b33 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 21 Mar 2019 23:32:03 -0400 Subject: [PATCH 029/239] Extends to a failing test. --- OSBindings/Mac/Clock SignalTests/68000Tests.mm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index 519b59d7f..446df5c23 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -122,16 +122,30 @@ class RAM68000: public CPU::MC68000::BusHandler { - (void)testMOVE { _machine->set_program({ - 0x303c, 0xfb2e // MOVE #fb2e, D0 + 0x303c, 0xfb2e, // MOVE #fb2e, D0 + 0x3200, // MOVE D0, D1 + 0x3040, // MOVE D0, A0 }); + // Perform RESET. _machine->run_for(Cycles(38)); auto state = _machine->get_processor_state(); XCTAssert(state.data[0] == 0); + // Perform MOVE #fb2e, D0 _machine->run_for(Cycles(8)); state = _machine->get_processor_state(); XCTAssert(state.data[0] == 0xfb2e); + + // Perform MOVE D0, D1 + _machine->run_for(Cycles(4)); + state = _machine->get_processor_state(); + XCTAssert(state.data[1] == 0xfb2e); + + // Perform MOVE D0, A0 + _machine->run_for(Cycles(4)); + state = _machine->get_processor_state(); + XCTAssert(state.address[0] == 0xfffffb2e, "A0 was %08x instead of 0xfffffb2e", state.address[0]); } @end From c9c16968bb6c4da87dd01b4751b302dfef2433e5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 22 Mar 2019 19:25:53 -0400 Subject: [PATCH 030/239] Implements MOVEA as distinct from MOVE. At least as far as MOVE is implemented, that is. --- .../Implementation/68000Implementation.hpp | 19 +++++++++++++++++++ .../68000/Implementation/68000Storage.cpp | 12 +++++------- .../68000/Implementation/68000Storage.hpp | 3 ++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e93ef3dcf..5319f0cd8 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -85,6 +85,10 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + /* + MOVE.b, MOVE.l and MOVE.w: move the least significant byte or word, or the entire long word, + and set negative, zero, overflow and carry as appropriate. + */ case Operation::MOVEb: zero_flag_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; negative_flag_ = zero_flag_ & 0x80; @@ -103,6 +107,21 @@ template void Processor: overflow_flag_ = carry_flag_ = 0; break; + /* + MOVEA.l: move the entire long word; + MOVEA.w: move the least significant word and sign extend it. + Neither sets any flags. + */ + + case Operation::MOVEAw: + active_program_->destination->halves.low.full = active_program_->source->halves.low.full; + active_program_->destination->halves.high.full = (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0; + break; + + case Operation::MOVEAl: + active_program_->destination->full = active_program_->source->full; + break; + default: std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; break; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 78cb0170e..c9a10412a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -264,6 +264,7 @@ struct ProcessorStorageConstructor { for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { if((instruction & mapping.mask) == mapping.value) { + auto operation = mapping.operation; const auto micro_op_start = storage_.all_micro_ops_.size(); switch(mapping.decoder) { @@ -367,18 +368,15 @@ struct ProcessorStorageConstructor { // Source = Dn or An // + case 0x0001: // MOVEA Dn, An + case 0x0101: // MOVEA An, An + operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. case 0x0000: // MOVE Dn, Dn case 0x0100: // MOVE An, Dn op(Action::PerformOperation, seq("np")); op(); break; - case 0x0001: // MOVEA Dn, An - case 0x0101: // MOVEA An, An - op(Action::PerformOperation, seq("np")); - op(int(Action::SignExtendWord) | MicroOp::DestinationMask); - break; - case 0x0002: // MOVE Dn, (An) case 0x0102: // MOVE An, (An) case 0x0003: // MOVE Dn, (An)+ @@ -640,7 +638,7 @@ struct ProcessorStorageConstructor { } // Install the operation and make a note of where micro-ops begin. - storage_.instructions[instruction].operation = mapping.operation; + storage_.instructions[instruction].operation = operation; micro_op_pointers[instruction] = micro_op_start; // Don't search further through the list of possibilities. diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 28d9f232f..d3016a1aa 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -43,7 +43,8 @@ class ProcessorStorage { ABCD, SBCD, ADD, AND, EOR, OR, SUB, - MOVEb, MOVEw, MOVEl + MOVEb, MOVEw, MOVEl, + MOVEAw, MOVEAl }; /*! From db0da4b7413197fb7296e6da2736fff4ff5db3cd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 22 Mar 2019 19:34:17 -0400 Subject: [PATCH 031/239] Improves get/set state. --- .../Implementation/68000Implementation.hpp | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 5319f0cd8..786f47cf5 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -313,7 +313,15 @@ template ProcessorState Processor void Processor: stack_pointers_[0].full = state.user_stack_pointer; stack_pointers_[1].full = state.supervisor_stack_pointer; - // TODO: update address[7], once there's a status word to discern the mode this processor should now be in. + carry_flag_ = state.status & 0x0001; + overflow_flag_ = state.status & 0x0002; + zero_flag_ = (state.status & 0x0004) ^ 0x0004; + negative_flag_ = state.status & 0x0008; + extend_flag_ = state.status & 0x0010; + + is_supervisor_ = (state.status >> 13) & 1; + address_[7] = stack_pointers_[is_supervisor_]; + + // TODO: rest of status word: interrupt level, trace flag. } From ed7060a105b378f32a4247d26dc2957a29f57f0f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 22 Mar 2019 21:43:51 -0400 Subject: [PATCH 032/239] Made an initial stab at completing MOVEA.w. I think I'm probably peeking into the prefetch queue incorrectly. --- .../Implementation/68000Implementation.hpp | 22 +++++++++++++------ .../68000/Implementation/68000Storage.cpp | 22 ++++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 11 ++++++---- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 786f47cf5..f5228b34d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -199,11 +199,11 @@ template void Processor: break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + active_program_->source->full; + effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + active_program_->source->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: - effective_address_[1] = int16_t(prefetch_queue_.halves.high.full) + active_program_->destination->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: @@ -224,11 +224,11 @@ template void Processor: } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->source, effective_address_[0]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->destination, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { @@ -239,11 +239,19 @@ template void Processor: #undef CalculateD8AnXn case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: - bus_data_[0] = prefetch_queue_.full; + effective_address_[0] = prefetch_queue_.halves.high.full; break; case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: - bus_data_[1] = prefetch_queue_.full; + effective_address_[1] = prefetch_queue_.halves.high.full; + break; + + case int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask: + effective_address_[0] = prefetch_queue_.full; + break; + + case int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::DestinationMask: + effective_address_[1] = prefetch_queue_.full; break; } @@ -321,7 +329,7 @@ template ProcessorState Processor Date: Fri, 22 Mar 2019 23:27:48 -0400 Subject: [PATCH 033/239] Adds test for MOVEA.w (0x1000), A1 and fixes implementation thereof. --- .../Mac/Clock SignalTests/68000Tests.mm | 11 ++++++++-- .../Implementation/68000Implementation.hpp | 5 +++-- .../68000/Implementation/68000Storage.cpp | 20 ++++++++++--------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index 446df5c23..a9946153e 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -124,7 +124,9 @@ class RAM68000: public CPU::MC68000::BusHandler { _machine->set_program({ 0x303c, 0xfb2e, // MOVE #fb2e, D0 0x3200, // MOVE D0, D1 - 0x3040, // MOVE D0, A0 + + 0x3040, // MOVEA D0, A0 + 0x3278, 0x0400, // MOVEA.w (0x0400), A1 }); // Perform RESET. @@ -142,10 +144,15 @@ class RAM68000: public CPU::MC68000::BusHandler { state = _machine->get_processor_state(); XCTAssert(state.data[1] == 0xfb2e); - // Perform MOVE D0, A0 + // Perform MOVEA D0, A0 _machine->run_for(Cycles(4)); state = _machine->get_processor_state(); XCTAssert(state.address[0] == 0xfffffb2e, "A0 was %08x instead of 0xfffffb2e", state.address[0]); + + // Perform MOVEA.w (0x1000), A1 + _machine->run_for(Cycles(13)); + state = _machine->get_processor_state(); + XCTAssert(state.address[1] == 0x0000303c, "A1 was %08x instead of 0x0000303c", state.address[1]); } @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index f5228b34d..6c7d442d2 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -239,11 +239,12 @@ template void Processor: #undef CalculateD8AnXn case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: - effective_address_[0] = prefetch_queue_.halves.high.full; + // Assumption: this will be assembling right at the start of the instruction. + effective_address_[0] = prefetch_queue_.halves.low.full; break; case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: - effective_address_[1] = prefetch_queue_.halves.high.full; + effective_address_[1] = prefetch_queue_.halves.low.full; break; case int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask: diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5de1cf924..0d1b13df7 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -387,14 +387,14 @@ struct ProcessorStorageConstructor { } else { op(); } - continue; + break; case 0x0004: // MOVE Dn, -(An) case 0x0104: // MOVE An, -(An) op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); - continue; + break; case 0x0005: // MOVE Dn, (d16, An) case 0x0105: // MOVE An, (d16, An) @@ -562,12 +562,14 @@ struct ProcessorStorageConstructor { // Source = (xxx).W // - case 0x1001: // MOVEA (xxx).W, Dn + case 0x1001: // MOVEA (xxx).W, An operation = Operation::MOVEAw; case 0x1000: // MOVE (xxx).W, Dn - op(int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(Action::PerformOperation, seq("nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - continue; + op( + int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; case 0x1002: // MOVE (xxx).W, (An) case 0x1003: // MOVE (xxx).W, (An)+ @@ -603,7 +605,8 @@ struct ProcessorStorageConstructor { case 0x1100: // MOVE (xxx).W, Dn op(int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation, seq("nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - continue; + op(); + break; // // Source = (d16, PC) @@ -640,11 +643,10 @@ struct ProcessorStorageConstructor { // default: - std::cerr << "Unimplemented MOVE " << std::hex << both_modes << std::endl; + std::cerr << "Unimplemented MOVE " << std::hex << both_modes << " " << instruction << std::endl; // TODO: all other types of mode. continue; } - } } break; From 43532c8455e536f0528569cef437b9980d97a4ca Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 23 Mar 2019 21:03:52 -0400 Subject: [PATCH 034/239] Starts to make incursions into MOVE[A].l. --- .../68000/Implementation/68000Storage.cpp | 483 +++++++++--------- .../68000/Implementation/68000Storage.hpp | 6 + 2 files changed, 257 insertions(+), 232 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 0d1b13df7..91586ad82 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -155,6 +155,12 @@ struct ProcessorStorageConstructor { step.microcycle.length = HalfCycles(3); step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); + if(access_pattern[1] == 'R') { + step.action = Action::IncrementEffectiveAddress0; + } + if(access_pattern[1] == 'W') { + step.action = Action::IncrementEffectiveAddress1; + } steps.push_back(step); ++address_iterator; @@ -357,296 +363,309 @@ struct ProcessorStorageConstructor { // ... for no reason other than to make the switch below easy to read. const int both_modes = ((source_mode == 7) ? (0x1000 | (source_register << 8)) : (source_mode << 8)) | - ((destination_mode == 7) ? (0x10 | destination_register) : destination_mode); + ((destination_mode == 7) ? (0x10 | destination_register) : destination_mode) | + (is_long_word_access ? 0x10000 : 0); - if(is_long_word_access) { - continue; - } else { - switch(both_modes) { + switch(both_modes) { - // - // Source = Dn or An - // + // + // Source = Dn or An + // - case 0x0001: // MOVEA Dn, An - case 0x0101: // MOVEA An, An - operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. - case 0x0000: // MOVE Dn, Dn - case 0x0100: // MOVE An, Dn - op(Action::PerformOperation, seq("np")); + case 0x10001: // MOVEA.l Dn, An + case 0x10101: // MOVEA.l An, An + case 0x00001: // MOVEA.w Dn, An + case 0x00101: // MOVEA.w An, An + operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; // Substitute MOVEA for MOVE. + case 0x10000: // MOVE.l Dn, Dn + case 0x10100: // MOVE.l An, Dn + case 0x00000: // MOVE.bw Dn, Dn + case 0x00100: // MOVE.bw An, Dn + op(Action::PerformOperation, seq("np")); + op(); + break; + + case 0x0002: // MOVE Dn, (An) + case 0x0102: // MOVE An, (An) + case 0x0003: // MOVE Dn, (An)+ + case 0x0103: // MOVE An, (An)+ + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } else { op(); - break; + } + break; - case 0x0002: // MOVE Dn, (An) - case 0x0102: // MOVE An, (An) - case 0x0003: // MOVE Dn, (An)+ - case 0x0103: // MOVE An, (An)+ - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); - } else { - op(); - } - break; + case 0x0004: // MOVE Dn, -(An) + case 0x0104: // MOVE An, -(An) + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; - case 0x0004: // MOVE Dn, -(An) - case 0x0104: // MOVE An, -(An) - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, - seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); - break; + case 0x0005: // MOVE Dn, (d16, An) + case 0x0105: // MOVE An, (d16, An) + // np nw np + continue; - case 0x0005: // MOVE Dn, (d16, An) - case 0x0105: // MOVE An, (d16, An) - // np nw np - continue; + case 0x0006: // MOVE Dn, (d8, An, Xn) + case 0x0106: // MOVE An, (d8, An, Xn) + // n np nw np + continue; - case 0x0006: // MOVE Dn, (d8, An, Xn) - case 0x0106: // MOVE An, (d8, An, Xn) - // n np nw np - continue; + case 0x0010: // MOVE Dn, (xxx).W + case 0x0110: // MOVE An, (xxx).W + // np nw np + continue; - case 0x0010: // MOVE Dn, (xxx).W - case 0x0110: // MOVE An, (xxx).W - // np nw np - continue; + case 0x0011: // MOVE Dn, (xxx).L + case 0x0111: // MOVE An, (xxx).L + // np np nw np + continue; - case 0x0011: // MOVE Dn, (xxx).L - case 0x0111: // MOVE An, (xxx).L - // np np nw np - continue; + // + // Source = (An) or (An)+ + // - // - // Source = (An) or (An)+ - // + case 0x00201: // MOVEA.w (An), An + case 0x00301: // MOVEA.w (An)+, An + operation = Operation::MOVEAw; + case 0x00200: // MOVE.bw (An), Dn + case 0x00300: // MOVE.bw (An)+, Dn + op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + if(source_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; - case 0x0201: // MOVEA (An), An - case 0x0301: // MOVEA (An)+, An - operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. - case 0x0200: // MOVE (An), Dn - case 0x0300: // MOVE (An)+, Dn - op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - if(source_mode == 0x3) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); - } - op(Action::PerformOperation); - break; + case 0x10201: // MOVEA.l (An), An + case 0x10301: // MOVEA.l (An)+, An + operation = Operation::MOVEAl; + case 0x10200: // MOVE.l (An), Dn + case 0x10300: // MOVE.l (An)+, Dn + op(Action::CopySourceToEffectiveAddress, seq("nR nr np")); + if(source_mode == 0x3) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; - case 0x0202: // MOVE (An), (An) - case 0x0302: // MOVE (An)+, (An) - case 0x0203: // MOVE (An), (An)+ - case 0x0303: // MOVE (An)+, (An)+ - // nr nw np - continue; + case 0x0202: // MOVE (An), (An) + case 0x0302: // MOVE (An)+, (An) + case 0x0203: // MOVE (An), (An)+ + case 0x0303: // MOVE (An)+, (An)+ + // nr nw np + continue; - case 0x0204: // MOVE (An), -(An) - case 0x0304: // MOVE (An)+, -(An) - // nr np nw - continue; + case 0x0204: // MOVE (An), -(An) + case 0x0304: // MOVE (An)+, -(An) + // nr np nw + continue; - case 0x0205: // MOVE (An), (d16, An) - case 0x0305: // MOVE (An)+, (d16, An) - // nr np nw np - continue; + case 0x0205: // MOVE (An), (d16, An) + case 0x0305: // MOVE (An)+, (d16, An) + // nr np nw np + continue; - case 0x0206: // MOVE (An), (d8, An, Xn) - case 0x0306: // MOVE (An)+, (d8, An, Xn) - // nr n np nw np - continue; + case 0x0206: // MOVE (An), (d8, An, Xn) + case 0x0306: // MOVE (An)+, (d8, An, Xn) + // nr n np nw np + continue; - case 0x0210: // MOVE (An), (xxx).W - case 0x0310: // MOVE (An)+, (xxx).W - // nr np nw np - continue; + case 0x0210: // MOVE (An), (xxx).W + case 0x0310: // MOVE (An)+, (xxx).W + // nr np nw np + continue; - case 0x0211: // MOVE (An), (xxx).L - case 0x0311: // MOVE (An)+, (xxx).L - // nr np nw np np - continue; + case 0x0211: // MOVE (An), (xxx).L + case 0x0311: // MOVE (An)+, (xxx).L + // nr np nw np np + continue; - // - // Source = -(An) - // + // + // Source = -(An) + // - case 0x0401: // MOVEA -(An), An - operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. - case 0x0400: // MOVE -(An), Dn - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, - seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - op(Action::PerformOperation); - break; + case 0x0401: // MOVEA -(An), An + operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. + case 0x0400: // MOVE -(An), Dn + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation); + break; - case 0x0402: // MOVE -(An), (An) - case 0x0403: // MOVE -(An), (An)+ - // n nr nw np - continue; + case 0x0402: // MOVE -(An), (An) + case 0x0403: // MOVE -(An), (An)+ + // n nr nw np + continue; - case 0x0404: // MOVE -(An), -(An) - // n nr np nw - continue; + case 0x0404: // MOVE -(An), -(An) + // n nr np nw + continue; - case 0x0405: // MOVE -(An), (d16, An) - // n nr np nw - continue; + case 0x0405: // MOVE -(An), (d16, An) + // n nr np nw + continue; - case 0x0406: // MOVE -(An), (d8, An, Xn) - // n nr n np nw np - continue; + case 0x0406: // MOVE -(An), (d8, An, Xn) + // n nr n np nw np + continue; - case 0x0410: // MOVE -(An), (xxx).W - // n nr np nw np - continue; + case 0x0410: // MOVE -(An), (xxx).W + // n nr np nw np + continue; - case 0x0411: // MOVE -(An), (xxx).L - // n nr np nw np np - continue; + case 0x0411: // MOVE -(An), (xxx).L + // n nr np nw np np + continue; - // - // Source = (d16, An) or (d8, An, Xn) - // + // + // Source = (d16, An) or (d8, An, Xn) + // #define action_calc() int(source_mode == 0x05 ? Action::CalcD16An : Action::CalcD8AnXn) #define pseq(x) (source_mode == 0x06 ? "n" x : x) - case 0x0501: // MOVE (d16, An), An - case 0x0601: // MOVE (d8, An, Xn), An - operation = Operation::MOVEAw; - case 0x0500: // MOVE (d16, An), Dn - case 0x0600: // MOVE (d8, An, Xn), Dn - op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0] }, !is_byte_access)); - op(Action::PerformOperation); - break; + case 0x0501: // MOVE (d16, An), An + case 0x0601: // MOVE (d8, An, Xn), An + operation = Operation::MOVEAw; + case 0x0500: // MOVE (d16, An), Dn + case 0x0600: // MOVE (d8, An, Xn), Dn + op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; - case 0x0502: // MOVE (d16, An), (An) - case 0x0503: // MOVE (d16, An), (An)+ - case 0x0602: // MOVE (d8, An, Xn), (An) - case 0x0603: // MOVE (d8, An, Xn), (An)+ - // np nr nw np - // n np nr nw np - continue; + case 0x0502: // MOVE (d16, An), (An) + case 0x0503: // MOVE (d16, An), (An)+ + case 0x0602: // MOVE (d8, An, Xn), (An) + case 0x0603: // MOVE (d8, An, Xn), (An)+ + // np nr nw np + // n np nr nw np + continue; - case 0x0504: // MOVE (d16, An), -(An) - case 0x0604: // MOVE (d8, An, Xn), -(An) - // np nr np nw - // n np nr np nw - continue; + case 0x0504: // MOVE (d16, An), -(An) + case 0x0604: // MOVE (d8, An, Xn), -(An) + // np nr np nw + // n np nr np nw + continue; - case 0x0505: // MOVE (d16, An), (d16, An) - case 0x0605: // MOVE (d8, An, Xn), (d16, An) - // np nr np nw np - // n np nr np nw np - continue; + case 0x0505: // MOVE (d16, An), (d16, An) + case 0x0605: // MOVE (d8, An, Xn), (d16, An) + // np nr np nw np + // n np nr np nw np + continue; - case 0x0506: // MOVE (d16, An), (d8, An, Xn) - case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) - // np nr n np nw np - // n np nr n np nw np - continue; + case 0x0506: // MOVE (d16, An), (d8, An, Xn) + case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) + // np nr n np nw np + // n np nr n np nw np + continue; - case 0x0510: // MOVE (d16, An), (xxx).W - case 0x0610: // MOVE (d8, An, Xn), (xxx).W - // np nr np nw np - // n np nr np nw np - continue; + case 0x0510: // MOVE (d16, An), (xxx).W + case 0x0610: // MOVE (d8, An, Xn), (xxx).W + // np nr np nw np + // n np nr np nw np + continue; - case 0x0511: // MOVE (d16, An), (xxx).L - case 0x0611: // MOVE (d8, An, Xn), (xxx).L - // np nr np nw np np - // n np nr np nw np np - continue; + case 0x0511: // MOVE (d16, An), (xxx).L + case 0x0611: // MOVE (d8, An, Xn), (xxx).L + // np nr np nw np np + // n np nr np nw np np + continue; #undef action_calc #undef prefix - // - // Source = (xxx).W - // + // + // Source = (xxx).W + // - case 0x1001: // MOVEA (xxx).W, An - operation = Operation::MOVEAw; - case 0x1000: // MOVE (xxx).W, Dn - op( - int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - op(Action::PerformOperation); - break; + case 0x1001: // MOVEA (xxx).W, An + operation = Operation::MOVEAw; + case 0x1000: // MOVE (xxx).W, Dn + op( + int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; - case 0x1002: // MOVE (xxx).W, (An) - case 0x1003: // MOVE (xxx).W, (An)+ - // np nr nw np - continue; + case 0x1002: // MOVE (xxx).W, (An) + case 0x1003: // MOVE (xxx).W, (An)+ + // np nr nw np + continue; - case 0x1004: // MOVE (xxx).W, -(An) - // np nr np nw - continue; + case 0x1004: // MOVE (xxx).W, -(An) + // np nr np nw + continue; - case 0x1005: // MOVE (xxx).W, (d16, An) - // np nr np nw np - continue; + case 0x1005: // MOVE (xxx).W, (d16, An) + // np nr np nw np + continue; - case 0x1006: // MOVE (xxx).W, (d8, An, Xn) - // np nr n np nw np - continue; + case 0x1006: // MOVE (xxx).W, (d8, An, Xn) + // np nr n np nw np + continue; - case 0x1010: // MOVE (xxx).W, (xxx).W - // np nr np nw np - continue; + case 0x1010: // MOVE (xxx).W, (xxx).W + // np nr np nw np + continue; - case 0x1011: // MOVE (xxx).W, (xxx).L - // np nr np nw np np - continue; + case 0x1011: // MOVE (xxx).W, (xxx).L + // np nr np nw np np + continue; - // - // Source = (xxx).L - // + // + // Source = (xxx).L + // - case 0x1101: // MOVEA (xxx).W, Dn - operation = Operation::MOVEAw; - case 0x1100: // MOVE (xxx).W, Dn - op(int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(Action::PerformOperation, seq("nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - op(); - break; + case 0x1101: // MOVEA (xxx).W, Dn + operation = Operation::MOVEAw; + case 0x1100: // MOVE (xxx).W, Dn + op(int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation, seq("nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(); + break; - // - // Source = (d16, PC) - // + // + // Source = (d16, PC) + // - case 0x1200: // MOVE (d16, PC), Dn - op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - op(Action::PerformOperation); - break; + case 0x1200: // MOVE (d16, PC), Dn + op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; - // - // Source = (d8, An, Xn) - // + // + // Source = (d8, An, Xn) + // - case 0x1300: // MOVE (d8, An, Xn), Dn - op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); - op(Action::PerformOperation); - break; + case 0x1300: // MOVE (d8, An, Xn), Dn + op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation); + break; - // - // Source = # - // + // + // Source = # + // - case 0x1401: // MOVE #, Dn - operation = Operation::MOVEAw; - case 0x1400: // MOVE #, Dn - storage_.instructions[instruction].source = &storage_.prefetch_queue_; - op(int(Action::PerformOperation), seq("np np")); - op(); - break; + case 0x1401: // MOVE #, Dn + operation = Operation::MOVEAw; + case 0x1400: // MOVE #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(int(Action::PerformOperation), seq("np np")); + op(); + break; - // - // Default - // + // + // Default + // - default: - std::cerr << "Unimplemented MOVE " << std::hex << both_modes << " " << instruction << std::endl; - // TODO: all other types of mode. - continue; - } + default: + std::cerr << "Unimplemented MOVE " << std::hex << both_modes << " " << instruction << std::endl; + // TODO: all other types of mode. + continue; } } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index ad2e75ac1..bf057e54c 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -129,6 +129,12 @@ class ProcessorStorage { /// Adds 4. Increment4, + /// Copies whatever is this instruction's source to effective_address_[0]. + CopySourceToEffectiveAddress, + + /// Copies whatever is this instruction's destination to effective_address_[1]. + CopyDestinationToEffectiveAddress, + /// Peeking into the end of the prefetch queue, calculates the proper target of (d16,An) addressing. CalcD16An, From 47359dc8f11dfabe3a8d706d91c72b2c6407ea9c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 23 Mar 2019 21:41:47 -0400 Subject: [PATCH 035/239] Adds tests for MOVE.l (An), Dn, and thereby correct their implementation. --- OSBindings/Mac/Clock SignalTests/68000Tests.mm | 9 +++++++++ Processors/68000/Implementation/68000Storage.cpp | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/OSBindings/Mac/Clock SignalTests/68000Tests.mm b/OSBindings/Mac/Clock SignalTests/68000Tests.mm index a9946153e..6ca099aea 100644 --- a/OSBindings/Mac/Clock SignalTests/68000Tests.mm +++ b/OSBindings/Mac/Clock SignalTests/68000Tests.mm @@ -127,6 +127,9 @@ class RAM68000: public CPU::MC68000::BusHandler { 0x3040, // MOVEA D0, A0 0x3278, 0x0400, // MOVEA.w (0x0400), A1 + + 0x387c, 0x0400, // MOVE #$400, A4 + 0x2414, // MOVE.l (A4), D2 }); // Perform RESET. @@ -153,6 +156,12 @@ class RAM68000: public CPU::MC68000::BusHandler { _machine->run_for(Cycles(13)); state = _machine->get_processor_state(); XCTAssert(state.address[1] == 0x0000303c, "A1 was %08x instead of 0x0000303c", state.address[1]); + + // Perform MOVE #$400, A4, MOVE.l (A4), D2 + _machine->run_for(Cycles(20)); + state = _machine->get_processor_state(); + XCTAssert(state.address[4] == 0x0400, "A4 was %08x instead of 0x00000400", state.address[4]); + XCTAssert(state.data[2] == 0x303cfb2e, "D2 was %08x instead of 0x303cfb2e", state.data[2]); } @end diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 91586ad82..c19db8839 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -445,7 +445,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAl; case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn - op(Action::CopySourceToEffectiveAddress, seq("nR nr np")); + op(Action::CopySourceToEffectiveAddress, seq("nR nr np", {&storage_.effective_address_[0], &storage_.effective_address_[0]})); if(source_mode == 0x3) { op(int(Action::Increment4) | MicroOp::SourceMask); } From 3ccec1c9960c9f454554200ed43e434cff48c26a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 24 Mar 2019 18:20:54 -0400 Subject: [PATCH 036/239] Implements MOVE to SR, fleshing out the final bits of storage for the status word. --- .../Implementation/68000Implementation.hpp | 87 +++++++---- .../68000/Implementation/68000Storage.cpp | 147 ++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 9 +- 3 files changed, 196 insertions(+), 47 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 6c7d442d2..b3884fa18 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -6,6 +6,28 @@ // Copyright © 2019 Thomas Harte. All rights reserved. // +#define get_status() \ + ( \ + (carry_flag_ ? 0x0001 : 0x0000) | \ + (overflow_flag_ ? 0x0002 : 0x0000) | \ + (zero_result_ ? 0x0000 : 0x0004) | \ + (negative_flag_ ? 0x0008 : 0x0000) | \ + (extend_flag_ ? 0x0010 : 0x0000) | \ + (interrupt_level_ << 8) | \ + (trace_flag_ ? 0x8000 : 0x0000) | \ + (is_supervisor_ << 13) \ + ) + +#define set_status(x) \ + carry_flag_ = (x) & 0x0001; \ + overflow_flag_ = (x) & 0x0002; \ + zero_result_ = ((x) & 0x0004) ^ 0x0004; \ + negative_flag_ = (x) & 0x0008; \ + extend_flag_ = (x) & 0x0010; \ + interrupt_level_ = ((x) >> 8) & 7; \ + trace_flag_ = (x) & 0x8000; \ + is_supervisor_ = ((x) >> 13) & 1; + template void Processor::run_for(HalfCycles duration) { HalfCycles remaining_duration = duration + half_cycles_left_to_run_; while(remaining_duration > HalfCycles(0)) { @@ -55,7 +77,7 @@ template void Processor: if(result > 0x99) result += 0x60; // Set all flags essentially as if this were normal addition. - zero_flag_ |= result & 0xff; + zero_result_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; @@ -76,7 +98,7 @@ template void Processor: if(result > 0x99) result -= 0x60; // Set all flags essentially as if this were normal subtraction. - zero_flag_ |= result & 0xff; + zero_result_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; @@ -90,20 +112,20 @@ template void Processor: and set negative, zero, overflow and carry as appropriate. */ case Operation::MOVEb: - zero_flag_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; - negative_flag_ = zero_flag_ & 0x80; + zero_result_ = active_program_->destination->halves.low.halves.low = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_result_ & 0x80; overflow_flag_ = carry_flag_ = 0; break; case Operation::MOVEw: - zero_flag_ = active_program_->destination->halves.low.full = active_program_->source->halves.low.full; - negative_flag_ = zero_flag_ & 0x8000; + zero_result_ = active_program_->destination->halves.low.full = active_program_->source->halves.low.full; + negative_flag_ = zero_result_ & 0x8000; overflow_flag_ = carry_flag_ = 0; break; case Operation::MOVEl: - zero_flag_ = active_program_->destination->full = active_program_->source->full; - negative_flag_ = zero_flag_ & 0x80000000; + zero_result_ = active_program_->destination->full = active_program_->source->full; + negative_flag_ = zero_result_ & 0x80000000; overflow_flag_ = carry_flag_ = 0; break; @@ -122,6 +144,21 @@ template void Processor: active_program_->destination->full = active_program_->source->full; break; + /* + Status word moves. + */ + + case Operation::MOVEtoSR: + set_status(active_program_->source->full); + break; + + case Operation::MOVEfromSR: + active_program_->source->halves.low.full = get_status(); + break; + + /* + Development period debugging. + */ default: std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; break; @@ -129,20 +166,20 @@ template void Processor: break; case int(MicroOp::Action::SetMoveFlagsb): - zero_flag_ = active_program_->source->halves.low.halves.low; - negative_flag_ = zero_flag_ & 0x80; + zero_result_ = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_result_ & 0x80; overflow_flag_ = carry_flag_ = 0; break; case int(MicroOp::Action::SetMoveFlagsw): - zero_flag_ = active_program_->source->halves.low.full; - negative_flag_ = zero_flag_ & 0x8000; + zero_result_ = active_program_->source->halves.low.full; + negative_flag_ = zero_result_ & 0x8000; overflow_flag_ = carry_flag_ = 0; break; case int(MicroOp::Action::SetMoveFlagsl): - zero_flag_ = active_program_->source->full; - negative_flag_ = zero_flag_ & 0x80000000; + zero_result_ = active_program_->source->full; + negative_flag_ = zero_result_ & 0x80000000; overflow_flag_ = carry_flag_ = 0; break; @@ -322,15 +359,7 @@ template ProcessorState Processor void Processor: stack_pointers_[0].full = state.user_stack_pointer; stack_pointers_[1].full = state.supervisor_stack_pointer; - carry_flag_ = state.status & 0x0001; - overflow_flag_ = state.status & 0x0002; - zero_flag_ = (state.status & 0x0004) ^ 0x0004; - negative_flag_ = state.status & 0x0008; - extend_flag_ = state.status & 0x0010; + set_status(state.status); - is_supervisor_ = (state.status >> 13) & 1; address_[7] = stack_pointers_[is_supervisor_]; - - // TODO: rest of status word: interrupt level, trace flag. } + +#undef get_status +#undef set_status diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index c19db8839..b61809fb1 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -18,6 +18,17 @@ struct ProcessorStorageConstructor { using BusStep = ProcessorStorage::BusStep; + int calc_action_for_mode(int mode) const { + using Action = ProcessorBase::MicroOp::Action; + switch(mode & 0xff) { + default: return 0; + case 0x12: return int(Action::CalcD16PC); // (d16, PC) + case 0x13: return int(Action::CalcD8PCXn); // (d8, PC, Xn) + case 0x05: return int(Action::CalcD16An); // (d16, An) + case 0x06: return int(Action::CalcD8AnXn); // (d8, An, Xn) + } + } + /*! Installs BusSteps that implement the described program into the relevant instance storage, returning the offset within @c all_bus_steps_ at which @@ -163,8 +174,10 @@ struct ProcessorStorageConstructor { } steps.push_back(step); - ++address_iterator; - if(!isupper(access_pattern[1])) ++(*scratch_data); + if(!isupper(access_pattern[1])) { + ++(*scratch_data); + ++address_iterator; + } access_pattern += 2; } break; } @@ -214,7 +227,9 @@ struct ProcessorStorageConstructor { RegOpModeReg, SizeModeRegisterImmediate, DataSizeModeQuick, - RegisterModeModeRegister + RegisterModeModeRegister, // i.e. twelve lowest bits are register, mode, mode, register, for destination and source respectively. + ModeRegister, // i.e. six lowest bits are mode, then register. + MOVEtoSR }; using Operation = ProcessorStorage::Operation; @@ -254,6 +269,8 @@ struct ProcessorStorageConstructor { {0xf000, 0x1000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) {0xf000, 0x2000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) {0xf000, 0x3000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + + {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -295,7 +312,82 @@ struct ProcessorStorageConstructor { } } break; - // Decodes the format used by all the MOVEs. + case Decoder::MOVEtoSR: { + const int source_register = instruction & 7; + const int source_mode = (instruction >> 3) & 7; + + switch(source_mode) { + case 0: // Dn + storage_.instructions[instruction].source = &storage_.data_[source_register]; + break; + + case 1: continue; // An + + default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L + storage_.instructions[instruction].source = &storage_.bus_data_[0]; + storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + break; + } + + /* DEVIATION FROM YACHT.TXT: it has all of these reading an extra word from the PC; + this looks like a mistake so I've padded with nil cycles in the middle. */ + switch( (source_mode == 7) ? (0x10 | source_register) : source_mode) { + case 0x00: // MOVE Dn, SR + op(Action::PerformOperation, seq("nn np")); + op(); + break; + + case 0x02: // MOVE (An), SR + case 0x03: // MOVE (An)+, SR + op(Action::None, seq("nr nn nn np", { &storage_.address_[source_register].full })); + if(source_mode == 0x3) { + op(int(Action::Increment2) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x04: // MOVE -(An), SR + op(Action::Decrement2, seq("n nr nn nn np", { &storage_.address_[source_register].full })); + op(Action::PerformOperation); + break; + +#define pseq(x) ((source_mode == 0x06) || (source_mode == 0x13) ? "n" x : x) + + case 0x12: // MOVE (d16, PC), SR + case 0x13: // MOVE (d8, PC, Xn), SR + case 0x05: // MOVE (d16, An), SR + case 0x06: // MOVE (d8, An, Xn), SR + op(calc_action_for_mode(source_mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np"), { &storage_.effective_address_[0] })); + op(Action::PerformOperation); + break; + +#undef pseq + + case 0x10: // MOVE (xxx).W, SR + op( + int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, + seq("np nr nn nn np", { &storage_.effective_address_[0] })); + op(Action::PerformOperation); + break; + + case 0x11: // MOVE (xxx).L, SR + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] })); + op(Action::PerformOperation, seq("nn nn np")); + op(); + break; + + case 0x14: // MOVE #, SR + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(int(Action::PerformOperation), seq("np nn nn np")); + op(); + break; + + default: continue; + } + } break; + + // Decodes the format used by most MOVEs and all MOVEAs. case Decoder::RegisterModeModeRegister: { const int source_register = instruction & 7; const int source_mode = (instruction >> 3) & 7; @@ -445,18 +537,44 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAl; case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn - op(Action::CopySourceToEffectiveAddress, seq("nR nr np", {&storage_.effective_address_[0], &storage_.effective_address_[0]})); + op(Action::CopySourceToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[0] })); if(source_mode == 0x3) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x0202: // MOVE (An), (An) - case 0x0302: // MOVE (An)+, (An) - case 0x0203: // MOVE (An), (An)+ - case 0x0303: // MOVE (An)+, (An)+ - // nr nw np + case 0x00202: // MOVE.bw (An), (An) + case 0x00302: // MOVE.bw (An)+, (An) + case 0x00203: // MOVE.bw (An), (An)+ + case 0x00303: // MOVE.bw (An)+, (An)+ + op(Action::None, seq("nr", { &storage_.address_[source_register].full })); + op(Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full })); + if(source_mode == 0x3 || destination_mode == 0x3) { + op( + int(is_byte_access ? Action::Increment1 : Action::Increment2) | + (source_mode == 0x3 ? MicroOp::SourceMask : 0) | + (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); + } else { + op(); + } + continue; + + case 0x10202: // MOVE.l (An), (An) + case 0x10302: // MOVE.l (An)+, (An) + case 0x10203: // MOVE.l (An), (An)+ + case 0x10303: // MOVE.l (An)+, (An)+ + op(Action::CopyDestinationToEffectiveAddress); + op(Action::CopySourceToEffectiveAddress, seq("nR nr", { &storage_.effective_address_[0] })); + op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1] })); + if(source_mode == 0x3 || destination_mode == 0x3) { + op( + int(Action::Increment4) | + (source_mode == 0x3 ? MicroOp::SourceMask : 0) | + (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); + } else { + op(); + } continue; case 0x0204: // MOVE (An), -(An) @@ -620,11 +738,12 @@ struct ProcessorStorageConstructor { // Source = (xxx).L // - case 0x1101: // MOVEA (xxx).W, Dn + case 0x1101: // MOVEA (xxx).L, Dn operation = Operation::MOVEAw; - case 0x1100: // MOVE (xxx).W, Dn - op(int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(Action::PerformOperation, seq("nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + case 0x1100: // MOVE (xxx).L, Dn + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); op(); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index bf057e54c..83a93d58f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -26,11 +26,13 @@ class ProcessorStorage { // Various status bits. int is_supervisor_; - uint_fast32_t zero_flag_; // The zero flag is set if this value is zero. + int interrupt_level_; + uint_fast32_t zero_result_; // The zero flag is set if this value is zero. uint_fast32_t carry_flag_; // The carry flag is set if this value is non-zero. uint_fast32_t extend_flag_; // The extend flag is set if this value is non-zero. uint_fast32_t overflow_flag_; // The overflow flag is set if this value is non-zero. uint_fast32_t negative_flag_; // The negative flag is set if this value is non-zero. + uint_fast32_t trace_flag_; // The trace flag is set if this value is non-zero. // Generic sources and targets for memory operations; // by convention: [0] = source, [1] = destination. @@ -44,7 +46,9 @@ class ProcessorStorage { ADD, AND, EOR, OR, SUB, MOVEb, MOVEw, MOVEl, - MOVEAw, MOVEAl + MOVEAw, MOVEAl, + + MOVEtoSR, MOVEfromSR }; /*! @@ -192,6 +196,7 @@ class ProcessorStorage { RegisterPair32 *source = nullptr; RegisterPair32 *destination = nullptr; Operation operation; + bool requires_supervisor = false; }; // Storage for all the sequences of bus steps and micro-ops used throughout From 7163b1132cc9ea827193dfeaf4ec79f294ccf05d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 24 Mar 2019 23:05:57 -0400 Subject: [PATCH 037/239] Takes a run at CMPI. Also factors out a couple of mode things, clarifies on where things from the prefetch are assembled to, and switches to ordering implemented instructions alphabetically. --- .../Implementation/68000Implementation.hpp | 97 +++++++++-- .../68000/Implementation/68000Storage.cpp | 162 +++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 31 +++- 3 files changed, 244 insertions(+), 46 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index b3884fa18..f9a785306 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -65,6 +65,10 @@ template void Processor: case int(MicroOp::Action::PerformOperation): switch(active_program_->operation) { + /* + ABCD adds the lowest bytes form the source and destination using BCD arithmetic, + obeying the extend flag. + */ case Operation::ABCD: { // Pull out the two halves, for simplicity. const uint8_t source = active_program_->source->halves.low.halves.low; @@ -86,25 +90,41 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; - case Operation::SBCD: { - // Pull out the two halves, for simplicity. + /* + CMP.b, CMP.l and CMP.w: sets the condition flags (other than extend) based on a subtraction + of the source from the destination; the result of the subtraction is not stored. + */ + case Operation::CMPb: { const uint8_t source = active_program_->source->halves.low.halves.low; const uint8_t destination = active_program_->destination->halves.low.halves.low; + const int result = destination - source; - // Perform the BCD add by evaluating the two nibbles separately. - int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); - if(result > 0x09) result -= 0x06; - result += (destination & 0xf0) - (source & 0xf0); - if(result > 0x99) result -= 0x60; - - // Set all flags essentially as if this were normal subtraction. - zero_result_ |= result & 0xff; - extend_flag_ = carry_flag_ = result & ~0xff; + zero_result_ = result & 0xff; + carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + } break; - // Store the result. - active_program_->destination->halves.low.halves.low = uint8_t(result); + case Operation::CMPw: { + const uint16_t source = active_program_->source->halves.low.full; + const uint16_t destination = active_program_->destination->halves.low.full; + const int result = destination - source; + + zero_result_ = result & 0xffff; + carry_flag_ = result & ~0xffff; + negative_flag_ = result & 0x8000; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x8000; + } break; + + case Operation::CMPl: { + const uint32_t source = active_program_->source->full; + const uint32_t destination = active_program_->destination->full; + const uint64_t result = destination - source; + + zero_result_ = uint32_t(result); + carry_flag_ = result >> 32; + negative_flag_ = result & 0x80000000; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80000000; } break; /* @@ -134,7 +154,6 @@ template void Processor: MOVEA.w: move the least significant word and sign extend it. Neither sets any flags. */ - case Operation::MOVEAw: active_program_->destination->halves.low.full = active_program_->source->halves.low.full; active_program_->destination->halves.high.full = (active_program_->destination->halves.low.full & 0x8000) ? 0xffff : 0; @@ -156,6 +175,31 @@ template void Processor: active_program_->source->halves.low.full = get_status(); break; + /* + SBCD subtracts the lowest byte of the source from that of the destination using + BCD arithmetic, obeying the extend flag. + */ + case Operation::SBCD: { + // Pull out the two halves, for simplicity. + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + + // Perform the BCD add by evaluating the two nibbles separately. + int result = (destination & 0xf) - (source & 0xf) - (extend_flag_ ? 1 : 0); + if(result > 0x09) result -= 0x06; + result += (destination & 0xf0) - (source & 0xf0); + if(result > 0x99) result -= 0x60; + + // Set all flags essentially as if this were normal subtraction. + zero_result_ |= result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + + // Store the result. + active_program_->destination->halves.low.halves.low = uint8_t(result); + } break; + /* Development period debugging. */ @@ -275,22 +319,39 @@ template void Processor: #undef CalculateD8AnXn - case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask: + case int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask: // Assumption: this will be assembling right at the start of the instruction. effective_address_[0] = prefetch_queue_.halves.low.full; break; - case int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::DestinationMask: + case int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask: effective_address_[1] = prefetch_queue_.halves.low.full; break; - case int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask: + case int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask: effective_address_[0] = prefetch_queue_.full; break; - case int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::DestinationMask: + case int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask: effective_address_[1] = prefetch_queue_.full; break; + + case int(MicroOp::Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask: + // Assumption: this will be assembling right at the start of the instruction. + bus_data_[0] = prefetch_queue_.halves.low.full; + break; + + case int(MicroOp::Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask: + bus_data_[1] = prefetch_queue_.halves.low.full; + break; + + case int(MicroOp::Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask: + bus_data_[0] = prefetch_queue_.full; + break; + + case int(MicroOp::Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask: + bus_data_[1] = prefetch_queue_.full; + break; } // If we've got to a micro-op that includes bus steps, break out of this loop. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index b61809fb1..8bf0c6dee 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -18,6 +18,8 @@ struct ProcessorStorageConstructor { using BusStep = ProcessorStorage::BusStep; + /*! + */ int calc_action_for_mode(int mode) const { using Action = ProcessorBase::MicroOp::Action; switch(mode & 0xff) { @@ -29,6 +31,10 @@ struct ProcessorStorageConstructor { } } + int combined_mode(int mode, int reg) { + return (mode == 7) ? (0x10 | reg) : mode; + } + /*! Installs BusSteps that implement the described program into the relevant instance storage, returning the offset within @c all_bus_steps_ at which @@ -227,9 +233,11 @@ struct ProcessorStorageConstructor { RegOpModeReg, SizeModeRegisterImmediate, DataSizeModeQuick, - RegisterModeModeRegister, // i.e. twelve lowest bits are register, mode, mode, register, for destination and source respectively. - ModeRegister, // i.e. six lowest bits are mode, then register. - MOVEtoSR + RegisterModeModeRegister, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. + ModeRegister, // six lowest bits are mode, then register. + + MOVEtoSR, // six lowest bits are [mode, register], decoding to MOVE SR + CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI }; using Operation = ProcessorStorage::Operation; @@ -271,6 +279,10 @@ struct ProcessorStorageConstructor { {0xf000, 0x3000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) + + {0xffc0, 0x0c00, Operation::CMPb, Decoder::CMPI}, + {0xffc0, 0x0c40, Operation::CMPw, Decoder::CMPI}, + {0xffc0, 0x0c80, Operation::CMPl, Decoder::CMPI}, }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -290,6 +302,10 @@ struct ProcessorStorageConstructor { auto operation = mapping.operation; const auto micro_op_start = storage_.all_micro_ops_.size(); + // The following fields are used commonly enough to be worht pulling out here. + const int source_register = instruction & 7; + const int source_mode = (instruction >> 3) & 7; + switch(mapping.decoder) { // Decodes the format used by ABCD and SBCD. case Decoder::Decimal: { @@ -312,26 +328,125 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::MOVEtoSR: { - const int source_register = instruction & 7; - const int source_mode = (instruction >> 3) & 7; + case Decoder::CMPI: { + if(source_mode == 1) continue; - switch(source_mode) { - case 0: // Dn - storage_.instructions[instruction].source = &storage_.data_[source_register]; + const auto destination_mode = source_mode; + const auto destination_register = source_register; + + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); + + const bool is_byte_access = mapping.operation == Operation::CMPb; + const bool is_long_word_access = mapping.operation == Operation::CMPl; + const int mode = (is_long_word_access ? 0x100 : 0) | combined_mode(destination_mode, destination_register); + switch(mode) { + case 0x000: // CMPI.bw #, Dn + op(Action::PerformOperation, seq("np np")); + op(); break; - case 1: continue; // An - - default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L - storage_.instructions[instruction].source = &storage_.bus_data_[0]; - storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + case 0x100: // CMPI.l #, Dn + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("np np n")); + op(); break; + + case 0x002: // CMPI.bw #, (An) + case 0x003: // CMPI.bw #, (An)+ + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nr np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + op(Action::PerformOperation); + break; + + case 0x102: // CMPI.l #, (An) + case 0x103: // CMPI.l #, (An)+ + op(Action::CopyDestinationToEffectiveAddress, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nR nr np", { &storage_.effective_address_[1] })); + if(mode == 0x103) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + op(Action::PerformOperation); + break; + + case 0x004: // CMPI.bw #, -(An) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nr np", { &storage_.address_[destination_register].full })); + op(Action::PerformOperation); + break; + + case 0x104: // CMPI.l #, -(An) + op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); + op(Action::CopyDestinationToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[1] })); + op(Action::PerformOperation); + break; + +#define pseq(x) ((mode == 0x06) || (mode == 0x13) ? "n" x : x) + + case 0x012: // CMPI.bw #, (d16, PC) + case 0x013: // CMPI.bw #, (d8, PC, Xn) + case 0x005: // CMPI.bw #, (d16, An) + case 0x006: // CMPI.bw #, (d8, An, Xn) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, + seq(pseq("nr np"), { &storage_.effective_address_[1] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x112: // CMPI.l #, (d16, PC) + case 0x113: // CMPI.l #, (d8, PC, Xn) + case 0x105: // CMPI.l #, (d16, An) + case 0x106: // CMPI.l #, (d8, An, Xn) + op(Action::CopyDestinationToEffectiveAddress, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, + seq(pseq("np nR nr np"), { &storage_.effective_address_[1] })); + op(Action::PerformOperation); + break; + +#undef pseq + + case 0x010: // CMPI.bw #, (xxx).w + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x110: // CMPI.l #, (xxx).w + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1] })); + op(Action::PerformOperation); + break; + + case 0x011: // CMPI.bw #, (xxx).l + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1] }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x111: // CMPI.l #, (xxx).l + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nR nr np", { &storage_.effective_address_[1] })); + op(Action::PerformOperation); + break; + + default: continue; } + } break; + + case Decoder::MOVEtoSR: { + if(source_mode == 1) continue; + storage_.instructions[instruction].set_source(storage_, source_mode, source_register); /* DEVIATION FROM YACHT.TXT: it has all of these reading an extra word from the PC; this looks like a mistake so I've padded with nil cycles in the middle. */ - switch( (source_mode == 7) ? (0x10 | source_register) : source_mode) { + const int mode = combined_mode(source_mode, source_register); + switch(mode) { case 0x00: // MOVE Dn, SR op(Action::PerformOperation, seq("nn np")); op(); @@ -351,7 +466,7 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; -#define pseq(x) ((source_mode == 0x06) || (source_mode == 0x13) ? "n" x : x) +#define pseq(x) ((mode == 0x06) || (mode == 0x13) ? "n" x : x) case 0x12: // MOVE (d16, PC), SR case 0x13: // MOVE (d8, PC, Xn), SR @@ -365,14 +480,14 @@ struct ProcessorStorageConstructor { case 0x10: // MOVE (xxx).W, SR op( - int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, + int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr nn nn np", { &storage_.effective_address_[0] })); op(Action::PerformOperation); break; case 0x11: // MOVE (xxx).L, SR op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] })); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] })); op(Action::PerformOperation, seq("nn nn np")); op(); break; @@ -389,9 +504,6 @@ struct ProcessorStorageConstructor { // Decodes the format used by most MOVEs and all MOVEAs. case Decoder::RegisterModeModeRegister: { - const int source_register = instruction & 7; - const int source_mode = (instruction >> 3) & 7; - const int destination_mode = (instruction >> 6) & 7; const int destination_register = (instruction >> 9) & 7; @@ -454,8 +566,8 @@ struct ProcessorStorageConstructor { // // ... for no reason other than to make the switch below easy to read. const int both_modes = - ((source_mode == 7) ? (0x1000 | (source_register << 8)) : (source_mode << 8)) | - ((destination_mode == 7) ? (0x10 | destination_register) : destination_mode) | + (combined_mode(source_mode, source_register) << 8) | + combined_mode(destination_mode, destination_register) | (is_long_word_access ? 0x10000 : 0); switch(both_modes) { @@ -704,7 +816,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAw; case 0x1000: // MOVE (xxx).W, Dn op( - int(MicroOp::Action::AssembleWordFromPrefetch) | MicroOp::SourceMask, + int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); op(Action::PerformOperation); break; @@ -742,7 +854,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAw; case 0x1100: // MOVE (xxx).L, Dn op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] }, !is_byte_access)); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 83a93d58f..1e370b965 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -48,7 +48,9 @@ class ProcessorStorage { MOVEb, MOVEw, MOVEl, MOVEAw, MOVEAl, - MOVEtoSR, MOVEfromSR + MOVEtoSR, MOVEfromSR, + + CMPb, CMPw, CMPl }; /*! @@ -163,10 +165,17 @@ class ProcessorStorage { /// From the next word in the prefetch queue assembles a 0-padded 32-bit long word in either or /// both of effective_address_[0] and effective_address_[1]. - AssembleWordFromPrefetch, + AssembleWordAddressFromPrefetch, + + /// From the next word in the prefetch queue assembles a 0-padded 32-bit long word in either or + /// both of bus_data_[0] and bus_data_[1]. + AssembleWordDataFromPrefetch, /// Copies the next two prefetch words into one of the effective_address_. - AssembleLongWordFromPrefetch + AssembleLongWordAddressFromPrefetch, + + /// Copies the next two prefetch words into one of the bus_data_. + AssembleLongWordDataFromPrefetch }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; @@ -197,6 +206,22 @@ class ProcessorStorage { RegisterPair32 *destination = nullptr; Operation operation; bool requires_supervisor = false; + + void set_source(ProcessorStorage &storage, int mode, int reg) { + switch(mode) { + case 0: source = &storage.data_[reg]; break; + case 1: source = &storage.address_[reg]; break; + default: source = &storage.bus_data_[0]; break; + } + } + + void set_destination(ProcessorStorage &storage, int mode, int reg) { + switch(mode) { + case 0: destination = &storage.data_[reg]; break; + case 1: destination = &storage.address_[reg]; break; + default: destination = &storage.bus_data_[1]; break; + } + } }; // Storage for all the sequences of bus steps and micro-ops used throughout From be4b38c76a2a0aa30bcadab18a92a4a8c6dcec5a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 25 Mar 2019 22:54:49 -0400 Subject: [PATCH 038/239] Adds BRA and Bcc. --- .../Implementation/68000Implementation.hpp | 67 +++++++++++++++++++ .../68000/Implementation/68000Storage.cpp | 37 ++++++++-- .../68000/Implementation/68000Storage.hpp | 13 +++- 3 files changed, 107 insertions(+), 10 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index f9a785306..573999fbc 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -90,6 +90,73 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + // BRA: alters the program counter, exclusively via the prefetch queue. + case Operation::BRA: { + const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); + + // A non-zero offset byte branches by just that amount; otherwise use the word + // after as an offset. In both cases, treat as signed. + if(byte_offset) { + program_counter_.full = (program_counter_.full + byte_offset) - 2; + } else { + program_counter_.full += int16_t(prefetch_queue_.halves.low.full); + } + } break; + + // Bcc: evaluates the relevant condition and displacement size and then: + // if condition is false, schedules bus operations to get past this instruction; + // otherwise applies the offset and schedules bus operations to refill the prefetch queue. + case Operation::Bcc: { + // Grab the 8-bit offset. + const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); + + // Test the conditional. + bool should_branch; + switch(prefetch_queue_.halves.high.halves.high & 0xf) { + default: + case 0x00: should_branch = true; break; // true + case 0x01: should_branch = false; break; // false + case 0x02: should_branch = zero_result_ && !carry_flag_; break; // high + case 0x03: should_branch = !zero_result_ || carry_flag_; break; // low or same + case 0x04: should_branch = !carry_flag_; break; // carry clear + case 0x05: should_branch = carry_flag_; break; // carry set + case 0x06: should_branch = zero_result_; break; // not equal + case 0x07: should_branch = !zero_result_; break; // equal + case 0x08: should_branch = !overflow_flag_; break; // overflow clear + case 0x09: should_branch = overflow_flag_; break; // overflow set + case 0x0a: should_branch = !negative_flag_; break; // positive + case 0x0b: should_branch = negative_flag_; break; // negative + case 0x0c: + should_branch = (negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_); + break; // greater than or equal + case 0x0d: + should_branch = (negative_flag_ || !overflow_flag_) && (!negative_flag_ || overflow_flag_); + break; // less than + case 0x0e: + should_branch = zero_result_ && ((negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_)); + break; // greater than + case 0x0f: + should_branch = (!zero_result_ || negative_flag_) && (!overflow_flag_ || !negative_flag_) && overflow_flag_; + break; // less than or equal + } + + // Schedule something appropriate, by rewriting the program for this instruction temporarily. + if(should_branch) { + if(byte_offset) { + program_counter_.full = (program_counter_.full + byte_offset) - 2; // - 2 because this should be calculated from the high word of the prefetch. + } else { + program_counter_.full += int16_t(prefetch_queue_.halves.low.full); + } + active_micro_op_->bus_program = branch_taken_bus_steps_; + } else { + if(byte_offset) { + active_micro_op_->bus_program = branch_byte_not_taken_bus_steps_; + } else { + active_micro_op_->bus_program = branch_word_not_taken_bus_steps_; + } + } + } break; + /* CMP.b, CMP.l and CMP.w: sets the condition flags (other than extend) based on a subtraction of the source from the destination; the result of the subtraction is not stored. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8bf0c6dee..8942e3550 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -238,6 +238,8 @@ struct ProcessorStorageConstructor { MOVEtoSR, // six lowest bits are [mode, register], decoding to MOVE SR CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI + BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled + Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled }; using Operation = ProcessorStorage::Operation; @@ -280,9 +282,12 @@ struct ProcessorStorageConstructor { {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) - {0xffc0, 0x0c00, Operation::CMPb, Decoder::CMPI}, - {0xffc0, 0x0c40, Operation::CMPw, Decoder::CMPI}, - {0xffc0, 0x0c80, Operation::CMPl, Decoder::CMPI}, + {0xffc0, 0x0c00, Operation::CMPb, Decoder::CMPI}, // 4-79 (p183) + {0xffc0, 0x0c40, Operation::CMPw, Decoder::CMPI}, // 4-79 (p183) + {0xffc0, 0x0c80, Operation::CMPl, Decoder::CMPI}, // 4-79 (p183) + + {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) + {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -307,6 +312,18 @@ struct ProcessorStorageConstructor { const int source_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. + case Decoder::Bcc: { + op(Action::PerformOperation); + op(); + } break; + + // A little artificial, there's nothing really to decode for BRA. + case Decoder::BRA: { + op(Action::PerformOperation, seq("n np np")); + op(); + } break; + // Decodes the format used by ABCD and SBCD. case Decoder::Decimal: { const int destination = (instruction >> 9) & 7; @@ -944,17 +961,23 @@ struct ProcessorStorageConstructor { CPU::MC68000::ProcessorStorage::ProcessorStorage() { ProcessorStorageConstructor constructor(*this); - // Create the exception programs. + // Create the special programs. const size_t reset_offset = constructor.assemble_program("n n n n n nn nF nf nV nv np np"); + const size_t branch_taken_offset = constructor.assemble_program("n np np"); + const size_t branch_byte_not_taken_offset = constructor.assemble_program("nn np"); + const size_t branch_word_not_taken_offset = constructor.assemble_program("nn np np"); // Install operations. constructor.install_instructions(); - // Realise the exception programs as direct pointers. - reset_program_ = &all_bus_steps_[reset_offset]; + // Realise the special programs as direct pointers. + reset_bus_steps_ = &all_bus_steps_[reset_offset]; + branch_taken_bus_steps_ = &all_bus_steps_[branch_taken_offset]; + branch_byte_not_taken_bus_steps_ = &all_bus_steps_[branch_byte_not_taken_offset]; + branch_word_not_taken_bus_steps_ = &all_bus_steps_[branch_word_not_taken_offset]; // Set initial state. Largely TODO. - active_step_ = reset_program_; + active_step_ = reset_bus_steps_; effective_address_[0] = 0; is_supervisor_ = 1; } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 1e370b965..58a81e6dd 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -50,7 +50,9 @@ class ProcessorStorage { MOVEtoSR, MOVEfromSR, - CMPb, CMPw, CMPl + CMPb, CMPw, CMPl, + + BRA, Bcc }; /*! @@ -232,8 +234,13 @@ class ProcessorStorage { // A lookup table from instructions to implementations. Program instructions[65536]; - // Special programs, for exception handlers. - BusStep *reset_program_; + // Special steps for exception handlers. + BusStep *reset_bus_steps_; + + // Special micro-op sequences for conditionals. + BusStep *branch_taken_bus_steps_; + BusStep *branch_byte_not_taken_bus_steps_; + BusStep *branch_word_not_taken_bus_steps_; // Current bus step pointer, and outer program pointer. Program *active_program_ = nullptr; From 42634b500c9dafdcbed84410db8634c6f5521f51 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 26 Mar 2019 22:07:28 -0400 Subject: [PATCH 039/239] Implements LEA. --- .../Implementation/68000Implementation.hpp | 13 ++- .../68000/Implementation/68000Storage.cpp | 96 ++++++++++++++----- .../68000/Implementation/68000Storage.hpp | 4 +- 3 files changed, 81 insertions(+), 32 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 573999fbc..23e637e1c 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -359,16 +359,15 @@ template void Processor: effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination->full; break; - // TODO: permit as below for DestinationMask and SourceMask|DestinationMask; would prefer to test first. #define CalculateD8AnXn(data, source, target) {\ const auto register_index = (data.full >> 12) & 7; \ const RegisterPair32 &displacement = (data.full & 0x8000) ? address_[register_index] : data_[register_index]; \ - target = int8_t(data.halves.low) + source->full; \ + target.full = int8_t(data.halves.low) + source->full; \ \ if(data.full & 0x800) { \ - effective_address_[0] += displacement.halves.low.full; \ + target.full += displacement.halves.low.full; \ } else { \ - effective_address_[0] += displacement.full; \ + target.full += displacement.full; \ } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { @@ -462,9 +461,9 @@ template void Processor: case BusStep::Action::None: break; - case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0] += 2; break; - case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1] += 2; break; - case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; + case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0].full += 2; break; + case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1].full += 2; break; + case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; case BusStep::Action::AdvancePrefetch: prefetch_queue_.halves.high = prefetch_queue_.halves.low; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8942e3550..8a87fdd98 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -113,7 +113,7 @@ struct ProcessorStorageConstructor { case 'f': // Fetch SSP LSW. step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_[0]; + step.microcycle.address = &storage_.effective_address_[0].full; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; steps.push_back(step); @@ -129,7 +129,7 @@ struct ProcessorStorageConstructor { case 'v': // Fetch exception vector high. step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_[0]; + step.microcycle.address = &storage_.effective_address_[0].full; step.microcycle.value = isupper(access_pattern[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; steps.push_back(step); @@ -240,6 +240,7 @@ struct ProcessorStorageConstructor { CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled + LEA, // decodes register, mode, register }; using Operation = ProcessorStorage::Operation; @@ -288,6 +289,7 @@ struct ProcessorStorageConstructor { {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) + {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -381,7 +383,7 @@ struct ProcessorStorageConstructor { case 0x102: // CMPI.l #, (An) case 0x103: // CMPI.l #, (An)+ op(Action::CopyDestinationToEffectiveAddress, seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nR nr np", { &storage_.effective_address_[1] })); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nR nr np", { &storage_.effective_address_[1].full })); if(mode == 0x103) { op(int(Action::Increment4) | MicroOp::DestinationMask); } @@ -397,7 +399,7 @@ struct ProcessorStorageConstructor { case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(Action::CopyDestinationToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[1] })); + op(Action::CopyDestinationToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -408,8 +410,8 @@ struct ProcessorStorageConstructor { case 0x005: // CMPI.bw #, (d16, An) case 0x006: // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op( calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, - seq(pseq("nr np"), { &storage_.effective_address_[1] }, !is_byte_access)); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("nr np"), { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -419,8 +421,8 @@ struct ProcessorStorageConstructor { case 0x106: // CMPI.l #, (d8, An, Xn) op(Action::CopyDestinationToEffectiveAddress, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op( calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, - seq(pseq("np nR nr np"), { &storage_.effective_address_[1] })); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nR nr np"), { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -428,27 +430,27 @@ struct ProcessorStorageConstructor { case 0x010: // CMPI.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1] }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; case 0x110: // CMPI.l #, (xxx).w op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1] })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; case 0x011: // CMPI.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1] }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; case 0x111: // CMPI.l #, (xxx).l op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nR nr np", { &storage_.effective_address_[1] })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nR nr np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -456,6 +458,54 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::LEA: { + const int destination_register = (instruction >> 9) & 7; + storage_.instructions[instruction].destination = &storage_.address_[destination_register]; + + const int mode = combined_mode(source_mode, source_register); + switch(mode) { + default: continue; + case 0x04: + storage_.instructions[instruction].source = &storage_.address_[source_register]; + break; + case 0x05: case 0x06: case 0x10: + case 0x11: case 0x12: case 0x13: + storage_.instructions[instruction].source = &storage_.effective_address_[0]; + break; + } + + switch(mode) { + default: break; + case 0x04: // LEA (An), An (i.e. MOVEA) + op(Action::PerformOperation, seq("np")); + op(); + break; + + case 0x05: // LEA (d16, An), An + case 0x12: // LEA (d16, PC), SR + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation); + break; + + case 0x06: // LEA (d8, An, Xn), SR + case 0x13: // LEA (d8, PC, Xn), SR + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np n np")); + op(Action::PerformOperation); + break; + + case 0x10: // LEA (xxx).W, An + op(int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation); + break; + + case 0x11: // LEA (xxx).L, An + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation); + break; + } + } break; + case Decoder::MOVEtoSR: { if(source_mode == 1) continue; storage_.instructions[instruction].set_source(storage_, source_mode, source_register); @@ -489,7 +539,7 @@ struct ProcessorStorageConstructor { case 0x13: // MOVE (d8, PC, Xn), SR case 0x05: // MOVE (d16, An), SR case 0x06: // MOVE (d8, An, Xn), SR - op(calc_action_for_mode(source_mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np"), { &storage_.effective_address_[0] })); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np"), { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -498,13 +548,13 @@ struct ProcessorStorageConstructor { case 0x10: // MOVE (xxx).W, SR op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr nn nn np", { &storage_.effective_address_[0] })); + seq("np nr nn nn np", { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; case 0x11: // MOVE (xxx).L, SR op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] })); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nn nn np")); op(); break; @@ -666,7 +716,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAl; case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn - op(Action::CopySourceToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[0] })); + op(Action::CopySourceToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[0].full })); if(source_mode == 0x3) { op(int(Action::Increment4) | MicroOp::SourceMask); } @@ -694,8 +744,8 @@ struct ProcessorStorageConstructor { case 0x10203: // MOVE.l (An), (An)+ case 0x10303: // MOVE.l (An)+, (An)+ op(Action::CopyDestinationToEffectiveAddress); - op(Action::CopySourceToEffectiveAddress, seq("nR nr", { &storage_.effective_address_[0] })); - op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1] })); + op(Action::CopySourceToEffectiveAddress, seq("nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); if(source_mode == 0x3 || destination_mode == 0x3) { op( int(Action::Increment4) | @@ -780,7 +830,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAw; case 0x0500: // MOVE (d16, An), Dn case 0x0600: // MOVE (d8, An, Xn), Dn - op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0] }, !is_byte_access)); + op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -834,7 +884,7 @@ struct ProcessorStorageConstructor { case 0x1000: // MOVE (xxx).W, Dn op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -871,7 +921,7 @@ struct ProcessorStorageConstructor { operation = Operation::MOVEAw; case 0x1100: // MOVE (xxx).L, Dn op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0] }, !is_byte_access)); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(); break; @@ -881,7 +931,7 @@ struct ProcessorStorageConstructor { // case 0x1200: // MOVE (d16, PC), Dn - op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -890,7 +940,7 @@ struct ProcessorStorageConstructor { // case 0x1300: // MOVE (d8, An, Xn), Dn - op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0] }, !is_byte_access)); + op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); op(Action::PerformOperation); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 58a81e6dd..483c8c4e8 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -36,7 +36,7 @@ class ProcessorStorage { // Generic sources and targets for memory operations; // by convention: [0] = source, [1] = destination. - uint32_t effective_address_[2]; + RegisterPair32 effective_address_[2]; RegisterPair32 bus_data_[2]; HalfCycles half_cycles_left_to_run_; @@ -52,7 +52,7 @@ class ProcessorStorage { CMPb, CMPw, CMPl, - BRA, Bcc + BRA, Bcc, }; /*! From 7f5c637aeb7b1487ba5d5d099b6f51feb2ca9ceb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 26 Mar 2019 22:15:38 -0400 Subject: [PATCH 040/239] Updates to Swift 5. --- .../Clock Signal.xcodeproj/project.pbxproj | 24 +++++++------------ .../Documents/MachineDocument.swift | 8 +++---- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index f9df101fe..e902e7206 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -3313,7 +3313,7 @@ }; 4BB73E9D1B587A5100552FC2 = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0900; + LastSwiftMigration = 1020; SystemCapabilities = { com.apple.Sandbox = { enabled = 1; @@ -3322,12 +3322,12 @@ }; 4BB73EB11B587A5100552FC2 = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0900; + LastSwiftMigration = 1020; TestTargetID = 4BB73E9D1B587A5100552FC2; }; 4BB73EBC1B587A5100552FC2 = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0900; + LastSwiftMigration = 1020; TestTargetID = 4BB73E9D1B587A5100552FC2; }; }; @@ -4343,8 +4343,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Clock Signal/ClockSignal-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -4385,8 +4384,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "TH.Clock-Signal"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Clock Signal/ClockSignal-Bridging-Header.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; }; name = Release; }; @@ -4402,8 +4400,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Clock SignalTests/Bridges/Clock SignalTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Clock Signal.app/Contents/MacOS/Clock Signal"; }; name = Debug; @@ -4419,8 +4416,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "TH.Clock-SignalTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Clock SignalTests/Bridges/Clock SignalTests-Bridging-Header.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Clock Signal.app/Contents/MacOS/Clock Signal"; }; name = Release; @@ -4433,8 +4429,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "TH.Clock-SignalUITests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TEST_TARGET_NAME = "Clock Signal"; USES_XCTRUNNER = YES; }; @@ -4448,8 +4443,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "TH.Clock-SignalUITests"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TEST_TARGET_NAME = "Clock Signal"; USES_XCTRUNNER = YES; }; diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 733701706..f2f724865 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -49,7 +49,7 @@ class MachineDocument: fileprivate var bestEffortUpdater: CSBestEffortUpdater? override var windowNibName: NSNib.Name? { - return NSNib.Name(rawValue: "MachineDocument") + return "MachineDocument" } override func windowControllerDidLoadNib(_ aController: NSWindowController) { @@ -64,7 +64,7 @@ class MachineDocument: func windowDidUpdate(_ notification: Notification) { if self.shouldShowNewMachinePanel { self.shouldShowNewMachinePanel = false - Bundle.main.loadNibNamed(NSNib.Name(rawValue: "MachinePicker"), owner: self, topLevelObjects: nil) + Bundle.main.loadNibNamed("MachinePicker", owner: self, topLevelObjects: nil) self.machinePicker?.establishStoredOptions() self.windowControllers[0].window?.beginSheet(self.machinePickerPanel!, completionHandler: nil) } @@ -80,7 +80,7 @@ class MachineDocument: // attach an options panel if one is available if let optionsPanelNibName = self.optionsPanelNibName { - Bundle.main.loadNibNamed(NSNib.Name(rawValue: optionsPanelNibName), owner: self, topLevelObjects: nil) + Bundle.main.loadNibNamed(optionsPanelNibName, owner: self, topLevelObjects: nil) self.optionsPanel.machine = machine self.optionsPanel?.establishStoredOptions() showOptions(self) @@ -372,7 +372,7 @@ class MachineDocument: func setupActivityDisplay() { var leds = machine.leds if leds.count > 0 { - Bundle.main.loadNibNamed(NSNib.Name(rawValue: "Activity"), owner: self, topLevelObjects: nil) + Bundle.main.loadNibNamed("Activity", owner: self, topLevelObjects: nil) showActivity(nil) // Inspect the activity panel for indicators. From b0b2798f398c5f7687dcd7b32356a9cfcca7769b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 27 Mar 2019 21:25:51 -0400 Subject: [PATCH 041/239] Updates to track Swift. --- OSBindings/Mac/Clock SignalTests/Z80MachineCycleTests.swift | 3 ++- OSBindings/Mac/Clock SignalTests/Z80MemptrTests.swift | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/Z80MachineCycleTests.swift b/OSBindings/Mac/Clock SignalTests/Z80MachineCycleTests.swift index 4295e6cf3..e719e977c 100644 --- a/OSBindings/Mac/Clock SignalTests/Z80MachineCycleTests.swift +++ b/OSBindings/Mac/Clock SignalTests/Z80MachineCycleTests.swift @@ -24,6 +24,7 @@ class Z80MachineCycleTests: XCTestCase { case .portRead: opName = "i" case .portWrite: opName = "o" case .internalOperation: opName = "iop" + default: opName = "?" } return "\(opName) \(length)" } @@ -35,7 +36,7 @@ class Z80MachineCycleTests: XCTestCase { // Create a machine and install the supplied program at address 0, setting the PC to run from there let machine = CSTestMachineZ80() machine.setValue(0x0000, for: .programCounter) - machine.setData(Data(bytes: program), atAddress: 0x0000) + machine.setData(Data(_: program), atAddress: 0x0000) // Figure out the total number of cycles implied by the bus cycles var totalCycles: Int32 = 0 diff --git a/OSBindings/Mac/Clock SignalTests/Z80MemptrTests.swift b/OSBindings/Mac/Clock SignalTests/Z80MemptrTests.swift index 6fc3c5ce5..7ef2513f4 100644 --- a/OSBindings/Mac/Clock SignalTests/Z80MemptrTests.swift +++ b/OSBindings/Mac/Clock SignalTests/Z80MemptrTests.swift @@ -14,7 +14,7 @@ class Z80MemptrTests: XCTestCase { private func test(program : [UInt8], length : Int32, initialValue : UInt16) -> UInt16 { // Create a machine and install the supplied program at address 0, setting the PC to run from there machine.setValue(0x0000, for: .programCounter) - machine.setData(Data(bytes: program), atAddress: 0x0000) + machine.setData(Data(_: program), atAddress: 0x0000) // Set the initial value of memptr, run for the requested number of cycles, // return the new value @@ -316,7 +316,7 @@ class Z80MemptrTests: XCTestCase { let program: [UInt8] = [ 0xed, 0xa1 ] - machine.setData(Data(bytes: program), atAddress: 0x0000) + machine.setData(Data(_: program), atAddress: 0x0000) machine.setValue(0, for: .memPtr) for c in 1 ..< 65536 { @@ -332,7 +332,7 @@ class Z80MemptrTests: XCTestCase { let program: [UInt8] = [ 0xed, 0xa9 ] - machine.setData(Data(bytes: program), atAddress: 0x0000) + machine.setData(Data(_: program), atAddress: 0x0000) machine.setValue(0, for: .memPtr) for c in 1 ..< 65536 { From 25254255fe6647480b5a8fc9c82ec842f0348dce Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 27 Mar 2019 21:26:04 -0400 Subject: [PATCH 042/239] Implements a few additional MOVEs. --- .../68000/Implementation/68000Storage.cpp | 73 ++++++++++++++----- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8a87fdd98..5765e1c05 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -267,15 +267,15 @@ struct ProcessorStorageConstructor { {0xf1f0, 0x8100, Operation::SBCD, Decoder::Decimal}, // 4-171 (p275) {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) - {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) - {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) - {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) - {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) - {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) +// {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) +// {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) +// {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) +// {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) +// {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) - {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) +// {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) - {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) +// {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) {0xf000, 0x1000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) {0xf000, 0x2000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) @@ -677,23 +677,32 @@ struct ProcessorStorageConstructor { case 0x0005: // MOVE Dn, (d16, An) case 0x0105: // MOVE An, (d16, An) - // np nw np - continue; + op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + op(); + break; case 0x0006: // MOVE Dn, (d8, An, Xn) case 0x0106: // MOVE An, (d8, An, Xn) - // n np nw np - continue; + op(int(Action::CalcD8AnXn) | MicroOp::DestinationMask, seq("n np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + op(); + break; case 0x0010: // MOVE Dn, (xxx).W case 0x0110: // MOVE An, (xxx).W - // np nw np - continue; + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); + op(); + break; case 0x0011: // MOVE Dn, (xxx).L case 0x0111: // MOVE An, (xxx).L - // np np nw np - continue; + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); + op(); + break; // // Source = (An) or (An)+ @@ -737,7 +746,7 @@ struct ProcessorStorageConstructor { } else { op(); } - continue; + break; case 0x10202: // MOVE.l (An), (An) case 0x10302: // MOVE.l (An)+, (An) @@ -754,7 +763,7 @@ struct ProcessorStorageConstructor { } else { op(); } - continue; + break; case 0x0204: // MOVE (An), -(An) case 0x0304: // MOVE (An)+, -(An) @@ -948,14 +957,40 @@ struct ProcessorStorageConstructor { // Source = # // - case 0x1401: // MOVE #, Dn + case 0x01401: // MOVE #, Dn operation = Operation::MOVEAw; - case 0x1400: // MOVE #, Dn + case 0x01400: // MOVE #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(int(Action::PerformOperation), seq("np np")); op(); break; + case 0x11411: // MOVE.l #, (xxx).l + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full })); + op(Action::SetMoveFlagsl); + break; + + case 0x11410: // MOVE.l #, (xxx).w + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(Action::SetMoveFlagsl); + break; + + case 0x01411: // MOVE.bw #, (xxx).l + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full })); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; + + case 0x01410: // MOVE.bw #, (xxx).w + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; + // // Default // From a93a1ae40f49969749b33bd5bb85c5d4f661a437 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 29 Mar 2019 23:13:41 -0400 Subject: [PATCH 043/239] Completes MOVE.blw , Dn/An/(An)/(An)+, implements MOVEq. --- .../Implementation/68000Implementation.hpp | 12 + .../68000/Implementation/68000Storage.cpp | 512 +++++++++++------- .../68000/Implementation/68000Storage.hpp | 9 +- 3 files changed, 334 insertions(+), 199 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 23e637e1c..e5b72377a 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -50,6 +50,8 @@ template void Processor: // TODO: once all instructions are implemnted, this should be an instruction error. std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; return; + } else { + std::cout << "Performing " << std::hex << next_instruction << std::endl; } active_program_ = &instructions[next_instruction]; @@ -216,6 +218,16 @@ template void Processor: overflow_flag_ = carry_flag_ = 0; break; + /* + MOVE.q: a single byte is moved from the current instruction, and sign extended. + */ + case Operation::MOVEq: + zero_result_ = active_program_->destination->full = prefetch_queue_.halves.high.halves.low; + negative_flag_ = zero_result_ & 0x80; + overflow_flag_ = carry_flag_ = 0; + active_program_->destination->full |= negative_flag_ ? 0xffffff00 : 0; + break; + /* MOVEA.l: move the entire long word; MOVEA.w: move the least significant word and sign extend it. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5765e1c05..e5d4b7f78 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -35,6 +35,8 @@ struct ProcessorStorageConstructor { return (mode == 7) ? (0x10 | reg) : mode; } +#define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n" x : x) + /*! Installs BusSteps that implement the described program into the relevant instance storage, returning the offset within @c all_bus_steps_ at which @@ -233,14 +235,15 @@ struct ProcessorStorageConstructor { RegOpModeReg, SizeModeRegisterImmediate, DataSizeModeQuick, - RegisterModeModeRegister, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. ModeRegister, // six lowest bits are mode, then register. + MOVE, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. MOVEtoSR, // six lowest bits are [mode, register], decoding to MOVE SR CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled LEA, // decodes register, mode, register + MOVEq, // decodes just a destination register }; using Operation = ProcessorStorage::Operation; @@ -277,9 +280,9 @@ struct ProcessorStorageConstructor { // {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) - {0xf000, 0x1000, Operation::MOVEb, Decoder::RegisterModeModeRegister}, // 4-116 (p220) - {0xf000, 0x2000, Operation::MOVEl, Decoder::RegisterModeModeRegister}, // 4-116 (p220) - {0xf000, 0x3000, Operation::MOVEw, Decoder::RegisterModeModeRegister}, // 4-116 (p220) + {0xf000, 0x1000, Operation::MOVEb, Decoder::MOVE}, // 4-116 (p220) + {0xf000, 0x2000, Operation::MOVEl, Decoder::MOVE}, // 4-116 (p220) + {0xf000, 0x3000, Operation::MOVEw, Decoder::MOVE}, // 4-116 (p220) {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) @@ -290,6 +293,7 @@ struct ProcessorStorageConstructor { {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) + {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -317,13 +321,11 @@ struct ProcessorStorageConstructor { // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. case Decoder::Bcc: { op(Action::PerformOperation); - op(); } break; // A little artificial, there's nothing really to decode for BRA. case Decoder::BRA: { op(Action::PerformOperation, seq("n np np")); - op(); } break; // Decodes the format used by ABCD and SBCD. @@ -343,7 +345,6 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination = &storage_.data_[destination]; op(Action::PerformOperation, seq("np n")); - op(); } } break; @@ -362,13 +363,11 @@ struct ProcessorStorageConstructor { switch(mode) { case 0x000: // CMPI.bw #, Dn op(Action::PerformOperation, seq("np np")); - op(); break; case 0x100: // CMPI.l #, Dn op(Action::None, seq("np")); op(Action::PerformOperation, seq("np np n")); - op(); break; case 0x002: // CMPI.bw #, (An) @@ -382,7 +381,7 @@ struct ProcessorStorageConstructor { case 0x102: // CMPI.l #, (An) case 0x103: // CMPI.l #, (An)+ - op(Action::CopyDestinationToEffectiveAddress, seq("np")); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nR nr np", { &storage_.effective_address_[1].full })); if(mode == 0x103) { op(int(Action::Increment4) | MicroOp::DestinationMask); @@ -399,19 +398,17 @@ struct ProcessorStorageConstructor { case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(Action::CopyDestinationToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[1].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; -#define pseq(x) ((mode == 0x06) || (mode == 0x13) ? "n" x : x) - case 0x012: // CMPI.bw #, (d16, PC) case 0x013: // CMPI.bw #, (d8, PC, Xn) case 0x005: // CMPI.bw #, (d16, An) case 0x006: // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("nr np"), { &storage_.effective_address_[1].full }, !is_byte_access)); + seq(pseq("nr np", mode), { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -419,15 +416,13 @@ struct ProcessorStorageConstructor { case 0x113: // CMPI.l #, (d8, PC, Xn) case 0x105: // CMPI.l #, (d16, An) case 0x106: // CMPI.l #, (d8, An, Xn) - op(Action::CopyDestinationToEffectiveAddress, seq("np")); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nR nr np"), { &storage_.effective_address_[1].full })); + seq(pseq("np nR nr np", mode), { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; -#undef pseq - case 0x010: // CMPI.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1].full }, !is_byte_access)); @@ -478,7 +473,6 @@ struct ProcessorStorageConstructor { default: break; case 0x04: // LEA (An), An (i.e. MOVEA) op(Action::PerformOperation, seq("np")); - op(); break; case 0x05: // LEA (d16, An), An @@ -516,7 +510,6 @@ struct ProcessorStorageConstructor { switch(mode) { case 0x00: // MOVE Dn, SR op(Action::PerformOperation, seq("nn np")); - op(); break; case 0x02: // MOVE (An), SR @@ -533,18 +526,14 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; -#define pseq(x) ((mode == 0x06) || (mode == 0x13) ? "n" x : x) - case 0x12: // MOVE (d16, PC), SR case 0x13: // MOVE (d8, PC, Xn), SR case 0x05: // MOVE (d16, An), SR case 0x06: // MOVE (d8, An, Xn), SR - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np"), { &storage_.effective_address_[0].full })); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np", mode), { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; -#undef pseq - case 0x10: // MOVE (xxx).W, SR op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, @@ -556,21 +545,25 @@ struct ProcessorStorageConstructor { op(Action::None, seq("np")); op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nn nn np")); - op(); break; case 0x14: // MOVE #, SR storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(int(Action::PerformOperation), seq("np nn nn np")); - op(); break; default: continue; } } break; + case Decoder::MOVEq: { + const int destination_register = (instruction >> 9) & 7; + storage_.instructions[instruction].destination = &storage_.data_[destination_register]; + op(Action::PerformOperation, seq("np")); + } break; + // Decodes the format used by most MOVEs and all MOVEAs. - case Decoder::RegisterModeModeRegister: { + case Decoder::MOVE: { const int destination_mode = (instruction >> 6) & 7; const int destination_register = (instruction >> 9) & 7; @@ -610,6 +603,9 @@ struct ProcessorStorageConstructor { continue; } + const int decrement_action = int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); + const int increment_action = int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); + // Construct a single word to describe the addressing mode: // // 0xssdd, where ss or dd = @@ -632,85 +628,42 @@ struct ProcessorStorageConstructor { // 14 = # // // ... for no reason other than to make the switch below easy to read. - const int both_modes = + int both_modes = (combined_mode(source_mode, source_register) << 8) | combined_mode(destination_mode, destination_register) | (is_long_word_access ? 0x10000 : 0); + // If the move is to an address register, switch the MOVE to a MOVEA and + // pretend it's to a data register; if the move is from an address register + // then just call it a move from a data register. + if((both_modes & 0xff) == 0x01) { + both_modes &= ~0x00ff; + operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; + } + if((both_modes & 0xff00) == 0x0100) { + both_modes &= ~0xff00; + } + switch(both_modes) { // - // Source = Dn or An + // MOVE , Dn // - case 0x10001: // MOVEA.l Dn, An - case 0x10101: // MOVEA.l An, An - case 0x00001: // MOVEA.w Dn, An - case 0x00101: // MOVEA.w An, An - operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; // Substitute MOVEA for MOVE. case 0x10000: // MOVE.l Dn, Dn - case 0x10100: // MOVE.l An, Dn case 0x00000: // MOVE.bw Dn, Dn - case 0x00100: // MOVE.bw An, Dn op(Action::PerformOperation, seq("np")); - op(); break; - case 0x0002: // MOVE Dn, (An) - case 0x0102: // MOVE An, (An) - case 0x0003: // MOVE Dn, (An)+ - case 0x0103: // MOVE An, (An)+ - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); - } else { - op(); + case 0x10200: // MOVE.l (An), Dn + case 0x10300: // MOVE.l (An)+, Dn + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR nr np", { &storage_.effective_address_[0].full })); + if(source_mode == 0x3) { + op(int(Action::Increment4) | MicroOp::SourceMask); } + op(Action::PerformOperation); break; - case 0x0004: // MOVE Dn, -(An) - case 0x0104: // MOVE An, -(An) - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, - seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); - break; - - case 0x0005: // MOVE Dn, (d16, An) - case 0x0105: // MOVE An, (d16, An) - op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); - op(); - break; - - case 0x0006: // MOVE Dn, (d8, An, Xn) - case 0x0106: // MOVE An, (d8, An, Xn) - op(int(Action::CalcD8AnXn) | MicroOp::DestinationMask, seq("n np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); - op(); - break; - - case 0x0010: // MOVE Dn, (xxx).W - case 0x0110: // MOVE An, (xxx).W - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); - op(); - break; - - case 0x0011: // MOVE Dn, (xxx).L - case 0x0111: // MOVE An, (xxx).L - op(Action::None, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); - op(); - break; - - // - // Source = (An) or (An)+ - // - - case 0x00201: // MOVEA.w (An), An - case 0x00301: // MOVEA.w (An)+, An - operation = Operation::MOVEAw; case 0x00200: // MOVE.bw (An), Dn case 0x00300: // MOVE.bw (An)+, Dn op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); @@ -720,18 +673,109 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x10201: // MOVEA.l (An), An - case 0x10301: // MOVEA.l (An)+, An - operation = Operation::MOVEAl; - case 0x10200: // MOVE.l (An), Dn - case 0x10300: // MOVE.l (An)+, Dn - op(Action::CopySourceToEffectiveAddress, seq("nR nr np", { &storage_.effective_address_[0].full })); - if(source_mode == 0x3) { - op(int(Action::Increment4) | MicroOp::SourceMask); - } + case 0x10400: // MOVE.l -(An), Dn + op(decrement_action | MicroOp::SourceMask, seq("n nR nr np", { &storage_.address_[source_register].full })); op(Action::PerformOperation); break; + case 0x00400: // MOVE.bw -(An), Dn + op(decrement_action | MicroOp::SourceMask, seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x10500: // MOVE.l (d16, An), Dn + case 0x10600: // MOVE.l (d8, An, Xn), Dn + case 0x11200: // MOVE.l (d16, PC), Dn + case 0x11300: // MOVE.l (d8, PC, Xn), Dn + op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, + seq(pseq("np nR nr np", both_modes >> 8), { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x00500: // MOVE.bw (d16, An), Dn + case 0x00600: // MOVE.bw (d8, An, Xn), Dn + case 0x01200: // MOVE.bw (d16, PC), Dn + case 0x01300: // MOVE.bw (d8, PC, Xn), Dn + op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, + seq(pseq("np nr np", both_modes >> 8), { &storage_.effective_address_[0].full }, + !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x11000: // MOVE.l (xxx).W, Dn + op( + int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR nr np", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x01000: // MOVE.bw (xxx).W, Dn + op( + int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x11100: // MOVE.l (xxx).L, Dn + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("np")); + break; + + case 0x01100: // MOVE.bw (xxx).L, Dn + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case 0x11400: // MOVE.l #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::None, seq("np")); + op(int(Action::PerformOperation), seq("np np")); + break; + + case 0x01400: // MOVE.bw #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(int(Action::PerformOperation), seq("np np")); + break; + + // + // MOVE , (An) + // MOVE , (An)+ + // + + case 0x10002: // MOVE.l Dn, (An) + case 0x10003: // MOVE.l Dn, (An)+ + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); + op(Action::SetMoveFlagsl, seq("nW nw np", { &storage_.effective_address_[1].full })); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x00002: // MOVE.bw Dn, (An) + case 0x00003: // MOVE.bw Dn, (An)+ + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x10202: // MOVE.l (An), (An) + case 0x10302: // MOVE.l (An)+, (An) + case 0x10203: // MOVE.l (An), (An)+ + case 0x10303: // MOVE.l (An)+, (An)+ + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, + seq("nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); + if(source_mode == 0x3 || destination_mode == 0x3) { + op( + increment_action | + (source_mode == 0x3 ? MicroOp::SourceMask : 0) | + (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); + } + break; + case 0x00202: // MOVE.bw (An), (An) case 0x00302: // MOVE.bw (An)+, (An) case 0x00203: // MOVE.bw (An), (An)+ @@ -740,35 +784,188 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full })); if(source_mode == 0x3 || destination_mode == 0x3) { op( - int(is_byte_access ? Action::Increment1 : Action::Increment2) | + increment_action | (source_mode == 0x3 ? MicroOp::SourceMask : 0) | (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); - } else { - op(); } break; - case 0x10202: // MOVE.l (An), (An) - case 0x10302: // MOVE.l (An)+, (An) - case 0x10203: // MOVE.l (An), (An)+ - case 0x10303: // MOVE.l (An)+, (An)+ - op(Action::CopyDestinationToEffectiveAddress); - op(Action::CopySourceToEffectiveAddress, seq("nR nr", { &storage_.effective_address_[0].full })); + case 0x10402: // MOVE.l -(An), (An) + case 0x10403: // MOVE.l -(An), (An)+ + op(decrement_action | MicroOp::SourceMask); + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, + seq("n nR nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(source_mode == 0x3 || destination_mode == 0x3) { - op( - int(Action::Increment4) | - (source_mode == 0x3 ? MicroOp::SourceMask : 0) | - (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); - } else { - op(); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); } break; + case 0x00402: // MOVE.bw -(An), (An) + case 0x00403: // MOVE.bw -(An), (An)+ + op(decrement_action | MicroOp::SourceMask, seq("n nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x10502: // MOVE.bw (d16, An), (An) + case 0x10503: // MOVE.bw (d16, An), (An)+ + case 0x10602: // MOVE.bw (d8, An, Xn), (An) + case 0x10603: // MOVE.bw (d8, An, Xn), (An)+ + case 0x11202: // MOVE.bw (d16, PC), (An) + case 0x11203: // MOVE.bw (d16, PC), (An)+ + case 0x11302: // MOVE.bw (d8, PC, Xn), (An) + case 0x11303: // MOVE.bw (d8, PC, Xn), (An)+ + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); + op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, + seq(pseq("np nR nr", both_modes >> 8), { &storage_.effective_address_[0].full })); + op( Action::PerformOperation, + seq("nW nw np", { &storage_.effective_address_[1].full })); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x00502: // MOVE.bw (d16, An), (An) + case 0x00503: // MOVE.bw (d16, An), (An)+ + case 0x00602: // MOVE.bw (d8, An, Xn), (An) + case 0x00603: // MOVE.bw (d8, An, Xn), (An)+ + case 0x01202: // MOVE.bw (d16, PC), (An) + case 0x01203: // MOVE.bw (d16, PC), (An)+ + case 0x01302: // MOVE.bw (d8, PC, Xn), (An) + case 0x01303: // MOVE.bw (d8, PC, Xn), (An)+ + op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, + seq(pseq("np nr", both_modes >> 8), { &storage_.effective_address_[0].full }, + !is_byte_access)); + op( Action::PerformOperation, + seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x11002: // MOVE.l (xxx).W, (An) + case 0x11003: // MOVE.l (xxx).W, (An)+ + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask ); + op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR nr", { &storage_.effective_address_[0].full })); + op( Action::PerformOperation, + seq("nW nw np", { &storage_.effective_address_[1].full })); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x01002: // MOVE.bw (xxx).W, (An) + case 0x01003: // MOVE.bw (xxx).W, (An)+ + op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op( Action::PerformOperation, + seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x11102: // MOVE.l (xxx).l, (An) + case 0x11103: // MOVE.l (xxx).l, (An)+ + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); + op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR nr", { &storage_.effective_address_[0].full })); + op( Action::PerformOperation, + seq("nW nw np", { &storage_.effective_address_[1].full })); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x01102: // MOVE.bw (xxx).l, (An) + case 0x01103: // MOVE.bw (xxx).l, (An)+ + op( Action::None, seq("np")); + op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op( Action::PerformOperation, + seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x11402: // MOVE.l #, (An) + case 0x11403: // MOVE.l #, (An)+ + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); + op( Action::PerformOperation, seq("np nW nw np", { &storage_.effective_address_[1].full }) ); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + case 0x01402: // MOVE.bw #, (An) + case 0x01403: // MOVE.bw #, (An)+ + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::PerformOperation, seq("np nw np", { &storage_.data_[destination_register].full }, !is_byte_access) ); + if(destination_mode == 0x3) { + op(increment_action | MicroOp::DestinationMask); + } + break; + + // + // MOVE , -(An) + // + + case 0x0004: // MOVE Dn, -(An) + op( decrement_action | MicroOp::DestinationMask, + seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; + + case 0x0005: // MOVE Dn, (d16, An) + op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + break; + + case 0x0006: // MOVE Dn, (d8, An, Xn) + op(int(Action::CalcD8AnXn) | MicroOp::DestinationMask, seq("n np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + break; + + case 0x0010: // MOVE Dn, (xxx).W + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); + break; + + case 0x0011: // MOVE Dn, (xxx).L + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); + break; + case 0x0204: // MOVE (An), -(An) case 0x0304: // MOVE (An)+, -(An) // nr np nw continue; + case 0x0404: // MOVE -(An), -(An) + // n nr np nw + continue; + case 0x0504: // MOVE (d16, An), -(An) + case 0x0604: // MOVE (d8, An, Xn), -(An) + // np nr np nw + // n np nr np nw + continue; + case 0x1004: // MOVE (xxx).W, -(An) + // np nr np nw + continue; + + // + // Source = (An) or (An)+ + // + + + + case 0x0205: // MOVE (An), (d16, An) case 0x0305: // MOVE (An)+, (d16, An) @@ -794,22 +991,8 @@ struct ProcessorStorageConstructor { // Source = -(An) // - case 0x0401: // MOVEA -(An), An - operation = Operation::MOVEAw; // Substitute MOVEA for MOVE. - case 0x0400: // MOVE -(An), Dn - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, - seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - op(Action::PerformOperation); - break; - case 0x0402: // MOVE -(An), (An) - case 0x0403: // MOVE -(An), (An)+ - // n nr nw np - continue; - case 0x0404: // MOVE -(An), -(An) - // n nr np nw - continue; case 0x0405: // MOVE -(An), (d16, An) // n nr np nw @@ -831,31 +1014,8 @@ struct ProcessorStorageConstructor { // Source = (d16, An) or (d8, An, Xn) // -#define action_calc() int(source_mode == 0x05 ? Action::CalcD16An : Action::CalcD8AnXn) -#define pseq(x) (source_mode == 0x06 ? "n" x : x) - case 0x0501: // MOVE (d16, An), An - case 0x0601: // MOVE (d8, An, Xn), An - operation = Operation::MOVEAw; - case 0x0500: // MOVE (d16, An), Dn - case 0x0600: // MOVE (d8, An, Xn), Dn - op(action_calc() | MicroOp::SourceMask, seq(pseq("np nr np"), { &storage_.effective_address_[0].full }, !is_byte_access)); - op(Action::PerformOperation); - break; - case 0x0502: // MOVE (d16, An), (An) - case 0x0503: // MOVE (d16, An), (An)+ - case 0x0602: // MOVE (d8, An, Xn), (An) - case 0x0603: // MOVE (d8, An, Xn), (An)+ - // np nr nw np - // n np nr nw np - continue; - - case 0x0504: // MOVE (d16, An), -(An) - case 0x0604: // MOVE (d8, An, Xn), -(An) - // np nr np nw - // n np nr np nw - continue; case 0x0505: // MOVE (d16, An), (d16, An) case 0x0605: // MOVE (d8, An, Xn), (d16, An) @@ -881,30 +1041,12 @@ struct ProcessorStorageConstructor { // n np nr np nw np np continue; -#undef action_calc -#undef prefix - // // Source = (xxx).W // - case 0x1001: // MOVEA (xxx).W, An - operation = Operation::MOVEAw; - case 0x1000: // MOVE (xxx).W, Dn - op( - int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); - op(Action::PerformOperation); - break; - case 0x1002: // MOVE (xxx).W, (An) - case 0x1003: // MOVE (xxx).W, (An)+ - // np nr nw np - continue; - case 0x1004: // MOVE (xxx).W, -(An) - // np nr np nw - continue; case 0x1005: // MOVE (xxx).W, (d16, An) // np nr np nw np @@ -926,44 +1068,21 @@ struct ProcessorStorageConstructor { // Source = (xxx).L // - case 0x1101: // MOVEA (xxx).L, Dn - operation = Operation::MOVEAw; - case 0x1100: // MOVE (xxx).L, Dn - op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); - op(Action::PerformOperation, seq("np")); - op(); - break; // // Source = (d16, PC) // - case 0x1200: // MOVE (d16, PC), Dn - op(int(Action::CalcD16PC) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); - op(Action::PerformOperation); - break; // // Source = (d8, An, Xn) // - case 0x1300: // MOVE (d8, An, Xn), Dn - op(int(Action::CalcD8PCXn) | MicroOp::SourceMask, seq("n np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); - op(Action::PerformOperation); - break; // // Source = # // - case 0x01401: // MOVE #, Dn - operation = Operation::MOVEAw; - case 0x01400: // MOVE #, Dn - storage_.instructions[instruction].source = &storage_.prefetch_queue_; - op(int(Action::PerformOperation), seq("np np")); - op(); - break; case 0x11411: // MOVE.l #, (xxx).l op(int(Action::None), seq("np")); @@ -1007,6 +1126,11 @@ struct ProcessorStorageConstructor { continue; } + // Add a terminating micro operation if necessary. + if(!storage_.all_micro_ops_.back().is_terminal()) { + storage_.all_micro_ops_.emplace_back(); + } + // Install the operation and make a note of where micro-ops begin. storage_.instructions[instruction].operation = operation; micro_op_pointers[instruction] = micro_op_start; @@ -1019,6 +1143,7 @@ struct ProcessorStorageConstructor { #undef seq #undef op +#undef pseq // Finalise micro-op and program pointers. for(size_t instruction = 0; instruction < 65536; ++instruction) { @@ -1079,3 +1204,4 @@ void CPU::MC68000::ProcessorStorage::set_is_supervisor(bool is_supervisor) { address_[7] = stack_pointers_[is_supervisor_]; } } + diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 483c8c4e8..9b58fc93a 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -45,7 +45,7 @@ class ProcessorStorage { ABCD, SBCD, ADD, AND, EOR, OR, SUB, - MOVEb, MOVEw, MOVEl, + MOVEb, MOVEw, MOVEl, MOVEq, MOVEAw, MOVEAl, MOVEtoSR, MOVEfromSR, @@ -137,11 +137,8 @@ class ProcessorStorage { /// Adds 4. Increment4, - /// Copies whatever is this instruction's source to effective_address_[0]. - CopySourceToEffectiveAddress, - - /// Copies whatever is this instruction's destination to effective_address_[1]. - CopyDestinationToEffectiveAddress, + /// Copies the source and/or destination to effective_address_. + CopyToEffectiveAddress, /// Peeking into the end of the prefetch queue, calculates the proper target of (d16,An) addressing. CalcD16An, From bc6349f823c0249bcb54a6d9103ca07de1f37deb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 29 Mar 2019 23:40:54 -0400 Subject: [PATCH 044/239] Adds RESET, fixes branches and attempts to fix CMPI. --- Processors/68000/68000.hpp | 3 +++ .../Implementation/68000Implementation.hpp | 6 ++++++ .../68000/Implementation/68000Storage.cpp | 20 ++++++++++++++++++- .../68000/Implementation/68000Storage.hpp | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index a179e247c..ebbb4c5e4 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -64,6 +64,9 @@ struct Microcycle { /// of the data strobes are. static const int SameAddress = 2; + /// A Reset cycle is one in which the RESET output is asserted. + static const int Reset = 3; + /// Indicates that the address and both data select strobes are active. static const int SelectWord = 1 << 2; diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e5b72377a..a6c9534aa 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -254,6 +254,12 @@ template void Processor: active_program_->source->halves.low.full = get_status(); break; + /* + The no-op. + */ + case Operation::None: + break; + /* SBCD subtracts the lowest byte of the source from that of the destination using BCD arithmetic, obeying the extend flag. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e5d4b7f78..eb63665fb 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -191,6 +191,13 @@ struct ProcessorStorageConstructor { } break; + case '_': // Indicates the reset cycle. + step.microcycle.length = HalfCycles(248); + step.microcycle.operation = Microcycle::Reset; + steps.push_back(step); + ++access_pattern; + break; + default: std::cerr << "MC68000 program builder; Unknown access type " << *access_pattern << std::endl; assert(false); @@ -244,6 +251,7 @@ struct ProcessorStorageConstructor { Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled LEA, // decodes register, mode, register MOVEq, // decodes just a destination register + RESET, // no further decoding applied }; using Operation = ProcessorStorage::Operation; @@ -294,6 +302,8 @@ struct ProcessorStorageConstructor { {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) + + {0xffff, 0x4e70, Operation::None, Decoder::RESET}, // 6-83 (p537) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -321,6 +331,7 @@ struct ProcessorStorageConstructor { // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. case Decoder::Bcc: { op(Action::PerformOperation); + op(); // The above looks terminal, but will be dynamically reprogrammed. } break; // A little artificial, there's nothing really to decode for BRA. @@ -354,7 +365,7 @@ struct ProcessorStorageConstructor { const auto destination_mode = source_mode; const auto destination_register = source_register; - storage_.instructions[instruction].source = &storage_.prefetch_queue_; + storage_.instructions[instruction].source = &storage_.bus_data_[0]; storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); const bool is_byte_access = mapping.operation == Operation::CMPb; @@ -362,10 +373,12 @@ struct ProcessorStorageConstructor { const int mode = (is_long_word_access ? 0x100 : 0) | combined_mode(destination_mode, destination_register); switch(mode) { case 0x000: // CMPI.bw #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np np")); break; case 0x100: // CMPI.l #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(Action::PerformOperation, seq("np np n")); break; @@ -503,6 +516,7 @@ struct ProcessorStorageConstructor { case Decoder::MOVEtoSR: { if(source_mode == 1) continue; storage_.instructions[instruction].set_source(storage_, source_mode, source_register); + storage_.instructions[instruction].requires_supervisor = true; /* DEVIATION FROM YACHT.TXT: it has all of these reading an extra word from the PC; this looks like a mistake so I've padded with nil cycles in the middle. */ @@ -1121,6 +1135,10 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::RESET: + op(Action::None, seq("nn _ np")); + break; + default: std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; continue; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 9b58fc93a..2cbe0844f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -42,6 +42,7 @@ class ProcessorStorage { HalfCycles half_cycles_left_to_run_; enum class Operation { + None, ABCD, SBCD, ADD, AND, EOR, OR, SUB, From cb240cd32a324b0275a10186f867e37ddcc8d11d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 30 Mar 2019 23:11:39 -0400 Subject: [PATCH 045/239] Switches to a more explicit tokeniser, to allow for greater flexibility momentarily. --- .../68000/Implementation/68000Storage.cpp | 216 +++++++++--------- 1 file changed, 103 insertions(+), 113 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index eb63665fb..54248678f 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -9,6 +9,7 @@ #include "../68000.hpp" #include +#include namespace CPU { namespace MC68000 { @@ -35,7 +36,7 @@ struct ProcessorStorageConstructor { return (mode == 7) ? (0x10 | reg) : mode; } -#define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n" x : x) +#define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n " x : x) /*! Installs BusSteps that implement the described program into the relevant @@ -79,129 +80,118 @@ struct ProcessorStorageConstructor { The user should fill in the steps necessary to get data into or extract data from those. */ - size_t assemble_program(const char *access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { + size_t assemble_program(std::string access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { auto address_iterator = addresses.begin(); RegisterPair32 *scratch_data_read = storage_.bus_data_; RegisterPair32 *scratch_data_write = storage_.bus_data_; using Action = BusStep::Action; std::vector steps; + std::stringstream stream(access_pattern); - // Parse the access pattern to build microcycles. - while(*access_pattern) { + // Tokenise the access pattern by splitting on spaces. + std::string token; + while(stream >> token) { ProcessorBase::BusStep step; - switch(*access_pattern) { - case '\t': case ' ': // White space acts as a no-op; it's for clarity only. - ++access_pattern; - break; - - case 'n': // This might be a plain NOP cycle, in which some internal calculation occurs, - // or it might pair off with something afterwards. - switch(access_pattern[1]) { - default: // This is probably a pure NOP; if what comes after this 'n' isn't actually - // valid, it should be caught in the outer switch the next time around the loop. - steps.push_back(step); - ++access_pattern; - break; - - case '-': // This is two NOPs in a row. - steps.push_back(step); - steps.push_back(step); - access_pattern += 2; - break; - - case 'F': // Fetch SSP MSW. - case 'f': // Fetch SSP LSW. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_[0].full; - step.microcycle.value = isupper(access_pattern[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; - steps.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = Action::IncrementEffectiveAddress0; - steps.push_back(step); - - access_pattern += 2; - break; - - case 'V': // Fetch exception vector low. - case 'v': // Fetch exception vector high. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. - step.microcycle.address = &storage_.effective_address_[0].full; - step.microcycle.value = isupper(access_pattern[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; - steps.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = Action::IncrementEffectiveAddress0; - steps.push_back(step); - - access_pattern += 2; - break; - - case 'p': // Fetch from the program counter into the prefetch queue. - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; - step.microcycle.address = &storage_.program_counter_.full; - step.microcycle.value = &storage_.prefetch_queue_.halves.low; - step.action = Action::AdvancePrefetch; - steps.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; - step.action = Action::IncrementProgramCounter; - steps.push_back(step); - - access_pattern += 2; - break; - - case 'r': // Fetch LSW (or only) word (/byte) - case 'R': // Fetch MSW word - case 'w': // Store LSW (or only) word (/byte) - case 'W': { // Store MSW word - const bool is_read = tolower(access_pattern[1]) == 'r'; - RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; - - step.microcycle.length = HalfCycles(5); - step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); - step.microcycle.address = *address_iterator; - step.microcycle.value = isupper(access_pattern[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; - steps.push_back(step); - - step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); - if(access_pattern[1] == 'R') { - step.action = Action::IncrementEffectiveAddress0; - } - if(access_pattern[1] == 'W') { - step.action = Action::IncrementEffectiveAddress1; - } - steps.push_back(step); - - if(!isupper(access_pattern[1])) { - ++(*scratch_data); - ++address_iterator; - } - access_pattern += 2; - } break; - } - break; - - case '_': // Indicates the reset cycle. - step.microcycle.length = HalfCycles(248); - step.microcycle.operation = Microcycle::Reset; + // Do nothing (possibly twice). + if(token == "n" || token == "nn") { + steps.push_back(step); + if(token.size() == 2) { steps.push_back(step); - ++access_pattern; - break; - - default: - std::cerr << "MC68000 program builder; Unknown access type " << *access_pattern << std::endl; - assert(false); + } + continue; } + + // Fetch SSP. + if(token == "nF" || token == "nf") { + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.address = &storage_.effective_address_[0].full; + step.microcycle.value = isupper(token[1]) ? &storage_.stack_pointers_[1].halves.high : &storage_.stack_pointers_[1].halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementEffectiveAddress0; + steps.push_back(step); + + continue; + } + + // Fetch exception vector. + if(token == "nV" || token == "nv") { + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; // IsProgram is a guess. + step.microcycle.address = &storage_.effective_address_[0].full; + step.microcycle.value = isupper(token[1]) ? &storage_.program_counter_.halves.high : &storage_.program_counter_.halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementEffectiveAddress0; + steps.push_back(step); + + continue; + } + + // Fetch from the program counter into the prefetch queue. + if(token == "np") { + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read | Microcycle::IsProgram; + step.microcycle.address = &storage_.program_counter_.full; + step.microcycle.value = &storage_.prefetch_queue_.halves.low; + step.action = Action::AdvancePrefetch; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.action = Action::IncrementProgramCounter; + steps.push_back(step); + + continue; + } + + // The reset cycle. + if(token == "_") { + step.microcycle.length = HalfCycles(248); + step.microcycle.operation = Microcycle::Reset; + steps.push_back(step); + + continue; + } + + // A standard read or write. + if(token == "nR" || token == "nr" || token == "nW" || token == "nw") { + const bool is_read = tolower(access_pattern[1]) == 'r'; + RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; + + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); + step.microcycle.address = *address_iterator; + step.microcycle.value = isupper(token[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); + if(token[1] == 'R') { + step.action = Action::IncrementEffectiveAddress0; + } + if(token[1] == 'W') { + step.action = Action::IncrementEffectiveAddress1; + } + steps.push_back(step); + + if(!isupper(access_pattern[1])) { + ++(*scratch_data); + ++address_iterator; + } + + continue; + } + + std::cerr << "MC68000 program builder; Unknown access token " << token << std::endl; + assert(false); } // Add a final 'ScheduleNextProgram' sentinel. From c6f977ed4b1f7561f7fd746312e543b09f880c13 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 31 Mar 2019 21:13:26 -0400 Subject: [PATCH 046/239] Corrects CMPI and documentation; implements JMP. --- .../Implementation/68000Implementation.hpp | 39 +++++- .../68000/Implementation/68000Storage.cpp | 130 ++++++++++++------ .../68000/Implementation/68000Storage.hpp | 17 +-- 3 files changed, 132 insertions(+), 54 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index a6c9534aa..73d38742e 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -196,6 +196,11 @@ template void Processor: overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80000000; } break; + // JMP: copies the source to the program counter. + case Operation::JMP: + program_counter_.full = active_program_->source->full; + break; + /* MOVE.b, MOVE.l and MOVE.w: move the least significant byte or word, or the entire long word, and set negative, zero, overflow and carry as appropriate. @@ -364,6 +369,19 @@ template void Processor: } break; + case int(MicroOp::Action::CalcD16PC) | MicroOp::SourceMask: + effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + break; + + case int(MicroOp::Action::CalcD16PC) | MicroOp::DestinationMask: + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + break; + + case int(MicroOp::Action::CalcD16PC) | MicroOp::SourceMask | MicroOp::DestinationMask: + effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + program_counter_.full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + break; + case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + active_program_->source->full; break; @@ -422,19 +440,32 @@ template void Processor: case int(MicroOp::Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask: // Assumption: this will be assembling right at the start of the instruction. - bus_data_[0] = prefetch_queue_.halves.low.full; + source_bus_data_[0] = prefetch_queue_.halves.low.full; break; case int(MicroOp::Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask: - bus_data_[1] = prefetch_queue_.halves.low.full; + destination_bus_data_[0] = prefetch_queue_.halves.low.full; break; case int(MicroOp::Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask: - bus_data_[0] = prefetch_queue_.full; + source_bus_data_[0] = prefetch_queue_.full; break; case int(MicroOp::Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask: - bus_data_[1] = prefetch_queue_.full; + destination_bus_data_[0] = prefetch_queue_.full; + break; + + case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::SourceMask: + effective_address_[0] = *active_program_->source; + break; + + case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::DestinationMask: + effective_address_[1] = *active_program_->destination; + break; + + case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::SourceMask | MicroOp::DestinationMask: + effective_address_[0] = *active_program_->source; + effective_address_[1] = *active_program_->destination; break; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 54248678f..5f7641b4e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -47,26 +47,35 @@ struct ProcessorStorageConstructor { during this program. This should follow the same general pattern as those in yacht.txt; full description below. - @discussion - The access pattern is defined, as in yacht.txt, to be a string consisting - of the following discrete bus actions. Spaces are ignored. + @param addresses A vector of the addresses to place on the bus coincident + with those acess steps that require them. - * n: no operation; data bus is not used; - * -: idle state; data bus is not used but is also not available; - * p: program fetch; reads from the PC and adds two to it; - * W: write MSW of something onto the bus; - * w: write LSW of something onto the bus; - * R: read MSW of something from the bus; - * r: read LSW of soemthing from the bus; - * S: push the MSW of something onto the stack; - * s: push the LSW of something onto the stack; - * U: pop the MSW of something from the stack; - * u: pop the LSW of something from the stack; - * V: fetch a vector's MSW; - * v: fetch a vector's LSW; + @param read_full_words @c true to indicate that read and write operations are + selecting a full word; @c false to signal byte accesses only. + + @discussion + The access pattern is defined to correlate closely to that in yacht.txt; it is + a space-separated sequence of the following actions: + + * n: no operation for four cycles; data bus is not used; + * nn: no operation for eight cycles; data bus is not used; + * np: program fetch; reads from the PC and adds two to it, advancing the prefetch queue; + * nW: write MSW of something onto the bus; + * nw: write LSW of something onto the bus; + * nR: read MSW of something from the bus into the source latch; + * nr: read LSW of soemthing from the bus into the source latch; + * nRd: read MSW of something from the bus into the destination latch; + * nrd: read LSW of soemthing from the bus into the destination latch; + * nS: push the MSW of something onto the stack; + * ns: push the LSW of something onto the stack; + * nU: pop the MSW of something from the stack; + * nu: pop the LSW of something from the stack; + * nV: fetch a vector's MSW; + * nv: fetch a vector's LSW; * i: acquire interrupt vector in an IACK cycle; - * F: fetch the SSPs MSW; - * f: fetch the SSP's LSW. + * nF: fetch the SSPs MSW; + * nf: fetch the SSP's LSW; + * _: hold the reset line active for the usual period. Quite a lot of that is duplicative, implying both something about internal state and something about what's observable on the bus, but it's helpful to @@ -82,8 +91,6 @@ struct ProcessorStorageConstructor { */ size_t assemble_program(std::string access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { auto address_iterator = addresses.begin(); - RegisterPair32 *scratch_data_read = storage_.bus_data_; - RegisterPair32 *scratch_data_write = storage_.bus_data_; using Action = BusStep::Action; std::vector steps; @@ -162,14 +169,15 @@ struct ProcessorStorageConstructor { } // A standard read or write. - if(token == "nR" || token == "nr" || token == "nW" || token == "nw") { - const bool is_read = tolower(access_pattern[1]) == 'r'; - RegisterPair32 **scratch_data = is_read ? &scratch_data_read : &scratch_data_write; + if(token == "nR" || token == "nr" || token == "nW" || token == "nw" || token == "nRd" || token == "nrd") { + const bool is_read = tolower(token[1]) == 'r'; + const bool use_source_storage = is_read && token.size() != 3; + RegisterPair32 *scratch_data = use_source_storage ? &storage_.source_bus_data_[0] : &storage_.destination_bus_data_[0]; step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); step.microcycle.address = *address_iterator; - step.microcycle.value = isupper(token[1]) ? &(*scratch_data)->halves.high : &(*scratch_data)->halves.low; + step.microcycle.value = isupper(token[1]) ? &scratch_data->halves.high : &scratch_data->halves.low; steps.push_back(step); step.microcycle.length = HalfCycles(3); @@ -182,8 +190,7 @@ struct ProcessorStorageConstructor { } steps.push_back(step); - if(!isupper(access_pattern[1])) { - ++(*scratch_data); + if(!isupper(token[1])) { ++address_iterator; } @@ -241,7 +248,8 @@ struct ProcessorStorageConstructor { Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled LEA, // decodes register, mode, register MOVEq, // decodes just a destination register - RESET, // no further decoding applied + RESET, // no further decoding applied, performs reset cycle + JMP, // six lowest bits are [mode, register], decoding to JMP }; using Operation = ProcessorStorage::Operation; @@ -294,6 +302,8 @@ struct ProcessorStorageConstructor { {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) {0xffff, 0x4e70, Operation::None, Decoder::RESET}, // 6-83 (p537) + + {0xffc0, 0x4ec0, Operation::JMP, Decoder::JMP}, // 4-108 (p212) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -335,8 +345,8 @@ struct ProcessorStorageConstructor { const int source = instruction & 7; if(instruction & 8) { - storage_.instructions[instruction].source = &storage_.bus_data_[0]; - storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, seq("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); @@ -355,7 +365,7 @@ struct ProcessorStorageConstructor { const auto destination_mode = source_mode; const auto destination_register = source_register; - storage_.instructions[instruction].source = &storage_.bus_data_[0]; + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); const bool is_byte_access = mapping.operation == Operation::CMPb; @@ -375,7 +385,7 @@ struct ProcessorStorageConstructor { case 0x002: // CMPI.bw #, (An) case 0x003: // CMPI.bw #, (An)+ - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nr np", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.address_[destination_register].full }, !is_byte_access)); if(mode == 0x3) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } @@ -385,7 +395,7 @@ struct ProcessorStorageConstructor { case 0x102: // CMPI.l #, (An) case 0x103: // CMPI.l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nR nr np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd nrd np", { &storage_.effective_address_[1].full })); if(mode == 0x103) { op(int(Action::Increment4) | MicroOp::DestinationMask); } @@ -394,14 +404,14 @@ struct ProcessorStorageConstructor { case 0x004: // CMPI.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nr np", { &storage_.address_[destination_register].full })); + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { &storage_.address_[destination_register].full })); op(Action::PerformOperation); break; case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -411,7 +421,7 @@ struct ProcessorStorageConstructor { case 0x006: // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("nr np", mode), { &storage_.effective_address_[1].full }, !is_byte_access)); + seq(pseq("nrd np", mode), { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; @@ -422,33 +432,33 @@ struct ProcessorStorageConstructor { op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nR nr np", mode), { &storage_.effective_address_[1].full })); + seq(pseq("np nRd nrd np", mode), { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; case 0x010: // CMPI.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; case 0x110: // CMPI.l #, (xxx).w op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nR nr np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; case 0x011: // CMPI.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nr np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::PerformOperation); break; case 0x111: // CMPI.l #, (xxx).l op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nR nr np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -456,6 +466,41 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::JMP: { + storage_.instructions[instruction].source = &storage_.effective_address_[0]; + const int mode = combined_mode(source_mode, source_register); + switch(mode) { + default: continue; + case 0x02: // JMP (An) + storage_.instructions[instruction].source = &storage_.address_[source_register]; + op(Action::PerformOperation, seq("np np")); + break; + + case 0x12: // JMP (d16, PC) + case 0x05: // JMP (d16, An) + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np np", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x13: // JMP (d8, PC, Xn) + case 0x06: // JMP (d8, An, Xn) + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np np", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x10: // JMP (xxx).W + op(int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np np")); + break; + + case 0x11: // JMP (xxx).L + op(Action::None, seq("np")); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("np np")); + break; + } + } break; + case Decoder::LEA: { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].destination = &storage_.address_[destination_register]; @@ -581,7 +626,7 @@ struct ProcessorStorageConstructor { break; default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L - storage_.instructions[instruction].source = &storage_.bus_data_[0]; + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; break; } @@ -595,7 +640,7 @@ struct ProcessorStorageConstructor { break; default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L - storage_.instructions[instruction].destination = &storage_.bus_data_[1]; + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; break; } @@ -1126,6 +1171,7 @@ struct ProcessorStorageConstructor { } break; case Decoder::RESET: + storage_.instructions[instruction].requires_supervisor = true; op(Action::None, seq("nn _ np")); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 2cbe0844f..67c642a86 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -37,7 +37,8 @@ class ProcessorStorage { // Generic sources and targets for memory operations; // by convention: [0] = source, [1] = destination. RegisterPair32 effective_address_[2]; - RegisterPair32 bus_data_[2]; + RegisterPair32 source_bus_data_[1]; + RegisterPair32 destination_bus_data_[1]; HalfCycles half_cycles_left_to_run_; @@ -53,7 +54,7 @@ class ProcessorStorage { CMPb, CMPw, CMPl, - BRA, Bcc, + BRA, Bcc, JMP }; /*! @@ -209,17 +210,17 @@ class ProcessorStorage { void set_source(ProcessorStorage &storage, int mode, int reg) { switch(mode) { - case 0: source = &storage.data_[reg]; break; - case 1: source = &storage.address_[reg]; break; - default: source = &storage.bus_data_[0]; break; + case 0: source = &storage.data_[reg]; break; + case 1: source = &storage.address_[reg]; break; + default: source = &storage.source_bus_data_[0]; break; } } void set_destination(ProcessorStorage &storage, int mode, int reg) { switch(mode) { - case 0: destination = &storage.data_[reg]; break; - case 1: destination = &storage.address_[reg]; break; - default: destination = &storage.bus_data_[1]; break; + case 0: destination = &storage.data_[reg]; break; + case 1: destination = &storage.address_[reg]; break; + default: destination = &storage.destination_bus_data_[0]; break; } } }; From a9ceef5c379c93000064dda78b517a7b590e3507 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 31 Mar 2019 22:27:33 -0400 Subject: [PATCH 047/239] Improves communication slightly. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 73d38742e..56654050d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -48,10 +48,10 @@ template void Processor: const uint16_t next_instruction = prefetch_queue_.halves.high.full; if(!instructions[next_instruction].micro_operations) { // TODO: once all instructions are implemnted, this should be an instruction error. - std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << std::endl; + std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << " from " << (program_counter_.full - 4) << std::endl; return; } else { - std::cout << "Performing " << std::hex << next_instruction << std::endl; + std::cout << "Performing " << std::hex << next_instruction << " from " << (program_counter_.full - 4) << std::endl; } active_program_ = &instructions[next_instruction]; From 2c5ff9ada094cb9641e786409954b15202ce231b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 31 Mar 2019 22:27:57 -0400 Subject: [PATCH 048/239] Switches to running the real TOS, at least temporarily, and enables better testing. --- .../xcshareddata/xcschemes/Clock Signal.xcscheme | 2 ++ OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme index ffcbbd1c6..95b31a9ca 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme +++ b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme @@ -26,6 +26,8 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + enableAddressSanitizer = "YES" + enableUBSanitizer = "YES" codeCoverageEnabled = "YES" shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 95fb23c2d..80fdc95a4 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -84,7 +84,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { - (void)setUp { // Put setup code here. This method is called before the invocation of each test method in the class. - const auto roms = CSROMFetcher()("AtariST", {"etos192uk.img"}); + const auto roms = CSROMFetcher()("AtariST", {"tos100.img"}); _machine.reset(new EmuTOS(*roms[0])); } @@ -95,7 +95,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { - (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(400)); + _machine->run_for(HalfCycles(4000)); } @end From 8f1faefa1ccfa407fc4b006ba0bb774185cbfd39 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 31 Mar 2019 22:34:28 -0400 Subject: [PATCH 049/239] Implements further MOVEs and fixes a potential error in program formation. --- .../68000/Implementation/68000Storage.cpp | 243 +++++++++--------- 1 file changed, 122 insertions(+), 121 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5f7641b4e..695ad3c4a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -971,6 +971,32 @@ struct ProcessorStorageConstructor { op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; + case 0x0204: // MOVE (An), -(An) + case 0x0304: // MOVE (An)+, -(An) + // nr np nw + continue; + + case 0x0404: // MOVE -(An), -(An) + // n nr np nw + continue; + + case 0x0504: // MOVE (d16, An), -(An) + case 0x0604: // MOVE (d8, An, Xn), -(An) + // np nr np nw + // n np nr np nw + continue; + + case 0x1004: // MOVE (xxx).W, -(An) + // np nr np nw + continue; + + // + // MOVE , (d16, An) + // MOVE , (d8, An, Xn) + // MOVE , (d16, An) + // MOVE , (d16, An) + // + case 0x0005: // MOVE Dn, (d16, An) op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); @@ -981,41 +1007,6 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); break; - case 0x0010: // MOVE Dn, (xxx).W - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); - break; - - case 0x0011: // MOVE Dn, (xxx).L - op(Action::None, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq("np nw np", { &storage_.effective_address_[1].full })); - break; - - case 0x0204: // MOVE (An), -(An) - case 0x0304: // MOVE (An)+, -(An) - // nr np nw - continue; - case 0x0404: // MOVE -(An), -(An) - // n nr np nw - continue; - case 0x0504: // MOVE (d16, An), -(An) - case 0x0604: // MOVE (d8, An, Xn), -(An) - // np nr np nw - // n np nr np nw - continue; - case 0x1004: // MOVE (xxx).W, -(An) - // np nr np nw - continue; - - // - // Source = (An) or (An)+ - // - - - - - case 0x0205: // MOVE (An), (d16, An) case 0x0305: // MOVE (An)+, (d16, An) // nr np nw np @@ -1026,23 +1017,6 @@ struct ProcessorStorageConstructor { // nr n np nw np continue; - case 0x0210: // MOVE (An), (xxx).W - case 0x0310: // MOVE (An)+, (xxx).W - // nr np nw np - continue; - - case 0x0211: // MOVE (An), (xxx).L - case 0x0311: // MOVE (An)+, (xxx).L - // nr np nw np np - continue; - - // - // Source = -(An) - // - - - - case 0x0405: // MOVE -(An), (d16, An) // n nr np nw continue; @@ -1051,21 +1025,6 @@ struct ProcessorStorageConstructor { // n nr n np nw np continue; - case 0x0410: // MOVE -(An), (xxx).W - // n nr np nw np - continue; - - case 0x0411: // MOVE -(An), (xxx).L - // n nr np nw np np - continue; - - // - // Source = (d16, An) or (d8, An, Xn) - // - - - - case 0x0505: // MOVE (d16, An), (d16, An) case 0x0605: // MOVE (d8, An, Xn), (d16, An) // np nr np nw np @@ -1078,25 +1037,6 @@ struct ProcessorStorageConstructor { // n np nr n np nw np continue; - case 0x0510: // MOVE (d16, An), (xxx).W - case 0x0610: // MOVE (d8, An, Xn), (xxx).W - // np nr np nw np - // n np nr np nw np - continue; - - case 0x0511: // MOVE (d16, An), (xxx).L - case 0x0611: // MOVE (d8, An, Xn), (xxx).L - // np nr np nw np np - // n np nr np nw np np - continue; - - // - // Source = (xxx).W - // - - - - case 0x1005: // MOVE (xxx).W, (d16, An) // np nr np nw np continue; @@ -1105,41 +1045,30 @@ struct ProcessorStorageConstructor { // np nr n np nw np continue; - case 0x1010: // MOVE (xxx).W, (xxx).W - // np nr np nw np - continue; - - case 0x1011: // MOVE (xxx).W, (xxx).L - // np nr np nw np np - continue; - // - // Source = (xxx).L + // MOVE , (xxx).W // - - // - // Source = (d16, PC) - // - - - // - // Source = (d8, An, Xn) - // - - - // - // Source = # - // - - - case 0x11411: // MOVE.l #, (xxx).l - op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full })); - op(Action::SetMoveFlagsl); + case 0x0010: // MOVE Dn, (xxx).W + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); break; + case 0x0210: // MOVE (An), (xxx).W + case 0x0310: // MOVE (An)+, (xxx).W + // nr np nw np + continue; + + case 0x0410: // MOVE -(An), (xxx).W + // n nr np nw np + continue; + + case 0x0510: // MOVE (d16, An), (xxx).W + case 0x0610: // MOVE (d8, An, Xn), (xxx).W + // np nr np nw np + // n np nr np nw np + continue; + case 0x11410: // MOVE.l #, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); @@ -1147,16 +1076,82 @@ struct ProcessorStorageConstructor { op(Action::SetMoveFlagsl); break; + case 0x1010: // MOVE (xxx).W, (xxx).W + // np nr np nw np + continue; + + case 0x01410: // MOVE.bw #, (xxx).w + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; + + // + // MOVE , (xxx).L + // + + case 0x00011: // MOVE.bw Dn, (xxx).L + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + break; + + case 0x00211: // MOVE.bw (An), (xxx).L + case 0x00311: // MOVE.bw (An)+, (xxx).L + op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); + if(source_mode == 0x3) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + break; + + case 0x0411: // MOVE -(An), (xxx).L + // n nr np nw np np + continue; + + case 0x0511: // MOVE (d16, An), (xxx).L + case 0x0611: // MOVE (d8, An, Xn), (xxx).L + // np nr np nw np np + // n np nr np nw np np + continue; + + case 0x01011: // MOVE.bw (xxx).W, (xxx).L + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { &storage_.effective_address_[1].full }, !is_byte_access)); + continue; + + case 0x01111: // MOVE.bw (xxx).l, (xxx).l + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { &storage_.effective_address_[1].full }, !is_byte_access)); + break; + case 0x01411: // MOVE.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full })); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; - case 0x01410: // MOVE.bw #, (xxx).w - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + case 0x11011: // MOVE.l (xxx).W, (xxx).L + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW nw np np", { &storage_.effective_address_[1].full })); + break; + + case 0x11111: // MOVE.l (xxx).l, (xxx).l + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW nw np np", { &storage_.effective_address_[1].full })); + break; + + case 0x11411: // MOVE.l #, (xxx).l + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full })); + op(Action::SetMoveFlagsl); break; // @@ -1185,6 +1180,13 @@ struct ProcessorStorageConstructor { storage_.all_micro_ops_.emplace_back(); } + // Ensure that steps that weren't meant to look terminal aren't terminal. + for(auto index = micro_op_start; index < storage_.all_micro_ops_.size() - 1; ++index) { + if(storage_.all_micro_ops_[index].is_terminal()) { + storage_.all_micro_ops_[index].bus_program = seq(""); + } + } + // Install the operation and make a note of where micro-ops begin. storage_.instructions[instruction].operation = operation; micro_op_pointers[instruction] = micro_op_start; @@ -1258,4 +1260,3 @@ void CPU::MC68000::ProcessorStorage::set_is_supervisor(bool is_supervisor) { address_[7] = stack_pointers_[is_supervisor_]; } } - From 64f99d83a40455b64b406f0410b0e7aa697b8eeb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 1 Apr 2019 21:21:26 -0400 Subject: [PATCH 050/239] Takes a stab at offering ADD, ADDA, SUB and SUBA operations. Not yet decoded. --- .../Implementation/68000Implementation.hpp | 83 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 6 +- 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 56654050d..8e6621634 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -92,6 +92,48 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + // ADD and ADDA add two quantities, the latter sign extending and without setting any flags. + case Operation::ADDb: { + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + const int result = destination + source; + + zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; + } break; + + case Operation::ADDw: { + const uint16_t source = active_program_->source->halves.low.full; + const uint16_t destination = active_program_->destination->halves.low.full; + const int result = destination + source; + + zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); + extend_flag_ = carry_flag_ = result & ~0xffff; + negative_flag_ = result & 0x8000; + overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x8000; + } break; + + case Operation::ADDl: { + const uint32_t source = active_program_->source->full; + const uint32_t destination = active_program_->destination->full; + const uint64_t result = destination + source; + + zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); + extend_flag_ = carry_flag_ = result >> 32; + negative_flag_ = result & 0x80000000; + overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80000000; + } break; + + case Operation::ADDAw: + active_program_->destination->full += int16_t(active_program_->source->halves.low.full); + break; + + case Operation::ADDAl: + active_program_->destination->full += active_program_->source->full; + break; + // BRA: alters the program counter, exclusively via the prefetch queue. case Operation::BRA: { const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); @@ -290,6 +332,47 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + case Operation::SUBb: { + const uint8_t source = active_program_->source->halves.low.halves.low; + const uint8_t destination = active_program_->destination->halves.low.halves.low; + const int result = destination - source; + + zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + } break; + + case Operation::SUBw: { + const uint16_t source = active_program_->source->halves.low.full; + const uint16_t destination = active_program_->destination->halves.low.full; + const int result = destination - source; + + zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); + extend_flag_ = carry_flag_ = result & ~0xffff; + negative_flag_ = result & 0x8000; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x8000; + } break; + + case Operation::SUBl: { + const uint32_t source = active_program_->source->full; + const uint32_t destination = active_program_->destination->full; + const uint64_t result = destination - source; + + zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); + extend_flag_ = carry_flag_ = result >> 32; + negative_flag_ = result & 0x80000000; + overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80000000; + } break; + + case Operation::SUBAw: + active_program_->destination->full -= int16_t(active_program_->source->halves.low.full); + break; + + case Operation::SUBAl: + active_program_->destination->full -= active_program_->source->full; + break; + /* Development period debugging. */ diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 67c642a86..d41fd73a0 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -45,7 +45,11 @@ class ProcessorStorage { enum class Operation { None, ABCD, SBCD, - ADD, AND, EOR, OR, SUB, + + ADDb, ADDw, ADDl, + SUBb, SUBw, SUBl, + ADDAw, ADDAl, + SUBAw, SUBAl, MOVEb, MOVEw, MOVEl, MOVEq, MOVEAw, MOVEAl, From 39b9d00550718f2fbb209252b0f62e53714f80c8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 2 Apr 2019 21:50:58 -0400 Subject: [PATCH 051/239] Moves some way towards mapping out ADD and SUB, fixing a bug with address register modification. --- .../Implementation/68000Implementation.hpp | 24 +- .../68000/Implementation/68000Storage.cpp | 284 +++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 16 +- 3 files changed, 271 insertions(+), 53 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 8e6621634..5da7e0a60 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -401,33 +401,33 @@ template void Processor: break; case int(MicroOp::Action::Decrement1): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 1; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 1; break; case int(MicroOp::Action::Decrement2): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 2; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 2; break; case int(MicroOp::Action::Decrement4): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full -= 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full -= 4; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 4; break; case int(MicroOp::Action::Increment1): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 1; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 1; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 1; break; case int(MicroOp::Action::Increment2): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 2; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 2; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 2; break; case int(MicroOp::Action::Increment4): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source->full += 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination->full += 4; + if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 4; + if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 4; break; case int(MicroOp::Action::SignExtendWord): diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 695ad3c4a..13125ce22 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -236,11 +236,6 @@ struct ProcessorStorageConstructor { void install_instructions() { enum class Decoder { Decimal, - RegOpModeReg, - SizeModeRegisterImmediate, - DataSizeModeQuick, - ModeRegister, // six lowest bits are mode, then register. - MOVE, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. MOVEtoSR, // six lowest bits are [mode, register], decoding to MOVE SR CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI @@ -250,6 +245,7 @@ struct ProcessorStorageConstructor { MOVEq, // decodes just a destination register RESET, // no further decoding applied, performs reset cycle JMP, // six lowest bits are [mode, register], decoding to JMP + ADDSUB, }; using Operation = ProcessorStorage::Operation; @@ -277,10 +273,8 @@ struct ProcessorStorageConstructor { {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) // {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) -// {0xf000, 0x9000, Operation::SUB, Decoder::RegOpModeReg}, // 4-174 (p278) // {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) // {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) -// {0xf000, 0xd000, Operation::ADD, Decoder::RegOpModeReg}, // 4-4 (p108) // {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) @@ -304,6 +298,17 @@ struct ProcessorStorageConstructor { {0xffff, 0x4e70, Operation::None, Decoder::RESET}, // 6-83 (p537) {0xffc0, 0x4ec0, Operation::JMP, Decoder::JMP}, // 4-108 (p212) + + {0xf0c0, 0x9000, Operation::SUBb, Decoder::ADDSUB}, // 4-174 (p278) + {0xf0c0, 0x9040, Operation::SUBw, Decoder::ADDSUB}, // 4-174 (p278) + {0xf0c0, 0x9080, Operation::SUBl, Decoder::ADDSUB}, // 4-174 (p278) + + {0xf0c0, 0xd000, Operation::ADDb, Decoder::ADDSUB}, // 4-4 (p108) + {0xf0c0, 0xd040, Operation::ADDw, Decoder::ADDSUB}, // 4-4 (p108) + {0xf0c0, 0xd080, Operation::ADDl, Decoder::ADDSUB}, // 4-4 (p108) + +// {0xf1c0, 0xd0c0, Operation::ADDAw, Decoder::ADDSUB}, // 4-7 (p111) +// {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDSUB}, // 4-7 (p111) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -328,6 +333,212 @@ struct ProcessorStorageConstructor { const int source_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::ADDSUB: { + // ADD and SUB definitely always involve a data register and an arbitrary addressing mode; + // which direction they operate in depends on bit 8. + const bool reverse_source_destination = !(instruction & 256); + const int data_register = (instruction >> 9) & 7; + + const int mode = combined_mode(source_mode, source_register); + const bool is_byte_access = !!((instruction >> 6)&3); + const bool is_long_word_access = ((instruction >> 6)&3) == 2; + + if(reverse_source_destination) { + storage_.instructions[instruction].destination = &storage_.data_[data_register]; + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + storage_.instructions[instruction].source_address = &storage_.address_[source_register]; + + // Perform [ADD/SUB].blw , Dn + switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + default: continue; + + case 0x000: // ADD/SUB.bw Dn, Dn + storage_.instructions[instruction].source = &storage_.data_[source_register]; + op(Action::PerformOperation, seq("np")); + break; + + case 0x100: // ADD/SUB.l Dn, Dn + storage_.instructions[instruction].source = &storage_.data_[source_register]; + op(Action::PerformOperation, seq("np nn")); + break; + + case 0x001: // ADD/SUB.bw An, Dn + storage_.instructions[instruction].source = &storage_.address_[source_register]; + op(Action::PerformOperation, seq("np")); + break; + + case 0x101: // ADD/SUB.l An, Dn + storage_.instructions[instruction].source = &storage_.address_[source_register]; + op(Action::PerformOperation, seq("np nn")); + break; + + case 0x002: // ADD/SUB.bw (An), Dn + case 0x003: // ADD/SUB.bw (An)+, Dn + op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + if(mode == 0x03) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x102: // ADD/SUB.l (An), Dn + case 0x103: // ADD/SUB.l (An)+, Dn + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR nr np n", { &storage_.effective_address_[0].full })); + if(mode == 0x03) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x004: // ADD/SUB.bw -(An), Dn + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x104: // ADD/SUB.l -(An), Dn + op( int(Action::Decrement4) | MicroOp::SourceMask, + seq("n nR nr np n", { &storage_.address_[source_register].full })); + op(Action::PerformOperation); + break; + + case 0x010: // ADD/SUB.bw (xxx).w, Dn + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x110: // ADD/SUB.l (xxx).w, Dn + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR nr np n", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x011: // ADD/SUB.bw (xxx).l, Dn + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x111: // ADD/SUB.l (xxx).l, Dn + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR nr np n", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x012: // ADD/SUB.bw (d16, PC), Dn + case 0x013: // ADD/SUB.bw (d8, PC, Xn), Dn + case 0x005: // ADD/SUB.bw (d16, An), Dn + case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nr np", mode), { &storage_.effective_address_[0].full }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x112: // ADD/SUB.l (d16, PC), Dn + case 0x113: // ADD/SUB.l (d8, PC, Xn), Dn + case 0x105: // ADD/SUB.l (d16, An), Dn + case 0x106: // ADD/SUB.l (d8, An, Xn), Dn + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nR nr np n", mode), { &storage_.effective_address_[0].full })); + op(Action::PerformOperation); + break; + + case 0x014: // ADD/SUB.bw #, Dn + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation); + break; + + case 0x114: // ADD/SUB.l #, Dn + op(Action::None, seq("np")); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); + op(Action::PerformOperation); + break; + } + } else { + storage_.instructions[instruction].source = &storage_.data_[data_register]; + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; + storage_.instructions[instruction].destination_address = &storage_.address_[source_register]; + + // Perform [ADD/SUB].blw Dn, + switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + default: continue; + + case 0x002: // ADD/SUB.bw Dn, (An) + case 0x003: // ADD/SUB.bw Dn, (An)+ + op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { &storage_.address_[source_register].full }, !is_byte_access)); + if(mode == 0x03) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case 0x102: // ADD/SUB.l Dn, (An) + case 0x103: // ADD/SUB.l Dn, (An)+ + op(Action::None, seq("nR nr np", { &storage_.address_[source_register].full })); + op(Action::PerformOperation, seq("nw nW", { &storage_.address_[source_register].full })); + if(mode == 0x03) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; + + case 0x004: // ADD/SUB.bw Dn, -(An) +// op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, +// seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); +// op(Action::PerformOperation); + continue; + + case 0x104: // ADD/SUB.l Dn, -(An) +// op( int(Action::Decrement4) | MicroOp::SourceMask, +// seq("n nR nr np n", { &storage_.address_[source_register].full })); +// op(Action::PerformOperation); + continue; + + case 0x010: // ADD/SUB.bw Dn, (xxx).w +// op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, +// seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); +// op(Action::PerformOperation); + continue; + + case 0x110: // ADD/SUB.l Dn, (xxx).w +// op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, +// seq("np nR nr np n", { &storage_.effective_address_[0].full })); +// op(Action::PerformOperation); + continue; + + case 0x011: // ADD/SUB.bw Dn, (xxx).l +// op(Action::None, seq("np")); +// op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, +// seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); +// op(Action::PerformOperation); + continue; + + case 0x111: // ADD/SUB.l Dn, (xxx).l +// op(Action::None, seq("np")); +// op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, +// seq("np nR nr np n", { &storage_.effective_address_[0].full })); +// op(Action::PerformOperation); + continue; + + case 0x005: // ADD/SUB.bw (d16, An), Dn + case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn +// op( calc_action_for_mode(mode) | MicroOp::SourceMask, +// seq(pseq("np nr np", mode), { &storage_.effective_address_[0].full }, !is_byte_access)); +// op(Action::PerformOperation); + continue; + + case 0x105: // ADD/SUB.l (d16, An), Dn + case 0x106: // ADD/SUB.l (d8, An, Xn), Dn +// op( calc_action_for_mode(mode) | MicroOp::SourceMask, +// seq(pseq("np nR nr np n", mode), { &storage_.effective_address_[0].full })); +// op(Action::PerformOperation); + continue; + } + } + } break; + // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. case Decoder::Bcc: { op(Action::PerformOperation); @@ -341,19 +552,20 @@ struct ProcessorStorageConstructor { // Decodes the format used by ABCD and SBCD. case Decoder::Decimal: { - const int destination = (instruction >> 9) & 7; - const int source = instruction & 7; + const int destination_register = (instruction >> 9) & 7; if(instruction & 8) { storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; + storage_.instructions[instruction].source_address = &storage_.address_[source_register]; + storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, - seq("n nr nr np nw", { &storage_.address_[source].full, &storage_.address_[destination].full, &storage_.address_[destination].full }, false)); + seq("n nr nr np nw", { &storage_.address_[source_register].full, &storage_.address_[destination_register].full, &storage_.address_[destination_register].full }, false)); op(Action::PerformOperation); } else { - storage_.instructions[instruction].source = &storage_.data_[source]; - storage_.instructions[instruction].destination = &storage_.data_[destination]; + storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].destination = &storage_.data_[destination_register]; op(Action::PerformOperation, seq("np n")); } @@ -386,7 +598,7 @@ struct ProcessorStorageConstructor { case 0x002: // CMPI.bw #, (An) case 0x003: // CMPI.bw #, (An)+ op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(mode == 0x3) { + if(mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } op(Action::PerformOperation); @@ -564,7 +776,7 @@ struct ProcessorStorageConstructor { case 0x02: // MOVE (An), SR case 0x03: // MOVE (An)+, SR op(Action::None, seq("nr nn nn np", { &storage_.address_[source_register].full })); - if(source_mode == 0x3) { + if(source_mode == 0x03) { op(int(Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -627,6 +839,7 @@ struct ProcessorStorageConstructor { default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + storage_.instructions[instruction].source_address = &storage_.source_bus_data_[source_register]; break; } @@ -641,6 +854,7 @@ struct ProcessorStorageConstructor { default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; + storage_.instructions[instruction].destination = &storage_.source_bus_data_[destination_register]; break; } @@ -707,7 +921,7 @@ struct ProcessorStorageConstructor { case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR nr np", { &storage_.effective_address_[0].full })); - if(source_mode == 0x3) { + if(source_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -716,7 +930,7 @@ struct ProcessorStorageConstructor { case 0x00200: // MOVE.bw (An), Dn case 0x00300: // MOVE.bw (An)+, Dn op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - if(source_mode == 0x3) { + if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -797,7 +1011,7 @@ struct ProcessorStorageConstructor { case 0x10003: // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op(Action::SetMoveFlagsl, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -805,7 +1019,7 @@ struct ProcessorStorageConstructor { case 0x00002: // MOVE.bw Dn, (An) case 0x00003: // MOVE.bw Dn, (An)+ op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -817,11 +1031,11 @@ struct ProcessorStorageConstructor { op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(source_mode == 0x3 || destination_mode == 0x3) { + if(source_mode == 0x03 || destination_mode == 0x03) { op( increment_action | - (source_mode == 0x3 ? MicroOp::SourceMask : 0) | - (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); + (source_mode == 0x03 ? MicroOp::SourceMask : 0) | + (source_mode == 0x03 ? MicroOp::DestinationMask : 0)); } break; @@ -831,11 +1045,11 @@ struct ProcessorStorageConstructor { case 0x00303: // MOVE.bw (An)+, (An)+ op(Action::None, seq("nr", { &storage_.address_[source_register].full })); op(Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full })); - if(source_mode == 0x3 || destination_mode == 0x3) { + if(source_mode == 0x03 || destination_mode == 0x03) { op( increment_action | - (source_mode == 0x3 ? MicroOp::SourceMask : 0) | - (source_mode == 0x3 ? MicroOp::DestinationMask : 0)); + (source_mode == 0x03 ? MicroOp::SourceMask : 0) | + (source_mode == 0x03 ? MicroOp::DestinationMask : 0)); } break; @@ -845,7 +1059,7 @@ struct ProcessorStorageConstructor { op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("n nR nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -854,7 +1068,7 @@ struct ProcessorStorageConstructor { case 0x00403: // MOVE.bw -(An), (An)+ op(decrement_action | MicroOp::SourceMask, seq("n nR nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -872,7 +1086,7 @@ struct ProcessorStorageConstructor { seq(pseq("np nR nr", both_modes >> 8), { &storage_.effective_address_[0].full })); op( Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -890,7 +1104,7 @@ struct ProcessorStorageConstructor { !is_byte_access)); op( Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -902,7 +1116,7 @@ struct ProcessorStorageConstructor { seq("np nR nr", { &storage_.effective_address_[0].full })); op( Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -913,7 +1127,7 @@ struct ProcessorStorageConstructor { seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -925,7 +1139,7 @@ struct ProcessorStorageConstructor { seq("np nR nr", { &storage_.effective_address_[0].full })); op( Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -937,7 +1151,7 @@ struct ProcessorStorageConstructor { seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -947,7 +1161,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( Action::PerformOperation, seq("np nW nw np", { &storage_.effective_address_[1].full }) ); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -956,7 +1170,7 @@ struct ProcessorStorageConstructor { case 0x01403: // MOVE.bw #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np nw np", { &storage_.data_[destination_register].full }, !is_byte_access) ); - if(destination_mode == 0x3) { + if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1100,7 +1314,7 @@ struct ProcessorStorageConstructor { case 0x00311: // MOVE.bw (An)+, (xxx).L op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); - if(source_mode == 0x3) { + if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index d41fd73a0..184a661e2 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -129,18 +129,18 @@ class ProcessorStorage { in deciding where to apply their actions. */ - /// Subtracts 1. + /// Subtracts 1 from the [source/destination]_address. Decrement1, - /// Subtracts 2. + /// Subtracts 2 from the [source/destination]_address. Decrement2, - /// Subtracts 4. + /// Subtracts 4 from the [source/destination]_address. Decrement4, - /// Adds 1. + /// Adds 1 from the [source/destination]_address. Increment1, - /// Adds 2. + /// Adds 2 from the [source/destination]_address. Increment2, - /// Adds 4. + /// Adds 4 from the [source/destination]_address. Increment4, /// Copies the source and/or destination to effective_address_. @@ -209,10 +209,13 @@ class ProcessorStorage { MicroOp *micro_operations = nullptr; RegisterPair32 *source = nullptr; RegisterPair32 *destination = nullptr; + RegisterPair32 *source_address = nullptr; + RegisterPair32 *destination_address = nullptr; Operation operation; bool requires_supervisor = false; void set_source(ProcessorStorage &storage, int mode, int reg) { + source_address = &storage.address_[reg]; switch(mode) { case 0: source = &storage.data_[reg]; break; case 1: source = &storage.address_[reg]; break; @@ -221,6 +224,7 @@ class ProcessorStorage { } void set_destination(ProcessorStorage &storage, int mode, int reg) { + destination_address = &storage.address_[reg]; switch(mode) { case 0: destination = &storage.data_[reg]; break; case 1: destination = &storage.address_[reg]; break; From 689ba1d4a27145cfcca52120f4eb3dd0c1e23bc4 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 3 Apr 2019 19:13:10 -0400 Subject: [PATCH 052/239] Effective address adjustments now have to be explicit. --- .../Implementation/68000Implementation.hpp | 2 + .../68000/Implementation/68000Storage.cpp | 112 +++++++++++------- .../68000/Implementation/68000Storage.hpp | 6 + 3 files changed, 74 insertions(+), 46 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 5da7e0a60..4c3d05821 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -595,6 +595,8 @@ template void Processor: case BusStep::Action::IncrementEffectiveAddress0: effective_address_[0].full += 2; break; case BusStep::Action::IncrementEffectiveAddress1: effective_address_[1].full += 2; break; + case BusStep::Action::DecrementEffectiveAddress0: effective_address_[0].full -= 2; break; + case BusStep::Action::DecrementEffectiveAddress1: effective_address_[1].full -= 2; break; case BusStep::Action::IncrementProgramCounter: program_counter_.full += 2; break; case BusStep::Action::AdvancePrefetch: diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 13125ce22..c49ba4422 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -81,13 +81,17 @@ struct ProcessorStorageConstructor { state and something about what's observable on the bus, but it's helpful to stick to that document's coding exactly for easier debugging. - p fetches will fill the prefetch queue, attaching an action to both the + np fetches will fill the prefetch queue, attaching an action to both the step that precedes them and to themselves. The SSP fetches will go straight to the SSP. Other actions will by default act via effective_address_ and bus_data_. The user should fill in the steps necessary to get data into or extract data from those. + + nr/nw-type operations may have a + or - suffix; if such a suffix is attached + then the corresponding effective address will be incremented or decremented + by two after the cycle has completed. */ size_t assemble_program(std::string access_pattern, const std::vector &addresses = {}, bool read_full_words = true) { auto address_iterator = addresses.begin(); @@ -101,6 +105,20 @@ struct ProcessorStorageConstructor { while(stream >> token) { ProcessorBase::BusStep step; + // Check for a plus-or-minus suffix. + int post_adjustment = 0; + if(token.back() == '-' || token.back() == '+') { + if(token.back() == '-') { + post_adjustment = -1; + } + + if(token.back() == '+') { + post_adjustment = 1; + } + + token.pop_back(); + } + // Do nothing (possibly twice). if(token == "n" || token == "nn") { steps.push_back(step); @@ -182,11 +200,13 @@ struct ProcessorStorageConstructor { step.microcycle.length = HalfCycles(3); step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); - if(token[1] == 'R') { - step.action = Action::IncrementEffectiveAddress0; - } - if(token[1] == 'W') { - step.action = Action::IncrementEffectiveAddress1; + if(post_adjustment) { + if(tolower(token[1]) == 'r') { + step.action = (post_adjustment > 0) ? Action::IncrementEffectiveAddress0 : Action::DecrementEffectiveAddress0; + } else { + step.action = (post_adjustment > 0) ? Action::IncrementEffectiveAddress1 : Action::DecrementEffectiveAddress1; + + } } steps.push_back(step); @@ -383,7 +403,7 @@ struct ProcessorStorageConstructor { case 0x102: // ADD/SUB.l (An), Dn case 0x103: // ADD/SUB.l (An)+, Dn - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR nr np n", { &storage_.effective_address_[0].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { &storage_.effective_address_[0].full })); if(mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } @@ -398,7 +418,7 @@ struct ProcessorStorageConstructor { case 0x104: // ADD/SUB.l -(An), Dn op( int(Action::Decrement4) | MicroOp::SourceMask, - seq("n nR nr np n", { &storage_.address_[source_register].full })); + seq("n nR+ nr np n", { &storage_.address_[source_register].full })); op(Action::PerformOperation); break; @@ -410,7 +430,7 @@ struct ProcessorStorageConstructor { case 0x110: // ADD/SUB.l (xxx).w, Dn op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR nr np n", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np n", { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -424,7 +444,7 @@ struct ProcessorStorageConstructor { case 0x111: // ADD/SUB.l (xxx).l, Dn op(Action::None, seq("np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR nr np n", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np n", { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -442,7 +462,7 @@ struct ProcessorStorageConstructor { case 0x105: // ADD/SUB.l (d16, An), Dn case 0x106: // ADD/SUB.l (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nR nr np n", mode), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr np n", mode), { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -477,11 +497,11 @@ struct ProcessorStorageConstructor { case 0x102: // ADD/SUB.l Dn, (An) case 0x103: // ADD/SUB.l Dn, (An)+ - op(Action::None, seq("nR nr np", { &storage_.address_[source_register].full })); - op(Action::PerformOperation, seq("nw nW", { &storage_.address_[source_register].full })); - if(mode == 0x03) { - op(int(Action::Increment4) | MicroOp::DestinationMask); - } +// op(Action::None, seq("nR+ nr np", { &storage_.address_[source_register].full })); +// op(Action::PerformOperation, seq("nw nW", { &storage_.address_[source_register].full })); +// if(mode == 0x03) { +// op(int(Action::Increment4) | MicroOp::DestinationMask); +// } break; case 0x004: // ADD/SUB.bw Dn, -(An) @@ -607,7 +627,7 @@ struct ProcessorStorageConstructor { case 0x102: // CMPI.l #, (An) case 0x103: // CMPI.l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd+ nrd np", { &storage_.effective_address_[1].full })); if(mode == 0x103) { op(int(Action::Increment4) | MicroOp::DestinationMask); } @@ -623,7 +643,7 @@ struct ProcessorStorageConstructor { case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -644,7 +664,7 @@ struct ProcessorStorageConstructor { op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nRd nrd np", mode), { &storage_.effective_address_[1].full })); + seq(pseq("np nRd+ nrd np", mode), { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -657,7 +677,7 @@ struct ProcessorStorageConstructor { case 0x110: // CMPI.l #, (xxx).w op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd+ nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -670,7 +690,7 @@ struct ProcessorStorageConstructor { case 0x111: // CMPI.l #, (xxx).l op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { &storage_.effective_address_[1].full })); op(Action::PerformOperation); break; @@ -920,7 +940,7 @@ struct ProcessorStorageConstructor { case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR nr np", { &storage_.effective_address_[0].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { &storage_.effective_address_[0].full })); if(source_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } @@ -937,7 +957,7 @@ struct ProcessorStorageConstructor { break; case 0x10400: // MOVE.l -(An), Dn - op(decrement_action | MicroOp::SourceMask, seq("n nR nr np", { &storage_.address_[source_register].full })); + op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr np", { &storage_.address_[source_register].full })); op(Action::PerformOperation); break; @@ -951,7 +971,7 @@ struct ProcessorStorageConstructor { case 0x11200: // MOVE.l (d16, PC), Dn case 0x11300: // MOVE.l (d8, PC, Xn), Dn op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR nr np", both_modes >> 8), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr np", both_modes >> 8), { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -968,7 +988,7 @@ struct ProcessorStorageConstructor { case 0x11000: // MOVE.l (xxx).W, Dn op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR nr np", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np", { &storage_.effective_address_[0].full })); op(Action::PerformOperation); break; @@ -981,7 +1001,7 @@ struct ProcessorStorageConstructor { case 0x11100: // MOVE.l (xxx).L, Dn op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("np")); break; @@ -1010,7 +1030,7 @@ struct ProcessorStorageConstructor { case 0x10002: // MOVE.l Dn, (An) case 0x10003: // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); - op(Action::SetMoveFlagsl, seq("nW nw np", { &storage_.effective_address_[1].full })); + op(Action::SetMoveFlagsl, seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1029,8 +1049,8 @@ struct ProcessorStorageConstructor { case 0x10203: // MOVE.l (An), (An)+ case 0x10303: // MOVE.l (An)+, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, - seq("nR nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); + seq("nR+ nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(source_mode == 0x03 || destination_mode == 0x03) { op( increment_action | @@ -1057,8 +1077,8 @@ struct ProcessorStorageConstructor { case 0x10403: // MOVE.l -(An), (An)+ op(decrement_action | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, - seq("n nR nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); + seq("n nR+ nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1066,8 +1086,8 @@ struct ProcessorStorageConstructor { case 0x00402: // MOVE.bw -(An), (An) case 0x00403: // MOVE.bw -(An), (An)+ - op(decrement_action | MicroOp::SourceMask, seq("n nR nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW nw np", { &storage_.effective_address_[1].full })); + op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr", { &storage_.effective_address_[0].full })); + op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1083,9 +1103,9 @@ struct ProcessorStorageConstructor { case 0x11303: // MOVE.bw (d8, PC, Xn), (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR nr", both_modes >> 8), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr", both_modes >> 8), { &storage_.effective_address_[0].full })); op( Action::PerformOperation, - seq("nW nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1113,9 +1133,9 @@ struct ProcessorStorageConstructor { case 0x11003: // MOVE.l (xxx).W, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask ); op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR nr", { &storage_.effective_address_[0].full })); + seq("np nR+ nr", { &storage_.effective_address_[0].full })); op( Action::PerformOperation, - seq("nW nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1136,9 +1156,9 @@ struct ProcessorStorageConstructor { case 0x11103: // MOVE.l (xxx).l, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR nr", { &storage_.effective_address_[0].full })); + seq("np nR+ nr", { &storage_.effective_address_[0].full })); op( Action::PerformOperation, - seq("nW nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { &storage_.effective_address_[1].full })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1160,7 +1180,7 @@ struct ProcessorStorageConstructor { case 0x11403: // MOVE.l #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); - op( Action::PerformOperation, seq("np nW nw np", { &storage_.effective_address_[1].full }) ); + op( Action::PerformOperation, seq("np nW+ nw np", { &storage_.effective_address_[1].full }) ); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1286,7 +1306,7 @@ struct ProcessorStorageConstructor { case 0x11410: // MOVE.l #, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); op(Action::SetMoveFlagsl); break; @@ -1349,22 +1369,22 @@ struct ProcessorStorageConstructor { break; case 0x11011: // MOVE.l (xxx).W, (xxx).L - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW nw np np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { &storage_.effective_address_[1].full })); break; case 0x11111: // MOVE.l (xxx).l, (xxx).l op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR nr", { &storage_.effective_address_[0].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW nw np np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { &storage_.effective_address_[1].full })); break; case 0x11411: // MOVE.l #, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW nw np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { &storage_.effective_address_[1].full })); op(Action::SetMoveFlagsl); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 184a661e2..d648c6806 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -76,6 +76,12 @@ class ProcessorStorage { /// Performs effective_address_[1] += 2. IncrementEffectiveAddress1, + /// Performs effective_address_[0] -= 2. + DecrementEffectiveAddress0, + + /// Performs effective_address_[1] -= 2. + DecrementEffectiveAddress1, + /// Performs program_counter_ += 2. IncrementProgramCounter, From 73e1c8c7808e59aff9029de02531967acab68096 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 3 Apr 2019 19:43:54 -0400 Subject: [PATCH 053/239] Corrects now-unimplemented ADD/SUB. --- OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm | 2 +- Processors/68000/Implementation/68000Storage.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 80fdc95a4..49d935bf4 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -92,7 +92,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { // Put teardown code here. This method is called after the invocation of each test method in the class. } -- (void)testExample { +- (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. _machine->run_for(HalfCycles(4000)); diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index c49ba4422..c7039e33d 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -502,7 +502,7 @@ struct ProcessorStorageConstructor { // if(mode == 0x03) { // op(int(Action::Increment4) | MicroOp::DestinationMask); // } - break; + continue; case 0x004: // ADD/SUB.bw Dn, -(An) // op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, @@ -859,7 +859,7 @@ struct ProcessorStorageConstructor { default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; - storage_.instructions[instruction].source_address = &storage_.source_bus_data_[source_register]; + storage_.instructions[instruction].source_address = &storage_.address_[source_register]; break; } @@ -874,7 +874,7 @@ struct ProcessorStorageConstructor { default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; - storage_.instructions[instruction].destination = &storage_.source_bus_data_[destination_register]; + storage_.instructions[instruction].destination = &storage_.address_[destination_register]; break; } From bfd405613c4df56b39dc21cfd915e4dac5e643aa Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 3 Apr 2019 21:27:11 -0400 Subject: [PATCH 054/239] Reuse of addresses is also no longer implicit. --- .../Implementation/68000Implementation.hpp | 8 +- .../68000/Implementation/68000Storage.cpp | 192 +++++++++--------- 2 files changed, 103 insertions(+), 97 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 4c3d05821..339378308 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -539,16 +539,16 @@ template void Processor: break; case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::SourceMask: - effective_address_[0] = *active_program_->source; + effective_address_[0] = *active_program_->source_address; break; case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::DestinationMask: - effective_address_[1] = *active_program_->destination; + effective_address_[1] = *active_program_->destination_address; break; case int(MicroOp::Action::CopyToEffectiveAddress) | MicroOp::SourceMask | MicroOp::DestinationMask: - effective_address_[0] = *active_program_->source; - effective_address_[1] = *active_program_->destination; + effective_address_[0] = *active_program_->source_address; + effective_address_[1] = *active_program_->destination_address; break; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index c7039e33d..2235f2f28 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -192,6 +192,8 @@ struct ProcessorStorageConstructor { const bool use_source_storage = is_read && token.size() != 3; RegisterPair32 *scratch_data = use_source_storage ? &storage_.source_bus_data_[0] : &storage_.destination_bus_data_[0]; + assert(address_iterator != addresses.end()); + step.microcycle.length = HalfCycles(5); step.microcycle.operation = Microcycle::NewAddress | (is_read ? Microcycle::Read : 0); step.microcycle.address = *address_iterator; @@ -209,10 +211,7 @@ struct ProcessorStorageConstructor { } } steps.push_back(step); - - if(!isupper(token[1])) { - ++address_iterator; - } + ++address_iterator; continue; } @@ -340,6 +339,8 @@ struct ProcessorStorageConstructor { #define op(...) storage_.all_micro_ops_.emplace_back(__VA_ARGS__) #define seq(...) &arbitrary_base + assemble_program(__VA_ARGS__) +#define ea(n) &storage_.effective_address_[n].full +#define a(n) &storage_.address_[n].full // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { @@ -394,7 +395,7 @@ struct ProcessorStorageConstructor { case 0x002: // ADD/SUB.bw (An), Dn case 0x003: // ADD/SUB.bw (An)+, Dn - op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); if(mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } @@ -403,7 +404,8 @@ struct ProcessorStorageConstructor { case 0x102: // ADD/SUB.l (An), Dn case 0x103: // ADD/SUB.l (An)+, Dn - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { &storage_.effective_address_[0].full })); + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, + seq("nR+ nr np n", { ea(0), ea(0) })); if(mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } @@ -412,39 +414,40 @@ struct ProcessorStorageConstructor { case 0x004: // ADD/SUB.bw -(An), Dn op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, - seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + seq("n nr np", { a(source_register) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x104: // ADD/SUB.l -(An), Dn - op( int(Action::Decrement4) | MicroOp::SourceMask, - seq("n nR+ nr np n", { &storage_.address_[source_register].full })); + op(int(Action::Decrement4) | MicroOp::SourceMask); + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, + seq("n nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; case 0x010: // ADD/SUB.bw (xxx).w, Dn op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x110: // ADD/SUB.l (xxx).w, Dn op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np n", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; case 0x011: // ADD/SUB.bw (xxx).l, Dn op(Action::None, seq("np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x111: // ADD/SUB.l (xxx).l, Dn op(Action::None, seq("np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np n", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; @@ -453,7 +456,7 @@ struct ProcessorStorageConstructor { case 0x005: // ADD/SUB.bw (d16, An), Dn case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nr np", mode), { &storage_.effective_address_[0].full }, !is_byte_access)); + seq(pseq("np nr np", mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -462,7 +465,7 @@ struct ProcessorStorageConstructor { case 0x105: // ADD/SUB.l (d16, An), Dn case 0x106: // ADD/SUB.l (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nR+ nr np n", mode), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr np n", mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; @@ -488,8 +491,8 @@ struct ProcessorStorageConstructor { case 0x002: // ADD/SUB.bw Dn, (An) case 0x003: // ADD/SUB.bw Dn, (An)+ - op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); - op(Action::PerformOperation, seq("nw", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(source_register) }, !is_byte_access)); if(mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } @@ -497,12 +500,12 @@ struct ProcessorStorageConstructor { case 0x102: // ADD/SUB.l Dn, (An) case 0x103: // ADD/SUB.l Dn, (An)+ -// op(Action::None, seq("nR+ nr np", { &storage_.address_[source_register].full })); -// op(Action::PerformOperation, seq("nw nW", { &storage_.address_[source_register].full })); -// if(mode == 0x03) { -// op(int(Action::Increment4) | MicroOp::DestinationMask); -// } - continue; + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask , seq("nR+ nr np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + if(mode == 0x03) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; case 0x004: // ADD/SUB.bw Dn, -(An) // op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, @@ -581,7 +584,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, - seq("n nr nr np nw", { &storage_.address_[source_register].full, &storage_.address_[destination_register].full, &storage_.address_[destination_register].full }, false)); + seq("n nr nr np nw", { a(source_register), a(destination_register), a(destination_register) }, false)); op(Action::PerformOperation); } else { storage_.instructions[instruction].source = &storage_.data_[source_register]; @@ -617,7 +620,7 @@ struct ProcessorStorageConstructor { case 0x002: // CMPI.bw #, (An) case 0x003: // CMPI.bw #, (An)+ - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(destination_register) }, !is_byte_access)); if(mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } @@ -627,7 +630,7 @@ struct ProcessorStorageConstructor { case 0x102: // CMPI.l #, (An) case 0x103: // CMPI.l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd+ nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); if(mode == 0x103) { op(int(Action::Increment4) | MicroOp::DestinationMask); } @@ -636,14 +639,14 @@ struct ProcessorStorageConstructor { case 0x004: // CMPI.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { &storage_.address_[destination_register].full })); + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) })); op(Action::PerformOperation); break; case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; @@ -653,7 +656,7 @@ struct ProcessorStorageConstructor { case 0x006: // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("nrd np", mode), { &storage_.effective_address_[1].full }, !is_byte_access)); + seq(pseq("nrd np", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -664,33 +667,33 @@ struct ProcessorStorageConstructor { op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nRd+ nrd np", mode), { &storage_.effective_address_[1].full })); + seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); op(Action::PerformOperation); break; case 0x010: // CMPI.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x110: // CMPI.l #, (xxx).w op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd+ nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; case 0x011: // CMPI.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x111: // CMPI.l #, (xxx).l op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; @@ -710,13 +713,13 @@ struct ProcessorStorageConstructor { case 0x12: // JMP (d16, PC) case 0x05: // JMP (d16, An) - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np np", { &storage_.effective_address_[0].full })); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np np")); op(Action::PerformOperation); break; case 0x13: // JMP (d8, PC, Xn) case 0x06: // JMP (d8, An, Xn) - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np np", { &storage_.effective_address_[0].full })); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np np")); op(Action::PerformOperation); break; @@ -795,7 +798,7 @@ struct ProcessorStorageConstructor { case 0x02: // MOVE (An), SR case 0x03: // MOVE (An)+, SR - op(Action::None, seq("nr nn nn np", { &storage_.address_[source_register].full })); + op(Action::None, seq("nr nn nn np", { a(source_register) })); if(source_mode == 0x03) { op(int(Action::Increment2) | MicroOp::SourceMask); } @@ -803,7 +806,7 @@ struct ProcessorStorageConstructor { break; case 0x04: // MOVE -(An), SR - op(Action::Decrement2, seq("n nr nn nn np", { &storage_.address_[source_register].full })); + op(Action::Decrement2, seq("n nr nn nn np", { a(source_register) })); op(Action::PerformOperation); break; @@ -811,20 +814,20 @@ struct ProcessorStorageConstructor { case 0x13: // MOVE (d8, PC, Xn), SR case 0x05: // MOVE (d16, An), SR case 0x06: // MOVE (d8, An, Xn), SR - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np", mode), { &storage_.effective_address_[0].full })); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np", mode), { ea(0) })); op(Action::PerformOperation); break; case 0x10: // MOVE (xxx).W, SR op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr nn nn np", { &storage_.effective_address_[0].full })); + seq("np nr nn nn np", { ea(0) })); op(Action::PerformOperation); break; case 0x11: // MOVE (xxx).L, SR op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full })); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); op(Action::PerformOperation, seq("nn nn np")); break; @@ -940,7 +943,7 @@ struct ProcessorStorageConstructor { case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { &storage_.effective_address_[0].full })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); if(source_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } @@ -949,7 +952,7 @@ struct ProcessorStorageConstructor { case 0x00200: // MOVE.bw (An), Dn case 0x00300: // MOVE.bw (An)+, Dn - op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } @@ -957,12 +960,13 @@ struct ProcessorStorageConstructor { break; case 0x10400: // MOVE.l -(An), Dn - op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr np", { &storage_.address_[source_register].full })); + op(decrement_action | MicroOp::SourceMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); break; case 0x00400: // MOVE.bw -(An), Dn - op(decrement_action | MicroOp::SourceMask, seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(source_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -971,7 +975,7 @@ struct ProcessorStorageConstructor { case 0x11200: // MOVE.l (d16, PC), Dn case 0x11300: // MOVE.l (d8, PC, Xn), Dn op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR+ nr np", both_modes >> 8), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr np", both_modes >> 8), { ea(0), ea(0) })); op(Action::PerformOperation); break; @@ -980,7 +984,7 @@ struct ProcessorStorageConstructor { case 0x01200: // MOVE.bw (d16, PC), Dn case 0x01300: // MOVE.bw (d8, PC, Xn), Dn op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nr np", both_modes >> 8), { &storage_.effective_address_[0].full }, + seq(pseq("np nr np", both_modes >> 8), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -988,26 +992,26 @@ struct ProcessorStorageConstructor { case 0x11000: // MOVE.l (xxx).W, Dn op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np", { &storage_.effective_address_[0].full })); + seq("np nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); break; case 0x01000: // MOVE.bw (xxx).W, Dn op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); + seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; case 0x11100: // MOVE.l (xxx).L, Dn op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); break; case 0x01100: // MOVE.bw (xxx).L, Dn op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); break; @@ -1030,7 +1034,7 @@ struct ProcessorStorageConstructor { case 0x10002: // MOVE.l Dn, (An) case 0x10003: // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); - op(Action::SetMoveFlagsl, seq("nW+ nw np", { &storage_.effective_address_[1].full })); + op(Action::SetMoveFlagsl, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1038,7 +1042,7 @@ struct ProcessorStorageConstructor { case 0x00002: // MOVE.bw Dn, (An) case 0x00003: // MOVE.bw Dn, (An)+ - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1049,8 +1053,8 @@ struct ProcessorStorageConstructor { case 0x10203: // MOVE.l (An), (An)+ case 0x10303: // MOVE.l (An)+, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, - seq("nR+ nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); + seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); if(source_mode == 0x03 || destination_mode == 0x03) { op( increment_action | @@ -1063,8 +1067,8 @@ struct ProcessorStorageConstructor { case 0x00302: // MOVE.bw (An)+, (An) case 0x00203: // MOVE.bw (An), (An)+ case 0x00303: // MOVE.bw (An)+, (An)+ - op(Action::None, seq("nr", { &storage_.address_[source_register].full })); - op(Action::PerformOperation, seq("nw np", { &storage_.address_[destination_register].full })); + op(Action::None, seq("nr", { a(source_register) })); + op(Action::PerformOperation, seq("nw np", { a(destination_register) })); if(source_mode == 0x03 || destination_mode == 0x03) { op( increment_action | @@ -1077,8 +1081,8 @@ struct ProcessorStorageConstructor { case 0x10403: // MOVE.l -(An), (An)+ op(decrement_action | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, - seq("n nR+ nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); + seq("n nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1086,8 +1090,8 @@ struct ProcessorStorageConstructor { case 0x00402: // MOVE.bw -(An), (An) case 0x00403: // MOVE.bw -(An), (An)+ - op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr", { &storage_.effective_address_[0].full })); - op(Action::PerformOperation, seq("nW+ nw np", { &storage_.effective_address_[1].full })); + op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1103,9 +1107,9 @@ struct ProcessorStorageConstructor { case 0x11303: // MOVE.bw (d8, PC, Xn), (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR+ nr", both_modes >> 8), { &storage_.effective_address_[0].full })); + seq(pseq("np nR+ nr", both_modes >> 8), { ea(0), ea(0) })); op( Action::PerformOperation, - seq("nW+ nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1120,10 +1124,10 @@ struct ProcessorStorageConstructor { case 0x01302: // MOVE.bw (d8, PC, Xn), (An) case 0x01303: // MOVE.bw (d8, PC, Xn), (An)+ op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nr", both_modes >> 8), { &storage_.effective_address_[0].full }, + seq(pseq("np nr", both_modes >> 8), { ea(0) }, !is_byte_access)); op( Action::PerformOperation, - seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1133,9 +1137,9 @@ struct ProcessorStorageConstructor { case 0x11003: // MOVE.l (xxx).W, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask ); op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr", { &storage_.effective_address_[0].full })); + seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, - seq("nW+ nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1144,9 +1148,9 @@ struct ProcessorStorageConstructor { case 0x01002: // MOVE.bw (xxx).W, (An) case 0x01003: // MOVE.bw (xxx).W, (An)+ op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + seq("np nr", { ea(0) }, !is_byte_access)); op( Action::PerformOperation, - seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1156,9 +1160,9 @@ struct ProcessorStorageConstructor { case 0x11103: // MOVE.l (xxx).l, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr", { &storage_.effective_address_[0].full })); + seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, - seq("nW+ nw np", { &storage_.effective_address_[1].full })); + seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1168,9 +1172,9 @@ struct ProcessorStorageConstructor { case 0x01103: // MOVE.bw (xxx).l, (An)+ op( Action::None, seq("np")); op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + seq("np nr", { ea(0) }, !is_byte_access)); op( Action::PerformOperation, - seq("nw np", { &storage_.address_[destination_register].full }, !is_byte_access)); + seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1180,7 +1184,7 @@ struct ProcessorStorageConstructor { case 0x11403: // MOVE.l #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); - op( Action::PerformOperation, seq("np nW+ nw np", { &storage_.effective_address_[1].full }) ); + op( Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) }) ); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1189,7 +1193,7 @@ struct ProcessorStorageConstructor { case 0x01402: // MOVE.bw #, (An) case 0x01403: // MOVE.bw #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; - op(Action::PerformOperation, seq("np nw np", { &storage_.data_[destination_register].full }, !is_byte_access) ); + op(Action::PerformOperation, seq("np nw np", { a(destination_register) }, !is_byte_access) ); if(destination_mode == 0x03) { op(increment_action | MicroOp::DestinationMask); } @@ -1201,7 +1205,7 @@ struct ProcessorStorageConstructor { case 0x0004: // MOVE Dn, -(An) op( decrement_action | MicroOp::DestinationMask, - seq("np nw", { &storage_.address_[destination_register].full }, !is_byte_access)); + seq("np nw", { a(destination_register) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; @@ -1233,12 +1237,12 @@ struct ProcessorStorageConstructor { case 0x0005: // MOVE Dn, (d16, An) op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + op(Action::PerformOperation, seq("nw np", { ea(1) })); break; case 0x0006: // MOVE Dn, (d8, An, Xn) op(int(Action::CalcD8AnXn) | MicroOp::DestinationMask, seq("n np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + op(Action::PerformOperation, seq("nw np", { ea(1) })); break; case 0x0205: // MOVE (An), (d16, An) @@ -1285,7 +1289,7 @@ struct ProcessorStorageConstructor { case 0x0010: // MOVE Dn, (xxx).W op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full })); + op(Action::PerformOperation, seq("nw np", { ea(1) })); break; case 0x0210: // MOVE (An), (xxx).W @@ -1306,7 +1310,7 @@ struct ProcessorStorageConstructor { case 0x11410: // MOVE.l #, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); op(Action::SetMoveFlagsl); break; @@ -1316,7 +1320,7 @@ struct ProcessorStorageConstructor { case 0x01410: // MOVE.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; @@ -1327,12 +1331,12 @@ struct ProcessorStorageConstructor { case 0x00011: // MOVE.bw Dn, (xxx).L op(Action::None, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; case 0x00211: // MOVE.bw (An), (xxx).L case 0x00311: // MOVE.bw (An)+, (xxx).L - op(Action::None, seq("nr np", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); @@ -1350,41 +1354,41 @@ struct ProcessorStorageConstructor { continue; case 0x01011: // MOVE.bw (xxx).W, (xxx).L - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); continue; case 0x01111: // MOVE.bw (xxx).l, (xxx).l op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { &storage_.effective_address_[0].full }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { &storage_.effective_address_[1].full }, !is_byte_access)); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); break; case 0x01411: // MOVE.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case 0x11011: // MOVE.l (xxx).W, (xxx).L - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; case 0x11111: // MOVE.l (xxx).l, (xxx).l op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { &storage_.effective_address_[0].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; case 0x11411: // MOVE.l #, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { &storage_.effective_address_[1].full })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); op(Action::SetMoveFlagsl); break; @@ -1431,6 +1435,8 @@ struct ProcessorStorageConstructor { } } +#undef ea +#undef a #undef seq #undef op #undef pseq From 4ef2c0bed83f86048e366042bf5a15a3e421d718 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 3 Apr 2019 21:41:59 -0400 Subject: [PATCH 055/239] Completes ADD and SUB. --- .../68000/Implementation/68000Storage.cpp | 84 ++++++++++--------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 2235f2f28..e4be5160d 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -482,8 +482,10 @@ struct ProcessorStorageConstructor { } } else { storage_.instructions[instruction].source = &storage_.data_[data_register]; - storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; - storage_.instructions[instruction].destination_address = &storage_.address_[source_register]; + + const auto destination_register = source_register; + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[1]; + storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; // Perform [ADD/SUB].blw Dn, switch(mode | (is_long_word_access ? 0x100 : 0x000)) { @@ -491,8 +493,8 @@ struct ProcessorStorageConstructor { case 0x002: // ADD/SUB.bw Dn, (An) case 0x003: // ADD/SUB.bw Dn, (An)+ - op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); - op(Action::PerformOperation, seq("nw", { a(source_register) }, !is_byte_access)); + op(Action::None, seq("nrd np", { a(destination_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); if(mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } @@ -500,7 +502,7 @@ struct ProcessorStorageConstructor { case 0x102: // ADD/SUB.l Dn, (An) case 0x103: // ADD/SUB.l Dn, (An)+ - op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask , seq("nR+ nr np", { ea(1), ea(1) })); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); if(mode == 0x03) { op(int(Action::Increment4) | MicroOp::DestinationMask); @@ -508,56 +510,60 @@ struct ProcessorStorageConstructor { break; case 0x004: // ADD/SUB.bw Dn, -(An) -// op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, -// seq("n nr np", { &storage_.address_[source_register].full }, !is_byte_access)); -// op(Action::PerformOperation); - continue; + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + seq("n nrd np", { a(destination_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); + break; case 0x104: // ADD/SUB.l Dn, -(An) -// op( int(Action::Decrement4) | MicroOp::SourceMask, -// seq("n nR nr np n", { &storage_.address_[source_register].full })); -// op(Action::PerformOperation); - continue; + op( int(Action::Decrement4) | MicroOp::DestinationMask); + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, + seq("n nRd+ nrd np", { ea(1), ea(1) })); + op( Action::PerformOperation, + seq("nw- nW", { ea(1), ea(1) })); + break; case 0x010: // ADD/SUB.bw Dn, (xxx).w -// op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, -// seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); -// op(Action::PerformOperation); - continue; + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; case 0x110: // ADD/SUB.l Dn, (xxx).w -// op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, -// seq("np nR nr np n", { &storage_.effective_address_[0].full })); -// op(Action::PerformOperation); - continue; + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd np", { ea(1), ea(1) })); + op( Action::PerformOperation, + seq("nw- nW", { ea(1), ea(1) })); + break; case 0x011: // ADD/SUB.bw Dn, (xxx).l -// op(Action::None, seq("np")); -// op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, -// seq("np nr np", { &storage_.effective_address_[0].full }, !is_byte_access)); -// op(Action::PerformOperation); - continue; + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; case 0x111: // ADD/SUB.l Dn, (xxx).l -// op(Action::None, seq("np")); -// op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, -// seq("np nR nr np n", { &storage_.effective_address_[0].full })); -// op(Action::PerformOperation); - continue; + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd np", { ea(1), ea(1) })); + op( Action::PerformOperation, + seq("nw- nW", { ea(1), ea(1) })); + break; case 0x005: // ADD/SUB.bw (d16, An), Dn case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn -// op( calc_action_for_mode(mode) | MicroOp::SourceMask, -// seq(pseq("np nr np", mode), { &storage_.effective_address_[0].full }, !is_byte_access)); -// op(Action::PerformOperation); - continue; + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; case 0x105: // ADD/SUB.l (d16, An), Dn case 0x106: // ADD/SUB.l (d8, An, Xn), Dn -// op( calc_action_for_mode(mode) | MicroOp::SourceMask, -// seq(pseq("np nR nr np n", mode), { &storage_.effective_address_[0].full })); -// op(Action::PerformOperation); - continue; + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; } } } break; From 03be2e3652043bb101eeb2fccc3b1fff1a2a301f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 3 Apr 2019 22:39:01 -0400 Subject: [PATCH 056/239] Adds decoding of ADDA and SUBA. --- .../68000/Implementation/68000Storage.cpp | 151 +++++++++++++++--- 1 file changed, 129 insertions(+), 22 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e4be5160d..0bd9ce929 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -265,6 +265,7 @@ struct ProcessorStorageConstructor { RESET, // no further decoding applied, performs reset cycle JMP, // six lowest bits are [mode, register], decoding to JMP ADDSUB, + ADDASUBA, }; using Operation = ProcessorStorage::Operation; @@ -326,8 +327,10 @@ struct ProcessorStorageConstructor { {0xf0c0, 0xd040, Operation::ADDw, Decoder::ADDSUB}, // 4-4 (p108) {0xf0c0, 0xd080, Operation::ADDl, Decoder::ADDSUB}, // 4-4 (p108) -// {0xf1c0, 0xd0c0, Operation::ADDAw, Decoder::ADDSUB}, // 4-7 (p111) -// {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDSUB}, // 4-7 (p111) + {0xf1c0, 0xd0c0, Operation::ADDAw, Decoder::ADDASUBA}, // 4-7 (p111) + {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDASUBA}, // 4-7 (p111) + {0xf1c0, 0x90c0, Operation::SUBAw, Decoder::ADDASUBA}, // 4-177 (p281) + {0xf1c0, 0x91c0, Operation::SUBAl, Decoder::ADDASUBA}, // 4-177 (p281) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -396,7 +399,7 @@ struct ProcessorStorageConstructor { case 0x002: // ADD/SUB.bw (An), Dn case 0x003: // ADD/SUB.bw (An)+, Dn op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); - if(mode == 0x03) { + if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -406,7 +409,7 @@ struct ProcessorStorageConstructor { case 0x103: // ADD/SUB.l (An)+, Dn op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(mode == 0x03) { + if(source_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -476,7 +479,7 @@ struct ProcessorStorageConstructor { case 0x114: // ADD/SUB.l #, Dn op(Action::None, seq("np")); - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); op(Action::PerformOperation); break; } @@ -495,7 +498,7 @@ struct ProcessorStorageConstructor { case 0x003: // ADD/SUB.bw Dn, (An)+ op(Action::None, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); - if(mode == 0x03) { + if(source_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } break; @@ -504,7 +507,7 @@ struct ProcessorStorageConstructor { case 0x103: // ADD/SUB.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); - if(mode == 0x03) { + if(source_mode == 0x03) { op(int(Action::Increment4) | MicroOp::DestinationMask); } break; @@ -523,6 +526,20 @@ struct ProcessorStorageConstructor { seq("nw- nW", { ea(1), ea(1) })); break; + case 0x005: // ADD/SUB.bw (d16, An), Dn + case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + + case 0x105: // ADD/SUB.l (d16, An), Dn + case 0x106: // ADD/SUB.l (d8, An, Xn), Dn + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; + case 0x010: // ADD/SUB.bw Dn, (xxx).w op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); @@ -550,24 +567,114 @@ struct ProcessorStorageConstructor { op( Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); break; - - case 0x005: // ADD/SUB.bw (d16, An), Dn - case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn - op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); - op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); - break; - - case 0x105: // ADD/SUB.l (d16, An), Dn - case 0x106: // ADD/SUB.l (d8, An, Xn), Dn - op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); - op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); - break; } } } break; + case Decoder::ADDASUBA: { + const int destination_register = (instruction >> 9) & 7; + storage_.instructions[instruction].set_destination(storage_, 1, destination_register); + storage_.instructions[instruction].set_source(storage_, source_mode, source_register); + + const int mode = combined_mode(source_mode, source_register); + const bool is_long_word_access = !((instruction >> 8)&1); + + switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + default: continue; + + case 0x000: // ADDA/SUBA.w Dn, An + case 0x100: // ADDA/SUBA.l Dn, An + op(Action::PerformOperation, seq("np nn")); + break; + + case 0x001: // ADDA/SUBA.w An, An + case 0x101: // ADDA/SUBA.l An, An + op(Action::PerformOperation, seq("np nn")); + break; + + case 0x002: // ADDA/SUBA.w (An), An + case 0x003: // ADDA/SUBA.w (An)+, An + op(Action::None, seq("nr np nn", { a(source_register) })); + if(source_mode == 0x03) { + op(int(Action::Increment2) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x102: // ADDA/SUBA.l (An), An + case 0x103: // ADDA/SUBA.l (An)+, An + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); + if(source_mode == 0x03) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x004: // ADDA/SUBA.w -(An), An + op(int(Action::Decrement2) | MicroOp::SourceMask); + op(Action::None, seq("n nr np nn", { a(source_register) })); + op(Action::PerformOperation); + break; + + case 0x104: // ADDA/SUBA.l -(An), An + op(int(Action::Decrement4) | MicroOp::SourceMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np n", { ea(0), ea(0) })); + op(Action::PerformOperation); + break; + + case 0x005: // ADDA/SUBA.w (d16, An), An + case 0x006: // ADDA/SUBA.w (d8, An, Xn), An + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nr np nn", mode), { ea(1) })); + op(Action::PerformOperation); + break; + + case 0x105: // ADDA/SUBA.l (d16, An), An + case 0x106: // ADDA/SUBA.l (d8, An, Xn), An + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr np n", mode), { ea(1), ea(1) })); + op(Action::PerformOperation); + break; + + case 0x010: // ADDA/SUBA.w (xxx).w, An + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np nn", { ea(1) })); + op(Action::PerformOperation); + break; + + case 0x110: // ADDA/SUBA.l (xxx).w, An + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR+ nr np n", { ea(1), ea(1) })); + op( Action::PerformOperation); + break; + + case 0x011: // ADDA/SUBA.w (xxx).l, An + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np nn", { ea(1) })); + op(Action::PerformOperation); + break; + + case 0x111: // ADDA/SUBA.l (xxx).l, An + op(Action::None, seq("np")); + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR+ nr np n", { ea(1), ea(1) })); + op( Action::PerformOperation); + break; + + case 0x014: // ADDA/SUBA.w #, An + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); + op(Action::PerformOperation); + break; + + case 0x114: // ADDA/SUBA.l #, Dn + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); + op(Action::PerformOperation); + break; + } + } break; + // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. case Decoder::Bcc: { op(Action::PerformOperation); @@ -651,7 +758,7 @@ struct ProcessorStorageConstructor { case 0x104: // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; From 068ce237165267e356817e016ce7bca0a5b1425b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 4 Apr 2019 19:49:19 -0400 Subject: [PATCH 057/239] Adds a few more MOVEs. --- .../68000/Implementation/68000Storage.cpp | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 0bd9ce929..cbd7c0178 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -973,7 +973,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.address_[source_register]; break; - default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L + default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].source_address = &storage_.address_[source_register]; break; @@ -988,7 +988,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination = &storage_.address_[destination_register]; break; - default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L + default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; storage_.instructions[instruction].destination = &storage_.address_[destination_register]; break; @@ -1344,30 +1344,33 @@ struct ProcessorStorageConstructor { // // MOVE , (d16, An) // MOVE , (d8, An, Xn) - // MOVE , (d16, An) - // MOVE , (d16, An) + // MOVE , (d16, PC) + // MOVE , (d8, PC, Xn) // - case 0x0005: // MOVE Dn, (d16, An) - op(int(Action::CalcD16An) | MicroOp::DestinationMask, seq("np")); + case 0x0005: // MOVE.bw Dn, (d16, An) + case 0x0006: // MOVE.bw Dn, (d8, An, Xn) + case 0x0012: // MOVE.bw Dn, (d16, PC) + case 0x0013: // MOVE.bw Dn, (d8, PC, Xn) + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); op(Action::PerformOperation, seq("nw np", { ea(1) })); break; - case 0x0006: // MOVE Dn, (d8, An, Xn) - op(int(Action::CalcD8AnXn) | MicroOp::DestinationMask, seq("n np")); - op(Action::PerformOperation, seq("nw np", { ea(1) })); + case 0x0205: // MOVE.bw (An), (d16, An) + case 0x0305: // MOVE.bw (An)+, (d16, An) + case 0x0206: // MOVE.bw (An), (d8, An, Xn) + case 0x0306: // MOVE.bw (An)+, (d8, An, Xn) + case 0x0212: // MOVE.bw (An), (d16, PC) + case 0x0312: // MOVE.bw (An)+, (d16, PC) + case 0x0213: // MOVE.bw (An), (d8, PC, Xn) + case 0x0313: // MOVE.bw (An)+, (d8, PC, Xn) + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[source_register].full }, !is_byte_access)); + op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); + if(source_mode == 0x03) { + op(increment_action | MicroOp::SourceMask); + } break; - case 0x0205: // MOVE (An), (d16, An) - case 0x0305: // MOVE (An)+, (d16, An) - // nr np nw np - continue; - - case 0x0206: // MOVE (An), (d8, An, Xn) - case 0x0306: // MOVE (An)+, (d8, An, Xn) - // nr n np nw np - continue; - case 0x0405: // MOVE -(An), (d16, An) // n nr np nw continue; @@ -1396,6 +1399,15 @@ struct ProcessorStorageConstructor { // np nr n np nw np continue; + case 0x1405: // MOVE.bw #, (d16, An) + case 0x1406: // MOVE.bw #, (d8, An, Xn) + case 0x1412: // MOVE.bw #, (d16, PC) + case 0x1413: // MOVE.bw #, (d8, PC, Xn) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access )); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsl); + break; + // // MOVE , (xxx).W // From 2d153359f809067170dba0f944a234789118ecf5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 4 Apr 2019 21:43:22 -0400 Subject: [PATCH 058/239] Adds BTST. --- .../Implementation/68000Implementation.hpp | 10 ++ .../68000/Implementation/68000Storage.cpp | 113 ++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 3 +- 3 files changed, 125 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 339378308..48a5e8f52 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -147,6 +147,16 @@ template void Processor: } } break; + // Two BTSTs: set the zero flag according to the value of the destination masked by + // the bit named in the source modulo the operation size. + case Operation::BTSTb: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 7)); + break; + + case Operation::BTSTl: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 31)); + break; + // Bcc: evaluates the relevant condition and displacement size and then: // if condition is false, schedules bus operations to get past this instruction; // otherwise applies the offset and schedules bus operations to refill the prefetch queue. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index cbd7c0178..fa145d1f6 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -266,6 +266,8 @@ struct ProcessorStorageConstructor { JMP, // six lowest bits are [mode, register], decoding to JMP ADDSUB, ADDASUBA, + BTST, // bit 9,10,11 are register, six lowest bits are [mode, register], decoding to BTST + BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # }; using Operation = ProcessorStorage::Operation; @@ -331,6 +333,9 @@ struct ProcessorStorageConstructor { {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDASUBA}, // 4-7 (p111) {0xf1c0, 0x90c0, Operation::SUBAw, Decoder::ADDASUBA}, // 4-177 (p281) {0xf1c0, 0x91c0, Operation::SUBAl, Decoder::ADDASUBA}, // 4-177 (p281) + + {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) + {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -686,6 +691,114 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("n np np")); } break; + // Decodes a BTST, potential mutating the operation into a BTSTl. + case Decoder::BTST: { + const int mask_register = (instruction >> 9) & 7; + storage_.instructions[instruction].set_source(storage_, 0, mask_register); + storage_.instructions[instruction].set_destination(storage_, source_mode, source_register); + + const int mode = combined_mode(source_mode, source_register); + switch(mode) { + default: continue; + + case 0x00: // BTST.l Dn, Dn + operation = Operation::BTSTl; + op(Action::PerformOperation, seq("np n")); + break; + + case 0x02: // BTST.b Dn, (An) + case 0x03: // BTST.b Dn, (An)+ + op(Action::None, seq("nrd np", { &storage_.data_[source_register].full }, false)); + op(Action::PerformOperation); + if(mode == 0x03) { + op(int(Action::Increment1) | MicroOp::DestinationMask); + } + break; + + case 0x04: // BTST.b Dn, -(An) + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[source_register].full }, false)); + op(Action::PerformOperation); + break; + + case 0x05: // BTST.b Dn, (d16, An) + case 0x06: // BTST.b Dn, (d8, An, Xn) + case 0x12: // BTST.b Dn, (d16, PC) + case 0x13: // BTST.b Dn, (d8, PC, Xn) + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) }, false)); + op(Action::PerformOperation); + break; + + case 0x10: // BTST.b Dn, (xxx).w + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, false)); + op(Action::PerformOperation); + break; + + case 0x11: // BTST.b Dn, (xxx).l + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, false)); + op(Action::PerformOperation); + break; + } + } break; + + case Decoder::BTSTIMM: { + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + storage_.instructions[instruction].set_destination(storage_, source_mode, source_register); + + const int mode = combined_mode(source_mode, source_register); + switch(mode) { + default: continue; + + case 0x00: // BTST.l #, Dn + operation = Operation::BTSTl; + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np n")); + op(Action::PerformOperation); + break; + + case 0x02: // BTST.b #, (An) + case 0x03: // BTST.b #, (An)+ + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[source_register].full }, false)); + op(Action::PerformOperation); + if(mode == 0x03) { + op(int(Action::Increment1) | MicroOp::DestinationMask); + } + break; + + case 0x04: // BTST.b #, -(An) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[source_register].full }, false)); + op(Action::PerformOperation); + break; + + case 0x05: // BTST.b #, (d16, An) + case 0x06: // BTST.b #, (d8, An, Xn) + case 0x12: // BTST.b #, (d16, PC) + case 0x13: // BTST.b #, (d8, PC, Xn) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) }, false)); + op(Action::PerformOperation); + break; + + case 0x10: // BTST.b #, (xxx).w + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, false)); + op(Action::PerformOperation); + break; + + case 0x11: // BTST.b #, (xxx).l + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, false)); + op(Action::PerformOperation); + break; + } + } break; + // Decodes the format used by ABCD and SBCD. case Decoder::Decimal: { const int destination_register = (instruction >> 9) & 7; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index d648c6806..ecefecb69 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -57,8 +57,9 @@ class ProcessorStorage { MOVEtoSR, MOVEfromSR, CMPb, CMPw, CMPl, + BTSTb, BTSTl, - BRA, Bcc, JMP + BRA, Bcc, JMP, }; /*! From 56e42859abbbc955b5fb00f28af64eef75f93443 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 5 Apr 2019 23:21:50 -0400 Subject: [PATCH 059/239] Ensures the supervisor flag is updated properly on MOVE to SR. --- Processors/68000/Implementation/68000Implementation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 48a5e8f52..9da14e478 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -26,7 +26,7 @@ extend_flag_ = (x) & 0x0010; \ interrupt_level_ = ((x) >> 8) & 7; \ trace_flag_ = (x) & 0x8000; \ - is_supervisor_ = ((x) >> 13) & 1; + set_is_supervisor(!!(((x) >> 13) & 1)); template void Processor::run_for(HalfCycles duration) { HalfCycles remaining_duration = duration + half_cycles_left_to_run_; From af02ce9c6e996f27ca7158f9d8b42b0211b1128d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 5 Apr 2019 23:49:13 -0400 Subject: [PATCH 060/239] Attempts to correct various instances of PC-relative addressing. --- .../Implementation/68000Implementation.hpp | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9da14e478..6b9a3fdc1 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -141,10 +141,11 @@ template void Processor: // A non-zero offset byte branches by just that amount; otherwise use the word // after as an offset. In both cases, treat as signed. if(byte_offset) { - program_counter_.full = (program_counter_.full + byte_offset) - 2; + program_counter_.full = (program_counter_.full + byte_offset); } else { program_counter_.full += int16_t(prefetch_queue_.halves.low.full); } + program_counter_.full -= 2; } break; // Two BTSTs: set the zero flag according to the value of the destination masked by @@ -197,10 +198,11 @@ template void Processor: // Schedule something appropriate, by rewriting the program for this instruction temporarily. if(should_branch) { if(byte_offset) { - program_counter_.full = (program_counter_.full + byte_offset) - 2; // - 2 because this should be calculated from the high word of the prefetch. + program_counter_.full = (program_counter_.full + byte_offset); } else { program_counter_.full += int16_t(prefetch_queue_.halves.low.full); } + program_counter_.full -= 2; active_micro_op_->bus_program = branch_taken_bus_steps_; } else { if(byte_offset) { @@ -462,17 +464,23 @@ template void Processor: } break; + // 16-bit offset addressing modes. + case int(MicroOp::Action::CalcD16PC) | MicroOp::SourceMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + // The address the low part of the prefetch queue was read from was two bytes ago, hence + // the subtraction of 2. + effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full - 2; break; case int(MicroOp::Action::CalcD16PC) | MicroOp::DestinationMask: - effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full - 2; break; case int(MicroOp::Action::CalcD16PC) | MicroOp::SourceMask | MicroOp::DestinationMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + program_counter_.full; - effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full; + // Similar logic applies here to above, but the high part of the prefetch queue was four bytes + // ago rather than merely two. + effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + program_counter_.full - 4; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + program_counter_.full - 2; break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: @@ -491,7 +499,7 @@ template void Processor: #define CalculateD8AnXn(data, source, target) {\ const auto register_index = (data.full >> 12) & 7; \ const RegisterPair32 &displacement = (data.full & 0x8000) ? address_[register_index] : data_[register_index]; \ - target.full = int8_t(data.halves.low) + source->full; \ + target.full = int8_t(data.halves.low) + source; \ \ if(data.full & 0x800) { \ target.full += displacement.halves.low.full; \ @@ -500,16 +508,29 @@ template void Processor: } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->source, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->source->full, effective_address_[0]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination->full, effective_address_[1]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source, effective_address_[0]); - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source->full, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination->full, effective_address_[1]); + } break; + + case int(MicroOp::Action::CalcD8PCXn) | MicroOp::SourceMask: { + CalculateD8AnXn(prefetch_queue_.halves.low, program_counter_.full - 2, effective_address_[0]); + } break; + + case int(MicroOp::Action::CalcD8PCXn) | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_.halves.low, program_counter_.full - 2, effective_address_[1]); + } break; + + case int(MicroOp::Action::CalcD8PCXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { + CalculateD8AnXn(prefetch_queue_.halves.high, program_counter_.full - 4, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, program_counter_.full - 2, effective_address_[1]); } break; #undef CalculateD8AnXn From ec494511ec563fd8403a0330c563babcdef45da9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2019 10:41:19 -0400 Subject: [PATCH 061/239] Implements CMP. --- .../68000/Implementation/68000Storage.cpp | 249 +++++++++++++----- 1 file changed, 183 insertions(+), 66 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index fa145d1f6..f091cb12b 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -268,6 +268,7 @@ struct ProcessorStorageConstructor { ADDASUBA, BTST, // bit 9,10,11 are register, six lowest bits are [mode, register], decoding to BTST BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # + CMP, }; using Operation = ProcessorStorage::Operation; @@ -308,6 +309,9 @@ struct ProcessorStorageConstructor { {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) + {0xf1c0, 0xb000, Operation::CMPb, Decoder::CMP}, // 4-75 (p179) + {0xf1c0, 0xb040, Operation::CMPw, Decoder::CMP}, // 4-75 (p179) + {0xf1c0, 0xb080, Operation::CMPl, Decoder::CMP}, // 4-75 (p179) {0xffc0, 0x0c00, Operation::CMPb, Decoder::CMPI}, // 4-79 (p183) {0xffc0, 0x0c40, Operation::CMPw, Decoder::CMPI}, // 4-79 (p183) {0xffc0, 0x0c80, Operation::CMPl, Decoder::CMPI}, // 4-79 (p183) @@ -358,8 +362,8 @@ struct ProcessorStorageConstructor { const auto micro_op_start = storage_.all_micro_ops_.size(); // The following fields are used commonly enough to be worht pulling out here. - const int source_register = instruction & 7; - const int source_mode = (instruction >> 3) & 7; + const int ea_register = instruction & 7; + const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { case Decoder::ADDSUB: { @@ -368,43 +372,43 @@ struct ProcessorStorageConstructor { const bool reverse_source_destination = !(instruction & 256); const int data_register = (instruction >> 9) & 7; - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); const bool is_byte_access = !!((instruction >> 6)&3); const bool is_long_word_access = ((instruction >> 6)&3) == 2; if(reverse_source_destination) { storage_.instructions[instruction].destination = &storage_.data_[data_register]; storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; - storage_.instructions[instruction].source_address = &storage_.address_[source_register]; + storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; // Perform [ADD/SUB].blw , Dn switch(mode | (is_long_word_access ? 0x100 : 0x000)) { default: continue; case 0x000: // ADD/SUB.bw Dn, Dn - storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].source = &storage_.data_[ea_register]; op(Action::PerformOperation, seq("np")); break; case 0x100: // ADD/SUB.l Dn, Dn - storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].source = &storage_.data_[ea_register]; op(Action::PerformOperation, seq("np nn")); break; case 0x001: // ADD/SUB.bw An, Dn - storage_.instructions[instruction].source = &storage_.address_[source_register]; + storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np")); break; case 0x101: // ADD/SUB.l An, Dn - storage_.instructions[instruction].source = &storage_.address_[source_register]; + storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np nn")); break; case 0x002: // ADD/SUB.bw (An), Dn case 0x003: // ADD/SUB.bw (An)+, Dn - op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); - if(source_mode == 0x03) { + op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); + if(ea_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -414,7 +418,7 @@ struct ProcessorStorageConstructor { case 0x103: // ADD/SUB.l (An)+, Dn op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -422,7 +426,7 @@ struct ProcessorStorageConstructor { case 0x004: // ADD/SUB.bw -(An), Dn op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, - seq("n nr np", { a(source_register) }, !is_byte_access)); + seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -491,7 +495,7 @@ struct ProcessorStorageConstructor { } else { storage_.instructions[instruction].source = &storage_.data_[data_register]; - const auto destination_register = source_register; + const auto destination_register = ea_register; storage_.instructions[instruction].destination = &storage_.destination_bus_data_[1]; storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; @@ -503,7 +507,7 @@ struct ProcessorStorageConstructor { case 0x003: // ADD/SUB.bw Dn, (An)+ op(Action::None, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } break; @@ -512,7 +516,7 @@ struct ProcessorStorageConstructor { case 0x103: // ADD/SUB.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(Action::Increment4) | MicroOp::DestinationMask); } break; @@ -579,9 +583,9 @@ struct ProcessorStorageConstructor { case Decoder::ADDASUBA: { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_destination(storage_, 1, destination_register); - storage_.instructions[instruction].set_source(storage_, source_mode, source_register); + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); const bool is_long_word_access = !((instruction >> 8)&1); switch(mode | (is_long_word_access ? 0x100 : 0x000)) { @@ -599,8 +603,8 @@ struct ProcessorStorageConstructor { case 0x002: // ADDA/SUBA.w (An), An case 0x003: // ADDA/SUBA.w (An)+, An - op(Action::None, seq("nr np nn", { a(source_register) })); - if(source_mode == 0x03) { + op(Action::None, seq("nr np nn", { a(ea_register) })); + if(ea_mode == 0x03) { op(int(Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -609,7 +613,7 @@ struct ProcessorStorageConstructor { case 0x102: // ADDA/SUBA.l (An), An case 0x103: // ADDA/SUBA.l (An)+, An op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -617,7 +621,7 @@ struct ProcessorStorageConstructor { case 0x004: // ADDA/SUBA.w -(An), An op(int(Action::Decrement2) | MicroOp::SourceMask); - op(Action::None, seq("n nr np nn", { a(source_register) })); + op(Action::None, seq("n nr np nn", { a(ea_register) })); op(Action::PerformOperation); break; @@ -695,9 +699,9 @@ struct ProcessorStorageConstructor { case Decoder::BTST: { const int mask_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_source(storage_, 0, mask_register); - storage_.instructions[instruction].set_destination(storage_, source_mode, source_register); + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; @@ -708,7 +712,7 @@ struct ProcessorStorageConstructor { case 0x02: // BTST.b Dn, (An) case 0x03: // BTST.b Dn, (An)+ - op(Action::None, seq("nrd np", { &storage_.data_[source_register].full }, false)); + op(Action::None, seq("nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); if(mode == 0x03) { op(int(Action::Increment1) | MicroOp::DestinationMask); @@ -716,7 +720,7 @@ struct ProcessorStorageConstructor { break; case 0x04: // BTST.b Dn, -(An) - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[source_register].full }, false)); + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); break; @@ -746,9 +750,9 @@ struct ProcessorStorageConstructor { case Decoder::BTSTIMM: { storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; - storage_.instructions[instruction].set_destination(storage_, source_mode, source_register); + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; @@ -760,7 +764,7 @@ struct ProcessorStorageConstructor { case 0x02: // BTST.b #, (An) case 0x03: // BTST.b #, (An)+ - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[source_register].full }, false)); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); if(mode == 0x03) { op(int(Action::Increment1) | MicroOp::DestinationMask); @@ -769,7 +773,7 @@ struct ProcessorStorageConstructor { case 0x04: // BTST.b #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[source_register].full }, false)); + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); break; @@ -806,25 +810,138 @@ struct ProcessorStorageConstructor { if(instruction & 8) { storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; - storage_.instructions[instruction].source_address = &storage_.address_[source_register]; + storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, - seq("n nr nr np nw", { a(source_register), a(destination_register), a(destination_register) }, false)); + seq("n nr nr np nw", { a(ea_register), a(destination_register), a(destination_register) }, false)); op(Action::PerformOperation); } else { - storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].source = &storage_.data_[ea_register]; storage_.instructions[instruction].destination = &storage_.data_[destination_register]; op(Action::PerformOperation, seq("np n")); } } break; - case Decoder::CMPI: { - if(source_mode == 1) continue; + case Decoder::CMP: { + const auto source_register = (instruction >> 9) & 7; - const auto destination_mode = source_mode; - const auto destination_register = source_register; + storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + const bool is_long_word_access = mapping.operation == Operation::CMPl; + const bool is_byte_access = mapping.operation == Operation::CMPb; + + // Byte accesses are not allowed with address registers. + if(is_byte_access && ea_mode == 1) { + continue; + } + + const int mode = (is_long_word_access ? 0x100 : 0) | combined_mode(ea_mode, ea_register); + switch(mode) { + default: continue; + + case 0x000: // CMP.bw Dn, Dn + case 0x100: // CMP.l Dn, Dn + case 0x001: // CMP.w An, Dn + case 0x101: // CMP.l An, Dn + op(Action::PerformOperation, seq("np")); + break; + + case 0x002: // CMP.bw (An), Dn + case 0x003: // CMP.bw (An)+, Dn + op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); + if(ea_mode == 0x03) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x102: // CMP.l (An), Dn + case 0x103: // CMP.l (An)+, Dn + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); + if(ea_mode == 0x03) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + op(Action::PerformOperation); + break; + + case 0x004: // CMP.bw -(An), Dn + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x104: // CMP.l -(An), Dn + op(int(Action::Decrement4) | MicroOp::SourceMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np n", { ea(0), ea(0) })); + op(Action::PerformOperation); + break; + + case 0x005: // CMP.bw (d16, An), Dn + case 0x006: // CMP.bw (d8, An, Xn), Dn + case 0x012: // CMP.bw (d16, PC), Dn + case 0x013: // CMP.bw (d8, PC, Xn), Dn + op( calc_action_for_mode(ea_mode) | MicroOp::SourceMask, + seq(pseq("np nr np", ea_mode), { ea(0) }, + !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x105: // CMP.l (d16, An), Dn + case 0x106: // CMP.l (d8, An, Xn), Dn + case 0x112: // CMP.l (d16, PC), Dn + case 0x113: // CMP.l (d8, PC, Xn), Dn + op( calc_action_for_mode(ea_mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr np n", ea_mode), { ea(0), ea(0) })); + op(Action::PerformOperation); + break; + + case 0x010: // CMP.bw (xxx).w, Dn + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x110: // CMP.l (xxx).w, Dn + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR+ nr np n", { ea(0), ea(0) })); + op(Action::PerformOperation); + break; + + case 0x011: // CMP.bw (xxx).l, Dn + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nr np", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case 0x111: // CMP.l (xxx).l, Dn + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + seq("np nR+ nr np n", { ea(0), ea(0) })); + op(Action::PerformOperation); + break; + + case 0x014: // CMP.br #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::PerformOperation, seq("np np")); + break; + + case 0x114: // CMP.l #, Dn + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("np np n")); + break; + } + } break; + + case Decoder::CMPI: { + if(ea_mode == 1) continue; + + const auto destination_mode = ea_mode; + const auto destination_register = ea_register; storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); @@ -929,11 +1046,11 @@ struct ProcessorStorageConstructor { case Decoder::JMP: { storage_.instructions[instruction].source = &storage_.effective_address_[0]; - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; case 0x02: // JMP (An) - storage_.instructions[instruction].source = &storage_.address_[source_register]; + storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np np")); break; @@ -966,11 +1083,11 @@ struct ProcessorStorageConstructor { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].destination = &storage_.address_[destination_register]; - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; case 0x04: - storage_.instructions[instruction].source = &storage_.address_[source_register]; + storage_.instructions[instruction].source = &storage_.address_[ea_register]; break; case 0x05: case 0x06: case 0x10: case 0x11: case 0x12: case 0x13: @@ -1010,13 +1127,13 @@ struct ProcessorStorageConstructor { } break; case Decoder::MOVEtoSR: { - if(source_mode == 1) continue; - storage_.instructions[instruction].set_source(storage_, source_mode, source_register); + if(ea_mode == 1) continue; + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); storage_.instructions[instruction].requires_supervisor = true; /* DEVIATION FROM YACHT.TXT: it has all of these reading an extra word from the PC; this looks like a mistake so I've padded with nil cycles in the middle. */ - const int mode = combined_mode(source_mode, source_register); + const int mode = combined_mode(ea_mode, ea_register); switch(mode) { case 0x00: // MOVE Dn, SR op(Action::PerformOperation, seq("nn np")); @@ -1024,15 +1141,15 @@ struct ProcessorStorageConstructor { case 0x02: // MOVE (An), SR case 0x03: // MOVE (An)+, SR - op(Action::None, seq("nr nn nn np", { a(source_register) })); - if(source_mode == 0x03) { + op(Action::None, seq("nr nn nn np", { a(ea_register) })); + if(ea_mode == 0x03) { op(int(Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; case 0x04: // MOVE -(An), SR - op(Action::Decrement2, seq("n nr nn nn np", { a(source_register) })); + op(Action::Decrement2, seq("n nr nn nn np", { a(ea_register) })); op(Action::PerformOperation); break; @@ -1077,18 +1194,18 @@ struct ProcessorStorageConstructor { const int destination_mode = (instruction >> 6) & 7; const int destination_register = (instruction >> 9) & 7; - switch(source_mode) { + switch(ea_mode) { case 0: // Dn - storage_.instructions[instruction].source = &storage_.data_[source_register]; + storage_.instructions[instruction].source = &storage_.data_[ea_register]; break; case 1: // An - storage_.instructions[instruction].source = &storage_.address_[source_register]; + storage_.instructions[instruction].source = &storage_.address_[ea_register]; break; default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; - storage_.instructions[instruction].source_address = &storage_.address_[source_register]; + storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; break; } @@ -1141,7 +1258,7 @@ struct ProcessorStorageConstructor { // // ... for no reason other than to make the switch below easy to read. int both_modes = - (combined_mode(source_mode, source_register) << 8) | + (combined_mode(ea_mode, ea_register) << 8) | combined_mode(destination_mode, destination_register) | (is_long_word_access ? 0x10000 : 0); @@ -1170,7 +1287,7 @@ struct ProcessorStorageConstructor { case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -1178,8 +1295,8 @@ struct ProcessorStorageConstructor { case 0x00200: // MOVE.bw (An), Dn case 0x00300: // MOVE.bw (An)+, Dn - op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); - if(source_mode == 0x03) { + op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); + if(ea_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -1192,7 +1309,7 @@ struct ProcessorStorageConstructor { break; case 0x00400: // MOVE.bw -(An), Dn - op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(source_register) }, !is_byte_access)); + op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -1281,11 +1398,11 @@ struct ProcessorStorageConstructor { op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(source_mode == 0x03 || destination_mode == 0x03) { + if(ea_mode == 0x03 || destination_mode == 0x03) { op( increment_action | - (source_mode == 0x03 ? MicroOp::SourceMask : 0) | - (source_mode == 0x03 ? MicroOp::DestinationMask : 0)); + (ea_mode == 0x03 ? MicroOp::SourceMask : 0) | + (ea_mode == 0x03 ? MicroOp::DestinationMask : 0)); } break; @@ -1293,13 +1410,13 @@ struct ProcessorStorageConstructor { case 0x00302: // MOVE.bw (An)+, (An) case 0x00203: // MOVE.bw (An), (An)+ case 0x00303: // MOVE.bw (An)+, (An)+ - op(Action::None, seq("nr", { a(source_register) })); + op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); - if(source_mode == 0x03 || destination_mode == 0x03) { + if(ea_mode == 0x03 || destination_mode == 0x03) { op( increment_action | - (source_mode == 0x03 ? MicroOp::SourceMask : 0) | - (source_mode == 0x03 ? MicroOp::DestinationMask : 0)); + (ea_mode == 0x03 ? MicroOp::SourceMask : 0) | + (ea_mode == 0x03 ? MicroOp::DestinationMask : 0)); } break; @@ -1477,9 +1594,9 @@ struct ProcessorStorageConstructor { case 0x0312: // MOVE.bw (An)+, (d16, PC) case 0x0213: // MOVE.bw (An), (d8, PC, Xn) case 0x0313: // MOVE.bw (An)+, (d8, PC, Xn) - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[source_register].full }, !is_byte_access)); + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[ea_register].full }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(increment_action | MicroOp::SourceMask); } break; @@ -1574,9 +1691,9 @@ struct ProcessorStorageConstructor { case 0x00211: // MOVE.bw (An), (xxx).L case 0x00311: // MOVE.bw (An)+, (xxx).L - op(Action::None, seq("nr np", { a(source_register) }, !is_byte_access)); + op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); - if(source_mode == 0x03) { + if(ea_mode == 0x03) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } break; From 49a22674baf384b3e72509ff262f0d3d75b3dc0c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2019 18:33:53 -0400 Subject: [PATCH 062/239] Corrects MOVE destinations. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index f091cb12b..735400f42 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1220,7 +1220,7 @@ struct ProcessorStorageConstructor { default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; - storage_.instructions[instruction].destination = &storage_.address_[destination_register]; + storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; break; } From 03f365e696f6b30f25cf78b1416b5c62f182827c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2019 20:00:15 -0400 Subject: [PATCH 063/239] Corrects source/destination order of CMP setup. --- Processors/68000/Implementation/68000Storage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 735400f42..a95a98b37 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -827,8 +827,8 @@ struct ProcessorStorageConstructor { case Decoder::CMP: { const auto source_register = (instruction >> 9) & 7; - storage_.instructions[instruction].source = &storage_.data_[source_register]; - storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + storage_.instructions[instruction].destination = &storage_.data_[source_register]; + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const bool is_long_word_access = mapping.operation == Operation::CMPl; const bool is_byte_access = mapping.operation == Operation::CMPb; From 0af57806da8a3e82b2206bb715c658028702d0b2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2019 20:00:34 -0400 Subject: [PATCH 064/239] Adds a hard-coded value sufficient to advance in TOS startup. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 49d935bf4..6fdf55898 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -30,13 +30,15 @@ class EmuTOS: public CPU::MC68000::BusHandler { } HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { - uint32_t word_address = cycle.word_address(); + const uint32_t address = cycle.word_address(); + uint32_t word_address = address; // As much about the Atari ST's memory map as is relevant here: the ROM begins // at 0xfc0000, and the first eight bytes are mirrored to the first four memory // addresses in order for /RESET to work properly. RAM otherwise fills the first // 512kb of the address space. Trying to write to ROM raises a bus error. + const bool is_peripheral = word_address > (0xff0000 >> 1); const bool is_rom = word_address > (0xfc0000 >> 1) || word_address < 4; uint16_t *const base = is_rom ? emuTOS_.data() : ram_.data(); if(is_rom) { @@ -47,14 +49,32 @@ class EmuTOS: public CPU::MC68000::BusHandler { using Microcycle = CPU::MC68000::Microcycle; if(cycle.data_select_active()) { + uint16_t peripheral_result = 0xffff; + if(is_peripheral) { + switch(address & 0x7ff) { + // A hard-coded value for TIMER B. + case (0xa21 >> 1): + peripheral_result = 0x00000001; + break; + } + printf("Peripheral: %c %08x", (cycle.operation & Microcycle::Read) ? 'r' : 'w', *cycle.address); + if(!(cycle.operation & Microcycle::Read)) { + if(cycle.operation & Microcycle::SelectByte) + printf(" %02x", cycle.value->halves.low); + else + printf(" %04x", cycle.value->full); + } + printf("\n"); + } + switch(cycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { default: break; case Microcycle::SelectWord | Microcycle::Read: - cycle.value->full = base[word_address]; + cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; break; case Microcycle::SelectByte | Microcycle::Read: - cycle.value->halves.low = base[word_address] >> cycle.byte_shift(); + cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); break; case Microcycle::SelectWord: base[word_address] = cycle.value->full; From 06a2f59bd0b1018e9d4e72970adccd56254a571d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2019 23:21:01 -0400 Subject: [PATCH 065/239] Implements DBcc. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 2 +- .../Implementation/68000Implementation.hpp | 95 ++++++++----------- .../68000/Implementation/68000Storage.cpp | 22 +++++ .../68000/Implementation/68000Storage.hpp | 40 +++++++- 4 files changed, 100 insertions(+), 59 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 6fdf55898..7136ab7d4 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -115,7 +115,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { - (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(4000)); + _machine->run_for(HalfCycles(400000)); } @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 6b9a3fdc1..c15a8ea21 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -166,34 +166,7 @@ template void Processor: const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); // Test the conditional. - bool should_branch; - switch(prefetch_queue_.halves.high.halves.high & 0xf) { - default: - case 0x00: should_branch = true; break; // true - case 0x01: should_branch = false; break; // false - case 0x02: should_branch = zero_result_ && !carry_flag_; break; // high - case 0x03: should_branch = !zero_result_ || carry_flag_; break; // low or same - case 0x04: should_branch = !carry_flag_; break; // carry clear - case 0x05: should_branch = carry_flag_; break; // carry set - case 0x06: should_branch = zero_result_; break; // not equal - case 0x07: should_branch = !zero_result_; break; // equal - case 0x08: should_branch = !overflow_flag_; break; // overflow clear - case 0x09: should_branch = overflow_flag_; break; // overflow set - case 0x0a: should_branch = !negative_flag_; break; // positive - case 0x0b: should_branch = negative_flag_; break; // negative - case 0x0c: - should_branch = (negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_); - break; // greater than or equal - case 0x0d: - should_branch = (negative_flag_ || !overflow_flag_) && (!negative_flag_ || overflow_flag_); - break; // less than - case 0x0e: - should_branch = zero_result_ && ((negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_)); - break; // greater than - case 0x0f: - should_branch = (!zero_result_ || negative_flag_) && (!overflow_flag_ || !negative_flag_) && overflow_flag_; - break; // less than or equal - } + const bool should_branch = evaluate_condition(prefetch_queue_.halves.high.halves.high); // Schedule something appropriate, by rewriting the program for this instruction temporarily. if(should_branch) { @@ -213,6 +186,30 @@ template void Processor: } } break; + case Operation::DBcc: { + // Decide what sort of DBcc this is. + if(!evaluate_condition(prefetch_queue_.halves.high.halves.high)) { + -- active_program_->source->halves.low.full; + const auto target_program_counter = program_counter_.full + int16_t(prefetch_queue_.halves.low.full) - 2; + + if(active_program_->source->halves.low.full == 0xffff) { + // This DBcc will be ignored as the counter has underflowed. + // Schedule n np np np and continue. Assumed: the first np + // is from where the branch would have been if taken? + active_micro_op_->bus_program = dbcc_condition_false_no_branch_steps_; + dbcc_false_address_ = target_program_counter; + } else { + // Take the branch. Change PC and schedule n np np. + active_micro_op_->bus_program = dbcc_condition_false_branch_steps_; + program_counter_.full = target_program_counter; + } + } else { + // This DBcc will be ignored as the condition is true; + // perform nn np np and continue. + active_micro_op_->bus_program = dbcc_condition_true_steps_; + } + } break; + /* CMP.b, CMP.l and CMP.w: sets the condition flags (other than extend) based on a subtraction of the source from the destination; the result of the subtraction is not stored. @@ -412,35 +409,23 @@ template void Processor: overflow_flag_ = carry_flag_ = 0; break; - case int(MicroOp::Action::Decrement1): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 1; - break; + // Increments and decrements. +#define Adjust(op, quantity) \ + case int(op) | MicroOp::SourceMask: active_program_->source_address->full += quantity; break; \ + case int(op) | MicroOp::DestinationMask: active_program_->destination_address->full += quantity; break; \ + case int(op) | MicroOp::SourceMask | MicroOp::DestinationMask: \ + active_program_->destination_address->full += quantity; \ + active_program_->source_address->full += quantity; \ + break; - case int(MicroOp::Action::Decrement2): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 2; - break; + Adjust(MicroOp::Action::Decrement1, -1); + Adjust(MicroOp::Action::Decrement2, -2); + Adjust(MicroOp::Action::Decrement4, -4); + Adjust(MicroOp::Action::Increment1, 1); + Adjust(MicroOp::Action::Increment2, 2); + Adjust(MicroOp::Action::Increment4, 4); - case int(MicroOp::Action::Decrement4): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full -= 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full -= 4; - break; - - case int(MicroOp::Action::Increment1): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 1; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 1; - break; - - case int(MicroOp::Action::Increment2): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 2; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 2; - break; - - case int(MicroOp::Action::Increment4): - if(active_micro_op_->action & MicroOp::SourceMask) active_program_->source_address->full += 4; - if(active_micro_op_->action & MicroOp::DestinationMask) active_program_->destination_address->full += 4; - break; +#undef Adjust case int(MicroOp::Action::SignExtendWord): if(active_micro_op_->action & MicroOp::SourceMask) { diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index a95a98b37..0a6e6e5c2 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -269,6 +269,7 @@ struct ProcessorStorageConstructor { BTST, // bit 9,10,11 are register, six lowest bits are [mode, register], decoding to BTST BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # CMP, + DBcc, // the low three bits nominate a register; everything else is decoded in real time }; using Operation = ProcessorStorage::Operation; @@ -340,6 +341,8 @@ struct ProcessorStorageConstructor { {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) + + {0xf0f8, 0x50c8, Operation::DBcc, Decoder::DBcc}, // 4-91 (p195) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -1044,6 +1047,15 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::DBcc: { + storage_.instructions[instruction].source = &storage_.data_[ea_register]; + + // Jump straight into deciding what steps to take next, + // which will be selected dynamically. + op(Action::PerformOperation); + op(); + } break; + case Decoder::JMP: { storage_.instructions[instruction].source = &storage_.effective_address_[0]; const int mode = combined_mode(ea_mode, ea_register); @@ -1824,19 +1836,29 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { // Create the special programs. const size_t reset_offset = constructor.assemble_program("n n n n n nn nF nf nV nv np np"); + const size_t branch_taken_offset = constructor.assemble_program("n np np"); const size_t branch_byte_not_taken_offset = constructor.assemble_program("nn np"); const size_t branch_word_not_taken_offset = constructor.assemble_program("nn np np"); + const size_t dbcc_condition_true_offset = constructor.assemble_program("nn np np"); + const size_t dbcc_condition_false_no_branch_offset = constructor.assemble_program("n nr np np", { &dbcc_false_address_ }); + const size_t dbcc_condition_false_branch_offset = constructor.assemble_program("n np np"); + // Install operations. constructor.install_instructions(); // Realise the special programs as direct pointers. reset_bus_steps_ = &all_bus_steps_[reset_offset]; + branch_taken_bus_steps_ = &all_bus_steps_[branch_taken_offset]; branch_byte_not_taken_bus_steps_ = &all_bus_steps_[branch_byte_not_taken_offset]; branch_word_not_taken_bus_steps_ = &all_bus_steps_[branch_word_not_taken_offset]; + dbcc_condition_true_steps_ = &all_bus_steps_[dbcc_condition_true_offset]; + dbcc_condition_false_no_branch_steps_ = &all_bus_steps_[dbcc_condition_false_no_branch_offset]; + dbcc_condition_false_branch_steps_ = &all_bus_steps_[dbcc_condition_false_branch_offset]; + // Set initial state. Largely TODO. active_step_ = reset_bus_steps_; effective_address_[0] = 0; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index ecefecb69..cc1ed2a4e 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -59,7 +59,9 @@ class ProcessorStorage { CMPb, CMPw, CMPl, BTSTb, BTSTl, - BRA, Bcc, JMP, + JMP, + BRA, Bcc, + DBcc, }; /*! @@ -187,7 +189,7 @@ class ProcessorStorage { AssembleLongWordAddressFromPrefetch, /// Copies the next two prefetch words into one of the bus_data_. - AssembleLongWordDataFromPrefetch + AssembleLongWordDataFromPrefetch, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; @@ -251,11 +253,16 @@ class ProcessorStorage { // Special steps for exception handlers. BusStep *reset_bus_steps_; - // Special micro-op sequences for conditionals. + // Special micro-op sequences and storage for conditionals. BusStep *branch_taken_bus_steps_; BusStep *branch_byte_not_taken_bus_steps_; BusStep *branch_word_not_taken_bus_steps_; + uint32_t dbcc_false_address_; + BusStep *dbcc_condition_true_steps_; + BusStep *dbcc_condition_false_no_branch_steps_; + BusStep *dbcc_condition_false_branch_steps_; + // Current bus step pointer, and outer program pointer. Program *active_program_ = nullptr; MicroOp *active_micro_op_ = nullptr; @@ -267,6 +274,33 @@ class ProcessorStorage { /// Sets or clears the supervisor flag, ensuring the stack pointer is properly updated. void set_is_supervisor(bool); + inline bool evaluate_condition(uint8_t code) { + switch(code & 0xf) { + default: + case 0x00: return true; // true + case 0x01: return false; // false + case 0x02: return zero_result_ && !carry_flag_; // high + case 0x03: return !zero_result_ || carry_flag_; // low or same + case 0x04: return !carry_flag_; // carry clear + case 0x05: return carry_flag_; // carry set + case 0x06: return zero_result_; // not equal + case 0x07: return !zero_result_; // equal + case 0x08: return !overflow_flag_; // overflow clear + case 0x09: return overflow_flag_; // overflow set + case 0x0a: return !negative_flag_; // positive + case 0x0b: return negative_flag_; // negative + case 0x0c: // greater than or equal + return (negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_); + case 0x0d: // less than + return (negative_flag_ || !overflow_flag_) && (!negative_flag_ || overflow_flag_); + case 0x0e: // greater than + return zero_result_ && ((negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_)); + case 0x0f: // less than or equal + return (!zero_result_ || negative_flag_) && (!overflow_flag_ || !negative_flag_) && overflow_flag_; + } + } + + private: friend class ProcessorStorageConstructor; }; From 652f4ebfed43c422aaeacd7708deab011df23ac5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 7 Apr 2019 22:07:39 -0400 Subject: [PATCH 066/239] Implements CLR, NEG, NEGX and NOT. --- .../Implementation/68000Implementation.hpp | 135 +++++++++++++++++- .../68000/Implementation/68000Storage.cpp | 107 ++++++++++++++ .../68000/Implementation/68000Storage.hpp | 5 + 3 files changed, 240 insertions(+), 7 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index c15a8ea21..bf4df3819 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -58,6 +58,9 @@ template void Processor: active_micro_op_ = active_program_->micro_operations; } +#define sub_overflow() (source ^ destination) & (destination ^ result) +#define add_overflow() ~(source ^ destination) & (destination ^ result) + switch(active_micro_op_->action) { default: std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; @@ -86,7 +89,7 @@ template void Processor: zero_result_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; + overflow_flag_ = add_overflow() & 0x80; // Store the result. active_program_->destination->halves.low.halves.low = uint8_t(result); @@ -101,7 +104,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80; + overflow_flag_ = add_overflow() & 0x80; } break; case Operation::ADDw: { @@ -112,7 +115,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); extend_flag_ = carry_flag_ = result & ~0xffff; negative_flag_ = result & 0x8000; - overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x8000; + overflow_flag_ = add_overflow() & 0x8000; } break; case Operation::ADDl: { @@ -123,7 +126,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); extend_flag_ = carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; - overflow_flag_ = ~(source ^ destination) & (destination ^ result) & 0x80000000; + overflow_flag_ = add_overflow() & 0x80000000; } break; case Operation::ADDAw: @@ -210,6 +213,25 @@ template void Processor: } } break; + /* + CLRs: store 0 to the destination, set the zero flag, and clear + negative, overflow and carry. + */ + case Operation::CLRb: + active_program_->destination->halves.low.halves.low = 0; + negative_flag_ = overflow_flag_ = carry_flag_ = zero_result_ = 0; + break; + + case Operation::CLRw: + active_program_->destination->halves.low.full = 0; + negative_flag_ = overflow_flag_ = carry_flag_ = zero_result_ = 0; + break; + + case Operation::CLRl: + active_program_->destination->full = 0; + negative_flag_ = overflow_flag_ = carry_flag_ = zero_result_ = 0; + break; + /* CMP.b, CMP.l and CMP.w: sets the condition flags (other than extend) based on a subtraction of the source from the destination; the result of the subtraction is not stored. @@ -222,7 +244,7 @@ template void Processor: zero_result_ = result & 0xff; carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + overflow_flag_ = sub_overflow() & 0x80; } break; case Operation::CMPw: { @@ -233,7 +255,7 @@ template void Processor: zero_result_ = result & 0xffff; carry_flag_ = result & ~0xffff; negative_flag_ = result & 0x8000; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x8000; + overflow_flag_ = sub_overflow() & 0x8000; } break; case Operation::CMPl: { @@ -244,7 +266,7 @@ template void Processor: zero_result_ = uint32_t(result); carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80000000; + overflow_flag_ = sub_overflow() & 0x80000000; } break; // JMP: copies the source to the program counter. @@ -310,12 +332,111 @@ template void Processor: active_program_->source->halves.low.full = get_status(); break; + /* + NEGs: negatives the destination, setting the zero, + negative, overflow and carry flags appropriate, and extend. + */ + case Operation::NEGb: { + const int source = 0; + const int destination = active_program_->destination->halves.low.halves.low; + const int result = source - destination; + active_program_->destination->halves.low.halves.low = result; + + zero_result_ = result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = sub_overflow() & 0x80; + } break; + + case Operation::NEGw: { + const int source = 0; + const int destination = active_program_->destination->halves.low.full; + const int result = source - destination; + active_program_->destination->halves.low.full = result; + + zero_result_ = result & 0xffff; + extend_flag_ = carry_flag_ = result & ~0xffff; + negative_flag_ = result & 0x8000; + overflow_flag_ = sub_overflow() & 0x8000; + } break; + + case Operation::NEGl: { + const int source = 0; + const int destination = active_program_->destination->full; + int64_t result = source - destination; + active_program_->destination->full = uint32_t(result); + + zero_result_ = uint_fast32_t(result); + extend_flag_ = carry_flag_ = result >> 32; + negative_flag_ = result & 0x80000000; + overflow_flag_ = sub_overflow() & 0x80000000; + } break; + + /* + NEGXs: NEG, with extend. + */ + case Operation::NEGXb: { + const int source = 0; + const int destination = active_program_->destination->halves.low.halves.low; + const int result = source - destination - (extend_flag_ ? 1 : 0); + active_program_->destination->halves.low.halves.low = result; + + zero_result_ = result & 0xff; + extend_flag_ = carry_flag_ = result & ~0xff; + negative_flag_ = result & 0x80; + overflow_flag_ = sub_overflow() & 0x80; + } break; + + case Operation::NEGXw: { + const int source = 0; + const int destination = active_program_->destination->halves.low.full; + const int result = source - destination - (extend_flag_ ? 1 : 0); + active_program_->destination->halves.low.full = result; + + zero_result_ = result & 0xffff; + extend_flag_ = carry_flag_ = result & ~0xffff; + negative_flag_ = result & 0x8000; + overflow_flag_ = sub_overflow() & 0x8000; + } break; + + case Operation::NEGXl: { + const int source = 0; + const int destination = active_program_->destination->full; + int64_t result = source - destination - (extend_flag_ ? 1 : 0); + active_program_->destination->full = result; + + zero_result_ = result; + extend_flag_ = carry_flag_ = result >> 32; + negative_flag_ = result & 0x80000000; + overflow_flag_ = sub_overflow() & 0x80000000; + } break; + /* The no-op. */ case Operation::None: break; + // NOTs: take the logical inverse, affecting the negative and zero flags. + + case Operation::NOTb: + active_program_->destination->halves.low.halves.low ^= 0xff; + zero_result_ = active_program_->destination->halves.low.halves.low; + negative_flag_ = zero_result_ & 0x80; + break; + + case Operation::NOTw: + active_program_->destination->halves.low.full ^= 0xffff; + zero_result_ = active_program_->destination->halves.low.full; + negative_flag_ = zero_result_ & 0x8000; + break; + + case Operation::NOTl: + active_program_->destination->full ^= 0xffffffff; + zero_result_ = active_program_->destination->full; + negative_flag_ = zero_result_ & 0x80000000; + break; + /* SBCD subtracts the lowest byte of the source from that of the destination using BCD arithmetic, obeying the extend flag. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 0a6e6e5c2..38e255ed4 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -270,6 +270,7 @@ struct ProcessorStorageConstructor { BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # CMP, DBcc, // the low three bits nominate a register; everything else is decoded in real time + CLRNEGNEGXNOT, }; using Operation = ProcessorStorage::Operation; @@ -343,6 +344,19 @@ struct ProcessorStorageConstructor { {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) {0xf0f8, 0x50c8, Operation::DBcc, Decoder::DBcc}, // 4-91 (p195) + + {0xffc0, 0x4200, Operation::CLRb, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) + {0xffc0, 0x4240, Operation::CLRw, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) + {0xffc0, 0x4280, Operation::CLRl, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) + {0xffc0, 0x4400, Operation::NEGb, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) + {0xffc0, 0x4440, Operation::NEGw, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) + {0xffc0, 0x4480, Operation::NEGl, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) + {0xffc0, 0x4000, Operation::NEGXb, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) + {0xffc0, 0x4040, Operation::NEGXw, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) + {0xffc0, 0x4080, Operation::NEGXl, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) + {0xffc0, 0x4600, Operation::NOTb, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) + {0xffc0, 0x4640, Operation::NOTw, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) + {0xffc0, 0x4680, Operation::NOTl, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -827,6 +841,99 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::CLRNEGNEGXNOT: { + const bool is_byte_access = !!((instruction >> 6)&3); + const bool is_long_word_access = ((instruction >> 6)&3) == 2; + + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + const int mode = combined_mode(ea_mode, ea_register); + switch((is_long_word_access ? 0x100 : 0x000) | mode) { + default: continue; + + case 0x000: // [CLR/NEG/NEGX/NOT].bw Dn + case 0x100: // [CLR/NEG/NEGX/NOT].l Dn + op(Action::PerformOperation, seq("np")); + break; + + case 0x002: // [CLR/NEG/NEGX/NOT].bw (An) + case 0x003: // [CLR/NEG/NEGX/NOT].bw (An)+ + op(Action::None, seq("nrd", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); + if(ea_mode == 0x03) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case 0x102: // [CLR/NEG/NEGX/NOT].l (An) + case 0x103: // [CLR/NEG/NEGX/NOT].l (An)+ + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + if(ea_mode == 0x03) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; + + case 0x004: // [CLR/NEG/NEGX/NOT].bw -(An) + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + seq("nrd", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); + break; + + case 0x104: // [CLR/NEG/NEGX/NOT].l -(An) + op(int(Action::Decrement4) | MicroOp::DestinationMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, + seq("n nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + break; + + case 0x005: // [CLR/NEG/NEGX/NOT].bw (d16, An) + case 0x006: // [CLR/NEG/NEGX/NOT].bw (d8, An, Xn) + op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, + seq(pseq("np nrd", ea_mode), { ea(1) }, + !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); + break; + + case 0x105: // [CLR/NEG/NEGX/NOT].l (d16, An) + case 0x106: // [CLR/NEG/NEGX/NOT].l (d8, An, Xn) + op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, + seq(pseq("np nRd+ nrd", ea_mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + break; + + case 0x010: // [CLR/NEG/NEGX/NOT].bw (xxx).w + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, + seq("np nw", { ea(1) }, !is_byte_access)); + break; + + case 0x110: // [CLR/NEG/NEGX/NOT].l (xxx).w + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, + seq("np nw- nW", { ea(1), ea(1) })); + break; + + case 0x011: // [CLR/NEG/NEGX/NOT].bw (xxx).l + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, + seq("np nw", { ea(1) }, !is_byte_access)); + break; + + case 0x111: // [CLR/NEG/NEGX/NOT].l (xxx).l + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, + seq("np nw- nW", { ea(1), ea(1) })); + break; + } + } break; + case Decoder::CMP: { const auto source_register = (instruction >> 9) & 7; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index cc1ed2a4e..e6fed625c 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -62,6 +62,11 @@ class ProcessorStorage { JMP, BRA, Bcc, DBcc, + + CLRb, CLRw, CLRl, + NEGXb, NEGXw, NEGXl, + NEGb, NEGw, NEGl, + NOTb, NOTw, NOTl, }; /*! From eda88cc462de6acc7486dd81180e46daf8927a3c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 7 Apr 2019 22:24:17 -0400 Subject: [PATCH 067/239] Implements MOVE to CCR. --- .../Implementation/68000Implementation.hpp | 41 +++++++++++++------ .../68000/Implementation/68000Storage.cpp | 9 ++-- .../68000/Implementation/68000Storage.hpp | 1 + 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index bf4df3819..38289f6f7 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -6,24 +6,32 @@ // Copyright © 2019 Thomas Harte. All rights reserved. // -#define get_status() \ +#define get_ccr() \ ( \ (carry_flag_ ? 0x0001 : 0x0000) | \ (overflow_flag_ ? 0x0002 : 0x0000) | \ (zero_result_ ? 0x0000 : 0x0004) | \ (negative_flag_ ? 0x0008 : 0x0000) | \ - (extend_flag_ ? 0x0010 : 0x0000) | \ + (extend_flag_ ? 0x0010 : 0x0000) \ + ) + +#define get_status() \ + ( \ + get_ccr() | \ (interrupt_level_ << 8) | \ (trace_flag_ ? 0x8000 : 0x0000) | \ (is_supervisor_ << 13) \ ) -#define set_status(x) \ +#define set_ccr(x) \ carry_flag_ = (x) & 0x0001; \ overflow_flag_ = (x) & 0x0002; \ zero_result_ = ((x) & 0x0004) ^ 0x0004; \ negative_flag_ = (x) & 0x0008; \ - extend_flag_ = (x) & 0x0010; \ + extend_flag_ = (x) & 0x0010; + +#define set_status(x) \ + set_ccr(x) \ interrupt_level_ = ((x) >> 8) & 7; \ trace_flag_ = (x) & 0x8000; \ set_is_supervisor(!!(((x) >> 13) & 1)); @@ -58,9 +66,6 @@ template void Processor: active_micro_op_ = active_program_->micro_operations; } -#define sub_overflow() (source ^ destination) & (destination ^ result) -#define add_overflow() ~(source ^ destination) & (destination ^ result) - switch(active_micro_op_->action) { default: std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; @@ -69,6 +74,8 @@ template void Processor: case int(MicroOp::Action::None): break; case int(MicroOp::Action::PerformOperation): +#define sub_overflow() (source ^ destination) & (destination ^ result) +#define add_overflow() ~(source ^ destination) & (destination ^ result) switch(active_program_->operation) { /* ABCD adds the lowest bytes form the source and destination using BCD arithmetic, @@ -332,6 +339,10 @@ template void Processor: active_program_->source->halves.low.full = get_status(); break; + case Operation::MOVEtoCCR: + set_ccr(active_program_->source->full); + break; + /* NEGs: negatives the destination, setting the zero, negative, overflow and carry flags appropriate, and extend. @@ -403,9 +414,9 @@ template void Processor: const int source = 0; const int destination = active_program_->destination->full; int64_t result = source - destination - (extend_flag_ ? 1 : 0); - active_program_->destination->full = result; + active_program_->destination->full = uint32_t(result); - zero_result_ = result; + zero_result_ = uint_fast32_t(result); extend_flag_ = carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; overflow_flag_ = sub_overflow() & 0x80000000; @@ -456,7 +467,7 @@ template void Processor: zero_result_ |= result & 0xff; extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + overflow_flag_ = sub_overflow() & 0x80; // Store the result. active_program_->destination->halves.low.halves.low = uint8_t(result); @@ -470,7 +481,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); extend_flag_ = carry_flag_ = result & ~0xff; negative_flag_ = result & 0x80; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80; + overflow_flag_ = sub_overflow() & 0x80; } break; case Operation::SUBw: { @@ -481,7 +492,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); extend_flag_ = carry_flag_ = result & ~0xffff; negative_flag_ = result & 0x8000; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x8000; + overflow_flag_ = sub_overflow() & 0x8000; } break; case Operation::SUBl: { @@ -492,7 +503,7 @@ template void Processor: zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); extend_flag_ = carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; - overflow_flag_ = (source ^ destination) & (destination ^ result) & 0x80000000; + overflow_flag_ = sub_overflow() & 0x80000000; } break; case Operation::SUBAw: @@ -510,6 +521,8 @@ template void Processor: std::cerr << "Should do something with program operation " << int(active_program_->operation) << std::endl; break; } +#undef sub_overflow +#undef add_overflow break; case int(MicroOp::Action::SetMoveFlagsb): @@ -775,3 +788,5 @@ template void Processor: #undef get_status #undef set_status +#undef set_ccr +#undef get_ccr diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 38e255ed4..44bf87fd4 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -256,7 +256,7 @@ struct ProcessorStorageConstructor { enum class Decoder { Decimal, MOVE, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. - MOVEtoSR, // six lowest bits are [mode, register], decoding to MOVE SR + MOVEtoSRCCR, // six lowest bits are [mode, register], decoding to MOVE SR/CCR CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled @@ -309,7 +309,8 @@ struct ProcessorStorageConstructor { {0xf000, 0x2000, Operation::MOVEl, Decoder::MOVE}, // 4-116 (p220) {0xf000, 0x3000, Operation::MOVEw, Decoder::MOVE}, // 4-116 (p220) - {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSR}, // 6-19 (p473) + {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSRCCR}, // 6-19 (p473) + {0xffc0, 0x44c0, Operation::MOVEtoCCR, Decoder::MOVEtoSRCCR}, // 4-123 (p227) {0xf1c0, 0xb000, Operation::CMPb, Decoder::CMP}, // 4-75 (p179) {0xf1c0, 0xb040, Operation::CMPw, Decoder::CMP}, // 4-75 (p179) @@ -1245,10 +1246,10 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::MOVEtoSR: { + case Decoder::MOVEtoSRCCR: { if(ea_mode == 1) continue; storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); - storage_.instructions[instruction].requires_supervisor = true; + storage_.instructions[instruction].requires_supervisor = (operation == Operation::MOVEtoSR); /* DEVIATION FROM YACHT.TXT: it has all of these reading an extra word from the PC; this looks like a mistake so I've padded with nil cycles in the middle. */ diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index e6fed625c..a1621cec6 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -55,6 +55,7 @@ class ProcessorStorage { MOVEAw, MOVEAl, MOVEtoSR, MOVEfromSR, + MOVEtoCCR, CMPb, CMPw, CMPl, BTSTb, BTSTl, From 73c027f8e31ccaf2a61c019e6a539fcd3f1ebe5f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 8 Apr 2019 22:40:38 -0400 Subject: [PATCH 068/239] Implements CMPA and CMPM. [Provisionally] completing the CMPs. --- .../68000/Implementation/68000Storage.cpp | 143 +++++++++++++++++- 1 file changed, 141 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 44bf87fd4..79404546d 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -254,10 +254,14 @@ struct ProcessorStorageConstructor { */ void install_instructions() { enum class Decoder { + CMP, // Maps a destination register and a source mode and register to a CMP. + CMPI, // Maps a destination mode and register to a CMPI. + CMPA, // Maps a destination register and a source mode and register to a CMPA. + CMPM, // Maps to a CMPM. + Decimal, MOVE, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. MOVEtoSRCCR, // six lowest bits are [mode, register], decoding to MOVE SR/CCR - CMPI, // eight lowest bits are [size, mode, register], decoding to CMPI BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled LEA, // decodes register, mode, register @@ -268,7 +272,6 @@ struct ProcessorStorageConstructor { ADDASUBA, BTST, // bit 9,10,11 are register, six lowest bits are [mode, register], decoding to BTST BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # - CMP, DBcc, // the low three bits nominate a register; everything else is decoded in real time CLRNEGNEGXNOT, }; @@ -315,10 +318,18 @@ struct ProcessorStorageConstructor { {0xf1c0, 0xb000, Operation::CMPb, Decoder::CMP}, // 4-75 (p179) {0xf1c0, 0xb040, Operation::CMPw, Decoder::CMP}, // 4-75 (p179) {0xf1c0, 0xb080, Operation::CMPl, Decoder::CMP}, // 4-75 (p179) + + {0xf1c0, 0xb0c0, Operation::CMPw, Decoder::CMPA}, // 4-77 (p181) + {0xf1c0, 0xb1c0, Operation::CMPl, Decoder::CMPA}, // 4-77 (p181) + {0xffc0, 0x0c00, Operation::CMPb, Decoder::CMPI}, // 4-79 (p183) {0xffc0, 0x0c40, Operation::CMPw, Decoder::CMPI}, // 4-79 (p183) {0xffc0, 0x0c80, Operation::CMPl, Decoder::CMPI}, // 4-79 (p183) + {0xf1f8, 0xb108, Operation::CMPb, Decoder::CMPM}, // 4-81 (p185) + {0xf1f8, 0xb148, Operation::CMPw, Decoder::CMPM}, // 4-81 (p185) + {0xf1f8, 0xb188, Operation::CMPl, Decoder::CMPM}, // 4-81 (p185) + {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) @@ -1048,6 +1059,106 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::CMPA: { + const int destination_register = (instruction >> 9) & 7; + + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + storage_.instructions[instruction].destination = &storage_.address_[destination_register]; + + const int mode = combined_mode(ea_mode, ea_register); + const bool is_long_word_access = mapping.operation == Operation::CMPl; + switch((is_long_word_access ? 0x100 : 0) | mode) { + default: continue; + + case 0x000: // CMPA.w Dn, An + case 0x001: // CMPA.w An, An + case 0x100: // CMPA.l Dn, An + case 0x101: // CMPA.l An, An + op(Action::PerformOperation, seq("np n")); + break; + + case 0x002: // CMPA.w (An), An + case 0x003: // CMPA.w (An)+, An + op(Action::None, seq("nr", { a(ea_register) })); + op(Action::PerformOperation, seq("np n")); + if(ea_mode == 0x03) { + op(int(Action::Increment2) | MicroOp::SourceMask); + } + break; + + case 0x102: // CMPA.l (An), An + case 0x103: // CMPA.l (An)+, An + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + if(ea_mode == 0x03) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + break; + + case 0x004: // CMPA.w -(An), An + op(int(Action::Decrement2) | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x104: // CMPA.l -(An), An + op(int(Action::Decrement4) | MicroOp::SourceMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x012: // CMPA.w (d16, PC), An + case 0x013: // CMPA.w (d8, PC, Xn), An + case 0x005: // CMPA.w (d16, An), An + case 0x006: // CMPA.w (d8, An, Xn), An + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nr", ea_mode), { ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x112: // CMPA.l (d16, PC), An + case 0x113: // CMPA.l (d8, PC, Xn), An + case 0x105: // CMPA.l (d16, An), An + case 0x106: // CMPA.l (d8, An, Xn), An + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr", ea_mode), { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x010: // CMPA.w (xxx).w, An + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x110: // CMPA.l (xxx).w, An + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x011: // CMPA.w (xxx).l, An + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x111: // CMPA.l (xxx).l, An + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case 0x014: // CMPA.w #, An + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::PerformOperation, seq("np np n")); + break; + + case 0x114: // CMPA.l #, An + storage_.instructions[instruction].source = &storage_.prefetch_queue_; + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("np np n")); + break; + } + } break; + case Decoder::CMPI: { if(ea_mode == 1) continue; @@ -1155,6 +1266,34 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::CMPM: { + const int source_register = (instruction >> 9)&7; + const int destination_register = ea_register; + + storage_.instructions[instruction].set_source(storage_, 1, source_register); + storage_.instructions[instruction].set_destination(storage_, 1, destination_register); + + const bool is_byte_operation = operation == Operation::CMPw; + + switch(operation) { + default: continue; + + case Operation::CMPb: // CMPM.b, (An)+, (An)+ + case Operation::CMPw: // CMPM.w, (An)+, (An)+ + op(Action::None, seq("nr nr np", {a(source_register), a(destination_register)}, !is_byte_operation)); + op(Action::PerformOperation); + op(int(is_byte_operation ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask | MicroOp::DestinationMask); + break; + + case Operation::CMPl: + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask | MicroOp::DestinationMask, + seq("nR+ nr nRd+ nrd np", {ea(0), ea(0), ea(1), ea(1)})); + op(Action::PerformOperation); + op(int(Action::Increment4) | MicroOp::SourceMask | MicroOp::DestinationMask); + break; + } + } break; + case Decoder::DBcc: { storage_.instructions[instruction].source = &storage_.data_[ea_register]; From 7886fe677a203c9b4df2eb6f3b144076c963fd33 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 8 Apr 2019 22:51:18 -0400 Subject: [PATCH 069/239] Cleans up commenting. --- .../68000/Implementation/68000Storage.cpp | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 79404546d..04b63f6cc 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -254,26 +254,35 @@ struct ProcessorStorageConstructor { */ void install_instructions() { enum class Decoder { + ABCDSBCD, // Maps source and desintation registers and a register/memory selection bit to an ABCD or SBCD. + + ADDSUB, // Maps a register and a register and mode to an ADD or SUB. + ADDASUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. + + BRA, // Maps to a BRA. All fields are decoded at runtime. + Bcc, // Maps to a Bcc. All fields are decoded at runtime. + + BTST, // Maps a source register and a destination register and mode to a BTST. + BTSTIMM, // Maps a destination mode and register to a BTST #. + + CLRNEGNEGXNOT, // Maps a destination mode and register to a CLR, NEG, NEGX or NOT. + CMP, // Maps a destination register and a source mode and register to a CMP. CMPI, // Maps a destination mode and register to a CMPI. CMPA, // Maps a destination register and a source mode and register to a CMPA. CMPM, // Maps to a CMPM. - Decimal, - MOVE, // twelve lowest bits are register, mode, mode, register, for destination and source respectively. - MOVEtoSRCCR, // six lowest bits are [mode, register], decoding to MOVE SR/CCR - BRA, // eight lowest bits are ignored, and an 'n np np' is scheduled - Bcc, // twelve lowest bits are ignored, only a PerformAction is scheduled - LEA, // decodes register, mode, register - MOVEq, // decodes just a destination register - RESET, // no further decoding applied, performs reset cycle - JMP, // six lowest bits are [mode, register], decoding to JMP - ADDSUB, - ADDASUBA, - BTST, // bit 9,10,11 are register, six lowest bits are [mode, register], decoding to BTST - BTSTIMM, // six lowest bits are [mode, register], decoding to BTST # - DBcc, // the low three bits nominate a register; everything else is decoded in real time - CLRNEGNEGXNOT, + DBcc, // Maps a destination register to a DBcc. + + JMP, // Maps a mode and register to a JMP. + + LEA, // Maps a destination register and a source mode and register to an LEA. + + MOVE, // Maps a source mode and register and a destination mode and register to a MOVE. + MOVEtoSRCCR, // Maps a source mode and register to a MOVE SR or MOVE CCR. + MOVEq, // Maps a destination register to a MOVEQ. + + RESET, // Maps to a RESET. }; using Operation = ProcessorStorage::Operation; @@ -297,8 +306,8 @@ struct ProcessorStorageConstructor { NB: a vector is used to allow easy iteration. */ const std::vector mappings = { - {0xf1f0, 0x8100, Operation::SBCD, Decoder::Decimal}, // 4-171 (p275) - {0xf1f0, 0xc100, Operation::ABCD, Decoder::Decimal}, // 4-3 (p107) + {0xf1f0, 0xc100, Operation::ABCD, Decoder::ABCDSBCD}, // 4-3 (p107) + {0xf1f0, 0x8100, Operation::SBCD, Decoder::ABCDSBCD}, // 4-171 (p275) // {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) // {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) @@ -833,7 +842,7 @@ struct ProcessorStorageConstructor { } break; // Decodes the format used by ABCD and SBCD. - case Decoder::Decimal: { + case Decoder::ABCDSBCD: { const int destination_register = (instruction >> 9) & 7; if(instruction & 8) { From f750671f33cafa6518e4769e2b48382aa796fd24 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 9 Apr 2019 16:54:41 -0400 Subject: [PATCH 070/239] Stepping gingerly onwards, adds a double-decoding test. As a result of that, collapses BRA into Bcc. Which provisionally looks correct. --- .../68000/Implementation/68000Storage.cpp | 58 ++++++++++++++++++- .../68000/Implementation/68000Storage.hpp | 9 +++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 04b63f6cc..05ae6fcd1 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -283,6 +283,10 @@ struct ProcessorStorageConstructor { MOVEq, // Maps a destination register to a MOVEQ. RESET, // Maps to a RESET. + + ASLRLSLRROLRROXLRr, // Maps a destination register to a AS[L/R], LS[L/R], RO[L/R], ROX[L/R]; shift quantities are + // decoded at runtime. + ASLRLSLRROLRROXLRm, // Maps a destination mode and register to a memory-based AS[L/R], LS[L/R], RO[L/R], ROX[L/R]. }; using Operation = ProcessorStorage::Operation; @@ -339,8 +343,9 @@ struct ProcessorStorageConstructor { {0xf1f8, 0xb148, Operation::CMPw, Decoder::CMPM}, // 4-81 (p185) {0xf1f8, 0xb188, Operation::CMPl, Decoder::CMPM}, // 4-81 (p185) - {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) +// {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) TODO: confirm that this really, really is just a special case of Bcc. {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) + {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) @@ -378,8 +383,59 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4600, Operation::NOTb, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) {0xffc0, 0x4640, Operation::NOTw, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) {0xffc0, 0x4680, Operation::NOTl, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) + + {0xf1d8, 0xe000, Operation::ASLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe040, Operation::ASLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe080, Operation::ASLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xffc0, 0xe0c0, Operation::ASLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + + {0xf1d8, 0xe100, Operation::ASRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe140, Operation::ASRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe180, Operation::ASRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xffc0, 0xe1c0, Operation::ASRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + + {0xf1d8, 0xe008, Operation::LSLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe048, Operation::LSLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe088, Operation::LSLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xffc0, 0xe2c0, Operation::LSLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + + {0xf1d8, 0xe108, Operation::LSRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe148, Operation::LSRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe188, Operation::LSRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xffc0, 0xe3c0, Operation::LSRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + + {0xf1d8, 0xe018, Operation::ROLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe058, Operation::ROLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe098, Operation::ROLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xffc0, 0xe6c0, Operation::ROLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + + {0xf1d8, 0xe118, Operation::RORb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe158, Operation::RORw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe198, Operation::RORl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xffc0, 0xe7c0, Operation::RORm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + + {0xf1d8, 0xe010, Operation::ROXLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe050, Operation::ROXLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe090, Operation::ROXLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xffc0, 0xe4c0, Operation::ROXLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + + {0xf1d8, 0xe110, Operation::ROXRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe150, Operation::ROXRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe190, Operation::ROXRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xffc0, 0xe5c0, Operation::ROXRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) }; +#ifndef NDEBUG + // Verify no double mappings. + for(int instruction = 0; instruction < 65536; ++instruction) { + int hits = 0; + for(const auto &mapping: mappings) { + if((instruction & mapping.mask) == mapping.value) ++hits; + } + assert(hits < 2); + } +#endif + std::vector micro_op_pointers(65536, std::numeric_limits::max()); // The arbitrary_base is used so that the offsets returned by assemble_program into diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index a1621cec6..971d8ab1a 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -68,6 +68,15 @@ class ProcessorStorage { NEGXb, NEGXw, NEGXl, NEGb, NEGw, NEGl, NOTb, NOTw, NOTl, + + ASLb, ASLw, ASLl, ASLm, + ASRb, ASRw, ASRl, ASRm, + LSLb, LSLw, LSLl, LSLm, + LSRb, LSRw, LSRl, LSRm, + ROLb, ROLw, ROLl, ROLm, + RORb, RORw, RORl, RORm, + ROXLb, ROXLw, ROXLl, ROXLm, + ROXRb, ROXRw, ROXRl, ROXRm, }; /*! From 7a0319cfe56e2b4ab1c218ca3029eca7e8da3a0b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 9 Apr 2019 21:48:08 -0400 Subject: [PATCH 071/239] Kicks the work of dealing with ASL/etc into the runtime. --- .../68000/Implementation/68000Storage.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 05ae6fcd1..a1df887cd 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -918,6 +918,55 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::ASLRLSLRROLRROXLRr: { + storage_.instructions[instruction].set_destination(storage_, 0, ea_register); + + // All decoding occurs at runtime. + op(Action::PerformOperation); + } break; + + case Decoder::ASLRLSLRROLRROXLRm: { + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + switch(combined_mode(ea_mode, ea_register)) { + default: continue; + + case 0x02: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An) + case 0x03: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An)+ + op(Action::None, seq("nrd np", { a(ea_register) })); + op(Action::PerformOperation, seq("nw", { a(ea_register) })); + if(ea_mode == 0x03) { + op(int(Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case 0x04: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w -(An) + op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) })); + op(Action::PerformOperation, seq("nw", { a(ea_register) })); + break; + + case 0x05: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d16, An) + case 0x06: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d8, An, Xn) + op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", ea_mode), { ea(1) })); + op(Action::PerformOperation, seq("nw", { ea(1) })); + break; + + case 0x10: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).w + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) })); + op(Action::PerformOperation, seq("nw", { ea(1) })); + break; + + case 0x11: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).l + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) })); + op(Action::PerformOperation, seq("nw", { ea(1) })); + break; + } + } break; + case Decoder::CLRNEGNEGXNOT: { const bool is_byte_access = !!((instruction >> 6)&3); const bool is_long_word_access = ((instruction >> 6)&3) == 2; From 85d25068a89be800b80bed431ff5bf3dcd0b47d7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 9 Apr 2019 22:04:25 -0400 Subject: [PATCH 072/239] Attempts a full implementation of memory shifts. --- .../Implementation/68000Implementation.hpp | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 38289f6f7..d4d8b63ac 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -514,6 +514,76 @@ template void Processor: active_program_->destination->full -= active_program_->source->full; break; + /* + Shifts and rotates. + */ +#define set_flags(v, m, t) \ + zero_result_ = v; \ + negative_flag_ = zero_result_ & m; \ + overflow_flag_ = (value ^ zero_result_) & m; \ + extend_flag_ = carry_flag_ = value & t; + +#define set_flags_b(t) set_flags(active_program_->destination->halves.low.halves.low, 0x80, t) +#define set_flags_w(t) set_flags(active_program_->destination->halves.low.full, 0x8000, t) +#define set_flags_l(t) set_flags(active_program_->destination->full, 0x80000000, t) + + case Operation::LSLm: + case Operation::ASLm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full <<= 1; + set_flags_w(0x8000); + } break; + + case Operation::LSRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full >>= 1; + set_flags_w(0x0001); + } break; + + case Operation::ASRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (value & 0x8000); + set_flags_w(0x0001); + } break; + +#undef set_flags +#define set_flags(v, m, t) \ + zero_result_ = v; \ + negative_flag_ = zero_result_ & m; \ + overflow_flag_ = 0; \ + carry_flag_ = value & t; + + case Operation::ROLm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full << 1) | (value >> 15); + set_flags_w(0x8000); + } break; + + case Operation::RORm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (value << 15); + set_flags_w(0x0001); + } break; + + case Operation::ROXLm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full << 1) | (extend_flag_ ? 0x0001 : 0x0000); + extend_flag_ = value & 0x8000; + set_flags_w(0x8000); + } break; + + case Operation::ROXRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (extend_flag_ ? 0x8000 : 0x0000); + extend_flag_ = value & 0x0001; + set_flags_w(0x0001); + } break; + +#undef set_flags +#undef set_flags_b +#undef set_flags_w +#undef set_flags_l + /* Development period debugging. */ From a07de97df46cc7aac05212cf6d420ff267b895ba Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 9 Apr 2019 22:12:37 -0400 Subject: [PATCH 073/239] Implements the fixed part of register shifts. --- Processors/68000/Implementation/68000Storage.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index a1df887cd..ccae034c0 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -921,7 +921,13 @@ struct ProcessorStorageConstructor { case Decoder::ASLRLSLRROLRROXLRr: { storage_.instructions[instruction].set_destination(storage_, 0, ea_register); - // All decoding occurs at runtime. + // All further decoding occurs at runtime; that's also when the proper number of + // no-op cycles will be scheduled. + if(((instruction >> 6) & 3) == 2) { + op(Action::None, seq("np nn")); + } else { + op(Action::None, seq("np n")); + } op(Action::PerformOperation); } break; From 43f619a08125835e5fab042fd8b3cc0856bb7b76 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 10 Apr 2019 22:31:04 -0400 Subject: [PATCH 074/239] Implements ASL, ASR, LSL and LSR. --- .../Implementation/68000Implementation.hpp | 66 ++++++++++----- .../68000/Implementation/68000Storage.cpp | 82 +++++++++++-------- .../68000/Implementation/68000Storage.hpp | 1 + 3 files changed, 93 insertions(+), 56 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index d4d8b63ac..ca736e34a 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -53,16 +53,16 @@ template void Processor: // TODO: unless an interrupt is pending, or the trap flag is set. - const uint16_t next_instruction = prefetch_queue_.halves.high.full; - if(!instructions[next_instruction].micro_operations) { + decoded_instruction_ = prefetch_queue_.halves.high.full; + if(!instructions[decoded_instruction_].micro_operations) { // TODO: once all instructions are implemnted, this should be an instruction error. - std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << next_instruction << " from " << (program_counter_.full - 4) << std::endl; + std::cerr << "68000 Abilities exhausted; can't manage instruction " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << std::endl; return; } else { - std::cout << "Performing " << std::hex << next_instruction << " from " << (program_counter_.full - 4) << std::endl; + std::cout << "Performing " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << std::endl; } - active_program_ = &instructions[next_instruction]; + active_program_ = &instructions[decoded_instruction_]; active_micro_op_ = active_program_->micro_operations; } @@ -523,28 +523,51 @@ template void Processor: overflow_flag_ = (value ^ zero_result_) & m; \ extend_flag_ = carry_flag_ = value & t; +#define decode_shift_count() \ + const int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : (decoded_instruction_ >> 9) & 7; \ + active_step_->microcycle.length = HalfCycles(4 * shift_count); + #define set_flags_b(t) set_flags(active_program_->destination->halves.low.halves.low, 0x80, t) #define set_flags_w(t) set_flags(active_program_->destination->halves.low.full, 0x8000, t) #define set_flags_l(t) set_flags(active_program_->destination->full, 0x80000000, t) - case Operation::LSLm: - case Operation::ASLm: { - const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full <<= 1; - set_flags_w(0x8000); - } break; +#define shift_op(name, op, mb, mw, ml) \ + case Operation::name##b: { \ + decode_shift_count(); \ + const auto value = active_program_->destination->halves.low.halves.low; \ + op(active_program_->destination->halves.low.halves.low, shift_count, 0xff, 7); \ + set_flags_b(mb); \ + } break; \ +\ + case Operation::name##w: { \ + decode_shift_count(); \ + const auto value = active_program_->destination->halves.low.full; \ + op(active_program_->destination->halves.low.full, shift_count, 0xffff, 15); \ + set_flags_w(mw); \ + } break; \ +\ + case Operation::name##l: { \ + decode_shift_count(); \ + const auto value = active_program_->destination->full; \ + op(active_program_->destination->full, shift_count, 0xffffffff, 31); \ + set_flags_l(ml); \ + } break; \ +\ + case Operation::name##m: { \ + const auto value = active_program_->destination->halves.low.full; \ + op(active_program_->destination->halves.low.full, 1, 0xffff, 15); \ + set_flags_w(mw); \ + } break; - case Operation::LSRm: { - const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full >>= 1; - set_flags_w(0x0001); - } break; +#define lsl(x, c, m, d) x <<= c +#define lsr(x, c, m, d) x >>= c +#define asl(x, c, m, d) x <<= c +#define asr(x, c, m, d) x = (x >> c) | (((value >> d) & 1) * (m ^ (m >> c))) - case Operation::ASRm: { - const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (value & 0x8000); - set_flags_w(0x0001); - } break; + shift_op(LSL, lsl, 0x80, 0x8000, 0x80000000); + shift_op(ASL, lsl, 0x80, 0x8000, 0x80000000); + shift_op(LSR, lsr, 0x01, 0x0001, 0x00000001); + shift_op(ASR, asr, 0x01, 0x0001, 0x00000001); #undef set_flags #define set_flags(v, m, t) \ @@ -580,6 +603,7 @@ template void Processor: } break; #undef set_flags +#undef decode_shift_count #undef set_flags_b #undef set_flags_w #undef set_flags_l diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index ccae034c0..500e9abf7 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -59,6 +59,9 @@ struct ProcessorStorageConstructor { * n: no operation for four cycles; data bus is not used; * nn: no operation for eight cycles; data bus is not used; + * r: a 'replaceable'-length no operation; data bus is not used and no guarantees are + made about the length of the cycle other than that when it reaches the interpreter, + it is safe to alter the length and leave it altered; * np: program fetch; reads from the PC and adds two to it, advancing the prefetch queue; * nW: write MSW of something onto the bus; * nw: write LSW of something onto the bus; @@ -121,10 +124,17 @@ struct ProcessorStorageConstructor { // Do nothing (possibly twice). if(token == "n" || token == "nn") { - steps.push_back(step); if(token.size() == 2) { - steps.push_back(step); + step.microcycle.length = HalfCycles(8); } + steps.push_back(step); + continue; + } + + // Do nothing, but with a length that definitely won't map it to the other do-nothings. + if(token == "r"){ + step.microcycle.length = HalfCycles(0); + steps.push_back(step); continue; } @@ -384,45 +394,45 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4640, Operation::NOTw, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) {0xffc0, 0x4680, Operation::NOTl, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) - {0xf1d8, 0xe000, Operation::ASLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe040, Operation::ASLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe080, Operation::ASLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xffc0, 0xe0c0, Operation::ASLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + {0xf1d8, 0xe100, Operation::ASLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe140, Operation::ASLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe180, Operation::ASLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xffc0, 0xe1c0, Operation::ASLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) - {0xf1d8, 0xe100, Operation::ASRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe140, Operation::ASRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe180, Operation::ASRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xffc0, 0xe1c0, Operation::ASRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + {0xf1d8, 0xe000, Operation::ASRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe040, Operation::ASRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe080, Operation::ASRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) + {0xffc0, 0xe0c0, Operation::ASRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) - {0xf1d8, 0xe008, Operation::LSLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe048, Operation::LSLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe088, Operation::LSLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xffc0, 0xe2c0, Operation::LSLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + {0xf1d8, 0xe108, Operation::LSLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe148, Operation::LSLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe188, Operation::LSLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xffc0, 0xe3c0, Operation::LSLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) - {0xf1d8, 0xe108, Operation::LSRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe148, Operation::LSRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe188, Operation::LSRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xffc0, 0xe3c0, Operation::LSRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + {0xf1d8, 0xe008, Operation::LSRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe048, Operation::LSRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe088, Operation::LSRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) + {0xffc0, 0xe2c0, Operation::LSRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) - {0xf1d8, 0xe018, Operation::ROLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe058, Operation::ROLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe098, Operation::ROLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xffc0, 0xe6c0, Operation::ROLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + {0xf1d8, 0xe118, Operation::ROLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe158, Operation::ROLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe198, Operation::ROLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xffc0, 0xe7c0, Operation::ROLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) - {0xf1d8, 0xe118, Operation::RORb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe158, Operation::RORw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe198, Operation::RORl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xffc0, 0xe7c0, Operation::RORm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + {0xf1d8, 0xe018, Operation::RORb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe058, Operation::RORw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe098, Operation::RORl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) + {0xffc0, 0xe6c0, Operation::RORm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) - {0xf1d8, 0xe010, Operation::ROXLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe050, Operation::ROXLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe090, Operation::ROXLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xffc0, 0xe4c0, Operation::ROXLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + {0xf1d8, 0xe110, Operation::ROXLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe150, Operation::ROXLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe190, Operation::ROXLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xffc0, 0xe5c0, Operation::ROXLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) - {0xf1d8, 0xe110, Operation::ROXRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe150, Operation::ROXRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe190, Operation::ROXRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xffc0, 0xe5c0, Operation::ROXRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + {0xf1d8, 0xe010, Operation::ROXRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe050, Operation::ROXRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe090, Operation::ROXRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) + {0xffc0, 0xe4c0, Operation::ROXRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) }; #ifndef NDEBUG @@ -928,7 +938,9 @@ struct ProcessorStorageConstructor { } else { op(Action::None, seq("np n")); } - op(Action::PerformOperation); + + // Use a no-op bus cycle that can have its length filled in later. + op(Action::PerformOperation, seq("r")); } break; case Decoder::ASLRLSLRROLRROXLRm: { diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 971d8ab1a..92939b739 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -282,6 +282,7 @@ class ProcessorStorage { Program *active_program_ = nullptr; MicroOp *active_micro_op_ = nullptr; BusStep *active_step_ = nullptr; + uint16_t decoded_instruction_; /// Copies address_[7] to the proper stack pointer based on current mode. void write_back_stack_pointer(); From a64948a2baa62baeb658b84031186815518efbf8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 10 Apr 2019 22:42:43 -0400 Subject: [PATCH 075/239] Permits zero-bus-op non-terminals. --- Processors/68000/Implementation/68000Implementation.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index ca736e34a..0f29be8a0 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -799,7 +799,8 @@ template void Processor: // If we've got to a micro-op that includes bus steps, break out of this loop. if(!active_micro_op_->is_terminal()) { active_step_ = active_micro_op_->bus_program; - break; + if(!active_step_->is_terminal()) + break; } } } From 8e9d7c0f409b02febe495ac4c037dbf6a486208e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 10 Apr 2019 23:09:03 -0400 Subject: [PATCH 076/239] Corrects register-relative address calculation. --- .../Implementation/68000Implementation.hpp | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 0f29be8a0..00c3a78f0 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -59,7 +59,10 @@ 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 { - std::cout << "Performing " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << std::endl; + std::cout << "Performing " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; + std::cout << std::endl; } active_program_ = &instructions[decoded_instruction_]; @@ -697,16 +700,16 @@ template void Processor: break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + active_program_->source->full; + effective_address_[0] = int16_t(prefetch_queue_.halves.low.full) + active_program_->source_address->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::DestinationMask: - effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination_address->full; break; case int(MicroOp::Action::CalcD16An) | MicroOp::SourceMask | MicroOp::DestinationMask: - effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + active_program_->source->full; - effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination->full; + effective_address_[0] = int16_t(prefetch_queue_.halves.high.full) + active_program_->source_address->full; + effective_address_[1] = int16_t(prefetch_queue_.halves.low.full) + active_program_->destination_address->full; break; #define CalculateD8AnXn(data, source, target) {\ @@ -721,16 +724,16 @@ template void Processor: } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->source->full, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->source_address->full, effective_address_[0]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination->full, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination_address->full, effective_address_[1]); } break; case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask | MicroOp::DestinationMask: { - CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source->full, effective_address_[0]); - CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination->full, effective_address_[1]); + CalculateD8AnXn(prefetch_queue_.halves.high, active_program_->source_address->full, effective_address_[0]); + CalculateD8AnXn(prefetch_queue_.halves.low, active_program_->destination_address->full, effective_address_[1]); } break; case int(MicroOp::Action::CalcD8PCXn) | MicroOp::SourceMask: { From 652ebd143c3cbb793dc0a3375cd8d42a4160cbb7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 11 Apr 2019 11:58:34 -0400 Subject: [PATCH 077/239] Corrects addressing mode support for LEA. --- Processors/68000/Implementation/68000Storage.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 500e9abf7..71cbaedd3 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1477,18 +1477,19 @@ struct ProcessorStorageConstructor { const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; - case 0x04: + case 0x02: storage_.instructions[instruction].source = &storage_.address_[ea_register]; break; case 0x05: case 0x06: case 0x10: case 0x11: case 0x12: case 0x13: storage_.instructions[instruction].source = &storage_.effective_address_[0]; + storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; break; } switch(mode) { default: break; - case 0x04: // LEA (An), An (i.e. MOVEA) + case 0x02: // LEA (An), An (i.e. MOVEA) op(Action::PerformOperation, seq("np")); break; From 1098cd0c6bfc4820538f2216eabd8bd2b41476f1 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 11 Apr 2019 22:31:17 -0400 Subject: [PATCH 078/239] Begins rooting out magic constants. --- .../68000/Implementation/68000Storage.cpp | 329 +++++++++--------- 1 file changed, 166 insertions(+), 163 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 71cbaedd3..5217718f0 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -14,6 +14,19 @@ namespace CPU { namespace MC68000 { +#define Dn 0x00 +#define An 0x01 +#define Ind 0x02 +#define PostInc 0x03 +#define PreDec 0x04 +#define d16An 0x05 +#define d8AnXn 0x06 +#define XXXw 0x10 +#define XXXl 0x11 +#define d16PC 0x12 +#define d8PCXn 0x13 +#define Imm 0x14 + struct ProcessorStorageConstructor { ProcessorStorageConstructor(ProcessorStorage &storage) : storage_(storage) {} @@ -36,6 +49,18 @@ struct ProcessorStorageConstructor { return (mode == 7) ? (0x10 | reg) : mode; } + int address_assemble_for_mode(int mode) const { + using Action = ProcessorBase::MicroOp::Action; + assert((mode & 0xff) == XXXw || (mode & 0xff) == XXXl); + return int(((mode & 0xff) == XXXw) ? Action::AssembleWordAddressFromPrefetch : Action::AssembleLongWordAddressFromPrefetch); + } + + int data_assemble_for_mode(int mode) const { + using Action = ProcessorBase::MicroOp::Action; + assert((mode & 0xff) == XXXw || (mode & 0xff) == XXXl); + return int(((mode & 0xff) == XXXw) ? Action::AssembleWordDataFromPrefetch : Action::AssembleLongWordDataFromPrefetch); + } + #define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n " x : x) /*! @@ -458,6 +483,10 @@ struct ProcessorStorageConstructor { #define ea(n) &storage_.effective_address_[n].full #define a(n) &storage_.address_[n].full +#define bw(x) (x) +#define l(x) 0x100 | (x) +#define source_dest(x, y) (((x) << 8) | (y)) + // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { for(const auto &mapping: mappings) { @@ -489,37 +518,37 @@ struct ProcessorStorageConstructor { switch(mode | (is_long_word_access ? 0x100 : 0x000)) { default: continue; - case 0x000: // ADD/SUB.bw Dn, Dn + case bw(Dn): // ADD/SUB.bw Dn, Dn storage_.instructions[instruction].source = &storage_.data_[ea_register]; op(Action::PerformOperation, seq("np")); break; - case 0x100: // ADD/SUB.l Dn, Dn + case l(Dn): // ADD/SUB.l Dn, Dn storage_.instructions[instruction].source = &storage_.data_[ea_register]; op(Action::PerformOperation, seq("np nn")); break; - case 0x001: // ADD/SUB.bw An, Dn + case bw(An): // ADD/SUB.bw An, Dn storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np")); break; - case 0x101: // ADD/SUB.l An, Dn + case l(An): // ADD/SUB.l An, Dn storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np nn")); break; - case 0x002: // ADD/SUB.bw (An), Dn - case 0x003: // ADD/SUB.bw (An)+, Dn + case bw(Ind): // ADD/SUB.bw (An), Dn + case bw(PostInc): // ADD/SUB.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x102: // ADD/SUB.l (An), Dn - case 0x103: // ADD/SUB.l (An)+, Dn + case l(Ind): // ADD/SUB.l (An), Dn + case l(PostInc): // ADD/SUB.l (An)+, Dn op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); if(ea_mode == 0x03) { @@ -528,69 +557,59 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x004: // ADD/SUB.bw -(An), Dn + case bw(PreDec): // ADD/SUB.bw -(An), Dn op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x104: // ADD/SUB.l -(An), Dn + case l(PreDec): // ADD/SUB.l -(An), Dn op(int(Action::Decrement4) | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x010: // ADD/SUB.bw (xxx).w, Dn - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case bw(XXXl): // ADD/SUB.bw (xxx).l, Dn + op(Action::None, seq("np")); + case bw(XXXw): // ADD/SUB.bw (xxx).w, Dn + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x110: // ADD/SUB.l (xxx).w, Dn - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case l(XXXl): // ADD/SUB.l (xxx).l, Dn + op(Action::None, seq("np")); + case l(XXXw): // ADD/SUB.l (xxx).w, Dn + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x011: // ADD/SUB.bw (xxx).l, Dn - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { ea(0) }, !is_byte_access)); - op(Action::PerformOperation); - break; - - case 0x111: // ADD/SUB.l (xxx).l, Dn - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np n", { ea(0), ea(0) })); - op(Action::PerformOperation); - break; - - case 0x012: // ADD/SUB.bw (d16, PC), Dn - case 0x013: // ADD/SUB.bw (d8, PC, Xn), Dn - case 0x005: // ADD/SUB.bw (d16, An), Dn - case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn + case bw(d16PC): // ADD/SUB.bw (d16, PC), Dn + case bw(d8PCXn): // ADD/SUB.bw (d8, PC, Xn), Dn + case bw(d16An): // ADD/SUB.bw (d16, An), Dn + case bw(d8AnXn): // ADD/SUB.bw (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr np", mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x112: // ADD/SUB.l (d16, PC), Dn - case 0x113: // ADD/SUB.l (d8, PC, Xn), Dn - case 0x105: // ADD/SUB.l (d16, An), Dn - case 0x106: // ADD/SUB.l (d8, An, Xn), Dn + case l(d16PC): // ADD/SUB.l (d16, PC), Dn + case l(d8PCXn): // ADD/SUB.l (d8, PC, Xn), Dn + case l(d16An): // ADD/SUB.l (d16, An), Dn + case l(d8AnXn): // ADD/SUB.l (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr np n", mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x014: // ADD/SUB.bw #, Dn + case bw(Imm): // ADD/SUB.bw #, Dn op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation); break; - case 0x114: // ADD/SUB.l #, Dn + case l(Imm): // ADD/SUB.l #, Dn op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); op(Action::PerformOperation); @@ -607,31 +626,31 @@ struct ProcessorStorageConstructor { switch(mode | (is_long_word_access ? 0x100 : 0x000)) { default: continue; - case 0x002: // ADD/SUB.bw Dn, (An) - case 0x003: // ADD/SUB.bw Dn, (An)+ + case bw(Ind): // ADD/SUB.bw Dn, (An) + case bw(PostInc): // ADD/SUB.bw Dn, (An)+ op(Action::None, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } break; - case 0x102: // ADD/SUB.l Dn, (An) - case 0x103: // ADD/SUB.l Dn, (An)+ + case l(Ind): // ADD/SUB.l Dn, (An) + case l(PostInc): // ADD/SUB.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment4) | MicroOp::DestinationMask); } break; - case 0x004: // ADD/SUB.bw Dn, -(An) + case bw(PreDec): // ADD/SUB.bw Dn, -(An) op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, seq("n nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); break; - case 0x104: // ADD/SUB.l Dn, -(An) + case l(PreDec): // ADD/SUB.l Dn, -(An) op( int(Action::Decrement4) | MicroOp::DestinationMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("n nRd+ nrd np", { ea(1), ea(1) })); @@ -639,43 +658,32 @@ struct ProcessorStorageConstructor { seq("nw- nW", { ea(1), ea(1) })); break; - case 0x005: // ADD/SUB.bw (d16, An), Dn - case 0x006: // ADD/SUB.bw (d8, An, Xn), Dn + case bw(d16An): // ADD/SUB.bw (d16, An), Dn + case bw(d8AnXn): // ADD/SUB.bw (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; - case 0x105: // ADD/SUB.l (d16, An), Dn - case 0x106: // ADD/SUB.l (d8, An, Xn), Dn + case l(d16An): // ADD/SUB.l (d16, An), Dn + case l(d8AnXn): // ADD/SUB.l (d8, An, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); break; - case 0x010: // ADD/SUB.bw Dn, (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + case bw(XXXl): // ADD/SUB.bw Dn, (xxx).l + op(Action::None, seq("np")); + case bw(XXXw): // ADD/SUB.bw Dn, (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; - case 0x110: // ADD/SUB.l Dn, (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nRd+ nrd np", { ea(1), ea(1) })); - op( Action::PerformOperation, - seq("nw- nW", { ea(1), ea(1) })); - break; - - case 0x011: // ADD/SUB.bw Dn, (xxx).l + case l(XXXl): // ADD/SUB.l Dn, (xxx).l op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nrd np", { ea(1) }, !is_byte_access)); - op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); - break; - - case 0x111: // ADD/SUB.l Dn, (xxx).l - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + case l(XXXw): // ADD/SUB.l Dn, (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); op( Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); @@ -695,27 +703,24 @@ struct ProcessorStorageConstructor { switch(mode | (is_long_word_access ? 0x100 : 0x000)) { default: continue; - case 0x000: // ADDA/SUBA.w Dn, An - case 0x100: // ADDA/SUBA.l Dn, An + case bw(Dn): // ADDA/SUBA.w Dn, An + case bw(An): // ADDA/SUBA.w An, An + case l(Dn): // ADDA/SUBA.l Dn, An + case l(An): // ADDA/SUBA.l An, An op(Action::PerformOperation, seq("np nn")); break; - case 0x001: // ADDA/SUBA.w An, An - case 0x101: // ADDA/SUBA.l An, An - op(Action::PerformOperation, seq("np nn")); - break; - - case 0x002: // ADDA/SUBA.w (An), An - case 0x003: // ADDA/SUBA.w (An)+, An + case bw(Ind): // ADDA/SUBA.w (An), An + case bw(PostInc): // ADDA/SUBA.w (An)+, An op(Action::None, seq("nr np nn", { a(ea_register) })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x102: // ADDA/SUBA.l (An), An - case 0x103: // ADDA/SUBA.l (An)+, An + case l(Ind): // ADDA/SUBA.l (An), An + case l(PostInc): // ADDA/SUBA.l (An)+, An op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); if(ea_mode == 0x03) { op(int(Action::Increment4) | MicroOp::SourceMask); @@ -723,64 +728,54 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x004: // ADDA/SUBA.w -(An), An + case bw(PreDec): // ADDA/SUBA.w -(An), An op(int(Action::Decrement2) | MicroOp::SourceMask); op(Action::None, seq("n nr np nn", { a(ea_register) })); op(Action::PerformOperation); break; - case 0x104: // ADDA/SUBA.l -(An), An + case l(PreDec): // ADDA/SUBA.l -(An), An op(int(Action::Decrement4) | MicroOp::SourceMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x005: // ADDA/SUBA.w (d16, An), An - case 0x006: // ADDA/SUBA.w (d8, An, Xn), An + case bw(d16An): // ADDA/SUBA.w (d16, An), An + case bw(d8AnXn): // ADDA/SUBA.w (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr np nn", mode), { ea(1) })); op(Action::PerformOperation); break; - case 0x105: // ADDA/SUBA.l (d16, An), An - case 0x106: // ADDA/SUBA.l (d8, An, Xn), An + case l(d16An): // ADDA/SUBA.l (d16, An), An + case l(d8AnXn): // ADDA/SUBA.l (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr np n", mode), { ea(1), ea(1) })); op(Action::PerformOperation); break; - case 0x010: // ADDA/SUBA.w (xxx).w, An - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case bw(XXXl): // ADDA/SUBA.w (xxx).l, An + op(Action::None, seq("np")); + case bw(XXXw): // ADDA/SUBA.w (xxx).w, An + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr np nn", { ea(1) })); op(Action::PerformOperation); break; - case 0x110: // ADDA/SUBA.l (xxx).w, An - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case l(XXXl): // ADDA/SUBA.l (xxx).l, An + op(Action::None, seq("np")); + case l(XXXw): // ADDA/SUBA.l (xxx).w, An + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr np n", { ea(1), ea(1) })); op( Action::PerformOperation); break; - case 0x011: // ADDA/SUBA.w (xxx).l, An - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np nn", { ea(1) })); - op(Action::PerformOperation); - break; - - case 0x111: // ADDA/SUBA.l (xxx).l, An - op(Action::None, seq("np")); - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np n", { ea(1), ea(1) })); - op( Action::PerformOperation); - break; - - case 0x014: // ADDA/SUBA.w #, An + case bw(Imm): // ADDA/SUBA.w #, An op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); op(Action::PerformOperation); break; - case 0x114: // ADDA/SUBA.l #, Dn + case l(Imm): // ADDA/SUBA.l #, Dn op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); op(Action::PerformOperation); @@ -809,13 +804,13 @@ struct ProcessorStorageConstructor { switch(mode) { default: continue; - case 0x00: // BTST.l Dn, Dn + case Dn: // BTST.l Dn, Dn operation = Operation::BTSTl; op(Action::PerformOperation, seq("np n")); break; - case 0x02: // BTST.b Dn, (An) - case 0x03: // BTST.b Dn, (An)+ + case Ind: // BTST.b Dn, (An) + case PostInc: // BTST.b Dn, (An)+ op(Action::None, seq("nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); if(mode == 0x03) { @@ -823,29 +818,24 @@ struct ProcessorStorageConstructor { } break; - case 0x04: // BTST.b Dn, -(An) + case PreDec: // BTST.b Dn, -(An) op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); break; - case 0x05: // BTST.b Dn, (d16, An) - case 0x06: // BTST.b Dn, (d8, An, Xn) - case 0x12: // BTST.b Dn, (d16, PC) - case 0x13: // BTST.b Dn, (d8, PC, Xn) + case d16An: // BTST.b Dn, (d16, An) + case d8AnXn: // BTST.b Dn, (d8, An, Xn) + case d16PC: // BTST.b Dn, (d16, PC) + case d8PCXn: // BTST.b Dn, (d8, PC, Xn) op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, false)); op(Action::PerformOperation); break; - case 0x10: // BTST.b Dn, (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nrd np", { ea(1) }, false)); - op(Action::PerformOperation); - break; - - case 0x11: // BTST.b Dn, (xxx).l + case XXXl: // BTST.b Dn, (xxx).l op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + case XXXw: // BTST.b Dn, (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); op(Action::PerformOperation); break; @@ -860,14 +850,14 @@ struct ProcessorStorageConstructor { switch(mode) { default: continue; - case 0x00: // BTST.l #, Dn + case Dn: // BTST.l #, Dn operation = Operation::BTSTl; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np n")); op(Action::PerformOperation); break; - case 0x02: // BTST.b #, (An) - case 0x03: // BTST.b #, (An)+ + case Ind: // BTST.b #, (An) + case PostInc: // BTST.b #, (An)+ op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); if(mode == 0x03) { @@ -875,31 +865,31 @@ struct ProcessorStorageConstructor { } break; - case 0x04: // BTST.b #, -(An) + case PreDec: // BTST.b #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); break; - case 0x05: // BTST.b #, (d16, An) - case 0x06: // BTST.b #, (d8, An, Xn) - case 0x12: // BTST.b #, (d16, PC) - case 0x13: // BTST.b #, (d8, PC, Xn) + case d16An: // BTST.b #, (d16, An) + case d8AnXn: // BTST.b #, (d8, An, Xn) + case d16PC: // BTST.b #, (d16, PC) + case d8PCXn: // BTST.b #, (d8, PC, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, false)); op(Action::PerformOperation); break; - case 0x10: // BTST.b #, (xxx).w - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + case XXXw: // BTST.b #, (xxx).w + op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); op(Action::PerformOperation); break; - case 0x11: // BTST.b #, (xxx).l - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + case XXXl: // BTST.b #, (xxx).l + op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); op(Action::PerformOperation); @@ -946,11 +936,12 @@ struct ProcessorStorageConstructor { case Decoder::ASLRLSLRROLRROXLRm: { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); - switch(combined_mode(ea_mode, ea_register)) { + const int mode = combined_mode(ea_mode, ea_register); + switch(mode) { default: continue; - case 0x02: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An) - case 0x03: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An)+ + case Ind: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An) + case PostInc: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An)+ op(Action::None, seq("nrd np", { a(ea_register) })); op(Action::PerformOperation, seq("nw", { a(ea_register) })); if(ea_mode == 0x03) { @@ -958,27 +949,22 @@ struct ProcessorStorageConstructor { } break; - case 0x04: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w -(An) + case PreDec: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w -(An) op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) })); op(Action::PerformOperation, seq("nw", { a(ea_register) })); break; - case 0x05: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d16, An) - case 0x06: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d8, An, Xn) - op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, - seq(pseq("np nrd np", ea_mode), { ea(1) })); + case d16An: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d16, An) + case d8AnXn: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (d8, An, Xn) + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) })); op(Action::PerformOperation, seq("nw", { ea(1) })); break; - case 0x10: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nrd np", { ea(1) })); - op(Action::PerformOperation, seq("nw", { ea(1) })); - break; - - case 0x11: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).l + case XXXl: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).l op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + case XXXw: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) })); op(Action::PerformOperation, seq("nw", { ea(1) })); break; @@ -1033,16 +1019,16 @@ struct ProcessorStorageConstructor { case 0x005: // [CLR/NEG/NEGX/NOT].bw (d16, An) case 0x006: // [CLR/NEG/NEGX/NOT].bw (d8, An, Xn) - op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, - seq(pseq("np nrd", ea_mode), { ea(1) }, + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); break; case 0x105: // [CLR/NEG/NEGX/NOT].l (d16, An) case 0x106: // [CLR/NEG/NEGX/NOT].l (d8, An, Xn) - op( calc_action_for_mode(ea_mode) | MicroOp::DestinationMask, - seq(pseq("np nRd+ nrd", ea_mode), { ea(1), ea(1) })); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nRd+ nrd", mode), { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); break; @@ -1137,8 +1123,8 @@ struct ProcessorStorageConstructor { case 0x006: // CMP.bw (d8, An, Xn), Dn case 0x012: // CMP.bw (d16, PC), Dn case 0x013: // CMP.bw (d8, PC, Xn), Dn - op( calc_action_for_mode(ea_mode) | MicroOp::SourceMask, - seq(pseq("np nr np", ea_mode), { ea(0) }, + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nr np", mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -1147,8 +1133,8 @@ struct ProcessorStorageConstructor { case 0x106: // CMP.l (d8, An, Xn), Dn case 0x112: // CMP.l (d16, PC), Dn case 0x113: // CMP.l (d8, PC, Xn), Dn - op( calc_action_for_mode(ea_mode) | MicroOp::SourceMask, - seq(pseq("np nR+ nr np n", ea_mode), { ea(0), ea(0) })); + op( calc_action_for_mode(mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr np n", mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; @@ -1243,7 +1229,7 @@ struct ProcessorStorageConstructor { case 0x005: // CMPA.w (d16, An), An case 0x006: // CMPA.w (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nr", ea_mode), { ea(0) })); + seq(pseq("np nr", mode), { ea(0) })); op(Action::PerformOperation, seq("np n")); break; @@ -1252,7 +1238,7 @@ struct ProcessorStorageConstructor { case 0x105: // CMPA.l (d16, An), An case 0x106: // CMPA.l (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nR+ nr", ea_mode), { ea(0), ea(0) })); + seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); break; @@ -1602,11 +1588,11 @@ struct ProcessorStorageConstructor { } switch(destination_mode) { - case 0: // Dn + case Dn: // Dn storage_.instructions[instruction].destination = &storage_.data_[destination_register]; break; - case 1: // An + case An: // An storage_.instructions[instruction].destination = &storage_.address_[destination_register]; break; @@ -2182,6 +2168,23 @@ struct ProcessorStorageConstructor { } } +#undef Dn +#undef An +#undef Ind +#undef PostDec +#undef PreDec +#undef d16An +#undef d8AnXn +#undef XXXw +#undef XXXl +#undef d16PC +#undef d8PCXn +#undef Imm + +#undef bw +#undef l +#undef source_dest + #undef ea #undef a #undef seq From 9ce48953c19d0be36baa3492ef510dbd03a576d8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 13:45:03 -0400 Subject: [PATCH 079/239] Improves debugging printout. --- Processors/68000/Implementation/68000Implementation.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 00c3a78f0..7e829c923 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -59,10 +59,12 @@ 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 { - std::cout << "Performing " << std::hex << decoded_instruction_ << " from " << (program_counter_.full - 4) << '\t'; for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; std::cout << std::endl; + std::cout << std::hex << (program_counter_.full - 4) << ": " << decoded_instruction_ << '\t'; + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; } active_program_ = &instructions[decoded_instruction_]; From 73f50ac44ef620a6ecfc201598cddbb943ad28b3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 13:45:28 -0400 Subject: [PATCH 080/239] Commits further to elimination of magic constants. --- .../68000/Implementation/68000Storage.cpp | 443 +++++++----------- 1 file changed, 182 insertions(+), 261 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5217718f0..aed5639b9 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -38,10 +38,10 @@ struct ProcessorStorageConstructor { using Action = ProcessorBase::MicroOp::Action; switch(mode & 0xff) { default: return 0; - case 0x12: return int(Action::CalcD16PC); // (d16, PC) - case 0x13: return int(Action::CalcD8PCXn); // (d8, PC, Xn) - case 0x05: return int(Action::CalcD16An); // (d16, An) - case 0x06: return int(Action::CalcD8AnXn); // (d8, An, Xn) + case d16PC: return int(Action::CalcD16PC); + case d8PCXn: return int(Action::CalcD8PCXn); + case d16An: return int(Action::CalcD16An); + case d8AnXn: return int(Action::CalcD8AnXn); } } @@ -484,7 +484,7 @@ struct ProcessorStorageConstructor { #define a(n) &storage_.address_[n].full #define bw(x) (x) -#define l(x) 0x100 | (x) +#define l(x) (0x100 | (x)) #define source_dest(x, y) (((x) << 8) | (y)) // Perform a linear search of the mappings above for this instruction. @@ -515,7 +515,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; // Perform [ADD/SUB].blw , Dn - switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; case bw(Dn): // ADD/SUB.bw Dn, Dn @@ -551,7 +551,7 @@ struct ProcessorStorageConstructor { case l(PostInc): // ADD/SUB.l (An)+, Dn op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(ea_mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -623,7 +623,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; // Perform [ADD/SUB].blw Dn, - switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; case bw(Ind): // ADD/SUB.bw Dn, (An) @@ -700,7 +700,7 @@ struct ProcessorStorageConstructor { const int mode = combined_mode(ea_mode, ea_register); const bool is_long_word_access = !((instruction >> 8)&1); - switch(mode | (is_long_word_access ? 0x100 : 0x000)) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; case bw(Dn): // ADDA/SUBA.w Dn, An @@ -722,7 +722,7 @@ struct ProcessorStorageConstructor { case l(Ind): // ADDA/SUBA.l (An), An case l(PostInc): // ADDA/SUBA.l (An)+, An op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(ea_mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -813,7 +813,7 @@ struct ProcessorStorageConstructor { case PostInc: // BTST.b Dn, (An)+ op(Action::None, seq("nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); - if(mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment1) | MicroOp::DestinationMask); } break; @@ -860,7 +860,7 @@ struct ProcessorStorageConstructor { case PostInc: // BTST.b #, (An)+ op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[ea_register].full }, false)); op(Action::PerformOperation); - if(mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment1) | MicroOp::DestinationMask); } break; @@ -944,7 +944,7 @@ struct ProcessorStorageConstructor { case PostInc: // AS(L/R)/LS(L/R)/RO(L/R)/ROX(L/R).w (An)+ op(Action::None, seq("nrd np", { a(ea_register) })); op(Action::PerformOperation, seq("nw", { a(ea_register) })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment2) | MicroOp::DestinationMask); } break; @@ -978,85 +978,73 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); - switch((is_long_word_access ? 0x100 : 0x000) | mode) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case 0x000: // [CLR/NEG/NEGX/NOT].bw Dn - case 0x100: // [CLR/NEG/NEGX/NOT].l Dn + case bw(Dn): // [CLR/NEG/NEGX/NOT].bw Dn + case l(Dn): // [CLR/NEG/NEGX/NOT].l Dn op(Action::PerformOperation, seq("np")); break; - case 0x002: // [CLR/NEG/NEGX/NOT].bw (An) - case 0x003: // [CLR/NEG/NEGX/NOT].bw (An)+ + case bw(Ind): // [CLR/NEG/NEGX/NOT].bw (An) + case bw(PostInc): // [CLR/NEG/NEGX/NOT].bw (An)+ op(Action::None, seq("nrd", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } break; - case 0x102: // [CLR/NEG/NEGX/NOT].l (An) - case 0x103: // [CLR/NEG/NEGX/NOT].l (An)+ + case l(Ind): // [CLR/NEG/NEGX/NOT].l (An) + case l(PostInc): // [CLR/NEG/NEGX/NOT].l (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd", { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment4) | MicroOp::DestinationMask); } break; - case 0x004: // [CLR/NEG/NEGX/NOT].bw -(An) + case bw(PreDec): // [CLR/NEG/NEGX/NOT].bw -(An) op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, seq("nrd", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); break; - case 0x104: // [CLR/NEG/NEGX/NOT].l -(An) + case l(PreDec): // [CLR/NEG/NEGX/NOT].l -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("n nRd+ nrd", { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); break; - case 0x005: // [CLR/NEG/NEGX/NOT].bw (d16, An) - case 0x006: // [CLR/NEG/NEGX/NOT].bw (d8, An, Xn) + case bw(d16An): // [CLR/NEG/NEGX/NOT].bw (d16, An) + case bw(d8AnXn): // [CLR/NEG/NEGX/NOT].bw (d8, An, Xn) op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); break; - case 0x105: // [CLR/NEG/NEGX/NOT].l (d16, An) - case 0x106: // [CLR/NEG/NEGX/NOT].l (d8, An, Xn) + case l(d16An): // [CLR/NEG/NEGX/NOT].l (d16, An) + case l(d8AnXn): // [CLR/NEG/NEGX/NOT].l (d8, An, Xn) op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nRd+ nrd", mode), { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); break; - case 0x010: // [CLR/NEG/NEGX/NOT].bw (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + case bw(XXXl): // [CLR/NEG/NEGX/NOT].bw (xxx).l + op(Action::None, seq("np")); + case bw(XXXw): // [CLR/NEG/NEGX/NOT].bw (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd", { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); break; - case 0x110: // [CLR/NEG/NEGX/NOT].l (xxx).w - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nRd+ nrd", { ea(1), ea(1) })); - op(Action::PerformOperation, - seq("np nw- nW", { ea(1), ea(1) })); - break; - - case 0x011: // [CLR/NEG/NEGX/NOT].bw (xxx).l + case l(XXXl): // [CLR/NEG/NEGX/NOT].l (xxx).l op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, - seq("np nrd", { ea(1) }, !is_byte_access)); - op(Action::PerformOperation, - seq("np nw", { ea(1) }, !is_byte_access)); - break; - - case 0x111: // [CLR/NEG/NEGX/NOT].l (xxx).l - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + case l(XXXw): // [CLR/NEG/NEGX/NOT].l (xxx).w + op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nRd+ nrd", { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); @@ -1078,98 +1066,88 @@ struct ProcessorStorageConstructor { continue; } - const int mode = (is_long_word_access ? 0x100 : 0) | combined_mode(ea_mode, ea_register); - switch(mode) { + const int mode = combined_mode(ea_mode, ea_register); + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case 0x000: // CMP.bw Dn, Dn - case 0x100: // CMP.l Dn, Dn - case 0x001: // CMP.w An, Dn - case 0x101: // CMP.l An, Dn + case bw(Dn): // CMP.bw Dn, Dn + case l(Dn): // CMP.l Dn, Dn + case bw(An): // CMP.w An, Dn + case l(An): // CMP.l An, Dn op(Action::PerformOperation, seq("np")); break; - case 0x002: // CMP.bw (An), Dn - case 0x003: // CMP.bw (An)+, Dn + case bw(Ind): // CMP.bw (An), Dn + case bw(PostInc): // CMP.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x102: // CMP.l (An), Dn - case 0x103: // CMP.l (An)+, Dn + case l(Ind): // CMP.l (An), Dn + case l(PostInc): // CMP.l (An)+, Dn op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np n", { ea(0), ea(0) })); - if(ea_mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x004: // CMP.bw -(An), Dn + case bw(PreDec): // CMP.bw -(An), Dn op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x104: // CMP.l -(An), Dn + case l(PreDec): // CMP.l -(An), Dn op(int(Action::Decrement4) | MicroOp::SourceMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x005: // CMP.bw (d16, An), Dn - case 0x006: // CMP.bw (d8, An, Xn), Dn - case 0x012: // CMP.bw (d16, PC), Dn - case 0x013: // CMP.bw (d8, PC, Xn), Dn + case bw(d16An): // CMP.bw (d16, An), Dn + case bw(d8AnXn): // CMP.bw (d8, An, Xn), Dn + case bw(d16PC): // CMP.bw (d16, PC), Dn + case bw(d8PCXn): // CMP.bw (d8, PC, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr np", mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x105: // CMP.l (d16, An), Dn - case 0x106: // CMP.l (d8, An, Xn), Dn - case 0x112: // CMP.l (d16, PC), Dn - case 0x113: // CMP.l (d8, PC, Xn), Dn + case l(d16An): // CMP.l (d16, An), Dn + case l(d8AnXn): // CMP.l (d8, An, Xn), Dn + case l(d16PC): // CMP.l (d16, PC), Dn + case l(d8PCXn): // CMP.l (d8, PC, Xn), Dn op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr np n", mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x010: // CMP.bw (xxx).w, Dn - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case bw(XXXl): // CMP.bw (xxx).l, Dn + op(Action::None, seq("np")); + case bw(XXXw): // CMP.bw (xxx).w, Dn + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x110: // CMP.l (xxx).w, Dn - op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case l(XXXl): // CMP.l (xxx).l, Dn + op(Action::None, seq("np")); + case l(XXXw): // CMP.l (xxx).w, Dn + op( address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr np n", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x011: // CMP.bw (xxx).l, Dn - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr np", { ea(0) }, !is_byte_access)); - op(Action::PerformOperation); - break; - - case 0x111: // CMP.l (xxx).l, Dn - op(Action::None, seq("np")); - op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr np n", { ea(0), ea(0) })); - op(Action::PerformOperation); - break; - - case 0x014: // CMP.br #, Dn + case bw(Imm): // CMP.br #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np np")); break; - case 0x114: // CMP.l #, Dn + case l(Imm): // CMP.l #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(Action::PerformOperation, seq("np np n")); @@ -1185,91 +1163,83 @@ struct ProcessorStorageConstructor { const int mode = combined_mode(ea_mode, ea_register); const bool is_long_word_access = mapping.operation == Operation::CMPl; - switch((is_long_word_access ? 0x100 : 0) | mode) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case 0x000: // CMPA.w Dn, An - case 0x001: // CMPA.w An, An - case 0x100: // CMPA.l Dn, An - case 0x101: // CMPA.l An, An + case bw(Dn): // CMPA.w Dn, An + case bw(An): // CMPA.w An, An + case l(Dn): // CMPA.l Dn, An + case l(An): // CMPA.l An, An op(Action::PerformOperation, seq("np n")); break; - case 0x002: // CMPA.w (An), An - case 0x003: // CMPA.w (An)+, An + case bw(Ind): // CMPA.w (An), An + case bw(PostInc): // CMPA.w (An)+, An op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("np n")); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment2) | MicroOp::SourceMask); } break; - case 0x102: // CMPA.l (An), An - case 0x103: // CMPA.l (An)+, An + case l(Ind): // CMPA.l (An), An + case l(PostInc): // CMPA.l (An)+, An op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } break; - case 0x004: // CMPA.w -(An), An + case bw(PreDec): // CMPA.w -(An), An op(int(Action::Decrement2) | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); op(Action::PerformOperation, seq("np n")); break; - case 0x104: // CMPA.l -(An), An + case l(PreDec): // CMPA.l -(An), An op(int(Action::Decrement4) | MicroOp::SourceMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); break; - case 0x012: // CMPA.w (d16, PC), An - case 0x013: // CMPA.w (d8, PC, Xn), An - case 0x005: // CMPA.w (d16, An), An - case 0x006: // CMPA.w (d8, An, Xn), An + case bw(d16PC): // CMPA.w (d16, PC), An + case bw(d8PCXn): // CMPA.w (d8, PC, Xn), An + case bw(d16An): // CMPA.w (d16, An), An + case bw(d8AnXn): // CMPA.w (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr", mode), { ea(0) })); op(Action::PerformOperation, seq("np n")); break; - case 0x112: // CMPA.l (d16, PC), An - case 0x113: // CMPA.l (d8, PC, Xn), An - case 0x105: // CMPA.l (d16, An), An - case 0x106: // CMPA.l (d8, An, Xn), An + case l(d16PC): // CMPA.l (d16, PC), An + case l(d8PCXn): // CMPA.l (d8, PC, Xn), An + case l(d16An): // CMPA.l (d16, An), An + case l(d8AnXn): // CMPA.l (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); break; - case 0x010: // CMPA.w (xxx).w, An - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); - op(Action::PerformOperation, seq("np n")); - break; - - case 0x110: // CMPA.l (xxx).w, An - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq("np n")); - break; - - case 0x011: // CMPA.w (xxx).l, An + case bw(XXXl): // CMPA.w (xxx).l, An op(Action::None, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); + case bw(XXXw): // CMPA.w (xxx).w, An + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr", { ea(0) })); op(Action::PerformOperation, seq("np n")); break; - case 0x111: // CMPA.l (xxx).l, An + case l(XXXl): // CMPA.l (xxx).l, An op(Action::None, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + case l(XXXw): // CMPA.l (xxx).w, An + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); break; - case 0x014: // CMPA.w #, An + case bw(Imm): // CMPA.w #, An storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np np n")); break; - case 0x114: // CMPA.l #, An + case l(Imm): // CMPA.l #, An storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(Action::PerformOperation, seq("np np n")); @@ -1288,65 +1258,67 @@ struct ProcessorStorageConstructor { const bool is_byte_access = mapping.operation == Operation::CMPb; const bool is_long_word_access = mapping.operation == Operation::CMPl; - const int mode = (is_long_word_access ? 0x100 : 0) | combined_mode(destination_mode, destination_register); - switch(mode) { - case 0x000: // CMPI.bw #, Dn + const int mode = combined_mode(destination_mode, destination_register); + switch(is_long_word_access ? l(mode) : bw(mode)) { + default: continue; + + case bw(Dn): // CMPI.bw #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np np")); break; - case 0x100: // CMPI.l #, Dn + case l(Dn): // CMPI.l #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(Action::PerformOperation, seq("np np n")); break; - case 0x002: // CMPI.bw #, (An) - case 0x003: // CMPI.bw #, (An)+ + case bw(Ind): // CMPI.bw #, (An) + case bw(PostInc): // CMPI.bw #, (An)+ op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(destination_register) }, !is_byte_access)); - if(mode == 0x03) { + if(mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); } op(Action::PerformOperation); break; - case 0x102: // CMPI.l #, (An) - case 0x103: // CMPI.l #, (An)+ + case l(Ind): // CMPI.l #, (An) + case l(PostInc): // CMPI.l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); - if(mode == 0x103) { + if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::DestinationMask); } op(Action::PerformOperation); break; - case 0x004: // CMPI.bw #, -(An) + case bw(PreDec): // CMPI.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) })); op(Action::PerformOperation); break; - case 0x104: // CMPI.l #, -(An) + case l(PreDec): // CMPI.l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; - case 0x012: // CMPI.bw #, (d16, PC) - case 0x013: // CMPI.bw #, (d8, PC, Xn) - case 0x005: // CMPI.bw #, (d16, An) - case 0x006: // CMPI.bw #, (d8, An, Xn) + case bw(d16PC): // CMPI.bw #, (d16, PC) + case bw(d8PCXn): // CMPI.bw #, (d8, PC, Xn) + case bw(d16An): // CMPI.bw #, (d16, An) + case bw(d8AnXn): // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("nrd np", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x112: // CMPI.l #, (d16, PC) - case 0x113: // CMPI.l #, (d8, PC, Xn) - case 0x105: // CMPI.l #, (d16, An) - case 0x106: // CMPI.l #, (d8, An, Xn) + case l(d16PC): // CMPI.l #, (d16, PC) + case l(d8PCXn): // CMPI.l #, (d8, PC, Xn) + case l(d16An): // CMPI.l #, (d16, An) + case l(d8AnXn): // CMPI.l #, (d8, An, Xn) op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, @@ -1354,33 +1326,31 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x010: // CMPI.bw #, (xxx).w + case bw(XXXw): // CMPI.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x110: // CMPI.l #, (xxx).w + case l(XXXw): // CMPI.l #, (xxx).w op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; - case 0x011: // CMPI.bw #, (xxx).l + case bw(XXXl): // CMPI.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x111: // CMPI.l #, (xxx).l + case l(XXXl): // CMPI.l #, (xxx).l op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation); break; - - default: continue; } } break; @@ -1426,79 +1396,61 @@ struct ProcessorStorageConstructor { const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; - case 0x02: // JMP (An) + case Ind: // JMP (An) storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np np")); break; - case 0x12: // JMP (d16, PC) - case 0x05: // JMP (d16, An) + case d16PC: // JMP (d16, PC) + case d16An: // JMP (d16, An) op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np np")); op(Action::PerformOperation); break; - case 0x13: // JMP (d8, PC, Xn) - case 0x06: // JMP (d8, An, Xn) + case d8PCXn: // JMP (d8, PC, Xn) + case d8AnXn: // JMP (d8, An, Xn) op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np np")); op(Action::PerformOperation); break; - case 0x10: // JMP (xxx).W - op(int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask); - op(Action::PerformOperation, seq("n np np")); - break; - - case 0x11: // JMP (xxx).L + case XXXl: // JMP (xxx).L op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask); - op(Action::PerformOperation, seq("np np")); + case XXXw: // JMP (xxx).W + op(address_assemble_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np np")); break; } } break; case Decoder::LEA: { const int destination_register = (instruction >> 9) & 7; - storage_.instructions[instruction].destination = &storage_.address_[destination_register]; + storage_.instructions[instruction].set_destination(storage_, An, destination_register); + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); switch(mode) { default: continue; - case 0x02: + case Ind: // LEA (An), An (i.e. MOVEA) storage_.instructions[instruction].source = &storage_.address_[ea_register]; - break; - case 0x05: case 0x06: case 0x10: - case 0x11: case 0x12: case 0x13: - storage_.instructions[instruction].source = &storage_.effective_address_[0]; - storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; - break; - } - - switch(mode) { - default: break; - case 0x02: // LEA (An), An (i.e. MOVEA) op(Action::PerformOperation, seq("np")); break; - case 0x05: // LEA (d16, An), An - case 0x12: // LEA (d16, PC), SR + case d16An: // LEA (d16, An), An + case d16PC: // LEA (d16, PC), SR op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation); break; - case 0x06: // LEA (d8, An, Xn), SR - case 0x13: // LEA (d8, PC, Xn), SR + case d8AnXn: // LEA (d8, An, Xn), SR + case d8PCXn: // LEA (d8, PC, Xn), SR op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np n np")); op(Action::PerformOperation); break; - case 0x10: // LEA (xxx).W, An - op(int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np np")); - op(Action::PerformOperation); - break; - - case 0x11: // LEA (xxx).L, An + case XXXl: // LEA (xxx).L, An op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np np")); + case XXXw: // LEA (xxx).W, An + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation); break; } @@ -1513,51 +1465,47 @@ struct ProcessorStorageConstructor { this looks like a mistake so I've padded with nil cycles in the middle. */ const int mode = combined_mode(ea_mode, ea_register); switch(mode) { - case 0x00: // MOVE Dn, SR + default: continue; + + case Dn: // MOVE Dn, SR op(Action::PerformOperation, seq("nn np")); break; - case 0x02: // MOVE (An), SR - case 0x03: // MOVE (An)+, SR + case Ind: // MOVE (An), SR + case PostInc: // MOVE (An)+, SR op(Action::None, seq("nr nn nn np", { a(ea_register) })); - if(ea_mode == 0x03) { + if(mode == PostInc) { op(int(Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); break; - case 0x04: // MOVE -(An), SR + case PreDec: // MOVE -(An), SR op(Action::Decrement2, seq("n nr nn nn np", { a(ea_register) })); op(Action::PerformOperation); break; - case 0x12: // MOVE (d16, PC), SR - case 0x13: // MOVE (d8, PC, Xn), SR - case 0x05: // MOVE (d16, An), SR - case 0x06: // MOVE (d8, An, Xn), SR + case d16PC: // MOVE (d16, PC), SR + case d8PCXn: // MOVE (d8, PC, Xn), SR + case d16An: // MOVE (d16, An), SR + case d8AnXn: // MOVE (d8, An, Xn), SR op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr nn nn np", mode), { ea(0) })); op(Action::PerformOperation); break; - case 0x10: // MOVE (xxx).W, SR + case XXXl: // MOVE (xxx).L, SR + op(Action::None, seq("np")); + case XXXw: // MOVE (xxx).W, SR op( - int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr nn nn np", { ea(0) })); op(Action::PerformOperation); break; - case 0x11: // MOVE (xxx).L, SR - op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) })); - op(Action::PerformOperation, seq("nn nn np")); - break; - - case 0x14: // MOVE #, SR + case Imm: // MOVE #, SR storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(int(Action::PerformOperation), seq("np nn nn np")); break; - - default: continue; } } break; @@ -1572,41 +1520,14 @@ struct ProcessorStorageConstructor { const int destination_mode = (instruction >> 6) & 7; const int destination_register = (instruction >> 9) & 7; - switch(ea_mode) { - case 0: // Dn - storage_.instructions[instruction].source = &storage_.data_[ea_register]; - break; - - case 1: // An - storage_.instructions[instruction].source = &storage_.address_[ea_register]; - break; - - default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # - storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; - storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; - break; - } - - switch(destination_mode) { - case Dn: // Dn - storage_.instructions[instruction].destination = &storage_.data_[destination_register]; - break; - - case An: // An - storage_.instructions[instruction].destination = &storage_.address_[destination_register]; - break; - - default: // (An), (An)+, -(An), (d16, An), (d8, An Xn), (xxx).W, (xxx).L, # - storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; - storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; - break; - } + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); const bool is_byte_access = mapping.operation == Operation::MOVEb; const bool is_long_word_access = mapping.operation == Operation::MOVEl; // There are no byte moves to address registers. - if(is_byte_access && destination_mode == 1) { + if(is_byte_access && destination_mode == An) { continue; } @@ -1665,7 +1586,7 @@ struct ProcessorStorageConstructor { case 0x10200: // MOVE.l (An), Dn case 0x10300: // MOVE.l (An)+, Dn op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -1674,7 +1595,7 @@ struct ProcessorStorageConstructor { case 0x00200: // MOVE.bw (An), Dn case 0x00300: // MOVE.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } op(Action::PerformOperation); @@ -1756,7 +1677,7 @@ struct ProcessorStorageConstructor { case 0x10003: // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op(Action::SetMoveFlagsl, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1764,7 +1685,7 @@ struct ProcessorStorageConstructor { case 0x00002: // MOVE.bw Dn, (An) case 0x00003: // MOVE.bw Dn, (An)+ op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1776,11 +1697,11 @@ struct ProcessorStorageConstructor { op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(ea_mode == 0x03 || destination_mode == 0x03) { + if(ea_mode == PostInc || destination_mode == PostInc) { op( increment_action | - (ea_mode == 0x03 ? MicroOp::SourceMask : 0) | - (ea_mode == 0x03 ? MicroOp::DestinationMask : 0)); + (ea_mode == PostInc ? MicroOp::SourceMask : 0) | + (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); } break; @@ -1790,11 +1711,11 @@ struct ProcessorStorageConstructor { case 0x00303: // MOVE.bw (An)+, (An)+ op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); - if(ea_mode == 0x03 || destination_mode == 0x03) { + if(ea_mode == PostInc || destination_mode == PostInc) { op( increment_action | - (ea_mode == 0x03 ? MicroOp::SourceMask : 0) | - (ea_mode == 0x03 ? MicroOp::DestinationMask : 0)); + (ea_mode == PostInc ? MicroOp::SourceMask : 0) | + (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); } break; @@ -1804,7 +1725,7 @@ struct ProcessorStorageConstructor { op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1813,7 +1734,7 @@ struct ProcessorStorageConstructor { case 0x00403: // MOVE.bw -(An), (An)+ op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1831,7 +1752,7 @@ struct ProcessorStorageConstructor { seq(pseq("np nR+ nr", both_modes >> 8), { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1849,7 +1770,7 @@ struct ProcessorStorageConstructor { !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1861,7 +1782,7 @@ struct ProcessorStorageConstructor { seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1872,7 +1793,7 @@ struct ProcessorStorageConstructor { seq("np nr", { ea(0) }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1884,7 +1805,7 @@ struct ProcessorStorageConstructor { seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1896,7 +1817,7 @@ struct ProcessorStorageConstructor { seq("np nr", { ea(0) }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1906,7 +1827,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) }) ); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1915,7 +1836,7 @@ struct ProcessorStorageConstructor { case 0x01403: // MOVE.bw #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np nw np", { a(destination_register) }, !is_byte_access) ); - if(destination_mode == 0x03) { + if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; @@ -1974,7 +1895,7 @@ struct ProcessorStorageConstructor { case 0x0313: // MOVE.bw (An)+, (d8, PC, Xn) op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[ea_register].full }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(increment_action | MicroOp::SourceMask); } break; @@ -2071,7 +1992,7 @@ struct ProcessorStorageConstructor { case 0x00311: // MOVE.bw (An)+, (xxx).L op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); - if(ea_mode == 0x03) { + if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); } break; From 2c78ea1a4eb746a25cbaf3cda08a4362e74a8924 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 15:48:29 -0400 Subject: [PATCH 081/239] Completes conversion away from magic constants. --- .../68000/Implementation/68000Storage.cpp | 411 ++++++++---------- 1 file changed, 179 insertions(+), 232 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index aed5639b9..7de81ba5a 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -45,7 +45,8 @@ struct ProcessorStorageConstructor { } } - int combined_mode(int mode, int reg) { + int combined_mode(int mode, int reg, bool collapse_an_dn = false) { + if(collapse_an_dn && mode == 1) mode = 0; return (mode == 7) ? (0x10 | reg) : mode; } @@ -483,9 +484,10 @@ struct ProcessorStorageConstructor { #define ea(n) &storage_.effective_address_[n].full #define a(n) &storage_.address_[n].full -#define bw(x) (x) -#define l(x) (0x100 | (x)) -#define source_dest(x, y) (((x) << 8) | (y)) +#define bw(x) (x) +#define bw2(x, y) (((x) << 8) | (y)) +#define l(x) (0x10000 | (x)) +#define l2(x, y) (0x10000 | ((x) << 8) | (y)) // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { @@ -1425,24 +1427,28 @@ struct ProcessorStorageConstructor { case Decoder::LEA: { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_destination(storage_, An, destination_register); - storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); + storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; + storage_.instructions[instruction].source = + (mode == Ind) ? + &storage_.address_[ea_register] : + &storage_.effective_address_[0]; + switch(mode) { default: continue; case Ind: // LEA (An), An (i.e. MOVEA) - storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PerformOperation, seq("np")); break; case d16An: // LEA (d16, An), An - case d16PC: // LEA (d16, PC), SR + case d16PC: // LEA (d16, PC), An op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation); break; - case d8AnXn: // LEA (d8, An, Xn), SR - case d8PCXn: // LEA (d8, PC, Xn), SR + case d8AnXn: // LEA (d8, An, Xn), An + case d8PCXn: // LEA (d8, PC, Xn), An op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np n np")); op(Action::PerformOperation); break; @@ -1534,57 +1540,32 @@ struct ProcessorStorageConstructor { const int decrement_action = int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); const int increment_action = int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); - // Construct a single word to describe the addressing mode: - // - // 0xssdd, where ss or dd = - // 0n with n a regular addresing mode between 0 and 6; or - // 1n with n being the nominal 'register' where addressing mode is 7. - // - // i.e. (see 4-118 / p.222) - // - // 00 = Dn - // 01 = An - // 02 = (An) - // 03 = (An)+ - // 04 = -(An) - // 05 = (d16, An) - // 06 = (d8, An, Xn) - // 10 = (xxx).W - // 11 = (xxx).L - // 12 = (d16, PC) - // 13 = (d8, PC, Xn) - // 14 = # - // - // ... for no reason other than to make the switch below easy to read. - int both_modes = - (combined_mode(ea_mode, ea_register) << 8) | - combined_mode(destination_mode, destination_register) | - (is_long_word_access ? 0x10000 : 0); + const int combined_source_mode = combined_mode(ea_mode, ea_register, true); + const int combined_destination_mode = combined_mode(destination_mode, destination_register, true); + const int mode = is_long_word_access ? + l2(combined_source_mode, combined_destination_mode) : + bw2(combined_source_mode, combined_destination_mode); // If the move is to an address register, switch the MOVE to a MOVEA and // pretend it's to a data register; if the move is from an address register // then just call it a move from a data register. - if((both_modes & 0xff) == 0x01) { - both_modes &= ~0x00ff; + if(ea_mode == 0x01) { operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; } - if((both_modes & 0xff00) == 0x0100) { - both_modes &= ~0xff00; - } - switch(both_modes) { + switch(mode) { // // MOVE , Dn // - case 0x10000: // MOVE.l Dn, Dn - case 0x00000: // MOVE.bw Dn, Dn + case l2(Dn, Dn): // MOVE.l Dn, Dn + case bw2(Dn, Dn): // MOVE.bw Dn, Dn op(Action::PerformOperation, seq("np")); break; - case 0x10200: // MOVE.l (An), Dn - case 0x10300: // MOVE.l (An)+, Dn + case l2(Ind, Dn): // MOVE.l (An), Dn + case l2(PostInc, Dn): // MOVE.l (An)+, Dn op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); if(ea_mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); @@ -1592,8 +1573,8 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x00200: // MOVE.bw (An), Dn - case 0x00300: // MOVE.bw (An)+, Dn + case bw2(Ind, Dn): // MOVE.bw (An), Dn + case bw2(PostInc, Dn): // MOVE.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); if(ea_mode == PostInc) { op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); @@ -1601,69 +1582,61 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); break; - case 0x10400: // MOVE.l -(An), Dn + case l2(PreDec, Dn): // MOVE.l -(An), Dn op(decrement_action | MicroOp::SourceMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x00400: // MOVE.bw -(An), Dn + case bw2(PreDec, Dn): // MOVE.bw -(An), Dn op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x10500: // MOVE.l (d16, An), Dn - case 0x10600: // MOVE.l (d8, An, Xn), Dn - case 0x11200: // MOVE.l (d16, PC), Dn - case 0x11300: // MOVE.l (d8, PC, Xn), Dn - op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR+ nr np", both_modes >> 8), { ea(0), ea(0) })); + case l2(d16An, Dn): // MOVE.l (d16, An), Dn + case l2(d8AnXn, Dn): // MOVE.l (d8, An, Xn), Dn + case l2(d16PC, Dn): // MOVE.l (d16, PC), Dn + case l2(d8PCXn, Dn): // MOVE.l (d8, PC, Xn), Dn + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr np", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x00500: // MOVE.bw (d16, An), Dn - case 0x00600: // MOVE.bw (d8, An, Xn), Dn - case 0x01200: // MOVE.bw (d16, PC), Dn - case 0x01300: // MOVE.bw (d8, PC, Xn), Dn - op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nr np", both_modes >> 8), { ea(0) }, + case bw2(d16An, Dn): // MOVE.bw (d16, An), Dn + case bw2(d8AnXn, Dn): // MOVE.bw (d8, An, Xn), Dn + case bw2(d16PC, Dn): // MOVE.bw (d16, PC), Dn + case bw2(d8PCXn, Dn): // MOVE.bw (d8, PC, Xn), Dn + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nr np", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x11000: // MOVE.l (xxx).W, Dn + case l2(XXXl, Dn): // MOVE.l (xxx).L, Dn + op(Action::None, seq("np")); + case l2(XXXw, Dn): // MOVE.l (xxx).W, Dn op( - int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); break; - case 0x01000: // MOVE.bw (xxx).W, Dn + case bw2(XXXl, Dn): // MOVE.bw (xxx).L, Dn + op(Action::None, seq("np")); + case bw2(XXXw, Dn): // MOVE.bw (xxx).W, Dn op( - int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nr np", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case 0x11100: // MOVE.l (xxx).L, Dn - op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq("np")); - break; - - case 0x01100: // MOVE.bw (xxx).L, Dn - op(Action::None, seq("np")); - op(int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); - op(Action::PerformOperation, seq("np")); - break; - - case 0x11400: // MOVE.l #, Dn + case l2(Imm, Dn): // MOVE.l #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(int(Action::PerformOperation), seq("np np")); break; - case 0x01400: // MOVE.bw #, Dn + case bw2(Imm, Dn): // MOVE.bw #, Dn storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(int(Action::PerformOperation), seq("np np")); break; @@ -1673,8 +1646,8 @@ struct ProcessorStorageConstructor { // MOVE , (An)+ // - case 0x10002: // MOVE.l Dn, (An) - case 0x10003: // MOVE.l Dn, (An)+ + case l2(Dn, Ind): // MOVE.l Dn, (An) + case l2(Dn, PostInc): // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op(Action::SetMoveFlagsl, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == PostInc) { @@ -1682,18 +1655,18 @@ struct ProcessorStorageConstructor { } break; - case 0x00002: // MOVE.bw Dn, (An) - case 0x00003: // MOVE.bw Dn, (An)+ + case bw2(Dn, Ind): // MOVE.bw Dn, (An) + case bw2(Dn, PostInc): // MOVE.bw Dn, (An)+ op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; - case 0x10202: // MOVE.l (An), (An) - case 0x10302: // MOVE.l (An)+, (An) - case 0x10203: // MOVE.l (An), (An)+ - case 0x10303: // MOVE.l (An)+, (An)+ + case l2(Ind, Ind): // MOVE.l (An), (An) + case l2(PostInc, Ind): // MOVE.l (An)+, (An) + case l2(Ind, PostInc): // MOVE.l (An), (An)+ + case l2(PostInc, PostInc): // MOVE.l (An)+, (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); @@ -1705,10 +1678,10 @@ struct ProcessorStorageConstructor { } break; - case 0x00202: // MOVE.bw (An), (An) - case 0x00302: // MOVE.bw (An)+, (An) - case 0x00203: // MOVE.bw (An), (An)+ - case 0x00303: // MOVE.bw (An)+, (An)+ + case bw2(Ind, Ind): // MOVE.bw (An), (An) + case bw2(PostInc, Ind): // MOVE.bw (An)+, (An) + case bw2(Ind, PostInc): // MOVE.bw (An), (An)+ + case bw2(PostInc, PostInc): // MOVE.bw (An)+, (An)+ op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); if(ea_mode == PostInc || destination_mode == PostInc) { @@ -1719,8 +1692,8 @@ struct ProcessorStorageConstructor { } break; - case 0x10402: // MOVE.l -(An), (An) - case 0x10403: // MOVE.l -(An), (An)+ + case l2(PreDec, Ind): // MOVE.l -(An), (An) + case l2(PreDec, PostInc): // MOVE.l -(An), (An)+ op(decrement_action | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) })); @@ -1730,26 +1703,26 @@ struct ProcessorStorageConstructor { } break; - case 0x00402: // MOVE.bw -(An), (An) - case 0x00403: // MOVE.bw -(An), (An)+ - op(decrement_action | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); + case bw2(PreDec, Ind): // MOVE.bw -(An), (An) + case bw2(PreDec, PostInc): // MOVE.bw -(An), (An)+ + op(decrement_action | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); + op(Action::PerformOperation, seq("nw np", { a(destination_register) })); if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } break; - case 0x10502: // MOVE.bw (d16, An), (An) - case 0x10503: // MOVE.bw (d16, An), (An)+ - case 0x10602: // MOVE.bw (d8, An, Xn), (An) - case 0x10603: // MOVE.bw (d8, An, Xn), (An)+ - case 0x11202: // MOVE.bw (d16, PC), (An) - case 0x11203: // MOVE.bw (d16, PC), (An)+ - case 0x11302: // MOVE.bw (d8, PC, Xn), (An) - case 0x11303: // MOVE.bw (d8, PC, Xn), (An)+ + case l2(d16An, Ind): // MOVE.bw (d16, An), (An) + case l2(d16An, PostInc): // MOVE.bw (d16, An), (An)+ + case l2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An) + case l2(d8AnXn, PostInc): // MOVE.bw (d8, An, Xn), (An)+ + case l2(d16PC, Ind): // MOVE.bw (d16, PC), (An) + case l2(d16PC, PostInc): // MOVE.bw (d16, PC), (An)+ + case l2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An) + case l2(d8PCXn, PostInc): // MOVE.bw (d8, PC, Xn), (An)+ op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); - op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nR+ nr", both_modes >> 8), { ea(0), ea(0) })); + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == PostInc) { @@ -1757,17 +1730,16 @@ struct ProcessorStorageConstructor { } break; - case 0x00502: // MOVE.bw (d16, An), (An) - case 0x00503: // MOVE.bw (d16, An), (An)+ - case 0x00602: // MOVE.bw (d8, An, Xn), (An) - case 0x00603: // MOVE.bw (d8, An, Xn), (An)+ - case 0x01202: // MOVE.bw (d16, PC), (An) - case 0x01203: // MOVE.bw (d16, PC), (An)+ - case 0x01302: // MOVE.bw (d8, PC, Xn), (An) - case 0x01303: // MOVE.bw (d8, PC, Xn), (An)+ - op( calc_action_for_mode(both_modes >> 8) | MicroOp::SourceMask, - seq(pseq("np nr", both_modes >> 8), { ea(0) }, - !is_byte_access)); + case bw2(d16An, Ind): // MOVE.bw (d16, An), (An) + case bw2(d16An, PostInc): // MOVE.bw (d16, An), (An)+ + case bw2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An) + case bw2(d8AnXn, PostInc): // MOVE.bw (d8, An, Xn), (An)+ + case bw2(d16PC, Ind): // MOVE.bw (d16, PC), (An) + case bw2(d16PC, PostInc): // MOVE.bw (d16, PC), (An)+ + case bw2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An) + case bw2(d8PCXn, PostInc): // MOVE.bw (d8, PC, Xn), (An)+ + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == PostInc) { @@ -1775,10 +1747,13 @@ struct ProcessorStorageConstructor { } break; - case 0x11002: // MOVE.l (xxx).W, (An) - case 0x11003: // MOVE.l (xxx).W, (An)+ - op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask ); - op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, + case l2(XXXl, Ind): // MOVE.l (xxx).l, (An) + case l2(XXXl, PostInc): // MOVE.l (xxx).l, (An)+ + case l2(XXXw, Ind): // MOVE.l (xxx).W, (An) + case l2(XXXw, PostInc) : // MOVE.l (xxx).W, (An)+ + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, + (combined_source_mode == XXXl) ? seq("np") : nullptr); + op( address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); @@ -1787,33 +1762,12 @@ struct ProcessorStorageConstructor { } break; - case 0x01002: // MOVE.bw (xxx).W, (An) - case 0x01003: // MOVE.bw (xxx).W, (An)+ - op( int(MicroOp::Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nr", { ea(0) }, !is_byte_access)); - op( Action::PerformOperation, - seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } - break; - - case 0x11102: // MOVE.l (xxx).l, (An) - case 0x11103: // MOVE.l (xxx).l, (An)+ - op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); - op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, - seq("np nR+ nr", { ea(0), ea(0) })); - op( Action::PerformOperation, - seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } - break; - - case 0x01102: // MOVE.bw (xxx).l, (An) - case 0x01103: // MOVE.bw (xxx).l, (An)+ + case bw2(XXXl, Ind): // MOVE.bw (xxx).l, (An) + case bw2(XXXl, PostInc): // MOVE.bw (xxx).l, (An)+ op( Action::None, seq("np")); - op( int(MicroOp::Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, + case bw2(XXXw, Ind): // MOVE.bw (xxx).W, (An) + case bw2(XXXw, PostInc): // MOVE.bw (xxx).W, (An)+ + op( address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); @@ -1822,8 +1776,8 @@ struct ProcessorStorageConstructor { } break; - case 0x11402: // MOVE.l #, (An) - case 0x11403: // MOVE.l #, (An)+ + case l2(Imm, Ind): // MOVE.l #, (An) + case l2(Imm, PostInc): // MOVE.l #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) }) ); @@ -1832,8 +1786,8 @@ struct ProcessorStorageConstructor { } break; - case 0x01402: // MOVE.bw #, (An) - case 0x01403: // MOVE.bw #, (An)+ + case bw2(Imm, Ind): // MOVE.bw #, (An) + case bw2(Imm, PostInc): // MOVE.bw #, (An)+ storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np nw np", { a(destination_register) }, !is_byte_access) ); if(destination_mode == PostInc) { @@ -1845,30 +1799,30 @@ struct ProcessorStorageConstructor { // MOVE , -(An) // - case 0x0004: // MOVE Dn, -(An) + case bw2(Dn, PreDec): // MOVE Dn, -(An) op( decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; - case 0x0204: // MOVE (An), -(An) - case 0x0304: // MOVE (An)+, -(An) +// case 0x0204: // MOVE (An), -(An) +// case 0x0304: // MOVE (An)+, -(An) // nr np nw - continue; +// continue; - case 0x0404: // MOVE -(An), -(An) +// case 0x0404: // MOVE -(An), -(An) // n nr np nw - continue; +// continue; - case 0x0504: // MOVE (d16, An), -(An) - case 0x0604: // MOVE (d8, An, Xn), -(An) +// case 0x0504: // MOVE (d16, An), -(An) +// case 0x0604: // MOVE (d8, An, Xn), -(An) // np nr np nw // n np nr np nw - continue; +// continue; - case 0x1004: // MOVE (xxx).W, -(An) +// case 0x1004: // MOVE (xxx).W, -(An) // np nr np nw - continue; +// continue; // // MOVE , (d16, An) @@ -1877,22 +1831,22 @@ struct ProcessorStorageConstructor { // MOVE , (d8, PC, Xn) // - case 0x0005: // MOVE.bw Dn, (d16, An) - case 0x0006: // MOVE.bw Dn, (d8, An, Xn) - case 0x0012: // MOVE.bw Dn, (d16, PC) - case 0x0013: // MOVE.bw Dn, (d8, PC, Xn) + case bw2(Dn, d16An): // MOVE.bw Dn, (d16, An) + case bw2(Dn, d8AnXn): // MOVE.bw Dn, (d8, An, Xn) + case bw2(Dn, d16PC): // MOVE.bw Dn, (d16, PC) + case bw2(Dn, d8PCXn): // MOVE.bw Dn, (d8, PC, Xn) op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); op(Action::PerformOperation, seq("nw np", { ea(1) })); break; - case 0x0205: // MOVE.bw (An), (d16, An) - case 0x0305: // MOVE.bw (An)+, (d16, An) - case 0x0206: // MOVE.bw (An), (d8, An, Xn) - case 0x0306: // MOVE.bw (An)+, (d8, An, Xn) - case 0x0212: // MOVE.bw (An), (d16, PC) - case 0x0312: // MOVE.bw (An)+, (d16, PC) - case 0x0213: // MOVE.bw (An), (d8, PC, Xn) - case 0x0313: // MOVE.bw (An)+, (d8, PC, Xn) + case bw2(Ind, d16An): // MOVE.bw (An), (d16, An) + case bw2(PostInc, d16An): // MOVE.bw (An)+, (d16, An) + case bw2(Ind, d8AnXn): // MOVE.bw (An), (d8, An, Xn) + case bw2(PostInc, d8AnXn): // MOVE.bw (An)+, (d8, An, Xn) + case bw2(Ind, d16PC): // MOVE.bw (An), (d16, PC) + case bw2(PostInc, d16PC): // MOVE.bw (An)+, (d16, PC) + case bw2(Ind, d8PCXn): // MOVE.bw (An), (d8, PC, Xn) + case bw2(PostInc, d8PCXn): // MOVE.bw (An)+, (d8, PC, Xn) op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[ea_register].full }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); if(ea_mode == PostInc) { @@ -1900,38 +1854,38 @@ struct ProcessorStorageConstructor { } break; - case 0x0405: // MOVE -(An), (d16, An) +// case 0x0405: // MOVE -(An), (d16, An) // n nr np nw - continue; +// continue; - case 0x0406: // MOVE -(An), (d8, An, Xn) +// case 0x0406: // MOVE -(An), (d8, An, Xn) // n nr n np nw np - continue; +// continue; - case 0x0505: // MOVE (d16, An), (d16, An) - case 0x0605: // MOVE (d8, An, Xn), (d16, An) +// case 0x0505: // MOVE (d16, An), (d16, An) +// case 0x0605: // MOVE (d8, An, Xn), (d16, An) // np nr np nw np // n np nr np nw np - continue; +// continue; - case 0x0506: // MOVE (d16, An), (d8, An, Xn) - case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) +// case 0x0506: // MOVE (d16, An), (d8, An, Xn) +// case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) // np nr n np nw np // n np nr n np nw np - continue; +// continue; - case 0x1005: // MOVE (xxx).W, (d16, An) +// case 0x1005: // MOVE (xxx).W, (d16, An) // np nr np nw np - continue; +// continue; - case 0x1006: // MOVE (xxx).W, (d8, An, Xn) +// case 0x1006: // MOVE (xxx).W, (d8, An, Xn) // np nr n np nw np - continue; +// continue; - case 0x1405: // MOVE.bw #, (d16, An) - case 0x1406: // MOVE.bw #, (d8, An, Xn) - case 0x1412: // MOVE.bw #, (d16, PC) - case 0x1413: // MOVE.bw #, (d8, PC, Xn) + case bw2(Imm, d16An): // MOVE.bw #, (d16, An) + case bw2(Imm, d8AnXn): // MOVE.bw #, (d8, An, Xn) + case bw2(Imm, d16PC): // MOVE.bw #, (d16, PC) + case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access )); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsl); @@ -1939,57 +1893,50 @@ struct ProcessorStorageConstructor { // // MOVE , (xxx).W + // MOVE , (xxx).L // - case 0x0010: // MOVE Dn, (xxx).W - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { ea(1) })); + case bw2(Dn, XXXl): // MOVE.bw Dn, (xxx).L + op(Action::None, seq("np")); + case bw2(Dn, XXXw): // MOVE Dn, (xxx).W + op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; - case 0x0210: // MOVE (An), (xxx).W - case 0x0310: // MOVE (An)+, (xxx).W +// case 0x0210: // MOVE (An), (xxx).W +// case 0x0310: // MOVE (An)+, (xxx).W // nr np nw np - continue; +// continue; - case 0x0410: // MOVE -(An), (xxx).W +// case 0x0410: // MOVE -(An), (xxx).W // n nr np nw np - continue; +// continue; - case 0x0510: // MOVE (d16, An), (xxx).W - case 0x0610: // MOVE (d8, An, Xn), (xxx).W +// case 0x0510: // MOVE (d16, An), (xxx).W +// case 0x0610: // MOVE (d8, An, Xn), (xxx).W // np nr np nw np // n np nr np nw np - continue; +// continue; - case 0x11410: // MOVE.l #, (xxx).w + case l2(Imm, XXXw): // MOVE.l #, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); op(Action::SetMoveFlagsl); break; - case 0x1010: // MOVE (xxx).W, (xxx).W +// case 0x1010: // MOVE (xxx).W, (xxx).W // np nr np nw np - continue; +// continue; - case 0x01410: // MOVE.bw #, (xxx).w + case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; - // - // MOVE , (xxx).L - // - - case 0x00011: // MOVE.bw Dn, (xxx).L - op(Action::None, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); - break; - - case 0x00211: // MOVE.bw (An), (xxx).L - case 0x00311: // MOVE.bw (An)+, (xxx).L + case bw2(Ind, XXXl): // MOVE.bw (An), (xxx).L + case bw2(PostInc, XXXl): // MOVE.bw (An)+, (xxx).L op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); if(ea_mode == PostInc) { @@ -1997,49 +1944,49 @@ struct ProcessorStorageConstructor { } break; - case 0x0411: // MOVE -(An), (xxx).L +// case 0x0411: // MOVE -(An), (xxx).L // n nr np nw np np - continue; +// continue; - case 0x0511: // MOVE (d16, An), (xxx).L - case 0x0611: // MOVE (d8, An, Xn), (xxx).L +// case 0x0511: // MOVE (d16, An), (xxx).L +// case 0x0611: // MOVE (d8, An, Xn), (xxx).L // np nr np nw np np // n np nr np nw np np - continue; +// continue; - case 0x01011: // MOVE.bw (xxx).W, (xxx).L + case bw2(XXXw, XXXl): // MOVE.bw (xxx).W, (xxx).L op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); continue; - case 0x01111: // MOVE.bw (xxx).l, (xxx).l + case bw2(XXXl, XXXl): // MOVE.bw (xxx).l, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); break; - case 0x01411: // MOVE.bw #, (xxx).l + case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; - case 0x11011: // MOVE.l (xxx).W, (xxx).L + case l2(XXXw, XXXl): // MOVE.l (xxx).W, (xxx).L op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; - case 0x11111: // MOVE.l (xxx).l, (xxx).l + case l2(XXXl, XXXl): // MOVE.l (xxx).l, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; - case 0x11411: // MOVE.l #, (xxx).l + case l2(Imm, XXXl): // MOVE.l #, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); @@ -2051,7 +1998,7 @@ struct ProcessorStorageConstructor { // default: - std::cerr << "Unimplemented MOVE " << std::hex << both_modes << " " << instruction << std::endl; + std::cerr << "Unimplemented MOVE " << std::hex << combined_source_mode << "," << combined_destination_mode << ": " << instruction << std::endl; // TODO: all other types of mode. continue; } From 2ba66c4457584b0736e8034ee2096e420ad82d46 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 16:10:17 -0400 Subject: [PATCH 082/239] Corrects MOVEA, adds extra test safeguards. --- OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm | 2 ++ .../68000/Implementation/68000Implementation.hpp | 15 ++++++++------- Processors/68000/Implementation/68000Storage.cpp | 6 ++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 7136ab7d4..a2f578ee0 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -77,9 +77,11 @@ class EmuTOS: public CPU::MC68000::BusHandler { cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); break; case Microcycle::SelectWord: + assert(!(is_rom && !is_peripheral)); base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: + assert(!(is_rom && !is_peripheral)); base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 7e829c923..1e9f08a31 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,6 +52,12 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. + std::cout << std::setw(8) << std::right; + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; + std::cout << std::endl; decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -59,12 +65,7 @@ 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 { - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; - std::cout << std::endl; - std::cout << std::hex << (program_counter_.full - 4) << ": " << decoded_instruction_ << '\t'; - std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); - std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; } active_program_ = &instructions[decoded_instruction_]; @@ -194,7 +195,7 @@ template void Processor: active_micro_op_->bus_program = branch_taken_bus_steps_; } else { if(byte_offset) { - active_micro_op_->bus_program = branch_byte_not_taken_bus_steps_; + active_micro_op_->bus_program = branch_byte_not_taken_bus_steps_; } else { active_micro_op_->bus_program = branch_word_not_taken_bus_steps_; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7de81ba5a..7fa81a33b 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1546,10 +1546,8 @@ struct ProcessorStorageConstructor { l2(combined_source_mode, combined_destination_mode) : bw2(combined_source_mode, combined_destination_mode); - // If the move is to an address register, switch the MOVE to a MOVEA and - // pretend it's to a data register; if the move is from an address register - // then just call it a move from a data register. - if(ea_mode == 0x01) { + // If the move is to an address register, switch the MOVE to a MOVEA. + if(destination_mode == 0x01) { operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; } From f48db625a0ea504557d2fbda9fd0a3606a58e27a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 16:41:00 -0400 Subject: [PATCH 083/239] Corrects write-back and zero flag for ADD/SUB.l. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 1e9f08a31..61ce90032 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -136,7 +136,7 @@ template void Processor: const uint32_t destination = active_program_->destination->full; const uint64_t result = destination + source; - zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); + zero_result_ = active_program_->destination->full = uint32_t(result); extend_flag_ = carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; overflow_flag_ = add_overflow() & 0x80000000; @@ -506,7 +506,7 @@ template void Processor: const uint32_t destination = active_program_->destination->full; const uint64_t result = destination - source; - zero_result_ = active_program_->destination->halves.low.full = uint32_t(result); + zero_result_ = active_program_->destination->full = uint32_t(result); extend_flag_ = carry_flag_ = result >> 32; negative_flag_ = result & 0x80000000; overflow_flag_ = sub_overflow() & 0x80000000; From 78649a5b541b872018191e21733215f821be3680 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 12 Apr 2019 17:16:03 -0400 Subject: [PATCH 084/239] Fleshes out MOVE, (XXX) a little further. --- .../68000/Implementation/68000Storage.cpp | 81 ++++++++++++++++--- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7fa81a33b..cabb93e3c 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1894,21 +1894,72 @@ struct ProcessorStorageConstructor { // MOVE , (xxx).L // - case bw2(Dn, XXXl): // MOVE.bw Dn, (xxx).L + case bw2(Dn, XXXl): // MOVE.bw Dn, (xxx).L op(Action::None, seq("np")); - case bw2(Dn, XXXw): // MOVE Dn, (xxx).W + case bw2(Dn, XXXw): // MOVE.bw Dn, (xxx).W op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; -// case 0x0210: // MOVE (An), (xxx).W -// case 0x0310: // MOVE (An)+, (xxx).W - // nr np nw np -// continue; + case l2(Dn, XXXl): // MOVE.l Dn, (xxx).L + op(Action::None, seq("np")); + case l2(Dn, XXXw): // MOVE.l Dn, (xxx).W + op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); + break; -// case 0x0410: // MOVE -(An), (xxx).W - // n nr np nw np -// continue; + case bw2(Ind, XXXw): // MOVE.bw (An), (xxx).W + case bw2(PostInc, XXXw): // MOVE.bw (An)+, (xxx).W + op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, + seq("nr np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { ea(1) })); + if(ea_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + + case l2(Ind, XXXw): // MOVE.l (An), (xxx).W + case l2(PostInc, XXXw): // MOVE.l (An)+, (xxx).W + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, + seq("nR+ nr", { ea(0), ea(0) })); + op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, + seq("np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); + if(ea_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + + case bw2(PreDec, XXXw): // MOVE.bw -(An), (xxx).W + op( decrement_action | MicroOp::SourceMask); + op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, + seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { ea(1) })); + break; + + case bw2(PreDec, XXXl): // MOVE.bw -(An), (xxx).L + op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("nw np np", { ea(1) })); + break; + + case l2(PreDec, XXXw): // MOVE.l -(An), (xxx).W + op( decrement_action | MicroOp::SourceMask); + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, + seq("n nR+ nr", { ea(0), ea(0) } )); + op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); + op( Action::PerformOperation, + seq("np nW+ nw np", { ea(1), ea(1) })); + break; + + case l2(PreDec, XXXl): // MOVE.l -(An), (xxx).L + op( decrement_action | MicroOp::SourceMask); + op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, + seq("n nR+ nr np", { ea(0), ea(0) } )); + op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); + op( Action::PerformOperation, + seq("nW+ nw np np", { ea(1), ea(1) })); + break; // case 0x0510: // MOVE (d16, An), (xxx).W // case 0x0610: // MOVE (d8, An, Xn), (xxx).W @@ -1942,9 +1993,15 @@ struct ProcessorStorageConstructor { } break; -// case 0x0411: // MOVE -(An), (xxx).L - // n nr np nw np np -// continue; + case l2(Ind, XXXl): // MOVE (An), (xxx).L + case l2(PostInc, XXXl): // MOVE (An)+, (xxx).L + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); + op(address_assemble_for_mode(combined_destination_mode)); + op(Action::PerformOperation, seq("nW+ nw np np", { ea(1), ea(1) })); + if(ea_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; // case 0x0511: // MOVE (d16, An), (xxx).L // case 0x0611: // MOVE (d8, An, Xn), (xxx).L From 53f75034fcc432a1b3c3d96e02a6f5e53edf327b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 14:09:28 -0400 Subject: [PATCH 085/239] Commits at least to decoding MOVEM. --- .../Implementation/68000Implementation.hpp | 15 ++--- .../68000/Implementation/68000Storage.cpp | 55 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 17 +++++- 3 files changed, 79 insertions(+), 8 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 61ce90032..327be6618 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -72,6 +72,7 @@ template void Processor: active_micro_op_ = active_program_->micro_operations; } + auto bus_program = active_micro_op_->bus_program; switch(active_micro_op_->action) { default: std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; @@ -192,12 +193,12 @@ template void Processor: program_counter_.full += int16_t(prefetch_queue_.halves.low.full); } program_counter_.full -= 2; - active_micro_op_->bus_program = branch_taken_bus_steps_; + bus_program = branch_taken_bus_steps_; } else { if(byte_offset) { - active_micro_op_->bus_program = branch_byte_not_taken_bus_steps_; + bus_program = branch_byte_not_taken_bus_steps_; } else { - active_micro_op_->bus_program = branch_word_not_taken_bus_steps_; + bus_program = branch_word_not_taken_bus_steps_; } } } break; @@ -212,17 +213,17 @@ template void Processor: // This DBcc will be ignored as the counter has underflowed. // Schedule n np np np and continue. Assumed: the first np // is from where the branch would have been if taken? - active_micro_op_->bus_program = dbcc_condition_false_no_branch_steps_; + bus_program = dbcc_condition_false_no_branch_steps_; dbcc_false_address_ = target_program_counter; } else { // Take the branch. Change PC and schedule n np np. - active_micro_op_->bus_program = dbcc_condition_false_branch_steps_; + bus_program = dbcc_condition_false_branch_steps_; program_counter_.full = target_program_counter; } } else { // This DBcc will be ignored as the condition is true; // perform nn np np and continue. - active_micro_op_->bus_program = dbcc_condition_true_steps_; + bus_program = dbcc_condition_true_steps_; } } break; @@ -804,7 +805,7 @@ template void Processor: // If we've got to a micro-op that includes bus steps, break out of this loop. if(!active_micro_op_->is_terminal()) { - active_step_ = active_micro_op_->bus_program; + active_step_ = bus_program; if(!active_step_->is_terminal()) break; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index cabb93e3c..3a969b39f 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -323,6 +323,9 @@ struct ProcessorStorageConstructor { ASLRLSLRROLRROXLRr, // Maps a destination register to a AS[L/R], LS[L/R], RO[L/R], ROX[L/R]; shift quantities are // decoded at runtime. ASLRLSLRROLRROXLRm, // Maps a destination mode and register to a memory-based AS[L/R], LS[L/R], RO[L/R], ROX[L/R]. + + MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable + // hole for the runtime part to install proper MOVEM activity. }; using Operation = ProcessorStorage::Operation; @@ -459,6 +462,11 @@ struct ProcessorStorageConstructor { {0xf1d8, 0xe050, Operation::ROXRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) {0xf1d8, 0xe090, Operation::ROXRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) {0xffc0, 0xe4c0, Operation::ROXRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + + {0xffc0, 0x48c0, Operation::MOVEMtoMl, Decoder::MOVEM}, // 4-128 (p232) + {0xffc0, 0x4880, Operation::MOVEMtoMw, Decoder::MOVEM}, // 4-128 (p232) + {0xffc0, 0x4cc0, Operation::MOVEMtoRl, Decoder::MOVEM}, // 4-128 (p232) + {0xffc0, 0x4c80, Operation::MOVEMtoRw, Decoder::MOVEM}, // 4-128 (p232) }; #ifndef NDEBUG @@ -1521,6 +1529,53 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("np")); } break; + case Decoder::MOVEM: { + // For the sake of commonality, both to R and to M will evaluate their addresses + // as if they were destinations. + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + // Standard prefix: acquire the register selection flags and fetch the next program + // word to replace them. + op(Action::CopyNextWord, seq("np")); + + // Do whatever is necessary to calculate the proper start address. + const int mode = combined_mode(ea_mode, ea_register); + const bool is_to_m = (operation == Operation::MOVEMtoMl || operation == Operation::MOVEMtoMw); + switch(mode) { + default: continue; + + case Ind: + case PreDec: + case PostInc: { + // Deal with the illegal combinations. + if(mode == PostInc && is_to_m) continue; + if(mode == PreDec && !is_to_m) continue; + } break; + + case d16An: + case d8AnXn: + case d16PC: + case d8PCXn: + // PC-relative addressing is permitted for moving to registers only. + if((mode == d16PC || mode == d8PCXn) && is_to_m) continue; + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np", mode))); + break; + + case XXXl: + op(Action::None, seq("np")); + case XXXw: + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np")); + break; + } + + // Standard suffix: perform the MOVEM, which will mean evaluating the + // register selection flags and substituting the necessary reads or writes. + op(Action::PerformOperation); + + // A final program fetch will cue up the next instruction. + op(Action::None, seq("np")); + } break; + // Decodes the format used by most MOVEs and all MOVEAs. case Decoder::MOVE: { const int destination_mode = (instruction >> 6) & 7; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 92939b739..f7971960e 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -77,6 +77,9 @@ class ProcessorStorage { RORb, RORw, RORl, RORm, ROXLb, ROXLw, ROXLl, ROXLm, ROXRb, ROXRw, ROXRl, ROXRm, + + MOVEMtoRl, MOVEMtoRw, + MOVEMtoMl, MOVEMtoMw, }; /*! @@ -205,6 +208,9 @@ class ProcessorStorage { /// Copies the next two prefetch words into one of the bus_data_. AssembleLongWordDataFromPrefetch, + + /// Copies the low part of the prefetch queue into next_word_. + CopyNextWord, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; @@ -282,7 +288,8 @@ class ProcessorStorage { Program *active_program_ = nullptr; MicroOp *active_micro_op_ = nullptr; BusStep *active_step_ = nullptr; - uint16_t decoded_instruction_; + uint16_t decoded_instruction_ = 0; + uint16_t next_word_ = 0; /// Copies address_[7] to the proper stack pointer based on current mode. void write_back_stack_pointer(); @@ -290,6 +297,14 @@ class ProcessorStorage { /// Sets or clears the supervisor flag, ensuring the stack pointer is properly updated. void set_is_supervisor(bool); + // Transient storage for MOVEM. + uint32_t movem_addresses_[16]; + RegisterPair32 movem_spare_value_; + + /*! + Evaluates the conditional described by @c code and returns @c true or @c false to + indicate the result of that evaluation. + */ inline bool evaluate_condition(uint8_t code) { switch(code & 0xf) { default: From 823f91605b343b4df404a8f046cf3f647cdff1fc Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 14:31:13 -0400 Subject: [PATCH 086/239] Still slow pedalling slightly, adds further MOVEM storage. --- Processors/68000/Implementation/68000Storage.cpp | 15 +++++++++++++++ Processors/68000/Implementation/68000Storage.hpp | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 3a969b39f..81e237e6e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2206,6 +2206,18 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { const size_t dbcc_condition_false_no_branch_offset = constructor.assemble_program("n nr np np", { &dbcc_false_address_ }); const size_t dbcc_condition_false_branch_offset = constructor.assemble_program("n np np"); + // The reads steps needs to be 33 neatly assembled reads; the writes just the 32. + // Addresses and data sources/targets will be filled in at runtime, so anything will do here. + std::string movem_reads_pattern, movem_writes_pattern; + std::vector addresses; + for(auto c = 0; c < 33; ++c) { + movem_reads_pattern += "nr "; + if(c != 32) movem_writes_pattern += "nw "; + addresses.push_back(nullptr); + } + const size_t movem_reads_offset = constructor.assemble_program(movem_reads_pattern, addresses); + const size_t movem_writes_offset = constructor.assemble_program(movem_writes_pattern, addresses); + // Install operations. constructor.install_instructions(); @@ -2220,6 +2232,9 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { dbcc_condition_false_no_branch_steps_ = &all_bus_steps_[dbcc_condition_false_no_branch_offset]; dbcc_condition_false_branch_steps_ = &all_bus_steps_[dbcc_condition_false_branch_offset]; + movem_reads_steps_ = &all_bus_steps_[movem_reads_offset]; + movem_writes_steps_ = &all_bus_steps_[movem_writes_offset]; + // Set initial state. Largely TODO. active_step_ = reset_bus_steps_; effective_address_[0] = 0; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index f7971960e..b1ada2f2f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -284,6 +284,9 @@ class ProcessorStorage { BusStep *dbcc_condition_false_no_branch_steps_; BusStep *dbcc_condition_false_branch_steps_; + BusStep *movem_reads_steps_; + BusStep *movem_writes_steps_; + // Current bus step pointer, and outer program pointer. Program *active_program_ = nullptr; MicroOp *active_micro_op_ = nullptr; @@ -298,7 +301,7 @@ class ProcessorStorage { void set_is_supervisor(bool); // Transient storage for MOVEM. - uint32_t movem_addresses_[16]; + uint32_t movem_addresses_[33]; RegisterPair32 movem_spare_value_; /*! From d70229201d4d39f46076c224c85903bbd1b61149 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 14:45:29 -0400 Subject: [PATCH 087/239] Advances right up to the lack of MOVEM actions being the final piece. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 327be6618..7741c2f67 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -626,6 +626,10 @@ template void Processor: #undef add_overflow break; + case int(MicroOp::Action::CopyNextWord): + next_word_ = prefetch_queue_.halves.low.full; + break; + case int(MicroOp::Action::SetMoveFlagsb): zero_result_ = active_program_->source->halves.low.halves.low; negative_flag_ = zero_result_ & 0x80; From 1003e70b5eb321b24e3ac091b8a3ecaba805625a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 20:02:18 -0400 Subject: [PATCH 088/239] Implements MOVEM to R. --- .../Implementation/68000Implementation.hpp | 127 ++++++++++++++++++ .../68000/Implementation/68000Storage.cpp | 10 +- .../68000/Implementation/68000Storage.hpp | 11 +- 3 files changed, 142 insertions(+), 6 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 7741c2f67..ed1346d0b 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -350,6 +350,110 @@ template void Processor: set_ccr(active_program_->source->full); break; + /* + MOVEM: multi-word moves. + */ + +#define setup_movem(words_per_reg) \ + /* Count the number of long words to move. */ \ + size_t total_to_move = 0; \ + auto mask = next_word_; \ + while(mask) { \ + total_to_move += mask&1; \ + mask >>= 1; \ + } \ + \ + /* Twice that many words plus one will need to be moved */ \ + bus_program = movem_reads_steps_ + (64 - total_to_move*words_per_reg)*2; \ + \ + /* Fill in the proper addresses and targets. */ \ + const auto mode = (decoded_instruction_ >> 3) & 7; \ + uint32_t start_address; \ + if(mode <= 4) { \ + start_address = active_program_->source_address->full; \ + } else { \ + start_address = effective_address_[1].full; \ + } \ + \ + auto step = bus_program; \ + uint32_t *address_storage = movem_addresses_; \ + mask = next_word_; \ + int offset = 0; + + case Operation::MOVEMtoRl: { + setup_movem(2); + + // Everything for move to registers is based on an incrementing + // address; per M68000PRM: + // + // "[If using the postincrement addressing mode then] the incremented address + // register contains the address of the last operand loaded plus the operand length. + // If the addressing register is also loaded from memory, the memory value is ignored + // and the register is written with the postincre- mented effective address." + while(mask) { + if(mask&1) { + address_storage[0] = start_address; + address_storage[1] = start_address + 2; + + step[0].microcycle.address = step[1].microcycle.address = address_storage; + step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; + + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; + step[0].microcycle.value = step[1].microcycle.value = &target->halves.high; + step[2].microcycle.value = step[3].microcycle.value = &target->halves.low; + + start_address += 4; + address_storage += 2; + step += 4; + } + mask >>= 1; + ++offset; + } + + // MOVEM to R always reads one word too many. + address_storage[0] = start_address; + step[0].microcycle.address = step[1].microcycle.address = address_storage; + step[0].microcycle.value = step[1].microcycle.value = &movem_spare_value_; + movem_final_address_ = start_address; + } break; + + case Operation::MOVEMtoRw: { + setup_movem(1); + + while(mask) { + if(mask&1) { + address_storage[0] = start_address; + + step[0].microcycle.address = step[1].microcycle.address = address_storage; + + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; + step[0].microcycle.value = step[1].microcycle.value = &target->halves.low; + + start_address += 2; + ++ address_storage; + step += 2; + } + mask >>= 1; + ++offset; + } + + // MOVEM to R always reads one word too many. + address_storage[0] = start_address; + step[0].microcycle.address = step[1].microcycle.address = address_storage; + step[0].microcycle.value = step[1].microcycle.value = &movem_spare_value_; + movem_final_address_ = start_address; + } break; + + case Operation::MOVEMtoMl: { + setup_movem(2); + } break; + + case Operation::MOVEMtoMw: { + setup_movem(1); + } break; + +#undef setup_movem + /* NEGs: negatives the destination, setting the zero, negative, overflow and carry flags appropriate, and extend. @@ -626,6 +730,29 @@ template void Processor: #undef add_overflow break; + case int(MicroOp::Action::MOVEMtoRComplete): { + // If this was a word-sized move, perform sign extension. + if(active_program_->operation == Operation::MOVEMtoRw) { + auto mask = next_word_; + int offset = 0; + while(mask) { + if(mask&1) { + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; + target->halves.high.full = (target->halves.low.full & 0x8000) ? 0xffff : 0x0000; + } + mask >>= 1; + ++offset; + } + } + + // If the post-increment mode was used, overwrite the source register. + const auto mode = (decoded_instruction_ >> 3) & 7; + if(mode == 3) { + const auto reg = decoded_instruction_ & 7; + address_[reg] = movem_final_address_; + } + } break; + case int(MicroOp::Action::CopyNextWord): next_word_ = prefetch_queue_.halves.low.full; break; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 81e237e6e..7cb61af99 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1573,7 +1573,7 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation); // A final program fetch will cue up the next instruction. - op(Action::None, seq("np")); + op(is_to_m ? Action::MOVEMtoMComplete : Action::MOVEMtoRComplete, seq("np")); } break; // Decodes the format used by most MOVEs and all MOVEAs. @@ -2206,15 +2206,17 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { const size_t dbcc_condition_false_no_branch_offset = constructor.assemble_program("n nr np np", { &dbcc_false_address_ }); const size_t dbcc_condition_false_branch_offset = constructor.assemble_program("n np np"); - // The reads steps needs to be 33 neatly assembled reads; the writes just the 32. + // The reads steps needs to be 32 long-word reads plus an overflow word; the writes just the long words. // Addresses and data sources/targets will be filled in at runtime, so anything will do here. std::string movem_reads_pattern, movem_writes_pattern; std::vector addresses; - for(auto c = 0; c < 33; ++c) { + for(auto c = 0; c < 64; ++c) { movem_reads_pattern += "nr "; - if(c != 32) movem_writes_pattern += "nw "; + movem_writes_pattern += "nw "; addresses.push_back(nullptr); } + movem_reads_pattern += "nr"; + addresses.push_back(nullptr); const size_t movem_reads_offset = constructor.assemble_program(movem_reads_pattern, addresses); const size_t movem_writes_offset = constructor.assemble_program(movem_writes_pattern, addresses); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index b1ada2f2f..5bdd668ee 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -211,6 +211,12 @@ class ProcessorStorage { /// Copies the low part of the prefetch queue into next_word_. CopyNextWord, + + /// Performs write-back of post-increment address and/or sign extensions as necessary. + MOVEMtoRComplete, + + /// Performs write-back of pre-decrement address. + MOVEMtoMComplete, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; @@ -301,8 +307,9 @@ class ProcessorStorage { void set_is_supervisor(bool); // Transient storage for MOVEM. - uint32_t movem_addresses_[33]; - RegisterPair32 movem_spare_value_; + uint32_t movem_addresses_[65]; + RegisterPair16 movem_spare_value_; + uint32_t movem_final_address_; /*! Evaluates the conditional described by @c code and returns @c true or @c false to From 325af677d36828ebc2967b863bcc46be522f42c7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 20:53:27 -0400 Subject: [PATCH 089/239] Implements MOVEM to M with an implicit type conversion. --- .../Implementation/68000Implementation.hpp | 177 +++++++++++------- 1 file changed, 112 insertions(+), 65 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index ed1346d0b..c0184fb2d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -354,34 +354,75 @@ template void Processor: MOVEM: multi-word moves. */ -#define setup_movem(words_per_reg) \ - /* Count the number of long words to move. */ \ - size_t total_to_move = 0; \ - auto mask = next_word_; \ - while(mask) { \ - total_to_move += mask&1; \ - mask >>= 1; \ - } \ - \ - /* Twice that many words plus one will need to be moved */ \ - bus_program = movem_reads_steps_ + (64 - total_to_move*words_per_reg)*2; \ - \ - /* Fill in the proper addresses and targets. */ \ - const auto mode = (decoded_instruction_ >> 3) & 7; \ - uint32_t start_address; \ - if(mode <= 4) { \ - start_address = active_program_->source_address->full; \ - } else { \ - start_address = effective_address_[1].full; \ - } \ - \ - auto step = bus_program; \ - uint32_t *address_storage = movem_addresses_; \ - mask = next_word_; \ +#define setup_movem(words_per_reg, base) \ + /* Count the number of long words to move. */ \ + size_t total_to_move = 0; \ + auto mask = next_word_; \ + while(mask) { \ + total_to_move += mask&1; \ + mask >>= 1; \ + } \ + \ + /* Twice that many words plus one will need to be moved */ \ + bus_program = base + (64 - total_to_move*words_per_reg)*2; \ + \ + /* Fill in the proper addresses and targets. */ \ + const auto mode = (decoded_instruction_ >> 3) & 7; \ + uint32_t start_address; \ + if(mode <= 4) { \ + start_address = active_program_->destination_address->full; \ + } else { \ + start_address = effective_address_[1].full; \ + } \ + \ + auto step = bus_program; \ + uint32_t *address_storage = movem_addresses_; \ + mask = next_word_; \ int offset = 0; +#define write_address_sequence_long(address_step, offset_step, l, h) \ + while(mask) { \ + if(mask&1) { \ + address_storage[0] = start_address; \ + address_storage[1] = start_address + address_step; \ + \ + step[0].microcycle.address = step[1].microcycle.address = address_storage; \ + step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; \ + \ + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ + step[h].microcycle.value = step[h+1].microcycle.value = &target->halves.high; \ + step[l].microcycle.value = step[l+1].microcycle.value = &target->halves.low; \ + \ + start_address += address_step*2; \ + address_storage += 2; \ + step += 4; \ + } \ + mask >>= 1; \ + offset += offset_step; \ + } + +#define write_address_sequence_word(address_step, offset_step) \ + while(mask) { \ + if(mask&1) { \ + address_storage[0] = start_address; \ + \ + step[0].microcycle.address = step[1].microcycle.address = address_storage; \ + \ + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ + step[0].microcycle.value = step[1].microcycle.value = &target->halves.low; \ + \ + start_address += address_step; \ + ++ address_storage; \ + step += 2; \ + } \ + mask >>= 1; \ + offset += offset_step; \ + } + + + case Operation::MOVEMtoRl: { - setup_movem(2); + setup_movem(2, movem_reads_steps_); // Everything for move to registers is based on an incrementing // address; per M68000PRM: @@ -389,26 +430,11 @@ template void Processor: // "[If using the postincrement addressing mode then] the incremented address // register contains the address of the last operand loaded plus the operand length. // If the addressing register is also loaded from memory, the memory value is ignored - // and the register is written with the postincre- mented effective address." - while(mask) { - if(mask&1) { - address_storage[0] = start_address; - address_storage[1] = start_address + 2; - - step[0].microcycle.address = step[1].microcycle.address = address_storage; - step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; - - const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; - step[0].microcycle.value = step[1].microcycle.value = &target->halves.high; - step[2].microcycle.value = step[3].microcycle.value = &target->halves.low; - - start_address += 4; - address_storage += 2; - step += 4; - } - mask >>= 1; - ++offset; - } + // and the register is written with the postincremented effective address." + // + // The latter part is dealt with by MicroOp::Action::MOVEMtoRComplete, which also + // does any necessary sign extension. + write_address_sequence_long(2, 1, 0, 2); // MOVEM to R always reads one word too many. address_storage[0] = start_address; @@ -418,24 +444,8 @@ template void Processor: } break; case Operation::MOVEMtoRw: { - setup_movem(1); - - while(mask) { - if(mask&1) { - address_storage[0] = start_address; - - step[0].microcycle.address = step[1].microcycle.address = address_storage; - - const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; - step[0].microcycle.value = step[1].microcycle.value = &target->halves.low; - - start_address += 2; - ++ address_storage; - step += 2; - } - mask >>= 1; - ++offset; - } + setup_movem(1, movem_reads_steps_); + write_address_sequence_word(2, 1); // MOVEM to R always reads one word too many. address_storage[0] = start_address; @@ -445,14 +455,43 @@ template void Processor: } break; case Operation::MOVEMtoMl: { - setup_movem(2); + setup_movem(2, movem_writes_steps_); + + // MOVEM to M counts downwards and enumerates the registers in reverse order + // if subject to the predecrementing mode; otherwise it counts upwards and + // operates exactly as does MOVEM to R. + // + // Note also: "The MC68000 and MC68010 write the initial register value + // (not decremented) [when writing a register that is providing + // pre-decrementing addressing]." + // + // Hence the decrementing register (if any) is updated + // by MicroOp::Action::MOVEMtoMComplete. + if(mode == 4) { + offset = 15; + start_address -= 2; + write_address_sequence_long(-2, -1, 2, 0); + movem_final_address_ = start_address; + } else { + write_address_sequence_long(2, 1, 0, 2); + } } break; case Operation::MOVEMtoMw: { - setup_movem(1); + setup_movem(1, movem_writes_steps_); + + if(mode == 4) { + offset = 15; + start_address -= 2; + write_address_sequence_word(-2, -1); + } else { + write_address_sequence_word(2, 1); + } } break; #undef setup_movem +#undef write_address_sequence_long +#undef write_address_sequence_word /* NEGs: negatives the destination, setting the zero, @@ -753,6 +792,14 @@ template void Processor: } } break; + case int(MicroOp::Action::MOVEMtoMComplete): { + const auto mode = (decoded_instruction_ >> 3) & 7; + if(mode == 4) { + const auto reg = decoded_instruction_ & 7; + address_[reg] = movem_final_address_; + } + } break; + case int(MicroOp::Action::CopyNextWord): next_word_ = prefetch_queue_.halves.low.full; break; From 75d8824e6bcc063ec333d07cb3ca189c1cf76b9e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 21:02:28 -0400 Subject: [PATCH 090/239] Eliminates implicit type conversion. --- .../Implementation/68000Implementation.hpp | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index c0184fb2d..289839dcf 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -380,47 +380,49 @@ template void Processor: mask = next_word_; \ int offset = 0; -#define write_address_sequence_long(address_step, offset_step, l, h) \ - while(mask) { \ - if(mask&1) { \ - address_storage[0] = start_address; \ - address_storage[1] = start_address + address_step; \ - \ - step[0].microcycle.address = step[1].microcycle.address = address_storage; \ - step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; \ - \ - const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ - step[h].microcycle.value = step[h+1].microcycle.value = &target->halves.high; \ - step[l].microcycle.value = step[l+1].microcycle.value = &target->halves.low; \ - \ - start_address += address_step*2; \ - address_storage += 2; \ - step += 4; \ - } \ - mask >>= 1; \ - offset += offset_step; \ +#define inc_action(x, v) x += v +#define dec_action(x, v) x -= v + +#define write_address_sequence_long(action, l) \ + while(mask) { \ + if(mask&1) { \ + address_storage[0] = start_address; \ + action(start_address, 2); \ + address_storage[1] = start_address; \ + action(start_address, 2); \ + \ + step[0].microcycle.address = step[1].microcycle.address = address_storage; \ + step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; \ + \ + const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ + step[(l^2)].microcycle.value = step[(l^2)+1].microcycle.value = &target->halves.high; \ + step[l].microcycle.value = step[l+1].microcycle.value = &target->halves.low; \ + \ + address_storage += 2; \ + step += 4; \ + } \ + mask >>= 1; \ + action(offset, 1); \ } -#define write_address_sequence_word(address_step, offset_step) \ +#define write_address_sequence_word(action) \ while(mask) { \ if(mask&1) { \ address_storage[0] = start_address; \ + action(start_address, 2); \ \ step[0].microcycle.address = step[1].microcycle.address = address_storage; \ \ const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ step[0].microcycle.value = step[1].microcycle.value = &target->halves.low; \ \ - start_address += address_step; \ ++ address_storage; \ step += 2; \ } \ mask >>= 1; \ - offset += offset_step; \ + action(offset, 1); \ } - - case Operation::MOVEMtoRl: { setup_movem(2, movem_reads_steps_); @@ -434,7 +436,7 @@ template void Processor: // // The latter part is dealt with by MicroOp::Action::MOVEMtoRComplete, which also // does any necessary sign extension. - write_address_sequence_long(2, 1, 0, 2); + write_address_sequence_long(inc_action, 0); // MOVEM to R always reads one word too many. address_storage[0] = start_address; @@ -445,7 +447,7 @@ template void Processor: case Operation::MOVEMtoRw: { setup_movem(1, movem_reads_steps_); - write_address_sequence_word(2, 1); + write_address_sequence_word(inc_action); // MOVEM to R always reads one word too many. address_storage[0] = start_address; @@ -470,10 +472,10 @@ template void Processor: if(mode == 4) { offset = 15; start_address -= 2; - write_address_sequence_long(-2, -1, 2, 0); + write_address_sequence_long(dec_action, 2); movem_final_address_ = start_address; } else { - write_address_sequence_long(2, 1, 0, 2); + write_address_sequence_long(inc_action, 0); } } break; @@ -483,15 +485,17 @@ template void Processor: if(mode == 4) { offset = 15; start_address -= 2; - write_address_sequence_word(-2, -1); + write_address_sequence_word(dec_action); } else { - write_address_sequence_word(2, 1); + write_address_sequence_word(inc_action); } } break; #undef setup_movem #undef write_address_sequence_long #undef write_address_sequence_word +#undef inc_action +#undef dec_action /* NEGs: negatives the destination, setting the zero, From 52e33e861cd29be06e10670b1e6b998aa26df4fd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 22:15:09 -0400 Subject: [PATCH 091/239] Starts to introduce the QL as a second source for 68000 testing. It's advantageous over the ST in that a commented disassembly of the ROM is available. --- .../Clock Signal.xcodeproj/project.pbxproj | 4 + OSBindings/Mac/Clock SignalTests/QLTests.mm | 118 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 OSBindings/Mac/Clock SignalTests/QLTests.mm diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index e902e7206..5a338aa6c 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -637,6 +637,7 @@ 4BDB61EB2032806E0048AF91 /* CSAtari2600.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A539A1D117D36003C6002 /* CSAtari2600.mm */; }; 4BDB61EC203285AE0048AF91 /* Atari2600OptionsPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FE21F1DA19D7C0090D3CE /* Atari2600OptionsPanel.swift */; }; 4BDDBA991EF3451200347E61 /* Z80MachineCycleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BDDBA981EF3451200347E61 /* Z80MachineCycleTests.swift */; }; + 4BE76CF922641ED400ACD6FA /* QLTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BE76CF822641ED300ACD6FA /* QLTests.mm */; }; 4BE7C9181E3D397100A5496D /* TIA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE7C9161E3D397100A5496D /* TIA.cpp */; }; 4BE9A6B11EDE293000CBCB47 /* zexdoc.com in Resources */ = {isa = PBXBuildFile; fileRef = 4BE9A6B01EDE293000CBCB47 /* zexdoc.com */; }; 4BEA525E1DF33323007E74F2 /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEA525D1DF33323007E74F2 /* Tape.cpp */; }; @@ -1406,6 +1407,7 @@ 4BE3231520532AA7006EF799 /* Target.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Target.hpp; sourceTree = ""; }; 4BE3231620532BED006EF799 /* Target.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Target.hpp; sourceTree = ""; }; 4BE3231720532CC0006EF799 /* Target.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Target.hpp; sourceTree = ""; }; + 4BE76CF822641ED300ACD6FA /* QLTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = QLTests.mm; sourceTree = ""; }; 4BE7C9161E3D397100A5496D /* TIA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TIA.cpp; sourceTree = ""; }; 4BE7C9171E3D397100A5496D /* TIA.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TIA.hpp; sourceTree = ""; }; 4BE845201F2FF7F100A5EA22 /* CRTC6845.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRTC6845.hpp; path = 6845/CRTC6845.hpp; sourceTree = ""; }; @@ -2832,6 +2834,7 @@ 4B98A0601FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm */, 4B121F9A1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm */, 4BD4A8CF1E077FD20020D856 /* PCMTrackTests.mm */, + 4BE76CF822641ED300ACD6FA /* QLTests.mm */, 4B2AF8681E513FC20027EE29 /* TIATests.mm */, 4B1D08051E0F7A1100763741 /* TimeTests.mm */, 4BB73EB81B587A5100552FC2 /* Info.plist */, @@ -4031,6 +4034,7 @@ 4BA91E1D216D85BA00F79557 /* MasterSystemVDPTests.mm in Sources */, 4B98A0611FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm in Sources */, 4BEF6AAC1D35D1C400E73575 /* DPLLTests.swift in Sources */, + 4BE76CF922641ED400ACD6FA /* QLTests.mm in Sources */, 4B3BA0CF1D318B44005DD7A7 /* MOS6522Bridge.mm in Sources */, 4BC751B21D157E61006C31D9 /* 6522Tests.swift in Sources */, 4BFCA12B1ECBE7C400AC40C1 /* ZexallTests.swift in Sources */, diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm new file mode 100644 index 000000000..678e22a2f --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -0,0 +1,118 @@ +// +// EmuTOSTests.m +// Clock SignalTests +// +// Created by Thomas Harte on 10/03/2019. +// Copyright © 2019 Thomas Harte. All rights reserved. +// + +#import + +#include +#include + +#include "68000.hpp" +#include "CSROMFetcher.hpp" + +class QL: public CPU::MC68000::BusHandler { + public: + QL(const std::vector &rom) : m68000_(*this) { + assert(!(rom.size() & 1)); + rom_.resize(rom.size() / 2); + + for(size_t c = 0; c < rom_.size(); ++c) { + rom_[c] = (rom[c << 1] << 8) | rom[(c << 1) + 1]; + } + } + + void run_for(HalfCycles cycles) { + m68000_.run_for(cycles); + } + + HalfCycles perform_bus_operation(const CPU::MC68000::Microcycle &cycle, int is_supervisor) { + const uint32_t address = cycle.word_address(); + uint32_t word_address = address; + + // As much about the Atari ST's memory map as is relevant here: the ROM begins + // at 0xfc0000, and the first eight bytes are mirrored to the first four memory + // addresses in order for /RESET to work properly. RAM otherwise fills the first + // 512kb of the address space. Trying to write to ROM raises a bus error. + + const bool is_peripheral = false;//word_address > (0xff0000 >> 1); + const bool is_rom = word_address < (0xc000 >> 1); + uint16_t *const base = is_rom ? rom_.data() : ram_.data(); + if(is_rom) { + word_address &= 0xbfff; + } else { + word_address &= 0x3ffff; + } + + using Microcycle = CPU::MC68000::Microcycle; + if(cycle.data_select_active()) { + uint16_t peripheral_result = 0xffff; +/* if(is_peripheral) { + switch(address & 0x7ff) { + // A hard-coded value for TIMER B. + case (0xa21 >> 1): + peripheral_result = 0x00000001; + break; + } + printf("Peripheral: %c %08x", (cycle.operation & Microcycle::Read) ? 'r' : 'w', *cycle.address); + if(!(cycle.operation & Microcycle::Read)) { + if(cycle.operation & Microcycle::SelectByte) + printf(" %02x", cycle.value->halves.low); + else + printf(" %04x", cycle.value->full); + } + printf("\n"); + }*/ + + switch(cycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { + default: break; + + case Microcycle::SelectWord | Microcycle::Read: + cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; + break; + case Microcycle::SelectByte | Microcycle::Read: + cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); + break; + case Microcycle::SelectWord: + assert(!(is_rom && !is_peripheral)); + base[word_address] = cycle.value->full; + break; + case Microcycle::SelectByte: + assert(!(is_rom && !is_peripheral)); + base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); + break; + } + } + + return HalfCycles(0); + } + + private: + CPU::MC68000::Processor m68000_; + + std::vector rom_; + std::array ram_; +}; + +@interface QLTests : XCTestCase +@end + +@implementation QLTests { + std::unique_ptr _machine; +} + +- (void)setUp { + const auto roms = CSROMFetcher()("SinclairQL", {"js.rom"}); + _machine.reset(new QL(*roms[0])); +} + +- (void)testStartup { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + _machine->run_for(HalfCycles(400000)); +} + +@end From 8a09e5fc16e421f2429d6d6d6279f6789b14c753 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 14 Apr 2019 22:39:13 -0400 Subject: [PATCH 092/239] Implements Scc. --- .../Implementation/68000Implementation.hpp | 5 ++ .../68000/Implementation/68000Storage.cpp | 67 ++++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 2 + 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 289839dcf..18c1c26f5 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -227,6 +227,11 @@ template void Processor: } } break; + case Operation::Scc: { + active_program_->destination->halves.low.halves.low = + evaluate_condition(prefetch_queue_.halves.high.halves.high) ? 0xff : 0x00; + } break; + /* CLRs: store 0 to the destination, set the zero flag, and clear negative, overflow and carry. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7cb61af99..7fb3b2648 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -308,7 +308,7 @@ struct ProcessorStorageConstructor { CMPA, // Maps a destination register and a source mode and register to a CMPA. CMPM, // Maps to a CMPM. - DBcc, // Maps a destination register to a DBcc. + SccDBcc, // Maps a mode and destination register to either a DBcc or Scc. JMP, // Maps a mode and register to a JMP. @@ -408,7 +408,7 @@ struct ProcessorStorageConstructor { {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) - {0xf0f8, 0x50c8, Operation::DBcc, Decoder::DBcc}, // 4-91 (p195) + {0xf0c0, 0x50c0, Operation::Scc, Decoder::SccDBcc}, // Scc: 4-173 (p276); DBcc: 4-91 (p195) {0xffc0, 0x4200, Operation::CLRb, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) {0xffc0, 0x4240, Operation::CLRw, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) @@ -1392,13 +1392,60 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::DBcc: { - storage_.instructions[instruction].source = &storage_.data_[ea_register]; + case Decoder::SccDBcc: { + if(ea_mode == 1) { + // This is a DBcc. Decode as such. + + storage_.instructions[instruction].source = &storage_.data_[ea_register]; + + // Jump straight into deciding what steps to take next, + // which will be selected dynamically. + op(Action::PerformOperation); + op(); + } else { + // This is an Scc. + + // Scc is inexplicably a read-modify-write operation. + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + const int mode = combined_mode(ea_mode, ea_register); + switch(mode) { + default: continue; + + case Dn: + op(Action::PerformOperation, seq("np")); + // TODO: if condition true, an extra n. + break; + + case Ind: + case PostInc: + op(Action::PerformOperation, seq("nr np nw", { a(ea_register), a(ea_register) }, false)); + if(mode == PostInc) { + op(int(Action::Increment1) | MicroOp::DestinationMask); + } + break; + + case PreDec: + op(int(Action::Decrement1) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("n nr np nw", { a(ea_register), a(ea_register) }, false)); + break; + + case d16An: + case d8AnXn: + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd", mode), { ea(1) } , false)); + op(Action::PerformOperation, seq("np nw", { ea(1) } , false)); + break; + + case XXXw: + op(Action::None, seq("np")); + case XXXl: + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd", mode), { ea(1) } , false)); + op(Action::PerformOperation, seq("np nw", { ea(1) } , false)); + break; + } + } - // Jump straight into deciding what steps to take next, - // which will be selected dynamically. - op(Action::PerformOperation); - op(); } break; case Decoder::JMP: { @@ -2108,7 +2155,9 @@ struct ProcessorStorageConstructor { // default: - std::cerr << "Unimplemented MOVE " << std::hex << combined_source_mode << "," << combined_destination_mode << ": " << instruction << std::endl; + if(combined_source_mode <= Imm && combined_destination_mode <= Imm) { + std::cerr << "Unimplemented MOVE " << std::hex << combined_source_mode << "," << combined_destination_mode << ": " << instruction << std::endl; + } // TODO: all other types of mode. continue; } diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 5bdd668ee..d2cac60d7 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -80,6 +80,8 @@ class ProcessorStorage { MOVEMtoRl, MOVEMtoRw, MOVEMtoMl, MOVEMtoMw, + + Scc, }; /*! From fba210f7ce9fe1c8b2d7f114c4b9ba377675caf7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 09:30:49 -0400 Subject: [PATCH 093/239] Corrects MOVE.l Dn, (An)[+]. --- .../xcshareddata/xcschemes/Clock Signal.xcscheme | 3 +-- OSBindings/Mac/Clock SignalTests/QLTests.mm | 4 ++++ Processors/68000/Implementation/68000Storage.cpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme index 95b31a9ca..9c2dca9ce 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme +++ b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme @@ -26,8 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - enableAddressSanitizer = "YES" - enableUBSanitizer = "YES" + disableMainThreadChecker = "YES" codeCoverageEnabled = "YES" shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 678e22a2f..4e5396333 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,17 +71,21 @@ class QL: public CPU::MC68000::BusHandler { default: break; case Microcycle::SelectWord | Microcycle::Read: +// printf("[word r %08x] ", *cycle.address); cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; break; case Microcycle::SelectByte | Microcycle::Read: +// printf("[byte r %08x] ", *cycle.address); cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); +// printf("[word w %08x <- %04x] ", *cycle.address, cycle.value->full); base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); +// printf("[byte w %08x <- %02x] ", *cycle.address, (cycle.value->full >> cycle.byte_shift()) & 0xff); base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7fb3b2648..5e817e5b6 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1749,7 +1749,7 @@ struct ProcessorStorageConstructor { case l2(Dn, Ind): // MOVE.l Dn, (An) case l2(Dn, PostInc): // MOVE.l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); - op(Action::SetMoveFlagsl, seq("nW+ nw np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } From 45f35236a7b16c3a81ccadb8b3bd527ff46071a2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 09:44:06 -0400 Subject: [PATCH 094/239] Corrects decoding of ADDA and SUBA. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5e817e5b6..e3621e660 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -708,7 +708,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); - const bool is_long_word_access = !((instruction >> 8)&1); + const bool is_long_word_access = !!((instruction >> 8)&1); switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; From 3d240f3f18bdbf4d2036e1ff4f74647ab10dbe20 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 09:49:23 -0400 Subject: [PATCH 095/239] Corrects decoding of DBcc. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e3621e660..366a6ee07 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1395,7 +1395,7 @@ struct ProcessorStorageConstructor { case Decoder::SccDBcc: { if(ea_mode == 1) { // This is a DBcc. Decode as such. - + operation = Operation::DBcc; storage_.instructions[instruction].source = &storage_.data_[ea_register]; // Jump straight into deciding what steps to take next, From 328d29749030094c8fb4bec0bef72c56d0718e9b Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 10:03:52 -0400 Subject: [PATCH 096/239] Implements the first few addressing modes for TST. --- .../Implementation/68000Implementation.hpp | 22 ++++++++++ .../68000/Implementation/68000Storage.cpp | 40 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 2 + 3 files changed, 64 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 18c1c26f5..cc0828eb8 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -767,6 +767,28 @@ template void Processor: #undef set_flags_w #undef set_flags_l + /* + TSTs: compare to zero. + */ + + case Operation::TSTb: + carry_flag_ = overflow_flag_ = 0; + zero_result_ = active_program_->source->halves.low.halves.low; + negative_flag_ = zero_result_ & 0x80; + break; + + case Operation::TSTw: + carry_flag_ = overflow_flag_ = 0; + zero_result_ = active_program_->source->halves.low.full; + negative_flag_ = zero_result_ & 0x8000; + break; + + case Operation::TSTl: + carry_flag_ = overflow_flag_ = 0; + zero_result_ = active_program_->source->full; + negative_flag_ = zero_result_ & 0x80000000; + break; + /* Development period debugging. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 366a6ee07..ca6f858b2 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -326,6 +326,8 @@ struct ProcessorStorageConstructor { MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable // hole for the runtime part to install proper MOVEM activity. + + TST, // Mapsa mode and register to a TST. }; using Operation = ProcessorStorage::Operation; @@ -467,6 +469,10 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4880, Operation::MOVEMtoMw, Decoder::MOVEM}, // 4-128 (p232) {0xffc0, 0x4cc0, Operation::MOVEMtoRl, Decoder::MOVEM}, // 4-128 (p232) {0xffc0, 0x4c80, Operation::MOVEMtoRw, Decoder::MOVEM}, // 4-128 (p232) + + {0xffc0, 0x4a00, Operation::TSTb, Decoder::TST}, // 4-192 (p296) + {0xffc0, 0x4a40, Operation::TSTw, Decoder::TST}, // 4-192 (p296) + {0xffc0, 0x4a80, Operation::TSTl, Decoder::TST}, // 4-192 (p296) }; #ifndef NDEBUG @@ -2168,6 +2174,40 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nn _ np")); break; + case Decoder::TST: { + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + + const int mode = combined_mode(ea_mode, ea_register); + const bool is_byte_access = operation == Operation::TSTb; + const bool is_long_word_access = operation == Operation::TSTl; + switch(is_long_word_access ? l(mode) : bw(mode)) { + default: continue; + + case bw(Dn): + case l(Dn): + op(Action::PerformOperation, seq("np")); + break; + + case bw(Ind): + case bw(PostInc): + op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + if(mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + break; + + case l(Ind): + case l(PostInc): + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np")); + if(mode == PostInc) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + break; + } + } break; + default: std::cerr << "Unhandled decoder " << int(mapping.decoder) << std::endl; continue; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index d2cac60d7..aca3b63ce 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -82,6 +82,8 @@ class ProcessorStorage { MOVEMtoMl, MOVEMtoMw, Scc, + + TSTb, TSTw, TSTl, }; /*! From aef92ba29c93eac0501f6ddb98f48db040272dce Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 12:25:45 -0400 Subject: [PATCH 097/239] Corrects immediate shift count. --- Processors/68000/Implementation/68000Implementation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index cc0828eb8..14bfa8690 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -683,7 +683,7 @@ template void Processor: extend_flag_ = carry_flag_ = value & t; #define decode_shift_count() \ - const int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : (decoded_instruction_ >> 9) & 7; \ + const int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : ( ((decoded_instruction_ >> 9)&7) ? ((decoded_instruction_ >> 9)&7) : 8) ; \ active_step_->microcycle.length = HalfCycles(4 * shift_count); #define set_flags_b(t) set_flags(active_program_->destination->halves.low.halves.low, 0x80, t) From a223cd90a13151ca40674e659012346b12e90d7c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 12:36:08 -0400 Subject: [PATCH 098/239] Adds predecrement TSTs, increases QL running time, reduces logging. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 18 ++++++++---------- .../Implementation/68000Implementation.hpp | 6 +++--- .../68000/Implementation/68000Storage.cpp | 4 ++++ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 4e5396333..010d130c2 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -38,13 +38,11 @@ class QL: public CPU::MC68000::BusHandler { // addresses in order for /RESET to work properly. RAM otherwise fills the first // 512kb of the address space. Trying to write to ROM raises a bus error. - const bool is_peripheral = false;//word_address > (0xff0000 >> 1); - const bool is_rom = word_address < (0xc000 >> 1); + const bool is_peripheral = word_address >= (rom_.size() + ram_.size()); + const bool is_rom = word_address < rom_.size(); uint16_t *const base = is_rom ? rom_.data() : ram_.data(); - if(is_rom) { - word_address &= 0xbfff; - } else { - word_address &= 0x3ffff; + if(!is_rom) { + word_address %= ram_.size(); } using Microcycle = CPU::MC68000::Microcycle; @@ -81,12 +79,12 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); // printf("[word w %08x <- %04x] ", *cycle.address, cycle.value->full); - base[word_address] = cycle.value->full; + if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); // printf("[byte w %08x <- %02x] ", *cycle.address, (cycle.value->full >> cycle.byte_shift()) & 0xff); - base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); + if(!is_peripheral) base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } } @@ -98,7 +96,7 @@ class QL: public CPU::MC68000::BusHandler { CPU::MC68000::Processor m68000_; std::vector rom_; - std::array ram_; + std::array ram_; }; @interface QLTests : XCTestCase @@ -116,7 +114,7 @@ class QL: public CPU::MC68000::BusHandler { - (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(400000)); + _machine->run_for(HalfCycles(40000000)); } @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 14bfa8690..da195a916 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,12 +52,12 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. - std::cout << std::setw(8) << std::right; +/* std::cout << std::setw(8) << std::right; std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; - std::cout << std::endl; + std::cout << std::endl;*/ decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -65,7 +65,7 @@ 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 { - std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; + std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\n'; } active_program_ = &instructions[decoded_instruction_]; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index ca6f858b2..84c4618c3 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2188,6 +2188,8 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("np")); break; + case bw(PreDec): + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n")); case bw(Ind): case bw(PostInc): op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); @@ -2197,6 +2199,8 @@ struct ProcessorStorageConstructor { } break; + case l(PreDec): + op(int(Action::Decrement4) | MicroOp::SourceMask, seq("n")); case l(Ind): case l(PostInc): op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); From d25ab35d586a0a52d8f0a8848f845484657f669c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 12:41:56 -0400 Subject: [PATCH 099/239] Finally gets `setw` usage correct. --- Outputs/Log.hpp | 4 ++-- .../68000/Implementation/68000Implementation.hpp | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Outputs/Log.hpp b/Outputs/Log.hpp index d24d2262b..88beab326 100644 --- a/Outputs/Log.hpp +++ b/Outputs/Log.hpp @@ -23,8 +23,8 @@ #include #include -#define PADHEX(n) std::hex << std::setw(n) << std::right << std::setfill('0') -#define PADDEC(n) std::dec << std::setw(n) << std::right << std::setfill('0') +#define PADHEX(n) std::hex << std::setfill('0') << std::setw(n) +#define PADDEC(n) std::dec << std::setfill('0') << std::setw(n) #define LOG(x) std::cout << x << std::endl #define LOGNBR(x) std::cout << x diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index da195a916..4b425b8d6 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,12 +52,12 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. -/* std::cout << std::setw(8) << std::right; + std::cout << std::setfill('0'); std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << address_[c].full << " "; - std::cout << std::endl;*/ + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; + std::cout << '\n'; decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -65,7 +65,7 @@ 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 { - std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\n'; + std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; } active_program_ = &instructions[decoded_instruction_]; From 62e4c2396198d3af49da15ee8ac62ab963128ba3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 13:03:32 -0400 Subject: [PATCH 100/239] Corrects memory map, causing the RAM test no longer to fail. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 010d130c2..4884ed8f6 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -33,15 +33,16 @@ class QL: public CPU::MC68000::BusHandler { const uint32_t address = cycle.word_address(); uint32_t word_address = address; - // As much about the Atari ST's memory map as is relevant here: the ROM begins - // at 0xfc0000, and the first eight bytes are mirrored to the first four memory - // addresses in order for /RESET to work properly. RAM otherwise fills the first - // 512kb of the address space. Trying to write to ROM raises a bus error. - - const bool is_peripheral = word_address >= (rom_.size() + ram_.size()); + // QL memory map: ROM is in the lowest area; RAM is from 0x20000. const bool is_rom = word_address < rom_.size(); + const bool is_ram = word_address >= 0x10000 && word_address < 0x10000+ram_.size(); + const bool is_peripheral = !is_ram && !is_rom; + uint16_t *const base = is_rom ? rom_.data() : ram_.data(); - if(!is_rom) { + if(is_rom) { + word_address %= rom_.size(); + } + if(is_ram) { word_address %= ram_.size(); } From 1460a88bb3c500dc4e6ab01415c5e0fbdd08d9ca Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 15:14:38 -0400 Subject: [PATCH 101/239] Takes a run at JSR and RTS. --- .../Implementation/68000Implementation.hpp | 23 +++- .../68000/Implementation/68000Storage.cpp | 100 +++++++++++++++++- .../68000/Implementation/68000Storage.hpp | 9 ++ 3 files changed, 123 insertions(+), 9 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 4b425b8d6..8bd9b7f25 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,11 +52,13 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. - std::cout << std::setfill('0'); - std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); - std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; + if(address_[5].full > 0x3fff0 || program_counter_.full < 0x16a) { + std::cout << std::setfill('0'); + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; + } std::cout << '\n'; decoded_instruction_ = prefetch_queue_.halves.high.full; @@ -831,6 +833,17 @@ template void Processor: } } break; + case int(MicroOp::Action::PrepareJSR): + destination_bus_data_[0] = program_counter_; + effective_address_[1].full = address_[7].full - 2; + address_[7].full -= 4; + break; + + case int(MicroOp::Action::PrepareRTS): + effective_address_[0].full = address_[7].full; + address_[7].full += 4; + break; + case int(MicroOp::Action::CopyNextWord): next_word_ = prefetch_queue_.halves.low.full; break; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 84c4618c3..da65bbbd0 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -95,8 +95,8 @@ struct ProcessorStorageConstructor { * nr: read LSW of soemthing from the bus into the source latch; * nRd: read MSW of something from the bus into the destination latch; * nrd: read LSW of soemthing from the bus into the destination latch; - * nS: push the MSW of something onto the stack; - * ns: push the LSW of something onto the stack; + * nS: push the MSW of something onto the stack **and then** decrement the pointer; + * ns: push the LSW of something onto the stack **and then** decrement the pointer; * nU: pop the MSW of something from the stack; * nu: pop the LSW of something from the stack; * nV: fetch a vector's MSW; @@ -226,7 +226,7 @@ struct ProcessorStorageConstructor { if(token == "nR" || token == "nr" || token == "nW" || token == "nw" || token == "nRd" || token == "nrd") { const bool is_read = tolower(token[1]) == 'r'; const bool use_source_storage = is_read && token.size() != 3; - RegisterPair32 *scratch_data = use_source_storage ? &storage_.source_bus_data_[0] : &storage_.destination_bus_data_[0]; + RegisterPair32 *const scratch_data = use_source_storage ? &storage_.source_bus_data_[0] : &storage_.destination_bus_data_[0]; assert(address_iterator != addresses.end()); @@ -252,6 +252,42 @@ struct ProcessorStorageConstructor { continue; } + // A stack write. + if(token == "nS" || token == "ns") { + RegisterPair32 *const scratch_data = &storage_.destination_bus_data_[0]; + + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress; + step.microcycle.address = &storage_.effective_address_[1].full; + step.microcycle.value = isupper(token[1]) ? &scratch_data->halves.high : &scratch_data->halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord; + step.action = Action::DecrementEffectiveAddress1; + steps.push_back(step); + + continue; + } + + // A stack read. + if(token == "nU" || token == "nu") { + RegisterPair32 *const scratch_data = &storage_.source_bus_data_[0]; + + step.microcycle.length = HalfCycles(5); + step.microcycle.operation = Microcycle::NewAddress | Microcycle::Read; + step.microcycle.address = &storage_.effective_address_[0].full; + step.microcycle.value = isupper(token[1]) ? &scratch_data->halves.high : &scratch_data->halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation |= Microcycle::SelectWord; + step.action = Action::IncrementEffectiveAddress0; + steps.push_back(step); + + continue; + } + std::cerr << "MC68000 program builder; Unknown access token " << token << std::endl; assert(false); } @@ -327,7 +363,10 @@ struct ProcessorStorageConstructor { MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable // hole for the runtime part to install proper MOVEM activity. - TST, // Mapsa mode and register to a TST. + TST, // Maps a mode and register to a TST. + + JSR, // Maps a mode and register to a JSR. + RTS, // Maps }; using Operation = ProcessorStorage::Operation; @@ -393,6 +432,8 @@ struct ProcessorStorageConstructor { {0xffff, 0x4e70, Operation::None, Decoder::RESET}, // 6-83 (p537) {0xffc0, 0x4ec0, Operation::JMP, Decoder::JMP}, // 4-108 (p212) + {0xffc0, 0x4e80, Operation::JMP, Decoder::JSR}, // 4-109 (p213) + {0xffff, 0x4e75, Operation::JMP, Decoder::RTS}, // 4-169 (p273) {0xf0c0, 0x9000, Operation::SUBb, Decoder::ADDSUB}, // 4-174 (p278) {0xf0c0, 0x9040, Operation::SUBw, Decoder::ADDSUB}, // 4-174 (p278) @@ -473,6 +514,7 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4a00, Operation::TSTb, Decoder::TST}, // 4-192 (p296) {0xffc0, 0x4a40, Operation::TSTw, Decoder::TST}, // 4-192 (p296) {0xffc0, 0x4a80, Operation::TSTl, Decoder::TST}, // 4-192 (p296) + }; #ifndef NDEBUG @@ -1454,6 +1496,52 @@ struct ProcessorStorageConstructor { } break; + case Decoder::JSR: { + storage_.instructions[instruction].source = &storage_.effective_address_[0]; + const int mode = combined_mode(ea_mode, ea_register); + switch(mode) { + default: continue; + case Ind: // JSR (An) + storage_.instructions[instruction].source = &storage_.address_[ea_register]; + op(Action::PrepareJSR); + op(Action::PerformOperation, seq("np nS ns np")); + break; + + case d16PC: // JSR (d16, PC) + case d16An: // JSR (d16, An) + op(Action::PrepareJSR); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np nS ns np")); + op(Action::PerformOperation); + break; + + case d8PCXn: // JSR (d8, PC, Xn) + case d8AnXn: // JSR (d8, An, Xn) + op(Action::PrepareJSR); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np nS ns np")); + op(Action::PerformOperation); + break; + + case XXXl: // JMP (xxx).L + op(Action::None, seq("np")); + op(Action::PrepareJSR); + op(address_assemble_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np nS ns np")); + break; + + case XXXw: // JSR (xxx).W + op(Action::PrepareJSR); + op(address_assemble_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np nS ns np")); + break; + } + } break; + + case Decoder::RTS: { + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + op(Action::PrepareRTS, seq("nU nu")); + op(Action::PerformOperation, seq("np np")); + } break; + case Decoder::JMP: { storage_.instructions[instruction].source = &storage_.effective_address_[0]; const int mode = combined_mode(ea_mode, ea_register); @@ -1478,6 +1566,10 @@ struct ProcessorStorageConstructor { case XXXl: // JMP (xxx).L op(Action::None, seq("np")); + op(address_assemble_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("np np")); + break; + case XXXw: // JMP (xxx).W op(address_assemble_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np np")); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index aca3b63ce..e79dcc97f 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -221,6 +221,15 @@ class ProcessorStorage { /// Performs write-back of pre-decrement address. MOVEMtoMComplete, + + // (i) copies the current program counter to destination_bus_data_; + // (ii) copies the stack pointer minus 2 to effective_address_[1]; + // (iii) decrements the stack pointer by four. + PrepareJSR, + + // (i) copies the stack pointer to effective_address_[0]; + // (ii) increments the stack pointer by four. + PrepareRTS, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; From 84f4a25bc9a66a1ceca40a7702b9e0140be91392 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 16:28:20 -0400 Subject: [PATCH 102/239] Completes TST. --- .../68000/Implementation/68000Storage.cpp | 46 +++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index da65bbbd0..88f202cf2 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2275,15 +2275,15 @@ struct ProcessorStorageConstructor { switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case bw(Dn): - case l(Dn): + case bw(Dn): // TST.bw Dn + case l(Dn): // TST.l Dn op(Action::PerformOperation, seq("np")); break; - case bw(PreDec): + case bw(PreDec): // TST.bw -(An) op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n")); - case bw(Ind): - case bw(PostInc): + case bw(Ind): // TST.bw (An) + case bw(PostInc): // TST.bw (An)+ op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); if(mode == PostInc) { @@ -2291,16 +2291,46 @@ struct ProcessorStorageConstructor { } break; - case l(PreDec): + case l(PreDec): // TST.l -(An) op(int(Action::Decrement4) | MicroOp::SourceMask, seq("n")); - case l(Ind): - case l(PostInc): + case l(Ind): // TST.l (An) + case l(PostInc): // TST.l (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } break; + + case bw(d16An): // TST.bw (d16, An) + case bw(d16PC): // TST.bw (d16, PC) + case bw(d8AnXn): // TST.bw (d8, An, Xn) + case bw(d8PCXn): // TST.bw (d8, PC, Xn) + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr", mode), { ea(0) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case l(d16An): // TST.l (d16, An) + case l(d16PC): // TST.l (d16, PC) + case l(d8AnXn): // TST.l (d8, An, Xn) + case l(d8PCXn): // TST.l (d8, PC, Xn) + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np")); + break; + + case bw(XXXl): // TST.bw (xxx).l + op(Action::None, seq("np")); + case bw(XXXw): // TST.bw (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case l(XXXl): // TST.l (xxx).l + op(Action::None, seq("np")); + case l(XXXw): // TST.l (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np")); + break; } } break; From 892476973b9caa9a000ab145cd4f728c7768a34d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 17:31:58 -0400 Subject: [PATCH 103/239] Attempts RO{X}[L/R]. --- .../Implementation/68000Implementation.hpp | 124 ++++++++++++++++-- 1 file changed, 111 insertions(+), 13 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 8bd9b7f25..b057f69ae 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -678,14 +678,17 @@ template void Processor: /* Shifts and rotates. */ +#define set_neg_zero_overflow(v, m) \ + zero_result_ = (v); \ + negative_flag_ = zero_result_ & (m); \ + overflow_flag_ = (value ^ zero_result_) & (m); + #define set_flags(v, m, t) \ - zero_result_ = v; \ - negative_flag_ = zero_result_ & m; \ - overflow_flag_ = (value ^ zero_result_) & m; \ - extend_flag_ = carry_flag_ = value & t; + set_neg_zero_overflow(v, m) \ + extend_flag_ = carry_flag_ = value & (t); #define decode_shift_count() \ - const int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : ( ((decoded_instruction_ >> 9)&7) ? ((decoded_instruction_ >> 9)&7) : 8) ; \ + int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : ( ((decoded_instruction_ >> 9)&7) ? ((decoded_instruction_ >> 9)&7) : 8) ; \ active_step_->microcycle.length = HalfCycles(4 * shift_count); #define set_flags_b(t) set_flags(active_program_->destination->halves.low.halves.low, 0x80, t) @@ -725,6 +728,8 @@ template void Processor: #define asl(x, c, m, d) x <<= c #define asr(x, c, m, d) x = (x >> c) | (((value >> d) & 1) * (m ^ (m >> c))) +// TODO: carry/extend is incorrect for shifts of greater than one digit. + shift_op(LSL, lsl, 0x80, 0x8000, 0x80000000); shift_op(ASL, lsl, 0x80, 0x8000, 0x80000000); shift_op(LSR, lsr, 0x01, 0x0001, 0x00000001); @@ -733,41 +738,134 @@ template void Processor: #undef set_flags #define set_flags(v, m, t) \ zero_result_ = v; \ - negative_flag_ = zero_result_ & m; \ + negative_flag_ = zero_result_ & (m); \ overflow_flag_ = 0; \ - carry_flag_ = value & t; + carry_flag_ = value & (t); + +#define rol(destination, size) { \ + decode_shift_count(); \ + const auto value = destination; \ + \ + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + shift_count &= (size - 1); \ + destination = \ + (value << shift_count) | \ + (value >> (size - shift_count)); \ + carry_flag_ = destination & 1; \ + } \ + \ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ + } case Operation::ROLm: { const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full << 1) | (value >> 15); - set_flags_w(0x8000); + active_program_->destination->halves.low.full = (value << 1) | (value >> 15); + carry_flag_ = active_program_->destination->halves.low.full & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); } break; + case Operation::ROLb: rol(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ROLw: rol(active_program_->destination->halves.low.full, 16); break; + case Operation::ROLl: rol(active_program_->destination->full, 32); break; + +#undef rol + +#define ror(destination, size) { \ + decode_shift_count(); \ + const auto value = destination; \ + \ + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + shift_count &= (size - 1); \ + destination = \ + (value >> shift_count) | \ + (value << (size - shift_count)); \ + carry_flag_ = destination & (1 << (size - 1)); \ + } \ + \ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ + } case Operation::RORm: { const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (value << 15); - set_flags_w(0x0001); + active_program_->destination->halves.low.full = (value >> 1) | (value << 15); + carry_flag_ = active_program_->destination->halves.low.full & 0x8000; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); } break; + case Operation::RORb: ror(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::RORw: ror(active_program_->destination->halves.low.full, 16); break; + case Operation::RORl: ror(active_program_->destination->full, 32); break; + +#undef ror + +#define roxl(destination, size) { \ + decode_shift_count(); \ + const auto value = destination; \ +\ + if(!shift_count) { \ + carry_flag_ = extend_flag_; \ + } else { \ + shift_count %= (size + 1); \ + destination = \ + (value << shift_count) | \ + (value >> (size + 1 - shift_count)) | \ + ((extend_flag_ ? (1 << (size - 1)) : 0) >> (size - shift_count)); \ + carry_flag_ = extend_flag_ = destination & 1; \ + } \ + \ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} case Operation::ROXLm: { const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full << 1) | (extend_flag_ ? 0x0001 : 0x0000); + active_program_->destination->halves.low.full = (value << 1) | (extend_flag_ ? 0x0001 : 0x0000); extend_flag_ = value & 0x8000; set_flags_w(0x8000); } break; + case Operation::ROXLb: roxl(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ROXLw: roxl(active_program_->destination->halves.low.full, 16); break; + case Operation::ROXLl: roxl(active_program_->destination->full, 32); break; + +#undef roxl + +#define roxr(destination, size) { \ + decode_shift_count(); \ + const auto value = destination; \ +\ + if(!shift_count) { \ + carry_flag_ = extend_flag_; \ + } else { \ + shift_count %= (size + 1); \ + destination = \ + (value >> shift_count) | \ + (value << (size + 1 - shift_count)) | \ + ((extend_flag_ ? 1 : 0) << (size - shift_count)); \ + carry_flag_ = extend_flag_ = destination & 1; \ + } \ + \ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} case Operation::ROXRm: { const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = (active_program_->destination->halves.low.full >> 1) | (extend_flag_ ? 0x8000 : 0x0000); + active_program_->destination->halves.low.full = (value >> 1) | (extend_flag_ ? 0x8000 : 0x0000); extend_flag_ = value & 0x0001; set_flags_w(0x0001); } break; + case Operation::ROXRb: roxr(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ROXRw: roxr(active_program_->destination->halves.low.full, 16); break; + case Operation::ROXRl: roxr(active_program_->destination->full, 32); break; + +#undef roxr #undef set_flags #undef decode_shift_count #undef set_flags_b #undef set_flags_w #undef set_flags_l +#undef set_neg_zero_overflow /* TSTs: compare to zero. From 5330267d1600d9d2766966acc5a2dde09d58555c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 18:11:02 -0400 Subject: [PATCH 104/239] Implements BCLR. --- .../Implementation/68000Implementation.hpp | 13 ++++ .../68000/Implementation/68000Storage.cpp | 63 +++++++++++++------ .../68000/Implementation/68000Storage.hpp | 6 +- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index b057f69ae..aa3fce7d2 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -177,6 +177,19 @@ template void Processor: zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 31)); break; + case Operation::BCLRb: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 7)); + active_program_->destination->full &= ~(1 << (active_program_->source->full & 7)); + break; + + case Operation::BCLRl: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 31)); + active_program_->destination->full &= ~(1 << (active_program_->source->full & 31)); + + // Clearing in the top word requires an extra four cycles. + active_step_->microcycle.length = HalfCycles(8 + ((active_program_->source->full & 31) / 16) * 4); + break; + // Bcc: evaluates the relevant condition and displacement size and then: // if condition is false, schedules bus operations to get past this instruction; // otherwise applies the offset and schedules bus operations to refill the prefetch queue. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 88f202cf2..2833ffe37 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -337,6 +337,9 @@ struct ProcessorStorageConstructor { BTST, // Maps a source register and a destination register and mode to a BTST. BTSTIMM, // Maps a destination mode and register to a BTST #. + BCLR, // Maps a source register and a destination register and mode to a BCLR. + BCLRIMM, // Maps a destination mode and register to a BCLR #. + CLRNEGNEGXNOT, // Maps a destination mode and register to a CLR, NEG, NEGX or NOT. CMP, // Maps a destination register and a source mode and register to a CMP. @@ -451,6 +454,9 @@ struct ProcessorStorageConstructor { {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) + {0xf1c0, 0x0180, Operation::BCLRb, Decoder::BCLR}, // 4-31 (p135) + {0xffc0, 0x0880, Operation::BCLRb, Decoder::BCLRIMM}, // 4-32 (p136) + {0xf0c0, 0x50c0, Operation::Scc, Decoder::SccDBcc}, // Scc: 4-173 (p276); DBcc: 4-91 (p195) {0xffc0, 0x4200, Operation::CLRb, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) @@ -852,8 +858,12 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("n np np")); } break; - // Decodes a BTST, potential mutating the operation into a BTSTl. + // Decodes a BTST, potential mutating the operation into a BTSTl, + // or a BCLR. + case Decoder::BCLR: case Decoder::BTST: { + const bool is_bclr = mapping.decoder == Decoder::BCLR; + const int mask_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_source(storage_, 0, mask_register); storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); @@ -863,22 +873,28 @@ struct ProcessorStorageConstructor { default: continue; case Dn: // BTST.l Dn, Dn - operation = Operation::BTSTl; - op(Action::PerformOperation, seq("np n")); + if(is_bclr) { + operation = Operation::BCLRl; + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("r")); + } else { + operation = Operation::BTSTl; + op(Action::PerformOperation, seq("np n")); + } break; case Ind: // BTST.b Dn, (An) case PostInc: // BTST.b Dn, (An)+ - op(Action::None, seq("nrd np", { &storage_.data_[ea_register].full }, false)); - op(Action::PerformOperation); + op(Action::None, seq("nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { op(int(Action::Increment1) | MicroOp::DestinationMask); } break; case PreDec: // BTST.b Dn, -(An) - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); - op(Action::PerformOperation); + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; case d16An: // BTST.b Dn, (d16, An) @@ -887,7 +903,7 @@ struct ProcessorStorageConstructor { case d8PCXn: // BTST.b Dn, (d8, PC, Xn) op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, false)); - op(Action::PerformOperation); + op(Action::PerformOperation, is_bclr ? seq("nw", { ea(1) }, false) : nullptr); break; case XXXl: // BTST.b Dn, (xxx).l @@ -895,12 +911,15 @@ struct ProcessorStorageConstructor { case XXXw: // BTST.b Dn, (xxx).w op( address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); - op(Action::PerformOperation); + op(Action::PerformOperation, is_bclr ? seq("nw", { ea(1) }, false) : nullptr); break; } } break; + case Decoder::BCLRIMM: case Decoder::BTSTIMM: { + const bool is_bclr = mapping.decoder == Decoder::BCLRIMM; + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); @@ -909,15 +928,21 @@ struct ProcessorStorageConstructor { default: continue; case Dn: // BTST.l #, Dn - operation = Operation::BTSTl; - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np n")); - op(Action::PerformOperation); + if(is_bclr) { + operation = Operation::BCLRl; + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op(Action::PerformOperation, seq("r")); + } else { + operation = Operation::BTSTl; + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np n")); + op(Action::PerformOperation); + } break; case Ind: // BTST.b #, (An) case PostInc: // BTST.b #, (An)+ - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { &storage_.data_[ea_register].full }, false)); - op(Action::PerformOperation); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { op(int(Action::Increment1) | MicroOp::DestinationMask); } @@ -925,8 +950,8 @@ struct ProcessorStorageConstructor { case PreDec: // BTST.b #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { &storage_.data_[ea_register].full }, false)); - op(Action::PerformOperation); + op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; case d16An: // BTST.b #, (d16, An) @@ -936,21 +961,21 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, false)); - op(Action::PerformOperation); + op(Action::PerformOperation, is_bclr ? seq("nw", { ea(1) }, false) : nullptr); break; case XXXw: // BTST.b #, (xxx).w op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); - op(Action::PerformOperation); + op(Action::PerformOperation, is_bclr ? seq("nw", { ea(1) }, false) : nullptr); break; case XXXl: // BTST.b #, (xxx).l op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, false)); - op(Action::PerformOperation); + op(Action::PerformOperation, is_bclr ? seq("nw", { ea(1) }, false) : nullptr); break; } } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index e79dcc97f..dd0434705 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -57,8 +57,10 @@ class ProcessorStorage { MOVEtoSR, MOVEfromSR, MOVEtoCCR, - CMPb, CMPw, CMPl, BTSTb, BTSTl, + BCLRl, BCLRb, + CMPb, CMPw, CMPl, + TSTb, TSTw, TSTl, JMP, BRA, Bcc, @@ -82,8 +84,6 @@ class ProcessorStorage { MOVEMtoMl, MOVEMtoMw, Scc, - - TSTb, TSTw, TSTl, }; /*! From ebcae25762da91b4cb40dddc02822829f2a7f22d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 22:02:52 -0400 Subject: [PATCH 105/239] Adjusts JSR behaviour and further extends MOVE. --- .../Implementation/68000Implementation.hpp | 2 +- .../68000/Implementation/68000Storage.cpp | 38 +++++++++++++++---- .../68000/Implementation/68000Storage.hpp | 2 +- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index aa3fce7d2..e7828a90d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -946,8 +946,8 @@ template void Processor: case int(MicroOp::Action::PrepareJSR): destination_bus_data_[0] = program_counter_; - effective_address_[1].full = address_[7].full - 2; address_[7].full -= 4; + effective_address_[1].full = address_[7].full; break; case int(MicroOp::Action::PrepareRTS): diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 2833ffe37..aeb284f90 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1529,20 +1529,20 @@ struct ProcessorStorageConstructor { case Ind: // JSR (An) storage_.instructions[instruction].source = &storage_.address_[ea_register]; op(Action::PrepareJSR); - op(Action::PerformOperation, seq("np nS ns np")); + op(Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) })); break; case d16PC: // JSR (d16, PC) case d16An: // JSR (d16, An) op(Action::PrepareJSR); - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np nS ns np")); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np nW+ nw np", { ea(1), ea(1) })); op(Action::PerformOperation); break; case d8PCXn: // JSR (d8, PC, Xn) case d8AnXn: // JSR (d8, An, Xn) op(Action::PrepareJSR); - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np nS ns np")); + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np nW+ nw np", { ea(1), ea(1) })); op(Action::PerformOperation); break; @@ -1550,13 +1550,13 @@ struct ProcessorStorageConstructor { op(Action::None, seq("np")); op(Action::PrepareJSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); - op(Action::PerformOperation, seq("n np nS ns np")); + op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case XXXw: // JSR (xxx).W op(Action::PrepareJSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); - op(Action::PerformOperation, seq("n np nS ns np")); + op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; } } break; @@ -2059,7 +2059,15 @@ struct ProcessorStorageConstructor { case bw2(Dn, d16PC): // MOVE.bw Dn, (d16, PC) case bw2(Dn, d8PCXn): // MOVE.bw Dn, (d8, PC, Xn) op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); - op(Action::PerformOperation, seq("nw np", { ea(1) })); + op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); + break; + + case l2(Dn, d16An): // MOVE.l Dn, (d16, An) + case l2(Dn, d8AnXn): // MOVE.l Dn, (d8, An, Xn) + case l2(Dn, d16PC): // MOVE.l Dn, (d16, PC) + case l2(Dn, d8PCXn): // MOVE.l Dn, (d8, PC, Xn) + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; case bw2(Ind, d16An): // MOVE.bw (An), (d16, An) @@ -2070,13 +2078,29 @@ struct ProcessorStorageConstructor { case bw2(PostInc, d16PC): // MOVE.bw (An)+, (d16, PC) case bw2(Ind, d8PCXn): // MOVE.bw (An), (d8, PC, Xn) case bw2(PostInc, d8PCXn): // MOVE.bw (An)+, (d8, PC, Xn) - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { &storage_.address_[ea_register].full }, !is_byte_access)); + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); if(ea_mode == PostInc) { op(increment_action | MicroOp::SourceMask); } break; + case l2(Ind, d16An): // MOVE.l (An), (d16, An) + case l2(PostInc, d16An): // MOVE.l (An)+, (d16, An) + case l2(Ind, d8AnXn): // MOVE.l (An), (d8, An, Xn) + case l2(PostInc, d8AnXn): // MOVE.l (An)+, (d8, An, Xn) + case l2(Ind, d16PC): // MOVE.l (An), (d16, PC) + case l2(PostInc, d16PC): // MOVE.l (An)+, (d16, PC) + case l2(Ind, d8PCXn): // MOVE.l (An), (d8, PC, Xn) + case l2(PostInc, d8PCXn): // MOVE.l (An)+, (d8, PC, Xn) + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask); + op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq(pseq("np nW+ nw np", destination_mode), { ea(1), ea(1) })); + if(ea_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + // case 0x0405: // MOVE -(An), (d16, An) // n nr np nw // continue; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index dd0434705..b250eee19 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -223,7 +223,7 @@ class ProcessorStorage { MOVEMtoMComplete, // (i) copies the current program counter to destination_bus_data_; - // (ii) copies the stack pointer minus 2 to effective_address_[1]; + // (ii) copies the stack pointer minus 4 to effective_address_[1]; // (iii) decrements the stack pointer by four. PrepareJSR, From d802e83f49b4eb156bbb107bf61efd22984e067f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 22:25:22 -0400 Subject: [PATCH 106/239] Fills in further MOVEs. --- .../68000/Implementation/68000Storage.cpp | 144 ++++++++++++------ 1 file changed, 95 insertions(+), 49 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index aeb284f90..b55661b31 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2167,6 +2167,15 @@ struct ProcessorStorageConstructor { } break; + case bw2(Ind, XXXl): // MOVE.bw (An), (xxx).L + case bw2(PostInc, XXXl): // MOVE.bw (An)+, (xxx).L + op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); + if(ea_mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + break; + case l2(Ind, XXXw): // MOVE.l (An), (xxx).W case l2(PostInc, XXXw): // MOVE.l (An)+, (xxx).W op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, @@ -2179,6 +2188,16 @@ struct ProcessorStorageConstructor { } break; + case l2(Ind, XXXl): // MOVE (An), (xxx).L + case l2(PostInc, XXXl): // MOVE (An)+, (xxx).L + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); + op(address_assemble_for_mode(combined_destination_mode)); + op(Action::PerformOperation, seq("nW+ nw np np", { ea(1), ea(1) })); + if(ea_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + case bw2(PreDec, XXXw): // MOVE.bw -(An), (xxx).W op( decrement_action | MicroOp::SourceMask); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, @@ -2210,11 +2229,53 @@ struct ProcessorStorageConstructor { seq("nW+ nw np np", { ea(1), ea(1) })); break; -// case 0x0510: // MOVE (d16, An), (xxx).W -// case 0x0610: // MOVE (d8, An, Xn), (xxx).W - // np nr np nw np - // n np nr np nw np -// continue; + case bw2(d16PC, XXXw): + case bw2(d16An, XXXw): + case bw2(d8PCXn, XXXw): + case bw2(d8AnXn, XXXw): + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_destination_mode), { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); + break; + + case bw2(d16PC, XXXl): + case bw2(d16An, XXXl): + case bw2(d8PCXn, XXXl): + case bw2(d8AnXn, XXXl): + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np np nr", combined_destination_mode), { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); + break; + + case l2(d16PC, XXXw): + case l2(d16An, XXXw): + case l2(d8PCXn, XXXw): + case l2(d8AnXn, XXXw): + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_destination_mode), { ea(0), ea(0) })); + op(Action::PerformOperation); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); + break; + + case l2(d16PC, XXXl): + case l2(d16An, XXXl): + case l2(d8PCXn, XXXl): + case l2(d8AnXn, XXXl): + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np np nR+ nr", combined_destination_mode), { ea(0), ea(0) })); + op(Action::PerformOperation); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); + break; + + case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; + + case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); + op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + break; case l2(Imm, XXXw): // MOVE.l #, (xxx).w op(int(Action::None), seq("np")); @@ -2223,42 +2284,27 @@ struct ProcessorStorageConstructor { op(Action::SetMoveFlagsl); break; -// case 0x1010: // MOVE (xxx).W, (xxx).W - // np nr np nw np -// continue; + case l2(Imm, XXXl): // MOVE.l #, (xxx).l + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); + op(Action::SetMoveFlagsl); + break; - case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + case bw2(XXXw, XXXw): // MOVE.bw (xxx).w, (xxx).w + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np", { ea(1) }, !is_byte_access)); + continue; + + case bw2(XXXl, XXXw): // MOVE.bw (xxx).l, (xxx).w + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; - case bw2(Ind, XXXl): // MOVE.bw (An), (xxx).L - case bw2(PostInc, XXXl): // MOVE.bw (An)+, (xxx).L - op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); - op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); - if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); - } - break; - - case l2(Ind, XXXl): // MOVE (An), (xxx).L - case l2(PostInc, XXXl): // MOVE (An)+, (xxx).L - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); - op(address_assemble_for_mode(combined_destination_mode)); - op(Action::PerformOperation, seq("nW+ nw np np", { ea(1), ea(1) })); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } - break; - -// case 0x0511: // MOVE (d16, An), (xxx).L -// case 0x0611: // MOVE (d8, An, Xn), (xxx).L - // np nr np nw np np - // n np nr np nw np np -// continue; - - case bw2(XXXw, XXXl): // MOVE.bw (xxx).W, (xxx).L + case bw2(XXXw, XXXl): // MOVE.bw (xxx).w, (xxx).L op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); @@ -2271,13 +2317,20 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); break; - case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); + case l2(XXXw, XXXw): // MOVE.l (xxx).w (xxx).w + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(XXXw, XXXl): // MOVE.l (xxx).W, (xxx).L + case l2(XXXl, XXXw): // MOVE.l (xxx).l, (xxx).w + op(int(Action::None), seq("np")); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation); + op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); + break; + + case l2(XXXw, XXXl): // MOVE.l (xxx).w (xxx).l op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); @@ -2290,13 +2343,6 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; - case l2(Imm, XXXl): // MOVE.l #, (xxx).l - op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); - op(Action::SetMoveFlagsl); - break; - // // Default // From 1f0e3b157aabb193e7bd73c033e44579fedd0805 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 22:37:11 -0400 Subject: [PATCH 107/239] Corrects a couple of JSR and JMP addressing modes. --- .../68000/Implementation/68000Storage.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index b55661b31..c5794cdd1 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1535,18 +1535,18 @@ struct ProcessorStorageConstructor { case d16PC: // JSR (d16, PC) case d16An: // JSR (d16, An) op(Action::PrepareJSR); - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np nW+ nw np", { ea(1), ea(1) })); - op(Action::PerformOperation); + op(calc_action_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case d8PCXn: // JSR (d8, PC, Xn) case d8AnXn: // JSR (d8, An, Xn) op(Action::PrepareJSR); - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np nW+ nw np", { ea(1), ea(1) })); - op(Action::PerformOperation); + op(calc_action_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n nn np nW+ nw np", { ea(1), ea(1) })); break; - case XXXl: // JMP (xxx).L + case XXXl: // JSR (xxx).L op(Action::None, seq("np")); op(Action::PrepareJSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); @@ -1579,14 +1579,14 @@ struct ProcessorStorageConstructor { case d16PC: // JMP (d16, PC) case d16An: // JMP (d16, An) - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n np np")); - op(Action::PerformOperation); + op(calc_action_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n np np")); break; case d8PCXn: // JMP (d8, PC, Xn) case d8AnXn: // JMP (d8, An, Xn) - op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq("n nn np np")); - op(Action::PerformOperation); + op(calc_action_for_mode(mode) | MicroOp::SourceMask); + op(Action::PerformOperation, seq("n nn np np")); break; case XXXl: // JMP (xxx).L From dec5535e54616e98205523cdf98006fb669e828c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Apr 2019 23:20:36 -0400 Subject: [PATCH 108/239] Implements (arguably: fixes) BSR. --- .../Implementation/68000Implementation.hpp | 14 ++++++++++---- .../68000/Implementation/68000Storage.cpp | 17 ++++++++++++++--- .../68000/Implementation/68000Storage.hpp | 1 + 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e7828a90d..49ddb021f 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -190,15 +190,21 @@ template void Processor: active_step_->microcycle.length = HalfCycles(8 + ((active_program_->source->full & 31) / 16) * 4); break; - // Bcc: evaluates the relevant condition and displacement size and then: + // Bcc: ordinarily evaluates the relevant condition and displacement size and then: // if condition is false, schedules bus operations to get past this instruction; // otherwise applies the offset and schedules bus operations to refill the prefetch queue. + // + // Special case: the condition code is 1, which is ordinarily false. In that case this + // is the trailing step of a BSR. case Operation::Bcc: { // Grab the 8-bit offset. const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); - // Test the conditional. - const bool should_branch = evaluate_condition(prefetch_queue_.halves.high.halves.high); + // Check whether this is secretly BSR. + const bool is_bsr = ((decoded_instruction_ >> 8) & 0xf) == 1; + + // Test the conditional, treating 'false' as true. + const bool should_branch = is_bsr || evaluate_condition(prefetch_queue_.halves.high.halves.high); // Schedule something appropriate, by rewriting the program for this instruction temporarily. if(should_branch) { @@ -208,7 +214,7 @@ template void Processor: program_counter_.full += int16_t(prefetch_queue_.halves.low.full); } program_counter_.full -= 2; - bus_program = branch_taken_bus_steps_; + bus_program = is_bsr ? bsr_bus_steps_ : branch_taken_bus_steps_; } else { if(byte_offset) { bus_program = branch_byte_not_taken_bus_steps_; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index c5794cdd1..5f5157b82 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -332,7 +332,7 @@ struct ProcessorStorageConstructor { ADDASUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. BRA, // Maps to a BRA. All fields are decoded at runtime. - Bcc, // Maps to a Bcc. All fields are decoded at runtime. + BccBSR, // Maps to a Bcc or BSR. Other than determining the type of operation, fields are decoded at runtime. BTST, // Maps a source register and a destination register and mode to a BTST. BTSTIMM, // Maps a destination mode and register to a BTST #. @@ -427,7 +427,7 @@ struct ProcessorStorageConstructor { {0xf1f8, 0xb188, Operation::CMPl, Decoder::CMPM}, // 4-81 (p185) // {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) TODO: confirm that this really, really is just a special case of Bcc. - {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc}, // 4-25 (p129) + {0xf000, 0x6000, Operation::Bcc, Decoder::BccBSR}, // 4-25 (p129) and 4-59 (p163) {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) @@ -848,7 +848,16 @@ struct ProcessorStorageConstructor { } break; // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. - case Decoder::Bcc: { + case Decoder::BccBSR: { + const int condition = (instruction >> 8) & 0xf; + if(condition == 1) { + // This is BSR, which is unconditional and means pushing a return address to the stack first. + + // Push the return address to the stack. + op(Action::PrepareJSR, seq("n nW+ nw", { ea(1), ea(1) })); + } + + // This is Bcc. op(Action::PerformOperation); op(); // The above looks terminal, but will be dynamically reprogrammed. } break; @@ -2511,6 +2520,7 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { const size_t branch_taken_offset = constructor.assemble_program("n np np"); const size_t branch_byte_not_taken_offset = constructor.assemble_program("nn np"); const size_t branch_word_not_taken_offset = constructor.assemble_program("nn np np"); + const size_t bsr_offset = constructor.assemble_program("np np"); const size_t dbcc_condition_true_offset = constructor.assemble_program("nn np np"); const size_t dbcc_condition_false_no_branch_offset = constructor.assemble_program("n nr np np", { &dbcc_false_address_ }); @@ -2539,6 +2549,7 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { branch_taken_bus_steps_ = &all_bus_steps_[branch_taken_offset]; branch_byte_not_taken_bus_steps_ = &all_bus_steps_[branch_byte_not_taken_offset]; branch_word_not_taken_bus_steps_ = &all_bus_steps_[branch_word_not_taken_offset]; + bsr_bus_steps_ = &all_bus_steps_[bsr_offset]; dbcc_condition_true_steps_ = &all_bus_steps_[dbcc_condition_true_offset]; dbcc_condition_false_no_branch_steps_ = &all_bus_steps_[dbcc_condition_false_no_branch_offset]; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index b250eee19..1bfb28de4 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -297,6 +297,7 @@ class ProcessorStorage { BusStep *branch_taken_bus_steps_; BusStep *branch_byte_not_taken_bus_steps_; BusStep *branch_word_not_taken_bus_steps_; + BusStep *bsr_bus_steps_; uint32_t dbcc_false_address_; BusStep *dbcc_condition_true_steps_; From 37656f14d8d2f35780281f86be35b7cd14f82e0f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 11:19:45 -0400 Subject: [PATCH 109/239] Adds basic addressing modes for [ADD/SUB]Q. --- .../Implementation/68000Implementation.hpp | 190 ++++++++++++------ .../68000/Implementation/68000Storage.cpp | 48 +++++ .../68000/Implementation/68000Storage.hpp | 5 +- 3 files changed, 177 insertions(+), 66 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 49ddb021f..034445efe 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -111,40 +111,133 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; - // ADD and ADDA add two quantities, the latter sign extending and without setting any flags. - case Operation::ADDb: { - const uint8_t source = active_program_->source->halves.low.halves.low; - const uint8_t destination = active_program_->destination->halves.low.halves.low; - const int result = destination + source; + // ADD and ADDA add two quantities, the latter sign extending and without setting any flags; + // ADDQ and SUBQ act as ADD and SUB, but taking the second argument from the instruction code. +#define addop(a, b) a + b +#define subop(a, b) a - b - zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); - extend_flag_ = carry_flag_ = result & ~0xff; - negative_flag_ = result & 0x80; - overflow_flag_ = add_overflow() & 0x80; +#define addsubb(a, b, dest, op, overflow) \ + const auto source = a; \ + const auto destination = b; \ + const int result = op(destination, source); \ +\ + zero_result_ = dest = uint8_t(result); \ + extend_flag_ = carry_flag_ = result & ~0xff; \ + negative_flag_ = result & 0x80; \ + overflow_flag_ = overflow() & 0x80; + +#define addsubw(a, b, dest, op, overflow) \ + const auto source = a; \ + const auto destination = b; \ + const int result = op(destination, source); \ +\ + zero_result_ = dest = uint16_t(result); \ + extend_flag_ = carry_flag_ = result & ~0xffff; \ + negative_flag_ = result & 0x8000; \ + overflow_flag_ = overflow() & 0x8000; + +#define addsubl(a, b, dest, op, overflow) \ + const auto source = a; \ + const auto destination = b; \ + const uint64_t result = op(destination, source); \ +\ + zero_result_ = dest = uint32_t(result); \ + extend_flag_ = carry_flag_ = result >> 32; \ + negative_flag_ = result & 0x80000000; \ + overflow_flag_ = overflow() & 0x80000000; + +#define addb(a, b, dest) addsubb(a, b, dest, addop, add_overflow) +#define subb(a, b, dest) addsubb(a, b, dest, subop, sub_overflow) +#define addw(a, b, dest) addsubw(a, b, dest, addop, add_overflow) +#define subw(a, b, dest) addsubw(a, b, dest, subop, sub_overflow) +#define addl(a, b, dest) addsubl(a, b, dest, addop, add_overflow) +#define subl(a, b, dest) addsubl(a, b, dest, subop, sub_overflow) + +#define q() (((decoded_instruction_ >> 9)&7) ? ((decoded_instruction_ >> 9)&7) : 8) + + case Operation::ADDb: { + addb( active_program_->source->halves.low.halves.low, + active_program_->destination->halves.low.halves.low, + active_program_->destination->halves.low.halves.low); + } break; + + case Operation::ADDQb: { + addb( q(), + active_program_->destination->halves.low.halves.low, + active_program_->destination->halves.low.halves.low); } break; case Operation::ADDw: { - const uint16_t source = active_program_->source->halves.low.full; - const uint16_t destination = active_program_->destination->halves.low.full; - const int result = destination + source; + addw( active_program_->source->halves.low.full, + active_program_->destination->halves.low.full, + active_program_->destination->halves.low.full); + } break; - zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); - extend_flag_ = carry_flag_ = result & ~0xffff; - negative_flag_ = result & 0x8000; - overflow_flag_ = add_overflow() & 0x8000; + case Operation::ADDQw: { + addw( q(), + active_program_->destination->halves.low.full, + active_program_->destination->halves.low.full); } break; case Operation::ADDl: { - const uint32_t source = active_program_->source->full; - const uint32_t destination = active_program_->destination->full; - const uint64_t result = destination + source; - - zero_result_ = active_program_->destination->full = uint32_t(result); - extend_flag_ = carry_flag_ = result >> 32; - negative_flag_ = result & 0x80000000; - overflow_flag_ = add_overflow() & 0x80000000; + addl( active_program_->source->full, + active_program_->destination->full, + active_program_->destination->full); } break; + case Operation::ADDQl: { + addl( q(), + active_program_->destination->full, + active_program_->destination->full); + } break; + + case Operation::SUBb: { + subb( active_program_->source->halves.low.halves.low, + active_program_->destination->halves.low.halves.low, + active_program_->destination->halves.low.halves.low); + } break; + + case Operation::SUBQb: { + subb( q(), + active_program_->destination->halves.low.halves.low, + active_program_->destination->halves.low.halves.low); + } break; + + case Operation::SUBw: { + subw( active_program_->source->halves.low.full, + active_program_->destination->halves.low.full, + active_program_->destination->halves.low.full); + } break; + + case Operation::SUBQw: { + subw( q(), + active_program_->destination->halves.low.full, + active_program_->destination->halves.low.full); + } break; + + case Operation::SUBl: { + subl( active_program_->source->full, + active_program_->destination->full, + active_program_->destination->full); + } break; + + case Operation::SUBQl: { + subl( q(), + active_program_->destination->full, + active_program_->destination->full); + } break; + +#undef addl +#undef addw +#undef addb +#undef subl +#undef subw +#undef subb +#undef addsubl +#undef addsubw +#undef addsubb +#undef q + case Operation::ADDAw: active_program_->destination->full += int16_t(active_program_->source->halves.low.full); break; @@ -153,6 +246,14 @@ template void Processor: active_program_->destination->full += active_program_->source->full; break; + case Operation::SUBAw: + active_program_->destination->full -= int16_t(active_program_->source->halves.low.full); + break; + + case Operation::SUBAl: + active_program_->destination->full -= active_program_->source->full; + break; + // BRA: alters the program counter, exclusively via the prefetch queue. case Operation::BRA: { const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); @@ -653,47 +754,6 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; - case Operation::SUBb: { - const uint8_t source = active_program_->source->halves.low.halves.low; - const uint8_t destination = active_program_->destination->halves.low.halves.low; - const int result = destination - source; - - zero_result_ = active_program_->destination->halves.low.halves.low = uint8_t(result); - extend_flag_ = carry_flag_ = result & ~0xff; - negative_flag_ = result & 0x80; - overflow_flag_ = sub_overflow() & 0x80; - } break; - - case Operation::SUBw: { - const uint16_t source = active_program_->source->halves.low.full; - const uint16_t destination = active_program_->destination->halves.low.full; - const int result = destination - source; - - zero_result_ = active_program_->destination->halves.low.full = uint16_t(result); - extend_flag_ = carry_flag_ = result & ~0xffff; - negative_flag_ = result & 0x8000; - overflow_flag_ = sub_overflow() & 0x8000; - } break; - - case Operation::SUBl: { - const uint32_t source = active_program_->source->full; - const uint32_t destination = active_program_->destination->full; - const uint64_t result = destination - source; - - zero_result_ = active_program_->destination->full = uint32_t(result); - extend_flag_ = carry_flag_ = result >> 32; - negative_flag_ = result & 0x80000000; - overflow_flag_ = sub_overflow() & 0x80000000; - } break; - - case Operation::SUBAw: - active_program_->destination->full -= int16_t(active_program_->source->halves.low.full); - break; - - case Operation::SUBAl: - active_program_->destination->full -= active_program_->source->full; - break; - /* Shifts and rotates. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5f5157b82..2bdf3b174 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -330,6 +330,7 @@ struct ProcessorStorageConstructor { ADDSUB, // Maps a register and a register and mode to an ADD or SUB. ADDASUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. + ADDQSUBQ, // Mags a register and a mode to an ADDQ or SUBQ. BRA, // Maps to a BRA. All fields are decoded at runtime. BccBSR, // Maps to a Bcc or BSR. Other than determining the type of operation, fields are decoded at runtime. @@ -451,6 +452,14 @@ struct ProcessorStorageConstructor { {0xf1c0, 0x90c0, Operation::SUBAw, Decoder::ADDASUBA}, // 4-177 (p281) {0xf1c0, 0x91c0, Operation::SUBAl, Decoder::ADDASUBA}, // 4-177 (p281) + {0xf1c0, 0x5000, Operation::ADDQb, Decoder::ADDQSUBQ}, // 4-11 (p115) + {0xf1c0, 0x5040, Operation::ADDQw, Decoder::ADDQSUBQ}, // 4-11 (p115) + {0xf1c0, 0x5080, Operation::ADDQl, Decoder::ADDQSUBQ}, // 4-11 (p115) + + {0xf1c0, 0x5100, Operation::SUBQb, Decoder::ADDQSUBQ}, // 4-181 (p285) + {0xf1c0, 0x5140, Operation::SUBQw, Decoder::ADDQSUBQ}, // 4-181 (p285) + {0xf1c0, 0x5180, Operation::SUBQl, Decoder::ADDQSUBQ}, // 4-181 (p285) + {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) @@ -847,6 +856,45 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::ADDQSUBQ: { + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + const bool is_long_word_access = ((instruction >> 6)&3) == 2; + const bool is_byte_access = ((instruction >> 6)&3) == 0; + const int mode = combined_mode(ea_mode, ea_register); + switch(is_long_word_access ? l(mode) : bw(mode)) { + default: continue; + + case bw(Dn): + op(Action::PerformOperation, seq("np")); + break; + + case l(Dn): + case l(An): + case bw(An): + op(Action::PerformOperation, seq("np nn")); + break; + + case bw(Ind): + case bw(PostInc): + op(Action::None, seq("nrd np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); + if(mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case l(Ind): + case l(PostInc): + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + if(mode == PostInc) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; + } + } break; + // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. case Decoder::BccBSR: { const int condition = (instruction >> 8) & 0xf; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 1bfb28de4..f790138be 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -47,8 +47,11 @@ class ProcessorStorage { ABCD, SBCD, ADDb, ADDw, ADDl, - SUBb, SUBw, SUBl, + ADDQb, ADDQw, ADDQl, ADDAw, ADDAl, + + SUBb, SUBw, SUBl, + SUBQb, SUBQw, SUBQl, SUBAw, SUBAl, MOVEb, MOVEw, MOVEl, MOVEq, From 180062c58c42126785775e54271de08821fc5bc0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 14:28:31 -0400 Subject: [PATCH 110/239] Finishes fleshing out [ADD/SUB]Q. --- .../68000/Implementation/68000Storage.cpp | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 2bdf3b174..117a1ccb2 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -865,18 +865,18 @@ struct ProcessorStorageConstructor { switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case bw(Dn): + case bw(Dn): // [ADD/SUB]Q.bw #, Dn op(Action::PerformOperation, seq("np")); break; - case l(Dn): - case l(An): - case bw(An): + case l(Dn): // [ADD/SUB]Q.l #, Dn + case l(An): // [ADD/SUB]Q.l #, An + case bw(An): // [ADD/SUB]Q.bw #, An op(Action::PerformOperation, seq("np nn")); break; - case bw(Ind): - case bw(PostInc): + case bw(Ind): // [ADD/SUB]Q.bw #, (An) + case bw(PostInc): // [ADD/SUB]Q.bw #, (An)+ op(Action::None, seq("nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); if(mode == PostInc) { @@ -884,14 +884,48 @@ struct ProcessorStorageConstructor { } break; - case l(Ind): - case l(PostInc): + case l(PreDec): // [ADD/SUB]Q.l #, -(An) + op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("n")); + case l(Ind): // [ADD/SUB]Q.l #, (An) + case l(PostInc): // [ADD/SUB]Q.l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd np", { ea(1), ea(1) })); op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::DestinationMask); } break; + + case bw(PreDec): // [ADD/SUB]Q.bw #, -(An) + op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + seq("n nrd np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); + break; + + case bw(d16An): // [ADD/SUB]Q.bw #, (d16, An) + case bw(d8AnXn): // [ADD/SUB]Q.bw #, (d8, An, Xn) + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + + case l(d16An): // [ADD/SUB]Q.l #, (d16, An) + case l(d8AnXn): // [ADD/SUB]Q.l #, (d8, An, Xn) + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; + + case bw(XXXl): // [ADD/SUB]Q.bw #, (xxx).l + op(Action::None, seq("np")); + case bw(XXXw): // [ADD/SUB]Q.bw #, (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + + case l(XXXl): // [ADD/SUB]Q.l #, (xxx).l + op(Action::None, seq("np")); + case l(XXXw): // [ADD/SUB]Q.l #, (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; } } break; From 8ce018dbab110c04b9444049d6c9ddeeb2dd0ddb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 15:17:40 -0400 Subject: [PATCH 111/239] Adds the necessary runtime support for AND, EOR and OR. --- .../Implementation/68000Implementation.hpp | 37 ++++++++++++++++++- .../68000/Implementation/68000Storage.hpp | 7 +++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 034445efe..776c5437d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -709,8 +709,43 @@ template void Processor: case Operation::None: break; - // NOTs: take the logical inverse, affecting the negative and zero flags. + /* + Bitwise operators: AND, OR and EOR. All three clear the overflow and carry flags, + and set zero and negative appropriately. + */ +#define op_and(x, y) x &= y +#define op_or(x, y) x |= y +#define op_eor(x, y) x ^= y +#define bitwise(source, dest, sign_mask, operator) \ + operator(dest, source); \ + overflow_flag_ = carry_flag_ = 0; \ + zero_result_ = dest; \ + negative_flag_ = dest & sign_mask; + +#define andx(source, dest, sign_mask) bitwise(source, dest, sign_mask, op_and) +#define eorx(source, dest, sign_mask) bitwise(source, dest, sign_mask, op_eor) +#define orx(source, dest, sign_mask) bitwise(source, dest, sign_mask, op_or) + +#define op_bwl(name, op) \ + case Operation::name##b: op(active_program_->source->halves.low.halves.low, active_program_->destination->halves.low.halves.low, 0x80); break; \ + case Operation::name##w: op(active_program_->source->halves.low.full, active_program_->destination->halves.low.full, 0x8000); break; \ + case Operation::name##l: op(active_program_->source->full, active_program_->destination->full, 0x80000000); break; + + op_bwl(AND, andx); + op_bwl(EOR, eorx); + op_bwl(OR, orx); + +#undef op_bwl +#undef orx +#undef eorx +#undef andx +#undef bitwise +#undef op_eor +#undef op_or +#undef op_and + + // NOTs: take the logical inverse, affecting the negative and zero flags. case Operation::NOTb: active_program_->destination->halves.low.halves.low ^= 0xff; zero_result_ = active_program_->destination->halves.low.halves.low; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index f790138be..9a313afc8 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -68,11 +68,11 @@ class ProcessorStorage { JMP, BRA, Bcc, DBcc, + Scc, CLRb, CLRw, CLRl, NEGXb, NEGXw, NEGXl, NEGb, NEGw, NEGl, - NOTb, NOTw, NOTl, ASLb, ASLw, ASLl, ASLm, ASRb, ASRw, ASRl, ASRm, @@ -86,7 +86,10 @@ class ProcessorStorage { MOVEMtoRl, MOVEMtoRw, MOVEMtoMl, MOVEMtoMw, - Scc, + ANDb, ANDw, ANDl, + EORb, EORw, EORl, + NOTb, NOTw, NOTl, + ORb, ORw, ORl, }; /*! From 9b7ca6f271e8e649256af4aceceea5762e95b06e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 19:50:10 -0400 Subject: [PATCH 112/239] Implements the basics of EORI, ORI, ANDI, SUBI and ADDI. Also corrects the BSR return address. --- .../Implementation/68000Implementation.hpp | 8 + .../68000/Implementation/68000Storage.cpp | 279 ++++++++++++------ .../68000/Implementation/68000Storage.hpp | 5 + 3 files changed, 207 insertions(+), 85 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 776c5437d..36589271f 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1051,6 +1051,14 @@ template void Processor: effective_address_[1].full = address_[7].full; break; + case int(MicroOp::Action::PrepareBSR): + // If the lowest byte of the instruction is non-zero then there's no 16-bit offset after it, so the + // return address should be two less. + destination_bus_data_[0].full = (decoded_instruction_ & 0xff) ? program_counter_.full - 2 : program_counter_.full; + address_[7].full -= 4; + effective_address_[1].full = address_[7].full; + break; + case int(MicroOp::Action::PrepareRTS): effective_address_[0].full = address_[7].full; address_[7].full += 4; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 117a1ccb2..9d48cb4c6 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -326,14 +326,16 @@ struct ProcessorStorageConstructor { */ void install_instructions() { enum class Decoder { - ABCDSBCD, // Maps source and desintation registers and a register/memory selection bit to an ABCD or SBCD. + EORI_ORI_ANDI_SUBI_ADDI, // Maps a mode and register to one of EORI, ORI, ANDI, SUBI or ADDI. - ADDSUB, // Maps a register and a register and mode to an ADD or SUB. - ADDASUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. - ADDQSUBQ, // Mags a register and a mode to an ADDQ or SUBQ. + ABCD_SBCD, // Maps source and desintation registers and a register/memory selection bit to an ABCD or SBCD. + + ADD_SUB, // Maps a register and a register and mode to an ADD or SUB. + ADDA_SUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. + ADDQ_SUBQ, // Mags a register and a mode to an ADDQ or SUBQ. BRA, // Maps to a BRA. All fields are decoded at runtime. - BccBSR, // Maps to a Bcc or BSR. Other than determining the type of operation, fields are decoded at runtime. + Bcc_BSR, // Maps to a Bcc or BSR. Other than determining the type of operation, fields are decoded at runtime. BTST, // Maps a source register and a destination register and mode to a BTST. BTSTIMM, // Maps a destination mode and register to a BTST #. @@ -341,14 +343,14 @@ struct ProcessorStorageConstructor { BCLR, // Maps a source register and a destination register and mode to a BCLR. BCLRIMM, // Maps a destination mode and register to a BCLR #. - CLRNEGNEGXNOT, // Maps a destination mode and register to a CLR, NEG, NEGX or NOT. + CLR_NEG_NEGX_NOT, // Maps a destination mode and register to a CLR, NEG, NEGX or NOT. CMP, // Maps a destination register and a source mode and register to a CMP. CMPI, // Maps a destination mode and register to a CMPI. CMPA, // Maps a destination register and a source mode and register to a CMPA. CMPM, // Maps to a CMPM. - SccDBcc, // Maps a mode and destination register to either a DBcc or Scc. + Scc_DBcc, // Maps a mode and destination register to either a DBcc or Scc. JMP, // Maps a mode and register to a JMP. @@ -360,9 +362,9 @@ struct ProcessorStorageConstructor { RESET, // Maps to a RESET. - ASLRLSLRROLRROXLRr, // Maps a destination register to a AS[L/R], LS[L/R], RO[L/R], ROX[L/R]; shift quantities are + ASLR_LSLR_ROLR_ROXLRr, // Maps a destination register to a AS[L/R], LS[L/R], RO[L/R], ROX[L/R]; shift quantities are // decoded at runtime. - ASLRLSLRROLRROXLRm, // Maps a destination mode and register to a memory-based AS[L/R], LS[L/R], RO[L/R], ROX[L/R]. + ASLR_LSLR_ROLR_ROXLRm, // Maps a destination mode and register to a memory-based AS[L/R], LS[L/R], RO[L/R], ROX[L/R]. MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable // hole for the runtime part to install proper MOVEM activity. @@ -394,16 +396,32 @@ struct ProcessorStorageConstructor { NB: a vector is used to allow easy iteration. */ const std::vector mappings = { - {0xf1f0, 0xc100, Operation::ABCD, Decoder::ABCDSBCD}, // 4-3 (p107) - {0xf1f0, 0x8100, Operation::SBCD, Decoder::ABCDSBCD}, // 4-171 (p275) + {0xf1f0, 0xc100, Operation::ABCD, Decoder::ABCD_SBCD}, // 4-3 (p107) + {0xf1f0, 0x8100, Operation::SBCD, Decoder::ABCD_SBCD}, // 4-171 (p275) // {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) // {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) // {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) -// {0xff00, 0x0600, Operation::ADD, Decoder::SizeModeRegisterImmediate}, // 4-9 (p113) + {0xffc0, 0x0600, Operation::ADDb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) + {0xffc0, 0x0640, Operation::ADDw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) + {0xffc0, 0x0680, Operation::ADDl, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) -// {0xff00, 0x0600, Operation::ADD, Decoder::DataSizeModeQuick}, // 4-11 (p115) + {0xffc0, 0x0200, Operation::ANDb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) + {0xffc0, 0x0240, Operation::ANDw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) + {0xffc0, 0x0280, Operation::ANDl, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) + + {0xffc0, 0x0a00, Operation::ORb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-153 (p257) + {0xffc0, 0x0a40, Operation::ORw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-153 (p257) + {0xffc0, 0x0a80, Operation::ORl, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-153 (p257) + + {0xffc0, 0x0000, Operation::EORb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-102 (p206) + {0xffc0, 0x0040, Operation::EORw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-102 (p206) + {0xffc0, 0x0080, Operation::EORl, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-102 (p206) + + {0xffc0, 0x0400, Operation::SUBb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-179 (p283) + {0xffc0, 0x0440, Operation::SUBw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-179 (p283) + {0xffc0, 0x0480, Operation::SUBl, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-179 (p283) {0xf000, 0x1000, Operation::MOVEb, Decoder::MOVE}, // 4-116 (p220) {0xf000, 0x2000, Operation::MOVEl, Decoder::MOVE}, // 4-116 (p220) @@ -428,7 +446,7 @@ struct ProcessorStorageConstructor { {0xf1f8, 0xb188, Operation::CMPl, Decoder::CMPM}, // 4-81 (p185) // {0xff00, 0x6000, Operation::BRA, Decoder::BRA}, // 4-55 (p159) TODO: confirm that this really, really is just a special case of Bcc. - {0xf000, 0x6000, Operation::Bcc, Decoder::BccBSR}, // 4-25 (p129) and 4-59 (p163) + {0xf000, 0x6000, Operation::Bcc, Decoder::Bcc_BSR}, // 4-25 (p129) and 4-59 (p163) {0xf1c0, 0x41c0, Operation::MOVEAl, Decoder::LEA}, // 4-110 (p214) {0xf100, 0x7000, Operation::MOVEq, Decoder::MOVEq}, // 4-134 (p238) @@ -439,26 +457,26 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4e80, Operation::JMP, Decoder::JSR}, // 4-109 (p213) {0xffff, 0x4e75, Operation::JMP, Decoder::RTS}, // 4-169 (p273) - {0xf0c0, 0x9000, Operation::SUBb, Decoder::ADDSUB}, // 4-174 (p278) - {0xf0c0, 0x9040, Operation::SUBw, Decoder::ADDSUB}, // 4-174 (p278) - {0xf0c0, 0x9080, Operation::SUBl, Decoder::ADDSUB}, // 4-174 (p278) + {0xf0c0, 0x9000, Operation::SUBb, Decoder::ADD_SUB}, // 4-174 (p278) + {0xf0c0, 0x9040, Operation::SUBw, Decoder::ADD_SUB}, // 4-174 (p278) + {0xf0c0, 0x9080, Operation::SUBl, Decoder::ADD_SUB}, // 4-174 (p278) - {0xf0c0, 0xd000, Operation::ADDb, Decoder::ADDSUB}, // 4-4 (p108) - {0xf0c0, 0xd040, Operation::ADDw, Decoder::ADDSUB}, // 4-4 (p108) - {0xf0c0, 0xd080, Operation::ADDl, Decoder::ADDSUB}, // 4-4 (p108) + {0xf0c0, 0xd000, Operation::ADDb, Decoder::ADD_SUB}, // 4-4 (p108) + {0xf0c0, 0xd040, Operation::ADDw, Decoder::ADD_SUB}, // 4-4 (p108) + {0xf0c0, 0xd080, Operation::ADDl, Decoder::ADD_SUB}, // 4-4 (p108) - {0xf1c0, 0xd0c0, Operation::ADDAw, Decoder::ADDASUBA}, // 4-7 (p111) - {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDASUBA}, // 4-7 (p111) - {0xf1c0, 0x90c0, Operation::SUBAw, Decoder::ADDASUBA}, // 4-177 (p281) - {0xf1c0, 0x91c0, Operation::SUBAl, Decoder::ADDASUBA}, // 4-177 (p281) + {0xf1c0, 0xd0c0, Operation::ADDAw, Decoder::ADDA_SUBA}, // 4-7 (p111) + {0xf1c0, 0xd1c0, Operation::ADDAl, Decoder::ADDA_SUBA}, // 4-7 (p111) + {0xf1c0, 0x90c0, Operation::SUBAw, Decoder::ADDA_SUBA}, // 4-177 (p281) + {0xf1c0, 0x91c0, Operation::SUBAl, Decoder::ADDA_SUBA}, // 4-177 (p281) - {0xf1c0, 0x5000, Operation::ADDQb, Decoder::ADDQSUBQ}, // 4-11 (p115) - {0xf1c0, 0x5040, Operation::ADDQw, Decoder::ADDQSUBQ}, // 4-11 (p115) - {0xf1c0, 0x5080, Operation::ADDQl, Decoder::ADDQSUBQ}, // 4-11 (p115) + {0xf1c0, 0x5000, Operation::ADDQb, Decoder::ADDQ_SUBQ}, // 4-11 (p115) + {0xf1c0, 0x5040, Operation::ADDQw, Decoder::ADDQ_SUBQ}, // 4-11 (p115) + {0xf1c0, 0x5080, Operation::ADDQl, Decoder::ADDQ_SUBQ}, // 4-11 (p115) - {0xf1c0, 0x5100, Operation::SUBQb, Decoder::ADDQSUBQ}, // 4-181 (p285) - {0xf1c0, 0x5140, Operation::SUBQw, Decoder::ADDQSUBQ}, // 4-181 (p285) - {0xf1c0, 0x5180, Operation::SUBQl, Decoder::ADDQSUBQ}, // 4-181 (p285) + {0xf1c0, 0x5100, Operation::SUBQb, Decoder::ADDQ_SUBQ}, // 4-181 (p285) + {0xf1c0, 0x5140, Operation::SUBQw, Decoder::ADDQ_SUBQ}, // 4-181 (p285) + {0xf1c0, 0x5180, Operation::SUBQl, Decoder::ADDQ_SUBQ}, // 4-181 (p285) {0xf1c0, 0x0100, Operation::BTSTb, Decoder::BTST}, // 4-62 (p166) {0xffc0, 0x0800, Operation::BTSTb, Decoder::BTSTIMM}, // 4-63 (p167) @@ -466,60 +484,60 @@ struct ProcessorStorageConstructor { {0xf1c0, 0x0180, Operation::BCLRb, Decoder::BCLR}, // 4-31 (p135) {0xffc0, 0x0880, Operation::BCLRb, Decoder::BCLRIMM}, // 4-32 (p136) - {0xf0c0, 0x50c0, Operation::Scc, Decoder::SccDBcc}, // Scc: 4-173 (p276); DBcc: 4-91 (p195) + {0xf0c0, 0x50c0, Operation::Scc, Decoder::Scc_DBcc}, // Scc: 4-173 (p276); DBcc: 4-91 (p195) - {0xffc0, 0x4200, Operation::CLRb, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) - {0xffc0, 0x4240, Operation::CLRw, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) - {0xffc0, 0x4280, Operation::CLRl, Decoder::CLRNEGNEGXNOT}, // 4-73 (p177) - {0xffc0, 0x4400, Operation::NEGb, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) - {0xffc0, 0x4440, Operation::NEGw, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) - {0xffc0, 0x4480, Operation::NEGl, Decoder::CLRNEGNEGXNOT}, // 4-144 (p248) - {0xffc0, 0x4000, Operation::NEGXb, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) - {0xffc0, 0x4040, Operation::NEGXw, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) - {0xffc0, 0x4080, Operation::NEGXl, Decoder::CLRNEGNEGXNOT}, // 4-146 (p250) - {0xffc0, 0x4600, Operation::NOTb, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) - {0xffc0, 0x4640, Operation::NOTw, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) - {0xffc0, 0x4680, Operation::NOTl, Decoder::CLRNEGNEGXNOT}, // 4-148 (p250) + {0xffc0, 0x4200, Operation::CLRb, Decoder::CLR_NEG_NEGX_NOT}, // 4-73 (p177) + {0xffc0, 0x4240, Operation::CLRw, Decoder::CLR_NEG_NEGX_NOT}, // 4-73 (p177) + {0xffc0, 0x4280, Operation::CLRl, Decoder::CLR_NEG_NEGX_NOT}, // 4-73 (p177) + {0xffc0, 0x4400, Operation::NEGb, Decoder::CLR_NEG_NEGX_NOT}, // 4-144 (p248) + {0xffc0, 0x4440, Operation::NEGw, Decoder::CLR_NEG_NEGX_NOT}, // 4-144 (p248) + {0xffc0, 0x4480, Operation::NEGl, Decoder::CLR_NEG_NEGX_NOT}, // 4-144 (p248) + {0xffc0, 0x4000, Operation::NEGXb, Decoder::CLR_NEG_NEGX_NOT}, // 4-146 (p250) + {0xffc0, 0x4040, Operation::NEGXw, Decoder::CLR_NEG_NEGX_NOT}, // 4-146 (p250) + {0xffc0, 0x4080, Operation::NEGXl, Decoder::CLR_NEG_NEGX_NOT}, // 4-146 (p250) + {0xffc0, 0x4600, Operation::NOTb, Decoder::CLR_NEG_NEGX_NOT}, // 4-148 (p250) + {0xffc0, 0x4640, Operation::NOTw, Decoder::CLR_NEG_NEGX_NOT}, // 4-148 (p250) + {0xffc0, 0x4680, Operation::NOTl, Decoder::CLR_NEG_NEGX_NOT}, // 4-148 (p250) - {0xf1d8, 0xe100, Operation::ASLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe140, Operation::ASLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe180, Operation::ASLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xffc0, 0xe1c0, Operation::ASLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + {0xf1d8, 0xe100, Operation::ASLb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe140, Operation::ASLw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe180, Operation::ASLl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xffc0, 0xe1c0, Operation::ASLm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-22 (p126) - {0xf1d8, 0xe000, Operation::ASRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe040, Operation::ASRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xf1d8, 0xe080, Operation::ASRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-22 (p126) - {0xffc0, 0xe0c0, Operation::ASRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-22 (p126) + {0xf1d8, 0xe000, Operation::ASRb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe040, Operation::ASRw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xf1d8, 0xe080, Operation::ASRl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-22 (p126) + {0xffc0, 0xe0c0, Operation::ASRm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-22 (p126) - {0xf1d8, 0xe108, Operation::LSLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe148, Operation::LSLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe188, Operation::LSLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xffc0, 0xe3c0, Operation::LSLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + {0xf1d8, 0xe108, Operation::LSLb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe148, Operation::LSLw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe188, Operation::LSLl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xffc0, 0xe3c0, Operation::LSLm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-113 (p217) - {0xf1d8, 0xe008, Operation::LSRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe048, Operation::LSRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xf1d8, 0xe088, Operation::LSRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-113 (p217) - {0xffc0, 0xe2c0, Operation::LSRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-113 (p217) + {0xf1d8, 0xe008, Operation::LSRb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe048, Operation::LSRw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xf1d8, 0xe088, Operation::LSRl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-113 (p217) + {0xffc0, 0xe2c0, Operation::LSRm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-113 (p217) - {0xf1d8, 0xe118, Operation::ROLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe158, Operation::ROLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe198, Operation::ROLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xffc0, 0xe7c0, Operation::ROLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + {0xf1d8, 0xe118, Operation::ROLb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe158, Operation::ROLw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe198, Operation::ROLl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xffc0, 0xe7c0, Operation::ROLm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-160 (p264) - {0xf1d8, 0xe018, Operation::RORb, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe058, Operation::RORw, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xf1d8, 0xe098, Operation::RORl, Decoder::ASLRLSLRROLRROXLRr}, // 4-160 (p264) - {0xffc0, 0xe6c0, Operation::RORm, Decoder::ASLRLSLRROLRROXLRm}, // 4-160 (p264) + {0xf1d8, 0xe018, Operation::RORb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe058, Operation::RORw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xf1d8, 0xe098, Operation::RORl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-160 (p264) + {0xffc0, 0xe6c0, Operation::RORm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-160 (p264) - {0xf1d8, 0xe110, Operation::ROXLb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe150, Operation::ROXLw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe190, Operation::ROXLl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xffc0, 0xe5c0, Operation::ROXLm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + {0xf1d8, 0xe110, Operation::ROXLb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe150, Operation::ROXLw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe190, Operation::ROXLl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xffc0, 0xe5c0, Operation::ROXLm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-163 (p267) - {0xf1d8, 0xe010, Operation::ROXRb, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe050, Operation::ROXRw, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xf1d8, 0xe090, Operation::ROXRl, Decoder::ASLRLSLRROLRROXLRr}, // 4-163 (p267) - {0xffc0, 0xe4c0, Operation::ROXRm, Decoder::ASLRLSLRROLRROXLRm}, // 4-163 (p267) + {0xf1d8, 0xe010, Operation::ROXRb, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe050, Operation::ROXRw, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xf1d8, 0xe090, Operation::ROXRl, Decoder::ASLR_LSLR_ROLR_ROXLRr}, // 4-163 (p267) + {0xffc0, 0xe4c0, Operation::ROXRm, Decoder::ASLR_LSLR_ROLR_ROXLRm}, // 4-163 (p267) {0xffc0, 0x48c0, Operation::MOVEMtoMl, Decoder::MOVEM}, // 4-128 (p232) {0xffc0, 0x4880, Operation::MOVEMtoMw, Decoder::MOVEM}, // 4-128 (p232) @@ -572,7 +590,98 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { - case Decoder::ADDSUB: { + case Decoder::EORI_ORI_ANDI_SUBI_ADDI: { + const int mode = combined_mode(ea_mode, ea_register); + const bool is_byte_access = !!((instruction >> 6)&3); + const bool is_long_word_access = ((instruction >> 6)&3) == 2; + + // Source is always something cribbed from the instruction stream; + // destination is going to be in the write address unit. + storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; + if(mode == Dn) { + storage_.instructions[instruction].destination = &storage_.data_[ea_register]; + } else { + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; + storage_.instructions[instruction].destination_address = &storage_.address_[ea_register]; + } + + switch(is_long_word_access ? l(mode) : bw(mode)) { + default: continue; + + case bw(Dn): + op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case l(Dn): + op(Action::None, seq("np")); + op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np np nn", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation); + break; + + case bw(Ind): + case bw(PostInc): + op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np nrd np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); + if(mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case l(Ind): + case l(PostInc): + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); + op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + if(mode == PostInc) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; + + case bw(PreDec): + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask); + op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np n nrd np", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); + break; + + case l(PreDec): + op(int(Action::Decrement4) | MicroOp::DestinationMask); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); + op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, + seq("np n nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; + + case bw(d8AnXn): + case bw(d16An): + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + + case bw(XXXw): + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + + case bw(XXXl): + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nrd np", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); + break; + } + } break; + + case Decoder::ADD_SUB: { // ADD and SUB definitely always involve a data register and an arbitrary addressing mode; // which direction they operate in depends on bit 8. const bool reverse_source_destination = !(instruction & 256); @@ -765,7 +874,7 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::ADDASUBA: { + case Decoder::ADDA_SUBA: { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_destination(storage_, 1, destination_register); storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); @@ -856,7 +965,7 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::ADDQSUBQ: { + case Decoder::ADDQ_SUBQ: { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); const bool is_long_word_access = ((instruction >> 6)&3) == 2; @@ -930,13 +1039,13 @@ struct ProcessorStorageConstructor { } break; // This decoder actually decodes nothing; it just schedules a PerformOperation followed by an empty step. - case Decoder::BccBSR: { + case Decoder::Bcc_BSR: { const int condition = (instruction >> 8) & 0xf; if(condition == 1) { // This is BSR, which is unconditional and means pushing a return address to the stack first. // Push the return address to the stack. - op(Action::PrepareJSR, seq("n nW+ nw", { ea(1), ea(1) })); + op(Action::PrepareBSR, seq("n nW+ nw", { ea(1), ea(1) })); } // This is Bcc. @@ -1072,7 +1181,7 @@ struct ProcessorStorageConstructor { } break; // Decodes the format used by ABCD and SBCD. - case Decoder::ABCDSBCD: { + case Decoder::ABCD_SBCD: { const int destination_register = (instruction >> 9) & 7; if(instruction & 8) { @@ -1092,7 +1201,7 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::ASLRLSLRROLRROXLRr: { + case Decoder::ASLR_LSLR_ROLR_ROXLRr: { storage_.instructions[instruction].set_destination(storage_, 0, ea_register); // All further decoding occurs at runtime; that's also when the proper number of @@ -1107,7 +1216,7 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("r")); } break; - case Decoder::ASLRLSLRROLRROXLRm: { + case Decoder::ASLR_LSLR_ROLR_ROXLRm: { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); @@ -1145,7 +1254,7 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::CLRNEGNEGXNOT: { + case Decoder::CLR_NEG_NEGX_NOT: { const bool is_byte_access = !!((instruction >> 6)&3); const bool is_long_word_access = ((instruction >> 6)&3) == 2; @@ -1556,7 +1665,7 @@ struct ProcessorStorageConstructor { } } break; - case Decoder::SccDBcc: { + case Decoder::Scc_DBcc: { if(ea_mode == 1) { // This is a DBcc. Decode as such. operation = Operation::DBcc; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 9a313afc8..979c2e47b 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -233,6 +233,11 @@ class ProcessorStorage { // (iii) decrements the stack pointer by four. PrepareJSR, + // (i) inspects the prefetch queue to determine the length of this BSR and copies the next PC to destination_bus_data_; + // (ii) copies the stack pointer minus 4 to effective_address_[1]; + // (iii) decrements the stack pointer by four. + PrepareBSR, + // (i) copies the stack pointer to effective_address_[0]; // (ii) increments the stack pointer by four. PrepareRTS, From d8d974e2d7e69db02ad563a7ece1fd1a8a6df365 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 21:29:37 -0400 Subject: [PATCH 113/239] Consolidates JSR and BSR preparation. --- .../Implementation/68000Implementation.hpp | 11 ++---- .../68000/Implementation/68000Storage.cpp | 36 +++++++++---------- .../68000/Implementation/68000Storage.hpp | 9 ++--- 3 files changed, 23 insertions(+), 33 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 36589271f..3269e91b0 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1045,15 +1045,10 @@ template void Processor: } } break; - case int(MicroOp::Action::PrepareJSR): - destination_bus_data_[0] = program_counter_; - address_[7].full -= 4; - effective_address_[1].full = address_[7].full; - break; - - case int(MicroOp::Action::PrepareBSR): + case int(MicroOp::Action::PrepareJSRBSR): // If the lowest byte of the instruction is non-zero then there's no 16-bit offset after it, so the - // return address should be two less. + // return address should be two less. This holds for both a BSR and a JSR as a JSR always has bit + // 7 set. destination_bus_data_[0].full = (decoded_instruction_ & 0xff) ? program_counter_.full - 2 : program_counter_.full; address_[7].full -= 4; effective_address_[1].full = address_[7].full; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 9d48cb4c6..47d232453 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -608,21 +608,21 @@ struct ProcessorStorageConstructor { switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case bw(Dn): + case bw(Dn): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, Dn op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case l(Dn): + case l(Dn): // [EORI/ORI/ANDI/SUBI/ADDI].l #, Dn op(Action::None, seq("np")); op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case bw(Ind): - case bw(PostInc): + case bw(Ind): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (An) + case bw(PostInc): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (An)+ op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); @@ -631,8 +631,8 @@ struct ProcessorStorageConstructor { } break; - case l(Ind): - case l(PostInc): + case l(Ind): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (An) + case l(PostInc): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nRd+ nrd np", { ea(1), ea(1) })); @@ -642,14 +642,14 @@ struct ProcessorStorageConstructor { } break; - case bw(PreDec): + case bw(PreDec): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, -(An) op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask); op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); break; - case l(PreDec): + case l(PreDec): // [EORI/ORI/ANDI/SUBI/ADDI].l #, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask); op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np")); op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, @@ -657,22 +657,22 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); break; - case bw(d8AnXn): - case bw(d16An): + case bw(d8AnXn): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (d8, An, Xn) + case bw(d16An): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (d16, An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; - case bw(XXXw): + case bw(XXXw): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; - case bw(XXXl): + case bw(XXXl): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); @@ -1045,7 +1045,7 @@ struct ProcessorStorageConstructor { // This is BSR, which is unconditional and means pushing a return address to the stack first. // Push the return address to the stack. - op(Action::PrepareBSR, seq("n nW+ nw", { ea(1), ea(1) })); + op(Action::PrepareJSRBSR, seq("n nW+ nw", { ea(1), ea(1) })); } // This is Bcc. @@ -1728,33 +1728,33 @@ struct ProcessorStorageConstructor { default: continue; case Ind: // JSR (An) storage_.instructions[instruction].source = &storage_.address_[ea_register]; - op(Action::PrepareJSR); + op(Action::PrepareJSRBSR); op(Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) })); break; case d16PC: // JSR (d16, PC) case d16An: // JSR (d16, An) - op(Action::PrepareJSR); + op(Action::PrepareJSRBSR); op(calc_action_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case d8PCXn: // JSR (d8, PC, Xn) case d8AnXn: // JSR (d8, An, Xn) - op(Action::PrepareJSR); + op(Action::PrepareJSRBSR); op(calc_action_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n nn np nW+ nw np", { ea(1), ea(1) })); break; case XXXl: // JSR (xxx).L op(Action::None, seq("np")); - op(Action::PrepareJSR); + op(Action::PrepareJSRBSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case XXXw: // JSR (xxx).W - op(Action::PrepareJSR); + op(Action::PrepareJSRBSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 979c2e47b..433e044a9 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -228,15 +228,10 @@ class ProcessorStorage { /// Performs write-back of pre-decrement address. MOVEMtoMComplete, - // (i) copies the current program counter to destination_bus_data_; + // (i) inspects the prefetch queue to determine the length of this instruction and copies the next PC to destination_bus_data_; // (ii) copies the stack pointer minus 4 to effective_address_[1]; // (iii) decrements the stack pointer by four. - PrepareJSR, - - // (i) inspects the prefetch queue to determine the length of this BSR and copies the next PC to destination_bus_data_; - // (ii) copies the stack pointer minus 4 to effective_address_[1]; - // (iii) decrements the stack pointer by four. - PrepareBSR, + PrepareJSRBSR, // (i) copies the stack pointer to effective_address_[0]; // (ii) increments the stack pointer by four. From be722143e1cb0c48b19916df5290d5b9150e5eb0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 21:34:16 -0400 Subject: [PATCH 114/239] Completes addressing modes for ADDI/etc/etc. --- .../68000/Implementation/68000Storage.cpp | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 47d232453..ad32686da 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -665,6 +665,15 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; + case l(d8AnXn): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (d8, An, Xn) + case l(d16An): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (d16, An) + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( calc_action_for_mode(mode) | MicroOp::DestinationMask, + seq(pseq("np nRd+ nrd np", mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; + case bw(XXXw): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, @@ -672,12 +681,28 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; + case l(XXXw): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (xxx).w + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op( int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; + case bw(XXXl): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, (xxx).l op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nrd np", { ea(1) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { ea(1) }, !is_byte_access)); break; + + case l(XXXl): // [EORI/ORI/ANDI/SUBI/ADDI].l #, (xxx).l + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); + op( int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, + seq("np nRd+ nrd np", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("nw- nW", { ea(1), ea(1) })); + break; } } break; From 8f77d1831b121eebe8397d89617be1acafa8dd8c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 16 Apr 2019 22:16:43 -0400 Subject: [PATCH 115/239] Implements MULU and MULS. --- .../Implementation/68000Implementation.hpp | 40 +++++++++++ .../68000/Implementation/68000Storage.cpp | 66 +++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 2 + 3 files changed, 102 insertions(+), 6 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 3269e91b0..9fd65f495 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -477,6 +477,46 @@ template void Processor: set_ccr(active_program_->source->full); break; + case Operation::MULU: { + active_program_->destination->full = + active_program_->destination->halves.low.full * active_program_->source->halves.low.full; + carry_flag_ = overflow_flag_ = 0; + zero_result_ = active_program_->destination->full; + negative_flag_ = zero_result_ & 0x80000000; + + // TODO: optimise the below? + int number_of_ones = 0; + auto source = active_program_->source->halves.low.full; + while(source) { + source >>= 1; + ++number_of_ones; + } + + // Time taken = 38 cycles + 2 cycles per 1 in the source. + active_step_->microcycle.length = HalfCycles(4 * number_of_ones + 38*2); + } break; + + case Operation::MULS: { + active_program_->destination->full = + int16_t(active_program_->destination->halves.low.full) * int16_t(active_program_->source->halves.low.full); + carry_flag_ = overflow_flag_ = 0; + zero_result_ = active_program_->destination->full; + negative_flag_ = zero_result_ & 0x80000000; + + // TODO: optimise the below? + int number_of_pairs = 0; + int source = active_program_->source->halves.low.full; + int bit = 0; + while(source | bit) { + number_of_pairs += (bit ^ source) & 1; + bit = source & 1; + source >>= 1; + } + + // Time taken = 38 cycles + 2 cycles per 1 in the source. + active_step_->microcycle.length = HalfCycles(4 * number_of_pairs + 38*2); + } break; + /* MOVEM: multi-word moves. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index ad32686da..09f9b5344 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -326,10 +326,7 @@ struct ProcessorStorageConstructor { */ void install_instructions() { enum class Decoder { - EORI_ORI_ANDI_SUBI_ADDI, // Maps a mode and register to one of EORI, ORI, ANDI, SUBI or ADDI. - ABCD_SBCD, // Maps source and desintation registers and a register/memory selection bit to an ABCD or SBCD. - ADD_SUB, // Maps a register and a register and mode to an ADD or SUB. ADDA_SUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. ADDQ_SUBQ, // Mags a register and a mode to an ADDQ or SUBQ. @@ -350,9 +347,10 @@ struct ProcessorStorageConstructor { CMPA, // Maps a destination register and a source mode and register to a CMPA. CMPM, // Maps to a CMPM. - Scc_DBcc, // Maps a mode and destination register to either a DBcc or Scc. + EORI_ORI_ANDI_SUBI_ADDI, // Maps a mode and register to one of EORI, ORI, ANDI, SUBI or ADDI. JMP, // Maps a mode and register to a JMP. + JSR, // Maps a mode and register to a JSR. LEA, // Maps a destination register and a source mode and register to an LEA. @@ -360,6 +358,8 @@ struct ProcessorStorageConstructor { MOVEtoSRCCR, // Maps a source mode and register to a MOVE SR or MOVE CCR. MOVEq, // Maps a destination register to a MOVEQ. + MULU_MULS, // Maps a destination register and a source mode and register to a MULU or MULS. + RESET, // Maps to a RESET. ASLR_LSLR_ROLR_ROXLRr, // Maps a destination register to a AS[L/R], LS[L/R], RO[L/R], ROX[L/R]; shift quantities are @@ -369,10 +369,11 @@ struct ProcessorStorageConstructor { MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable // hole for the runtime part to install proper MOVEM activity. + Scc_DBcc, // Maps a mode and destination register to either a DBcc or Scc. + TST, // Maps a mode and register to a TST. - JSR, // Maps a mode and register to a JSR. - RTS, // Maps + RTS, // Maps to an RST. }; using Operation = ProcessorStorage::Operation; @@ -548,6 +549,9 @@ struct ProcessorStorageConstructor { {0xffc0, 0x4a40, Operation::TSTw, Decoder::TST}, // 4-192 (p296) {0xffc0, 0x4a80, Operation::TSTl, Decoder::TST}, // 4-192 (p296) + {0xf1c0, 0xc0c0, Operation::MULU, Decoder::MULU_MULS}, // 4-139 (p243) + {0xf1c0, 0xc1c0, Operation::MULS, Decoder::MULU_MULS}, // 4-136 (p240) + }; #ifndef NDEBUG @@ -590,6 +594,56 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::MULU_MULS: { + const int destination_register = (instruction >> 9) & 7; + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + storage_.instructions[instruction].set_destination(storage_, Dn, destination_register); + + const int mode = combined_mode(ea_mode, ea_register); + switch(mode) { + default: continue; + + case Dn: + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("r")); + break; + + case Ind: + case PostInc: + op(Action::None, seq("nr np", { a(ea_register) })); + op(Action::PerformOperation, seq("r")); + if(mode == PostInc) { + op(int(Action::Increment2) | MicroOp::SourceMask); + } + break; + + case PreDec: + op(int(Action::Decrement2) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) })); + op(Action::PerformOperation, seq("r")); + break; + + case d16An: + case d16PC: + case d8AnXn: + case d8PCXn: + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("n np nr np", mode), { ea(0) })); + op(Action::PerformOperation, seq("r")); + break; + + case XXXl: + op(Action::None, seq("np")); + case XXXw: + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr np", { ea(0) })); + op(Action::PerformOperation, seq("r")); + break; + + case Imm: + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np np")); + op(Action::PerformOperation, seq("r")); + break; + } + } break; + case Decoder::EORI_ORI_ANDI_SUBI_ADDI: { const int mode = combined_mode(ea_mode, ea_register); const bool is_byte_access = !!((instruction >> 6)&3); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 433e044a9..a5496e1e5 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -90,6 +90,8 @@ class ProcessorStorage { EORb, EORw, EORl, NOTb, NOTw, NOTl, ORb, ORw, ORl, + + MULU, MULS, }; /*! From 82b08d0e3ac2f40f699253dd06e883f84bfd403f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 08:53:34 -0400 Subject: [PATCH 116/239] Corrects addressing behaviour of nRd[+-]. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 10 +++++----- .../68000/Implementation/68000Implementation.hpp | 14 +++++++------- Processors/68000/Implementation/68000Storage.cpp | 3 ++- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 4884ed8f6..35b5f0f4b 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -70,21 +70,21 @@ class QL: public CPU::MC68000::BusHandler { default: break; case Microcycle::SelectWord | Microcycle::Read: -// printf("[word r %08x] ", *cycle.address); cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: -// printf("[byte r %08x] ", *cycle.address); cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); -// printf("[word w %08x <- %04x] ", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %08x <- %04x] ", *cycle.address, cycle.value->full); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); -// printf("[byte w %08x <- %02x] ", *cycle.address, (cycle.value->full >> cycle.byte_shift()) & 0xff); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %08x <- %02x] ", *cycle.address, (cycle.value->full >> cycle.byte_shift()) & 0xff); if(!is_peripheral) base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } @@ -115,7 +115,7 @@ class QL: public CPU::MC68000::BusHandler { - (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(40000000)); + _machine->run_for(HalfCycles(16000000)); } @end diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9fd65f495..b098ecaa4 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,13 +52,13 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. - if(address_[5].full > 0x3fff0 || program_counter_.full < 0x16a) { - std::cout << std::setfill('0'); - std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); - std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; - } +// if(program_counter_.full >= 0x25c && program_counter_.full < 0x286) { +// std::cout << std::setfill('0'); +// std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); +// std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; +// for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; +// for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; +// } std::cout << '\n'; decoded_instruction_ = prefetch_queue_.halves.high.full; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 09f9b5344..6a635f1b8 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -239,7 +239,8 @@ struct ProcessorStorageConstructor { step.microcycle.length = HalfCycles(3); step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); if(post_adjustment) { - if(tolower(token[1]) == 'r') { + // nr and nR should affect address 0; nw, nW, nrd and nRd should affect address 1. + if(tolower(token[1]) == 'r' && token.size() == 2) { step.action = (post_adjustment > 0) ? Action::IncrementEffectiveAddress0 : Action::DecrementEffectiveAddress0; } else { step.action = (post_adjustment > 0) ? Action::IncrementEffectiveAddress1 : Action::DecrementEffectiveAddress1; From b64da2710a9bbc21dd779662285c99dc862d90de Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 10:00:14 -0400 Subject: [PATCH 117/239] Corrects a few MOVE #s. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 7 ++++--- Processors/68000/Implementation/68000Storage.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 35b5f0f4b..543fec25f 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -79,12 +79,12 @@ class QL: public CPU::MC68000::BusHandler { break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %08x <- %04x] ", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %08x <- %02x] ", *cycle.address, (cycle.value->full >> cycle.byte_shift()) & 0xff); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", (cycle.value->full >> cycle.byte_shift()) & 0xff, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } @@ -115,7 +115,8 @@ class QL: public CPU::MC68000::BusHandler { - (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(16000000)); + _machine->run_for(HalfCycles(40000000)); } @end + diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 6a635f1b8..1ae496c9e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2413,7 +2413,8 @@ struct ProcessorStorageConstructor { case bw2(Imm, d8AnXn): // MOVE.bw #, (d8, An, Xn) case bw2(Imm, d16PC): // MOVE.bw #, (d16, PC) case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access )); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsl); break; @@ -2546,18 +2547,21 @@ struct ProcessorStorageConstructor { break; case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w + storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l + storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case l2(Imm, XXXw): // MOVE.l #, (xxx).w + storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); @@ -2565,6 +2569,7 @@ struct ProcessorStorageConstructor { break; case l2(Imm, XXXl): // MOVE.l #, (xxx).l + storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); From cadc0bd5095f8962f7921807ea1429737661f246 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 10:02:14 -0400 Subject: [PATCH 118/239] Mental delusion lifted: JSR doesn't look enough like BSR. --- .../68000/Implementation/68000Implementation.hpp | 11 +++++++---- Processors/68000/Implementation/68000Storage.cpp | 12 ++++++------ Processors/68000/Implementation/68000Storage.hpp | 3 ++- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index b098ecaa4..c8204099c 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1085,10 +1085,13 @@ template void Processor: } } break; - case int(MicroOp::Action::PrepareJSRBSR): - // If the lowest byte of the instruction is non-zero then there's no 16-bit offset after it, so the - // return address should be two less. This holds for both a BSR and a JSR as a JSR always has bit - // 7 set. + case int(MicroOp::Action::PrepareJSR): + destination_bus_data_[0].full = program_counter_.full; + address_[7].full -= 4; + effective_address_[1].full = address_[7].full; + break; + + case int(MicroOp::Action::PrepareBSR): destination_bus_data_[0].full = (decoded_instruction_ & 0xff) ? program_counter_.full - 2 : program_counter_.full; address_[7].full -= 4; effective_address_[1].full = address_[7].full; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 1ae496c9e..8bc10ca34 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1125,7 +1125,7 @@ struct ProcessorStorageConstructor { // This is BSR, which is unconditional and means pushing a return address to the stack first. // Push the return address to the stack. - op(Action::PrepareJSRBSR, seq("n nW+ nw", { ea(1), ea(1) })); + op(Action::PrepareBSR, seq("n nW+ nw", { ea(1), ea(1) })); } // This is Bcc. @@ -1808,33 +1808,33 @@ struct ProcessorStorageConstructor { default: continue; case Ind: // JSR (An) storage_.instructions[instruction].source = &storage_.address_[ea_register]; - op(Action::PrepareJSRBSR); + op(Action::PrepareJSR); op(Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) })); break; case d16PC: // JSR (d16, PC) case d16An: // JSR (d16, An) - op(Action::PrepareJSRBSR); + op(Action::PrepareJSR); op(calc_action_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case d8PCXn: // JSR (d8, PC, Xn) case d8AnXn: // JSR (d8, An, Xn) - op(Action::PrepareJSRBSR); + op(Action::PrepareJSR); op(calc_action_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n nn np nW+ nw np", { ea(1), ea(1) })); break; case XXXl: // JSR (xxx).L op(Action::None, seq("np")); - op(Action::PrepareJSRBSR); + op(Action::PrepareJSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; case XXXw: // JSR (xxx).W - op(Action::PrepareJSRBSR); + op(Action::PrepareJSR); op(address_assemble_for_mode(mode) | MicroOp::SourceMask); op(Action::PerformOperation, seq("n np nW+ nw np", { ea(1), ea(1) })); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index a5496e1e5..8f97d3f7d 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -233,7 +233,8 @@ class ProcessorStorage { // (i) inspects the prefetch queue to determine the length of this instruction and copies the next PC to destination_bus_data_; // (ii) copies the stack pointer minus 4 to effective_address_[1]; // (iii) decrements the stack pointer by four. - PrepareJSRBSR, + PrepareJSR, + PrepareBSR, // (i) copies the stack pointer to effective_address_[0]; // (ii) increments the stack pointer by four. From 41d800cb639d2d5feb01ea267b8eca54c7431f58 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 10:23:47 -0400 Subject: [PATCH 119/239] Fixes ADD/SUB Dn,x to use the proper destination value. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++++ Processors/68000/Implementation/68000Storage.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index c8204099c..f3ff3227e 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -72,6 +72,10 @@ template void Processor: active_program_ = &instructions[decoded_instruction_]; active_micro_op_ = active_program_->micro_operations; + + if(decoded_instruction_ == 0xd1ae) { + printf(""); + } } auto bus_program = active_micro_op_->bus_program; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8bc10ca34..32c20fcf0 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -881,7 +881,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.data_[data_register]; const auto destination_register = ea_register; - storage_.instructions[instruction].destination = &storage_.destination_bus_data_[1]; + storage_.instructions[instruction].destination = &storage_.destination_bus_data_[0]; storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; // Perform [ADD/SUB].blw Dn, From 0bd653708c36afbe4b7dc441212804c1cceced0c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 14:31:20 -0400 Subject: [PATCH 120/239] Corrects MOVE.bw Dn, (An)[+]. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 32c20fcf0..173e0efab 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2160,7 +2160,7 @@ struct ProcessorStorageConstructor { case bw2(Dn, Ind): // MOVE.bw Dn, (An) case bw2(Dn, PostInc): // MOVE.bw Dn, (An)+ - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw, seq("nw np", { a(destination_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); if(destination_mode == PostInc) { op(increment_action | MicroOp::DestinationMask); } From 0c059836175ec45ef66e6726c8359a74cfa3e220 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 15:15:48 -0400 Subject: [PATCH 121/239] Shortens impact of MULU on the instruction stream to correct parsing. I need to look into this. --- Processors/68000/Implementation/68000Implementation.hpp | 5 +---- Processors/68000/Implementation/68000Storage.cpp | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index f3ff3227e..4c647cf0e 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,7 +52,7 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. -// if(program_counter_.full >= 0x25c && program_counter_.full < 0x286) { +// if(program_counter_.full >= 0x250 && program_counter_.full <= 0x25e) { // std::cout << std::setfill('0'); // std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); // std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; @@ -73,9 +73,6 @@ template void Processor: active_program_ = &instructions[decoded_instruction_]; active_micro_op_ = active_program_->micro_operations; - if(decoded_instruction_ == 0xd1ae) { - printf(""); - } } auto bus_program = active_micro_op_->bus_program; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 173e0efab..f0b034d6c 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -639,7 +639,8 @@ struct ProcessorStorageConstructor { break; case Imm: - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np np")); + // DEVIATION FROM YACHT.TXT. It has an additional np, which I need to figure out. + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation, seq("r")); break; } From 29f8dcfb409434ac71c7c5dce4648f235c90e2a3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 16:13:35 -0400 Subject: [PATCH 122/239] Fixes a bunch of (d16, An)-type MOVEs and implements MOVE (XXX).wl, (d16,An)/etc. --- .../68000/Implementation/68000Storage.cpp | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index f0b034d6c..3e5f20fea 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -37,7 +37,7 @@ struct ProcessorStorageConstructor { int calc_action_for_mode(int mode) const { using Action = ProcessorBase::MicroOp::Action; switch(mode & 0xff) { - default: return 0; + default: assert(false); case d16PC: return int(Action::CalcD16PC); case d8PCXn: return int(Action::CalcD8PCXn); case d16An: return int(Action::CalcD16An); @@ -2339,7 +2339,7 @@ struct ProcessorStorageConstructor { case bw2(Dn, d8AnXn): // MOVE.bw Dn, (d8, An, Xn) case bw2(Dn, d16PC): // MOVE.bw Dn, (d16, PC) case bw2(Dn, d8PCXn): // MOVE.bw Dn, (d8, PC, Xn) - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; @@ -2347,7 +2347,7 @@ struct ProcessorStorageConstructor { case l2(Dn, d8AnXn): // MOVE.l Dn, (d8, An, Xn) case l2(Dn, d16PC): // MOVE.l Dn, (d16, PC) case l2(Dn, d8PCXn): // MOVE.l Dn, (d8, PC, Xn) - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np", destination_mode))); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; @@ -2359,8 +2359,8 @@ struct ProcessorStorageConstructor { case bw2(PostInc, d16PC): // MOVE.bw (An)+, (d16, PC) case bw2(Ind, d8PCXn): // MOVE.bw (An), (d8, PC, Xn) case bw2(PostInc, d8PCXn): // MOVE.bw (An)+, (d8, PC, Xn) - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); - op(Action::PerformOperation, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access)); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); if(ea_mode == PostInc) { op(increment_action | MicroOp::SourceMask); } @@ -2375,8 +2375,8 @@ struct ProcessorStorageConstructor { case l2(Ind, d8PCXn): // MOVE.l (An), (d8, PC, Xn) case l2(PostInc, d8PCXn): // MOVE.l (An)+, (d8, PC, Xn) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask); - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq("nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq(pseq("np nW+ nw np", destination_mode), { ea(1), ea(1) })); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); if(ea_mode == PostInc) { op(increment_action | MicroOp::SourceMask); } @@ -2416,10 +2416,38 @@ struct ProcessorStorageConstructor { case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(calc_action_for_mode(destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", destination_mode), { ea(1) }, !is_byte_access )); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access )); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsl); break; + case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) + case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) + case bw2(XXXl, d16PC): // MOVE.bw (xxx).l, (d16, PC) + case bw2(XXXl, d8PCXn): // MOVE.bw (xxx).l, (d16, PC, Xn) + op(Action::None, seq("np")); + case bw2(XXXw, d16An): // MOVE.bw (xxx).w, (d16, An) + case bw2(XXXw, d8AnXn): // MOVE.bw (xxx).w, (d8, An, Xn) + case bw2(XXXw, d16PC): // MOVE.bw (xxx).w, (d16, PC) + case bw2(XXXw, d8PCXn): // MOVE.bw (xxx).w, (d16, PC, Xn) + op(address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); + break; + + case l2(XXXl, d16An): // MOVE.l (xxx).l, (d16, An) + case l2(XXXl, d8AnXn): // MOVE.l (xxx).l, (d8, An, Xn) + case l2(XXXl, d16PC): // MOVE.l (xxx).l, (d16, PC) + case l2(XXXl, d8PCXn): // MOVE.l (xxx).l, (d16, PC, Xn) + op(Action::None, seq("np")); + case l2(XXXw, d16An): // MOVE.l (xxx).w, (d16, An) + case l2(XXXw, d8AnXn): // MOVE.l (xxx).w, (d8, An, Xn) + case l2(XXXw, d16PC): // MOVE.l (xxx).w, (d16, PC) + case l2(XXXw, d8PCXn): // MOVE.l (xxx).w, (d16, PC, Xn) + op(address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); + break; + // // MOVE , (xxx).W // MOVE , (xxx).L @@ -2515,7 +2543,7 @@ struct ProcessorStorageConstructor { case bw2(d16An, XXXw): case bw2(d8PCXn, XXXw): case bw2(d8AnXn, XXXw): - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_destination_mode), { ea(0) }, !is_byte_access)); + op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; @@ -2524,7 +2552,7 @@ struct ProcessorStorageConstructor { case bw2(d16An, XXXl): case bw2(d8PCXn, XXXl): case bw2(d8AnXn, XXXl): - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np np nr", combined_destination_mode), { ea(0) }, !is_byte_access)); + op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; @@ -2533,7 +2561,7 @@ struct ProcessorStorageConstructor { case l2(d16An, XXXw): case l2(d8PCXn, XXXw): case l2(d8AnXn, XXXw): - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_destination_mode), { ea(0), ea(0) })); + op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; @@ -2542,7 +2570,7 @@ struct ProcessorStorageConstructor { case l2(d16An, XXXl): case l2(d8PCXn, XXXl): case l2(d8AnXn, XXXl): - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np np nR+ nr", combined_destination_mode), { ea(0), ea(0) })); + op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; From c265ea984771d3d6d7d43f020188d63e1e044870 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 16:39:10 -0400 Subject: [PATCH 123/239] Corrects byte writes in both test machines. --- OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm | 2 +- OSBindings/Mac/Clock SignalTests/QLTests.mm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index a2f578ee0..76ee6fc67 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -82,7 +82,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); + base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } } diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 543fec25f..a816ef827 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -84,8 +84,8 @@ class QL: public CPU::MC68000::BusHandler { break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", (cycle.value->full >> cycle.byte_shift()) & 0xff, *cycle.address); - if(!is_peripheral) base[word_address] = (cycle.value->full & cycle.byte_mask()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); + if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } } From b8a0f4e831cee8da272506eea115d6cd0270a12f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 16:58:59 -0400 Subject: [PATCH 124/239] Implements MOVE to/from USP. --- .../Implementation/68000Implementation.hpp | 4 ++++ .../68000/Implementation/68000Storage.cpp | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 4c647cf0e..66df4e4cb 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -478,6 +478,10 @@ template void Processor: set_ccr(active_program_->source->full); break; + /* + Multiplications. + */ + case Operation::MULU: { active_program_->destination->full = active_program_->destination->halves.low.full * active_program_->source->halves.low.full; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 3e5f20fea..b294190ba 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -375,6 +375,8 @@ struct ProcessorStorageConstructor { TST, // Maps a mode and register to a TST. RTS, // Maps to an RST. + + MOVEUSP, // Maps a direction and register to a MOVE [to/from] USP. }; using Operation = ProcessorStorage::Operation; @@ -553,6 +555,8 @@ struct ProcessorStorageConstructor { {0xf1c0, 0xc0c0, Operation::MULU, Decoder::MULU_MULS}, // 4-139 (p243) {0xf1c0, 0xc1c0, Operation::MULS, Decoder::MULU_MULS}, // 4-136 (p240) + {0xfff0, 0x4e60, Operation::MOVEAl, Decoder::MOVEUSP}, // 6-21 (p475) + }; #ifndef NDEBUG @@ -2027,6 +2031,24 @@ struct ProcessorStorageConstructor { op(is_to_m ? Action::MOVEMtoMComplete : Action::MOVEMtoRComplete, seq("np")); } break; + case Decoder::MOVEUSP: { + storage_.instructions[instruction].requires_supervisor = true; + + // Observation here: because this is a privileged instruction, the user stack pointer + // definitely isn't currently A7. + if(instruction & 0x8) { + // Transfer FROM the USP. + storage_.instructions[instruction].destination = &storage_.stack_pointers_[0]; + storage_.instructions[instruction].set_source(storage_, An, ea_register); + } else { + // Transfer TO the USP. + storage_.instructions[instruction].source = &storage_.stack_pointers_[0]; + storage_.instructions[instruction].set_destination(storage_, An, ea_register); + } + + op(Action::PerformOperation, seq("np")); + } break; + // Decodes the format used by most MOVEs and all MOVEAs. case Decoder::MOVE: { const int destination_mode = (instruction >> 6) & 7; From e49b257e94604eda2eba1ac3729f00c3ae4bd6f6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 22:21:56 -0400 Subject: [PATCH 125/239] Takes a run at TRAP. --- .../Implementation/68000Implementation.hpp | 35 ++++++++-- .../68000/Implementation/68000Storage.cpp | 68 +++++++++++++------ .../68000/Implementation/68000Storage.hpp | 14 ++-- 3 files changed, 83 insertions(+), 34 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 66df4e4cb..35b3d17ef 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -548,7 +548,7 @@ template void Processor: } \ \ auto step = bus_program; \ - uint32_t *address_storage = movem_addresses_; \ + uint32_t *address_storage = precomputed_addresses_; \ mask = next_word_; \ int offset = 0; @@ -596,7 +596,7 @@ template void Processor: } case Operation::MOVEMtoRl: { - setup_movem(2, movem_reads_steps_); + setup_movem(2, movem_read_steps_); // Everything for move to registers is based on an incrementing // address; per M68000PRM: @@ -613,23 +613,23 @@ template void Processor: // MOVEM to R always reads one word too many. address_storage[0] = start_address; step[0].microcycle.address = step[1].microcycle.address = address_storage; - step[0].microcycle.value = step[1].microcycle.value = &movem_spare_value_; + step[0].microcycle.value = step[1].microcycle.value = &throwaway_value_; movem_final_address_ = start_address; } break; case Operation::MOVEMtoRw: { - setup_movem(1, movem_reads_steps_); + setup_movem(1, movem_read_steps_); write_address_sequence_word(inc_action); // MOVEM to R always reads one word too many. address_storage[0] = start_address; step[0].microcycle.address = step[1].microcycle.address = address_storage; - step[0].microcycle.value = step[1].microcycle.value = &movem_spare_value_; + step[0].microcycle.value = step[1].microcycle.value = &throwaway_value_; movem_final_address_ = start_address; } break; case Operation::MOVEMtoMl: { - setup_movem(2, movem_writes_steps_); + setup_movem(2, movem_write_steps_); // MOVEM to M counts downwards and enumerates the registers in reverse order // if subject to the predecrementing mode; otherwise it counts upwards and @@ -652,7 +652,7 @@ template void Processor: } break; case Operation::MOVEMtoMw: { - setup_movem(1, movem_writes_steps_); + setup_movem(1, movem_write_steps_); if(mode == 4) { offset = 15; @@ -669,6 +669,27 @@ template void Processor: #undef inc_action #undef dec_action + // TRAP, which is a nicer form of ILLEGAL. + case Operation::TRAP: { + // Select the trap steps as next. + bus_program = trap_steps_; + + // Fill in the status word value. + destination_bus_data_[0].full = get_status(); + + // Switch to supervisor mode. + set_is_supervisor(true); + + // Pick a vector. + effective_address_[0].full = ((decoded_instruction_ & 15) + 32) << 2; + + // Schedule the proper stack activity. + precomputed_addresses_[0] = address_[7].full - 2; + precomputed_addresses_[1] = address_[7].full - 6; + precomputed_addresses_[2] = address_[7].full - 4; + address_[7].full -= 6; + } break; + /* NEGs: negatives the destination, setting the zero, negative, overflow and carry flags appropriate, and extend. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index b294190ba..bc1b39fa8 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -377,6 +377,8 @@ struct ProcessorStorageConstructor { RTS, // Maps to an RST. MOVEUSP, // Maps a direction and register to a MOVE [to/from] USP. + + TRAP, // Maps to a TRAP. }; using Operation = ProcessorStorage::Operation; @@ -557,6 +559,7 @@ struct ProcessorStorageConstructor { {0xfff0, 0x4e60, Operation::MOVEAl, Decoder::MOVEUSP}, // 6-21 (p475) + {0xfff0, 0x4e40, Operation::TRAP, Decoder::TRAP}, // 4-188 (p292) }; #ifndef NDEBUG @@ -2424,24 +2427,6 @@ struct ProcessorStorageConstructor { // n np nr n np nw np // continue; -// case 0x1005: // MOVE (xxx).W, (d16, An) - // np nr np nw np -// continue; - -// case 0x1006: // MOVE (xxx).W, (d8, An, Xn) - // np nr n np nw np -// continue; - - case bw2(Imm, d16An): // MOVE.bw #, (d16, An) - case bw2(Imm, d8AnXn): // MOVE.bw #, (d8, An, Xn) - case bw2(Imm, d16PC): // MOVE.bw #, (d16, PC) - case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) - storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; - op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); - op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access )); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsl); - break; - case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) case bw2(XXXl, d16PC): // MOVE.bw (xxx).l, (d16, PC) @@ -2470,6 +2455,25 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); break; + case bw2(Imm, d16An): // MOVE.bw #, (d16, An) + case bw2(Imm, d16PC): // MOVE.bw #, (d16, PC) + case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) + case bw2(Imm, d8AnXn): // MOVE.bw #, (d8, An, Xn) + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); + op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); + break; + + case l2(Imm, d16An): // MOVE.l #, (d16, An) + case l2(Imm, d16PC): // MOVE.l #, (d16, PC) + case l2(Imm, d8PCXn): // MOVE.l #, (d8, PC, Xn) + case l2(Imm, d8AnXn): // MOVE.l #, (d8, An, Xn) + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); + op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); + break; + // // MOVE , (xxx).W // MOVE , (xxx).L @@ -2697,6 +2701,14 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nn _ np")); break; + case Decoder::TRAP: { + // TRAP involves some oddly-sequenced stack writes, so is calculated + // at runtime; also the same sequence is used for illegal instructions. + // So the entirety is scheduled at runtime. + op(Action::PerformOperation); + op(); + } break; + case Decoder::TST: { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); @@ -2864,8 +2876,11 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { } movem_reads_pattern += "nr"; addresses.push_back(nullptr); - const size_t movem_reads_offset = constructor.assemble_program(movem_reads_pattern, addresses); - const size_t movem_writes_offset = constructor.assemble_program(movem_writes_pattern, addresses); + const size_t movem_read_offset = constructor.assemble_program(movem_reads_pattern, addresses); + const size_t movem_write_offset = constructor.assemble_program(movem_writes_pattern, addresses); + + // Target addresses and values will be filled in by TRAP/illegal too. + const size_t trap_offset = constructor.assemble_program("nn nw nw nW nV nv np np", { &precomputed_addresses_[0], &precomputed_addresses_[1], &precomputed_addresses_[2] }); // Install operations. constructor.install_instructions(); @@ -2882,8 +2897,17 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { dbcc_condition_false_no_branch_steps_ = &all_bus_steps_[dbcc_condition_false_no_branch_offset]; dbcc_condition_false_branch_steps_ = &all_bus_steps_[dbcc_condition_false_branch_offset]; - movem_reads_steps_ = &all_bus_steps_[movem_reads_offset]; - movem_writes_steps_ = &all_bus_steps_[movem_writes_offset]; + movem_read_steps_ = &all_bus_steps_[movem_read_offset]; + movem_write_steps_ = &all_bus_steps_[movem_write_offset]; + + // Link the trap steps but also fill in the program counter as the source + // for its parts, and use the computed addresses. + // + // Order of output is: PC.l, SR, PC.h. + trap_steps_ = &all_bus_steps_[trap_offset]; + trap_steps_[1].microcycle.value = trap_steps_[2].microcycle.value = &program_counter_.halves.low; + trap_steps_[3].microcycle.value = trap_steps_[4].microcycle.value = &destination_bus_data_[0].halves.low; + trap_steps_[5].microcycle.value = trap_steps_[6].microcycle.value = &program_counter_.halves.high; // Set initial state. Largely TODO. active_step_ = reset_bus_steps_; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 8f97d3f7d..777988d4c 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -92,6 +92,8 @@ class ProcessorStorage { ORb, ORw, ORl, MULU, MULS, + + TRAP, }; /*! @@ -313,8 +315,10 @@ class ProcessorStorage { BusStep *dbcc_condition_false_no_branch_steps_; BusStep *dbcc_condition_false_branch_steps_; - BusStep *movem_reads_steps_; - BusStep *movem_writes_steps_; + BusStep *movem_read_steps_; + BusStep *movem_write_steps_; + + BusStep *trap_steps_; // Current bus step pointer, and outer program pointer. Program *active_program_ = nullptr; @@ -329,9 +333,9 @@ class ProcessorStorage { /// Sets or clears the supervisor flag, ensuring the stack pointer is properly updated. void set_is_supervisor(bool); - // Transient storage for MOVEM. - uint32_t movem_addresses_[65]; - RegisterPair16 movem_spare_value_; + // Transient storage for MOVEM, TRAP and others. + uint32_t precomputed_addresses_[65]; + RegisterPair16 throwaway_value_; uint32_t movem_final_address_; /*! From 5a50eb56dd3ec460a3342eefba7afc84aaae5904 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 22:30:07 -0400 Subject: [PATCH 126/239] Marginally increases coverage of MOVE x, -(An). --- .../68000/Implementation/68000Storage.cpp | 44 +++---------------- 1 file changed, 6 insertions(+), 38 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index bc1b39fa8..7d10c74bc 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2328,30 +2328,18 @@ struct ProcessorStorageConstructor { // MOVE , -(An) // - case bw2(Dn, PreDec): // MOVE Dn, -(An) + case bw2(Dn, PreDec): // MOVE.bw Dn, -(An) op( decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; -// case 0x0204: // MOVE (An), -(An) -// case 0x0304: // MOVE (An)+, -(An) - // nr np nw -// continue; + case l2(Dn, PreDec): // MOVE.l Dn, -(An) + op( int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } ) ); + op( int(Action::Decrement2) | MicroOp::DestinationMask ); + break; -// case 0x0404: // MOVE -(An), -(An) - // n nr np nw -// continue; - -// case 0x0504: // MOVE (d16, An), -(An) -// case 0x0604: // MOVE (d8, An, Xn), -(An) - // np nr np nw - // n np nr np nw -// continue; - -// case 0x1004: // MOVE (xxx).W, -(An) - // np nr np nw -// continue; // // MOVE , (d16, An) @@ -2407,26 +2395,6 @@ struct ProcessorStorageConstructor { } break; -// case 0x0405: // MOVE -(An), (d16, An) - // n nr np nw -// continue; - -// case 0x0406: // MOVE -(An), (d8, An, Xn) - // n nr n np nw np -// continue; - -// case 0x0505: // MOVE (d16, An), (d16, An) -// case 0x0605: // MOVE (d8, An, Xn), (d16, An) - // np nr np nw np - // n np nr np nw np -// continue; - -// case 0x0506: // MOVE (d16, An), (d8, An, Xn) -// case 0x0606: // MOVE (d8, An, Xn), (d8, An, Xn) - // np nr n np nw np - // n np nr n np nw np -// continue; - case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) case bw2(XXXl, d16PC): // MOVE.bw (xxx).l, (d16, PC) From b09de8efce59b6a76427fba2fa0d70722ec79ad5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 23:05:16 -0400 Subject: [PATCH 127/239] Attempts to fill in the rest of MOVE x, -(An). --- .../68000/Implementation/68000Storage.cpp | 70 ++++++++++++++++++- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7d10c74bc..161048271 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2328,18 +2328,80 @@ struct ProcessorStorageConstructor { // MOVE , -(An) // - case bw2(Dn, PreDec): // MOVE.bw Dn, -(An) + case bw2(Dn, PreDec): // MOVE.bw Dn, -(An) + op(Action::PerformOperation); op( decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case l2(Dn, PreDec): // MOVE.l Dn, -(An) + op(Action::PerformOperation); op( int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); - op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } ) ); + op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } )); op( int(Action::Decrement2) | MicroOp::DestinationMask ); break; + case bw2(PreDec, PreDec): // MOVE.bw -(An), -(An) + op(decrement_action | MicroOp::SourceMask, seq("n")); + case bw2(Ind, PreDec): // MOVE.bw (An), -(An) + case bw2(PostInc, PreDec): // MOVE.bw (An)+, -(An) + op(decrement_action | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { a(destination_register) }, !is_byte_access)); + if(combined_source_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + + case l2(PreDec, PreDec): // MOVE.l -(An), -(An) + op(decrement_action | MicroOp::SourceMask, seq("n")); + case l2(Ind, PreDec): // MOVE.l (An), -(An) + case l2(PostInc, PreDec): // MOVE.l (An)+, -(An) + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) } )); + op(Action::PerformOperation); + op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } )); + op(int(Action::Decrement2) | MicroOp::DestinationMask ); + if(combined_source_mode == PostInc) { + op(increment_action | MicroOp::SourceMask); + } + break; + + case bw2(d16An, PreDec): + case bw2(d8AnXn, PreDec): + case bw2(d16PC, PreDec): + case bw2(d8PCXn, PreDec): + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access )); + op(Action::PerformOperation); + op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + break; + + case l2(d16An, PreDec): + case l2(d8AnXn, PreDec): + case l2(d16PC, PreDec): + case l2(d8PCXn, PreDec): + op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) } )); + op(Action::PerformOperation); + op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) })); + op(int(Action::Decrement2) | MicroOp::DestinationMask); + break; + + case bw2(Imm, PreDec): + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(Action::PerformOperation); + op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + break; + + case l2(Imm, PreDec): + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(Action::PerformOperation); + op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) })); + op(int(Action::Decrement2) | MicroOp::DestinationMask); + break; // // MOVE , (d16, An) @@ -2395,6 +2457,8 @@ struct ProcessorStorageConstructor { } break; + // TODO: PreDec. + case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) case bw2(XXXl, d16PC): // MOVE.bw (xxx).l, (d16, PC) From 9334557fbf01e9e5008680cde7ab219d19ab6270 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 17 Apr 2019 23:12:32 -0400 Subject: [PATCH 128/239] Added important TODO. --- Processors/68000/Implementation/68000Storage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 161048271..bed25a70e 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2341,6 +2341,9 @@ struct ProcessorStorageConstructor { op( int(Action::Decrement2) | MicroOp::DestinationMask ); break; + // TODO: verify when/where the predecrement occurs everywhere below; it may affect + // e.g. MOVE.w -(A6), -(A6) + case bw2(PreDec, PreDec): // MOVE.bw -(An), -(An) op(decrement_action | MicroOp::SourceMask, seq("n")); case bw2(Ind, PreDec): // MOVE.bw (An), -(An) From 81dcfd9f8587f075e4552327e89c20efd5dd3088 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 16:34:48 -0400 Subject: [PATCH 129/239] Implements AND, OR and EOR. As well as introducing a little more nuance to the double-decoding test. --- .../68000/Implementation/68000Storage.cpp | 210 ++++++++++++++++-- 1 file changed, 194 insertions(+), 16 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index bed25a70e..adde06919 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -330,7 +330,9 @@ struct ProcessorStorageConstructor { ABCD_SBCD, // Maps source and desintation registers and a register/memory selection bit to an ABCD or SBCD. ADD_SUB, // Maps a register and a register and mode to an ADD or SUB. ADDA_SUBA, // Maps a destination register and a source mode and register to an ADDA or SUBA. - ADDQ_SUBQ, // Mags a register and a mode to an ADDQ or SUBQ. + ADDQ_SUBQ, // Maps a register and a mode to an ADDQ or SUBQ. + + AND_OR_EOR, // Maps a source register, operation mode and destination register and mode to an AND, OR or EOR. BRA, // Maps to a BRA. All fields are decoded at runtime. Bcc_BSR, // Maps to a Bcc or BSR. Other than determining the type of operation, fields are decoded at runtime. @@ -405,9 +407,17 @@ struct ProcessorStorageConstructor { {0xf1f0, 0xc100, Operation::ABCD, Decoder::ABCD_SBCD}, // 4-3 (p107) {0xf1f0, 0x8100, Operation::SBCD, Decoder::ABCD_SBCD}, // 4-171 (p275) -// {0xf000, 0x8000, Operation::OR, Decoder::RegOpModeReg}, // 4-150 (p226) -// {0xf000, 0xb000, Operation::EOR, Decoder::RegOpModeReg}, // 4-100 (p204) -// {0xf000, 0xc000, Operation::AND, Decoder::RegOpModeReg}, // 4-15 (p119) + {0xf0c0, 0xc000, Operation::ANDb, Decoder::AND_OR_EOR}, // 4-15 (p119) + {0xf0c0, 0xc040, Operation::ANDw, Decoder::AND_OR_EOR}, // 4-15 (p119) + {0xf0c0, 0xc080, Operation::ANDl, Decoder::AND_OR_EOR}, // 4-15 (p119) + + {0xf0c0, 0x8000, Operation::ORb, Decoder::AND_OR_EOR}, // 4-150 (p254) + {0xf0c0, 0x8040, Operation::ORw, Decoder::AND_OR_EOR}, // 4-150 (p254) + {0xf0c0, 0x8080, Operation::ORl, Decoder::AND_OR_EOR}, // 4-150 (p254) + + {0xf0c0, 0xb000, Operation::EORb, Decoder::AND_OR_EOR}, // 4-100 (p204) + {0xf0c0, 0xb040, Operation::EORw, Decoder::AND_OR_EOR}, // 4-100 (p204) + {0xf0c0, 0xb080, Operation::EORl, Decoder::AND_OR_EOR}, // 4-100 (p204) {0xffc0, 0x0600, Operation::ADDb, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) {0xffc0, 0x0640, Operation::ADDw, Decoder::EORI_ORI_ANDI_SUBI_ADDI}, // 4-9 (p113) @@ -562,17 +572,6 @@ struct ProcessorStorageConstructor { {0xfff0, 0x4e40, Operation::TRAP, Decoder::TRAP}, // 4-188 (p292) }; -#ifndef NDEBUG - // Verify no double mappings. - for(int instruction = 0; instruction < 65536; ++instruction) { - int hits = 0; - for(const auto &mapping: mappings) { - if((instruction & mapping.mask) == mapping.value) ++hits; - } - assert(hits < 2); - } -#endif - std::vector micro_op_pointers(65536, std::numeric_limits::max()); // The arbitrary_base is used so that the offsets returned by assemble_program into @@ -592,6 +591,9 @@ struct ProcessorStorageConstructor { // Perform a linear search of the mappings above for this instruction. for(size_t instruction = 0; instruction < 65536; ++instruction) { +#ifndef NDEBUG + int hits = 0; +#endif for(const auto &mapping: mappings) { if((instruction & mapping.mask) == mapping.value) { auto operation = mapping.operation; @@ -602,6 +604,176 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::AND_OR_EOR: { + const bool to_ea = !!((instruction >> 8)&1); + const bool is_eor = (instruction >> 12) == 0xb; + + const int op_mode = (instruction >> 6)&7; + // Weed out illegal operation modes. + if(op_mode == 7) continue; + + const bool is_byte_access = !!((instruction >> 6)&3); + const bool is_long_word_access = ((instruction >> 6)&3) == 2; + + const int data_register = (instruction >> 9) & 7; + const int mode = combined_mode(ea_mode, ea_register); + + if(to_ea) { + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + storage_.instructions[instruction].set_source(storage_, Dn, data_register); + + // Only EOR takes Dn as a destination effective address. + if(!is_eor && mode == Dn) continue; + + switch(is_long_word_access ? l(mode) : bw(mode)) { + default: continue; + + case bw(Dn): // EOR.bw Dn, Dn + op(Action::PerformOperation, seq("np")); + break; + + case l(Dn): // EOR.l Dn, Dn + op(Action::PerformOperation, seq("np nn")); + break; + + case bw(Ind): // [AND/OR/EOR].bw Dn, (An) + case bw(PostInc): // [AND/OR/EOR].bw Dn, (An)+ + op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); + if(mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case bw(PreDec): // [AND/OR/EOR].bw Dn, -(An) + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nrd", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); + break; + + case l(PreDec): // [AND/OR/EOR].l Dn, -(An) + op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("n")); + case l(Ind): // [AND/OR/EOR].l Dn, (An)+ + case l(PostInc): // [AND/OR/EOR].l Dn, (An) + op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + if(mode == PostInc) { + op(int(Action::Increment4) | MicroOp::DestinationMask); + } + break; + + case bw(d16An): // [AND/OR/EOR].bw Dn, (d16, An) + case bw(d8AnXn): // [AND/OR/EOR].bw Dn, (d8, An, Xn) + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd", mode), { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); + break; + + case l(d16An): // [AND/OR/EOR].l Dn, (d16, An) + case l(d8AnXn): // [AND/OR/EOR].l Dn, (d8, An, Xn) + op(calc_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nRd+ nrd", mode), { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + break; + + case bw(XXXl): // [AND/OR/EOR].bw Dn, (xxx).l + op(Action::None, seq("np")); + case bw(XXXw): // [AND/OR/EOR].bw Dn, (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd", { ea(1) }, !is_byte_access)); + op(Action::PerformOperation, seq("np nw", { ea(1) }, !is_byte_access)); + break; + + case l(XXXl): // [AND/OR/EOR].l Dn, (xxx).l + op(Action::None, seq("np")); + case l(XXXw): // [AND/OR/EOR].l Dn, (xxx).w + op(address_assemble_for_mode(mode) | MicroOp::DestinationMask, seq("np nRd+ nrd", { ea(1), ea(1) })); + op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); + break; + } + } else { + // EORs can be to EA only. + if(is_eor) continue; + + storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); + storage_.instructions[instruction].set_destination(storage_, Dn, data_register); + + switch(mode) { + default: continue; + + case bw(Dn): // [AND/OR].bw Dn, Dn + op(Action::PerformOperation, seq("np")); + break; + + case l(Dn): // [AND/OR].l Dn, Dn + op(Action::PerformOperation, seq("np nn")); + break; + + case bw(Ind): // [AND/OR].bw (An), Dn + case bw(PostInc): // [AND/OR].bw (An)+, Dn + op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + if(mode == PostInc) { + op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + } + break; + + case bw(PreDec): // [AND/OR].bw -(An), Dn + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case l(PreDec): // [AND/OR].l -(An), Dn + op(int(Action::Decrement4) | MicroOp::SourceMask, seq("n")); + case l(Ind): // [AND/OR].l (An), Dn, + case l(PostInc): // [AND/OR].l (An)+, Dn + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + if(mode == PostInc) { + op(int(Action::Increment4) | MicroOp::SourceMask); + } + break; + + case bw(d16An): // [AND/OR].bw (d16, An), Dn + case bw(d16PC): // [AND/OR].bw (d16, PC), Dn + case bw(d8AnXn): // [AND/OR].bw (d8, An, Xn), Dn + case bw(d8PCXn): // [AND/OR].bw (d8, PX, Xn), Dn + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr", mode), { ea(0) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case l(d16An): // [AND/OR].l (d16, An), Dn + case l(d16PC): // [AND/OR].l (d16, PC), Dn + case l(d8AnXn): // [AND/OR].l (d8, An, Xn), Dn + case l(d8PCXn): // [AND/OR].l (d8, PX, Xn), Dn + op(calc_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case bw(XXXl): // [AND/OR].bw (xxx).l, Dn + op(Action::None, seq("np")); + case bw(XXXw): // [AND/OR].bw (xxx).w, Dn + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); + op(Action::PerformOperation, seq("np")); + break; + + case l(XXXl): // [AND/OR].bw (xxx).l, Dn + op(Action::None, seq("np")); + case l(XXXw): // [AND/OR].bw (xxx).w, Dn + op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation, seq("np n")); + break; + + case bw(Imm): // [AND/OR].bw #, Dn + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(Action::PerformOperation, seq("np")); + break; + + case l(Imm): // [AND/OR].l #, Dn + op(Action::None, seq("np")); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + op(Action::PerformOperation, seq("np nn")); + break; + } + } + } break; + case Decoder::MULU_MULS: { const int destination_register = (instruction >> 9) & 7; storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); @@ -2833,8 +3005,14 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].operation = operation; micro_op_pointers[instruction] = micro_op_start; - // Don't search further through the list of possibilities. + // Don't search further through the list of possibilities, unless this is a debugging build, + // in which case verify there are no double mappings. +#ifndef NDEBUG + ++hits; + assert(hits == 1); +#else break; +#endif } } } From 8c26d0c6e6bb14878e7874cc27df603afb321f7f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 20:50:58 -0400 Subject: [PATCH 130/239] Makes an attempt at RTE and RTR. --- .../Implementation/68000Implementation.hpp | 19 +++++++++++++++ .../68000/Implementation/68000Storage.cpp | 23 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 6 +++++ 3 files changed, 48 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 35b3d17ef..5d3a09ba4 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1046,6 +1046,18 @@ template void Processor: #undef set_flags_w #undef set_flags_l #undef set_neg_zero_overflow + /* + RTE and RTR share an implementation. + */ + case Operation::RTE_RTR: + // If this is RTR, patch out the is_supervisor bit. + if(decoded_instruction_ == 0x4e77) { + source_bus_data_[0].full = + (source_bus_data_[0].full & ~(1 << 13)) | + (is_supervisor_ << 13); + } + set_status(source_bus_data_[0].full); + break; /* TSTs: compare to zero. @@ -1128,6 +1140,13 @@ template void Processor: address_[7].full += 4; break; + case int(MicroOp::Action::PrepareRTE_RTR): + precomputed_addresses_[0] = address_[7].full + 2; + precomputed_addresses_[1] = address_[7].full; + precomputed_addresses_[2] = address_[7].full + 4; + address_[7].full += 6; + break; + case int(MicroOp::Action::CopyNextWord): next_word_ = prefetch_queue_.halves.low.full; break; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index adde06919..7df54938d 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -372,6 +372,8 @@ struct ProcessorStorageConstructor { MOVEM, // Maps a mode and register as they were a 'destination' and sets up bus steps with a suitable // hole for the runtime part to install proper MOVEM activity. + RTE_RTR, // Maps to an RTE/RTR. + Scc_DBcc, // Maps a mode and destination register to either a DBcc or Scc. TST, // Maps a mode and register to a TST. @@ -570,6 +572,9 @@ struct ProcessorStorageConstructor { {0xfff0, 0x4e60, Operation::MOVEAl, Decoder::MOVEUSP}, // 6-21 (p475) {0xfff0, 0x4e40, Operation::TRAP, Decoder::TRAP}, // 4-188 (p292) + + {0xffff, 0x4e77, Operation::RTE_RTR, Decoder::RTE_RTR}, // 4-168 (p272) [RTR] + {0xffff, 0x4e73, Operation::RTE_RTR, Decoder::RTE_RTR}, // 6-84 (p538) [RTE] }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -604,6 +609,15 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::RTE_RTR: { + storage_.instructions[instruction].requires_supervisor = instruction == 0x4e73; + + // TODO: something explicit to ensure the nR nr nr is exclusively linked. + op(Action::PrepareRTE_RTR, seq("nR nr nr", { &storage_.precomputed_addresses_[0], &storage_.precomputed_addresses_[1], &storage_.precomputed_addresses_[2] } )); + op(Action::PerformOperation, seq("np np")); + op(); + } break; + case Decoder::AND_OR_EOR: { const bool to_ea = !!((instruction >> 8)&1); const bool is_eor = (instruction >> 12) == 0xb; @@ -3122,6 +3136,15 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { trap_steps_[3].microcycle.value = trap_steps_[4].microcycle.value = &destination_bus_data_[0].halves.low; trap_steps_[5].microcycle.value = trap_steps_[6].microcycle.value = &program_counter_.halves.high; + // Also relink the RTE and RTR bus steps to collect the program counter. + // + // Assumed order of input: PC.h, SR, PC.l (i.e. the opposite of TRAP's output). + for(const int instruction: { 0x4e73, 0x4e77 }) { + auto steps = instructions[instruction].micro_operations[0].bus_program; + steps[0].microcycle.value = steps[1].microcycle.value = &program_counter_.halves.high; + steps[4].microcycle.value = steps[5].microcycle.value = &program_counter_.halves.low; + } + // Set initial state. Largely TODO. active_step_ = reset_bus_steps_; effective_address_[0] = 0; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 777988d4c..8174f4370 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -93,6 +93,8 @@ class ProcessorStorage { MULU, MULS, + RTE_RTR, + TRAP, }; @@ -241,6 +243,10 @@ class ProcessorStorage { // (i) copies the stack pointer to effective_address_[0]; // (ii) increments the stack pointer by four. PrepareRTS, + + // (i) fills in the proper stack addresses to the bus steps for this micro-op; and + // (ii) adjusts the stack pointer appropriately. + PrepareRTE_RTR, }; static const int SourceMask = 1 << 30; static const int DestinationMask = 1 << 29; From 64c4137e5beb8502f167db820ce2ae0703fc876c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 23:25:19 -0400 Subject: [PATCH 131/239] Begins a cleanup procedure on MOVE. --- .../Implementation/68000Implementation.hpp | 18 - .../68000/Implementation/68000Storage.cpp | 324 ++++++------------ .../68000/Implementation/68000Storage.hpp | 5 - 3 files changed, 103 insertions(+), 244 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 5d3a09ba4..373c275a9 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1151,24 +1151,6 @@ template void Processor: next_word_ = prefetch_queue_.halves.low.full; break; - case int(MicroOp::Action::SetMoveFlagsb): - zero_result_ = active_program_->source->halves.low.halves.low; - negative_flag_ = zero_result_ & 0x80; - overflow_flag_ = carry_flag_ = 0; - break; - - case int(MicroOp::Action::SetMoveFlagsw): - zero_result_ = active_program_->source->halves.low.full; - negative_flag_ = zero_result_ & 0x8000; - overflow_flag_ = carry_flag_ = 0; - break; - - case int(MicroOp::Action::SetMoveFlagsl): - zero_result_ = active_program_->source->full; - negative_flag_ = zero_result_ & 0x80000000; - overflow_flag_ = carry_flag_ = 0; - break; - // Increments and decrements. #define Adjust(op, quantity) \ case int(op) | MicroOp::SourceMask: active_program_->source_address->full += quantity; break; \ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7df54938d..0b32db2dd 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -45,17 +45,32 @@ struct ProcessorStorageConstructor { } } - int combined_mode(int mode, int reg, bool collapse_an_dn = false) { - if(collapse_an_dn && mode == 1) mode = 0; - return (mode == 7) ? (0x10 | reg) : mode; - } - int address_assemble_for_mode(int mode) const { using Action = ProcessorBase::MicroOp::Action; assert((mode & 0xff) == XXXw || (mode & 0xff) == XXXl); return int(((mode & 0xff) == XXXw) ? Action::AssembleWordAddressFromPrefetch : Action::AssembleLongWordAddressFromPrefetch); } + int address_action_for_mode(int mode) const { + using Action = ProcessorBase::MicroOp::Action; + switch(mode & 0xff) { + default: assert(false); + case d16PC: return int(Action::CalcD16PC); + case d8PCXn: return int(Action::CalcD8PCXn); + case d16An: return int(Action::CalcD16An); + case d8AnXn: return int(Action::CalcD8AnXn); + case XXXw: return int(Action::AssembleWordAddressFromPrefetch); + case XXXl: return int(Action::AssembleLongWordAddressFromPrefetch); + } + + } + + int combined_mode(int mode, int reg, bool collapse_an_dn = false, bool collapse_postinc = false) { + if(collapse_an_dn && mode == An) mode = Dn; + if(collapse_postinc && mode == PostInc) mode = Ind; + return (mode == 7) ? (0x10 | reg) : mode; + } + int data_assemble_for_mode(int mode) const { using Action = ProcessorBase::MicroOp::Action; assert((mode & 0xff) == XXXw || (mode & 0xff) == XXXl); @@ -2249,22 +2264,21 @@ struct ProcessorStorageConstructor { const bool is_byte_access = mapping.operation == Operation::MOVEb; const bool is_long_word_access = mapping.operation == Operation::MOVEl; - // There are no byte moves to address registers. - if(is_byte_access && destination_mode == An) { - continue; - } - const int decrement_action = int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); const int increment_action = int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); - const int combined_source_mode = combined_mode(ea_mode, ea_register, true); - const int combined_destination_mode = combined_mode(destination_mode, destination_register, true); + const int combined_source_mode = combined_mode(ea_mode, ea_register, true, true); + const int combined_destination_mode = combined_mode(destination_mode, destination_register, true, true); const int mode = is_long_word_access ? l2(combined_source_mode, combined_destination_mode) : bw2(combined_source_mode, combined_destination_mode); // If the move is to an address register, switch the MOVE to a MOVEA. - if(destination_mode == 0x01) { + // Also: there are no byte moves to address registers. + if(destination_mode == An) { + if(is_byte_access) { + continue; + } operation = is_long_word_access ? Operation::MOVEAl : Operation::MOVEAw; } @@ -2272,242 +2286,141 @@ struct ProcessorStorageConstructor { // // MOVE , Dn + // MOVEA , An // - case l2(Dn, Dn): // MOVE.l Dn, Dn - case bw2(Dn, Dn): // MOVE.bw Dn, Dn + case l2(Dn, Dn): // MOVE[A].l [An/Dn], [An/Dn] + case bw2(Dn, Dn): // MOVE[A].bw [An/Dn], [An/Dn] op(Action::PerformOperation, seq("np")); break; - case l2(Ind, Dn): // MOVE.l (An), Dn - case l2(PostInc, Dn): // MOVE.l (An)+, Dn + case l2(PreDec, Dn): // MOVE[A].l -(An), [An/Dn] + op(decrement_action | MicroOp::SourceMask, seq("n")); + case l2(Ind, Dn): // MOVE[A].l (An)[+], [An/Dn] op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); - if(ea_mode == PostInc) { - op(int(Action::Increment4) | MicroOp::SourceMask); - } op(Action::PerformOperation); break; - case bw2(Ind, Dn): // MOVE.bw (An), Dn - case bw2(PostInc, Dn): // MOVE.bw (An)+, Dn + case bw2(Ind, Dn): // MOVE[A].bw (An)[+], [An/Dn] op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); - if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); - } op(Action::PerformOperation); break; - case l2(PreDec, Dn): // MOVE.l -(An), Dn - op(decrement_action | MicroOp::SourceMask); - op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np", { ea(0), ea(0) })); - op(Action::PerformOperation); - break; - - case bw2(PreDec, Dn): // MOVE.bw -(An), Dn + case bw2(PreDec, Dn): // MOVE[A].bw -(An), [An/Dn] op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; - case l2(d16An, Dn): // MOVE.l (d16, An), Dn - case l2(d8AnXn, Dn): // MOVE.l (d8, An, Xn), Dn - case l2(d16PC, Dn): // MOVE.l (d16, PC), Dn - case l2(d8PCXn, Dn): // MOVE.l (d8, PC, Xn), Dn - op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + case l2(XXXl, Dn): // MOVE[A].l (xxx).L, [An/Dn] + op(Action::None, seq("np")); + case l2(XXXw, Dn): // MOVE[A].l (xxx).W, [An/Dn] + case l2(d16An, Dn): // MOVE[A].l (d16, An), [An/Dn] + case l2(d8AnXn, Dn): // MOVE[A].l (d8, An, Xn), [An/Dn] + case l2(d16PC, Dn): // MOVE[A].l (d16, PC), [An/Dn] + case l2(d8PCXn, Dn): // MOVE[A].l (d8, PC, Xn), [An/Dn] + op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr np", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; - case bw2(d16An, Dn): // MOVE.bw (d16, An), Dn - case bw2(d8AnXn, Dn): // MOVE.bw (d8, An, Xn), Dn - case bw2(d16PC, Dn): // MOVE.bw (d16, PC), Dn - case bw2(d8PCXn, Dn): // MOVE.bw (d8, PC, Xn), Dn - op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + case bw2(XXXl, Dn): // MOVE[A].bw (xxx).L, [An/Dn] + op(Action::None, seq("np")); + case bw2(XXXw, Dn): // MOVE[A].bw (xxx).W, [An/Dn] + case bw2(d16An, Dn): // MOVE[A].bw (d16, An), [An/Dn] + case bw2(d8AnXn, Dn): // MOVE[A].bw (d8, An, Xn), [An/Dn] + case bw2(d16PC, Dn): // MOVE[A].bw (d16, PC), [An/Dn] + case bw2(d8PCXn, Dn): // MOVE[A].bw (d8, PC, Xn), [An/Dn] + op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr np", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); break; - case l2(XXXl, Dn): // MOVE.l (xxx).L, Dn - op(Action::None, seq("np")); - case l2(XXXw, Dn): // MOVE.l (xxx).W, Dn - op( - address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, - seq("np nR+ nr np", { ea(0), ea(0) })); - op(Action::PerformOperation); - break; - - case bw2(XXXl, Dn): // MOVE.bw (xxx).L, Dn - op(Action::None, seq("np")); - case bw2(XXXw, Dn): // MOVE.bw (xxx).W, Dn - op( - address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, - seq("np nr np", { ea(0) }, !is_byte_access)); - op(Action::PerformOperation); - break; - - case l2(Imm, Dn): // MOVE.l #, Dn + case l2(Imm, Dn): // MOVE[A].l #, [An/Dn] storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::None, seq("np")); op(int(Action::PerformOperation), seq("np np")); break; - case bw2(Imm, Dn): // MOVE.bw #, Dn + case bw2(Imm, Dn): // MOVE[A].bw #, [An/Dn] storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(int(Action::PerformOperation), seq("np np")); break; // - // MOVE , (An) - // MOVE , (An)+ + // MOVE , (An)[+] // - case l2(Dn, Ind): // MOVE.l Dn, (An) - case l2(Dn, PostInc): // MOVE.l Dn, (An)+ + case l2(Dn, Ind): // MOVE.l [An/Dn], (An)[+] op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case bw2(Dn, Ind): // MOVE.bw Dn, (An) - case bw2(Dn, PostInc): // MOVE.bw Dn, (An)+ + case bw2(Dn, Ind): // MOVE.bw [An/Dn], (An)[+] op(Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case l2(Ind, Ind): // MOVE.l (An), (An) - case l2(PostInc, Ind): // MOVE.l (An)+, (An) - case l2(Ind, PostInc): // MOVE.l (An), (An)+ - case l2(PostInc, PostInc): // MOVE.l (An)+, (An)+ + case l2(PreDec, Ind): // MOVE.l -(An), (An)[+] + op(decrement_action | MicroOp::SourceMask, seq("n")); + case l2(Ind, Ind): // MOVE.l (An)[+], (An)[+] op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(ea_mode == PostInc || destination_mode == PostInc) { - op( - increment_action | - (ea_mode == PostInc ? MicroOp::SourceMask : 0) | - (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); - } break; - case bw2(Ind, Ind): // MOVE.bw (An), (An) - case bw2(PostInc, Ind): // MOVE.bw (An)+, (An) - case bw2(Ind, PostInc): // MOVE.bw (An), (An)+ - case bw2(PostInc, PostInc): // MOVE.bw (An)+, (An)+ + case bw2(Ind, Ind): // MOVE.bw (An)[+], (An)[+] op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); - if(ea_mode == PostInc || destination_mode == PostInc) { - op( - increment_action | - (ea_mode == PostInc ? MicroOp::SourceMask : 0) | - (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); - } break; - case l2(PreDec, Ind): // MOVE.l -(An), (An) - case l2(PreDec, PostInc): // MOVE.l -(An), (An)+ - op(decrement_action | MicroOp::SourceMask); - op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, - seq("n nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } - break; - - case bw2(PreDec, Ind): // MOVE.bw -(An), (An) - case bw2(PreDec, PostInc): // MOVE.bw -(An), (An)+ + case bw2(PreDec, Ind): // MOVE.bw -(An), (An)[+] op(decrement_action | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case l2(d16An, Ind): // MOVE.bw (d16, An), (An) - case l2(d16An, PostInc): // MOVE.bw (d16, An), (An)+ - case l2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An) - case l2(d8AnXn, PostInc): // MOVE.bw (d8, An, Xn), (An)+ - case l2(d16PC, Ind): // MOVE.bw (d16, PC), (An) - case l2(d16PC, PostInc): // MOVE.bw (d16, PC), (An)+ - case l2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An) - case l2(d8PCXn, PostInc): // MOVE.bw (d8, PC, Xn), (An)+ + case l2(d16An, Ind): // MOVE.bw (d16, An), (An)[+] + case l2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An)[+] + case l2(d16PC, Ind): // MOVE.bw (d16, PC), (An)[+] + case l2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An)[+] op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask); op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case bw2(d16An, Ind): // MOVE.bw (d16, An), (An) - case bw2(d16An, PostInc): // MOVE.bw (d16, An), (An)+ - case bw2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An) - case bw2(d8AnXn, PostInc): // MOVE.bw (d8, An, Xn), (An)+ - case bw2(d16PC, Ind): // MOVE.bw (d16, PC), (An) - case bw2(d16PC, PostInc): // MOVE.bw (d16, PC), (An)+ - case bw2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An) - case bw2(d8PCXn, PostInc): // MOVE.bw (d8, PC, Xn), (An)+ - op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + case bw2(XXXl, Ind): // MOVE.bw (xxx).l, (An)[+] + op( Action::None, seq("np")); + case bw2(XXXw, Ind): // MOVE.bw (xxx).W, (An)[+] + case bw2(d16An, Ind): // MOVE.bw (d16, An), (An)[+] + case bw2(d8AnXn, Ind): // MOVE.bw (d8, An, Xn), (An)[+] + case bw2(d16PC, Ind): // MOVE.bw (d16, PC), (An)[+] + case bw2(d8PCXn, Ind): // MOVE.bw (d8, PC, Xn), (An)[+] + op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op( Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case l2(XXXl, Ind): // MOVE.l (xxx).l, (An) - case l2(XXXl, PostInc): // MOVE.l (xxx).l, (An)+ - case l2(XXXw, Ind): // MOVE.l (xxx).W, (An) - case l2(XXXw, PostInc) : // MOVE.l (xxx).W, (An)+ + case l2(XXXl, Ind): // MOVE.l (xxx).l, (An)[+] + case l2(XXXw, Ind): // MOVE.l (xxx).W, (An)[+] op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, (combined_source_mode == XXXl) ? seq("np") : nullptr); op( address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op( Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case bw2(XXXl, Ind): // MOVE.bw (xxx).l, (An) - case bw2(XXXl, PostInc): // MOVE.bw (xxx).l, (An)+ - op( Action::None, seq("np")); - case bw2(XXXw, Ind): // MOVE.bw (xxx).W, (An) - case bw2(XXXw, PostInc): // MOVE.bw (xxx).W, (An)+ - op( address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, - seq("np nr", { ea(0) }, !is_byte_access)); - op( Action::PerformOperation, - seq("nw np", { a(destination_register) }, !is_byte_access)); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } - break; - - case l2(Imm, Ind): // MOVE.l #, (An) - case l2(Imm, PostInc): // MOVE.l #, (An)+ + case l2(Imm, Ind): // MOVE.l #, (An)[+] storage_.instructions[instruction].source = &storage_.prefetch_queue_; op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("np") ); op( Action::PerformOperation, seq("np nW+ nw np", { ea(1), ea(1) }) ); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; - case bw2(Imm, Ind): // MOVE.bw #, (An) - case bw2(Imm, PostInc): // MOVE.bw #, (An)+ + case bw2(Imm, Ind): // MOVE.bw #, (An)[+] storage_.instructions[instruction].source = &storage_.prefetch_queue_; op(Action::PerformOperation, seq("np nw np", { a(destination_register) }, !is_byte_access) ); - if(destination_mode == PostInc) { - op(increment_action | MicroOp::DestinationMask); - } break; // @@ -2532,27 +2445,19 @@ struct ProcessorStorageConstructor { case bw2(PreDec, PreDec): // MOVE.bw -(An), -(An) op(decrement_action | MicroOp::SourceMask, seq("n")); - case bw2(Ind, PreDec): // MOVE.bw (An), -(An) - case bw2(PostInc, PreDec): // MOVE.bw (An)+, -(An) + case bw2(Ind, PreDec): // MOVE.bw (An)[+], -(An) op(decrement_action | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(destination_register) }, !is_byte_access)); - if(combined_source_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; case l2(PreDec, PreDec): // MOVE.l -(An), -(An) op(decrement_action | MicroOp::SourceMask, seq("n")); - case l2(Ind, PreDec): // MOVE.l (An), -(An) - case l2(PostInc, PreDec): // MOVE.l (An)+, -(An) + case l2(Ind, PreDec): // MOVE.l (An)[+], -(An) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) } )); op(Action::PerformOperation); op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } )); op(int(Action::Decrement2) | MicroOp::DestinationMask ); - if(combined_source_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; case bw2(d16An, PreDec): @@ -2615,35 +2520,21 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; - case bw2(Ind, d16An): // MOVE.bw (An), (d16, An) - case bw2(PostInc, d16An): // MOVE.bw (An)+, (d16, An) - case bw2(Ind, d8AnXn): // MOVE.bw (An), (d8, An, Xn) - case bw2(PostInc, d8AnXn): // MOVE.bw (An)+, (d8, An, Xn) - case bw2(Ind, d16PC): // MOVE.bw (An), (d16, PC) - case bw2(PostInc, d16PC): // MOVE.bw (An)+, (d16, PC) - case bw2(Ind, d8PCXn): // MOVE.bw (An), (d8, PC, Xn) - case bw2(PostInc, d8PCXn): // MOVE.bw (An)+, (d8, PC, Xn) + case bw2(Ind, d16An): // MOVE.bw (An)[+], (d16, An) + case bw2(Ind, d8AnXn): // MOVE.bw (An)[+], (d8, An, Xn) + case bw2(Ind, d16PC): // MOVE.bw (An)[+], (d16, PC) + case bw2(Ind, d8PCXn): // MOVE.bw (An)[+], (d8, PC, Xn) op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; - case l2(Ind, d16An): // MOVE.l (An), (d16, An) - case l2(PostInc, d16An): // MOVE.l (An)+, (d16, An) - case l2(Ind, d8AnXn): // MOVE.l (An), (d8, An, Xn) - case l2(PostInc, d8AnXn): // MOVE.l (An)+, (d8, An, Xn) - case l2(Ind, d16PC): // MOVE.l (An), (d16, PC) - case l2(PostInc, d16PC): // MOVE.l (An)+, (d16, PC) - case l2(Ind, d8PCXn): // MOVE.l (An), (d8, PC, Xn) - case l2(PostInc, d8PCXn): // MOVE.l (An)+, (d8, PC, Xn) + case l2(Ind, d16An): // MOVE.l (An)[+], (d16, An) + case l2(Ind, d8AnXn): // MOVE.l (An)[+], (d8, An, Xn) + case l2(Ind, d16PC): // MOVE.l (An)[+], (d16, PC) + case l2(Ind, d8PCXn): // MOVE.l (An)[+], (d8, PC, Xn) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; // TODO: PreDec. @@ -2714,45 +2605,29 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; - case bw2(Ind, XXXw): // MOVE.bw (An), (xxx).W - case bw2(PostInc, XXXw): // MOVE.bw (An)+, (xxx).W + case bw2(Ind, XXXw): // MOVE.bw (An)[+], (xxx).W op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np", { ea(1) })); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; - case bw2(Ind, XXXl): // MOVE.bw (An), (xxx).L - case bw2(PostInc, XXXl): // MOVE.bw (An)+, (xxx).L + case bw2(Ind, XXXl): // MOVE.bw (An)[+], (xxx).L op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np np", { &storage_.prefetch_queue_.full })); - if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); - } break; - case l2(Ind, XXXw): // MOVE.l (An), (xxx).W - case l2(PostInc, XXXw): // MOVE.l (An)+, (xxx).W + case l2(Ind, XXXw): // MOVE.l (An)[+], (xxx).W op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; - case l2(Ind, XXXl): // MOVE (An), (xxx).L - case l2(PostInc, XXXl): // MOVE (An)+, (xxx).L + case l2(Ind, XXXl): // MOVE (An)[+], (xxx).L op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); op(address_assemble_for_mode(combined_destination_mode)); op(Action::PerformOperation, seq("nW+ nw np np", { ea(1), ea(1) })); - if(ea_mode == PostInc) { - op(increment_action | MicroOp::SourceMask); - } break; case bw2(PreDec, XXXw): // MOVE.bw -(An), (xxx).W @@ -2823,33 +2698,32 @@ struct ProcessorStorageConstructor { break; case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w - storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); - op(is_byte_access ? Action::SetMoveFlagsb : Action::SetMoveFlagsw); break; case l2(Imm, XXXw): // MOVE.l #, (xxx).w storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); + op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); - op(Action::SetMoveFlagsl); break; case l2(Imm, XXXl): // MOVE.l #, (xxx).l storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); + op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); - op(Action::SetMoveFlagsl); break; case bw2(XXXw, XXXw): // MOVE.bw (xxx).w, (xxx).w @@ -2915,6 +2789,14 @@ struct ProcessorStorageConstructor { // TODO: all other types of mode. continue; } + + // If any post-incrementing was involved, do the post increment(s). + if(ea_mode == PostInc || destination_mode == PostInc) { + op( + increment_action | + (ea_mode == PostInc ? MicroOp::SourceMask : 0) | + (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); + } } break; case Decoder::RESET: diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 8174f4370..ce504c499 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -162,11 +162,6 @@ class ProcessorStorage { /// Does whatever this instruction says is the main operation. PerformOperation, - /// Sets the flags as if a MOVE operation had occurred, by inspecting *source. - SetMoveFlagsb, - SetMoveFlagsw, - SetMoveFlagsl, - /* All of the below will honour the source and destination masks in deciding where to apply their actions. From 27c7d00a05700982080130de29b4b4a44124b9f8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 23:35:32 -0400 Subject: [PATCH 132/239] Commutes final missing MOVEs to TODOs. --- .../68000/Implementation/68000Storage.cpp | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 0b32db2dd..4a49d2532 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2497,6 +2497,8 @@ struct ProcessorStorageConstructor { op(int(Action::Decrement2) | MicroOp::DestinationMask); break; + // TODO: (xxx).l, (xxx).w + // // MOVE , (d16, An) // MOVE , (d8, An, Xn) @@ -2537,7 +2539,8 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); break; - // TODO: PreDec. + // TODO: PreDec, d16An, d8AnXn, s16PC, d8PCXn. + // (4, 5, 6, 12, 13) case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) @@ -2765,15 +2768,10 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(XXXw, XXXl): // MOVE.l (xxx).w (xxx).l - op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); - op(Action::PerformOperation, seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); - break; - case l2(XXXl, XXXl): // MOVE.l (xxx).l, (xxx).l op(int(Action::None), seq("np")); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + case l2(XXXw, XXXl): // MOVE.l (xxx).w (xxx).l + op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); break; @@ -2782,12 +2780,7 @@ struct ProcessorStorageConstructor { // Default // - default: - if(combined_source_mode <= Imm && combined_destination_mode <= Imm) { - std::cerr << "Unimplemented MOVE " << std::hex << combined_source_mode << "," << combined_destination_mode << ": " << instruction << std::endl; - } - // TODO: all other types of mode. - continue; + default: continue; } // If any post-incrementing was involved, do the post increment(s). From ffdf02c5df79dd49e679761501427d251346b0c1 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 23:40:54 -0400 Subject: [PATCH 133/239] Adds MOVE XXX.lw, -(An) --- Processors/68000/Implementation/68000Storage.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 4a49d2532..fcaef5c7b 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2460,21 +2460,27 @@ struct ProcessorStorageConstructor { op(int(Action::Decrement2) | MicroOp::DestinationMask ); break; + case bw2(XXXl, PreDec): + op(Action::None, seq("np")); + case bw2(XXXw, PreDec): case bw2(d16An, PreDec): case bw2(d8AnXn, PreDec): case bw2(d16PC, PreDec): case bw2(d8PCXn, PreDec): - op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access )); op(Action::PerformOperation); op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; + case l2(XXXl, PreDec): + op(Action::None, seq("np")); + case l2(XXXw, PreDec): case l2(d16An, PreDec): case l2(d8AnXn, PreDec): case l2(d16PC, PreDec): case l2(d8PCXn, PreDec): - op( calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, + op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) } )); op(Action::PerformOperation); op(int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); @@ -2497,8 +2503,6 @@ struct ProcessorStorageConstructor { op(int(Action::Decrement2) | MicroOp::DestinationMask); break; - // TODO: (xxx).l, (xxx).w - // // MOVE , (d16, An) // MOVE , (d8, An, Xn) From 99981751a292063e1e9af83f5b872d6d7990ca6d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 18 Apr 2019 23:46:01 -0400 Subject: [PATCH 134/239] Adds the official NOP. Which is a freebie. --- Processors/68000/Implementation/68000Storage.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index fcaef5c7b..ddc38bd15 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -398,6 +398,8 @@ struct ProcessorStorageConstructor { MOVEUSP, // Maps a direction and register to a MOVE [to/from] USP. TRAP, // Maps to a TRAP. + + NOP, // Maps to a NOP. }; using Operation = ProcessorStorage::Operation; @@ -590,6 +592,8 @@ struct ProcessorStorageConstructor { {0xffff, 0x4e77, Operation::RTE_RTR, Decoder::RTE_RTR}, // 4-168 (p272) [RTR] {0xffff, 0x4e73, Operation::RTE_RTR, Decoder::RTE_RTR}, // 6-84 (p538) [RTE] + + {0xffff, 0x4e71, Operation::None, Decoder::NOP}, // 8-13 (p469) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -624,6 +628,10 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::NOP: { + op(Action::None, seq("np")); + } break; + case Decoder::RTE_RTR: { storage_.instructions[instruction].requires_supervisor = instruction == 0x4e73; From f67d7f1db56683e4f871f479ee6d9035c568deaf Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 11:11:38 -0400 Subject: [PATCH 135/239] Adds the final (!) set of missing MOVEs. --- .../68000/Implementation/68000Storage.cpp | 192 +++++++++--------- 1 file changed, 93 insertions(+), 99 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index ddc38bd15..53bd90054 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2435,13 +2435,13 @@ struct ProcessorStorageConstructor { // MOVE , -(An) // - case bw2(Dn, PreDec): // MOVE.bw Dn, -(An) + case bw2(Dn, PreDec): // MOVE.bw [An/Dn], -(An) op(Action::PerformOperation); op( decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; - case l2(Dn, PreDec): // MOVE.l Dn, -(An) + case l2(Dn, PreDec): // MOVE.l [An/Dn], -(An) op(Action::PerformOperation); op( int(Action::Decrement2) | MicroOp::DestinationMask, seq("np") ); op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nw- nW", { ea(1), ea(1) } )); @@ -2468,26 +2468,26 @@ struct ProcessorStorageConstructor { op(int(Action::Decrement2) | MicroOp::DestinationMask ); break; - case bw2(XXXl, PreDec): + case bw2(XXXl, PreDec): // MOVE.bw (xxx).l, -(An) op(Action::None, seq("np")); - case bw2(XXXw, PreDec): - case bw2(d16An, PreDec): - case bw2(d8AnXn, PreDec): - case bw2(d16PC, PreDec): - case bw2(d8PCXn, PreDec): + case bw2(XXXw, PreDec): // MOVE.bw (xxx).w, -(An) + case bw2(d16An, PreDec): // MOVE.bw (d16, An), -(An) + case bw2(d8AnXn, PreDec): // MOVE.bw (d8, An, Xn), -(An) + case bw2(d16PC, PreDec): // MOVE.bw (d16, PC), -(An) + case bw2(d8PCXn, PreDec): // MOVE.bw (d8, PC, Xn), -(An) op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access )); op(Action::PerformOperation); op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; - case l2(XXXl, PreDec): + case l2(XXXl, PreDec): // MOVE.l (xxx).w, -(An) op(Action::None, seq("np")); - case l2(XXXw, PreDec): - case l2(d16An, PreDec): - case l2(d8AnXn, PreDec): - case l2(d16PC, PreDec): - case l2(d8PCXn, PreDec): + case l2(XXXw, PreDec): // MOVE.l (xxx).l, -(An) + case l2(d16An, PreDec): // MOVE.l (d16, An), -(An) + case l2(d8AnXn, PreDec): // MOVE.l (d8, An, Xn), -(An) + case l2(d16PC, PreDec): // MOVE.l (d16, PC), -(An) + case l2(d8PCXn, PreDec): // MOVE.l (d8, PC, Xn), -(An) op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) } )); op(Action::PerformOperation); @@ -2496,13 +2496,13 @@ struct ProcessorStorageConstructor { op(int(Action::Decrement2) | MicroOp::DestinationMask); break; - case bw2(Imm, PreDec): + case bw2(Imm, PreDec): // MOVE.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(Action::PerformOperation); op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; - case l2(Imm, PreDec): + case l2(Imm, PreDec): // MOVE.l #, -(An) op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(Action::PerformOperation); @@ -2518,104 +2518,98 @@ struct ProcessorStorageConstructor { // MOVE , (d8, PC, Xn) // - case bw2(Dn, d16An): // MOVE.bw Dn, (d16, An) - case bw2(Dn, d8AnXn): // MOVE.bw Dn, (d8, An, Xn) - case bw2(Dn, d16PC): // MOVE.bw Dn, (d16, PC) - case bw2(Dn, d8PCXn): // MOVE.bw Dn, (d8, PC, Xn) +#define bw2d(s) bw2(s, d16An): case bw2(s, d8AnXn): case bw2(s, d16PC): case bw2(s, d8PCXn) +#define l2d(s) l2(s, d16An): case l2(s, d8AnXn): case l2(s, d16PC): case l2(s, d8PCXn) + + case bw2d(Dn): // MOVE.bw [An/Dn], (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; - case l2(Dn, d16An): // MOVE.l Dn, (d16, An) - case l2(Dn, d8AnXn): // MOVE.l Dn, (d8, An, Xn) - case l2(Dn, d16PC): // MOVE.l Dn, (d16, PC) - case l2(Dn, d8PCXn): // MOVE.l Dn, (d8, PC, Xn) + case l2d(Dn): // MOVE.l [An/Dn], (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; - case bw2(Ind, d16An): // MOVE.bw (An)[+], (d16, An) - case bw2(Ind, d8AnXn): // MOVE.bw (An)[+], (d8, An, Xn) - case bw2(Ind, d16PC): // MOVE.bw (An)[+], (d16, PC) - case bw2(Ind, d8PCXn): // MOVE.bw (An)[+], (d8, PC, Xn) + case bw2d(Ind): // MOVE.bw (An)[+], (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); break; - case l2(Ind, d16An): // MOVE.l (An)[+], (d16, An) - case l2(Ind, d8AnXn): // MOVE.l (An)[+], (d8, An, Xn) - case l2(Ind, d16PC): // MOVE.l (An)[+], (d16, PC) - case l2(Ind, d8PCXn): // MOVE.l (An)[+], (d8, PC, Xn) + case l2d(Ind): // MOVE.l (An)[+], (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); break; - // TODO: PreDec, d16An, d8AnXn, s16PC, d8PCXn. - // (4, 5, 6, 12, 13) - - case bw2(XXXl, d16An): // MOVE.bw (xxx).l, (d16, An) - case bw2(XXXl, d8AnXn): // MOVE.bw (xxx).l, (d8, An, Xn) - case bw2(XXXl, d16PC): // MOVE.bw (xxx).l, (d16, PC) - case bw2(XXXl, d8PCXn): // MOVE.bw (xxx).l, (d16, PC, Xn) - op(Action::None, seq("np")); - case bw2(XXXw, d16An): // MOVE.bw (xxx).w, (d16, An) - case bw2(XXXw, d8AnXn): // MOVE.bw (xxx).w, (d8, An, Xn) - case bw2(XXXw, d16PC): // MOVE.bw (xxx).w, (d16, PC) - case bw2(XXXw, d8PCXn): // MOVE.bw (xxx).w, (d16, PC, Xn) - op(address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); - op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); + case bw2d(PreDec): // MOVE.bw -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(decrement_action | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; - case l2(XXXl, d16An): // MOVE.l (xxx).l, (d16, An) - case l2(XXXl, d8AnXn): // MOVE.l (xxx).l, (d8, An, Xn) - case l2(XXXl, d16PC): // MOVE.l (xxx).l, (d16, PC) - case l2(XXXl, d8PCXn): // MOVE.l (xxx).l, (d16, PC, Xn) - op(Action::None, seq("np")); - case l2(XXXw, d16An): // MOVE.l (xxx).w, (d16, An) - case l2(XXXw, d8AnXn): // MOVE.l (xxx).w, (d8, An, Xn) - case l2(XXXw, d16PC): // MOVE.l (xxx).w, (d16, PC) - case l2(XXXw, d8PCXn): // MOVE.l (xxx).w, (d16, PC, Xn) - op(address_assemble_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); - op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); + case l2d(PreDec): // MOVE.l -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(decrement_action | MicroOp::SourceMask, seq("n")); + op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); + op(Action::PerformOperation); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case bw2(Imm, d16An): // MOVE.bw #, (d16, An) - case bw2(Imm, d16PC): // MOVE.bw #, (d16, PC) - case bw2(Imm, d8PCXn): // MOVE.bw #, (d8, PC, Xn) - case bw2(Imm, d8AnXn): // MOVE.bw #, (d8, An, Xn) + case bw2d(XXXl): // MOVE.bw (xxx).l, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(Action::None, seq("np")); + case bw2d(XXXw): // MOVE.bw (xxx).w, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case bw2d(d16An): // MOVE.bw (d16, An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case bw2d(d8AnXn): // MOVE.bw (d8, An, Xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case bw2d(d16PC): // MOVE.bw (d16, PC), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case bw2d(d8PCXn): // MOVE.bw (d8, PC, xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); + op(Action::PerformOperation); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); + break; + + case l2d(XXXl): // MOVE.l (xxx).l, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(Action::None, seq("np")); + case l2d(XXXw): // MOVE.l (xxx).w, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case l2d(d16An): // MOVE.l (d16, An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case l2d(d8AnXn): // MOVE.l (d8, An, Xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case l2d(d16PC): // MOVE.l (d16, PC), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + case l2d(d8PCXn): // MOVE.l (d8, PC, xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) + op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); + op(Action::PerformOperation); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); + break; + + case bw2d(Imm): // MOVE.bw #, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; - case l2(Imm, d16An): // MOVE.l #, (d16, An) - case l2(Imm, d16PC): // MOVE.l #, (d16, PC) - case l2(Imm, d8PCXn): // MOVE.l #, (d8, PC, Xn) - case l2(Imm, d8AnXn): // MOVE.l #, (d8, An, Xn) + case l2d(Imm): // MOVE.l #, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(Action::None, seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np", combined_destination_mode))); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; +#undef bw2d +#undef l2d + // // MOVE , (xxx).W // MOVE , (xxx).L // - case bw2(Dn, XXXl): // MOVE.bw Dn, (xxx).L + case bw2(Dn, XXXl): // MOVE.bw [An/Dn], (xxx).L op(Action::None, seq("np")); - case bw2(Dn, XXXw): // MOVE.bw Dn, (xxx).W + case bw2(Dn, XXXw): // MOVE.bw [An/Dn], (xxx).W op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; - case l2(Dn, XXXl): // MOVE.l Dn, (xxx).L + case l2(Dn, XXXl): // MOVE.l [An/Dn], (xxx).L op(Action::None, seq("np")); - case l2(Dn, XXXw): // MOVE.l Dn, (xxx).W + case l2(Dn, XXXw): // MOVE.l [An/Dn], (xxx).W op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); op(Action::PerformOperation, seq("nW+ nw np", { ea(1), ea(1) })); break; @@ -2676,56 +2670,56 @@ struct ProcessorStorageConstructor { seq("nW+ nw np np", { ea(1), ea(1) })); break; - case bw2(d16PC, XXXw): - case bw2(d16An, XXXw): - case bw2(d8PCXn, XXXw): - case bw2(d8AnXn, XXXw): + case bw2(d16PC, XXXw): // MOVE.bw (d16, PC), (xxx).w + case bw2(d16An, XXXw): // MOVE.bw (d16, An), (xxx).w + case bw2(d8PCXn, XXXw): // MOVE.bw (d8, PC, Xn), (xxx).w + case bw2(d8AnXn, XXXw): // MOVE.bw (d8, An, Xn), (xxx).w op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; - case bw2(d16PC, XXXl): - case bw2(d16An, XXXl): - case bw2(d8PCXn, XXXl): - case bw2(d8AnXn, XXXl): + case bw2(d16PC, XXXl): // MOVE.bw (d16, PC), (xxx).l + case bw2(d16An, XXXl): // MOVE.bw (d16, An), (xxx).l + case bw2(d8PCXn, XXXl): // MOVE.bw (d8, PC, Xn), (xxx).l + case bw2(d8AnXn, XXXl): // MOVE.bw (d8, An, Xn), (xxx).l op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; - case l2(d16PC, XXXw): - case l2(d16An, XXXw): - case l2(d8PCXn, XXXw): - case l2(d8AnXn, XXXw): + case l2(d16PC, XXXw): // MOVE.l (d16, PC), (xxx).w + case l2(d16An, XXXw): // MOVE.l (d16, An), (xxx).w + case l2(d8PCXn, XXXw): // MOVE.l (d8, PC, Xn), (xxx).w + case l2(d8AnXn, XXXw): // MOVE.l (d8, An, Xn), (xxx).w op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(d16PC, XXXl): - case l2(d16An, XXXl): - case l2(d8PCXn, XXXl): - case l2(d8AnXn, XXXl): + case l2(d16PC, XXXl): // MOVE.l (d16, PC), (xxx).l + case l2(d16An, XXXl): // MOVE.l (d16, An), (xxx).l + case l2(d8PCXn, XXXl): // MOVE.l (d8, PC, Xn), (xxx).l + case l2(d8AnXn, XXXl): // MOVE.l (d8, An, Xn), (xxx).l op(calc_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w + case bw2(Imm, XXXw): // MOVE.bw #, (xxx).w op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; - case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l + case bw2(Imm, XXXl): // MOVE.bw #, (xxx).l storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(Action::PerformOperation); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); break; - case l2(Imm, XXXw): // MOVE.l #, (xxx).w + case l2(Imm, XXXw): // MOVE.l #, (xxx).w storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np")); @@ -2733,7 +2727,7 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(Imm, XXXl): // MOVE.l #, (xxx).l + case l2(Imm, XXXl): // MOVE.l #, (xxx).l storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); @@ -2741,48 +2735,48 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case bw2(XXXw, XXXw): // MOVE.bw (xxx).w, (xxx).w + case bw2(XXXw, XXXw): // MOVE.bw (xxx).w, (xxx).w op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np", { ea(1) }, !is_byte_access)); continue; - case bw2(XXXl, XXXw): // MOVE.bw (xxx).l, (xxx).w + case bw2(XXXl, XXXw): // MOVE.bw (xxx).l, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; - case bw2(XXXw, XXXl): // MOVE.bw (xxx).w, (xxx).L + case bw2(XXXw, XXXl): // MOVE.bw (xxx).w, (xxx).L op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); continue; - case bw2(XXXl, XXXl): // MOVE.bw (xxx).l, (xxx).l + case bw2(XXXl, XXXl): // MOVE.bw (xxx).l, (xxx).l op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nr", { ea(0) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nw np np", { ea(1) }, !is_byte_access)); break; - case l2(XXXw, XXXw): // MOVE.l (xxx).w (xxx).w + case l2(XXXw, XXXw): // MOVE.l (xxx).w (xxx).w op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(XXXl, XXXw): // MOVE.l (xxx).l, (xxx).w + case l2(XXXl, XXXw): // MOVE.l (xxx).l, (xxx).w op(int(Action::None), seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation); op(int(Action::AssembleWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); break; - case l2(XXXl, XXXl): // MOVE.l (xxx).l, (xxx).l + case l2(XXXl, XXXl): // MOVE.l (xxx).l, (xxx).l op(int(Action::None), seq("np")); - case l2(XXXw, XXXl): // MOVE.l (xxx).w (xxx).l + case l2(XXXw, XXXl): // MOVE.l (xxx).w (xxx).l op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np")); op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("nW+ nw np np", { ea(1), ea(1) })); From ee7ae11e90a4b527a8c6700d70233f8bae21b0b4 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 11:27:43 -0400 Subject: [PATCH 136/239] Implements EXG and SWAP. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 4 ++ .../Implementation/68000Implementation.hpp | 17 ++++++++ .../68000/Implementation/68000Storage.cpp | 39 +++++++++++++++++++ .../68000/Implementation/68000Storage.hpp | 2 + 4 files changed, 62 insertions(+) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 76ee6fc67..3a1a8e074 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -72,16 +72,20 @@ class EmuTOS: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 373c275a9..fb9be46ff 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -855,6 +855,23 @@ template void Processor: active_program_->destination->halves.low.halves.low = uint8_t(result); } break; + // EXG and SWAP exchange/swap words or long words. + + case Operation::EXG: { + const auto temporary = active_program_->source->full; + active_program_->source->full = active_program_->destination->full; + active_program_->destination->full = temporary; + } break; + + case Operation::SWAP: { + const auto temporary = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = active_program_->destination->halves.high.full; + active_program_->destination->halves.high.full = temporary; + + zero_result_ = active_program_->destination->full; + negative_flag_ = temporary & 0x8000; + } break; + /* Shifts and rotates. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 53bd90054..f61640cbe 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -400,6 +400,9 @@ struct ProcessorStorageConstructor { TRAP, // Maps to a TRAP. NOP, // Maps to a NOP. + + EXG, // Maps source and destination registers and an operation mode to an EXG. + SWAP, // Maps a source register to a SWAP. }; using Operation = ProcessorStorage::Operation; @@ -594,6 +597,12 @@ struct ProcessorStorageConstructor { {0xffff, 0x4e73, Operation::RTE_RTR, Decoder::RTE_RTR}, // 6-84 (p538) [RTE] {0xffff, 0x4e71, Operation::None, Decoder::NOP}, // 8-13 (p469) + + {0xf1f8, 0xc140, Operation::EXG, Decoder::EXG}, // 4-105 (p209) + {0xf1f8, 0xc148, Operation::EXG, Decoder::EXG}, // 4-105 (p209) + {0xf1f8, 0xc188, Operation::EXG, Decoder::EXG}, // 4-105 (p209) + + {0xfff8, 0x4840, Operation::SWAP, Decoder::SWAP}, // 4-185 (p289) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -628,6 +637,36 @@ struct ProcessorStorageConstructor { const int ea_mode = (instruction >> 3) & 7; switch(mapping.decoder) { + case Decoder::SWAP: { + storage_.instructions[instruction].set_destination(storage_, Dn, ea_register); + op(Action::None, seq("np")); + } break; + + case Decoder::EXG: { + const int data_register = (instruction >> 9) & 7; + + switch((instruction >> 3)&31) { + default: continue; + + case 0x08: + storage_.instructions[instruction].set_source(storage_, Dn, data_register); + storage_.instructions[instruction].set_destination(storage_, Dn, ea_register); + break; + + case 0x09: + storage_.instructions[instruction].set_source(storage_, An, data_register); + storage_.instructions[instruction].set_destination(storage_, An, ea_register); + break; + + case 0x11: + storage_.instructions[instruction].set_source(storage_, Dn, data_register); + storage_.instructions[instruction].set_destination(storage_, An, ea_register); + break; + } + + op(Action::None, seq("np")); + } break; + case Decoder::NOP: { op(Action::None, seq("np")); } break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index ce504c499..21deca651 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -96,6 +96,8 @@ class ProcessorStorage { RTE_RTR, TRAP, + + EXG, SWAP, }; /*! From 9ef7743205044e3840373e73dfe53cd2cd9e8d9c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 13:29:20 -0400 Subject: [PATCH 137/239] Attempts to unify type decoding a little further. --- .../68000/Implementation/68000Storage.cpp | 96 +++++++++---------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index f61640cbe..d42e82828 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -62,7 +62,6 @@ struct ProcessorStorageConstructor { case XXXw: return int(Action::AssembleWordAddressFromPrefetch); case XXXl: return int(Action::AssembleLongWordAddressFromPrefetch); } - } int combined_mode(int mode, int reg, bool collapse_an_dn = false, bool collapse_postinc = false) { @@ -77,6 +76,16 @@ struct ProcessorStorageConstructor { return int(((mode & 0xff) == XXXw) ? Action::AssembleWordDataFromPrefetch : Action::AssembleLongWordDataFromPrefetch); } + int increment_action(bool is_long_word_access, bool is_byte_access) const { + using Action = ProcessorBase::MicroOp::Action; + return int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); + } + + int decrement_action(bool is_long_word_access, bool is_byte_access) const { + using Action = ProcessorBase::MicroOp::Action; + return int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); + } + #define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n " x : x) /*! @@ -632,9 +641,19 @@ struct ProcessorStorageConstructor { auto operation = mapping.operation; const auto micro_op_start = storage_.all_micro_ops_.size(); - // The following fields are used commonly enough to be worht pulling out here. + // The following fields are used commonly enough to be worth pulling out here. const int ea_register = instruction & 7; const int ea_mode = (instruction >> 3) & 7; + const int data_register = (instruction >> 9) & 7; + const int op_mode = (instruction >> 6)&7; + const bool op_mode_high_bit = !!(op_mode&4); + + // These are almost always true; they're non-const so that they can be corrected + // by the few deviations. + bool is_byte_access = (op_mode&3) == 0; + bool is_long_word_access = (op_mode&3) == 2; + int dec = decrement_action(is_long_word_access, is_byte_access); + int inc = increment_action(is_long_word_access, is_byte_access); switch(mapping.decoder) { case Decoder::SWAP: { @@ -643,8 +662,6 @@ struct ProcessorStorageConstructor { } break; case Decoder::EXG: { - const int data_register = (instruction >> 9) & 7; - switch((instruction >> 3)&31) { default: continue; @@ -681,17 +698,12 @@ struct ProcessorStorageConstructor { } break; case Decoder::AND_OR_EOR: { - const bool to_ea = !!((instruction >> 8)&1); + const bool to_ea = op_mode_high_bit; const bool is_eor = (instruction >> 12) == 0xb; - const int op_mode = (instruction >> 6)&7; // Weed out illegal operation modes. if(op_mode == 7) continue; - const bool is_byte_access = !!((instruction >> 6)&3); - const bool is_long_word_access = ((instruction >> 6)&3) == 2; - - const int data_register = (instruction >> 9) & 7; const int mode = combined_mode(ea_mode, ea_register); if(to_ea) { @@ -903,8 +915,6 @@ struct ProcessorStorageConstructor { case Decoder::EORI_ORI_ANDI_SUBI_ADDI: { const int mode = combined_mode(ea_mode, ea_register); - const bool is_byte_access = !!((instruction >> 6)&3); - const bool is_long_word_access = ((instruction >> 6)&3) == 2; // Source is always something cribbed from the instruction stream; // destination is going to be in the write address unit. @@ -1021,11 +1031,8 @@ struct ProcessorStorageConstructor { // ADD and SUB definitely always involve a data register and an arbitrary addressing mode; // which direction they operate in depends on bit 8. const bool reverse_source_destination = !(instruction & 256); - const int data_register = (instruction >> 9) & 7; const int mode = combined_mode(ea_mode, ea_register); - const bool is_byte_access = !!((instruction >> 6)&3); - const bool is_long_word_access = ((instruction >> 6)&3) == 2; if(reverse_source_destination) { storage_.instructions[instruction].destination = &storage_.data_[data_register]; @@ -1216,7 +1223,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); - const bool is_long_word_access = !!((instruction >> 8)&1); + is_long_word_access = op_mode_high_bit; switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; @@ -1304,8 +1311,6 @@ struct ProcessorStorageConstructor { case Decoder::ADDQ_SUBQ: { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); - const bool is_long_word_access = ((instruction >> 6)&3) == 2; - const bool is_byte_access = ((instruction >> 6)&3) == 0; const int mode = combined_mode(ea_mode, ea_register); switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; @@ -1591,9 +1596,6 @@ struct ProcessorStorageConstructor { } break; case Decoder::CLR_NEG_NEGX_NOT: { - const bool is_byte_access = !!((instruction >> 6)&3); - const bool is_long_word_access = ((instruction >> 6)&3) == 2; - storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); @@ -1677,9 +1679,6 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination = &storage_.data_[source_register]; storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); - const bool is_long_word_access = mapping.operation == Operation::CMPl; - const bool is_byte_access = mapping.operation == Operation::CMPb; - // Byte accesses are not allowed with address registers. if(is_byte_access && ea_mode == 1) { continue; @@ -1781,7 +1780,6 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].destination = &storage_.address_[destination_register]; const int mode = combined_mode(ea_mode, ea_register); - const bool is_long_word_access = mapping.operation == Operation::CMPl; switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; @@ -1875,8 +1873,6 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.source_bus_data_[0]; storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); - const bool is_byte_access = mapping.operation == Operation::CMPb; - const bool is_long_word_access = mapping.operation == Operation::CMPl; const int mode = combined_mode(destination_mode, destination_register); switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; @@ -2308,11 +2304,11 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); storage_.instructions[instruction].set_destination(storage_, destination_mode, destination_register); - const bool is_byte_access = mapping.operation == Operation::MOVEb; - const bool is_long_word_access = mapping.operation == Operation::MOVEl; - - const int decrement_action = int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); - const int increment_action = int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); + // These don't come from the usual place. + is_byte_access = mapping.operation == Operation::MOVEb; + is_long_word_access = mapping.operation == Operation::MOVEl; + dec = decrement_action(is_long_word_access, is_byte_access); + inc = increment_action(is_long_word_access, is_byte_access); const int combined_source_mode = combined_mode(ea_mode, ea_register, true, true); const int combined_destination_mode = combined_mode(destination_mode, destination_register, true, true); @@ -2342,7 +2338,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, Dn): // MOVE[A].l -(An), [An/Dn] - op(decrement_action | MicroOp::SourceMask, seq("n")); + op(dec | MicroOp::SourceMask, seq("n")); case l2(Ind, Dn): // MOVE[A].l (An)[+], [An/Dn] op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); @@ -2354,7 +2350,7 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, Dn): // MOVE[A].bw -(An), [An/Dn] - op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(dec | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -2408,7 +2404,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, Ind): // MOVE.l -(An), (An)[+] - op(decrement_action | MicroOp::SourceMask, seq("n")); + op(dec | MicroOp::SourceMask, seq("n")); case l2(Ind, Ind): // MOVE.l (An)[+], (An)[+] op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); @@ -2421,7 +2417,7 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, Ind): // MOVE.bw -(An), (An)[+] - op(decrement_action | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); + op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); op(Action::PerformOperation, seq("nw np", { a(destination_register) })); break; @@ -2476,7 +2472,7 @@ struct ProcessorStorageConstructor { case bw2(Dn, PreDec): // MOVE.bw [An/Dn], -(An) op(Action::PerformOperation); - op( decrement_action | MicroOp::DestinationMask, + op( dec| MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; @@ -2491,14 +2487,14 @@ struct ProcessorStorageConstructor { // e.g. MOVE.w -(A6), -(A6) case bw2(PreDec, PreDec): // MOVE.bw -(An), -(An) - op(decrement_action | MicroOp::SourceMask, seq("n")); + op(dec | MicroOp::SourceMask, seq("n")); case bw2(Ind, PreDec): // MOVE.bw (An)[+], -(An) - op(decrement_action | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); + op(dec | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(PreDec, PreDec): // MOVE.l -(An), -(An) - op(decrement_action | MicroOp::SourceMask, seq("n")); + op(dec | MicroOp::SourceMask, seq("n")); case l2(Ind, PreDec): // MOVE.l (An)[+], -(An) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) } )); op(Action::PerformOperation); @@ -2517,7 +2513,7 @@ struct ProcessorStorageConstructor { op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access )); op(Action::PerformOperation); - op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + op(dec | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(XXXl, PreDec): // MOVE.l (xxx).w, -(An) @@ -2538,7 +2534,7 @@ struct ProcessorStorageConstructor { case bw2(Imm, PreDec): // MOVE.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(Action::PerformOperation); - op(decrement_action | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + op(dec | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(Imm, PreDec): // MOVE.l #, -(An) @@ -2582,13 +2578,13 @@ struct ProcessorStorageConstructor { break; case bw2d(PreDec): // MOVE.bw -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) - op(decrement_action | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; case l2d(PreDec): // MOVE.l -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) - op(decrement_action | MicroOp::SourceMask, seq("n")); + op(dec | MicroOp::SourceMask, seq("n")); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); @@ -2679,20 +2675,20 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, XXXw): // MOVE.bw -(An), (xxx).W - op( decrement_action | MicroOp::SourceMask); + op( dec | MicroOp::SourceMask); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np", { ea(1) })); break; case bw2(PreDec, XXXl): // MOVE.bw -(An), (xxx).L - op(decrement_action | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(dec | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask); op(Action::PerformOperation, seq("nw np np", { ea(1) })); break; case l2(PreDec, XXXw): // MOVE.l -(An), (xxx).W - op( decrement_action | MicroOp::SourceMask); + op( dec | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) } )); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); @@ -2701,7 +2697,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, XXXl): // MOVE.l -(An), (xxx).L - op( decrement_action | MicroOp::SourceMask); + op( dec | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np", { ea(0), ea(0) } )); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); @@ -2831,7 +2827,7 @@ struct ProcessorStorageConstructor { // If any post-incrementing was involved, do the post increment(s). if(ea_mode == PostInc || destination_mode == PostInc) { op( - increment_action | + inc | (ea_mode == PostInc ? MicroOp::SourceMask : 0) | (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); } @@ -2854,8 +2850,6 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); - const bool is_byte_access = operation == Operation::TSTb; - const bool is_long_word_access = operation == Operation::TSTl; switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; From 2d97fc1f5955d7f7f7dc1f74510a45593adb0791 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 13:29:35 -0400 Subject: [PATCH 138/239] Beefs up documentation and developer support. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 2 +- Processors/68000/68000.hpp | 37 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 3a1a8e074..a88cd0d53 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -121,7 +121,7 @@ class EmuTOS: public CPU::MC68000::BusHandler { - (void)testStartup { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. - _machine->run_for(HalfCycles(400000)); + _machine->run_for(HalfCycles(8000000)); } @end diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index ebbb4c5e4..3181daf33 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -117,20 +117,53 @@ struct Microcycle { } /*! + Obtains the mask to apply to a word that will leave only the byte this microcycle is selecting. + @returns 0x00ff if this byte access wants the low part of a 16-bit word; 0xff00 if it wants the high part. */ - inline unsigned int byte_mask() const { - return 0xff00 >> (((*address) & 1) << 3); + inline uint16_t byte_mask() const { + return uint16_t(0xff00) >> (((*address) & 1) << 3); } + /*! + Obtains the mask to apply to a word that will leave only the byte this microcycle **isn't** selecting. + i.e. this is the part of a word that should be untouched by this microcycle. + + @returns 0xff00 if this byte access wants the low part of a 16-bit word; 0x00ff if it wants the high part. + */ + inline uint16_t untouched_byte_mask() const { + return uint16_t(uint16_t(0xff) << (((*address) & 1) << 3)); + } + + /*! + Assuming this cycle is a byte write, mutates @c destination by writing the byte to the proper upper or + lower part, retaining the other half. + */ + uint16_t write_byte(uint16_t destination) const { + return uint16_t((destination & untouched_byte_mask()) | (value->halves.low << byte_shift())); + } + + /*! + @returns non-zero if this is a byte read and 68000 LDS is asserted. + */ inline int lower_data_select() const { return (operation & SelectByte) & ((*address & 1) << 3); } + /*! + @returns non-zero if this is a byte read and 68000 UDS is asserted. + */ inline int upper_data_select() const { return (operation & SelectByte) & ~((*address & 1) << 3); } + /*! + @returns the address being accessed at the precision a 68000 supplies it — + only 24 address bit precision, with the low bit shifted out. So it's the + 68000 address at word precision: address 0 is the first word in the address + space, address 1 is the second word (i.e. the third and fourth bytes) in + the address space, etc. + */ uint32_t word_address() const { return (address ? (*address) & 0x00fffffe : 0) >> 1; } From a49f5162652441a0d885892f477c5142b6360e59 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 22:41:06 -0400 Subject: [PATCH 139/239] Corrects direction of MOVE [to/from] USP. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 ++++---- .../68000/Implementation/68000Implementation.hpp | 15 +++++++++++++-- Processors/68000/Implementation/68000Storage.cpp | 14 +++++++++----- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index a816ef827..21f378f69 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index fb9be46ff..b34524dda 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -59,7 +59,18 @@ template void Processor: // for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; // for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; // } - std::cout << '\n'; + static bool should_log = false; + + should_log |= program_counter_.full > 0x286; + if(should_log) { + std::cout << "a7:" << std::setw(8) << std::setfill('0') << address_[7].full << " "; + if(is_supervisor_) { + std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; + } else { + std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; + } + std::cout << '\n'; + } decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -67,7 +78,7 @@ 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 { - std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; + if(should_log) 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 d42e82828..c0cf86422 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -655,6 +655,10 @@ struct ProcessorStorageConstructor { int dec = decrement_action(is_long_word_access, is_byte_access); int inc = increment_action(is_long_word_access, is_byte_access); + if(instruction == 0x4eda) { + printf(""); + } + switch(mapping.decoder) { case Decoder::SWAP: { storage_.instructions[instruction].set_destination(storage_, Dn, ea_register); @@ -2282,15 +2286,15 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].requires_supervisor = true; // Observation here: because this is a privileged instruction, the user stack pointer - // definitely isn't currently A7. + // definitely isn't currently [copied into] A7. if(instruction & 0x8) { // Transfer FROM the USP. - storage_.instructions[instruction].destination = &storage_.stack_pointers_[0]; - storage_.instructions[instruction].set_source(storage_, An, ea_register); - } else { - // Transfer TO the USP. storage_.instructions[instruction].source = &storage_.stack_pointers_[0]; storage_.instructions[instruction].set_destination(storage_, An, ea_register); + } else { + // Transfer TO the USP. + storage_.instructions[instruction].set_source(storage_, An, ea_register); + storage_.instructions[instruction].destination = &storage_.stack_pointers_[0]; } op(Action::PerformOperation, seq("np")); From 2cac4b0d748668d1004bad414d58334c209815a3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 19 Apr 2019 23:02:41 -0400 Subject: [PATCH 140/239] Corrects EA usage for ADDA and SUBA. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 ++++---- Processors/68000/Implementation/68000Implementation.hpp | 2 ++ Processors/68000/Implementation/68000Storage.cpp | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 21f378f69..c7d902561 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x]\n ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x]\n", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x]\n", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x]\n", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index b34524dda..6518bafc5 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -63,6 +63,8 @@ template void Processor: should_log |= program_counter_.full > 0x286; if(should_log) { + std::cout << "a5:" << std::setw(8) << std::setfill('0') << address_[5].full << " "; + std::cout << "a6:" << std::setw(8) << std::setfill('0') << address_[6].full << " "; std::cout << "a7:" << std::setw(8) << std::setfill('0') << address_[7].full << " "; if(is_supervisor_) { std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index c0cf86422..b11040146 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1272,14 +1272,14 @@ struct ProcessorStorageConstructor { case bw(d16An): // ADDA/SUBA.w (d16, An), An case bw(d8AnXn): // ADDA/SUBA.w (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nr np nn", mode), { ea(1) })); + seq(pseq("np nr np nn", mode), { ea(0) })); op(Action::PerformOperation); break; case l(d16An): // ADDA/SUBA.l (d16, An), An case l(d8AnXn): // ADDA/SUBA.l (d8, An, Xn), An op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nR+ nr np n", mode), { ea(1), ea(1) })); + seq(pseq("np nR+ nr np n", mode), { ea(0), ea(0) })); op(Action::PerformOperation); break; @@ -1287,7 +1287,7 @@ struct ProcessorStorageConstructor { op(Action::None, seq("np")); case bw(XXXw): // ADDA/SUBA.w (xxx).w, An op( address_assemble_for_mode(mode) | MicroOp::SourceMask, - seq("np nr np nn", { ea(1) })); + seq("np nr np nn", { ea(0) })); op(Action::PerformOperation); break; @@ -1295,7 +1295,7 @@ struct ProcessorStorageConstructor { op(Action::None, seq("np")); case l(XXXw): // ADDA/SUBA.l (xxx).w, An op( address_assemble_for_mode(mode) | MicroOp::SourceMask, - seq("np nR+ nr np n", { ea(1), ea(1) })); + seq("np nR+ nr np n", { ea(0), ea(0) })); op( Action::PerformOperation); break; From ef33b004f95a48520a86c99fe07bc5e0f32d3072 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 15:13:12 -0400 Subject: [PATCH 141/239] Corrects word access order of MOVEM.l. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 ++++---- Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index c7d902561..9d64ee88e 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x]\n ", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[word r %08x -> %04x]\t", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x]\n", *cycle.address, cycle.value->halves.low); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[byte r %08x -> %02x]\t", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x]\n", cycle.value->full, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{word w %04x -> %08x}\t", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x]\n", cycle.value->halves.low, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{byte w %02x -> %08x}\t", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 6518bafc5..58bfa9857 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -580,8 +580,8 @@ template void Processor: step[2].microcycle.address = step[3].microcycle.address = address_storage + 1; \ \ const auto target = (offset > 7) ? &address_[offset&7] : &data_[offset]; \ - step[(l^2)].microcycle.value = step[(l^2)+1].microcycle.value = &target->halves.high; \ - step[l].microcycle.value = step[l+1].microcycle.value = &target->halves.low; \ + step[l].microcycle.value = step[l+1].microcycle.value = &target->halves.high; \ + step[(l^2)].microcycle.value = step[(l^2)+1].microcycle.value = &target->halves.low; \ \ address_storage += 2; \ step += 4; \ From a90f12dab7d0e8384a31df4ce19f60c1ce3fc95e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 15:49:32 -0400 Subject: [PATCH 142/239] Corrects return address for TRAP. --- Processors/68000/Implementation/68000Implementation.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 58bfa9857..c3eb1475a 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -701,6 +701,9 @@ template void Processor: precomputed_addresses_[1] = address_[7].full - 6; precomputed_addresses_[2] = address_[7].full - 4; address_[7].full -= 6; + + // The program counter to push is actually one slot ago. + program_counter_.full -= 2; } break; /* From 0be9a0cb88b8aaeaecc6e231e4cdf949d5fdb6c7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 18:35:19 -0400 Subject: [PATCH 143/239] Corrects Scc (and other conditionals) for complex addressing modes. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 ++++---- .../68000/Implementation/68000Implementation.hpp | 16 ++++++++++------ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 9d64ee88e..1e14e326d 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[word r %08x -> %04x]\t", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[%08x -> %04x]\t", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[byte r %08x -> %02x]\t", *cycle.address, cycle.value->halves.low); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[%08x -> %02x]\t", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{word w %04x -> %08x}\t", cycle.value->full, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{%04x -> %08x}\t", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{byte w %02x -> %08x}\t", cycle.value->halves.low, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{%02x -> %08x}\t", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index c3eb1475a..f4d342683 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -61,10 +61,13 @@ template void Processor: // } static bool should_log = false; - should_log |= program_counter_.full > 0x286; + should_log |= program_counter_.full >= 0x4F54; if(should_log) { - std::cout << "a5:" << std::setw(8) << std::setfill('0') << address_[5].full << " "; - std::cout << "a6:" << std::setw(8) << std::setfill('0') << address_[6].full << " "; + std::cout << "d0:" << std::setw(8) << std::setfill('0') << data_[0].full << " "; + std::cout << "d1:" << std::setw(8) << std::setfill('0') << data_[1].full << " "; + std::cout << "d2:" << std::setw(8) << std::setfill('0') << data_[2].full << " "; +// std::cout << "a5:" << std::setw(8) << std::setfill('0') << address_[5].full << " "; +// std::cout << "a6:" << std::setw(8) << std::setfill('0') << address_[6].full << " "; std::cout << "a7:" << std::setw(8) << std::setfill('0') << address_[7].full << " "; if(is_supervisor_) { std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; @@ -80,6 +83,7 @@ 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'; } @@ -319,7 +323,7 @@ template void Processor: const bool is_bsr = ((decoded_instruction_ >> 8) & 0xf) == 1; // Test the conditional, treating 'false' as true. - const bool should_branch = is_bsr || evaluate_condition(prefetch_queue_.halves.high.halves.high); + const bool should_branch = is_bsr || evaluate_condition(decoded_instruction_ >> 8); // Schedule something appropriate, by rewriting the program for this instruction temporarily. if(should_branch) { @@ -341,7 +345,7 @@ template void Processor: case Operation::DBcc: { // Decide what sort of DBcc this is. - if(!evaluate_condition(prefetch_queue_.halves.high.halves.high)) { + if(!evaluate_condition(decoded_instruction_ >> 8)) { -- active_program_->source->halves.low.full; const auto target_program_counter = program_counter_.full + int16_t(prefetch_queue_.halves.low.full) - 2; @@ -365,7 +369,7 @@ template void Processor: case Operation::Scc: { active_program_->destination->halves.low.halves.low = - evaluate_condition(prefetch_queue_.halves.high.halves.high) ? 0xff : 0x00; + evaluate_condition(decoded_instruction_ >> 8) ? 0xff : 0x00; } break; /* From c66728dce254cc75c28b6c7a9027c58f88c34dfe Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 21:21:33 -0400 Subject: [PATCH 144/239] 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); From b78ea7d24c22cada800855fe26957efdd0c2b441 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 20 Apr 2019 21:23:36 -0400 Subject: [PATCH 145/239] Further simplifies CMPA. --- .../68000/Implementation/68000Storage.cpp | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 17819f9f5..156efde9d 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1788,14 +1788,12 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); storage_.instructions[instruction].destination = &storage_.address_[destination_register]; - const int mode = combined_mode(ea_mode, ea_register); + const int mode = combined_mode(ea_mode, ea_register, true); switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; - case bw(Dn): // CMPA.w Dn, An - case bw(An): // CMPA.w An, An - case l(Dn): // CMPA.l Dn, An - case l(An): // CMPA.l An, An + case bw(Dn): // CMPA.w [An/Dn], An + case l(Dn): // CMPA.l [An/Dn], An op(Action::PerformOperation, seq("np n")); break; @@ -1803,7 +1801,7 @@ struct ProcessorStorageConstructor { case bw(PostInc): // CMPA.w (An)+, An op(Action::None, seq("nr", { a(ea_register) })); op(Action::PerformOperation, seq("np n")); - if(ea_mode == PostInc) { + if(mode == PostInc) { op(int(Action::Increment2) | MicroOp::SourceMask); } break; @@ -1812,7 +1810,7 @@ struct ProcessorStorageConstructor { case l(PostInc): // CMPA.l (An)+, An op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); - if(ea_mode == PostInc) { + if(mode == PostInc) { op(int(Action::Increment4) | MicroOp::SourceMask); } break; @@ -1828,35 +1826,25 @@ struct ProcessorStorageConstructor { op(Action::PerformOperation, seq("np n")); break; + case bw(XXXl): // CMPA.w (xxx).l, An + op(Action::None, seq("np")); + case bw(XXXw): // CMPA.w (xxx).w, An case bw(d16PC): // CMPA.w (d16, PC), An case bw(d8PCXn): // CMPA.w (d8, PC, Xn), An case bw(d16An): // CMPA.w (d16, An), An case bw(d8AnXn): // CMPA.w (d8, An, Xn), An - op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nr", mode), { ea(0) })); - op(Action::PerformOperation, seq("np n")); - break; - - case l(d16PC): // CMPA.l (d16, PC), An - case l(d8PCXn): // CMPA.l (d8, PC, Xn), An - case l(d16An): // CMPA.l (d16, An), An - case l(d8AnXn): // CMPA.l (d8, An, Xn), An - op( calc_action_for_mode(mode) | MicroOp::SourceMask, - seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); - op(Action::PerformOperation, seq("np n")); - break; - - case bw(XXXl): // CMPA.w (xxx).l, An - op(Action::None, seq("np")); - case bw(XXXw): // CMPA.w (xxx).w, An - op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nr", { ea(0) })); + op(address_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nr", mode), { ea(0) })); op(Action::PerformOperation, seq("np n")); break; case l(XXXl): // CMPA.l (xxx).l, An op(Action::None, seq("np")); case l(XXXw): // CMPA.l (xxx).w, An - op(address_assemble_for_mode(mode) | MicroOp::SourceMask, seq("np nR+ nr", { ea(0), ea(0) })); + case l(d16PC): // CMPA.l (d16, PC), An + case l(d8PCXn): // CMPA.l (d8, PC, Xn), An + case l(d16An): // CMPA.l (d16, An), An + case l(d8AnXn): // CMPA.l (d8, An, Xn), An + op(address_action_for_mode(mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", mode), { ea(0), ea(0) })); op(Action::PerformOperation, seq("np n")); break; From 3cb042a49dbdb302e409c6ec54e16f3dfe11f462 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 21 Apr 2019 22:08:18 -0400 Subject: [PATCH 146/239] Corrects the carry and extend flags for various long-word operations. --- Machines/Electron/Electron.cpp | 1 + .../Mac/Clock SignalTests/EmuTOSTests.mm | 8 +++--- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 +++--- .../Implementation/68000Implementation.hpp | 28 +++++++------------ 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index 75269411a..383793397 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -62,6 +62,7 @@ class ConcreteMachine: set_clock_rate(2000000); speaker_.set_input_rate(2000000 / SoundGenerator::clock_rate_divider); + speaker_.set_high_frequency_cutoff(7000); std::vector rom_names = {"basic.rom", "os.rom"}; if(target.has_adfs) { diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index a88cd0d53..09a30863f 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -72,20 +72,20 @@ class EmuTOS: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word r %08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte r %08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[word w %04x -> %08x] ", cycle.value->full, *cycle.address); base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[byte w %02x -> %08x] ", cycle.value->halves.low, *cycle.address); base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 1e14e326d..196d2b90f 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[%08x -> %04x]\t", *cycle.address, cycle.value->full); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n[%08x -> %02x]\t", *cycle.address, cycle.value->halves.low); + if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{%04x -> %08x}\t", cycle.value->full, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("{%04x -> %08x} ", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("\n{%02x -> %08x}\t", cycle.value->halves.low, *cycle.address); + if(!(cycle.operation & Microcycle::IsProgram)) printf("{%02x -> %08x} ", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 5ee846a65..af444ab49 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,30 +52,22 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. -// if(program_counter_.full >= 0x250 && program_counter_.full <= 0x25e) { -// std::cout << std::setfill('0'); -// std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); -// std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; -// for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; -// for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; -// } static bool should_log = false; - 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 << " "; - std::cout << "d2:" << std::setw(8) << std::setfill('0') << data_[2].full << " "; -// std::cout << "a5:" << std::setw(8) << std::setfill('0') << address_[5].full << " "; -// std::cout << "a6:" << std::setw(8) << std::setfill('0') << address_[6].full << " "; - std::cout << "a7:" << std::setw(8) << std::setfill('0') << address_[7].full << " "; +// should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; +// if(should_log) { + std::cout << std::setfill('0'); + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; if(is_supervisor_) { std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; } else { std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; } std::cout << '\n'; - } +// } decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -157,7 +149,7 @@ template void Processor: #define addsubl(a, b, dest, op, overflow) \ const auto source = a; \ const auto destination = b; \ - const uint64_t result = op(destination, source); \ + const uint64_t result = op(uint64_t(destination), uint64_t(source)); \ \ zero_result_ = dest = uint32_t(result); \ extend_flag_ = carry_flag_ = result >> 32; \ @@ -420,7 +412,7 @@ template void Processor: case Operation::CMPl: { const uint32_t source = active_program_->source->full; const uint32_t destination = active_program_->destination->full; - const uint64_t result = destination - source; + const uint64_t result = uint64_t(destination) - uint64_t(source); zero_result_ = uint32_t(result); carry_flag_ = result >> 32; From 44eb4e51ed803976b26516b0c58561e14f12b414 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 21 Apr 2019 22:54:20 -0400 Subject: [PATCH 147/239] Ensures DBcc properly signals program fetches. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 8 +++---- .../Implementation/68000Implementation.hpp | 24 +++++++++---------- .../68000/Implementation/68000Storage.cpp | 3 +++ 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 196d2b90f..3f278b645 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -71,20 +71,20 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; - if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %04x] ", *cycle.address, cycle.value->full); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); - if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %02x] ", *cycle.address, cycle.value->halves.low); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("{%04x -> %08x} ", cycle.value->full, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("{%04x -> %08x} ", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); - if(!(cycle.operation & Microcycle::IsProgram)) printf("{%02x -> %08x} ", cycle.value->halves.low, *cycle.address); +// if(!(cycle.operation & Microcycle::IsProgram)) printf("{%02x -> %08x} ", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index af444ab49..8455b7999 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -56,17 +56,17 @@ template void Processor: // should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; // if(should_log) { - std::cout << std::setfill('0'); - std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); - std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; - if(is_supervisor_) { - std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; - } else { - std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; - } - std::cout << '\n'; +// std::cout << std::setfill('0'); +// std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); +// std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; +// for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; +// for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; +// if(is_supervisor_) { +// std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; +// } else { +// std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; +// } +// std::cout << '\n'; // } decoded_instruction_ = prefetch_queue_.halves.high.full; @@ -76,7 +76,7 @@ template void Processor: return; } else { // if(0x4f7a == program_counter_.full - 4)return; - std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; +// 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 156efde9d..8083f45af 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -3002,6 +3002,7 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { const size_t dbcc_condition_true_offset = constructor.assemble_program("nn np np"); const size_t dbcc_condition_false_no_branch_offset = constructor.assemble_program("n nr np np", { &dbcc_false_address_ }); const size_t dbcc_condition_false_branch_offset = constructor.assemble_program("n np np"); + // That nr in dbcc_condition_false_no_branch_offset is to look like an np from the wrong address. // The reads steps needs to be 32 long-word reads plus an overflow word; the writes just the long words. // Addresses and data sources/targets will be filled in at runtime, so anything will do here. @@ -3033,6 +3034,8 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { dbcc_condition_true_steps_ = &all_bus_steps_[dbcc_condition_true_offset]; dbcc_condition_false_no_branch_steps_ = &all_bus_steps_[dbcc_condition_false_no_branch_offset]; + dbcc_condition_false_no_branch_steps_[1].microcycle.operation |= Microcycle::IsProgram; + dbcc_condition_false_no_branch_steps_[2].microcycle.operation |= Microcycle::IsProgram; dbcc_condition_false_branch_steps_ = &all_bus_steps_[dbcc_condition_false_branch_offset]; movem_read_steps_ = &all_bus_steps_[movem_read_offset]; From 55073b0a52d3e06206fae9262e912ae7da9c6d89 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 21 Apr 2019 22:55:23 -0400 Subject: [PATCH 148/239] Corrects a bunch of MOVEs to (d8/16, PC/An, [Xn]). --- Processors/68000/Implementation/68000Storage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 8083f45af..e526e4587 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2596,7 +2596,7 @@ struct ProcessorStorageConstructor { case bw2d(d8PCXn): // MOVE.bw (d8, PC, xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access)); op(Action::PerformOperation); - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np nw np", combined_destination_mode), { ea(1) }, !is_byte_access)); break; case l2d(XXXl): // MOVE.l (xxx).l, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) @@ -2608,7 +2608,7 @@ struct ProcessorStorageConstructor { case l2d(d8PCXn): // MOVE.l (d8, PC, xn), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) op(address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nR+ nr", combined_source_mode), { ea(0), ea(0) })); op(Action::PerformOperation); - op(calc_action_for_mode(combined_destination_mode) | MicroOp::SourceMask, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); + op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq(pseq("np nW+ nw np", combined_destination_mode), { ea(1), ea(1) })); break; case bw2d(Imm): // MOVE.bw #, (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) From 6d6046757d162d6b59cf268430b9e3c69c87c7fb Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 22 Apr 2019 15:41:09 -0400 Subject: [PATCH 149/239] Fixes predecrementing MOVEM to leave the proper address in the relevant register. --- OSBindings/Mac/Clock SignalTests/QLTests.mm | 5 +++++ Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 3f278b645..779677325 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -11,6 +11,9 @@ #include #include +#include +#include + #include "68000.hpp" #include "CSROMFetcher.hpp" @@ -107,6 +110,8 @@ class QL: public CPU::MC68000::BusHandler { std::unique_ptr _machine; } +std::streambuf *coutbuf; + - (void)setUp { const auto roms = CSROMFetcher()("SinclairQL", {"js.rom"}); _machine.reset(new QL(*roms[0])); diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 8455b7999..6cfa2b656 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -52,7 +52,7 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. - static bool should_log = false; +// static bool should_log = false; // should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; // if(should_log) { @@ -654,7 +654,7 @@ template void Processor: offset = 15; start_address -= 2; write_address_sequence_long(dec_action, 2); - movem_final_address_ = start_address; + movem_final_address_ = start_address + 2; } else { write_address_sequence_long(inc_action, 0); } From 20e774be1ec08dc83bec72a396ca74f4b10e26dd Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 22 Apr 2019 21:11:49 -0400 Subject: [PATCH 150/239] Corrects return address of JSR (An). --- .../68000/Implementation/68000Implementation.hpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 6cfa2b656..793c0a347 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -75,7 +75,7 @@ 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(0x4f7a == program_counter_.full - 4) return; // std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; } @@ -1152,11 +1152,19 @@ template void Processor: } } break; - case int(MicroOp::Action::PrepareJSR): + case int(MicroOp::Action::PrepareJSR): { + const auto mode = (decoded_instruction_ >> 3) & 7; + // Determine the proper resumption address. + switch(mode) { + case 2: destination_bus_data_[0].full = program_counter_.full - 2; break; /* (An) */ + default: + destination_bus_data_[0].full = program_counter_.full; /* Everything other than (An) */ + break; + } destination_bus_data_[0].full = program_counter_.full; address_[7].full -= 4; effective_address_[1].full = address_[7].full; - break; + } break; case int(MicroOp::Action::PrepareBSR): destination_bus_data_[0].full = (decoded_instruction_ & 0xff) ? program_counter_.full - 2 : program_counter_.full; From 7c132a3ed5b3c0fe07f4d1c890f77a864309c0b9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 22 Apr 2019 22:13:02 -0400 Subject: [PATCH 151/239] Ensures 16-bit values of Xn for (d8, An, Xn) are sign extended. --- Processors/68000/Implementation/68000Implementation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 793c0a347..53a7768cc 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1266,7 +1266,7 @@ template void Processor: target.full = int8_t(data.halves.low) + source; \ \ if(data.full & 0x800) { \ - target.full += displacement.halves.low.full; \ + target.full += int16_t(displacement.halves.low.full); \ } else { \ target.full += displacement.full; \ } \ From a08043ae88cffbbf7a327974e478fd930184028e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 23 Apr 2019 19:01:58 -0400 Subject: [PATCH 152/239] Ensures that MOVE.b #, (xxx).l writes only a byte. Also rearranges some of the temporary logging functionality. --- .../Mac/Clock SignalTests/EmuTOSTests.mm | 16 +++---- OSBindings/Mac/Clock SignalTests/QLTests.mm | 4 -- .../Implementation/68000Implementation.hpp | 43 +++++++++++++------ .../68000/Implementation/68000Storage.cpp | 2 +- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm index 09a30863f..87dada896 100644 --- a/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm +++ b/OSBindings/Mac/Clock SignalTests/EmuTOSTests.mm @@ -57,14 +57,14 @@ class EmuTOS: public CPU::MC68000::BusHandler { peripheral_result = 0x00000001; break; } - printf("Peripheral: %c %08x", (cycle.operation & Microcycle::Read) ? 'r' : 'w', *cycle.address); - if(!(cycle.operation & Microcycle::Read)) { - if(cycle.operation & Microcycle::SelectByte) - printf(" %02x", cycle.value->halves.low); - else - printf(" %04x", cycle.value->full); - } - printf("\n"); +// printf("Peripheral: %c %08x", (cycle.operation & Microcycle::Read) ? 'r' : 'w', *cycle.address); +// if(!(cycle.operation & Microcycle::Read)) { +// if(cycle.operation & Microcycle::SelectByte) +// printf(" %02x", cycle.value->halves.low); +// else +// printf(" %04x", cycle.value->full); +// } +// printf("\n"); } switch(cycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { diff --git a/OSBindings/Mac/Clock SignalTests/QLTests.mm b/OSBindings/Mac/Clock SignalTests/QLTests.mm index 779677325..28f32d69a 100644 --- a/OSBindings/Mac/Clock SignalTests/QLTests.mm +++ b/OSBindings/Mac/Clock SignalTests/QLTests.mm @@ -74,20 +74,16 @@ class QL: public CPU::MC68000::BusHandler { case Microcycle::SelectWord | Microcycle::Read: cycle.value->full = is_peripheral ? peripheral_result : base[word_address]; -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %04x] ", *cycle.address, cycle.value->full); break; case Microcycle::SelectByte | Microcycle::Read: cycle.value->halves.low = (is_peripheral ? peripheral_result : base[word_address]) >> cycle.byte_shift(); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("[%08x -> %02x] ", *cycle.address, cycle.value->halves.low); break; case Microcycle::SelectWord: assert(!(is_rom && !is_peripheral)); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("{%04x -> %08x} ", cycle.value->full, *cycle.address); if(!is_peripheral) base[word_address] = cycle.value->full; break; case Microcycle::SelectByte: assert(!(is_rom && !is_peripheral)); -// if(!(cycle.operation & Microcycle::IsProgram)) printf("{%02x -> %08x} ", cycle.value->halves.low, *cycle.address); if(!is_peripheral) base[word_address] = (cycle.value->halves.low << cycle.byte_shift()) | (base[word_address] & (0xffff ^ cycle.byte_mask())); break; } diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 53a7768cc..7d30fee21 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -56,17 +56,17 @@ template void Processor: // should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; // if(should_log) { -// std::cout << std::setfill('0'); -// std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); -// std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; -// for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; -// for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; -// if(is_supervisor_) { -// std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; -// } else { -// std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; -// } -// std::cout << '\n'; + std::cout << std::setfill('0'); + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; + if(is_supervisor_) { + std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; + } else { + std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; + } + std::cout << '\n'; // } decoded_instruction_ = prefetch_queue_.halves.high.full; @@ -76,7 +76,7 @@ template void Processor: return; } else { // if(0x4f7a == program_counter_.full - 4) return; -// std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; + std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; } active_program_ = &instructions[decoded_instruction_]; @@ -1377,6 +1377,25 @@ template void Processor: active_step_->microcycle.length + bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); + if(!(active_step_->microcycle.operation & Microcycle::IsProgram)) { + switch(active_step_->microcycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { + default: break; + + case Microcycle::SelectWord | Microcycle::Read: + printf("[%08x -> %04x] ", *active_step_->microcycle.address, active_step_->microcycle.value->full); + break; + case Microcycle::SelectByte | Microcycle::Read: + printf("[%08x -> %02x] ", *active_step_->microcycle.address, active_step_->microcycle.value->halves.low); + break; + case Microcycle::SelectWord: + printf("{%04x -> %08x} ", active_step_->microcycle.value->full, *active_step_->microcycle.address); + break; + case Microcycle::SelectByte: + printf("{%02x -> %08x} ", active_step_->microcycle.value->halves.low, *active_step_->microcycle.address); + break; + } + } + /* PERFORM THE BUS STEP'S ACTION. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e526e4587..1d2205b11 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2748,7 +2748,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source = &storage_.destination_bus_data_[0]; op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::DestinationMask, seq("np np")); op(Action::PerformOperation); - op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) })); + op(int(Action::AssembleLongWordAddressFromPrefetch) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; case l2(Imm, XXXw): // MOVE.l #, (xxx).w From 7c3ea7b2ea1838601f7cf97de80f9538ee4e2d3c Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 23 Apr 2019 21:23:20 -0400 Subject: [PATCH 153/239] Resolves additional byte accesses being signalled as word. --- .../68000/Implementation/68000Storage.cpp | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 1d2205b11..35a43cae1 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -934,15 +934,13 @@ struct ProcessorStorageConstructor { default: continue; case bw(Dn): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, Dn - op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, - seq("np np", { a(ea_register) }, !is_byte_access)); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np")); op(Action::PerformOperation); break; - case l(Dn): // [EORI/ORI/ANDI/SUBI/ADDI].l #, Dn + case l(Dn): // [EORI/ORI/ANDI/SUBI/ADDI].l #, Dn op(Action::None, seq("np")); - op( int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, - seq("np np nn", { a(ea_register) }, !is_byte_access)); + op(int(Action::AssembleLongWordDataFromPrefetch) | MicroOp::SourceMask, seq("np np nn")); op(Action::PerformOperation); break; @@ -1906,7 +1904,7 @@ struct ProcessorStorageConstructor { case bw(PreDec): // CMPI.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) })); + op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -2409,13 +2407,13 @@ struct ProcessorStorageConstructor { break; case bw2(Ind, Ind): // MOVE.bw (An)[+], (An)[+] - op(Action::None, seq("nr", { a(ea_register) })); - op(Action::PerformOperation, seq("nw np", { a(destination_register) })); + op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); break; case bw2(PreDec, Ind): // MOVE.bw -(An), (An)[+] - op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) })); - op(Action::PerformOperation, seq("nw np", { a(destination_register) })); + op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); break; case l2(d16An, Ind): // MOVE.bw (d16, An), (An)[+] @@ -2675,13 +2673,13 @@ struct ProcessorStorageConstructor { op( dec | MicroOp::SourceMask); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); - op(Action::PerformOperation, seq("nw np", { ea(1) })); + op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; case bw2(PreDec, XXXl): // MOVE.bw -(An), (xxx).L op(dec | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask); - op(Action::PerformOperation, seq("nw np np", { ea(1) })); + op(Action::PerformOperation, seq("nw np np", { ea(1) }, !is_byte_access)); break; case l2(PreDec, XXXw): // MOVE.l -(An), (xxx).W From 033b8e6b36111629e4845ad78f73ab86bf976905 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 09:59:54 -0400 Subject: [PATCH 154/239] ADD/SUBQ #, An shouldn't set flags. Also, temporarily at least, adds a new means for observing CPU behaviour. --- Processors/68000/68000.hpp | 7 ++- .../Implementation/68000Implementation.hpp | 55 +++++++++++-------- .../68000/Implementation/68000Storage.cpp | 16 ++++++ .../68000/Implementation/68000Storage.hpp | 2 + 4 files changed, 57 insertions(+), 23 deletions(-) diff --git a/Processors/68000/68000.hpp b/Processors/68000/68000.hpp index 3181daf33..830f0f186 100644 --- a/Processors/68000/68000.hpp +++ b/Processors/68000/68000.hpp @@ -186,6 +186,11 @@ class BusHandler { } void flush() {} + + /*! + Provides information about the path of execution if enabled via the template. + */ + void will_perform(uint32_t address, uint16_t opcode) {} }; #include "Implementation/68000Storage.hpp" @@ -205,7 +210,7 @@ struct ProcessorState { // uint16_t current_instruction; }; -template class Processor: public ProcessorBase { +template class Processor: public ProcessorBase { public: Processor(T &bus_handler) : ProcessorBase(), bus_handler_(bus_handler) {} diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 7d30fee21..e452572e3 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -36,7 +36,7 @@ trace_flag_ = (x) & 0x8000; \ set_is_supervisor(!!(((x) >> 13) & 1)); -template void Processor::run_for(HalfCycles duration) { +template void Processor::run_for(HalfCycles duration) { HalfCycles remaining_duration = duration + half_cycles_left_to_run_; while(remaining_duration > HalfCycles(0)) { /* @@ -52,22 +52,19 @@ template void Processor: // no instruction was ongoing. Either way, do a standard instruction operation. // TODO: unless an interrupt is pending, or the trap flag is set. -// static bool should_log = false; - -// should_log |= program_counter_.full >= 0x4F54 && program_counter_.full <= 0x4F84; -// if(should_log) { - std::cout << std::setfill('0'); - std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); - std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; - for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; - for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; - if(is_supervisor_) { - std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; - } else { - std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; - } - std::cout << '\n'; -// } +#ifdef LOG_TRACE + std::cout << std::setfill('0'); + std::cout << (extend_flag_ ? 'x' : '-') << (negative_flag_ ? 'n' : '-') << (zero_result_ ? '-' : 'z'); + std::cout << (overflow_flag_ ? 'v' : '-') << (carry_flag_ ? 'c' : '-') << '\t'; + for(int c = 0; c < 8; ++ c) std::cout << "d" << c << ":" << std::setw(8) << data_[c].full << " "; + for(int c = 0; c < 8; ++ c) std::cout << "a" << c << ":" << std::setw(8) << address_[c].full << " "; + if(is_supervisor_) { + std::cout << "usp:" << std::setw(8) << std::setfill('0') << stack_pointers_[0].full << " "; + } else { + std::cout << "ssp:" << std::setw(8) << std::setfill('0') << stack_pointers_[1].full << " "; + } + std::cout << '\n'; +#endif decoded_instruction_ = prefetch_queue_.halves.high.full; if(!instructions[decoded_instruction_].micro_operations) { @@ -75,13 +72,17 @@ 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; +#ifdef LOG_TRACE std::cout << std::hex << (program_counter_.full - 4) << ": " << std::setw(4) << decoded_instruction_ << '\t'; +#endif + } + + if(signal_will_perform) { + bus_handler_.will_perform(program_counter_.full - 4, decoded_instruction_); } active_program_ = &instructions[decoded_instruction_]; active_micro_op_ = active_program_->micro_operations; - } auto bus_program = active_micro_op_->bus_program; @@ -237,6 +238,14 @@ template void Processor: active_program_->destination->full); } break; + case Operation::ADDQAl: + active_program_->destination->full += q(); + break; + + case Operation::SUBQAl: + active_program_->destination->full -= q(); + break; + #undef addl #undef addw #undef addb @@ -264,6 +273,7 @@ template void Processor: active_program_->destination->full -= active_program_->source->full; break; + // BRA: alters the program counter, exclusively via the prefetch queue. case Operation::BRA: { const int8_t byte_offset = int8_t(prefetch_queue_.halves.high.halves.low); @@ -1377,6 +1387,7 @@ template void Processor: active_step_->microcycle.length + bus_handler_.perform_bus_operation(active_step_->microcycle, is_supervisor_); +#ifdef LOG_TRACE if(!(active_step_->microcycle.operation & Microcycle::IsProgram)) { switch(active_step_->microcycle.operation & (Microcycle::SelectWord | Microcycle::SelectByte | Microcycle::Read)) { default: break; @@ -1395,7 +1406,7 @@ template void Processor: break; } } - +#endif /* PERFORM THE BUS STEP'S ACTION. @@ -1426,7 +1437,7 @@ template void Processor: half_cycles_left_to_run_ = remaining_duration; } -template ProcessorState Processor::get_state() { +template ProcessorState Processor::get_state() { write_back_stack_pointer(); State state; @@ -1440,7 +1451,7 @@ template ProcessorState Processor void Processor::set_state(const ProcessorState &state) { +template void Processor::set_state(const ProcessorState &state) { memcpy(data_, state.data, sizeof(state.data)); memcpy(address_, state.address, sizeof(state.address)); stack_pointers_[0].full = state.user_stack_pointer; diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 35a43cae1..86521b238 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1314,6 +1314,20 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); const int mode = combined_mode(ea_mode, ea_register); + + // If the destination is an address register then byte mode isn't allowed, and + // flags shouldn't be affected (so, a different operation is used). + if(mode == An) { + if(is_byte_access) continue; + switch(operation) { + default: break; + case Operation::ADDQl: // TODO: should the adds be distinguished? If so, how? + case Operation::ADDQw: operation = Operation::ADDQAl; break; + case Operation::SUBQl: + case Operation::SUBQw: operation = Operation::SUBQAl; break; + } + } + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; @@ -3061,6 +3075,8 @@ CPU::MC68000::ProcessorStorage::ProcessorStorage() { active_step_ = reset_bus_steps_; effective_address_[0] = 0; is_supervisor_ = 1; + interrupt_level_ = 7; + address_[7] = 0x00030000; } void CPU::MC68000::ProcessorStorage::write_back_stack_pointer() { diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index 21deca651..df8319a69 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -49,10 +49,12 @@ class ProcessorStorage { ADDb, ADDw, ADDl, ADDQb, ADDQw, ADDQl, ADDAw, ADDAl, + ADDQAw, ADDQAl, SUBb, SUBw, SUBl, SUBQb, SUBQw, SUBQl, SUBAw, SUBAl, + SUBQAw, SUBQAl, MOVEb, MOVEw, MOVEl, MOVEq, MOVEAw, MOVEAl, From 11bf706aa2fe730546b0d47171c0aa1b6b75f692 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 10:07:17 -0400 Subject: [PATCH 155/239] Attempts to fix LT and LTE conditions. --- Processors/68000/Implementation/68000Storage.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index df8319a69..b0ed03061 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -365,11 +365,11 @@ class ProcessorStorage { case 0x0c: // greater than or equal return (negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_); case 0x0d: // less than - return (negative_flag_ || !overflow_flag_) && (!negative_flag_ || overflow_flag_); + return (negative_flag_ && !overflow_flag_) || (!negative_flag_ && overflow_flag_); case 0x0e: // greater than return zero_result_ && ((negative_flag_ && overflow_flag_) || (!negative_flag_ && !overflow_flag_)); case 0x0f: // less than or equal - return (!zero_result_ || negative_flag_) && (!overflow_flag_ || !negative_flag_) && overflow_flag_; + return !zero_result_ || (negative_flag_ && !overflow_flag_) || (!negative_flag_ && overflow_flag_); } } From bb9424d9440df64bf215e1f5f4cfe713a710bce6 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 13:01:08 -0400 Subject: [PATCH 156/239] Corrects byte increment/decrement actions for A7. --- .../68000/Implementation/68000Storage.cpp | 137 ++++++++++-------- 1 file changed, 80 insertions(+), 57 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 86521b238..67374df15 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -76,13 +76,17 @@ struct ProcessorStorageConstructor { return int(((mode & 0xff) == XXXw) ? Action::AssembleWordDataFromPrefetch : Action::AssembleLongWordDataFromPrefetch); } - int increment_action(bool is_long_word_access, bool is_byte_access) const { + int increment_action(bool is_long_word_access, bool is_byte_access, int reg) const { using Action = ProcessorBase::MicroOp::Action; + // Special case: stack pointer byte accesses adjust by two. Cf. http://www.scarpaz.com/Attic/Didattica/Scarpazza-2005-68k-1-addressing.pdf + if(reg == 7 && is_byte_access) return int(Action::Increment2); return int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); } - int decrement_action(bool is_long_word_access, bool is_byte_access) const { + int decrement_action(bool is_long_word_access, bool is_byte_access, int reg) const { using Action = ProcessorBase::MicroOp::Action; + // Special case: stack pointer byte accesses adjust by two. Ibid. + if(reg == 7 && is_byte_access) return int(Action::Decrement2); return int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); } @@ -652,12 +656,9 @@ struct ProcessorStorageConstructor { // by the few deviations. bool is_byte_access = (op_mode&3) == 0; bool is_long_word_access = (op_mode&3) == 2; - int dec = decrement_action(is_long_word_access, is_byte_access); - int inc = increment_action(is_long_word_access, is_byte_access); - if(instruction == 0x4eda) { - printf(""); - } +#define dec(n) decrement_action(is_long_word_access, is_byte_access, n) +#define inc(n) increment_action(is_long_word_access, is_byte_access, n) switch(mapping.decoder) { case Decoder::SWAP: { @@ -733,12 +734,12 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; case bw(PreDec): // [AND/OR/EOR].bw Dn, -(An) - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nrd", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nrd", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); break; @@ -802,12 +803,12 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + op(inc(ea_register) | MicroOp::SourceMask); } break; case bw(PreDec): // [AND/OR].bw -(An), Dn - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); break; @@ -950,7 +951,7 @@ struct ProcessorStorageConstructor { seq("np nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; @@ -966,7 +967,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // [EORI/ORI/ANDI/SUBI/ADDI].bw #, -(An) - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask); + op(dec(ea_register) | MicroOp::DestinationMask); op( int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); @@ -1069,7 +1070,7 @@ struct ProcessorStorageConstructor { case bw(PostInc): // ADD/SUB.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + op(inc(ea_register) | MicroOp::SourceMask); } op(Action::PerformOperation); break; @@ -1085,7 +1086,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // ADD/SUB.bw -(An), Dn - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + op( dec(ea_register) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -1158,7 +1159,7 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(destination_register) | MicroOp::DestinationMask); } break; @@ -1172,7 +1173,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // ADD/SUB.bw Dn, -(An) - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + op( dec(destination_register) | MicroOp::DestinationMask, seq("n nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(destination_register) }, !is_byte_access)); break; @@ -1346,7 +1347,7 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; @@ -1362,7 +1363,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // [ADD/SUB]Q.bw #, -(An) - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + op( dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw", { a(ea_register) }, !is_byte_access)); break; @@ -1445,12 +1446,12 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { - op(int(Action::Increment1) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; case PreDec: // BTST.b Dn, -(An) - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; @@ -1501,13 +1502,13 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { - op(int(Action::Increment1) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; case PreDec: // BTST.b #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(int(Action::Decrement1) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; @@ -1547,7 +1548,16 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].source_address = &storage_.address_[ea_register]; storage_.instructions[instruction].destination_address = &storage_.address_[destination_register]; - op( int(Action::Decrement1) | MicroOp::SourceMask | MicroOp::DestinationMask, + const int source_dec = dec(ea_register); + const int destination_dec = dec(destination_register); + + int first_action = source_dec | MicroOp::SourceMask | MicroOp::DestinationMask; + if(source_dec != destination_dec) { + first_action = source_dec | MicroOp::SourceMask; + op(destination_dec | MicroOp::DestinationMask); + } + + op( first_action, seq("n nr nr np nw", { a(ea_register), a(destination_register), a(destination_register) }, false)); op(Action::PerformOperation); } else { @@ -1628,7 +1638,7 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nrd", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); if(ea_mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; @@ -1642,7 +1652,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // [CLR/NEG/NEGX/NOT].bw -(An) - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::DestinationMask, + op( dec(ea_register) | MicroOp::DestinationMask, seq("nrd", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(ea_register) }, !is_byte_access)); break; @@ -1715,7 +1725,7 @@ struct ProcessorStorageConstructor { case bw(PostInc): // CMP.bw (An)+, Dn op(Action::None, seq("nr np", { a(ea_register) }, !is_byte_access)); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + op(inc(ea_register) | MicroOp::SourceMask); } op(Action::PerformOperation); break; @@ -1730,7 +1740,7 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // CMP.bw -(An), Dn - op( int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, + op( dec(ea_register) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -1901,7 +1911,7 @@ struct ProcessorStorageConstructor { case bw(PostInc): // CMPI.bw #, (An)+ op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(destination_register) }, !is_byte_access)); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::DestinationMask); + op(inc(destination_register) | MicroOp::DestinationMask); } op(Action::PerformOperation); break; @@ -1918,7 +1928,7 @@ struct ProcessorStorageConstructor { case bw(PreDec): // CMPI.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np n")); - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement1) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) }, !is_byte_access)); + op(dec(destination_register) | MicroOp::DestinationMask, seq("nrd np", { a(destination_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -1994,7 +2004,7 @@ struct ProcessorStorageConstructor { case Operation::CMPw: // CMPM.w, (An)+, (An)+ op(Action::None, seq("nr nr np", {a(source_register), a(destination_register)}, !is_byte_operation)); op(Action::PerformOperation); - op(int(is_byte_operation ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask | MicroOp::DestinationMask); + op(inc(destination_register) | MicroOp::SourceMask | MicroOp::DestinationMask); break; case Operation::CMPl: @@ -2036,12 +2046,12 @@ struct ProcessorStorageConstructor { case PostInc: op(Action::PerformOperation, seq("nr np nw", { a(ea_register), a(ea_register) }, false)); if(mode == PostInc) { - op(int(Action::Increment1) | MicroOp::DestinationMask); + op(inc(ea_register) | MicroOp::DestinationMask); } break; case PreDec: - op(int(Action::Decrement1) | MicroOp::DestinationMask); + op(dec(ea_register) | MicroOp::DestinationMask); op(Action::PerformOperation, seq("n nr np nw", { a(ea_register), a(ea_register) }, false)); break; @@ -2316,8 +2326,6 @@ struct ProcessorStorageConstructor { // These don't come from the usual place. is_byte_access = mapping.operation == Operation::MOVEb; is_long_word_access = mapping.operation == Operation::MOVEl; - dec = decrement_action(is_long_word_access, is_byte_access); - inc = increment_action(is_long_word_access, is_byte_access); const int combined_source_mode = combined_mode(ea_mode, ea_register, true, true); const int combined_destination_mode = combined_mode(destination_mode, destination_register, true, true); @@ -2347,7 +2355,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, Dn): // MOVE[A].l -(An), [An/Dn] - op(dec | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); case l2(Ind, Dn): // MOVE[A].l (An)[+], [An/Dn] op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr np", { ea(0), ea(0) })); op(Action::PerformOperation); @@ -2359,7 +2367,7 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, Dn): // MOVE[A].bw -(An), [An/Dn] - op(dec | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); break; @@ -2413,7 +2421,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, Ind): // MOVE.l -(An), (An)[+] - op(dec | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); case l2(Ind, Ind): // MOVE.l (An)[+], (An)[+] op( int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); @@ -2426,7 +2434,7 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, Ind): // MOVE.bw -(An), (An)[+] - op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np", { a(destination_register) }, !is_byte_access)); break; @@ -2481,7 +2489,7 @@ struct ProcessorStorageConstructor { case bw2(Dn, PreDec): // MOVE.bw [An/Dn], -(An) op(Action::PerformOperation); - op( dec| MicroOp::DestinationMask, + op( dec(destination_register) | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; @@ -2496,14 +2504,14 @@ struct ProcessorStorageConstructor { // e.g. MOVE.w -(A6), -(A6) case bw2(PreDec, PreDec): // MOVE.bw -(An), -(An) - op(dec | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); case bw2(Ind, PreDec): // MOVE.bw (An)[+], -(An) - op(dec | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); + op(dec(destination_register) | MicroOp::DestinationMask, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(PreDec, PreDec): // MOVE.l -(An), -(An) - op(dec | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); case l2(Ind, PreDec): // MOVE.l (An)[+], -(An) op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) } )); op(Action::PerformOperation); @@ -2522,7 +2530,7 @@ struct ProcessorStorageConstructor { op( address_action_for_mode(combined_source_mode) | MicroOp::SourceMask, seq(pseq("np nr", combined_source_mode), { ea(0) }, !is_byte_access )); op(Action::PerformOperation); - op(dec | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + op(dec(destination_register) | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(XXXl, PreDec): // MOVE.l (xxx).w, -(An) @@ -2543,7 +2551,7 @@ struct ProcessorStorageConstructor { case bw2(Imm, PreDec): // MOVE.bw #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op(Action::PerformOperation); - op(dec | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); + op(dec(destination_register) | MicroOp::DestinationMask, seq("np nw", { a(destination_register) }, !is_byte_access)); break; case l2(Imm, PreDec): // MOVE.l #, -(An) @@ -2587,13 +2595,13 @@ struct ProcessorStorageConstructor { break; case bw2d(PreDec): // MOVE.bw -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) - op(dec | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nw np", { ea(1) }, !is_byte_access)); break; case l2d(PreDec): // MOVE.l -(An), (d16, An)/(d8, An, Xn)/(d16, PC)/(d8, PC, Xn) - op(dec | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); op(int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("nR+ nr", { ea(0), ea(0) })); op(Action::PerformOperation); op(calc_action_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np nW+ nw np", { ea(1), ea(1) })); @@ -2684,20 +2692,20 @@ struct ProcessorStorageConstructor { break; case bw2(PreDec, XXXw): // MOVE.bw -(An), (xxx).W - op( dec | MicroOp::SourceMask); + op( dec(ea_register) | MicroOp::SourceMask); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("nw np", { ea(1) }, !is_byte_access)); break; case bw2(PreDec, XXXl): // MOVE.bw -(An), (xxx).L - op(dec | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); + op(dec(ea_register) | MicroOp::SourceMask, seq("n nr np", { a(ea_register) }, !is_byte_access)); op(address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask); op(Action::PerformOperation, seq("nw np np", { ea(1) }, !is_byte_access)); break; case l2(PreDec, XXXw): // MOVE.l -(An), (xxx).W - op( dec | MicroOp::SourceMask); + op( dec(ea_register) | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr", { ea(0), ea(0) } )); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); @@ -2706,7 +2714,7 @@ struct ProcessorStorageConstructor { break; case l2(PreDec, XXXl): // MOVE.l -(An), (xxx).L - op( dec | MicroOp::SourceMask); + op( dec(ea_register) | MicroOp::SourceMask); op( int(Action::CopyToEffectiveAddress) | MicroOp::SourceMask, seq("n nR+ nr np", { ea(0), ea(0) } )); op( address_assemble_for_mode(combined_destination_mode) | MicroOp::DestinationMask, seq("np")); @@ -2835,10 +2843,22 @@ struct ProcessorStorageConstructor { // If any post-incrementing was involved, do the post increment(s). if(ea_mode == PostInc || destination_mode == PostInc) { - op( - inc | - (ea_mode == PostInc ? MicroOp::SourceMask : 0) | - (destination_mode == PostInc ? MicroOp::DestinationMask : 0)); + if(ea_mode == destination_mode) { + const int ea_inc = inc(ea_mode); + const int destination_inc = inc(destination_mode); + if(ea_inc == destination_inc) { + op(ea_inc | MicroOp::SourceMask | MicroOp::DestinationMask); + } else { + op(ea_inc | MicroOp::SourceMask); + op(destination_inc | MicroOp::DestinationMask); + } + } else { + if(ea_mode == PostInc) { + op(inc(ea_mode) | MicroOp::SourceMask); + } else { + op(inc(destination_mode) | MicroOp::DestinationMask); + } + } } } break; @@ -2868,13 +2888,13 @@ struct ProcessorStorageConstructor { break; case bw(PreDec): // TST.bw -(An) - op(int(is_byte_access ? Action::Decrement1 : Action::Decrement2) | MicroOp::SourceMask, seq("n")); + op(dec(ea_register) | MicroOp::SourceMask, seq("n")); case bw(Ind): // TST.bw (An) case bw(PostInc): // TST.bw (An)+ op(Action::None, seq("nr", { a(ea_register) }, !is_byte_access)); op(Action::PerformOperation, seq("np")); if(mode == PostInc) { - op(int(is_byte_access ? Action::Increment1 : Action::Increment2) | MicroOp::SourceMask); + op(inc(ea_register) | MicroOp::SourceMask); } break; @@ -2952,6 +2972,9 @@ struct ProcessorStorageConstructor { #endif } } + +#undef inc +#undef dec } #undef Dn From 958d44a20dc0fd54db7c86f4b0afdbb092964786 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 13:06:12 -0400 Subject: [PATCH 157/239] Causes SWAP actually to perform. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 67374df15..e54f15a28 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -663,7 +663,7 @@ struct ProcessorStorageConstructor { switch(mapping.decoder) { case Decoder::SWAP: { storage_.instructions[instruction].set_destination(storage_, Dn, ea_register); - op(Action::None, seq("np")); + op(Action::PerformOperation, seq("np")); } break; case Decoder::EXG: { From 0bb6b498ce92e7eb089b5ce3bd5fa1934760c292 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 13:14:25 -0400 Subject: [PATCH 158/239] Simplifies and fixes post-inc MOVE behaviour. --- .../68000/Implementation/68000Storage.cpp | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e54f15a28..223086a81 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -2843,20 +2843,19 @@ struct ProcessorStorageConstructor { // If any post-incrementing was involved, do the post increment(s). if(ea_mode == PostInc || destination_mode == PostInc) { - if(ea_mode == destination_mode) { - const int ea_inc = inc(ea_mode); - const int destination_inc = inc(destination_mode); - if(ea_inc == destination_inc) { - op(ea_inc | MicroOp::SourceMask | MicroOp::DestinationMask); - } else { - op(ea_inc | MicroOp::SourceMask); - op(destination_inc | MicroOp::DestinationMask); - } + const int ea_inc = inc(ea_register); + const int destination_inc = inc(destination_register); + + // If there are two increments, and both can be done simultaneously, do that. + // Otherwise do one or two individually. + if(ea_mode == destination_mode && ea_inc == destination_inc) { + op(ea_inc | MicroOp::SourceMask | MicroOp::DestinationMask); } else { if(ea_mode == PostInc) { - op(inc(ea_mode) | MicroOp::SourceMask); - } else { - op(inc(destination_mode) | MicroOp::DestinationMask); + op(ea_inc | MicroOp::SourceMask); + } + if(destination_mode == PostInc) { + op(destination_inc | MicroOp::DestinationMask); } } } From e214584c7631e4873419a68c524aaa0442144351 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 13:19:56 -0400 Subject: [PATCH 159/239] SWAP should clear overflow and carry. --- Processors/68000/Implementation/68000Implementation.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e452572e3..e90a7fc4e 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -892,6 +892,7 @@ template void Proces zero_result_ = active_program_->destination->full; negative_flag_ = temporary & 0x8000; + overflow_flag_ = carry_flag_ = 0; } break; /* From 75a7f7ab22672addcceb32f8cdf2eeccc108bbe5 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 14:45:24 -0400 Subject: [PATCH 160/239] Inserts missing program fetch for CMPI.bw #, (d8/16...). --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 223086a81..60b50b31b 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -1945,7 +1945,7 @@ struct ProcessorStorageConstructor { case bw(d8AnXn): // CMPI.bw #, (d8, An, Xn) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); op( calc_action_for_mode(mode) | MicroOp::DestinationMask, - seq(pseq("nrd np", mode), { ea(1) }, !is_byte_access)); + seq(pseq("np nrd np", mode), { ea(1) }, !is_byte_access)); op(Action::PerformOperation); break; From b9933f512f0e4fd32e648ce7393d0d9d4e903796 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 16:30:15 -0400 Subject: [PATCH 161/239] Fixed: the word/long-word bit works the other way around. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e90a7fc4e..3de94d69c 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1277,9 +1277,9 @@ template void Proces target.full = int8_t(data.halves.low) + source; \ \ if(data.full & 0x800) { \ - target.full += int16_t(displacement.halves.low.full); \ - } else { \ target.full += displacement.full; \ + } else { \ + target.full += int16_t(displacement.halves.low.full); \ } \ } case int(MicroOp::Action::CalcD8AnXn) | MicroOp::SourceMask: { From 10f75acf71cdbd7fe8eaadf9373278ab4c85a4e3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 16:32:16 -0400 Subject: [PATCH 162/239] Causes EXG to function. --- Processors/68000/Implementation/68000Storage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 60b50b31b..73f2f7d2f 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -686,7 +686,7 @@ struct ProcessorStorageConstructor { break; } - op(Action::None, seq("np")); + op(Action::PerformOperation, seq("np")); } break; case Decoder::NOP: { From 582e4acc11b4928cdbe615294a0800f90efc5f7a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 17:38:59 -0400 Subject: [PATCH 163/239] Implements ANDI/ORI/EOR to SR/CCR. --- .../Implementation/68000Implementation.hpp | 31 ++++++++++++++++++- .../68000/Implementation/68000Storage.cpp | 16 ++++++++++ .../68000/Implementation/68000Storage.hpp | 4 +++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 3de94d69c..434abca28 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -482,7 +482,7 @@ template void Proces break; /* - Status word moves. + Status word moves and manipulations. */ case Operation::MOVEtoSR: @@ -497,6 +497,35 @@ template void Proces set_ccr(active_program_->source->full); break; +#define and_op(a, b) a &= b +#define or_op(a, b) a |= b +#define eor_op(a, b) a ^= b + +#define apply(op, func) {\ + auto status = get_status(); \ + op(status, prefetch_queue_.halves.high.full); \ + func(status); \ + program_counter_.full -= 2; \ +} + +#define apply_sr(op) apply(op, set_status) +#define apply_ccr(op) apply(op, set_ccr) + + case Operation::ANDItoSR: apply_sr(and_op); break; + case Operation::EORItoSR: apply_sr(eor_op); break; + case Operation::ORItoSR: apply_sr(or_op); break; + + case Operation::ANDItoCCR: apply_ccr(and_op); break; + case Operation::EORItoCCR: apply_ccr(eor_op); break; + case Operation::ORItoCCR: apply_ccr(or_op); break; + +#undef apply_ccr +#undef apply_sr +#undef apply +#undef eor_op +#undef or_op +#undef and_op + /* Multiplications. */ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 73f2f7d2f..7937de7c9 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -416,6 +416,8 @@ struct ProcessorStorageConstructor { EXG, // Maps source and destination registers and an operation mode to an EXG. SWAP, // Maps a source register to a SWAP. + + EORI_ORI_ANDI_SR, // Maps to an EORI, ORI or ANDI to SR/CCR. }; using Operation = ProcessorStorage::Operation; @@ -616,6 +618,13 @@ struct ProcessorStorageConstructor { {0xf1f8, 0xc188, Operation::EXG, Decoder::EXG}, // 4-105 (p209) {0xfff8, 0x4840, Operation::SWAP, Decoder::SWAP}, // 4-185 (p289) + + {0xffff, 0x027c, Operation::ANDItoSR, Decoder::EORI_ORI_ANDI_SR}, + {0xffff, 0x023c, Operation::ANDItoCCR, Decoder::EORI_ORI_ANDI_SR}, + {0xffff, 0x0a7c, Operation::EORItoSR, Decoder::EORI_ORI_ANDI_SR}, + {0xffff, 0x0a3c, Operation::EORItoCCR, Decoder::EORI_ORI_ANDI_SR}, + {0xffff, 0x007c, Operation::ORItoSR, Decoder::EORI_ORI_ANDI_SR}, + {0xffff, 0x003c, Operation::ORItoCCR, Decoder::EORI_ORI_ANDI_SR}, }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -661,6 +670,13 @@ struct ProcessorStorageConstructor { #define inc(n) increment_action(is_long_word_access, is_byte_access, n) switch(mapping.decoder) { + case Decoder::EORI_ORI_ANDI_SR: { + // The source used here is always the high word of the prefetch queue. + storage_.instructions[instruction].requires_supervisor = !(instruction & 0x40); + op(Action::None, seq("np nn nn")); + op(Action::PerformOperation, seq("np np")); + } break; + case Decoder::SWAP: { storage_.instructions[instruction].set_destination(storage_, Dn, ea_register); op(Action::PerformOperation, seq("np")); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index b0ed03061..fd24480ad 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -62,6 +62,10 @@ class ProcessorStorage { MOVEtoSR, MOVEfromSR, MOVEtoCCR, + ORItoSR, ORItoCCR, + ANDItoSR, ANDItoCCR, + EORItoSR, EORItoCCR, + BTSTb, BTSTl, BCLRl, BCLRb, CMPb, CMPw, CMPl, From be32b1a1985624b1d7844db989f421ff87ce8a7d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 17:50:38 -0400 Subject: [PATCH 164/239] Fixes JSR (An) return address [again]. --- Processors/68000/Implementation/68000Implementation.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 434abca28..9f6f5e95d 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1201,7 +1201,6 @@ template void Proces destination_bus_data_[0].full = program_counter_.full; /* Everything other than (An) */ break; } - destination_bus_data_[0].full = program_counter_.full; address_[7].full -= 4; effective_address_[1].full = address_[7].full; } break; From dcb8176d90850f0d0b7d307ffbae40deb7f1162a Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 17:58:27 -0400 Subject: [PATCH 165/239] Corrects potential failure properly to set stack pointer state. --- Processors/68000/Implementation/68000Implementation.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 9f6f5e95d..e1d646518 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -1483,11 +1483,11 @@ template ProcessorSt template void Processor::set_state(const ProcessorState &state) { memcpy(data_, state.data, sizeof(state.data)); memcpy(address_, state.address, sizeof(state.address)); - stack_pointers_[0].full = state.user_stack_pointer; - stack_pointers_[1].full = state.supervisor_stack_pointer; set_status(state.status); + stack_pointers_[0].full = state.user_stack_pointer; + stack_pointers_[1].full = state.supervisor_stack_pointer; address_[7] = stack_pointers_[is_supervisor_]; } From fa0accf251d8d447234b7b1af8f3edb0576102d2 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 21:04:47 -0400 Subject: [PATCH 166/239] Attempts to correct flags for ASL, ASR, LSL, LSR. --- .../Implementation/68000Implementation.hpp | 114 ++++++++++++------ 1 file changed, 77 insertions(+), 37 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e1d646518..3ddf78f45 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -932,10 +932,6 @@ template void Proces negative_flag_ = zero_result_ & (m); \ overflow_flag_ = (value ^ zero_result_) & (m); -#define set_flags(v, m, t) \ - set_neg_zero_overflow(v, m) \ - extend_flag_ = carry_flag_ = value & (t); - #define decode_shift_count() \ int shift_count = (decoded_instruction_ & 32) ? data_[(decoded_instruction_ >> 9) & 7].full&63 : ( ((decoded_instruction_ >> 9)&7) ? ((decoded_instruction_ >> 9)&7) : 8) ; \ active_step_->microcycle.length = HalfCycles(4 * shift_count); @@ -944,45 +940,89 @@ template void Proces #define set_flags_w(t) set_flags(active_program_->destination->halves.low.full, 0x8000, t) #define set_flags_l(t) set_flags(active_program_->destination->full, 0x80000000, t) -#define shift_op(name, op, mb, mw, ml) \ - case Operation::name##b: { \ - decode_shift_count(); \ - const auto value = active_program_->destination->halves.low.halves.low; \ - op(active_program_->destination->halves.low.halves.low, shift_count, 0xff, 7); \ - set_flags_b(mb); \ - } break; \ +#define lsl(destination, size) {\ + decode_shift_count(); \ + const auto value = destination; \ \ - case Operation::name##w: { \ - decode_shift_count(); \ - const auto value = active_program_->destination->halves.low.full; \ - op(active_program_->destination->halves.low.full, shift_count, 0xffff, 15); \ - set_flags_w(mw); \ - } break; \ + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + destination = value << shift_count; \ + extend_flag_ = carry_flag_ = value & ((1 << (size - 1)) >> (shift_count - 1)); \ + } \ \ - case Operation::name##l: { \ - decode_shift_count(); \ - const auto value = active_program_->destination->full; \ - op(active_program_->destination->full, shift_count, 0xffffffff, 31); \ - set_flags_l(ml); \ - } break; \ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} + + case Operation::ASLm: + case Operation::LSLm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = value >> 1; + extend_flag_ = carry_flag_ = value & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); + } break; + case Operation::ASLb: + case Operation::LSLb: lsl(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ASLw: + case Operation::LSLw: lsl(active_program_->destination->halves.low.full, 16); break; + case Operation::ASLl: + case Operation::LSLl: lsl(active_program_->destination->full, 32); break; + +#undef lsl + +#define lsr(destination, size) {\ + decode_shift_count(); \ + const auto value = destination; \ \ - case Operation::name##m: { \ - const auto value = active_program_->destination->halves.low.full; \ - op(active_program_->destination->halves.low.full, 1, 0xffff, 15); \ - set_flags_w(mw); \ - } break; + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + destination = value >> shift_count; \ + extend_flag_ = carry_flag_ = value & (1 << (shift_count - 1)); \ + } \ +\ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} -#define lsl(x, c, m, d) x <<= c -#define lsr(x, c, m, d) x >>= c -#define asl(x, c, m, d) x <<= c -#define asr(x, c, m, d) x = (x >> c) | (((value >> d) & 1) * (m ^ (m >> c))) + case Operation::LSRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = value >> 1; + extend_flag_ = carry_flag_ = value & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); + } break; + case Operation::LSRb: lsr(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::LSRw: lsr(active_program_->destination->halves.low.full, 16); break; + case Operation::LSRl: lsr(active_program_->destination->full, 32); break; -// TODO: carry/extend is incorrect for shifts of greater than one digit. +#undef lsr - shift_op(LSL, lsl, 0x80, 0x8000, 0x80000000); - shift_op(ASL, lsl, 0x80, 0x8000, 0x80000000); - shift_op(LSR, lsr, 0x01, 0x0001, 0x00000001); - shift_op(ASR, asr, 0x01, 0x0001, 0x00000001); +#define asr(destination, size) {\ + decode_shift_count(); \ + const auto value = destination; \ +\ + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + destination = \ + (value >> shift_count) | \ + ((value & (1 << (size - 1)) ? 0xffffffff : 0x000000000) << (size - shift_count)); \ + extend_flag_ = carry_flag_ = value & (1 << (shift_count - 1)); \ + } \ +\ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} + + case Operation::ASRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = (value&0x80) | (value >> 1); + extend_flag_ = carry_flag_ = value & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); + } break; + case Operation::ASRb: asr(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ASRw: asr(active_program_->destination->halves.low.full, 16); break; + case Operation::ASRl: asr(active_program_->destination->full, 32); break; + +#undef asr #undef set_flags #define set_flags(v, m, t) \ From 002796e5f591d7dd55aa3abfbbf2a6cb9c41f772 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 23:01:32 -0400 Subject: [PATCH 167/239] Takes a run at BSET and BCHG. --- .../Implementation/68000Implementation.hpp | 22 +++++ .../68000/Implementation/68000Storage.cpp | 93 +++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 3 + 3 files changed, 108 insertions(+), 10 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 3ddf78f45..b81cda7c3 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -311,6 +311,28 @@ template void Proces active_step_->microcycle.length = HalfCycles(8 + ((active_program_->source->full & 31) / 16) * 4); break; + case Operation::BCHGl: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 31)); + active_program_->destination->full ^= 1 << (active_program_->source->full & 31); + active_step_->microcycle.length = HalfCycles(4 + (((active_program_->source->full & 31) / 16) * 4)); + break; + + case Operation::BCHGb: + zero_result_ = active_program_->destination->halves.low.halves.low & (1 << (active_program_->source->full & 7)); + active_program_->destination->halves.low.halves.low ^= 1 << (active_program_->source->full & 7); + break; + + case Operation::BSETl: + zero_result_ = active_program_->destination->full & (1 << (active_program_->source->full & 31)); + active_program_->destination->full |= 1 << (active_program_->source->full & 31); + active_step_->microcycle.length = HalfCycles(4 + (((active_program_->source->full & 31) / 16) * 4)); + break; + + case Operation::BSETb: + zero_result_ = active_program_->destination->halves.low.halves.low & (1 << (active_program_->source->full & 7)); + active_program_->destination->halves.low.halves.low |= 1 << (active_program_->source->full & 7); + break; + // Bcc: ordinarily evaluates the relevant condition and displacement size and then: // if condition is false, schedules bus operations to get past this instruction; // otherwise applies the offset and schedules bus operations to refill the prefetch queue. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 7937de7c9..e9adece89 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -76,18 +76,30 @@ struct ProcessorStorageConstructor { return int(((mode & 0xff) == XXXw) ? Action::AssembleWordDataFromPrefetch : Action::AssembleLongWordDataFromPrefetch); } + int byte_inc(int reg) const { + using Action = ProcessorBase::MicroOp::Action; + // Special case: stack pointer byte accesses adjust by two. + return int((reg == 7) ? Action::Increment2 : Action::Increment1); + } + + int byte_dec(int reg) const { + using Action = ProcessorBase::MicroOp::Action; + // Special case: stack pointer byte accesses adjust by two. + return int((reg == 7) ? Action::Decrement2 : Action::Decrement1); + } + int increment_action(bool is_long_word_access, bool is_byte_access, int reg) const { using Action = ProcessorBase::MicroOp::Action; - // Special case: stack pointer byte accesses adjust by two. Cf. http://www.scarpaz.com/Attic/Didattica/Scarpazza-2005-68k-1-addressing.pdf - if(reg == 7 && is_byte_access) return int(Action::Increment2); - return int(is_long_word_access ? Action::Increment4 : (is_byte_access ? Action::Increment1 : Action::Increment2)); + if(is_long_word_access) return int(Action::Increment4); + if(is_byte_access) return byte_inc(reg); + return int(Action::Increment2); } int decrement_action(bool is_long_word_access, bool is_byte_access, int reg) const { using Action = ProcessorBase::MicroOp::Action; - // Special case: stack pointer byte accesses adjust by two. Ibid. - if(reg == 7 && is_byte_access) return int(Action::Decrement2); - return int(is_long_word_access ? Action::Decrement4 : (is_byte_access ? Action::Decrement1 : Action::Decrement2)); + if(is_long_word_access) return int(Action::Decrement4); + if(is_byte_access) return byte_dec(reg); + return int(Action::Decrement2); } #define pseq(x, m) ((((m)&0xff) == 0x06) || (((m)&0xff) == 0x13) ? "n " x : x) @@ -418,6 +430,8 @@ struct ProcessorStorageConstructor { SWAP, // Maps a source register to a SWAP. EORI_ORI_ANDI_SR, // Maps to an EORI, ORI or ANDI to SR/CCR. + + BCHG_BSET, // Maps a mode and register, and possibly a source register, to a BCHG or BSET. }; using Operation = ProcessorStorage::Operation; @@ -625,6 +639,11 @@ struct ProcessorStorageConstructor { {0xffff, 0x0a3c, Operation::EORItoCCR, Decoder::EORI_ORI_ANDI_SR}, {0xffff, 0x007c, Operation::ORItoSR, Decoder::EORI_ORI_ANDI_SR}, {0xffff, 0x003c, Operation::ORItoCCR, Decoder::EORI_ORI_ANDI_SR}, + + {0xf1c0, 0x0140, Operation::BCHGb, Decoder::BCHG_BSET}, // 4-28 (p132) + {0xffc0, 0x0840, Operation::BCHGb, Decoder::BCHG_BSET}, // 4-29 (p133) + {0xf1c0, 0x01c0, Operation::BSETb, Decoder::BCHG_BSET}, // 4-57 (p161) + {0xffc0, 0x08c0, Operation::BSETb, Decoder::BCHG_BSET}, // 4-58 (p162) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -670,6 +689,60 @@ struct ProcessorStorageConstructor { #define inc(n) increment_action(is_long_word_access, is_byte_access, n) switch(mapping.decoder) { + case Decoder::BCHG_BSET: { + const int mode = combined_mode(ea_mode, ea_register); + + // Operations on a register are .l; all others are the default .b. + if(ea_mode == Dn) { + operation = (operation == Operation::BSETb) ? Operation::BSETl : Operation::BCHGl; + } + + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + + if(instruction & 0x100) { + // The bit is nominated by a register. + const int source_register = (instruction >> 9)&7; + storage_.instructions[instruction].set_source(storage_, Dn, source_register); + } else { + // The bit is nominated by a constant, that will be obtained right here. + storage_.instructions[instruction].set_source(storage_, Imm, 0); + op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); + } + + switch(mode) { + default: continue; + + case Dn: // [BCHG/BSET].l Dn, Dn + // Execution length depends on the selected bit, so allow flexible time for that. + op(Action::None, seq("np")); + op(Action::PerformOperation, seq("r")); + break; + + case Ind: // [BCHG/BSET].b Dn, (An) + case PostInc: // [BCHG/BSET].b Dn, (An)+ + op(Action::None, seq("nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, false)); + if(mode == PostInc) { + op(byte_inc(ea_register) | MicroOp::DestinationMask); + } + break; + + case PreDec: // [BCHG/BSET].b Dn, -(An) + op(byte_dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(Action::PerformOperation, seq("nw", { a(ea_register) }, false)); + break; + + case XXXl: // [BCHG/BSET].b Dn, (xxx).l + op(Action::None, seq("np")); + case XXXw: // [BCHG/BSET].b Dn, (xxx).w + case d16An: // [BCHG/BSET].b Dn, (d16, An) + case d8AnXn: // [BCHG/BSET].b Dn, (d8, An, Xn) + op(address_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nrd np", mode), { ea(1) }, false)); + op(Action::PerformOperation, seq("nw", { ea(1) }, false)); + break; + } + } break; + case Decoder::EORI_ORI_ANDI_SR: { // The source used here is always the high word of the prefetch queue. storage_.instructions[instruction].requires_supervisor = !(instruction & 0x40); @@ -1462,12 +1535,12 @@ struct ProcessorStorageConstructor { op(Action::None, seq("nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { - op(inc(ea_register) | MicroOp::DestinationMask); + op(byte_inc(ea_register) | MicroOp::DestinationMask); } break; case PreDec: // BTST.b Dn, -(An) - op(dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(byte_dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; @@ -1518,13 +1591,13 @@ struct ProcessorStorageConstructor { op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); if(mode == PostInc) { - op(inc(ea_register) | MicroOp::DestinationMask); + op(byte_inc(ea_register) | MicroOp::DestinationMask); } break; case PreDec: // BTST.b #, -(An) op(int(Action::AssembleWordDataFromPrefetch) | MicroOp::SourceMask, seq("np")); - op(dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); + op(byte_dec(ea_register) | MicroOp::DestinationMask, seq("n nrd np", { a(ea_register) }, false)); op(Action::PerformOperation, is_bclr ? seq("nw", { a(ea_register) }, false) : nullptr); break; diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index fd24480ad..faeab54d4 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -104,6 +104,9 @@ class ProcessorStorage { TRAP, EXG, SWAP, + + BCHGl, BCHGb, + BSETl, BSETb, }; /*! From d2491633ce0417a65aa625dded707c5b24ab8c9d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 24 Apr 2019 23:21:15 -0400 Subject: [PATCH 168/239] Ensures MOVEM to M .w correctly updates A7. --- Processors/68000/Implementation/68000Implementation.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index b81cda7c3..1a506a19c 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -728,6 +728,7 @@ template void Proces offset = 15; start_address -= 2; write_address_sequence_word(dec_action); + movem_final_address_ = start_address + 2; } else { write_address_sequence_word(inc_action); } From 8557e563bc21a8ad9cf8554ce947f24f5338c662 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 12:19:40 -0400 Subject: [PATCH 169/239] Takes a run at TAS, clarifying bus cycles. --- .../Implementation/68000Implementation.hpp | 12 ++++ .../68000/Implementation/68000Storage.cpp | 72 +++++++++++++++++-- .../68000/Implementation/68000Storage.hpp | 2 + 3 files changed, 80 insertions(+), 6 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 1a506a19c..042d7a1c1 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -849,6 +849,18 @@ template void Proces case Operation::None: break; + /* + TAS: sets zero and negative depending on the current value of the destination, + and sets the high bit. + */ + + case Operation::TAS: + overflow_flag_ = carry_flag_ = 0; + zero_result_ = active_program_->destination->halves.low.halves.low; + negative_flag_ = active_program_->destination->halves.low.halves.low & 0x80; + active_program_->destination->halves.low.halves.low |= 0x80; + break; + /* Bitwise operators: AND, OR and EOR. All three clear the overflow and carry flags, and set zero and negative appropriately. diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index e9adece89..5f6193efb 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -145,6 +145,7 @@ struct ProcessorStorageConstructor { * nF: fetch the SSPs MSW; * nf: fetch the SSP's LSW; * _: hold the reset line active for the usual period. + * tas: perform the final 6 cycles of a TAS: like an n nw but with the address strobe active for the entire period. Quite a lot of that is duplicative, implying both something about internal state and something about what's observable on the bus, but it's helpful to @@ -213,7 +214,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation = Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.microcycle.operation = Microcycle::SameAddress | Microcycle::Read | Microcycle::IsProgram | Microcycle::SelectWord; step.action = Action::IncrementEffectiveAddress0; steps.push_back(step); @@ -229,7 +230,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.microcycle.operation = Microcycle::SameAddress | Microcycle::Read | Microcycle::IsProgram | Microcycle::SelectWord; step.action = Action::IncrementEffectiveAddress0; steps.push_back(step); @@ -246,7 +247,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord | Microcycle::Read | Microcycle::IsProgram; + step.microcycle.operation = Microcycle::SameAddress | Microcycle::Read | Microcycle::IsProgram | Microcycle::SelectWord; step.action = Action::IncrementProgramCounter; steps.push_back(step); @@ -277,7 +278,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte) | (is_read ? Microcycle::Read : 0); + step.microcycle.operation = Microcycle::SameAddress | (is_read ? Microcycle::Read : 0) | (read_full_words ? Microcycle::SelectWord : Microcycle::SelectByte); if(post_adjustment) { // nr and nR should affect address 0; nw, nW, nrd and nRd should affect address 1. if(tolower(token[1]) == 'r' && token.size() == 2) { @@ -293,6 +294,26 @@ struct ProcessorStorageConstructor { continue; } + // The completing part of a TAS. + if(token == "tas") { + RegisterPair32 *const scratch_data = &storage_.destination_bus_data_[0]; + + assert(address_iterator != addresses.end()); + + step.microcycle.length = HalfCycles(9); + step.microcycle.operation = Microcycle::SameAddress; + step.microcycle.address = *address_iterator; + step.microcycle.value = &scratch_data->halves.low; + steps.push_back(step); + + step.microcycle.length = HalfCycles(3); + step.microcycle.operation = Microcycle::SameAddress | Microcycle::SelectByte; + steps.push_back(step); + ++address_iterator; + + continue; + } + // A stack write. if(token == "nS" || token == "ns") { RegisterPair32 *const scratch_data = &storage_.destination_bus_data_[0]; @@ -304,7 +325,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord; + step.microcycle.operation = Microcycle::SameAddress | Microcycle::SelectWord; step.action = Action::DecrementEffectiveAddress1; steps.push_back(step); @@ -322,7 +343,7 @@ struct ProcessorStorageConstructor { steps.push_back(step); step.microcycle.length = HalfCycles(3); - step.microcycle.operation |= Microcycle::SelectWord; + step.microcycle.operation = Microcycle::SameAddress | Microcycle::Read | Microcycle::SelectWord; step.action = Action::IncrementEffectiveAddress0; steps.push_back(step); @@ -432,6 +453,8 @@ struct ProcessorStorageConstructor { EORI_ORI_ANDI_SR, // Maps to an EORI, ORI or ANDI to SR/CCR. BCHG_BSET, // Maps a mode and register, and possibly a source register, to a BCHG or BSET. + + TAS, // Maps a mode and register to a TAS. }; using Operation = ProcessorStorage::Operation; @@ -644,6 +667,8 @@ struct ProcessorStorageConstructor { {0xffc0, 0x0840, Operation::BCHGb, Decoder::BCHG_BSET}, // 4-29 (p133) {0xf1c0, 0x01c0, Operation::BSETb, Decoder::BCHG_BSET}, // 4-57 (p161) {0xffc0, 0x08c0, Operation::BSETb, Decoder::BCHG_BSET}, // 4-58 (p162) + + {0xffc0, 0x4ac0, Operation::TAS, Decoder::TAS}, // 4-186 (p290) }; std::vector micro_op_pointers(65536, std::numeric_limits::max()); @@ -689,6 +714,41 @@ struct ProcessorStorageConstructor { #define inc(n) increment_action(is_long_word_access, is_byte_access, n) switch(mapping.decoder) { + case Decoder::TAS: { + const int mode = combined_mode(ea_mode, ea_register); + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + switch(mode) { + default: continue; + + case Dn: // TAS Dn + op(Action::PerformOperation, seq("np")); + break; + + case Ind: // TAS (An) + case PostInc: // TAS (An)+ + op(Action::None, seq("nrd", { a(ea_register) }, false)); + op(Action::PerformOperation, seq("tas np", { a(ea_register) }, false)); + if(mode == PostInc) { + op(byte_inc(ea_register) | MicroOp::DestinationMask); + } + break; + + case PreDec: // TAS -(An) + op(byte_dec(ea_register) | MicroOp::DestinationMask, seq("n nrd", { a(ea_register) }, false)); + op(Action::PerformOperation, seq("tas np", { a(ea_register) }, false)); + break; + + case XXXl: // TAS (xxx).l + op(Action::None, seq("np")); + case XXXw: // TAS (xxx).w + case d16An: // TAS (d16, An) + case d8AnXn: // TAS (d8, An, Xn) + op(address_action_for_mode(mode), seq("np nrd", { ea(1) }, false)); + op(Action::PerformOperation, seq("tas np", { ea(1) }, false)); + break; + } + } break; + case Decoder::BCHG_BSET: { const int mode = combined_mode(ea_mode, ea_register); diff --git a/Processors/68000/Implementation/68000Storage.hpp b/Processors/68000/Implementation/68000Storage.hpp index faeab54d4..2570176a4 100644 --- a/Processors/68000/Implementation/68000Storage.hpp +++ b/Processors/68000/Implementation/68000Storage.hpp @@ -107,6 +107,8 @@ class ProcessorStorage { BCHGl, BCHGb, BSETl, BSETb, + + TAS, }; /*! From 5725db923410cc3b887f4623d00f4b5875553024 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 12:42:05 -0400 Subject: [PATCH 170/239] Corrects calculated-address TAS. --- Processors/68000/Implementation/68000Implementation.hpp | 8 +++++++- Processors/68000/Implementation/68000Storage.cpp | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 042d7a1c1..99515e3ee 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -88,7 +88,7 @@ template void Proces auto bus_program = active_micro_op_->bus_program; switch(active_micro_op_->action) { default: - std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << std::endl; + std::cerr << "Unhandled 68000 micro op action " << std::hex << active_micro_op_->action << " within instruction " << decoded_instruction_ << std::endl; break; case int(MicroOp::Action::None): break; @@ -1059,6 +1059,12 @@ template void Proces #undef asr +#undef set_neg_zero_overflow +#define set_neg_zero_overflow(v, m) \ + zero_result_ = (v); \ + negative_flag_ = zero_result_ & (m); \ + overflow_flag_ = 0; + #undef set_flags #define set_flags(v, m, t) \ zero_result_ = v; \ diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 5f6193efb..3fc755228 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -743,7 +743,7 @@ struct ProcessorStorageConstructor { case XXXw: // TAS (xxx).w case d16An: // TAS (d16, An) case d8AnXn: // TAS (d8, An, Xn) - op(address_action_for_mode(mode), seq("np nrd", { ea(1) }, false)); + op(address_action_for_mode(mode) | MicroOp::DestinationMask, seq("np nrd", { ea(1) }, false)); op(Action::PerformOperation, seq("tas np", { ea(1) }, false)); break; } From 723acb31b359bcc7f9c4edb3f5d9158e7ae19939 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 13:53:23 -0400 Subject: [PATCH 171/239] Corrects various flag issues with ADD, SUB and NEG. --- .../Implementation/68000Implementation.hpp | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 99515e3ee..e0a21e3e6 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -94,8 +94,8 @@ template void Proces case int(MicroOp::Action::None): break; case int(MicroOp::Action::PerformOperation): -#define sub_overflow() (source ^ destination) & (destination ^ result) -#define add_overflow() ~(source ^ destination) & (destination ^ result) +#define sub_overflow() ((result ^ destination) & (destination ^ source)) +#define add_overflow() ((result ^ destination) & ~(destination ^ source)) switch(active_program_->operation) { /* ABCD adds the lowest bytes form the source and destination using BCD arithmetic, @@ -128,9 +128,9 @@ template void Proces #define subop(a, b) a - b #define addsubb(a, b, dest, op, overflow) \ - const auto source = a; \ - const auto destination = b; \ - const int result = op(destination, source); \ + const int source = a; \ + const int destination = b; \ + const auto result = op(destination, source); \ \ zero_result_ = dest = uint8_t(result); \ extend_flag_ = carry_flag_ = result & ~0xff; \ @@ -138,9 +138,9 @@ template void Proces overflow_flag_ = overflow() & 0x80; #define addsubw(a, b, dest, op, overflow) \ - const auto source = a; \ - const auto destination = b; \ - const int result = op(destination, source); \ + const int source = a; \ + const int destination = b; \ + const auto result = op(destination, source); \ \ zero_result_ = dest = uint16_t(result); \ extend_flag_ = carry_flag_ = result & ~0xffff; \ @@ -148,9 +148,9 @@ template void Proces overflow_flag_ = overflow() & 0x8000; #define addsubl(a, b, dest, op, overflow) \ - const auto source = a; \ - const auto destination = b; \ - const uint64_t result = op(uint64_t(destination), uint64_t(source)); \ + const uint64_t source = a; \ + const uint64_t destination = b; \ + const auto result = op(destination, source); \ \ zero_result_ = dest = uint32_t(result); \ extend_flag_ = carry_flag_ = result >> 32; \ @@ -767,11 +767,15 @@ template void Proces /* NEGs: negatives the destination, setting the zero, negative, overflow and carry flags appropriate, and extend. + + NB: since the same logic as SUB is used to calculate overflow, + and SUB calculates `destination - source`, the NEGs deliberately + label 'source' and 'destination' differently from Motorola. */ case Operation::NEGb: { - const int source = 0; - const int destination = active_program_->destination->halves.low.halves.low; - const int result = source - destination; + const int destination = 0; + const int source = active_program_->destination->halves.low.halves.low; + const auto result = destination - source; active_program_->destination->halves.low.halves.low = result; zero_result_ = result & 0xff; @@ -781,9 +785,9 @@ template void Proces } break; case Operation::NEGw: { - const int source = 0; - const int destination = active_program_->destination->halves.low.full; - const int result = source - destination; + const int destination = 0; + const int source = active_program_->destination->halves.low.full; + const auto result = destination - source; active_program_->destination->halves.low.full = result; zero_result_ = result & 0xffff; @@ -793,9 +797,9 @@ template void Proces } break; case Operation::NEGl: { - const int source = 0; - const int destination = active_program_->destination->full; - int64_t result = source - destination; + const uint64_t destination = 0; + const uint64_t source = active_program_->destination->full; + const auto result = destination - source; active_program_->destination->full = uint32_t(result); zero_result_ = uint_fast32_t(result); @@ -808,9 +812,9 @@ template void Proces NEGXs: NEG, with extend. */ case Operation::NEGXb: { - const int source = 0; - const int destination = active_program_->destination->halves.low.halves.low; - const int result = source - destination - (extend_flag_ ? 1 : 0); + const int source = active_program_->destination->halves.low.halves.low; + const int destination = 0; + const auto result = destination - source - (extend_flag_ ? 1 : 0); active_program_->destination->halves.low.halves.low = result; zero_result_ = result & 0xff; @@ -820,9 +824,9 @@ template void Proces } break; case Operation::NEGXw: { - const int source = 0; - const int destination = active_program_->destination->halves.low.full; - const int result = source - destination - (extend_flag_ ? 1 : 0); + const int source = active_program_->destination->halves.low.full; + const int destination = 0; + const auto result = destination - source - (extend_flag_ ? 1 : 0); active_program_->destination->halves.low.full = result; zero_result_ = result & 0xffff; @@ -832,9 +836,9 @@ template void Proces } break; case Operation::NEGXl: { - const int source = 0; - const int destination = active_program_->destination->full; - int64_t result = source - destination - (extend_flag_ ? 1 : 0); + const uint64_t source = active_program_->destination->full; + const uint64_t destination = 0; + const auto result = destination - source - (extend_flag_ ? 1 : 0); active_program_->destination->full = uint32_t(result); zero_result_ = uint_fast32_t(result); From ea463549c75f46bd864bc3b05c3b87f89edf1623 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 13:59:10 -0400 Subject: [PATCH 172/239] Corrects overflow flag for LSL and LSR. --- .../Implementation/68000Implementation.hpp | 82 ++++++++++--------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index e0a21e3e6..0468267a8 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -993,47 +993,17 @@ template void Proces set_neg_zero_overflow(destination, 1 << (size - 1)); \ } - case Operation::ASLm: - case Operation::LSLm: { + case Operation::ASLm: { const auto value = active_program_->destination->halves.low.full; active_program_->destination->halves.low.full = value >> 1; extend_flag_ = carry_flag_ = value & 1; set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); } break; - case Operation::ASLb: - case Operation::LSLb: lsl(active_program_->destination->halves.low.halves.low, 8); break; - case Operation::ASLw: - case Operation::LSLw: lsl(active_program_->destination->halves.low.full, 16); break; - case Operation::ASLl: - case Operation::LSLl: lsl(active_program_->destination->full, 32); break; + case Operation::ASLb: lsl(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::ASLw: lsl(active_program_->destination->halves.low.full, 16); break; + case Operation::ASLl: lsl(active_program_->destination->full, 32); break; -#undef lsl -#define lsr(destination, size) {\ - decode_shift_count(); \ - const auto value = destination; \ -\ - if(!shift_count) { \ - carry_flag_ = 0; \ - } else { \ - destination = value >> shift_count; \ - extend_flag_ = carry_flag_ = value & (1 << (shift_count - 1)); \ - } \ -\ - set_neg_zero_overflow(destination, 1 << (size - 1)); \ -} - - case Operation::LSRm: { - const auto value = active_program_->destination->halves.low.full; - active_program_->destination->halves.low.full = value >> 1; - extend_flag_ = carry_flag_ = value & 1; - set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); - } break; - case Operation::LSRb: lsr(active_program_->destination->halves.low.halves.low, 8); break; - case Operation::LSRw: lsr(active_program_->destination->halves.low.full, 16); break; - case Operation::LSRl: lsr(active_program_->destination->full, 32); break; - -#undef lsr #define asr(destination, size) {\ decode_shift_count(); \ @@ -1061,7 +1031,6 @@ template void Proces case Operation::ASRw: asr(active_program_->destination->halves.low.full, 16); break; case Operation::ASRl: asr(active_program_->destination->full, 32); break; -#undef asr #undef set_neg_zero_overflow #define set_neg_zero_overflow(v, m) \ @@ -1076,6 +1045,40 @@ template void Proces overflow_flag_ = 0; \ carry_flag_ = value & (t); + case Operation::LSLm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = value >> 1; + extend_flag_ = carry_flag_ = value & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); + } break; + case Operation::LSLb: lsl(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::LSLw: lsl(active_program_->destination->halves.low.full, 16); break; + case Operation::LSLl: lsl(active_program_->destination->full, 32); break; + +#define lsr(destination, size) {\ + decode_shift_count(); \ + const auto value = destination; \ +\ + if(!shift_count) { \ + carry_flag_ = 0; \ + } else { \ + destination = value >> shift_count; \ + extend_flag_ = carry_flag_ = value & (1 << (shift_count - 1)); \ + } \ +\ + set_neg_zero_overflow(destination, 1 << (size - 1)); \ +} + + case Operation::LSRm: { + const auto value = active_program_->destination->halves.low.full; + active_program_->destination->halves.low.full = value >> 1; + extend_flag_ = carry_flag_ = value & 1; + set_neg_zero_overflow(active_program_->destination->halves.low.full, 0x8000); + } break; + case Operation::LSRb: lsr(active_program_->destination->halves.low.halves.low, 8); break; + case Operation::LSRw: lsr(active_program_->destination->halves.low.full, 16); break; + case Operation::LSRl: lsr(active_program_->destination->full, 32); break; + #define rol(destination, size) { \ decode_shift_count(); \ const auto value = destination; \ @@ -1103,7 +1106,6 @@ template void Proces case Operation::ROLw: rol(active_program_->destination->halves.low.full, 16); break; case Operation::ROLl: rol(active_program_->destination->full, 32); break; -#undef rol #define ror(destination, size) { \ decode_shift_count(); \ @@ -1132,7 +1134,6 @@ template void Proces case Operation::RORw: ror(active_program_->destination->halves.low.full, 16); break; case Operation::RORl: ror(active_program_->destination->full, 32); break; -#undef ror #define roxl(destination, size) { \ decode_shift_count(); \ @@ -1162,7 +1163,6 @@ template void Proces case Operation::ROXLw: roxl(active_program_->destination->halves.low.full, 16); break; case Operation::ROXLl: roxl(active_program_->destination->full, 32); break; -#undef roxl #define roxr(destination, size) { \ decode_shift_count(); \ @@ -1193,6 +1193,12 @@ template void Proces case Operation::ROXRl: roxr(active_program_->destination->full, 32); break; #undef roxr +#undef roxl +#undef ror +#undef rol +#undef asr +#undef lsr +#undef lsl #undef set_flags #undef decode_shift_count From 4e25bcfcdcf6290c629c8121c6aef48d79a1543e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 14:19:13 -0400 Subject: [PATCH 173/239] Corrects decoding of AND/OR x, Dn. --- Processors/68000/Implementation/68000Storage.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 3fc755228..385662446 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -894,8 +894,8 @@ struct ProcessorStorageConstructor { case l(PreDec): // [AND/OR/EOR].l Dn, -(An) op(int(Action::Decrement4) | MicroOp::DestinationMask, seq("n")); - case l(Ind): // [AND/OR/EOR].l Dn, (An)+ - case l(PostInc): // [AND/OR/EOR].l Dn, (An) + case l(Ind): // [AND/OR/EOR].l Dn, (An) + case l(PostInc): // [AND/OR/EOR].l Dn, (An)+ op(int(Action::CopyToEffectiveAddress) | MicroOp::DestinationMask, seq("nRd+ nrd", { ea(1), ea(1) })); op(Action::PerformOperation, seq("np nw- nW", { ea(1), ea(1) })); if(mode == PostInc) { @@ -936,7 +936,7 @@ struct ProcessorStorageConstructor { storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); storage_.instructions[instruction].set_destination(storage_, Dn, data_register); - switch(mode) { + switch(is_long_word_access ? l(mode) : bw(mode)) { default: continue; case bw(Dn): // [AND/OR].bw Dn, Dn From c132bda01c13c45d28cc4a0413e2c64e473b00c3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 14:39:32 -0400 Subject: [PATCH 174/239] Implements MOVE from SR. --- .../Implementation/68000Implementation.hpp | 2 +- .../68000/Implementation/68000Storage.cpp | 48 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Processors/68000/Implementation/68000Implementation.hpp b/Processors/68000/Implementation/68000Implementation.hpp index 0468267a8..9b2b58891 100644 --- a/Processors/68000/Implementation/68000Implementation.hpp +++ b/Processors/68000/Implementation/68000Implementation.hpp @@ -512,7 +512,7 @@ template void Proces break; case Operation::MOVEfromSR: - active_program_->source->halves.low.full = get_status(); + active_program_->destination->halves.low.full = get_status(); break; case Operation::MOVEtoCCR: diff --git a/Processors/68000/Implementation/68000Storage.cpp b/Processors/68000/Implementation/68000Storage.cpp index 385662446..29e3b69cc 100644 --- a/Processors/68000/Implementation/68000Storage.cpp +++ b/Processors/68000/Implementation/68000Storage.cpp @@ -419,7 +419,8 @@ struct ProcessorStorageConstructor { LEA, // Maps a destination register and a source mode and register to an LEA. MOVE, // Maps a source mode and register and a destination mode and register to a MOVE. - MOVEtoSRCCR, // Maps a source mode and register to a MOVE SR or MOVE CCR. + MOVEtoSRCCR, // Maps a source mode and register to a MOVE to SR or MOVE to CCR. + MOVEfromSR, // Maps a source mode and register to a MOVE fom SR. MOVEq, // Maps a destination register to a MOVEQ. MULU_MULS, // Maps a destination register and a source mode and register to a MULU or MULS. @@ -519,6 +520,7 @@ struct ProcessorStorageConstructor { {0xffc0, 0x46c0, Operation::MOVEtoSR, Decoder::MOVEtoSRCCR}, // 6-19 (p473) {0xffc0, 0x44c0, Operation::MOVEtoCCR, Decoder::MOVEtoSRCCR}, // 4-123 (p227) + {0xffc0, 0x40c0, Operation::MOVEfromSR, Decoder::MOVEfromSR}, // 6-17 (p471) {0xf1c0, 0xb000, Operation::CMPb, Decoder::CMP}, // 4-75 (p179) {0xf1c0, 0xb040, Operation::CMPw, Decoder::CMP}, // 4-75 (p179) @@ -2340,6 +2342,50 @@ struct ProcessorStorageConstructor { } } break; + case Decoder::MOVEfromSR: { + storage_.instructions[instruction].set_destination(storage_, ea_mode, ea_register); + storage_.instructions[instruction].requires_supervisor = true; + + const int mode = combined_mode(ea_mode, ea_register); + switch(mode) { + default: continue; + + case Dn: // MOVE SR, Dn + op(Action::PerformOperation, seq("np n")); + break; + + // NOTE ON nr BELOW. + // It appears the 68000 performs a read-modify-write for this operation even + // though it doesn't use the read; therefore where it's easier I've left the + // nr within the same set of bus steps, before the PerformOperation, as it's + // then a harmless read. + // + // DO NOT CORRECT TO nrd. + + case Ind: // MOVE SR, (An) + case PostInc: // MOVE SR, (An)+ + op(Action::PerformOperation, seq("nr np nw", { a(ea_register), a(ea_register) })); + if(mode == PostInc) { + op(int(Action::Increment2) | MicroOp::DestinationMask); + } + break; + + case PreDec: // MOVE SR, -(An) + op(int(Action::Decrement2) | MicroOp::DestinationMask); + op(Action::PerformOperation, seq("n nr np nw", { a(ea_register), a(ea_register) })); + break; + + case XXXl: // MOVE SR, (xxx).l + op(Action::None, seq("np")); + case XXXw: // MOVE SR, (xxx).w + case d16An: // MOVE SR, (d16, An) + case d8AnXn: // MOVE SR, (d8, An, Xn) + op(address_action_for_mode(mode) | MicroOp::DestinationMask, seq(pseq("np nr", mode), { ea(1) })); + op(Action::PerformOperation, seq("np nw", { ea(1) })); + break; + } + } break; + case Decoder::MOVEtoSRCCR: { if(ea_mode == 1) continue; storage_.instructions[instruction].set_source(storage_, ea_mode, ea_register); From 7df85ea69583891a27ea62b78221c19f0fb69506 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 25 Apr 2019 15:42:41 -0400 Subject: [PATCH 175/239] Cleans up and formally introduces a comparative source for QL startup. --- .../Clock Signal.xcodeproj/project.pbxproj | 14 ++++ .../QL Startup/qltrace.txt.gz | Bin 0 -> 5304857 bytes OSBindings/Mac/Clock SignalTests/QLTests.mm | 77 +++++++++++------- 3 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 OSBindings/Mac/Clock SignalTests/QL Startup/qltrace.txt.gz diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 5a338aa6c..fb752c11b 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -306,6 +306,8 @@ 4B98A1CE1FFADEC500ADF63B /* MSX ROMs in Resources */ = {isa = PBXBuildFile; fileRef = 4B98A1CD1FFADEC400ADF63B /* MSX ROMs */; }; 4B9BE400203A0C0600FFAE60 /* MultiSpeaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9BE3FE203A0C0600FFAE60 /* MultiSpeaker.cpp */; }; 4B9BE401203A0C0600FFAE60 /* MultiSpeaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9BE3FE203A0C0600FFAE60 /* MultiSpeaker.cpp */; }; + 4B9F11C92272375400701480 /* qltrace.txt.gz in Resources */ = {isa = PBXBuildFile; fileRef = 4B9F11C82272375400701480 /* qltrace.txt.gz */; }; + 4B9F11CA2272433900701480 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B69FB451C4D950F00B5F0AA /* libz.tbd */; }; 4BA0F68E1EEA0E8400E9489E /* ZX8081.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA0F68C1EEA0E8400E9489E /* ZX8081.cpp */; }; 4BA61EB01D91515900B3C876 /* NSData+StdVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BA61EAF1D91515900B3C876 /* NSData+StdVector.mm */; }; 4BA91E1D216D85BA00F79557 /* MasterSystemVDPTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BA91E1C216D85BA00F79557 /* MasterSystemVDPTests.mm */; }; @@ -1037,6 +1039,7 @@ 4B98A1CD1FFADEC400ADF63B /* MSX ROMs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "MSX ROMs"; sourceTree = ""; }; 4B9BE3FE203A0C0600FFAE60 /* MultiSpeaker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MultiSpeaker.cpp; sourceTree = ""; }; 4B9BE3FF203A0C0600FFAE60 /* MultiSpeaker.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = MultiSpeaker.hpp; sourceTree = ""; }; + 4B9F11C82272375400701480 /* qltrace.txt.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = qltrace.txt.gz; sourceTree = ""; }; 4BA0F68C1EEA0E8400E9489E /* ZX8081.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ZX8081.cpp; path = Data/ZX8081.cpp; sourceTree = ""; }; 4BA0F68D1EEA0E8400E9489E /* ZX8081.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ZX8081.hpp; path = Data/ZX8081.hpp; sourceTree = ""; }; 4BA141C12073100800A31EC9 /* Target.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Target.hpp; sourceTree = ""; }; @@ -1495,6 +1498,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4B9F11CA2272433900701480 /* libz.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1567,6 +1571,7 @@ 4B44EBF61DC9883B00A7820C /* 6502_functional_test.bin */, 4B44EBF41DC987AE00A7820C /* AllSuiteA.bin */, 4BBF49B41ED2881600AB3669 /* FUSE */, + 4B9F11C72272375400701480 /* QL Startup */, 4BB297E41B587D8300A49093 /* Wolfgang Lorenz 6502 test suite */, 4BE9A6B21EDE294200CBCB47 /* Zexall */, ); @@ -2444,6 +2449,14 @@ path = Implementation; sourceTree = ""; }; + 4B9F11C72272375400701480 /* QL Startup */ = { + isa = PBXGroup; + children = ( + 4B9F11C82272375400701480 /* qltrace.txt.gz */, + ); + path = "QL Startup"; + sourceTree = ""; + }; 4BAB62AA1D3272D200DF5BA0 /* Disk */ = { isa = PBXGroup; children = ( @@ -3633,6 +3646,7 @@ 4BB299A41B587D8400A49093 /* oraz in Resources */, 4BB299611B587D8400A49093 /* insax in Resources */, 4BB299351B587D8400A49093 /* cmpix in Resources */, + 4B9F11C92272375400701480 /* qltrace.txt.gz in Resources */, 4BB299041B587D8400A49093 /* aneb in Resources */, 4BB299BB1B587D8400A49093 /* rraa in Resources */, 4BB299091B587D8400A49093 /* aslz in Resources */, diff --git a/OSBindings/Mac/Clock SignalTests/QL Startup/qltrace.txt.gz b/OSBindings/Mac/Clock SignalTests/QL Startup/qltrace.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..fa886ae8df6a094aab2bd0c716bff389640262b3 GIT binary patch literal 5304857 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�W?z2dDv6xDPlRjclS%7plDv_#?4D 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

azorQv! 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ΝvJLQZ|PpPWyge6<(BJyLS>l)d6 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 z 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

Z4c5Om=vUk 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ඔ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⪙-#Cc_?v{C=PJ?qdfxHP>`L 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

LaKZhrXeT~n_ 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%0A|MOMC?C9Sh$#JqV4xD z&Wbow$(EQhAiK%x9>Q_|Fr&rZ`Dc!TMXnR>f}le_lWH%b?vO6p8ga!{nz&eCfC-s;po zcG?Ppr|S0rW+UmHKj~DDGfBBizvOARQ|;tGLi|E!+rzq6>r&2%1iNI!+hFctMrU^N z6>4aaYL!*6^n2<<%+{E=Mp^(d1wih?rqQkQaxER${4LOQq6TQu$a86!4T#hXxK5(Q zbQZ-y&n=b0IB3;bg-MDMotpE%@RNno=zjWa0+4@1Nbpr{IXYd zK6j*&W>i9}<-O|B+AB73i9*?<7j& zlpb*FRAu=b?Vo=44*dAQ=eL~%YonZIK0dW^sI&3K5S03uZMWg78;)8LyMMFxS(B-0 zQQ&BZV!HD=gH*jBGzRa!kt9xR^#v(bFblZ>_{RP;*HxE7lGzvlM@*Qs%nf+>y5BHj zHyzACz69BXi4JTzelFlq0-k5c2cZBWwPHR!!^Tamtl~t2*`cofI-d7m-p9P;ea1A@ z4flO}CCTeeuA`4y(Biiy>%->i#qoR&G#%Ez!clTJFPe7nvhRokJ|w}D!{KON5mx@T z3-IjN&*da8*{ihwG77n<00ZGJqM-|0VDTU8R75{|-c;VYvF39q1fwn6b?_jiy7LSI zxY*RSdxZ~o%(VQ#SnWft7*3n`J=vqrSIk*LTQ*JHvTsPEq{s;>m^1juKE6Mjo6;6S zZVr|!*Y8!D4@MVeuyBbjUrFH;ryiATa2aq4aZ6^V!a{1Wno&|^^kby~c1W>JTLrWg z^W)f|70IXur45|0E713%K70B_$%+~Tv4niB+N0V6-}qjC8kV4UM@4<*E zfm1lNBOgY@vj)>gK1%u{-(TMm16jB503NNU(9$-zZ2?i*vP*+sn3aQ_-B_;-^y z2B`6s9zPRw#1wV3jx7h*$hBUlJmS0=BhOjH!(n;HZxt^dJnS1(qQw9uL>APS6*)o+x6FeRh`dBjZVt4}6k?RO&{o*EeQ@kSz_-Ysr6F z+Iw*E5%(U|jOHehOulvcQOW!)M{yZb-qod>4b!$YN)u!XKb1{v35=0TUGPCgy!hOX z{T6oJ=Tote6SzOVxMZ{89*pA#_DPbmod^0Pq2PRU<^4q$seL~Ve~_%>Kw6~37K=N0 z*dE1UThDx)(Z&_Wsftg4_hQ4A>eAkMplu9wB!fY=-;*I6w?9@JJ=v5sj1q?&M=bHri0Ua=oL*gmsR8hbmVAb_s9IQYP9~UgYJ8oBt-j$D zwNLN)uMlsKe&6l?qq*SVYA|jq#p(0jDyuvqXiFa(atYwkuV^eHo>`RfiwZU+ zhSF*`sB!bY^tt>Zv(4{2wT!Wq6`c0i4LP+Ha0&)?PX6x#cyDknV~^`p+N!|96WA^8 z!pR`&r-%V=j-T)@5?Wco_GWK@#2VX$#yZiI)O7`yGg)%gPQy|$B0yV~4NqIBRiepl z!iBPgr4;GhJ>@P6a8aoU>%Ye+CWd7}CXVDITXRQ`K8#MiJf4ue!BZ2lETEj26eFSp z8A!4^-JAsqNDfiW2fuX*mY~cwpQ>tXSb~zObQ@32%%E02&UykOJyknIwMnmUQV1GO zU|84*Lr(yZl{{A0-YHCXwROM%VK`+@{y0JbmX~w z1B}_l6CiZc%`UY+mI4z{otPrphDnIZ0sJhVS;iT#p1Qoe9e(|&Z`w|5(A*&p%e8no z;;cKkkN*j*pMY<%9IyX;HL1j)`D$U578b=S^4g3YKG1i-2S&DyC&*G9fGjvD%073y3DF zT7e(FB=0o@gIG=>C?OUXUFj%`A_u^L2a%N2{x;!DBCOQny`LC>mVi2XYcZ}BC+Gn{ zeJs-?TUI&K6kR*Qxb1N5z#Y(eJiC@__EJMXN+g_;n#l6>-v#acDG-{{xeU@QqP>@k z60y#am@7(Ox-`bnDx-tH5til0(JPku?Q3_q7gSnqVMIifNHicPp~Y|L*`ZZ@LF671 zbKw%)ELb55w$DO<7F+^n1FAw5tIv>azc0?3p(il+Ea8imkIjpy(jTl+mD&0IAgYVP z%VVAI77(wg+y5lXJcS&|Al>(DU#a5qJ&V+j$4N@CJh}AV!hFYPS6Mv%RDEl5%C=2~ zJ7j0!)=F4=W(OF2OePJ zD7O*;a^PczA@ZLj>&tTQ_o)4}w zBFZAN*<--ycm6EcK!4*-s;`|}qTl}FZw`wSdN*oTmv80gW@xIM$(bbBro9C`oc{;u z00S{M7(f?bR9VD$W_ki3d8a~=iI(uEF=YYp>*$&DzdWckF&)GT`6YUSo&9}|Bti!B zIqKgOz%Yl?I79POn#QM2POSpQHE78N>pA)E%RMo)w2(z=(--AY8n_$tR1kk}InZq- zIt-cnU{gv@-q7A4OW?+o59rF$LMD2;M^#L$QA-QYZ{{ z^j5|@%uUT-rvu*Y1hj^BdR3{^QfY>9N3f;R9Dh=3=@VsN>SoX9Vax*?(SWyOHZub! z^Axc>$_@0OR5T4#c0!}55L*8BPzHs)l@Sgq}U#}kp~)9=rD+Gnf^Ja3)srIy}61Hz@Q z@&X$M1T)tW_)d+H6~|=c?a(G_^2tjaJv|5B5|_X+TOQaK+Lq*~^d`p;YHuL&QlbX+ z1Lg8v4(FdCYU_k{d+^3;Llvk}%4$F7PG0sS#%Pee6F>=N1dX2J`fNX-hAK1jp!lXrDFcT;ya zrh7*=uGRB2qgpWMD<+ZVMaSIB>X+}M&&9fop8UO1H7`iqHhlOx4(1I#9aBf1^ zkwhh*IV5J0hPfq5S%d}?%15#Q3fCp+7~IVvjX)y987DLfL~o2zMTo`+VZ@vwohC`R z3-`gXNCcu)l7*6K-G(WmY28K9Jutbzz0{xJhD>$nYAPs$zgB-SNy}W@qPeE+v)dRo z4)!}|#5OncO#{26HGg!xd0yd_%%~QI17SLcs?vL&X|?qb#RLCl*<2e~y^JG5S6ME| z_i!}cg~Bibm~<51;)kt)1z7HDiERuJ`AlSpwY@BHOh^eLxB73xJ1?ALLd7!*+0Ey? zzCdQ~A7bqFPp~SIt)|8=H|quXSQ2#}YiV=*|B+A$Q0n_o3I7171fFon#_g&n`_pz0 zGr`J9IVa^q_&JzQ#yQow%1kFSFxfyRgh+=_J;KLovNo`@w5fSQbO)!&BOxe5F0!-F z019cK$G6ovuVybUy13oLd7r&+KgVmwZ&3 zY(zp#6h^>Oc>(`(nVW|3F{#^Zhs`zJjcWkuMCn*Z9HPJr(7VY>YI77!Y)nBpAk8R> zj76{kz2t*Gfo<(1(wO(*0YpP=@%4JWGujr}l{^81m;*|{V19<&_Qu7O*Wq=+6+t<1 zX^hPPH*>Pp_W%e$GeIm(ukV`J3^9i0lMc|_O30o7^)&0EoxzOFRnQjJch6XL^&yG^ zilsn?7m=4IXjteI&iB|o({=?me$~3vG9xM~n0uW5Ix>K2Nh>9KfOR<@J(cz_Rs~@x z2+0fh4omgsHX1YsP|(p}p{Bbd(IO%`Rum^PvVY84%0(E^@fgdh>E*wk>o#Ykm}HXs z01kQ&vY;W(1gD*qQaRLFWs(N3^< zI?s|ukc4We$CH}6u5L&C8~o2l@VoK1uzGpL^{R)_xrMn;(l?)_*xBQIqJEV#?LotE zLNtE$k^$Fy=>&|697cffrY~9-1IoJ|wSo!DJ;kr?nw^+4u?gLPLAh2DC?LRoYNzxH z9h{Clcw*4T%`%M%2yv$>^q@M_!AcP^rxRxj!5FYH3ORN>s_phx=D7%hpZE{ad=cog zNpZ$^?d0u6AUr@iiI&hy@hxH{egFX`xNdD^AKYJKNxw%&#F5lHnlfPglOfqW%vPDU z%z@EF^1*Y-!3I5|T%naC%8I?-B713nyq3ki?U)l6)}rf%kT+20N{`D@D?5VHJ4Z`@>F4W z>UlT-kOj&At2@aqh#F6D4`DbpxmGm%J?{~n!eK~-!q?pD`&rzd-$=y>q`?zMi&7__ z_qM*0j|JSs^?CY$P1`&tigD`zu3r>#i@9`1UPEmbPCTOcz%7L6YOIqbTQ3fxXhS=* z!`v{Uy(uPMuO2il2cLWDUKR>x+c#ULqzsO2+NUJ7M=TL+hw z4hUeQY10-69IRJGM{e-?{%&s!w`uWixXS<{3>` zkjf12;rvHjO>|?)dlL3O2keK<)D1@!PW4x>4=rzE+L3T0h(l5Zc!eoCVAm2y)?L0<$5>7^kP4t-S_5K-3C2Jnb>#d@$u}zi)-AQ_ZFS zwGlo^27Y&g7{jX_Q?DuI+R@j_$N3X2Eaf1=AtNj66&me-tlBN8t6Oa^GJbzF4psHY zi4G)Z$bH|ECYv!9lkj1+NoZeQEiMvuqZ~QD zrq{swi{%&x3;~T~>n}B_UAPj1+ountZ%w6{kVVc8CnUBd?+&hT);DSx0NAe=2yv<= zaJ{rNOHb>dN^A&33RIzQUO)=B$zgnLQm}$AZQ~mf)8V)k+eJV}aQfTs(rJ|b$KpbM z&G&3UN(vk^?i!f~kz-iN+O|<%!>4fHX=uI6dQ<-y-;aRWOpwJo5LDe`M6wU&V zI;E8Lg~1jFpnOyPp41mMHS__>XHA&|D+oP3*1GSf~wSn{w3oX5OqgRPLC3!Rcw&; z8Td7!LioaJex_XMxjGD=qKthC1ZIR`?(_r{gRl`_ zR?SZYL`TWu&`C$PJn!w$ZGz(#X67XUZ$h`uj7ZIN=%kYkhG@*0Nj-jmXv=Uz2~ptn zXujWUn~_rRiQS3#5=GRqR4*#g;OHj_K_wM_LfhOztOvNf$JXl7EH!KSIwH@pRzswP z!~=&kV8}vKgL3%})C`aX#Nbsf1U{|!<`;|B-G2RG>Tf>y`G1=7(TM-tsr~2qu3z^a z+<*VqD}FeneI~Qqm{@Xc+TWhC|I`I*R;TOajn7kZ;UEkC| z?**z1o>4f%^ncQvYqyh*uEqO-D9FkbWBM%8K+2zCmg)WdVc+416Z$K^Pi@kk&lFgK zL9~9AsmddET0p6-|66PQR|)UuqmMPqLLXhP3mveLWV$DmWFJGHWw%XCZv1j`<9P&B z2k8d5JRfdX9wz68fBe;9_DI^*xSE8k0lmv31d9LFk~{InE2zP-`>)FLLGB<(25*7O zv~*?efgkX{zE&JA7*5LCb*iIupxEY?-A=D!E)ul}z*tB&j1Om&NgMIK#xj?4`vTkC zsbwW}^Zwz}I(8w?By2?Z7>@RvIfvK=5@9kQO;GA$F~X$u1r}&3YV@>n9(m_Y>Ebg3 z4F7wh0>c_HAL@kIpS>$H&D^1XSvb5e{Ps6ddsbL%P*@JG5*mMs`R99CW}o#9Mgf(!T9cw;D9o$Xl|LGJW2r59N&eiq*=0gK@w7r;LT6c=IjZ( z`4^p#&|Xse_|$p1qgpb8;$c^)cv!l2dp!2%E&F+-)L6jmQJh=jb~t=H8Z|1OFs31{ z9gDx$vc5v4Q`KAl*OroZXyc$tad(6o-z2fII876~v43sS_s^F$AQ7#$I)|kyO`enW zg>gtGY;i0EK+(y(7O#083Au!x4=*d(mHScK2HMHE!9@r&Zhmg-%nY@IX0Ee3Uy~n- zGSKb+t{3W$jVyks6rtYaMO;%tW^M(#Yh=1|r~^b4vY&kvU|HsOYdhWy{M&Y-< z)oHxFmp}%$I9$kA}C->|9B zlwN}B-2O-*g+yd5y|U>EMMn9~9rYV7E1&D7%&(@MJ_OJc`s-MKfrKo>UrQd-;OL{w zo=95#grxGZ0ehtvSl}P|`9O60E3d9t8 zoED?Ya`^nQ6&0#SEE?>{2{-iVlqBF9F5HpM(^|0DH?3W zG#i0&B!;m2^d`Ssxb1lt!vQ)G`UDq)Sceimc6DlVnT+_V58llGWZBg@dz}am-Glpa zaQ8gn&{lk%vP!S8T~f`?2GXq%-2;-yzw|Fa^z{eS@DVJwO`G{pP6lfQ8$}% z^8yx=A^%M>1^!U`rs6O?`;*K>a0A~(3@k`Z(W#C#&uPf{O0UB;`DeYo0f`>1Lke=i z{Na|NBRu{SRlAu>>{e?HG}i$^l@8Fe+}}l*k?g^O%NRxp$HHH4#TbySE<)#E0Hr61*ZzMYHjcBVI;+@s`6#Kb-F2t+8LC2*UT zK>z$}v-W#M{AWgT(2xeUpVr-!nFZt=hU|@Y;T>P(@n@t8&Ux5i>CxchQ)?X=0Re>` znJDO)51>%WfNp#0A}&BNT8q~_b>AV0EtpW9t4w}gth+r#oCOCSdWs2VBrjzX*Ua*9m}H-3-D#dETV8m zYrE)!cFhB{`+#ChYOYe3LA2W$VkUS%9#T_;OfUEiiWJ81Jd(XZkwWF3Pz8@>t%z*I&DN6%xO z1yjK#+KQSia;iZwl*1k|n;uWN=p6Rq8oa)G(v4fl-N8^eX=;%4mYT2nj^ljI_v69> zI!onGXg^ap92sbn6VHy-@h7mt*j=P-H+T)~y0lec!FV-TF&2gP8NO=g+GEX=lk|hf zvzjdSdUvRcBF=|tZ4R!Cw!#hkIUHziohYwpf9)yd z=UAgy#y`mB1g_9X(2KoXM8`HxBX&4Lf`@H^@YPhp1*#UFOg2O-C-*frN#}t|I?qU; zk68)h16BVsglAFJC|0xR9tXd`^QNWY*PnXL@N{(-o3#JKV#%)+FaL1Ik0m_ID&IdO zG?)p23rPRx+^B<+85X?x00zyq)Mp@>hnFZE|CpVR_0bJtB&-T8M)CspBdUp8INosv z<|8t4_oOq@^qh3_s;74F7-5Wc)JoSK*fUz*b*N}3%8QL7qs>4N0I5!dX4T@~+ zg~))a0x~j7n-hsjU^n7m+q*bzRGwOLwCt}SkWw?4C@g9mOBJ0IhRR2ABT7`QGa^E1h`+)7dauf?>07hDgDU2$D zHuUPi{q>_B{qu5in*iR51ECy68;i#`u|0zypi`H&vg0{7EAHP@^kvt2pYt&1DC7B( zEW<^!Xf>pdtgrs&!bcTzD~l%7E~LfV?ugfp-=6sg^r4;N@Jx>^hQ+BFOf9aD1Gx zLLQg_EEOoA_(uS&wC~RO-_x2o1*Y_f3W~xT_@4}1vjeGPkqo(Qxf}zA=l)5$g7j;6 z7}Z}`SXnp)06{ZSZ3NOI|~ice)$6PE}^BekYL-VyKYZAfc3084BlpX&1d}=sg&N zfr>Y|I2|D)t9=DF6@R#~nwB(UVQ0k%xb283Vg7%Sjxwr+PWyJOFfbjWXf9u2I6RobJ5`50j^$584=zc z0jyACs#+~Lrs~SVeQ^^vGhbYB*;)U}xM&POScMZ9jEFIho z-zePr&FL4U$_Q9%FdMq#J1(a5A;E`?&FwY=H+7A+irxF6gKOt{Q&ZxTwN_gB(Q2CT zEMhfkAY{Y6J9YN!Rr5|ZN6Uss(h1l<_9FIQwH#(Q{)o7ER-@M@vS&h5v6~9y5OeQh ztpF6)EDKztJfsspzF<<>7nZ|>M4F6HwO`DD*eE!usGMb5x+1ZT5r*G1-v@35SdK=) zIfqSq{Pk)CzNmFX>H$(N{;2KOZ;Es1@=<7D0j$@o@%&q3(?Zdq>Zn2*+1*IIAL-~{ z5wN_fH}8ir-5l4a`$b%het*PeQ0+A@JcSW>7_g3ocZZj!g25Ft7&6ZIv-a5kJF^v> znM_{+wP*u`BUm;Q4T~5gScye|kW)Ezxmd%H`&jVxs5c`69xA^3y_OrrOnqAl%ooyc z6Q<$Prb&DY92)t^<=^qypGiHi1pf;mcP;KWarNK9gTeNtyHT&UE6)Q3hyrKtQHfyG4ci70lB6R8>SgbT-z-sE zAu@>8Oq_DE2oCH@io5iPT~CCot-dN!|qswr5w&gY4#4S=0Z9*rI9h<16#IKKx8Az5G_0K)CPtyG1*M(;l zw?--q#~X`NzrrV3OZ%|4AInH?id)f;E@5aQ4nCGXN-U!lnvUhCFnbIGMJ^&1F#rf%wB7Q5$0554yaH=aw7PD|t+tQ6xnk_fS@hn5r) zkFqaL^nU}S9c7gOKu@Vk-BX%iv1da;_0RevPMNR{a5Z=VFF6lKcGPe#w+q~*+=|kY zcj|cY_~6H9vj~y}ema~(q=WZS9$~P<)`{~2HJ|UM4?jnezH7E>|T7zsps)XWP_qRu+0qFdrpOw>LPpvHMg!Hya zgu>jivvt4R-3L%Ttn}KAClsb=d(Xx>4iPgT-+zs?7b&{i(rxg}hxkJJ08iBF(w2=n z+=<&j)jzyMZLSdmx^R;DpuV-S1NCf`w37Zv777x0k&N8`M(+`Hq`_+t=n;o0 zo`9aTL#Vgdx=P4eJEs0%j!)&)FbA3#Ga=GU`C0W(2~cAYg>t2T%PbVjXc0&K&IS4xoOjWm&; zTY9pH2)}feO2l7!0!(Zp~)F6QRT(3o& zazB5sQU{I{jtBH+&OHc+d)|_?mRc+RnMKl0m`?{vjoQG<@2Rp4Vh7MZYBQ75p!^ju zQTkQAW&-{X6#?`pCh~S&`llvcWquA$Gw?%(N{>LJAgchQuoIBgGxZSsr5SzvJMRY} zvCIZyQ&=Kkr)L01%__8<-lse>LN*A005xTtrK5&+6}rP4S!YBXXpLNc(`6xxxe&F0 zEQ4Gm%xYN5MUL`i5$PbtIS?Sf#uO+q@PEZFh^4t$soS{SBk;@gJAj|WQceIrNvcxq z!e}cFO8{L8S_1wL#6?6+lVCxDh_lCTl+Hv>Iuq#`Kyr%9RE8ybFSLh6qJp|tR#4l> zbXEp3aU&uiaY8BqW9U42ZH7-VVIr2RVAS^ZT-gi#U={2%i9>`_k^cut!%Z-SybdRF zs7A%!7LqFIPI>@cA|AIU7rZ`Oe?}FxxpPdZU>gA8Q2d9~-ocDYp-1>l$e_Uoq!#W|meiH=@IeIb3iP z%nA4c?@>}9+5JCYH$NW^3eb>tEN|gYe3oS)+mH z+m^c*#kK&j?#CKFHEH8Xix{Og8<1+mcQ|eN9c5XD_ujrx&Ry$CQ{B2j3v~ls{{0i7r)JM(Bj^CZ3Db?kXN8^m3Zs z4B-l!I1!Dlxhj!*{B)!dxe9i~#DQuKxP=nSi%gb;;R3`q@Vzck&II!Hkb@C2+?9#z zC4hz=0qIvFTip$VN&kWh%b(RjRaQPyP%2=dxeDe*8#NUd+|9K#s?@u_SNw-Ov$W|4 z$1-)ABWioDel8obyS|A%iqlkl-ULlxcjjuH;L54R=j4;&G;8m3dUk)ODA~|_@89wVxCb> zOr8ws%lMv+Kq|=10oj<@@uD_ue~g>qh_5bVhxu5R;okVD)UQR2wS+7pF?o@OQLIy~ zL#74Fuhw)=nOZVkt&C2%xFoU#5D!JPK&1V4R0Ptta8J1S`dH9$z`IIcJ*LTT0#I-q z>l+n9WT6k<_E8rx@WSW@l$ingHdqeF(XeTd2#9!e2L(S{$ZnYe2=>!NhLcczMwNOm zlQ*uwb~xm;%=r13CISkag$>9pmm;laK;yTec-bw(8%kB;9tM}aXL#QM6LVq5Ev#pbFJbmQ;%pJWIbhL*FW9A23rge%{( zSp1?N$D3x!%z=btpe$>fmhZAH#H?}11_n#ZSLzu|(huSy=HKb_0`EX;2fBQ^?Klb| z`?^@X58%xLqO-Y;d(0QAVoQtfn|%KGO@Mho4xlpvQ82Qz`q&!#0#+E&>4EJ(ypQn@ z0iM#K_Z9qP>jIJuFmtMnRaTj`w?(8&LA0=&c%QkfKXhl;e$LKg_3 z@i^DC9xRVw*N-zLzhJO0t=Sv2Y5ptVLCPcu2b51S3;~KbKS+0WL!mNobMrx+ zSAZEn=`rReL(jvY_HvnSN9>R$(B&eyYIp+Z1O=%T&G98G01mL|buN-w@LlgApd%|q zWHtYT7y3pVB>_%=kzvG+Y@;Jf^!B zY%KRzJ)I8N>z8E~fLEadHv-$5irW6Jgi;oWp=nE3B{EzClu>#_7D)cY!#yPdr6u!P z{ZH0IHU#H#G+XWf{UBt6fZ$**+-+F^W&jz{GG+h~0mWy4oT7d8vM8EjT*bArPdI6U zf@Sqa|NRJl5L-Y2i~5w;tNAk#hlxgp^ZRuCMX6ha4;tKscNhgfECC?n_i-o*TOAXr zAd>9*UEs9_Cke@yz+;d20O-HhIi}t;)O=zGIiT0~h&ab~o?m#kj1-8#s2qyx87Yi3 zi}6>q6@(Y0P|8EbCKp5t92wXOESO^}$RbFzq$!W>Y1@=yP#>9&I(%>$)(ffZFzlDi zVLK;RXJw|YRo$z{VbD9|-tD@;ul=>vL>9y?VRpy<4@8iWI*Y-rWYp$-tSW94HGs|< z{}J-rB}pLUL07J}I%zBux|p<+9(b6%**_Vet&VW$&ey0LS7-hKQi3R@`F?wu1d%Bu zh>V)gI4HY>N6X7bU=g6aAezukc?PZn9f)8wA*PLst)m~cozl@)LBj#x8Duj{WiyT6 z#=oej{q2J&pJ5%B-5`GM_Sh2)SxiES4jlgWaa4VDloFRh-bbai>bUS^kcK*;VW#9b z#pXYedSLLYx2SQQkrb?f18tPhh!nZPx3$}+>EUa@qhI8bW&|CP?w;>T$ldd2eH=!Z zIMl$^5JxOm-wk^@sb$`xStq;Np<%+hy=Zqr!z;w;& zl3wNysA@lwIAAZsZYz410o_Z#+a_gRd)Xp#uQPis7xj6u^#bog$1s>0~T23P+60b1SQ`T`UzSKZ=f6BrU@-3|mPAqzLHA7Qc2D@z7JXmIs0 zB!sL<9E1YMm=|@ReuVi#O3qhk`5dQxOvxAh;`{~EaR9^9ekX}8p|^Zz5r zk@{}D+qCqZiXyvqJ#|VAW%RpsDtby`t(xNxz6-TLt(qpMZpa522QZTT=jfu!J3jZ1 zz|x93M4pbV7iILVrpLPr8vqA(8vH^*GolVW2Vyum@cm0nn!wNL=Es7h;f5y%W;q{! z{Ug0?VKjc>3#p7Afh)jNkig2wLd)UL{a)DFB{Ic_svpDMuQ2<^mJtj_owdmH3&hSn zvgB#pcuD$5!_WY5mK4|^+N3dpIjjKA&yb0Yu8<}<-%)z9f0G@9g^aK!f8xF6;CPX9 z0Qt=Wda=Rek#Q{OXZhwG>wMzOr7VTi7BlK7O~Y3w7kktXsY3Y(ya&b<#6nF*4&UQb zeC!rJj*%aTH)wT(=h3CSyCd4}Z3q|N(jdXNw1RIg=cvfiw*Ul)MloF3A(a8AN=5qu zu;VK1KlthvR**HJ{vbcMh$4XTi66vL=6m6A$S$hV=6q6_I7 zH`HdD$QT35b+~Z2wJLed;!-=4HK0aBwIu=(@1JY zs2K48?mN#lZ#Zvk?(^w?KqV4^>Z7rAsF!Q%=`hpj544x14&b4%I0lTr?+9rOMDi5@ zRwdy7s}1uyt`Je6QS=0ILz~KSU=lIO=_7i~4L2@GO@Uc&y2KtYL`-vT8%$GopgY(e zHFp^R4~Lkz-qD&(29@|GH?e|_pp;-|2!WKrGvs8z4#f{m5k_N=NGG`V1g1fAG&zvt zET&jM4j;IEE&2aNP9Q>6TS&diibR{Z1I6@+cOcc#nCAGuXJ#x1V{R7+Q&f#_sItCC zWfb(KFCPeAfMgK1{?W2t%79XsYzDC$U=Zr@)CynzcMChNY)^}24FeA6Z7*s9#WBL+ zkS_N+f4@PA#*h_rDp1Bm>X0c3s#4sF5Z*B%vfs)D?)yeM5%`n|-K6(DH%t`>u{wL~(;LS2- z0BCdaK}dwB<0jX~mV_K?kjElqhZ~t7SW}s3aOh<`V6v;-S78?#D{mM={4QPjSATEb z;LtxrJ|rAq;!nuP8S_e%k?X4j$A{)E?oZDvF|>gVjEOW805BRPvG-FT;}$3idYXbkEZaA;8%cUA7}I@93J5~5c|mQ7MhppjAn(muHz zPh=+t;!dsvRbr^L!Q-Zt+pXI&m^ooAx@LsT1)qcYKE3R$Mg z!qpVh`ybmG>kVO)J+8y(w-0E__el7Sr}mtP#+rKuz$ug6^!W&ow~WAP{x4~7AJ^2G z?~8VyIi0zCyxpCiPNl7ir|qttU5nIqiduy1z1zy1>Gkq)+iH~p))%NsWbg%*Kr*|% zo~cz~tfQzX*;{tC7AX}Zs0e90YNQGoi-3@lw4y}BxC(*9ysYGWf6rPgK!PmH{R?Rc zBx^nEd49j|@B8xMjZVj@W=gT8^@aAz3D+Z5QWA_EVET0Uv-jDU*bZ+&6y1UI&-T$A zPftVX!Lm&VZwaHEIIUQ&(tNI}DF7@K4v#zgC*QwX=G4ak9r%HNuoPA0FPyuQ1a!LJ z_rVZs1BbzTH3tb%B6xruOKX)0T=YBC*&Kgkf?ivSogfU>8};X&?3xZXAq->6v(|rt z_qqukz)X*p!71E*whRa|4cr5$KbOaXIZqPqIQlALs%KqWJS`giz%-H)$W>$u+uFqu z$x4PW<9AR^20=}Gi#qZVX5k!`oTkNcJ~js@8Y%)=4Qw`Z_(OZZz6zEUTb&U)97#f! zsjN$22=R`T;JYE_e@>54_ZV2Dd9gcDQJ_5({vlYLfsTH;?p)0lI0{^M&1Vf}u9So1 zJvyYQ^LD?%Ji-R47BUs9Q*J{2N6GJfn2y7%~MeX^PM6^<*9`%5q*+9i8 z)*OkUrfZbg%fS*j3okW1MxlZzGU(c%4i(XpAre>~>%Pxfu2lZ?N?227#HLvM4rdiH zsF9p1_~TWIL?wi%1V*h0O$iw^Bk^htD9}a^57s7EwgmrXbTbYI1!0`mfj0-b0yri- zZCVz49GEj{2~1m2D${X-@1bSAY)#Kaiy9pkP=~UPi!s<2z+*2i98nGFp`6aitN9ez zw1%+}5#`RSE88@q!wB*umCR_;Jv&91+BuYJ1gEA8F^qA7i(nAT>+9&h0CXpDuFnU$ zNKSBrsk%O|11XEhpY|b_@g*Yd*@eC)j=qYu{Z+-JYDmOPjc`Ul9w6Yn|FtHBD9_AM=n>C%B z%rQAwK;zC^MMAJ@f~#Rw0A?!jW^Yv%U(8$pplv<-isJ}BfERIzwv0Dk9|Kl@KzR9Y z8*i{khZ00OfZy5hLR);&*V!k0T_@&#X}jq>Dx&2*L(%dtfR-1T&?p`OZSvJ>%vcy) zjxXqr|IlNJffV32+y=uk8WmV4y#h)Q#!AMKx}&VXqDP!$E|@c;SGXfFXQtRq9&U0} z+uErzY6#d3W|Itp5CZlOVHk(4K&6@8z92SfCu$>sxbQk;qYSPiD^lq;rZiJ&#CT@` zt1IARw_|uUPmvg8HtFVb*w{WVT^ie$I|rxUKk)9*krQd(F)egBchioz4}CGzUG6lY zENH~kP=ZNrc`>YGS|C(rq9%w0A0RzcE8Nz3CKC^wM9!${TL+^HpfD2n0|IXnYobh_ zV^fxA;y{Gz3#Ez6BSlg9hD4*zxy4+iNfLD{et`1npaFlG>E_8w2M*Nsy?*-mQB21dqG$Ks{xz8YsO)v zTd8=?g8%dn=Epa*r!2?JD1lzE)Zgz&^)CsJL+&WoXd6GUrIzd8&KUg5K9@V`91bG1 zmHu45Y-!O0rr(y~C;T}(N|!LkC2t=PL;k(Tq)642UY+t)8vD}&PcHmg_|sOrpeRKH50`~>!&5MZ12Cx3 z<_MKMiN2*WhQm92MYoQGkXZ8XLM%yYL^qq%o#&3ImBvrX#$d9TCk+VF#Q_0u5vt^M zKEC-4-1TtyT6s>(IE#ySC|~g?$gu;Q`1m*wJf* zU8XebnhLhriXgUGJxpAIW7QZ<>vHYM6&+)66$_>a(4^_6M%5qxQUWddaM+sIsQKsC znNrxOFbq^}rzOSWbWVUHmMR>k6nfY^oo_EczhZ#qg)$B8Zkvi(;z2YplyA1nsei+? zrmFIIEd|;OGzs-TN@J#>JFf?ptp`C-WBV3;r705zGk~Y8HfK_;F6Js6SHt2=dsL~W z8NRv&r~~g8ntIgfY;=104?*-OpsN5IF>33RfI$)yiUgj4ma@a5+G(q0bJzE@P00fD zxdUkt0NK+fbke}^^0=6h-To!7Nb=U_JBk%m)lWr2OD1dZ5rmJd1-OmXSf*%y9BQ=lV*rQPxE%PnnSB_+Q52Kg z%D6TBPP~aZVc8CM+sECg`WpTU^18?d%ty%|Wqt8g=IRqWQ~yI1Od9s~7Dk8bvxo>q z#o9gGVHHXMR20k^$I>PYizsO_aG2cU-K81Q6%bn6QyAVOi?T1tcSd7hLC^@aWz?62 zn2k_h7#RNpsuX8UH2*)Yar^kmHF5A8QQ%o1r}V#v^TdPV*bjW=z*~TgO$hsuyc*$U zUu27^V`#CL#ZENCAd0~wWK1oc3gxpYJKz#ckO(ECuWOZn)l5LiED_`s0`3G<&$O#H zqvNAWU^(I!1J6PiY!aLdqem&|VIYZUe2(#bd|F3%Cj!{hzGWAQIB@^OPux9AyJPnM zoMZx9Zp1K5$sz)jr;uI>VVGe4=oa>rXWG{MNDhObYvaRTfg31&c=EIleE1ufwdINE zsAKT{F_4^dy3A>%wYGs<_m7YkD{A?J1x#5kqwkLn5mp1~h5)vE-Rc5mOXGqwxCV0V zWN;Zy^85|z_qOSswZGRnar^0z1Y-|ozpRd@4uJL^86Ol4&i@-Btee zI{XUK4#_DJM>bf(==(xS`~*+&y)uCV&b^Y|Cdg-!I~z@nJP1XyU#%_(+yJ zu-)zdP5DDU%#3BItD)HgGCWLs+Sa`*r}&U$8d>et_oG7hD1=mIYs;BG}C0{AS8AN;C*OzXwxKhKMJ~ z$Oz6PdTzY4-E<7T0{CWBo05n&#ug=C0g*A=2fYlMS)GZSe5LWc8q~>fm>)2V+OBkL zEUkU0cVAe;*5mLmKiAu_m^uTQ^&5f>igrttO08$Xr9D7~We9wi9E-(qS-H3ml9cn5 z&rzpzYKc0I%7VuI-n>=9A(VoKHE{W?CS&0@HB^PmLcUyFq?MWxF4&*Sk zAPIypFITGI6olXvIo9xS{UqT4m~F)CE~jDK&W)i6Qi*3k-H-_x6nNY9HFFs%Di7^5 z-Yxq0K>?oWvS(3cc8nvIsAnwvYEmHl>POEa|DR69ezhYl;ft8sPha?W>G3`DfBA+@ z^Y{|GRfx%N@CSgDFqL@>0$S zxe+@pjW5~D@+j0hYWIlR-VMtiaw_+kfmpI^WyX31=v85P0on?%lWfF zav+PgpqT>x|LPxDpfY9(n)ix=uE1gXi|{wH&QzBWdX$Th5Il6bspln*%^r+n#8u$t zkImJ6O4AJ7#_ve_f%z!^Lgn0CjVjkLT{S&v4#Eh94kQrUM&CU1jCD*iNvR^KN+9fX|05B)L}8{xR?b ze7!|);#S^2A7O7|nnkezNS3geoqc@MBwaI+J8>Cq5rK29vXF?I3+=DfeQfzTKE?jY z*Vr#m*9wSmp`B=R;zF!FFuCHdV)R>FvcS8utyO>2G^H^yVRC9ob6Qg#JdS39dISz| zqhz>lCF-8E7VJ&Qx_23M&tKdnK2el#I^P))$rd>^=s15QLazT?8^(&OODEXsJ3euB1EFDy1r#l!*W+T~2N>a~k2;t(25Bn8|Da-3rb6O&Pi zJ7X!Qy>q+@-o)ypyUr7Ai^T(ltvV(Pj^!uPV^>vfK}PDMbOxg|hbm6Mhv+Pp-oxh* z{~;}x9EovCd(od^IssPjqZUh_i=Sv9$0qshJ?awpEZA7tFG6k+ZSS-7ab3L^9Gl3* zFpML5O4pxqC-I&~s@m2g3sTe;n+0^`6?6`4CEz|Dbv;#+kxDBeW_rnAMeAhOQ`u}w z>p6%}P1CPL&uY`=kS&cxk|8)9m4$6K$T`s!VgX_I?y>dW-B?H61(S5dmg6!Lyhi&S zdlFb6m$)4s92UrB)lV{T3t_5(qtS{o5hP6ePTXbM@91_*heER*0keC$@DqP`wdqq@ z8pxML+$=mPT33>u9}ss8VF3!xQM{<47LP%#fY>)YCt8RiI~L%SxT7KcahFZS_9L&#T`O)# z3@7EZkrtN|w}R^!2Z@~!iW>hPQmske`GH!K9t6fFz1qaeR;*)!$iB@?@Ou7ybrfDrnDq#O=u^;A&k{b z!`%56OI@V@4uq|Mnq{}tsbpk^$AKk3gI$7h8EdJ^v2s~|$?|O_OHeEjA+s^0T&IG& z&lF>_vvS`TmuIHdML0I_B7frseNwM!Nq-=_JLG{TZNP<0Pw@Fp8v3QqMC!f&{G$AS(8HeXQi-@-{4QH$PNaFkttiy7%v3+S! ziIt4gw+ch^1dX4+g8fX7u7PS7Z0f#WiGU-M%8QTn=YD0OavCirR7t0(+CigCWAg#^ zf^FqyJpg-J){fI#dVS7?l%h^q zZ?-eR&om1;72B@t;-Mj@-)8PJ^iF>0e^g`s%I0^&$uD^KqIQH;dN4zQO=$qYzB+PP8qAQNbT?cXwk(zhy~_>e4)hS zYEvqrV6&^ya*=wGpbFvB(pTAD%dD(Nk3t`>MCRSyB zsHK#@aU?Kbt|=EJ%5Esl1E+%9_sx{xHEe;78__~spD9JV2#&beSI80f@6Z;~sWz-E zu_!v0Ckdw5#nXroht+369dpH5J?<4y+o)Ba59R8I(0%+))W{! zkyH%5=4K{s2rVyZW)px825%!t= z-{N9t0htUS#M8b;@eDOeFk_=Ws~KkCY~FMm++nHRUg!XFQpWH$oCL(ll;lZ0CNGMz zimH+&^Eq5M%BPF15&A?6{KW&mpe|Kk?@)=riBCKVcF{|$F6Hbsr!Z|yob2-D zfHCyS_;IpCpw>rzI%mkD@c1+mX8IM6YT)agSu1^`P^# z4-za)4OLZm4pVUojCu#M+xo<_ut9tR=oUn9(btb;&v2ARWZ<9g;1bs0C=)m^0NfS? zT7#5Y{g>x-FN*JL?0sS#XZS(kSOO<~|DYvw6up4yWK z9Q|U8b{bMcG|#iB+v#QH=us9xg1db1~TF*!=zA5hm` zpTXF`b$Cu_m&EN1te)pXVKbU4Uh)1}yHUlrnA7<9U&f#lViLVnPI!n8Fl&9W9s}fL z7;j)r-ECFQDk1jP_0*aoSi#(!o}XS$V`sWP)ad`>gxKga+bHojuH?b>tTaA)-uLu{> zb|x5ep^R13PU7d$=qV4k7;Gvvcm)hDQxDz8)Ed)@px4)<1V&R~(>w*_6n8w-?Lyo_ z_gS*r7IXnmrfS&5M(&hp{JcIczpw2Mn&Q#>kts<@Opc*HqWn}43KJ9lM)l^|CVMhP z+Kn_T5qGYau>A%d!02XlYPa>9%n4e(ex4`h?g3$79eVoR8(g`><>fl3gY(z|yTYYv zmexI8($}KZ7`*f7MM6;PE(%Lla~m5wAFs-og@@;o5VzbVv2W-Hr1P`1%ZaByitw#1 znnXR@24G-pSJ}{$wRk#b7E`!EI33wmE)$+_+)gIO0MJ1|n^OvG#`lBUpA!R+pzY6% zd{Dx;=J@zO1E7LRZ8nMm&=BvZ8QE>g*G~U<%A#8 zG`?uiSbnY|HeRoomCIid**o|?u!jur%8*l>Lp$O1wVdz$tfOp`@dHdDUZzb{gCdvh z0UCTCC`B|H)AFLJ76Imamq1VK^m>3kw|w994)D!r$4H*_AYI7Mae3GfYco*%z+2d? zd9N^NhBJi&cf#tjc{J+3(bKr@*K)Xh+5`zMJvlfCLmQdT8GAn}A@TuTX?%*|0qD|k z=%Z;K;Szv+hjf(tEL~aNUsv9EVMHdl1XMx+YhEz@v<%8e?LW z1a3c_r|4=s(7rYTskCnD=Z=BFgb}nI*yu=*fDl-9518+W@`P_I6~hDQ&uH=z{~yxi zg<`YCllX?`NKHmCIE1~WC|9rki^|@IN&v!tT!QPKMiFbL#zv|Jo4Ho*cy0a`EG%4v zRKvf5oko3YYZ2uQ`;8qR<0{+^>lx75T~BeA)*7$!#dLvCdT@AfIuJglbrwH=Uz{41a#;~&`$22WDrb$nb5e@AE;)ejH|GgmgkH>B^&6t=}@0j&V!d%J4 zy3i`RSSM@A#acp&^VDujb!|a2ekcm4K>PwDtOl>Qe}OMC7_av99?P5Hg(OKMGQ)`| zL>5lhJQS8AZs!pei{q;MJ14A<0Tvh5q1^;noQs#dr7qI=PtPp6^YS=wF&M1m?h*=8 zFf0NM#kXGF#h3`3Lu_I)sLlg4wp(+uoH!Vda_NlA%3ZuFRKzrg3hbn{+NzM6oL+!^ zur1%WsXyV|9)s+#p~z+xyCVM7;6`}3G12o`UBiBaeqV73KDKpY#_McUc7eB0jHV)} zG2N`brK6Unr@9(;=#da6jSf+c1S{Y;Dl)9=Z_oH~HZFoi!1gTYW@tmhc?sJE3Eu)_ zAKY1E2kgKH&>N;F9i0(9S$>AND{29yTcR&IPM`?t0{W2Gz14b+X(4M1!WmltTRCsv zq%rKJ(kP6^4xh7qX4-gwgJHqMbBne4`pN&6W14E3_hr3Zl$eTA%{(;uYb@$pwyGZP&QVi5Wyo~9|e8q>0(H!Wl}e!Kf!w-COEG6X};s5Es|0%KK- z+T3Fi5Cn{u|EplVt4KVJ5PEKpF4Xth5!Wc z5u?dnmC;i0nR&ljE6yqc!b*Zp3nCJzkZVOB_{)bKeNtgHO%ciAdmLU)AHK+SqBScuS} zlA|bH(PN<&;fiMwle>Ce5=#>T9HobGHz-meC>>rPOrf9Prsq?Oc;E9wcv;2z)xW!U z>Z`bp?=f(}MN3$%Fv8W=1B?WS6b{v_x+Ma@@+$iMz;1R>y9Qt?s|&y6x{uo4pwg7c z02?&_X?Pr?(_@xe#FQZ129pBB05gmS9ruu9nctEe+~l0Wa1I)Wc8}e~A0-zTqM)Ef z?%E|GbwepBb^0$a2Hi#EFP?{04w<5@nyUNS`P#~pd4awr9_XX4;k1{&fqfyA!R_@zmLh&{O3SQ ztZ7mua_Az?;39VWQUsOav^$8a2%OJZgj29nDL_-p&Vscti0MvlLA+@aE&(X#_yt>? z2gO5yIP20cC^eT`(t@u6anv_xezdQty{l^lTp-tC>?&g|KSoB3AVWEbxD89yzw@0j zJ+oS%64(WnFYO~tYJx%g;D+LQ$`m|1qe(r$B3Fl{4D)DAPGri1;ERYN0e7LU?z~;` z^Vwz{2zPhzo`CxDwNlv0xFH1wvE|rm#Nd;wNuJYUsjO!M z1YzQjuD@5I>0Cs>Nv_Z*VWci}dzhCGK2mu!1P!9s5FPHCZ>1_f-KX&xJBXaihlY-T?r7HpPs9mW#m?wkak1PvuSogQ7?87|hiX1;je9Mz1qns`+ZDAKAjo#k z0}QtL#itJN#k!z&1y?6a7qcWHn;{8<(8U1;m z^t-6e#=StqkDD8Xnq6A&2#LW?o zC4ocwZJ3{gRLsO7R%?FjaC>i+Ig~HvkA6s}so4A>xO3wiw?LOW1Sz9j>*oH}1vBVB z#@VJ?1qLk@o6ba)pSP0F*_1nY{7Fa%qjFa96J<*(GTwHMFcAio1*5p0SBfM4Yc+bu zk@Qbe!{AbeK&hxKv(0{o{Z3wP986)nk)to6h8V^b9Y%sqKB)Cwse8!h000B}4`?OL zt`9`wtCcKIrBW9i)0YE`8HBDe!U&M&dOOx$FBs7jMZ{oE`<1(tN0}(1gu6w?HoYSnqA#7CTbXo<0W!qs4l=naPxM2ax1}nDd>-eO3Nkh~a8n|fd5($%GeUZ#HBfukr!%xL{1lVjx_+QOBGig90MJLS&IAH} zSQUX@pSQz!nRY>W`u(S{U!Y;m6__eW11XQm==q4-Pq+a%+{{tlDcOAC`@lAWp-P-? zHk+rvXK9)*SR2sb`z^J{+h%6dq>%zVL@a-W+O(o)9G+WnD;)GR3-(vQ3HGLTx_*-e zVhQjAwu!o~ORx*Rm#*M$F8X%xe45OOr&yg1tJm+<)~rNLh=oiwp*2Zd23D+xz%sBp z*MuwsZ%QSeqr8UB%jufGWPn>Bvy(J9*dz_}gvsJ$@pTZwURQ6^uQ-UA+{}B3`iC&2 zSWPiV5F>gH-*4Pvd1Bf21hTkdiCm#nS0n-i=w-u;vhP#x=3Pl^+5sKP9f8{eNvp^* zWqys~IkFHn@ztQej{kNHhhMvQhW3l)D!7J@eg~JYWT$bz90-4 z>k7NTa61B#Y~59z94t*FY6ZHw^SzIqt6pRU-ZJVAl&mWkd*l8dk=cYj$mH_=d0~Hf z>vn8{w?{9jN6?;No@eT`>;F)_6y`?6s=Ys2098Rb{wQZxgY3c;{`erViIg=^q5E{b zNw*tFbuc<3W<`%UNnWWJ1}I=5bU?;9aht5WlrEpx@_wBGoS%@s zS1jKNqj;h$1a|*f`i;A6Dmr$?`{MW%>PoTlt#A^031$?&IZ;VmW^!-`a%GGwxvQSktz`X75 zpXCg|b8_Bx%tHYUG0jhJ-7ud@S_Q}x48WaRXIvBW1j(lIQM)BY!GFA7iQS(d3+(<~ zlH)Fsw*tF=7l|!`G)vGvVeQO}#N?x4d_MT4GG+W+os|{RP#TEj&U#W(x?J6sRC~=p zd-d1%FF&I#KwGLvgZ}I+MrcB!=>2db3F-9ao-f&?n;<&~9Z47sl|bKbOlpv;2CyFz z&ia&i{(^)XIR01oiO(U<&(?|TGK!&iUZ2-z?O0toSFMtvCS|uVN){@gCK9%7nfD76ioF ziGE*AcJqd6886D997g<~2a=y&e$g+d8AQ3Ev-ZVn)eB78)r0kmoX7cEO zOi>2MIEiAEZ3d!%mF`w$cagjE{W<*+`1{fYoEMCRkBotv+AAQ8IHOzZj zD<8`!@Ow0iDn_p&=IXSJ+>Wb|F18|MDUqXjFW+$FFHwF%189hX2gzP9T9eTC(nXkR z89|Rt`wlRXOUCrszpve_@pmr@hnqCTlDfCRx{vP%*FSNwE^XLP&qE#1tNaNzXYv%gAeu2TB?p=m z5%F4)W(NoKKaN-u-BX8|?c>YzlZ^t^UPs&LeR7jtS6|dRdtXkgZ^0!Pl_+Ve;2A=U z6HzZ-0U~Rk_5QijzPaJE6&Fzs%YtLU0~-d8`Km2X@THIGA3|5mG*h8I7s%KS$ky!J zmsi(b0K`hI$XQqS?E=n>{dn;hL`Ok<0zw!u{5JHujN`gCDxo$&g}s)xWOJdIuU@CU zF*pOwRjl3>#r9%cgj13T6LWWLYnR(M`4T?tQ4-}Amj&nYuxKY~Vnl=h=4*f_k}Zc* z=tpkHpyPf#;mVx_xi}T-gxHVO*m7bEO1y$^CsMe-aF>svh)DWq)jj+HaJipkAAT3vaS1`@onpl9MMIPjXr@hCpGQ? zZq4l)0L>Vfh0_@7ws{?<#iTmi1|McT$cO3{31ItfBq~Y;ek}~PGuA~x$BeG})E@jF zu-p*Bm<>hzb9fG*IH)27dwi(sMzY0~<&r&4=%3<8N)8dLE4> z2qNGaUg2Mm_z**BihR>touIh@Li~={AJE9~majW~d+)J^m?sD#7R;iED#G}#M3R;! zCSXj5PO(8-A&@hnNTaA~DVmY?HON+8ETvGYAzANSug(i5Wr*Gg??t-OSBJwkooiOa zUAtTGi+rxV7!Lvo{zyAkDYiHy2$XIDY*L(8+rd3A^J-r?vI_zEH5c2UvRsjNYvln$611$O-tgYOUD|cqg z5!q?C(2ha6)Y;2_gn<`Bh=0ZKMVP0sy%=6NLzM#;pd0{0ngB|%yljM8veB66_vPr* zW(ORA@8c6R>cMN%S1&@c)FC;(^hg{{!r1LI=L{%6a?18rMK%vRhky~(4U$ZOk!&wf zBu#AxGAQHv6vCt-(o4Uj43|6s#h7+6etK35a`c}l@9M_ z65j%Jq9^Dx0Qqc81-vcr03ilCc;E}>2M8LCL}vKnMh@CNT6pO61C7ssv+t=bSMy8T))`(A?B=x5X)i-aLp?xzzl$ph4d*QorKwYs`j3 z)*X##LM`=}eCRD0AR3dmf2O%}-t7iY+%GY~UPY{p1DK>U`VUn{(jo9R4ei&7K-obC z6+?N0E)y&N(oOx#=yEmU+vlJTiFmPrZeYW0Rsh!A1j7K3rxEh!%cKAF9)6St>bvq=C zW^qi=%}`U3J+##sVYWZs`59a*k(U~lqXx(eT!Poj8{0cR22>z3s~HjUb|xD9-(>7c zL~|rq!(_q4iorExfh2VXDH})y%T_Xm=0Zh>YOq~tbtY=kbMvZGZZ)VTCX6cmP*(D+ zDjvolYT`4SGh7%G9rj>6NaWC8iR*y$`qG0`dlOvoBo>|h<&o8-=ttv%FK{#R_+LA% zYmnx>st=tkf`K|eR5M>8f#Et582+2Uh#b}!o<0#5xsK??-QF(L!gE`p>0k>G9zp?% zdxT3_5VZ&Y1zdq0pW+AM2eT7ztQ0}-xNm=&dKHy5Q(n2d1Z$ub>UD#Tc`xaeU!FU@ z7cwi1h$e1xHLS#x^Cd(BFLc>d53_SG*KzYQM_y)ojN$SBjX%wGl>&T)^ z^z!g55>ImSc$9h(I30#ql!0ZLfvqo|Z$>ZB@p1WBHo{;d0;X88>hr3~KZ6MUuoe3r z%!}KcZ0y3>SG04;Ce5`GTVlY=RZ2o@Lu4!z|! zE%Ui5NO?J8RIf<5`PPSFCG)^QE&Lq-P0X7pv3j?q&gc8O^KHV)Wf(IfNVzZCn-bvo zYr5fLA(eyO@KP;smnJO_AM(f+$bP*JqT|q~7T3 zc6rH(B#dUbXp^F+qf4JFkOwh31}JrJx5HpmiDu29-+kn8{#8o~0|2(8p^M7OIMxRL zXlXJG(gy)-b(b87g5(U&I)ZfZkCJq8=r!cfkw%e^4j$q{G6WP2ch;&ecs<>0D@6Ci zI$ES9v-2xXadvRz7^hes0*jINOP{YhQ&Wxg{|GoU`1QDnX5&i&u10=6fqje&eYR~O z_rnJqza3AOw_-mJL#JiA=4VY~F(cTArHdy(XzLhhj!^Db^w;jHTNoe^&Q07q`4a`~ zBCF^$0F4SweHN;4b_oI|f#k;Xieh;P36^+T@Dp&hdew7mYtFrlre28r-kZ5nZ0Zr# zA#FqD`zu$+L& ze4f|85tmelGhkFF1B?rYtKDeK@@=NxptpBWDe$~7tsDTQh^B3%50|!}-7YZLSucwH zQ&cO5_rZZ|a^^>R&w zFP!>A0yUxy{C73=iMt6E1;nWWBI{q@|kZlU%QSmIT24Vk;q*u zP9*Ssp#J=JB+e5goVIKHF|HgEPdHDE!ICma)0RDe@d*||q^;K#U%`9{M^_5#+RPFd zGGq@lopW`oA_)tb)`%$#Mq>v+Tck2F8>ZERJpg#?<#8$B2<8`jRr6+t%C0ARLfpgBo_03He7D z(LTbVfWa0Rjw>W)LN@3A^~$i#2z%F5uAt-(nAcPN*8vYbwgC~^9;p8sA8uO_WJE`B z{o$@Z^*?S*XmE^0VLM*D`zsj^LUf(iz6XGq({G*(cU&7N0y1b~C?XE@QD6wPdOufB z$i07p00=J@&bNk<#%0@RW=IQNDKj*p^s6h%T|AIH|3Jd|56UnTxhYd=lhsw40tzBE*Ii(M|Xg^*F?kmNUEMi zd4%DA1C8=iT8khX0OgZp1DD}NN@QPCGxFjCgt78F(YL?6LB1sbLK*}^M-ophfa6aq z1Z)xr;`lkYlFdUw21DWf?>#1eedhmT`tMiWr1f}f&Pyg1Axd1`ALx6ejY|V|FZ^yeha@ zUR^3qli#5<;I%-n8diZ9U_TOL`mf0k;`db2$DW5tGea)E#Scl~Ny?4tNjl?knnL5? zw+{IQO|G)qcnsq~33ye2J_f)$pfJyEc&k#&!69uS1o;C&!4vItIu?D&7jn^mVF9QD z?&mW(BYuyvXT~4$Jeii%-?UBnO4kA)1wZ$Hy_G@E<~qNF-|~q~pKLj_#FJ^Q{ut1C z=1;{xr~9ReLslw2_z!MJs*&J?f3(j?H_kHo20>mZW)8N7P#WhftGVu=L9&5vg*cy<2LO!LhLfu1mBf-yqeDM%A4Et*?) z5D0>_8Ekm#jfqT9S1*Ei{QiptUv$@EMco;@ub5vBu9PK>g@^5s0n0I$*C+5($Oy(Qc+U^0g&=WhU-;X8D&cW zO_t%i;^-XI@$G^$U~yKwV@zgW8kebm$H0#IUAy6eWxX%h+;oBg?e&-&%W5$wynUFxFv% zAz;$>-UEhOTKF;y@M$Iyl+GDKp2Z#uZ{+h?R~iWyklCnA8OvzNVh!Z8T|^KR@3eG1 zV%(S&(~&4o77V%rU=%#15c8%ERWX_*=4e;9U2?R0VUR_C z!?UO;!-y^9G(G!PR$n6U0Gu!&Th$rsmeXS}x)}Llwg_zHi1wNQzVMRB%GsuWgzt_F zq}C+~X$K{E*=GNELz#af`XMA0JOEJqo`!^M+Z~pB0=}(syQ#Oyf8<}5Hak?1q$84T z#8VR4Zm4b2irCJDxQZ`?D5|Xh(IKLM0E8LTnnB$JD(_K=v}Lf81E@~3Ga{z#3(+B* z?L&wqgNZ%n(LAcc`3L4Y;VK}<(rU;S$GWwmry==HyyZ{w7e;Nv7QhrJp$6qJ^Q(X@ zhK;tp!#S5O2{cFA{UCtpF?8O9j0U)XOh1E^0%J3>}%ntX& zF|fp(Y~Mmh#OPuGMku5LY}Yt$*~D5JjG;^(&E54v>NCgy#>!#<5%aG`%ejOYSIYqk=QGUBy ztY66XVXJ2xe{xb*=CdXn&Qh6#!on!_8$c8|ChP=Ivt{GvXXmQ@Y9$MG6S+3}dwL=U zy$4z;$eA`xKR@&1wzYU10QS&vp7+m^7v9hmEV5XcM*co@7zjQ;hiPPtl~6KZvM4^r zZV*Nt3W&B}|A&2xD6e4jqr4_VFD-+O;%yWdZwGlxW^2U?JPUg&&T07M%BG9+G@0;&HX6{4%QvEnM{Dfo8zN`@Z>kP*LbnYrcLTWQqKiiyNo9$Fdt} z+2_WVxJYP6=F`H5v^Uy8GEc5~Oj)zF{AV3I@^C1~ZRrr(uul+(EI5iC6N|9j zY`2s*6LC~F&yJ~3u&0a4Ky-7q7zlUGnMMe+myOSWOF2!;VR0c&%k`~8rsbsY72PRv zL{V3 zGydUwp*Vx12ek%1-wmTRh5YxzY7KT;)S3K8e%Iu8;Y2w4#81~2^cax}=8PuCv8a_+Rig#kZ&?;v)ISjew#M;V}Bp#u5A}XmGdRpM9}6 zDc7`mj({y3b^T6Mu~0~bvpg={JvCEc4?KN4~vu+3X5Xxek z7qiR8g`SB2c-;Iz`(VD{b_`-HM!t3l>*29 zqD#L^5$s(MVrKJtPgHddtSSd*XrpXW3^f|C+POeur`AJKDn!0^ZvG=wWI;Z04T$9*0=&VHdxzJdxq+x zdYLY}^q|cbW?|gztG4c(S8)!9fRE9?Pbt_zjyFXJ3IB?8P;fPTi9Mvysv7U`+-m?g8!;u^y%n zE|*Px!Z`2Z9+(V_F3?Zbsh`5I5YI6Ciro{FMPmN;6r?Lazm5-UJV4_K^=$X;GEz{; zF*kyiAe!^JXY_yTsodh9Ft@yoK}^%N-;2RBQsxG>V2HhLSMaPKzP96Mq5_6oEnoL1 zP2?^7$F%hy5@d)sv2a)gK)foc0w{GODS(wx)Xfa$vEtnudW)3t@!?_v{1%mFdnfbS zlWXh+gmiENVSW8g%|+LfPB=Wkr=Rr_hhQ7Y7I3qqqJ*X&Q1rBZ7!J=EwimJMTY9%j%KvLD6zle+O6)z921PdNb> zY8hnp8jUn?@@3KD6BZpRZ;fI@X+zA)F~l?2oF|F2j|X2lN_XS5+ z)u6E)ch6k+lYM+c2Cn+~-J}TwEQ`U+;Xae~CZ~>WyMs?Z>cxv`>yvl_>_e=DvC=72 z{!P}K8vWa`rdlTqk^t1;)1P_xeNlNgRIM}MgT*CF`=hxC^@^CQ5Dww;j4SUvXy|3} z6!hHPNB4q*ZjXMQZey0N9s>GNb8p$6JIoytTLkZW-B(wVU400YfzeR)1_x{Vhn+dG zoW|2yIHRJuVg-kSJr7|@BcSq9=4epcfr8!Sa#m{(lxHc-^uXWu2gj{f3tPSon)k$^(8m8Rww|Yv{*3HqOZJJRa%%nMBD7c3Fk@B} zebqxYZOD2wioDW+t{r&zWwK3{_bhCLet^opwa{juvKI&h4rh6!zpE(R*(lzD-@tRZ z)ifNGHJJ^%36$eeXm5HS@xy5UJ$PS4|G4P-K=5F&5c^MJZ1dUb(|>KrUu`|I0O_?S zCbiQ4MDco1yI2YRSC*%?>NDg`A+3qTcm#>w(>A<@iSWNF7LD3qv)TsE|Am`|#}mkR zJLW4;4!4G;8306Rc(_dfRHvk^KPim&NKp{$_qFtG+L2U>H-Pj$Ih(!_o`+h^evIdq zqx?feGPUnHlm8~L)?LUd39RHkGLrBx92VpuUSgdgMQ^S-^)t(kgSAj@VIcPRx_V!V zSbV|9G=PK-@LT5U-n0v;b1W8K9FWz4cKtW&x&orjhxIJ=@=35x7ON0U4t#EM{tvF&fYh5kC?2I`R7ETr6)O!T`3g3a%iWjt)a2 zHwO;G8;Gq70s+9(1|XUfKiOD9$6*+F>S245Yt8MczYJ!c6%HkD6_TG!p(vkx6SOTb zR^J3Qt>63Sc@29&4`{N##&~O<0U^LSZ{Or=gWRt|*HcLu1#gni2D%@^r?hS18MyRt zZ+oM~=+1TbzJD&mb!YVB#K>T(QCnBR73TnaK z*irEYcC_ht*0rl491x>4?zwzcOkfNLJOPX*bkYU7>^aLDB5<0`57wbE`X5QE^M;@LYZ&9){3 zd2O;Dc|rX*Sy{#^6uj*TzxoTpzecM?Mp!(U@Y{Sht4pd#HOH6%qdCwFf9}{I0Q<27vcg!`V}j?<cjY?678u zdNbhDVUXENrTMX5_P`PRTzcl-q#j_lgsuUp5Myo7=fo z7^TtCiOrL5NpFhF$EhbnEHGsRk;6za)?`;{)Q9#`7ie|nFwJ#TEn_ZwUedP?T|6r1 z)#0s#sSq?>c{*KNNoIsy?I7xeRX9J`^`7f81%p>(S%}(9>I9U41Y&>Y(Kk zxKTd-Et|63Ag>u@^d4#h#InPV;9m`S&E80(oPR3m`|!T}9kCV2{$J0rGZFUhkZ z$bx`Wn}>g}B+yIg;gPx|sFif^z7H-Vf=QEO&)-P3@cj>?tj-8^zG2;Vgzw7Q$8@mG zco6H zRD$Xu7HD^)T0i;yG9&|nB|o}^dso>cmK^MhQyK>8s(=+=_WAuAO0gfv4FVXShaf?U z4iQjAWE-xwUshcP9YS7uAIua5dDhMLz#>xn&KV1x?k? zo-$oD5>I>A+%ApCNEKwHd9xr#V-K>)b#%~S6);ovRdx9156eHCc}+^IvE)10Od+y$&}h z`-37k=zumSFx2tf@UGux%X;@!M0DdS6m)*)I!cB(h4%U7u&>|L@3;eg2`p7GX(3JU zTbgolwg;xdAh_iFW?B$T3NVS;PS4Eoo~fV$F$`P;_S@&~#^um%==HGyg)a}TB~;w` z@O_}T^HFiPuugF3Wa9!HNg4>Yh@ zNQ!09bHrc!ll^1M^op^h5;A;Xn0g0WN~Pv}#CIE^sXU7^0gux)ZoWv8!uNqQt=Soh zj4@d{oSn1@CoI=8PVc>Md;m}ImLy1rObEC;M(63i#5IB_vzq=xU_*5Hz8P;~pyUIN z{_nh)Vx7`ua!`Ihudmu%wC*n%digO?7aOjjD%$)m8Dt4N`t$k@AOB4mkwZpLuUSz; zRv=W~53vN7sdK`1fSs_-0 z#%S3Un_g5KlQeVm>R#+lhSf88__?VS-?J#f(I#v~wp!wX3_~@u&Hn73gnp~_ZQ{#^ zfyyKKV~w3_C12Tac1~>gi!XNG?j>d1{M<;0y91JIZA`4Ypaoubg`xrLY_= zV~WWr%>{&ifSie-gt^x05+ps7pP-$^k0lfL2eKy5C-{f7a`{gH3%Nx_w1>Vv+v<20 z=n%#t%0_JqBg+#eQ*<&U#gTvsiC{hV(#<~z#XQTetJAN@w?f1|7#zmkBRDKs$HrQC z@I`B2>ibbfSbJUDqyMX12U37c8Br9h7N9x;8((#j-?Oop%p~M@zM%KODk*EVZ&#&T z*Lrdc65A05JJ+in?!500Q5>y|8%q!_1&@0&hSvB$YDsE9)WE1uU7CmKREJH7v1uf6 zoS9}JVBC*tPM)lrYR5Q*o_S(xf)jyl5WCj-nddL3qYw_K4S?5dZ#|^0IQDa4K!&B0 zYiSc0NxZst2&m#A=ssMXaDx*`#gDacyIROYz01SLE=;wj!OwxKxMyU72d3h&7)?h6i~CDHjO|LrGkeJx$9kCM)49ak&W6CWqIVRDchU{a$VgJIy5YO`w9al?y%# z0YG4r8(lO^=mrz?EHPYYm=LmP*)Rct^1%=g_;}S@y?Yepng7M%)Vu#7DiZouIh`}l z*AO4z3_|{hk`uj5q~yR!H?Zsn)GZ;b49Wtc_~ltDZ%bpgHbJi6Q0my)B?rMF5B^?@ z#~JNUizY|)E)X)vi8xBiU4=QHbn3m0XpLYlJISMPY8W;C-2DF^!*Cm5xY)An>T4K= z$fAM4APDZGEmzGMwLO;dJsFS%j7HBv2sC~4;biWaib;BY*0zny(EW!+Xtp=Gw3#24 zvn$}0No)(+IE4`Eq>CjA3-!I=L)$<-mj~bQds~6Xv{B`7q1%03VW4l?y}UF!oUmK~fZUsyiDshC;V;2-5P%M5zwB7%a#>KPl6YhWpfTa{ijCf|T} zh*UxCKO3YYus1dTO8x;d5BFLSDM$2R1O&4-D4yK{~y9XHQ2Ak7L|Ezi6%# z?kZ}%nK|lN+C)5yYgG-wAb5A2E(lLcHJ3Zv8?ArxMi#W?tHPO$7v0gs<}bRqM}gii z$Pl}(f9QDjQ$O5c-W8egos0d<5x5X!dN_dPITx-z*Y=HKEHbg68m@!%p2kFbOR8Rp zT1qZ%iC#T?LVd_@dv1+l7CGAo&V-MIGXeg7gV_K+bly~d7Tuh_PAH-2f1_})J>L2F zvq{j%$vAHydXRN&PzjzHB*ma~%T}~|Jyi?B(+tDKaiH}!m(tU)P5kWl;^l&0iP*Kd z{d-Rd#3-WeqFp|3+oVgWnJ@tyw{UuA3I;gI6HD@%Q`FwWO-eXUh(ssN6Rz-EU}{Y* z;MUmxwnh-AbbuEPJlx0qVogg0z)PwUk>{1Z^dKc<3NK`)NW!65<=Za}bv$B$0OQsu7%H zD1jsJ9_sX8hEN0uvfGTD6~&>2DmxegqaOyXp@#uH6*o2XI@eJTL@yq}4VS_xTu%uI zX3^fuKk5QBOQ?JL9hzR{i@^R;WWt5mzB5c?3e?hn<&7k95EP&KlK{V71U$)LM=;vK z`a2CuRAXXoOx~Q80>874z)es)+=-2yuyTYTAa-;gGm#R22B2<;;SYq?dbMFD#D$bQ zDARxsfAgRtQ}Us~lND_)yDL%x=3C*Q$ehTam=iEFfG#Ad>mo_r+=KJ>3rl}9Xxdv{ zwJz7TJ=k{0L(rQ-pxe^APbJ%!@1A>AUHr9c6bp|L){UG&I6d_;=D#2#i`dkY!xXnx!?U_L__fQ;wBNYVsq#JVh+X-Q=> zxbS-6Jk3*?pyxs&z(sE&eg$7EvioS@6F}bzJ>yhCLj>DJ%#a}L`zEu|%Ec8wn-n`b z(Y(mUi~@#pV}L<$$`(j7L^Hudb(p{t0Rf9#dJN~glp;s@iF&am!2?roZ}K`<6EOfn z-_g^tlJ_Gro^-_xfb8K#4*N3nPfo+-;(7GJN2T{?2b;DKyB{vxUgP@H3H8}92q5Th z1d{`puHfmJmc$_MrE|Uz6(Qun4aBm{iOA0MrVdp&TNmJuH8zXs7_87wd*qWuf@*jg zM4$DVHTuoJ#v6d3iQW=wP}d$2K5*3zG5m1Vh76C$#{p-WDKkEQf7xWTvicwB5)3#` z3&#dGG%ysnb44C2!$A#^3`6Lk0h_G+Qs;$Z;*+NW9d?Tu7`L=si*FDtXbxwW8B9*C! zI^xkAkr{30kJI_TB`+~i*oK*NjZzplS*s+V34Mrb zbAk4nDFs4_aI|44LO1s>Y)KnefC@;4nZ2S$bdxV98z#&j@bdtZ47rY!OMCDMptQp> zZpLJRSlP>=hzb-xU0}DJ{4>KLR}PupKpouSwj@@iRKyj?-9b}`ao|qWEExYy)EZAd zX3T~~0HzUYU?LQw&6FY}K$cFxseLAao{JICP~$)A5q)Jt()6Up4tKAThOE93s808M%#ux|7s-kH)2mZ2-w1m-><>8fLaLe}J&`A-IPQ%}-(T z04QQEHE;H|+RbB#l^OXgF;4gUc0Ox@&8l2AInC6`0&@{Soh2sbzJd^oSiSxy_m11n zV=FFhyl+wn5RE7g!HQ}#S{r`G@okhc#Fwh$!y&_|sS*LqhP5R?dJ9E^$SFm&ToW{?oI zrU6(`f@f(ULMsu_F14CRot1O8cYf9ofG7`)JvMk5gEE$pU@v|!04Ml&cyYYe@cPWXP)c5Mt( zfp_=u;(Uvn0vH<8_`GvUV<5382vaR%-`44rBv|XS>}Sfjhk>FagDH@!B=Te>JH^dKJ#jeg& z@i-DLp;W_K>Pix&e*`&8CrW9TGh{~>o<+@m?W~tomqClTPq_uy-W_fY=3?Liz(k7C z5$gN$njkK{USRVW^`2!sx2<@vJT zLNCbpaW4q`xWeNSKMvfEz#3L5R{zOnrKvi_&7C6dJ!bnh{)JM8FL18daCzgW^)IS2 zIbwu>WA+C;0*BoQYi4^H(Z&LM8AVM5+2~E7_T_Vb*(9U7pLn9pFae_O=1<~9K$O|w z>v_x>hjUV5+VJyW2W0iw+Elg-XEsz*GT_KIwgq`rPqODhz()GKCwA)}GNU&lDJ%{& z`-7rp63uR4Gk1H}@3M)p!#N;C(xi{Fq5EAcJHQdmQ{SSnL@gS7>Zu(!yjO-OCagzP z8Fpghp_(~JAQ#E?2;F)~Kj0}-5H(^sWct`XdWr>f~cn?Ch{35A04sK0^A zDLC%nC{4;Y)gq`5h{&iZZ%S;FB14vsn>H8~h)vj-9lO|OS^`egNt|u?1fkO93E#Ju zQs8QEMT%V;p3FpAEWDgRr{Ip0DUdU?PXe@^Iz3nmu|zbNp=6V&~&}i z!Tn+}YY1d_|KJfTb@oJQJT=9C$3V_`GQ<|`2>jT39N(7m-5H<;faFsNXtD2J)(deu zW7Z9rEzr|Hk1w<(XA;b*8KzVc~=OUppy6i0Q-fS%W<+E`JkcZUd@gwu7z@MA;*4 zQ_}9u6FlD%eGpp~>Ns^bb~gwi2*97xm!ujn&ncUcDW5dO1h+#Nu|m?6MNyx15vcM< za&5gQ2o)tad&nj=-*;LH_GG|1;89A^ro`1)lYndz*cIriYg6?XTSRzlB^%I)Ltr#@ z11@Jw55vdE1`Y_F{Xvlzi#|PY2Hf(3;KR;PY-7R^%53A*Zp%0Ymo&NaH(_|{Lo(@l zRBI_ga(Q@?$rxl1pVd#E+6GiWj^YK|01+AQSBw6YM0UX;YA7*~m2Fsiz*e+GU1fwz zKspxIQtr}ssO=lhFpgkYLw4(tGE4hJJPW`D9wkEw@LgOVh@=}JhX04O_m6ApPSb{G zKl8Nv?)vF==C#%7Xys|U{w6B=1gbnWtSJ*LBodDzsuj1*B+2`IYRnZ@0Bt zSatkSQL!kwc2$Z9c^njk2&V%|3K&udB!rW5@?Q7%oD)KV9OeB>f&4t@ z`@O&Secjh}-GReov-W&-y{w;GmmvE_;R%o&y7yb#HWky%S=t}S#&ke!=rjj+{aoNQ zo@TK)0FZDJLS-QnES$$$5VmUVmdhDknwy{-JbZ(=Q~bI|%$mq0WyrgXK;AoizdvbQLrYQ~aAGyC-2!7}1~Wi{cVNEkA|%u8n%fuq_(n32 zQc0#p^6+aFJFd6c_keK$2f=MJ??`w--b=7q9^#k_b>YGzw4r+8#==dWg=Qg0S*+J^ zUk9_$bj-{krmhIG?Nz(UWCL_^?w$VTmK_@ZaxhP?d5dRUzUBp6F(h4V!qE4-U%7cW%fKS`iD zvO{^&3X&-fl&2VH$BeQH3 zf0N_yswr;NLOrDd^JF$Mz9^2yLvmRF>&|AtOScDewa?_0j}a&W+L^E0l9&z+q&69i z7YS=>->sZY0oH*Sv1!ZxN!9sprM&;z$`?Le{n*hb{=P={e=Y9xR6n{g`RD)rF~6zp z>pwdZ-}(Lj+m^a>=Rc7H0P^wBxrdB9sQqhBt?!q$M|hbkJYGPDN%EFguq|*l2et1= zV>73ke=IY#JNZW{7Uk)hl5_f+8sDBG;Sop7C_|ZfoK~?gAkn4=gTDNmP|w&cX{RHpL5N&nI5rrorSTHL6I5nfL@At0 z8We+F+m7}^ktJ_OEL@NYA?F z;AzXakxJMi$&-mNxKpl22*p#9p=AWiwJ=~0jkX;59L3_Jx#39Y3p#BlKr&KoF|cXR zDCubMFTMk1Gj2bbe5W8`~#;5KUo{_;-lz)NPx!I3`@L&DN=Fy;#b5hK*Dm<$Z zzVSV_uPi+gB%|>j=@b-{Q&0>(1$F1c1{TxfX|ho1s+}iO4Tu^lruH?`$YKNyEnAAa zQb?qNZyjNEi^4h*+NkEm-DK&HjFOGOm8lA1pLa{tt?kU1ADZpW){Oq+;*FmiL8-n14LEcnlIWHQs+cgL|rBojKKA;sbfL;(!2!)qe+&)ZiE zCC8nnlZZ30IpTc-LV65!TYrb<8bFy&D)`Tmv4J9g%p@f(a?y&jA0L7tI)6MW*C~~gYP6gKJu6S&K`Y`6I z?Xs|LMs3u((zh$l0%(P&U54dtWp-eYW^;uHLZwX(@y2>oXSHQKw43KJJ8)?+_)3n7 znyCEeD5D&`-%LwyI9CsdlwUltoHw>YdaN>iH>z=??7`el_y#~Bn)QOho?CoX-&%gk zs-94X%#WwTJ5!63)4rv!tfCpswuk-vc6+)-W8bMM-4D%y3T0}f(T|G`S^B-3FQgcO zt1z|Cpa82(nw_1c*l^G(;6)I!o_Y_zI`-1^QpYQlC|faOsL@|vX6MWRslWMx6YzDi6dmwUqxxS8lC{9lJoJO#^%%Rmv!3%=7*X3 z4)KA(()fPHjnjA0Y9DQ!0b~znIiTso#AZ{w7u&9DOW!3Ak_@ouk+|GO+fp(ERJ0;Q zyZ0OoA6kmXZ}Yjo^Ly73&p-{5AHH!3F{^Vncq-Y*>P40WC*hG6=RIlLTqY;6K=8Vd zV5!WcV+Y%Y&0pS?Qn3}ZUeKiSD=+-dRZZ|B1QU>{g*@N~GqxLk4!puu?=yv|1dF2Pm4Zk6#3c>$ez57`Y?FXb>9 zqC0Dc#hLiJkpKm|G@!?+4CrwMt7N?}p{<}5K*9t0Gi;{OGQP~{){2@hP(3{S=yDK_ zVy18|*EcYCo1j{PvA0Ja;~W~2MQWvn8YD>&XX4sEksa7Vsj>!y3_8#h*5>Gyvn#o;!2z!qAQ~lFu}?BpQdd9 z-87LE!bfdIoh@78MlD_E6=Y}vAlB!`{PU~Q}?X$iuD?hq{KSmJc)seLkI z4Sz;UxmbhvSz*gV7HEQn7`Cx#Mw`^y%tgOBP``S$_0y$wHr?Kt4JIV1Tki14N#w`=NBx$%J10{^9FSl?q76a@z5-g zkSNGFCY^kpXJ&rv-qZxB4a`yy2`_}w-b*p~MEIz)Zw|gKo9l`Mz=zXlsRx#<-_Dg( zmoi=KqC$2JHiOeNzuPs=gTMr`&5YYPz(}hNy4Y>K(e886n8vZ>@d$kj;@kK}hNlS< z*$2!)=2LJ1Uno#Mw}9+(`D;7^Dd=Y(;f?8#M=;#xDv!>#qBDz9s8+fM;cNKOa`$l; z*jiTQ9AKdUS708j5Eg3Z=MThuTKW;v;4wwPqBd8T=V*OP(r4KFUtzlln= z8VpDU9y4lNw1X~GUpLE#zs6vP@0 z)Bwx;@FWg71xfvpt?9Z>gB&s~$vrg;3oJ_sNu{_p`@GRw zc=1_PJ9CAOJeEp9br5t6L-}iIo3oJ&n3mEQPr$j(AIfkt7rX_{0073wbG`gB@$T+iwGGP@or(Q;L96@N# z-SRDy9Vz5TjU$CPR>#3)WqGJH|9$gU6o5&5JPsQM;q!eu3S=ngZuxf>|C$HjmBf)_ z5K0L48j4Lwo~0mpnyF?`3$@kgyp%QDS<(SM!8D0zOV#zW7U6s+8Y!b+voxbTMBu#K zNFu38uWi%h%E}73ud2N9yCZyXP~a?3*+u%aJCvMgj z-MZRm=-%n%EIv^0JG=~OTgc&p2%ODsHsdGknnkNy&Wswxv)_z{h0S4>es`~xrx zL%zL4CK5obl*W>eN=3+Q+{khcm<-4l4@=#)OgpVMD$D(W<9W+mT=|OQ>HnK8)>ZAZ zj|PJM443U6;u5amPjuMhF90j5eeGxP$@w1+mLg$S2R=g}D`HNs(H2_#M@e4wqJ$at zqghSWI!rACcl{=YHbpM)Wsu=#djiIj7-T6-iuA3lusM+H&~$P-X#Vzn`JhoiU)pN9 zm>J_pX0wD5=u0VLVddn)>K2GwVt!j&u{-S*r@GhO@Es>bn$HU6#7sf+4!(;jxk6~d zhq!diRnF;e942p#LsH+)f_TgNc7P)SS747lJXRFp@ica-f!})V@EU&3->X?%oHpgN zNO#NAcY|q@#!HZATSb4YW(rB`R6tW}$XO>p-?7$(T*q88@Bmzb5X_U9>q4LNBWIhC zG7Wr2wb{(<0}N}n5Lo7II50cMv0=+(V77VS8{Kz`gt2i7s~LcND+w>nk$^aAho$sl zeDz-BduoltkfdL-Xj!cH;`2LZA?r7T43Fl4*?L-9hj{=-0twHch$cL%Injid(hVf( zWjOD)C&W#@TzXNhWQ_`~neL)!xaM5Y#HXA8SCt!>-)gOa$VfA}zet!TQ8fd>YnElp zzLH29GeTuQV_0uYTaRbJ+{=TyVYShRqF2rFQTE(qgg8lpMc!Z)9-oiZJ)?#oW8(zb zy)?)sXq8FdzY+rNryjB0Ygd89HoXK-(f}(pigx0fu zd%LWL$P~b>s0C7`hy?Mof*cpOB;0y8hh@H~e53*Z<2E3xgZHTYOY4Lp_4!*Nr6-(j zqWXo7>zZOy7MnjMl}-E$vQC|fqyT#3gxWGBinFpyNY_WS?PQB!EV#iozE0oP6a6M6 zew%3k*{IzIj8J5mySTt1rw`PA*zL-x+#3BVWxa4zXT0R}byDR;lR^W_xQMH$GRhMu zWRW5am}^L-($yKk3CjS1jsXCp=Wm(5^$*rZAHZU4ga*_h%hNqP2{b%F0A0-Ppwpwc zHF<;V4tjl!PF=5QaO*y41Ot&(+l<_pS3t zq%1)uWlhA-fwzypt?x$vhhHl7f4Uj1bUOWmMKD*VTd2Kh{!I9EEXxQs#2tx~7sMCr ziUhed7r_oFR4#m67=$p0bsmU^*t64ZcBKH!lA&M<*;S}udcI?Zdj}&{6ON@#NSC() zejeHi5vQv{Dl4i!estRGiJOxc4 z;&8~-3jr9HJV%`^S0Fgnf=@Fbg@S>YYPkz01k=I@OJ-jj`EV_JDH=V5d8GXo)1U#| zXkg*}QfeXqL}yhDFwekBd>7-)Y%)ETN%sQQPki;B%9*7PGL3YEtN;N$Ycf|lkaigZ zIa?*k^Xiy$GARl_2R^_}eq2~Lf-DPx{ltj7BV()fJ_rsJiUJ$~as=t<1e0I*>VXE* zg+z36)V$=4@OOZ(z$f5~I5#OZqsq9P|<~)e~6oK;u5(Cv%OD-j9k>B zH@3VQ87E>YM+;zmgfq`LxvkGH9ct@iCryn@I0sTWD$=~WBGb)rc*1&Z`urO@ z8p0I_M}pWf)%F(}H3>+d10yI=2nlSoOv2Xa>;lh;Mo=R-DYXgb#!zRD8-ZJcs1Jf* zUyqAlT;m4exL*QQ`|}hH@UZ42@ncT0v)x~GMW%&$@eDKvBO;vkR1IB#O9&xIGSS$U zZA^kMVlxz=A?M-^JRUnrtNUGFJY5CVT4$QG`eWRpg~p;1M#ARMpR4WJP4`SkzmHE4J-i;=Tct8G!Je9BuD%kw4_0s#?Lm5 zsQn{cI3skHe>sgIUlAV9-c%--Fjx|P(WtzFCqZZVKA~|?My4GMA>WwhALKvU1@&Bx zS?}m!ijx|o8>m>@pF1ZNe0D@xB}biRr{<76u#jC0N-jVYI%v7fIl52OOxS?)9UVRJ z=370A53V<;!_esq?=ax;U>cRxXFF`S>`O3jP2$~ql#z$t!eGrvT0vyN9y}xx!h_1I z_#0BB7!aSJ$oKZgw6b}P+f_EAZ$WT|F0G^5PbL#-(~G80@w) zr0R|ntCdb>;(`SZ#(t0-;!Yey4hoXe8*_2z$kPH;t7u)9&QtL-o5B(34O;*-DchbN zm+EX|&%5)~z6ORE(9=;a^F{tsWppY&WL{(3?ln1=V8BG;gw%kNhD)dl> z2GN7yYj-Q;zOTSD(BjVQ6XzX=^ind^@L_f}+r*Uiu)7XJ4O;uG%${0%_O@{%EnNEZ zbSt+$y%dK)MYQfEBIbDcW7io>*I-Y7btpB}TZ9~2+Zzk;Ae09MiT%EswNMOz5VaNz zF^k{*6N~2L7#U*ETZDxL4U4HWpaLw9L=(KGn?I$||mWpG6QCd(%E4egL3nRNCPhbegz%6NaAkETzGKI+mG0Z-6Hh7Wv&jU4|2Y zxiF1DFZ*-91EUP5*l4=cBI_HaP4R1p8AcU~%T?a9=@RETMV)anFBoxBDH?O1`ivt% zO%-!=UCWRIutj&-36(1?`BjH3E2Z!K!-jIeyOG8>=EKf^dhOYR?9SV6dJAuY+mpRK z4TOL@2xB<7aN{Lt7x#4N_{|fImG0=}wW!j75V?Z442F|=duHY!ZZ?jK0;EEq{(HHuBI*`g85-!E3H`>@sfQq2PO83&~l?)}dr_ygl8!!{RZ$W~9=T~GJ{%w za3MDMAy5+~Yd5@cy8P(V0v9TRMCRZt%TJTXen z5rhEKtjDnS!RuGKD`sqB;`T!F^Ig z-qXVfVEco1Tc{uouM?X(0I*Wc@BBpvrydbYkHAa&lXswJiBt58?^H zD;uI?X8g7RMA6ZyPDnw(jiRzbcGDolG6Mqs2pzZL52+kV{~d*NwaV1ybi!!rUP8X<@y!f()?al zD1x^KtJ*TqHMVH9X@{wCIF`6panQdUqs!UI+f@)+NZACSwCn8SBbBKr@*6K2qy05& zD-ND&FJ;DnCuvBg-RtQ3iLUgc(!fxHa8Df!Ki-Le8XsO=*E$!+&i^91aQXw7bA@0u z)OEP)jZ2GKRVz`vDnR#_hIMwiX3GPbz8%cOiF7e)g%#sFt6!R~XEas(F6m5_t319a zZI^lqkG>flXBe5x5(^(c1(OTQO1DMyOTlh!i6 zo=kJf)eU;*#1vFA>7^N)Vbr!y2+xJJeL%G?Ekg|a6o=s$0wA_*j?Q=JaZ+G!L%5+@ zPHOUs^3TO`Sgj7|zLSh^(Lh>*PQY$Rfrc~Ow+`m46 zS|TJPTS_b)ZpIl8SN`Om8o$0yIB|%DfH@#>0^2SRrlxL_jEZPyQ0k3*n2;DGyFGIc zPjqGyDuN6f_h5C*F6jtZF9y})>qW4oLh8U8yv`lZxJ{E|(~R#S{Q0!Z4CbB_C>j|h z=zvfJZlb7tXLp+Hv42u>ChKrcycRXnQtnTVS_K=HLPTJ~x=~U|&nKOJpc1Ze!Wxr$ zjzg5&V`Sk+mGGNlH=Y+OzQuaSxbi48N0;c9>xKQlVfR4n~I9xD9Z$= z%hr@o@zeTUuAB4)j&5432tENTC|a1xwJSE0DKHs^;l3;W5!B}C5q>kNzj11WY)(Ej zVlU7o0?!uOCS>8WjRXG%ukBN~GLB9?DZq?|I}8OIoI@lOfC-q$YSVPwn}3BocEUm<-g5-cS7So<3Y&1Zrt!MKMj8s1JAvN%voD652A7xaQl8KFMErA z*=e@rp;8h1`IY`X?7QP3Umm~3YH9zVaAKDu!m5KGHSU7+_C2}(wTq=~V!y9^SD+B{ z<0t>sqyu`xki{ zC4tlkN)far=-^?Oe%t)l%31n?vzFn1{Sh|*;3E#>7@A`Ucx7JR{%P`u_~eLSxcrxL zUzf91NPh$0{-&=btUJbrBlz5~WAwgV6$O3ms3UD0rx&o8hw4Y_5}pHUb1w>GNs3dU zEH2`@NT^~h?~{^Fa4#fNXye5a696txD1?RIneYlz<~FslZosI{H;&Ua)KNVOGy3?$55NsgW0^kkCTeG3(Gsh1o-W7TqY=3^7v1wP>Kmv!KE42}X9l5B|2uG8 z6hY_OFOOqdmyiXj6b>Zf906R5If;@3N4`preP0OSi4~5~&}S7{{9nNOW|sO?o)Dcd zdD23`>uB3qmOd>W>913AJ#v=H9d_zC1tOnC)4V1m?O|2Z-SQYsaq@=%0FVcaLeDHr zjbPMB^Z^oOFHF+v-qyFTdaZ0)CfiHxUfEj62A}Rt3@Pl$tNT z9Zbb@`{_^jI^LqcY)sqdtyu@c8Z<^1;M{}WunN^C1O;NoLqc6!W488Y(l{LnB+=jk zlC?GB|H!RjER{g!+bN(md`fPHJ+07n2(!@+dcL+=Ke2LpvgChQjS47I4ndTjRKH5CX$M4(15uY&JdwIWNM~%J!I$ML2mxc0vV=XS{b?VkmHBJdfuV5H z4RRyULi*>p-?3BYJ-ueTdMByMeU4g5sD3m-y(Ba;W7-qUl=!RnG(-4KRbJBuv}+A^ zes)5A?V~9DAD%V1D$nx$z;WRJ6@%J~>yS4s(;4d6>9dcUF(^iY z4;qV|6Jt_PwSyktFMLo30H;`tKgte}>6V1|hAv?*|IuS%^Z@oItv)#r(Rh}Jhcl0u z6Slg0R{EmcITJ7#j)92*Pj#;lJkyiMScKtxW1RQz0SC0@zP0lt+Tvr0LqNh8Y!bz) zC8zJ=6oIS(>0kI*2;z=*LS&E=DWjncGH;gJ`wO*&-mHZ)!#m15^!+!u3jUJo>_)cE-!s(Ok(fN~R84o=(%2 z&m_6H>Ou@H14*;isY?;sFr0(WdyoMo2AMQJSQe!C%Md3Nw9Nvb!ee5WDuxxp6rs)( zboZ`iLIFA;h{sAC^q^EAcj@UQj8~Fr(;S^Gv5<-F0pv|T1RwM`_e9ZV4X0U zWIN4xmP*KBnnR@Td6RVqK;b6r6rH&IQ7q)3krE8wtP))AeDyMgHl{WWqKh&hx>1@C-CYfJ1R z6pR>i(uB&)ozxifxxJp}TEY8(ZGxH`TgaJC&G1g2BdgDMqQAWiUTSD@08Z=YA&Vn8 z4sIetFiw_etTw&~KXp0~iClo35_mt}vrDgWCYtkiIlv%R;n*ZqGcXg*5kZO}+=9k- zE~127`c*V{Vd4>DT5Z-f*#;u~>8DpCDNxlu%af|!m#r*G6)5%#>z+vU4~l12<2EU{5(7YMGS;y zQ#2Y9u&C8@c(&yF^uFx=LY2Y6h+VP$wp#_*0j`&sHMX-$E~e>cB?R4cy==VI`UY#u z@kK>acQ;%6Nh3Usze6WOgRjm>#khTUp%jDYXC)_FVF92J%9kWZ<72LJFJCzY_AeR$ z0xC_ZuzY~58)o_=&3^6gK>wv6Fcv6|aW=nmc>I=>EfuPPko5+K(>8ZxKPpj6Tf z##GC$-owCbVta<%eFA!cC0!F=NUkPYfC|6t-sv)V|DTbabC%LGdVP^_jz}|B!H*ej z)=``6RUt8`jz}rr>E^dUM>3)Gu4EcA!fs%oRzW{801zIxATXng@G|8PFa+$Ypjr+{K!D$&7f^Xmvp|!Q z{_?dkbpsH=VhZ#>say;@%U9K1*GA|_f!HI=HSDbXMPvK}=w`LDaMaCSN%B8J4D-6q zKf4O%0b`NBJ90%E&-aVMO6M3@(?l?_Y`Q4+xTrK5%Q7(OH&0F|Xl?Gsgn}D9OsfBf z?FRp%OnUZ|2I;Y2YkE3QX^2Fy!vORGJf$$(5@VnF>6Qv7@DcSAG>EqbXlPovtr8GWs`A35nujALISccU^e5r#Ah z!f=&btwYj@UeGvz^5n%#aVAw^Zb!ZZ#h262RLQA$L1 zq9j2_K5i)*QDOI%1Dl9^zxU^nb9SR)bs$g?hR1rGQ@nqvJq_-V-PIZ$I@`c$6- zu&Xc^T@ouw9yp|PL_wfWh*Kx97dnaQ!U$hf9BqW<9*QS=0zqAiW3F7!j*L?sT*HLq z!wqeJ1G@rTs$sp!;HDIFU6jj{uH1D7yhNIjJ)CQ*Nt zNu$9tO0aGpL=L5dugp@ha5d+G=KO&d5 zB=%AAO4C_Qb7CCX0pbF@jjhc$?4rhnI40t3~8};)4TIy)??6xx|Kjk zG$g>ZQ#@npU72H>hSYc|id8xj08dH9RdA0yOLrcvvKPn)1?>VuVvwXQ@!dI&@waEmJ43<@Aa0cCU`lzwRGwy$V}lv1s=8{(fKO-G2$PwuhZ8XHTv z#+i4`>R!r686U(>A!N^wt2 zAto0AHLmB&W=9N6WGtF~q8M4My;7g86|%uV?3`hy&_P4v5IW=}WFiN%_g3+YU{Cvm zOcm6~ZDFS;x|C5p;@24q&j1;;p(wZ@(L=8Nyj(tigLC?9-8=gncBbp50VT4qoBW$D zd2JEhaO1k2^8mO=NJ>t?;P3o#>8_P!kj#uhgNHt~KDIygSAP#T1qSdAf*gDc~$Q$Y=30(*e+lnzp`>u zeNtWC!iz^ZtRE~RZeNeQjD#10mQjnfDKUg6vFd{UZW$_bcdpoUIx}iczS;?73-=WS zW0LL(VDUJFPh!WA~$+RpG%dQe%n6M^1Uv{J+ ze*wLv%wCEl4*dB(IKCns7kG?=VQfEgepMDi{6S&;X_utbl9+Ka4)GYlN2Z8twcd(?C>LvKrT8WSbF#?oP1|o|@6n z&S^~yUNx60wD;^_+IxRts^lktmNAQpfQQWqPUALTlup;1kxLM{>J1=;B3Mqcry)(N z0_8m&6FW#cpo;HCO(gJ)dd4JgmjGVkc>VR~x)1L<3kV^Z^fr>1`!HSQ9AY@hi{`Dl zsm)_h4+Vv(c?8QM4|GhUs3GarXbUt!I&cDtug)>&AsLsJn8;f2;XBR=pXdz-;S_@b z1?p_6kUc1i;`4nqdrfO{AgEUHRpQ?uwiUIEnKKn)Ay^#nMisqhC1gYe8y>;Ws+F%R zfU&CyU8k$5*osff&7@b$HLV+5fcQO~x5k5dnocRO0d2$U^_!J*9Wyv7tg) zmfZz|6a%2Wqq*ZS)E6NoFz2WeulI#=n5fe;eUKYG?2hX4yl@NuJ%O}jRo}<5e&(h> zX{g->f5Hj2)&9bp=-W2|6iaYc_B2z+cx(Wf*77S`@j%qVDe9En0>@^> zV2^DGFz|`A3#;EBxBa5%F>nWv?9!34`Mw^PjB`%H53-t-EiQ4Myfg8?Qg9$V{4PK? zuCM&gu?n~l;C|KAJOow2<8cq4w)p2#+y6nx^Cni{02eUG_!_K=N&OQq5dAZItWdSj zYVCyOn|@4SIm>SQwoGfn_(GN3wj!0CV>nS|F*?e@v^r<4~Ujf4vsAPhbvsq|UYQOuVG4 z?8DDWJj=O`D%V&qQ}73+A_4yZU5WP&3KM7901k}45~qjh2Pm}!3n$Kx#y7~6W9WGr zxBH?r7>2g;t5tVq(*((h{qXgJeVnn_7aRz*Hsr-#{E3YA@fYw0_HZYlf12m=ShhY< zim4l_=wt|MgTzk@F{vQSFK%xte-f?&Dqr8`VdoL*!}wtbQUvFkHJ#BZRl=!01nDLT z96W-z=2mhACFD0eHosuuM5U)^tC2Jm7|bRmw>y;N_J!c&c4fGx6HkEeqjT}v%P{)~ z)IREH^hL(E7|;&)!K*wBu_Vh%X8*QzhqE*FJc@(SxF>mxemopsMdPoa$M0WC;NS(b z7YHl$eb@q~(n&cF4FP`?Y~vx6f;vVAHNqzb($YU{Rt&3WUsm!2>!bVw5XktIa)&^} z>Z^_5AR-;n==iJ8`MbB!_`-(;27l+bISclCnUlm=uz`dAdVX30@rXCVb&6Un5mj=F zCD`tAfj@0`+B!Uf4pBhvgo~4{)kZO{%elg_fe1q|rXbSM#+Y4_sG4l70xZ&O(KaD& z%Ijo(^_8>Zm_!1nSFn52?zAE3^o_ABMmh>~5MCB(^#voH0hmmr`!`G``p2&GOFv!n zuTN~6v#WZO`0~~_``>#nqw9aZ@cefx&R8ZDPb#bUPx0G@-WO*c{4cKl&zrm6wtef4 z-^rm6vI0K+n>Xrs7gm(i-^9#MOZiIfvT4YuZ?I4j`w&+A*jwfQV0>(YbD0sqbKA3*7j(*C;m?P0;8E=oFAN6mvB{@%L2*~3UHUu z&p*C?OC3C^Wx{{oY}uL|HReyxZXlD=mf~KfQ^L3Uw^^(92U6$p_QihJ%L(Mv+3J(b zUlc#7&CF5jJek_&80OJ%9-TYgWTj9ZqdEWA_PyDc{@ly;YkwZ;CQX=BX zk(a3Q4QMh<9Fv*-p#DtIyv{vbkwx>@wqoKP%OxCvhD6~4t-Iv+UG*1@7agV-;k+Uf z?-vCT@0Y?Tbh4u~)7Xm11hRDl`16c74-?kF$A4D~Pim>5ctB|=x?n$pFsb{OmW0oL zW&?~Mn?gf~$es@ZPT={=@cf+V*RY!Ynowu|+E=J>_rFQ+;q@37n-+i&?z4D^--8?b zgA~|}B+0qSg0j0iqHFX>6B}Ak8g~X#2*nvsFolY9ub02H0skRvExaK9c?Ul zh_eKF_p`IUoik5~?OI90Nycyu96s?s2Fjk!xY6?O0|(@GNDGZ1!45?*N>BL~JNU8N z+(NA_xq@QOFpg)Y*{cmkRVne@cJGam9FMA7aeS%z{6rzr~v3ox7RCAOD@ zfqv$E&gNPgvR2;9VH;a&0>yZZwT@86bU2z|owu5`y9>uG?ft8s^^ z75uo|46g}}y)I^YfF1RNdJx>0-wyp96j^JhEuJfVdpE>$c=kQS9Ojt=L*ZG<3bdmQ ze2%!WKRD6xRuyYQ(lqNT}xlZKDQeUv1SmAF5UZ>o>WgHFm8oq!!Ve>Jy zTQ^^4ya=u=y<+A#r6nK+w*=%PAP1-4t#+v;aAeaj zam-*9-+`aYp@jW;zR7GK-0({NALa&mG6bZPYzfgJ5DmF($RV)XKJhlTUVT!R*SqAj zfQIrdd@(Q@0v;xg;ETY+@7N`8fBf80^z8Z%pA43zEzDYzTk}F=ufnnp`{*nJN7=gQ zyAOME;eL4kwDJ7{lbg3oE66L)7P*0AB5?C(Nn8l&qtgTLoa|`$8>6t!DOmo)le#*} z>G#=QGrrb*DYb}M1y`(=85K1_kub>xtKK9R2&gAIzQzNgAUlA+uK`EwkJ1?`551Q%cw5z~)&NPTd?PoRag0Ag6L1|3gmYtJ=$(TE2zDGgMS-@#gQs-if{W zJUBrp``1*PJ}Gt6Ec^zE-?;-YUH}opRd_w~b8dakhsZNwihdaJf1gkz+co%-&M48t zgRlM7<@H*;?pH@n4SO=#)i_?n%Yp)O4_;HuxyVjV4|3Mg;B`3DxMCM{UIPt%Ih#d> z*wIH@;dQK>Kgoup^Lfdiy%UdN&u9MZ^7Hq3p>?8X;p976D`}nZcf2Q~rK^5t_Rffy zL2tazThag?(3@8A`K_jji%FmqNaD7~)fN8pJ6p=*TM3+AKxubqPb!`gzNOUZ}=W@0CtW zeID#Gnnn!HJK4&Aj*f(KT3_`Ut7Vg|S%=8TR!RgHwU-<4<`p05)sKod=uL6d59xxT z=x)P%+q#h@%8h@JiCC5g)o>uo!*xsKSALHC6Kh;E&4mPVBck)?IHsg;E(9o7H29v9 z1p2G8OmD&wKkZ$Si2MgmUSr(94jg00e3^I9Jt}W*3Al^hH$|oQ#xj-Pnr1(|Xvsr{ zo@aBYfA2kBHOXX?=mu~mBqX`N!XJq@l}@E9%ObCC>l~c z8_KG;`p;Ne`cpBypa<0n%HW=u|C9}U*u-afdx24iw3LnR}jP z((IxHKDO0m^S_-lnFfA*q+1m6u{`l33)k-?#-*?kbtiiZCH-al8Ft;@g(g_ZrE@;# zGH)%n(L*27Fe#jzUAM9EDbW_g9g% zxG}hDm%X!T!YDleFH-Dytagm2*&gmq1Mo7O$ddN9P?nxToUAN1C#vALQ;Iz}hfu{D zv;BdOKHU|Umi|2q>QzsqJoywh2OXp+;n_&mVoV-^)zopkK5cZI&Ibcwoe8IJdNH8{ z0cxJV{fzu~d~qhOxa(cYPH=na4tC2bVsz_=j_^TW$D_7R$ckx~^owlHNtf&BtGHy- zx*r3t{&VC6XgRrOAC?#xNDh=u-qPiBdyIDWY#id}zfc1sboEZsl-4z2ky05zT$_-v&y%;qL8@s({YhNTd9U~6jA*aId5NxFByY+Giii zGmE$;eww~A*0EvtcVjsX2&r*y-h%|D@xstNmWMe`KIdA!$CIkn@{fYF$OT&cZ_^WMxtBaSYu50|Sx$GZa3jg31!1^X8lFi9J`q`vp(*i& z&Cc4ylmkf9$yrK*0Dq^g&V1#(5p+4(Sp%mWOFDtTDZ4ZtK{YgukftaV9M(h}b{iWO z2j;E`K$0kJgy}~hz8pu|=sri#8e+O;A}g>kw3_tbe69y}?_26fQZ5Z0dl-b(n)y0w@=K@F~ zHDNmWb(ahVnnIL^4m+7C&p0bxI2uQ!1c^NyYzW&adBT!EBtN|uN>fzjgFQQifs>BM z%tPYI`#^jWLWuC%N7)c^IAR6d(p7u5w(A!B#}*qHv#JnXNFqlN9>#`m<1`fE)xh0I zLeGY-9!i3!&$+>uAo{B_sb{YZte*Ye(9y+`ewO> zm4+HiR8JEs=6G&OL6hxA1wjnShq!{zTRwBI1#f8AD(iFBlVg6I|Q_^!5fF~^R>mFta^l0lV z6Wt9<08WDmaRJ&Yx`#6o<$I{94!Vb$lzon5=BYu2y*@cHN9l!+j1bZZN z-sX3#R({!OSZPRti?GCFv<`#Y87uJSI27_KU80eW5LC`7&VnB2Q5w5BhCPIlueld; zwAvv3{Cy7Z>0x#JQnHiuI*N4~OKa(xNgxM4^b!OWVI0Rf=Nw0WRv`mC_|5ASTiSlo zwrc*Q`AL!y?lE2&pXu?)2l(&#!V9odWw7*-?r&z!2@f~woO3JKFw)p1& z*kQ?`xS~cK%bkV;c2SLHk^ft91{yNsJO_%TSD^-0ulOI@SI(cw11au;<`Q*SqLqnB zX8arof@aN{-J!h+CnhFc@_y8qkXHL98$mZmmRoofPgim@RJ!Z-iD6B;P9F{YnQ=io z_!GvC{2Mxiu7y1t*I*tE&ZfT9_~ieg%m%=lfuHNk@--zXQlY6~eSJLlD!LK{)R`*$ z=C>Pc+X?k164M3U;GnhfRxJ6+F>3Po;nQWPt@1<9?0&IBvSBXVns_6PsU)CHMQdF9 z*Pp~D(a^Ol$^Y{p)Sv9|)RS|9(wDc+NIe~iQ8aXV?`we`mn4i6uTjF!FD|gUb%Ld0 z-H?Gu*v=aTLBiB@pLQjwApc|SDLH*T zYw4L?twOL04WopgAdXY&`O-s%m(BxN8`8L=mAY@)_e4;JZav84ZSf2ibPjo^Oyg zf;8IWVYY9T^Qfc3!l;1wFHP^g<9S4JQl~LhG7ve)!^rqVE_M&KXnL_)v4=_Ae#cYi z7CuG4LUjoz@^hA(v1*Y97bM=rAPKAiTIQI9yW9JnlMS64OZ6Fh%^4pZ_hWT-2it)| z6dB(rZ`s^dr3aD-A0oz0cL>dJSS9E)5c;XBi$sWl;0ae0 z5Pa`Y0piuxPiN#3>|li(Km*~Ac}in){8NSI&uh2D`k-r%a6Uz9ah2BTJ^P@zHh+C zW@|iTTe#;B*?})yA+K6yy#wDs9lZ{ z2$jTW%#JAA1={ieK9nzyA#_n0e%nBPVl)tG6S9A5n&a@jt?2X-@Q1SJ^L`L?hR5(i zdH{})E-sUURRYQLq0)CML*{6-k&-y~d+I>Xpk0d-q;?PeX(OmO#~MLGO@Hx3QOQ>8 z7?2;FAN;;)T|ttNu$=otMkq+iVYdzipn>f{saI+De0+iP=K5~9AGLuC{;)T1P&+u| z%@_?)z>hg4dAUdNp~vvjK;-J>vH7U$Mc^=X&`^G&xdNKpWI0|YIP zGMI=MEP(^8nx>I#4pGFY7>b6$M~Fbss!H3Z_N86Tff?3y z9*|&CwdG42JTg4+ z4xs^uaR*rDd&G%EEbz&l&gMiuW&*$+0({wj5c$pUBiZdODL?!!EB{rxmxGf1-jTdu z#I!!YVP=qn{{1M8wyT(WM_q}#k`9Dg*(e&G+GM=W(RY`q(_u^Zew042-<{K3b3WZt zcm{S^m?ntpc1hSPt3vr4#}MGj=WGe<(syF0EF#Beu_=x1FEkbn`2{@;Ck%Cm)tRvN zZmRd*L)VK_+quDmmHW#oI*Ljq?)IhJPZZyMIpUz$yy27StW%S&$>}~NOjsy)%bzJ) z@>K_)Be_yUnxt;fSxW;P2PHPE^Ri%yOVv#CNT`>7507gOd33k4ADp-CT*UX^94LVx zP$l4p@Q7HoXrEXVtD6GIiiFW9ZivwcGk)rv9&^!{Ub%&L)B6!TtSRRnI`QXGy&{xz zZ_S;8obeUC>Y)WyFB6plbEFowOr_FlpUL0i)E;!SSEa(s817gq4Z<>=2 zLJfw<9iz(vu!G+zBlUE>lxl5{2RTQ{Z5eg!mI4<&08P}I0TE+vy2jGypym6?;SH#F z$k<_OceySXMLe1BR?+K$!A^uVd@ic=tA`fTld zD;`mbg{YZ{?M62BhInE}Fof%qx7gl!#b^<1uaRn1CX$X!A@nS6V9|B7`D*v;(`)kwJHTxZ9pdKdX1nt2JaE zZ$k2lT*ow{O``bZBKuW>hane8VQ8*H4*)sPSDIJveso9-9|ktaB7#t`7`Z-WE72H2 z#X&VPBzp+kxsU>|F?#gzan!a9(P--cSQE+yZxBxM)!_bC_OEZngo;4IG0~~taH_0~ z=2!sijmyD+3p9=CA&C1zVReeel$7)InD#E_$X)NEgvT>c3LI66H5b}WfxzLMaqo0U zu6zf6W@u9MICEd235uf=tk!JbgN`K7l41Qx_b1|2;M_0|ADtRj<(Ab-2Vz#VU{^?J z|9p$ZbI79UI=Z#|dyLT=Eo_d&gx~0Qe8)Kr)aC&%vng4nWu`dc_p&i*I z_j4cwW9L(UkD+`X#Be2QT@^rsHdChvnLaO5t!^W9FVyDfc5F2IV$>uIVegH0=rN%@ z-f!gLnO}xi#%!O@L9*}rZ<%2T5iq;V!rQv8{?w-)!N0@J z?3^fql;w7lhwLO`8Zq$@>=TJx2WWsEv0ikPYK_mLxl9T!WUB#S_OtrW;3CcESzc4+1A7zATsS&M_zX^<~jX+x98(r?c`<1 z@9qfCFkHi%t%zn&=d$xN?IU?i;Qf843QBz!)z*PVk7*ijH#{y2PE-INvjFsiNml%Y>Y3Vxp3o0RceJL zXHtkx(dZ4+*iU zEHdjp5#xmu8nI&UOi{)I^Ppqi(iQrXTw>S1dDFnmy9Clcu_~2Or=+F{oRCda3=U@_ z(BGGGi*tNU*%aZCD={?7{H=7r`p{kuL`f~Y8@GRiq8YjIuP2zX_~EsIACWou=T72( z0de=}H*b}(LGEMav9`2ihXW|7#a!h05>_SALykXT5E-cv7=)*h%|^FnK~6p!6ssEX z5-P8fxDyrayyb4_UJy3$Gm0zi#^u&4F_;d8|KCG)zwH6F25`B6(y>;r?RPe80g-14 z`CK3)#w)m1Dg_Qkc_@+Vrk9wtM1??6{xz8oVaNxxEK}XwmH9Mh25Lotbt8x7oU^%V zGAXzWYKIW52^z7PSOZ?yz<0tba{n5&8&{FaDTtm&M)V|BK#b-}+mdWsS0f_73ZNUp zM**D(_i&Qm`$sFt*ub;L0Ea(oSumyYORX&pC;dZ5AUJOgioTx~K&Syu&p}DBRGSRi z3DLDl38Wl*%j}D{G_IE0**|4vB2}O;c@VXO(b?c?LazykjrC>nF3PU=`>a0A-TGT>RUGn|jb!03ZEC$bF=`5xnPQC~ceZ8(osU`#FUJirZE zu|>2I1aa3^d*$J+QSP~8x`gY+5|hsVPcXben!g?gI)Lp17}(2tYqh~Osw=$^Wxjm& zC(CC)Jp#zq=gy34O)YP0{vJ3di)9%adA?sKGL69b-^py*L)I}KK*=)ycabrN$5`in z&NZE=ZSRL(3CS#yCO34kq`9Nf4NA^bj1o4E4JrFU%1?=vhs=d+1amb)t&Ypgp}yV# z2BqWaxd8mw_s_$k2s|IR5G{S8wGTA>dLm6(rtyZ@wP-GWu6NF9Pp)zU+Z@AL*2nkf zB|TVgFQh39hYV8#g3px7wF#Fi7RA8fU@VcSTesah;AtbrpG$}?4CPXWCDYwfR^f3T zd1njbW&z#wD3OS6v0gNN?|kd>b9w`#=rbqDFudTt#D=NP$Fr^-UO)hE6)#!qyZU8# zo_y1<(Q$l1q)GxD$FjbE08 zhEB5}rk!l>>PV*x_gUvS85t&3uCo4fdW844J2GCN*o9=MAh81h4_y1p5c@h>`E}`K zri%!J3@NzmQM~ue`ZuL8`g`7X(^D5|G`ocx>njFc?KmTi7^Vlb3U$~(KEn^&%SpIR zFdS;OaDD(O?^|e0YY1FIdl7-quG7|kd8lOnn5ZpBS`r2p{kvCKMm2v6n0X+0cK>{f z6bH=k9SUSrW=v6nq z&r&%fVrCKYVQ%spmFW<(R>?Exs04$eE5Gt38jz!=`+wmMQzrd1h?{n|ylrNIn-&3( zS2_baQR5NNS_Qk3z*h(7#b{^!6>(Octf`_0Y~x>UwF_Hy_1zOheD@69CzQ`-m|G;Y zZZm!k5G*(AzJX^K88-~|H=EJN-{zSpx(xoV5B}4JD}bL^Ld91(B*4%aOm1<`NDW)b z{J6|Qv){45glsU6ICX5`vNKk3LltKSp*Db9Pn9$?r=CR(-FPStWAs~6cDvI3waXXM zQE*TygYAedbQsrBwW*xu{XW~2xCE+0u@UmtiR>(~;ub&xJtxWkd`qMc^6gfn^OV)+ z$dN@{kKlWa}xVADjEouhN!%_3vFx;6)>||$NoF`Q8 zWu@_GEu$!@(?1OL$6;{Vxv}QJ0Hr_WsPRBZ}tke z&&L)3Ww8jQ_EH&kry@f+OOLz4VRy1AL2q(FzM;n}(u4@rMkRdxS*Ox}Ks&5eiE!Lg zThN%YWgI+@6xXJQKwy_TXH2f-pN7cf^u*LoOk5zwwszQv2D$rlmmgOVdLg{x2R2w+ z_f>qROHPajxo^5h8U{Nq<|-e81>5O7GnR>12B+7liw>(#^{&Ed(MCc#(1SFWLkWDhFs`7ciR_NgI+6Jp+{xKR7>b>o_IrII1(`81xtaooub=1 zq)e*MyR;N#*wY%*fk^&3hK6D-;vfoV*$}93h|&PI@P=CCwAk1C9lx+RZbF34lBsZx zKkhgV+EqqsQ%03lzAN>7fI8ZcIbYFrAL$}~kBWIlMQQ@8#Q=h)1lebF`o8WF=9ynh zo;HXtKNj}~swJH9yYJ39f2E>a z%iS$Kg$YqAscaH&mYFV=U|7&I5z_>`sjt8lzDN9kWdfRWieC7UplVPEZ`)>rjDhc6 z;K|61MgTW}<{S;)?ETGfMxr@`zxw^GE7l%H_c$cwa_u>C`ve{vfe?7r6&^akFHKwO zO1G}9^qr)12n8<+f*ZM?NPce{Q6dLU@q;J`wliqehni9nsM7=R4I&EmTl^Kq*#j6D zKL%t2DRG-n_}F$XldR##lo9v&Y}el;ba(+09aOc}kGC>tBXcHxR#H08YB8-KElq?Q zHB|C7l8wnV{PVo!uG9b5;>_|YRVybN{4O&-*nbcPNGo<$bI0@Z+Sr+KZsNO0MzHoS zIh~`Q1MrIHISYMyja3h z;(pfFxof(JXrNwG3|Bo7#CfDQuDWeM`I)Kp0prin#6ViIp| zBv{}W{IG?F!IoHBrosjh|8s?U{Rtb_zOv7NO6EdD0Y5KHbp>{Vmze1 zLSm`sErM9lw1w3{l40k4C}&gS*t1axGEX%eqBQW4HXh{g|UnPGW3P@q~6 zEr7?nOmg~M2NGA&WSaTN7y1Tq>{`!e9KRx;wa$bWUr1xu+&gW zFLAS$*QYk`#;@Q&>A6$Bi?F=f^q-MeM*LU8W|&`0z2$BYN>(!@P-9JhGVs=ZfaNoc z>#pKg=mi{r--zr)^8eSQq^%SV3iJOShQUd=X^t<*5`&B*_P{_~`Q-6;%bzwDFq;f0 z`%cY)m$>{0WUg5kBHBK9e;r1~k0Es>_r$kjZ_|#djTY;OQ$%1?Y{+F-_EH);9zDqPhx|*V%|F z8NWl7sBGK#&3^1UJA?jF{=hFATBCDOoAD52O!*>TDoud{D9wO$&m)q3Dk04Q@T!xC z$}0o|q+ZJ2BAL{}4Adw%+>x6>9*FsrSk&pkXP7`B z2TE8u1b5&8q_&@FyB>NL zR*~;J00zd;LE*yEw*X0m`bvz}G~5pNhzG;bAbRX^YR?lBuGjYg^PlEYB#uW6#z6;` zfq5BMYNe>&Uv&}Wm;_qx&0n4-pp@4@31k$_W8f0sACf72&#MpQu z*DS)nSBtYq^r{wDr^mfOvVOEi-v|n<=QVe(SK624*t*aj>lA;))?=7fFHk9vp))X0$MPo`)Pc+)@Cr~_ zuQKWtKDb@BFCl^Fcs{+rdo#aaOI1Bs!Rpa{xIZ(ZKUt&Ne8S(t^Uwr;Tj`J*K#XME zP*Ru$c7y{4Fd?+q8z9605zV<{DA^iiga&F%8mx+J-Cqy8)5@Xc=odd=reu88A=V#_=Ia527MU(rTyZaVaCzxiiea03mY7DjRbY zzTxzF>);zG2Y5gk-2-Ov*sm1TdOWukVKRp+U@3BvRwHumhHlm<-=sfjz98gE&F7muE{ zCgm`vYAgh15C9Z|JP}%jj|RLx;T?e1U{74a(qR0PJ2DTBR+n<(ANRo3U;?%K>BJ{g z6g(_E0DCIR?yGHW{u)rhm;!_I@pWxkP$$CnU7bVB(7qvmoIKqpbk-JW1ee}G9=4++ z)@eqGiswHdX_lm`&?|i8&GI$OSi2?704g$#1tyi6YL5|Tl3j=x2W^K60k@Qt|4^WS74Lu2upSTTwFlmBZ7^m~T5<}Qm zYjyRQ+O^~>RKo0#$u-D;Ez*&|+vjQDDR7+Y6OjsmMlhZ18j$*0@r_rDj_)vSM)Nuu zz>im<;)Jnc;bRUKW$9f@?wA7toc(8Nx*9i5Py?K#TNu!cfHbjTJRBYd{QooVRZP#r z%0%1serl(RR6#a5b+Dxbtr_ufF6jFQlKC$iVGpKiuM;j(h2jYY1gol~+$A?Sw@Qc-#%9YgrJV!y7{ zEsu;7`_ux^eOhL}DsX>?d_aR{3H8YS4wG!-73RkyK}o9b>o9+UBJ|j5?Ocn~P#*yw zZhrje=#4BV7)G0z%2|J^pZH&|lQ#eaU?ls=O}HYTq}shh(L>PIPYuNmEc$nis8*(E zoUv1A@2f=M5ih`gT}q|>7s>F4+cvtfQ(7tG!4q$WQq*%%P(Z{0xOl_Jl zDmY0Mz34nMTf}Woy(CK&K^*|Nt`&t73^9;wJ;K0dlt^UBI7sGdzkBsX$x(=U00^1I z#22Zs-2r82CO!&E_G{>_G0cQ`3I2#pTlW9s>-mX}tklc5vRgNo~TN$8`}`xwM|3~T#ESeK7!E050hTy@p0GHTm=G}Y~Zdy<{a)au2LyIn8mcQ${T(f7fkS~x2KE~C)} z?5f#6-ky+n4%{~0zDLK2T+VVngbk_2{^PNxHl9`Q`lZ3v3&N)RWWk z{9SKqK~rNl+*B0CGhUU2>KnMvKdhudMTI%92u7>1MUvPx&{af>03UW$jgHSJD}`dO zWRTqc++6n2Gch<2<%_fcop*iZj~Vq9E;tv1U1M#=gRz44(a+W1^s<%f zu`f!Ny_l>8w_)iDwsd(htDxL2%_^|bLous>ezf=7TssXb=C3d9coS1Hx@KF@V5V;} z{2DyAq5H{xO#7ibPk^bk1jqLma!1-d`MxdCh@#Cf;*?f-0qt?Y86ac<9pt)<+l2B) z&RU;h%0fvkn|bCA!#d>^e4OYiZ_pbfaXv-Y64?@gp)T(;8h>1zahC(5W+j>$rgyOB z;+MG6YzO?=yXZzbpGtermi5`1a#NLj2eyH3Y5zFMK-&5dhvLm)qpofjwu0v@&#AVf!qaib>DH=ayJCHT%=6UhZ2P#bYt>N-w7$^_ z$lwbgA;~L~>eDQoxWxNMc@2@?7`# zoD(2Hj^?izAt5>E`@O&Secjh}-BpX*6{`7HY|DD;{RbZ_xhQlO+okTJmAZ@KJ3w)V z?jo&SgiN-VF`qMpY{Roe6K~INZpbx(WI+|F_F}(G>V2gPRnH<|k?Wl94 zi&)-E>I1e4gR|WT39zG&K$klIn3v)%TdP^= z^ce9p&cN@3eE^l_GnByM9U$Ix#1$OiA437G?KFFAd9262!zm8z5jnHl7~(D7g2T83 zDz=jl4ALnoqT6~HTgK*D(or4{bDhff0jNA`G#hIxo7u^wRT9nMWn6Nc1Pzi+fsI61 zVkm3!qG=KF{ps`71r5QK6PgR0S6;ZePN3|z;(%cLkOs4bZ=oNf88*3qsbL=^3yj^1 zP_K^Vv$FzK6Ov07&j#O8kY6kSW11ZYC$M6}R}km%I%V8!ANKxVbQlx3nCd2a=JZu0 z`dUnBQ(Mt*&P~Nu17XUHFiaUJMeOifgabOtSMfAMtU%14G&#h-M*ezBg|-U{8g>hp zEYL#oTjPAn=!!WERgO2`@m_+QWi|_YQuA4nz-U zKYH%AFcLI8-nu>_l1#Dv{ybz* z|GTHy)|afbWHbO>1agCw|{%HqX!+>YOWgLh}^|K%Jh&zl(Q zj5r@G6f{%YTU>|hc|B}&Cb*c#PFC%1Up-Ox@EauuIRBR(+n#fk?HD}0!zhM zDH?b+@ri19#SONfR2zjeiOrCcP8FIV7jY=k&oA+fx(>ew7jeSvNoYjMMMM=lSFjdz zLqg(M$Bg+eURC~%6B`aYyu+|0X)(g%l7*ukv;X0iel~prA|K+#fuO!W^BcJ82LCXFTaT3 zyU|HzuLHm>CRg21Bvz}Hle9~`nX`eh#}H7jhsL$8rf!1Ic^c_+#7L}~Z~Hc@Wt6)`86B$Zbnzdo)rQ3y(NdeYR zcVO#&`#HLAJ6?KCyo3!PU(PZa&gJ|#ou&*N_ZkHT@9W};5=aG_A^!EvYRB}*Lwyc5 z8?vHB*&VJ=n)bDdPMguWIZia{GqDh~rub?WtB;POokPUG@=00qi-?0HVG)mT9MgI3 zTA{Gi%N}G27HREo5zi46UpP+(X4jmk>`J1>im-jHf4fyUNywULFsU6OC-j0rn`;fZ zEw_0GMjuNS+mBFL`0P_d_2V$-K-&34U}NX#3B({N8EAshJgwQ1PoQ65;TJzmxDL{6 zd}5lJ`iz7;0L&PWzzoWCq_X}*5Jiz^H<3@kL#m-)6>=f?jnWzbIuh5YmJ{0{Kow9smeZ z^K@KL-A6SA8qP6a`T!USPMqD1H@c8O<;F5TdrL5>->@!2JpGTOfzFN{`D>l6CjM{TT>VZ>J1VvyEn~Mx;LTv_tLR~x?UhVVW5LYgq zhp+p1KTzbHTWydn0uT`X0sZ1lJa6!G!NWa4=ibaTiEQx*hwhE+w9wBbx3L8{BU$R% zB$a?)2aZW+<>DK#_AVg>J$?#1+a6n$%FveijSieE4>}Ggg}|0@!m<RxE|$zMEWCf^(sSf>UzW`M)15Dy766?eAGPqi;CnRZJF6}_NWAj&;Unw;>C3vYby zvr*}LJ&yNF{QC*X+Y?f>l4>g|_s5CRF2O06CVgK#uX@pXTNBDEGKIE3m4TT;vS8Y+ZP;Cwh_E+_bM80|hh``}*V1xCSs`ncH3p+qN z&nb}i0+`cRt@h6?ZH-@5J`G4f3|GNksQ!X874^5@ye?`6qd-*vyJICtFgFzjt{8$V zpr#wuU)Ypyc!*1IBOvg6Fy4^efX(U;gy2K4?i|Is{dPjJ=mH8y7poxGgr?OTnRGPQ zux5ckmD=H0CKhkZ%|(b^$H{ms=OpccVOhuG`p36lGEdIX!*lJp_gNOc_yQ^CA(~M* z=lNoKMDYhO{1(EsYvyX)JPc7g1LF+be+-snpZ+5GXh^re2Y;SjazF@&y(mmKXVK3W z@NUKIwZ%)wkthZXq0?k6`j&GpB`cav0fKN!qo18a4}LGr7nnf*1r(@5#Gz(U*6XtT zJl(tL9_$t${qG;^{C#yztz#v*aL88w5pX))+hd%0Bf*f@R{f>RQ(27&*yUMY&0uxYpC%PlP)x z@~+bCu5*<2SuO`shn!wcrRU~tf(-Eb-Sa?3!}=NTguyJ5UV{TrCQTWV$(!`8H7xPM z3TP2yAfZ^>Lj(6O&3sJ{{{0?uF#bDz9a%{+mYbg}vPA^NMR+n>LRi8K(St)a;u!v_ zvB;br;Kx$(7XyYgrD2H^N1}rcpsQ^r5FUp zdzN@^ZmJg`9788kGt4i)1#ge7{EE`Wp2jgq*BEyf!VJpZ^gDg^gR2;Ao!W%#CiJ+0 zU|CNHr)W2(pQAOX9&q~u%zP1u67IncuVk1EL@Im_ngZ~h9exU-qtb?RJS)JzNn}f_ zVBuhbCkY+FEWwe2kn(g$f7v~M6Oo6J2-tEmu!Nx>0rw{Z`FClh=E`GTUyX|i3{4M{wyAERIdAgLevvb5|Z z!;!>Nd!c8s%%M#RZM=Fr^CD(V%C`j^Qd__?q%DAk&Thx{S1+EaM=$jMA@Nl_5 zAAu#%$3s@HTT&8IR}igGt}aqBf&jvy015~>Df-+!j!=!woLA?58B%mKgNRo32)%kN zz|{*wUouYJ$Wz}$IJ!WQQ4(<g8MRF)8pdt4lJy%?0!R2)qoM#^`tQv&-@F@m$#omRP0OArq7Wq7hy8 zH6{gJp1Cn%>ks^i=bqGqj1wMu@4b<-a+L znxM;^K-GHsJ|t8O**>!=EWRVQ=a7Yl!IcIyN&Uu`@GArjSwChO>J%FefHUd|n$U^* zgf94X_OOfaBAs27z~X86K3-H?*7f9d!$R?)Z|H43W&#<)W|*5>I@$TEbRij>o#af>tqE9O}yL3j}hW2GtNZi+J*e+{BBn*R)J zi-I`mtG`W?2^e1I#y+^Ho&chy1*D;^JdgNrLkT~2_DiW!86aM}iF@-4tq#@Q-LQ|-@JG}}z1J+mTmaJ0g z!m==kw%$DnA3h%UQl-$;B)6d)bzA?p#Y^m&dEf^eLW)JsTo_}*{xoup@SjFgD{A3U zE>iz^m$!S-Y2pXe~m^+KB*t4 zj(_B(OD3DP$u*%M%*hHpF*dgB+Y00ER-JZWEJF+!<$%dpFoWBzLIkHI3yFE~2>~H{ z17}J&{4`;RvwPc792>Oz+bJ(YUlP=sl7sP^3k@Ap8AdRHv@SQIATr>4fWvZGYbRmW z(f`h5eLe6!H-YBnbIew6Ja;#520HTsQ3dcdi+`j~3V(p@A@oLuhmJZzbzllM|8`%d z5hCqJ4IFg!b(}`=U1G+NDO?Z8r%NiNT(Cyy3o(TEu(sxQ{!>b)8p>Rm;JM#^g+d+X z>9EJmSwxvdDpL?FH1rYakId;Fy|4jDcx`@>V@=kam_WjYC6*3HSrQH)t!z4<*ILT* zc!CE+j0fo-dfQ91#qRqBdYVBf3?iihi-G*4Cuhef;q)Z0CSJj%NlPT09$R*e+QEea z$2DQv?3x-;1xdVScK@ld?!^pC*4#YsQIAM;0{zC0Qi*K&a#0?=gDiZ#Mt7a9ofgmd zU4sWW@b$MMXxAwKE7jJ|oY^o%G<1_guo7*Y_s?o_~kdZm5SJ%{Xj zjMyX?Fx7|VSSs3g^LDArAx+gGdL~2I&?pKgaYt&eiG6XjYS9wQ2Dq(KT`{E{CwInC zsXfui0F|Uriq#Zd`=cGOfRBGnhwP^y>4G#$c1C{q6fx#&-Y$-aVJX$7ug{^kP@A_s z`#V5{u^{ES+tqD!{~sa=y_Kk#)rNXJ$AkP7_z$J2Rr3`U^$Feu*hI)sVN=py_}M!Q zprjNve1x{x%0foFioF9?fTN?=d;B`EXcr!)m@x|26d==gihXSq3`wb49bj7|mHFcXByJ+b1%Zm#pXHVwU+LF0b^FdehV5Mw%K z(e2nuk3jfHAaR>NY0{i97g8vY2Z&T0dkY+e>>qd!YDc>o72}heG%I|Rj$^6ziphVP>SEN{%<5JeiJXK>9mYA$OJ=v;ZoqG_ zjse{b!1X|w(ePPY6o=u+C<#aJ_)NE$C9234$_j+WHQmMg)k$z{HhuCNP7N|wmu z)x=uB1vmqIV;%24ut>@DmOeHp=^Bbv*6qMksh-oF;@oJs5IhQ#!n{u8sgR-I7jXG9 zwI);F3#~QC2W~L#e00|z8jj^WoI)v$7^EvuAgSXGPj}D&kft%*T$%=QvM4k*d*XSa)e7N# zJ5q6L->eVw){=HWhN}TMfcjK83^ha88tA(DRuoP+f;<=lvR5D#oDO$5p&st$3(CWx zWF@TiPO}`6pg{rKI|Wn)of7v8@TCBFKv8rqRZ95oxl8d6DHS(@ZynWTxdHv(32t>w z(UOYUI&efs=lWjFO@|{OLDYn4VA+7_i=_su`QVsf^VJ&oXR90e+W z9RPSL(8e2ehY$;wq^>LI6rMHTMU$*+foerY3uF9wmp+5wTah?o$?w``geGr&AQg#{vi}IYXDjSiOeyH zPW4D=2IUq9DM=l7vWu2&j^GnC@_P;cAGP$D!C6fRk0v3<(?(US^B!F@tG?f z+PQ=$7R3McU6zVn^(;9Yj{m7Onv4IP>*1G`5!a7BUVsS+egpML-?tit>;8!tsggPB zxiv+$$vc(5LmDJ29g5Nlka)*y%$f+FccKh9K{W(rz`IX8M7_o#l!1VCab&yNhDpd2 zNT?RT^8zt7`DaB)8q~`033di@jS8+ypiA-M5sbf2eSwwAU8}RLaH@}` zF91TI#`Fu|A(&tH2G8adVhEJLw#3tL9^H&M>|BWdK^V0S5v+7;deS;v&$VrkMKZ7E zGAtLDkG=*PJH*}04-I^wF>cpU0!S4ac5+|R|1UL0h5~9lM8LM)RNtdHj55bH7GlfQTJ29++I4{!V9B7Th zhmkArhr}pQfP~D@328#T&VOo1@FxC!OloeT%>?U;mVi4IQ-9GvMmsqf4l=zCh=v5I zz!8YbS$Aq18_q5^7%xhaoxwyD`j{%L{oU5vb4V@&6p$K>P0(vG!Z|H+X%|i<{atDv zLFPml7_tp+_{U5Osm~=OzYI)RRg7w$z7Vf5yhF3hM#q--XGsLw3nFQps7L2Q%|#&Y zOlu|80NEje#Or{dhvsO(y>1ZOyZ~^uIr|>s4XP3KS|KUz#nTgN|A!Y53s0al0X9vR z;KV(pN+o;`dceEhPQ6*=(kvqUtOdO|YVw*>4Ny|c<-!qB0PVFYJ%-lG`w5qR{`WF` z^EiuNtb%+sVk%9H^L))W2D2iqYtuasltM8{Rj5nP*&I2$g!yHUexBa|Vdo|zjfqoV zRa((=kxiTxS?`!Qo1&i}4k>4kb?54ccYY(gFECKZaNz|g%s?2r16>5&II7daQMd_F zm}6@X*)Vez7_5WmCV4k5f}sOBuf&j#`mKBdO9@tZffRw1`f-g|1(YW>z z5-|D~0Be}iU83y?zM~{h-59jIYuGf@f;QDS%_lmgb{;~2#QCxIh}+(EDvh@FSR zI6v{qeg4E@JH{5oa-MqwfAI8#ewo#(6zwjfk^#up9w2+XXIj703Q)rzn|k&R|Gu@L zZ_}$d#bnhp+nEIb7y=^okn}YP%T1FYfo}cWeDtkl2(8#jWcyCN5hBur(X3S<9=ezS znV2$y_GT3hfHgr&+S}g3KoVol!6|^;7z+PU(jO0Pu8!a(Kpbvd@HiviQ(xX*kxzr` zQ7S%I2{K|`3J!iBpPXn>p*!A*mM3yzsuJ0E0LeX^(0%E}Fla3!ph7^lN)*r1Z|wAp z_kl!=NI2dxklC(xD(w945iPF#=q+xKpp>Gn&06~?J z562PuQ;H@y)t}xz@u)lD($w%2nwi>Lk_L8&$Bv8Wiwqt>uQ-X7%IFlqV+R;rX>GO| zAPo!!dQt28rd4O-Tzl&o{?AF!5 z6Ysb$>#Xh!E`VGAqso;2n`zIgNH%?Ho(uUr8I%*; z21O1C-)&X87>N9?AvAQq3&WhGq$oqI%V;_XWHv1=EjGc9PaNOELHkblI%Qqq>Uwi1 zYkviI6KMoC0e=M<2mo#x-?AWN`PP{isA16%=?Xr?5#UR#u4zK^GJGDnNQECk9tE9& zh=((4dx*mu6Fh+M>GuWrwH2C&>KHSo09Jy3uwx9So!#~BqMU?w00hUO^&!GU;Xg{6 zqM;Wd2v>NvgaGmjT^B#Q?ir?p*DObZNosth$h7i{CrC9jEUy86IX$;utPSMRb>he0yq$utXc?W1XDfZ zY;?L_XuT~f$R5clYKosLn!KT6_6#(MXka6@WAF)aKrzUb;je&+Y<0QiaD*Y0h)9@d zHo_(bn6caW5^I^>$Yy{-{0z+uLi1PpvtN2$&jBK717?Nu z*rn<|%iiE_u%t2k0j}~G4WZs5pj_?}zu?t{2l6}nR+~@&)C4`{a~ zwE7O?7jPHd^B{*nG(gman%&)`HRr-qVcm?Iu`pm89W9|yz?6IzWwI&FL3341j(eiC z$L|`_cd+WXwN*%`*g`sp)*Nmm8x#!!i9j4cI!FChnodBOQ6rv8_c1jE!%^#5T7cxZ zn%)L`kt$_aU3Hm*{*#C8L?F5)SS9sJ1Jio}I!H&_ax#{PIMOb{W&$n4X3pr=x0H>~ zge^H;!$8t3K_5yZY^B#X`7vwUK!+wmDtp9dgj5WtSxu?kn?jyz&CJGp9f-M1UWyMG z&dj#KAt!Pp;Ts};n1Y^KHsyMBE`DCCRXP$RT|LE~ou2O(AGF)hHQMP}Qh|M}`d!OE zQ<;4V83>`hUkBWpmhAsy`J0=YaDtypfz8obW^=@T;gYwjLlgRpvO+mS64tRnBo(dB z$TuP6^KTuO8FB@aFJlj9e|PYQq^;A`gjSr!9{$v8S8y6kjrnxkG2ZZ@-DK@}{wA{- z3wiMhB5;=jAA{2QBtCaaA*L>~W+id6!yy2a$KTui=ZUtBbHG%r^dp)eir~S5vD7|% z@lbxKVjZYUv-21KfFwC4t7dAe@Xga4roEYC-+IY~hfrVK%FC?V3ZR2um@iZXDIjetRImeEmRn)ScBsJ|2l=Mu=uz2 zH$p4U@GZ(WA7f-!;ff3dEj{wu2f#CF|f z{0iXB-6pNC()gM_HkJUgnbJj}K-UqX3&)Vp`?|Dav|cYmcqCuiDAv>i%^H_ET1<@f zx0P1R=lpS&cTcZW06JrxKd;B zHC7GK`-1n1@qPmD6?suOlR7a1<(A+cVCVssziJgG%+G>CHl6wxj$CK$4K0o6Pni6_euM1yAe>mkOz2wCH0zygfCYB zgb5aaQ4myknE(N%maXX7r52mGZqQYdVkA#{jgF47f}BWj_kMsZuYMoJzX-=juhFRt z^1ItCslW%u#v<;7*H7z}{2Loe=EI>{wEXYfBT|?-s3fJrU@AC}>m%AN{Scik9sojN zYFlZ~YKGllET<^QBCX2c4eNj810axrx$E2)m^=_@;Vm&IC7j#lO71ZyEJRiuo1hB# zfX-bwklt+lkEdhm89^cWZ`KL0o&{*bq~^g?Q3%pIl)!i1^q1Ok4CTTwk6UEag0|y% zF!-QKJJ6@AA)9VA4j4+~eNSwgfg&3QOy?@v*ZGB#cn~3=UIEIhm(sT`My~+Tu>KH(-BWh)^cp765;&LF1 z!gx#}oZ@Nt_JMp8dGU$Biko+Il5Wgb=N?K<#%e0U2gIsSxP6wsO+0^`sR&}Ye?4WI z>4ix;$67sN34Hb*)v*)e{`gRDZ8PRo$m{%>ER=Y2VhTIi*q1yp5H)YEd+QOmCG2`Bui0Yp7vtZyi zxE(4TrGv7%L}sr98p`3Jx+8JqxK6WTSvB=4b9 z>sAKlaTS0>1R{~%DFe6V0zknnrt>fveaom60pBPhBgP!XyP37WL zqR`7YUPTFlH=dkB1RSICR=RJwO4#VQc}Ul|5D**31)`0Pr8F>97S1%p;ctSRm`fk z3bPJlC~H{P*}KkN2!vOf-4sQ@2a|HCN$i!`X8p09mE~hyaIklCrP`cb;>tPGBJsiQy#225{Bv5{C})FAS=>ef&ujRn&JuF2Ej<3wSE8f%@pqzcN$FRFyK^ zh5dHsI*vmyC<;o6y1|8@lG2O80_Yb4(-KD!gzAUrs)H8js;fd91YI>h zo9U|Y0IOw}0#wR>i8TzQ7&UDqA;4odqp+!dS;p?bbWX8tkcH?CcKw5;orssHE7>E? zLi&wUoxd-9ijn|%4%}NiCs3{dQQdh#6J@y@c%lr9qoSmmh2{0f{BtoMP|o;>y#?_n z#0g%cZEa7>FH~Hi!VVL!kz9>>Bu8s21(?EP-c_nS5}Uk!k1JVO7=NyHE7$|0S6+R5fS;s-a&%^(&wdRdEZ%N-}I_NmX}>UzEI#6d554 ztmugWgOhy-tsMpsYyZUk$F~^aLsV$=z8&+V>ROjKn38fjF1ordFhCMJ(c4uw)1o>BR5pk4mp>lu>QIwHiUqrS?VNjyE6qg0Y-5s-y;V0$wlaO z%nZ*9eK4c!JVx$PV$m_Ab$KUX;AR%l$pGh!kF%ViHNF4vn{}-p-FY+npZ<7x&5Qf@ z+`W4t^s`SIewqLHPo90@#{=)SDL%jaiNk)%`^zKzuOB=7uYXyLfh}?LN1Uso-qTjf~H+mgq`!azoja<~}XrPb5-R;K=01q3;bFYi1 z(LiWAhoA=YEKw{{>W?NQ--m;L4(c0JWan`|8PZAJhgsiUq`5{JWEx(t{{?c0F`t%B z7hTVBzGL3Vh%?Z^K6oJL@LPl>6ROi-r6 zer<4C*2WcQ7SlKn=COljS*m1X3dlC&>uogHr#bZ_l;&~lOMK_(>QJLJ0<7=_ysr+# z_ir0;EV{9wvHqxV-!GwkEgYwTCvcq7{Q0kaptfXIwljJ1u78jQNr6{k^V%J{Jayv6 z>{qTyb+rp+8`(uYOFU)Yp0K#TMA!`@zmdK$=bfajd#%qfj<6SaP~NkZ(OLu1U>lJien&k z(i{$G^}|c>3%FmWNeiGwT*kOV3815xtBmRUG9BPxIRt3RStsdR@cc*BY%ouo0Fesu zt8}`EED?r!$zN8R7vz`s)GOiTNI$@>sDAt%VIxrCA6|y8AV!*e&V>GMX`CDx#2@Ro zJQ-5IMoASBz`z9dAw;0xgqA13F>xn;8PH!HH^xg&H>Fo-Fd1lKcm{FOA`Q#G1Oj3^jX z9pEf+W`b5=ElHialxv2w!die%f5=*JDh)TAJ4w2Cv++Ct4-e>c5+L|$9&`wQBq7d zf|s95FT_Hy3QRgI-J4nC9qIhpw$@D$Yxf~JAnJikjpsBOAk?h$Y{SgN9f z*sXd-q_EJqsqk{fhiF|P7&4Y&XceJ_b>wDEevpp5>JYyieP^L<61As)^d`3egVw4z z$Yh7jH9Xdz+?g{!oel&Nx*h9AB~3SgX7{lh@Pigi_Dg6jt&JM(cO+DyF-*3e%ltUT zZ*I~QTspb_D&{(=1uIZ>{9h$2d~%GU!{A4o?8f}i*5WKX+(GF$a|e%8NWJVYOT}(i z?YiCm;i1Qf>VW05P9=8RZRD3F?&59m%i6h@2xf?eKSLZxVTEUCGMM|+df4~Du4Y6< zg7|vORl*Pvx^VAnme|BlNDynvHAmLcN)_~pYp`c&^?3J**=W53{dRHrc`(doT*Uf? ztVh>0#WADs%F7$MAA)BHoy@HcP~%I~M~gx_-yh=*~F=`DSoX9;)L zU`ztcOobz+;W&OE3Y4!!u|Dp%iAK5`XjI_Tr@_Xxwm$Ppa_k!YL=#gA zMB*Xm*(}8!Z#(B;Aj61!TyYUH(;};MBKpO*yTl7M6ey z9AidDCLw<~_yp1O)$XN%2mz(9@++j|xc=lC)m~hqxUiwJP8R;N6tld<}mN7m7 zI}}0Z6uWH+>S9tWkKAnwui-HznWyO#MI=}&<^$AAS)k6)tx#Kf&~GG%0+huMyaf?= z5VrtT?fZcnKnl@ogS>~i7dq=I#A8VF+0bKXy#D4mChoxJr%89n28aWGJJ_{S8Gknu z`YhSPBJv<4;LsUx=LbTHx7#10EKobxbOWxD6YrrgBfYV(=nOFrDB(k46EV+6T*KWo zW$=Cai`WA!ufv!@a-F$j;DU;`fGVI-h&aALRVhRvT%Pa-T2B6zwDA$g*=GRCjixMu zSej#{`Uqu0a+wU$L5>6i_uhS>5Q`o8AfBS|DC%fmsH-2>3zaV35$Wg+luk^agu5Az zf_EWrlFk9A7y!N$lp)SdIV#5N{w!l__j~TGZ!?V#=mKw{zwZ9Pq;)|ghD$K&O~49bLmtB~ zr+eTFx*ILm<0%N<@Gwi|ZjU4m#PjeXy6eGBjCeieyT=2~!M{DT{>Pc*#0*@@g{pyy z(vPuRq&#FVD!XY#dugP=O%Kcpekv9e%e?lSKbdp2xcSf&0#sTqiBeE)NI7IGjYnQV z;!Z66*94al6f5xPbmr@ARfMR)u9NzFDiF2lgzg;jvDd>2I$2;~myIDKD{Gxu3aMGNSALpYMIt?f)=7|j0mm5avk+c51%v9OfvNm-7>_2 zvYbr2#xZ%_y)H2aA!pW09z$Te!Slt#p&}9SS3pIQCrl2he+A>ig`cspE|5sK;Gm@l zK$S{30^C6{CB)BAsgRHfmCEy`Ns6^UcC4sIK?#95uHuQB3j#2Kx%1&8{6*3wy&oVn zYl(kILF%nA=lSgz1qWzZZtX{;fh_)TmbDWra`iOm_8_Qph+p*vahz5ITK?gW-{5Fp zpG-*?Dv(n&o)$;A&2upea8XbB?p4>|=8b5|Nc0X#Nr2~rNq_^i*EF{N?t2C@!~>8r z#Y+L}(Rz&szJ(sd&=Ds)O4&5|>PLJD8p*xGk*)JOEN`)azcol)u#8NId`yx<&%+_G z25N+eL)^vJZ$c<52WE^>Me%7PfuQOp-B)D$h6NL|Mf>0?qV z&hnR*?xd`AYZdNk7txX=mv&ID54aVa2@-#GCz!t4n9oh3T zRek=FMr88#og9W`qt9c4YYouB)`h!jmzFFhuYwp5fqKonAirmg9tGiu^LeC;2M^}; z$>ckVjkr>9oT{U+4(Hr&W-BmS;KSAz|9(`2u_TMdz=oI5ucUKeEYQ<=pwM$N(ZL+XFO(DZB?r zmo!aqgD)FHvt}R(LpPJwpQ>n4r~$ksQ)Nt-5Usj}J=#yuV}ZZ@MLG%{Ke#A_GPL3b zV+l-C>fCR#U=k`#T1l`3(kXgLKkr-GTYnXK01d3CqI6z~@D(`S?7=rMrJ3rQ$CC&j ztAJ2CDoWF`;h1U&rsYlDn70-lwy~TC4YuD`YtkJ3hR+U(CZche9HYmLTVFh7Gq0*xGM#lO>caezV?By~U7c}~LR z9G5+YME!*Uo(AQVHvHMapuzEY2@ugv&NRK@nE#sWVRV@eA)s=n|A4&YPTM*>yX0S$ z=Ka0@OXgXESrG^!eKorz&yp7g)A1(%s;W#Ki{v;Awu!hLHK-2T4C(WH9oOTZN{+*X zlTyKRj$uZ*if}=LA+Sq-B&bgillz0*P`4ZA2i% zQY@ra3>uB5+L_76XU~X7T1aO70I8jiiDfZ*kKwhz#uVO#SucTGgtH=8P%{!OE)0lW z$<9OSK42p`KN4d(H7BIBs>z99&iYjd=6@b!W8*4Zapr4k4^U3rfaV+kD(53aqh)lS zZWu=dG})X$!Qe<72im>j$ZO=>*h@vG_xkuIkl5*q3^l>d0!3C zcA&e381J({z4PNV`%+4bM$gMI)MM}U6PwBH^*`B^{kyc-&cr*0W~==<^@ISj!$+^Kfsz)gJ?T06 zI_MHc9Md9Y=MCtYM_~ixXbf1e_MW3U2`>mZE#e<09xLvATcK&m z1Ql)M;e%qOxmk_rf9x^>tfozcw1TGpfe_o+maQ||XTj2PL{9u5N>`Q1k|F|`s0ogl z-ylFYdd9DIz?vJJgOLX}i63CRXT1An#4^JFRfCwW3T?ummM4L7Ve1mg#kGoxeN34M zM|7}U7V9~oSav5So-=+y=^1ngB^aE(-H=*n=>Z>eM6Ht)5ivRas-A#GoNVK%)?Zeexk`=)wE%Z0@UPDv-~KeigJ9= ztJg0vLQi;z9FjFIPWFH8#cuZQt+9R4LvtU6s z*7=Hha~zI%;;05jns*Y0Z@!2kgwRM>G!M+WK5oK4ZnB_>iZcu8-cl?#wy(XU)ex7{ zUcz36BhS=bfTK?aII^G?LJZ6DUBy+=?b=_qFnk|UIR$UF)UY=|mY@@h#uoSiC4j4a z-REBp&vX(h0Gzh_-=Y1FC7nVTC@Kc3JMbmkc|GK%0k20I zeFW&hg*GeUcYE<=q)chK7ZWpB)gJC3(J_6@YVPhUQ?`Jix{QVaQ^|Anyjb#>HxDLz zHQIAmBg!^RrM!^EtVV5~^j)`Gd*{iNjTIb0XTuK|C#Uv1Oogk?@X#rY=o&A@_j-+G zL$csaw1idQfWXPdX1iKBF-?JC^fU%6mcsd(=BindY|r{Y3s%~Q#yDa4hWG@-@mEk} z4B+fLKUg{cLmZML3+Tmlv`zE&e!G%zU!0PBDt#9uOH|w1JmakuW}Ow-362P1D0o!5 z`l$=80-cM>N+5y)PU#@478^j-3bc@-b3EWdZD&4qIMB=S@?j%@SrJ{H_0g- zx#pI;gGSf4gYP;_p+ZWQV+sdYgvKjQVKg}0&2YjVsc99;UaYb3+3-BgL==mrtrCoi zjW*Ar@o)De)x?orp!kuy__-L&xy+w%-!evD?p($UgKc9(!{Ab&Fj9)8M9K8u3FFPg zvAx&zCh82b`lN>&-mb!84%E=ga5)^294RfrQe!aT!rwz-s1p;eN$*h2P5sbqd$v^!>1HEYLv1_ zC&FIOc!+nXpNZGAT`7vE{G7F;^$fKX?+LmWKdeg`j0(e(@UhlSP4Pd|Br}xmH^3=G zD1(6t(S$cS9lyUu7|Mub^P%lD2P+kjET;;|E~V4xq7H1|RaJwP$3HN#``OA{SiAR@S+<{Wx>KQ@I;|Kc&I&&!T8Uts8lv_L(t=>Gm0OvU@?4cThbFBVN? zzoFiM|m|T-V1H%Ewv1P~s zN~A!9cN`MOI5d|d((`^lMvL}aY-Tr_GO)h}wmTBNZ^Es%sZMxfz4--}HCpo1?=bNc z`rbtK4gAEsXl8Q516+rtYPAqaT?DhS4q-N7j>({~gLkqyHkpjU$AhnV@8ucC5(=~r0;2;JVbF6n-aNo9tcFWfgvpzch#gq=| zyJp5wD120IWiG^H9(1#2L$HE&4jhr}u$9_Kg^9kLSv89FU1~cb6T%z7 zs67`=u*C}iHgFyP`7bS~3PxXlQ!Hy4nFPn+uf@s^^atenwJ+Bkxu4L3Z~qZ0InZK! zz(lB@hQ@a|3ZDq*qy9YQ)Y|y|4}-3QOMB`|B#}xKzZmq^k2trG1lXRb+r$#W9bhvb z)@YQ4!N2WYag9a+#==Wn?JyygeMVks(I$c+GQ8?ZopLk;WuEkDMsm&?B* zpf-ve!0PhBh#{Zb5tVWxDuHoxQ!GN>hZ`@okcd!+(`)VgwvJ_IjKGZRaTp#__Jba?j(JUsP^#Rh7bho=(~6T zW}9513Dtnz1A;L;Nk%YIk*ac-6Gk8#LK1)|zxb%LDaN zVh9%%&(K$dy0kL59AI73*s~>XIa00oPXqgdJ zhyck{))d#~k4tY18D{DweTEuzT_VEZ9=Z0swI#Jb5cFzAG4w4K>Sw)4zF{1D>xM}cezQ~7#&Rvs&_(# zEtM0@vpNFQpyB6JYE1mK)L_DWB*OQDjOH8wbC+dPK0FVv1z!;J^dfL}Vm&aQza<$R z`S1vx|LBcWqDOJXw)=?-nfi3pXsT~jOSq6$#APU+{?v5W?7#m^<+==91DS3`#1)`! z#Tt08d#g9xII|w<@Bx(h*ig5024Oo;J0yG?>K|{7I@Z~I_>jf1E7skBU*> z4s3PT<~h(YdKg?NQfF`&WJu`RJMITOp|4XcP@x_t@fVN@&w5d?LCpv$GnvYn+tx=g z#iwv+X8@=^n^5{BBN)nP6(Wji3dtz8pI(IfkD-WI)2y&>`1x$%3Yzddyol6fOcc>< zp_RW??cZUgXs{KUSnR}}5^=Vxw?0G42&_8;`pa(R3nZdNVkrCrH91tbh^p>)5R?s{ zsUM=59>Er#i|lH8r)Oc`rcB3Umdk-uL2EIsf^DKI&`<~YRZRiwvy^G`l`23ZF&s?( zvb0d|6*9f%kQa(_1OF<~p^enG61;W7Ul!GOM2l`y)fd^O3bJ&;KUN^8n%*rrK6~qj z$W?F`$7SGuh-bT6T}iEmFY)`A`9|$Y%*X{p79)z8aL&I<6wU!x8AN8f$q+~I#1O{Uz5~L@U}8dZwIaGz#Cyhzv@@?%CRo-1C6}e7 zM3h(b7YLS^lm$8w@HI*eg*gyWJVQZBKVoV~O~dVXv=vWPLUbUECqzVK#DDM*rEUc> zsOj)@aPTK(7;&X$%ecM1^6G)1fkobMPK3Y31co~#bu=O{*Wz1)5 z6yMCOgq;8o;#f$sHv)g?=;J@Y-DmLd69f-qvYZ4De=t~FFg^~0w$bExQOL_0kViL| zmxO`^rVaC{JP;fbqhy;8c5*P8&Y4YyRmtT5N9RGUJYr!+*d)moqaXt85bVH2=gSLS zSsy@gAk%CU>>vh-Fi0J^DZMjx9aSVxZ9`^E?Pp|Dyip2)3}VH}KTdV%juoAVwrl3~gv^ zvi`>hk{iizpI2(MVG$OX)IxPL#ri>>KpKElwQBKz>GDi9n*K40Eim8JGO>2$br4Kl z*gF6?Ts4&vtFBowpa`$w=@>UZ~#yPa za{@xlk-U_6iS%5G!^>f+64~ixJZ+OnwfkrbXfus5((Q9JZx75YVlD*2sNhGufXcIr z3ROikBb3pzM>+@u6OF9OdbaeTI1nil?E5>pIE8msoc50}N|nXgO0pRB2K*_Jc|!*$ z^v9n0Fe1o)rI26(fWIhDJNHn>!JraX#nW*KdI1!s&WmtUy4n{%{TTbeqp&Y zR=!cOUdaGow2UPp8B#)aoabF>$?N&EwYnBv^G7|<+e0hr_Z1%az%CBWGtJBz z`xfgH4$I}5|7`C&aFje4Y=V72&31O>b3cOqLt4MaFS3&}9c%vy+;n6@p3{HA&!C!u zy-@C6F7D5UXM?|a%(7g~#-A*QqKY;^)isPbk%=6m#)Zfx(IFxk5^!?wuf$W7NMh1oKj9@JCjG`BCzmi_ zR3A=T`<0_K0B8p)52OK?_!lI5Mw*Z-@y;ld7oY&BO>Cn2nq0G>moC=zc~;sp4U=M( zpWnsY5fd79EkKB5II*3gWM&JoPGGkZ9xq=SOxA8!2U!76B%4d2X(G7gqa726q2h(0X8oVk@8>m9HF* zL{(3vAsd#JPexQUj1p_s_%{mkVa@1{qcXQm7S|z0ix1fVUKp-sI0YMvwt&zqhcOWf z(c;`dReUlfM5BVeS(Ves^of|wLc0T)9#zG~g+((#r~MpVBbj`z#O@Krm;4YX5Y$R* z3yWZ-0c0Qs!i$fKbDHK z#IPS-LLSvA#|la*)h1CQINdA^$Sj@lv=9O?t?aA>sW`x0)L8e`c0);q`(MA7^kZ=L z^5J2Rt*no4--wDHw_m2B+EbyUf{GYZL+Yu+m;ut4^#R<@<;=~p7*hcrMlO_nAkW>I zt)p_-9PFZF9Co)c2)^u$X;J}VJbjSZ&kv}?Y3py~HbD9z6Iat5@X#x-?|InUAnH2DM;UD8N;pjlw z_;$=aX7zBQ;?kh>Hc_!I3Kz5e{s38uWory*Hb7l~?Lh@4#-s{>z%Vl(PSO6h-|J9( z7lOfQ>$u*;L<4KN4Pee4IzHECCSeW=^aXOOa6M)P5RsZ>un^)vr;Zy})46gYfJ24} z#6q@kzS3{o_Uc7FVt_39Ffs^%e7N|UgAX3$%%5Pq=0e%3A}`vakd)*^*$4&?ChknH zg3srpg0ySYzY2Cb@1v@P7C$EHSkPe0Gi#X$S;kQ(Mb9D#GKoPy9r9vvn0^{Nap1UT zd}?K;5@(@2Ybv7ePm{ur2gbQFz1^|6QJ_;32PYsRj2%Z%!wPN!mxxRhNLU)qAv@u~ z!DNC&nWM5)@Ur+Rc&GdQ_Z>g_{|wL^%E|4*!qXlx6#yRu#l!?ttJVnCB$QTS9!6c; z;iwvDf3HebXxPM}l?>xtII{T}$w>ldQr=*5I3z~p2I}ax7S6np!9tH-Q#Wwt0#|6R zg|9$0G+MJ--|C}VHyn|IB_RJraC)ho#vKrs6j}UmcU}q7cz`G1M_e#CwSRsRO$mpbx=#h`~RUf{y2LDnP)L#B|o*RkTvWw|93Mf)Ttjc$#9(p|%|M`CRlD+BtOMXR$@ zp}dw!fg*w*Au3?a=K13fOq(d5{|M#-D1e4ovx=oOgrcAe#Bv71+BK+a{hX1eV+!6t zQ|6WO`K%a#M-9%<1)2{8$`ShSgM5#s5c-S5#cc#;ng@ViH6+HFv>`gb@Y z%5lC9{{D|E*T==!-6Ya-$1|YslOZ84<|C6mFg$7z%&osb^b=)q-a8^?co^rL&087H z*t$b3smuOVT-rIqD&WC8J(VX>OQlrLSSt;7MuS8urcyz-gNTEYXDop&f(w%#9+fBQ z@OY=#?D=RGZ2x0nOIE$CP?>4}TP}Nr&W!W1au&kjJzEhjM2wicw5BA(R)%4o;7uLI zv_2$)^Z+Na`-ktgP9YtUOg$H+BVyH@v$3}D?9rDQ5Fjfw4Fkg$1$7}4n(pNa${UVl zz>iPv6k>=PPG7+nl~N!A)beTUN^FEFESn5d%YS9WsJM5&Qj}N1&_Fqb>=cWVa76Hh zYb1GS;0eRx`p3IwmSO}X;16{CnZLQoDi~SKQCu3NOwUoQ+aHNZ+c1p$c3|LJqXH6` zHsByKYVQ#>FyiDS?{YrjKKf!zh7;8ld$9Y)VQme^x0Csb9N(oRGum?ig*6-rYp#U) z7F~I-0trwI+6}$a+1L`OygQTfzZkk2E&#f^bP9noT@9h91Qe-Y@c5#hhV98Tld%PG zh+GXkO(IB0%33nR%+Wln<$gxwfRtNle<4BUbu_h!;$dlmwO|-d(ZN9G^zbs4F_NLO z!SW5$#oa%2ygNj5^M89Rp$0ZSl%XJREPPSG(n%Pc(iUf51qIryG3ftQBY1WBK&Yob zOy<{8^5=oZ{`BR4$N!M)$Pf_gBd#=!)B^bJO8VGKF$a`kSZEjz2EMz%u(-9;;D`+n zO!x=l&fVGN_Me*SwV>&t^dFCgGw`=pRh2^S@jQN8B1I@6W4-C4Ry6*+irzon|##5SsMY^r5Y)o$uKdhq>o**^Hkle?l#sP+tIpQ@^{2Yp$7Z zTAtaMef7Wpgx?5lUHJS>CVOPR(dBG(oUr?4=@hkk0xOa3wvYpJSoqY?zoCJVXN6wwR5*lt4OQr0!d%L)_ z<>1DSj#cfk=LqtknzAyX@j{6z+BR@eca*JDBHfX7ii$`!C8wxKS}W|TFxUpS!ixqd zMJ#srs1^#}y|5KO%C$ib3S}C*OxkBIw{FEC3z=9oQva109BQZk3)0BRslMynzm|-q znEy2~q(Ogl2AWMT6))=BbT2l!C=ARoC$s1T_@OZri-%37?;KTMKe;>xCfJEkMSMrq zMnL{9giZ*~`DevU5wzX#wp$;vOi5Nec%Q{+ zL)Li*BUH%rF2F_P5{=jNew%1g*16#rAfvBD*MaOZ2m7u>qx-4JSlhRyI-|88hAJ_X z={8fnXR5Z=7KZT-t z)0$r{62t*9Y&`(w^KW~}A*?HwIv@T3N9!?gnj!t9yr6C&s4kHX>F zj2rM{fe}(@uDa+MNVT;BKnIJlO37lZU~q^C#1-rPj10SD_U(2d`q6w(*fj9G-=~@I zS5?b6aO16@H3Dw1?#~gRo*LLkgs)?vB4dA6guhmy;%XLLTR+MwI!UBpnU)WWIf(wu zISuY!aFe68X8x7G&J#Y>y#%)Pm${rSdJGdOPbJ;6Bu~% zXBNyhj6s+L*Ln1-8S4YCICN;=bHELOPG#a}N}1Y9OgN4*U2BL3l zbys0hK@fb~b+UlwhLRqd5I}x}!h8ybXa)^An&OU6V9Edu!FAjnT<`&q$Ju5jw!YL` zT+X9I%W6rS^QY9=4gCFxE;^(;3I{ZeYJ11iuOe5HIj1)$+4xHo2W%du zV7m#jyZf4l)9uUj&=|y6zJtwMagNh!LZ2X7$fT;Oh-*NJDqhm7IpxnOrtXl;R}j__ zq7A#7g1HHJ>-Mqc6(x)F6c2M~I@nzRGMY*#6NoT4W)pHW{~2$X+*`4(3TcCE#>g%s zI)v<4_xU zCPI_I7CNi;`xjk*7@vAJ*BhyWnLdiR6wss&j-UP#8&)uS-Yw1bE){pvaY*1{Y+M=g z+gIyB7aDoKyo9imUlRl9a3iHIH@vVRsqS+2c^tP`k3<}o;rYI(=pN>Uhc@5(DmHcp zW<{bcWFg#s2r_00g#a43^@<0LZ&1+2wBD82@rp#J~FORo9~XnW{UUgzF&M5N#y9Q zo-DmY8(}r#V+On(p1WCNP5TAV0{1yni{Lut@QmLT4r#nv^G(QP&oi>Y(4|4~ zPO6|&IE%2hsON6gQ+(_ZK~>apeiEVOvgH%o%1A-!gW#AI*{kWH*Y_8L$t+Koir9@b zC{69-#^_qg`FR+#EY~aAOn-N{&26D(UXiUb{#?~*%x%HWW@)(Tfy6nsm2fVIJBidn zKzHqlA$~QnN9AWuFpL^lmw;7M!MACTQ)%PfCtaP1;E&p14nYQ|)9MA*i&Hs-^#Y5F zRyGEYHWMY7z!$v64J9y1Q7HZj+S+_XMe>s;efkgDgtLv%@o+9RP#9DW%r`@Ke@y}Z=+j=^c@64KkE6wb*XP+#YXtdV4@r4unkcD5_kkc#}JnhGF3eP8!&~CA9N6b z2;q!8VjFBGRg$N0Lz6hYDSDWnfVEzAbD?whLx04=88%Q4lT(z|TIVOY3D8-~3_(h; zhfl6ZK-F8 zFd$b-FwP>b0Q1|WV~sUj)!F<92^0)QpS&{Nk|o9gE4z&#(Bk@IsH24oHE$U6P%4Uu zeN40r+`z=r4pYcn0U|lt4>CT#sW0QMVF@^g-bAOR<9c!53+~Q(`HEWj5`Z5Eb3Ay} z7$%x78;lzS(qqZN;yZ%H#v!Sm#Pl!N2`|>?66xdEhLax)I)*u5^P`yFo?(W?t?pqM z#1T0vGH7JgnEqh16OJUmf+Dg4(xh)!R~0J*RVh?V#}G*ux2N5|y3b@lH9Qqal3*0m z4aWdh(U9CT90lNxx~@tmPOtHcv8eY7Q;Cfy0Awry*ezDBK=FQ5fymk3HNK(ASMy2^r0lm;Tto%9}<2 zu28pU+4GHU<n8fDxwKf~Yx{EIOk{jXFDM*wI!gNnfYME%X+VH}MqY^#L< zUi-lWM)M%J2`B0GsLscJ2o|MW$gw}5uT2o=g3e`+7xXhAdPF{^F>Q^{8HlksU}maC z8t)k}h-LPVC3CG91B=AOp6*~yXrR55)4`uu2}vcG)Znh=D6R@d4RlgVvdq+Np{-GA zG179Jflh73q=!+Ivda(BnOGGN@lyj8R!yiCcMuZ`MhEfP0vdjRVGi)*MdOrCHKLac z0l6yE%u-2|1Wqv@W)x)SE7n>b^W*NyFQBMol841j<>gtVFU>O;szw@ z?y(w^E2;EyWjjm;r14d%2Mpr8I&OT8z&t(w9nS>vG=CsTRFe|mm zQMeHz7q)|Og5Dq{7~Q#&{Eknvm`@Oh9`}H%j9V1SGaVt;lq~IPjDSWD5O)ko9L+Dn z_sf7Q?@hC}<|_FA$JyJ* zHFc(W?#Gt^1B1U0 zm!bTMK|+PJ(sr0F3r^1I1nA2iM6mYCy}X{XYBZ)e6{NZZD3&@x)x{L2{bK1=bIXXe z9Ct@+x$CD`*iqo%#q2H!1M%URxtxD!p0C33yj9R9%CL8hQ!ga949(X(pF`hNpW_A? zqSbxX<%D&Bl;RA+*SVf8&g_Nh)CAvS)r6z2%e~*VYQJuyhFxyDz>b?y&@2vJE@=nn z2GRICEqh6}QH;jmc~0!9o!q*2}8(p3;^<11LIrmG0j!*pus9PQ|+E%pYH< zM9Xwkkh$HkSzo537W2c?G9;@2I3L))^DeE0+(~l=7g2SQPX;2_ zsu#p8YVN(5h(}+Mn;21!F<3bwtt$+_U};@$%f(X(%wZL%7EK`vV*gvF%ZoS_gSfm; zY*=hn_0#N6H2)yvW2bwy%IPR>!dp=Ak4S$r2&myupVOL1x4?Yrv2PS}DkLRA`YBou zwdavq0DouRb|R*aL|&j&<{+$%4Dg7phed$zn&Ii075**<$xsec*~H>-?$z%*LJ(R=vkMp7%l?mG2Fv^ z;I+h$K-tLBMa1X>kTllCnz|6)}jAW4qvMF zu^4t&XI^`W-T=k}P@seRb0^MsdIftDF&?lhryqq4Tz*ChD?y1*plnBE?DImvKFfGId_Q#oWX z?-F5m%lclFaJwiBSXMtFyps<+iyY=7cR?KwD}u?GhjpQS3qNax^>!5Vk@?&%_r

93piRIAutP)oEJ*F(E1Pfe^iX;*Jr4d zJ!#Uq|F|VM%@)=gF2&ec)r=3XRL@nHp%Mjc-&f%4d;LO|w|D%3u8m<}qtu_+J?jGg z-{|7o^Iy#$m$+;7!C6$Ss93}l&b$>DLy^$oNql4 z06dOtpgSxyD#0fBcd-8(6cM1Hs2(b1(k$ASR^2CoxPamMs)cs(=DpXC_7<<+Mq6N- zlY1D=i!eX7Mgj9Zju0?EF`#<~@oIAp5oa=2GG76;koW4Jqb(qJN@sjVpZ%5bRlo6e z*8YwHUtE46C3Df)wgt~y=V}SC$HYHik~izk%Wdsf;i{z_zDbAiNdHG3c{v7y&;GO| zzO3$lck%%l13AK*w>uo^<%h(U?^o9X0@Vl|tczzIG#cO+68E{Rb*bpBuOegguM&`1O$!=x)#&#Y&exR?LW`C15J&>jol_5J> z`GAd*v|ZX0msz?PHiPHEMIsS$q>Ti&zh&+geQ9_xgXEvXPOfZoG3f@(2l1vcVz({o zm)WPaP{;;r3GOn2#wy}v0%@ul--=@tkStTaNKN3=72l11lAYwBt%p=}^~sj<&fJ3a z`h2(vX%M$Jw|27|AtfAOy8$A&k;=Mlz2$}Naz5voZoJ%i*V^Jfe zmNJF_Ie7;^{-F5o;;`xXVKM`EIvfTlI!fQo%%}hYFh1*=-ty?^50L5Vs%K?xo}PFY zjH-Nw-r@u(o-TJ{C4_-H9H}2y_dU@X1JMBc^HME0!B_azz*tf$}C)( zFpX4UAHyU&Y?@ki**!>0z`>ttf+^qjyIBMR+rfc=q$%lIm_x^7Yk#ga2l3x1&Z!Uf z3E*LnnG>R0M|1;TQMack4LOul#R%_GHZYoa7>!T!q;#ZJz77oFGE3fFQwYASLi7#Z z|4jz_n(&c!y*?f7Z@}=`khP@~43S;3&8ZK+fn1)^r3XL%SAJ`4j^c8fN*KIigyVJ1 z-r!~)qup~#aeS9leJuAO@RR6O{XiY_IH1&%pHV!}k$Gam4O(3KITR8hudH&&S84&+m zgb4G*yWkV#C=Mo-#4JNUt@NX(rt&$(m34WTV`?qJwE`<%0D>Armmz3E{5z&a+^(#< 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 @bBQJq9Q|>7iI? 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

4^S|{_=?@W`5Te~}KdS-WT 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%0Aa81oR|btJufA0GuVt$(Z>8 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

l+zM+Mn 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�?R$ub|&x4p(AdjfJmrL)7)7RLv7M8NY#Br%%Kx?S;Za8?aSatVc>4V zXguNxokU%xMgup^pZA4HzgZO3K>&wZ-weH|=Y__=s`-HwnXs-%mL5~>F%G+a9YnpC zyI_8R3}(D>u{vGXw#L8hBh10B2|$>uJRoihK>B~H_V{Ho6i2uWrABodx2^OhfN~FY z9B4%k?J`4o9o7F8Xg5bja*#4h(5E4}`fwGjkLswimndoRy-{*c#U1R7T*6ZSlrJ-{ zlAX}|J)+t(wfi{DITo|<5hdF+MjDuF;w4_v{4EI7x{K$12Xw>tXbHk`Wi)8kh3#lF;}ZdoU0|e zypEV+acp*<-mcz)=r{$;xAT}}_LoT`h9V{V!%A6GYFpzr$zsy|M*1MV8Xh)*GZh`t zMc?`6=j|gxi!?I|JhNXt(Kw&fi|pQe%?miuA#e?pEp{_Z^L;XGo&(7 z7;6Zxo@M-4vG`vnVilNFfp;ke0al_E=-Y4b>|%>63jmA_+uNsymg?GmA*up^{Qe

fb-rn6mO{|*ECnWs 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�n0IR6=;a^CkZszdFLdtFy0QAHWo*UQo2EtP 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

bvVGs?W_1T5H%Zd7El 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 z zkD^BdD6LLu5#B6BG;tKW|Hm@s~M(px;PMrkn}$(&9_8}|0|Q~f*Wbv$wESBcZ$>5ch9mC9G#5Z|QV-P}p?-*q zPu148=1(up5r9jB0B8J^IffHxo75z2JJo(waYmVPz5F9~=rgQ!Cif>6Yzvt@(|PrwZYxKwKmS%R+|PD!wc@(o-QQ>NPqYVy?2W zs9!T1D(@udjED~+QjO+55aD(l>4BuKK`KJ9Qs>}#3v2+C`$0)u#=%Pd{y_ajN`4V&&D)VNSP5K6wdQpa4%M-o zp_+NaNP8SiwRG#7pJ^7PUDbzh!q#>V%TY9&G?I3~Escpx4A*HqLqRI<m z!UZS&gUV8TAy-6DpTnvoK~#D}U07c715FDyZ+H(?kObCeM=~iq6uX_SqEIl+h*zeN zBJ_;EKPAj1zTMDg(VB*77^K+xt4il|86^Ky(W!c@+<*_TN$bs&*`H)r`eA)!wsHqG zk;0(ts;%Y_^DY?>NHTEjl_mIw6Qs%!x^H4<`@Xbvi>EU?y7WHs zYu8dP#27bYrHIlK0cFO=CUimGJg1-?#KGp$UY6cjj^cI4(CJnmWnuI0e2c2;(_|`k zP&0q6A}unSTcNB^xXL5Jj#jnx(qIsk2ZN7C)Odkw^*2bsTE*OSEy0O~> zUfgW>FVm#bEvE@Z zb+Oe~J&w%M8_M#J{+`Zt3ZtXAC42d`Q>}y~NO3_=u-fU9;@i|n$V3(eur@cx*VJy` zdm{D+U8@Z<0EiyXEh5*u5TLXhl+a8Fr7i2cTusZ#)e6%c8RiudM2Jd5E|_UZ*Dw*n zG>8E!ZJ8kLn>7uy%E+~@oYYi<&{tov2XAF~lVObao7o!!VMqZNk@`4RpsES`c`J8b zN4_(#sOQ?2Icu^@v^G+oG8>}#?DonCS>&-tTm2q6vz01q#J!yluy#_qTJC*#(2>c6bh9fk=pM?A$@TQNQnbd1I%SUy2kq$;po}! z`xba7_(NR=JP7M_Y5ggG9kHBjru)jgc_KK+deol^2qL9keDR57!Y7Z3TJg6DdHiSi zJ3#foXO{SD_=eDv5HGEop^xWO_`U@)hWvRr%txIfrFQETmB|*TV|cgo zJp8eoE%^h9d{k$L# zjXwM?e^;I?lk+WB275&Np9Q<6sNuSW^!0zjhZowg{+11Wec!+j2gyA8F@ZU1wE(Oq zlfv`MP@1-=F*d?b_td=r%hRN^0;qe#Md0R+p)s&9-L>QJpg`XphiwAkydFk2scNd+P?5z<4O0pCHBa*w>`gefalCQudb#MT`HO z)jX5`-J8+Afy9dzyyLJrpjOY`c7yYspe}nwox*?j?s?pSrtuA2VYe9?Xw_+-56k@?FUVYz-y_R+&{VSL=Xnh_{~ z>yJCAb#W3kLjk?bc&FqOG}c0XVPS&P1ZRBKNHd?GWoiP<=2Y%EIU?LS`B5ig?h5|e>k!`HnTu)*yYX>E6bu^ z(dJ8;O^WP#%0DPXE@a>L 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

CuXC`|4~jfoq! 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 z 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%0D&-3L5}(?8%V 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

q^V9OVag9@)~g0<&a(Z+!2Spu*S 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⁣iDG|Tz@PGhXLG^ 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

k6|&aouNHkaF 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�n{!{BA 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%0D;gV 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%0D@pwoCqwO$*3 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

T`73K%Kz*VJ=s1~ODZ(9xowVwcGk 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 z

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