Correct more analysis problems. No functional changes.

Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon 2018-11-28 21:27:14 +00:00
parent a940a29283
commit deb9a6d43c
10 changed files with 75 additions and 75 deletions

View File

@ -365,8 +365,8 @@ namespace EightBit {
register16_t m_u;
register16_t m_s;
uint8_t m_dp;
uint8_t m_cc;
uint8_t m_dp = 0;
uint8_t m_cc = 0;
PinLevel m_nmiLine = Low;
PinLevel m_firqLine = Low;

View File

@ -278,36 +278,36 @@ namespace EightBit {
bool transmitReadyHigh() const { return m_transmitControl == ReadyHighInterruptDisabled; }
bool transmitReadyLow() const { return !transmitReadyHigh(); }
PinLevel m_RXDATA;
PinLevel m_TXDATA;
PinLevel m_RXDATA = Low;
PinLevel m_TXDATA = Low;
PinLevel m_RTS;
PinLevel m_CTS;
PinLevel m_DCD;
PinLevel m_oldDCD; // So we can detect low -> high transition
PinLevel m_RTS = Low;
PinLevel m_CTS = Low;
PinLevel m_DCD = Low;
PinLevel m_oldDCD = Low; // So we can detect low -> high transition
PinLevel m_RXCLK;
PinLevel m_TXCLK;
PinLevel m_RXCLK = Low;
PinLevel m_TXCLK = Low;
PinLevel m_CS0;
PinLevel m_CS1;
PinLevel m_CS2;
PinLevel m_CS0 = Low;;
PinLevel m_CS1 = Low;;
PinLevel m_CS2 = Low;;
PinLevel m_RS;
PinLevel m_RW;
PinLevel m_RS = Low;;
PinLevel m_RW = Low;;
PinLevel m_E;
PinLevel m_IRQ;
PinLevel m_E = Low;;
PinLevel m_IRQ = Low;;
uint8_t m_data;
uint8_t m_data = 0;
bool m_statusRead = false;
// Control registers
CounterDivideSelect m_counterDivide;
WordSelect m_wordSelect;
TransmitterControl m_transmitControl;
ReceiveControl m_receiveControl;
CounterDivideSelect m_counterDivide = One;
WordSelect m_wordSelect = SevenEvenTwo;
TransmitterControl m_transmitControl = ReadyLowInterruptDisabled;
ReceiveControl m_receiveControl = ReceiveInterruptDisable;
// Status registers
bool m_statusRDRF = false;
@ -315,8 +315,8 @@ namespace EightBit {
bool m_statusOVRN = false;
// Data registers
uint8_t m_TDR;
uint8_t m_RDR;
uint8_t m_TDR = 0;
uint8_t m_RDR = 0;
bool m_powered = false;
};

View File

@ -276,7 +276,7 @@ void EightBit::Z80::add(const uint8_t value, const int carry) {
adjustOverflowAdd(F(), A(), value, result.low);
clearFlag(F(), NF);
setFlag(F(), CF, result.word & Bit8);
setFlag(F(), CF, result.high & CF);
adjustSZXY<Z80>(F(), A() = result.low);
}
@ -292,7 +292,7 @@ void EightBit::Z80::subtract(uint8_t& operand, const uint8_t value, const int ca
adjustOverflowSub(F(), operand, value, result.low);
setFlag(F(), NF);
setFlag(F(), CF, result.word & Bit8);
setFlag(F(), CF, result.high & CF);
adjustSZ<Z80>(F(), operand = result.low);
}
@ -516,8 +516,8 @@ void EightBit::Z80::blockLoad(const register16_t source, const register16_t dest
const auto value = BUS().read(source);
BUS().write(destination, value);
const auto xy = A() + value;
setFlag(F(), XF, xy & 8);
setFlag(F(), YF, xy & 2);
setFlag(F(), XF, xy & Bit3);
setFlag(F(), YF, xy & Bit1);
clearFlag(F(), NF | HC);
setFlag(F(), PF, --counter.word);
}
@ -576,7 +576,7 @@ void EightBit::Z80::blockOut(const register16_t source, register16_t& destinatio
MEMPTR() = destination;
setFlag(F(), NF, value & Bit7);
setFlag(F(), HC | CF, (L() + value) > 0xff);
adjustParity<Z80>(F(), ((value + L()) & 7) ^ B());
adjustParity<Z80>(F(), ((value + L()) & Mask3) ^ B());
}
void EightBit::Z80::outi() {

View File

@ -22,11 +22,11 @@ namespace EightBit {
Signal<EventArgs> ReadingByte;
Signal<EventArgs> ReadByte;
auto ADDRESS() const { return m_address; }
auto& ADDRESS() { return m_address; }
auto ADDRESS() const noexcept { return m_address; }
auto& ADDRESS() noexcept { return m_address; }
auto DATA() const { return m_data; }
auto& DATA() { return m_data; }
auto DATA() const noexcept { return m_data; }
auto& DATA() noexcept { return m_data; }
auto peek() { return reference(); }
auto peek(const uint16_t address) { return reference(address); }

View File

@ -48,21 +48,21 @@ namespace EightBit {
Low, High
};
static void clearFlag(uint8_t& f, const int flag) { f &= ~flag; }
static void setFlag(uint8_t& f, const int flag) { f |= flag; }
static void clearFlag(uint8_t& f, const int flag) noexcept { f &= ~flag; }
static void setFlag(uint8_t& f, const int flag) noexcept { f |= flag; }
static void setFlag(uint8_t& f, const int flag, const int condition) { setFlag(f, flag, !!condition); }
static void setFlag(uint8_t& f, const int flag, const uint32_t condition) { setFlag(f, flag, !!condition); }
static void setFlag(uint8_t& f, const int flag, const bool condition) { condition ? setFlag(f, flag) : clearFlag(f, flag); }
static void setFlag(uint8_t& f, const int flag, const int condition) noexcept { setFlag(f, flag, !!condition); }
static void setFlag(uint8_t& f, const int flag, const uint32_t condition) noexcept { setFlag(f, flag, !!condition); }
static void setFlag(uint8_t& f, const int flag, const bool condition) noexcept { condition ? setFlag(f, flag) : clearFlag(f, flag); }
static void clearFlag(uint8_t& f, const int flag, const int condition) { clearFlag(f, flag, !!condition); }
static void clearFlag(uint8_t& f, const int flag, const uint32_t condition) { clearFlag(f, flag, !!condition); }
static void clearFlag(uint8_t& f, const int flag, const bool condition) { setFlag(f, flag, !condition); }
static void clearFlag(uint8_t& f, const int flag, const int condition) noexcept { clearFlag(f, flag, !!condition); }
static void clearFlag(uint8_t& f, const int flag, const uint32_t condition) noexcept { clearFlag(f, flag, !!condition); }
static void clearFlag(uint8_t& f, const int flag, const bool condition) noexcept { setFlag(f, flag, !condition); }
static constexpr auto raised(const PinLevel line) { return line == High; }
static void raise(PinLevel& line) { line = High; }
static void raise(PinLevel& line) noexcept { line = High; }
static constexpr auto lowered(const PinLevel line) { return line == Low; }
static void lower(PinLevel& line) { line = Low; }
static void lower(PinLevel& line) noexcept { line = Low; }
static void match(PinLevel& line, int value);
@ -77,11 +77,11 @@ namespace EightBit {
virtual ~Chip() {};
auto& POWER() { return m_powerLine; }
auto& POWER() noexcept { return m_powerLine; }
auto powered() { return raised(POWER()); }
auto powered() noexcept { return raised(POWER()); }
virtual void powerOn();
void powerOff() { lower(POWER()); }
void powerOff() noexcept { lower(POWER()); }
protected:
Chip() = default;

View File

@ -9,13 +9,13 @@
#endif
namespace EightBit {
int countBits(uint8_t value);
bool oddParity(uint8_t value);
int findFirstSet(int value);
int countBits(uint8_t value) noexcept ;
bool oddParity(uint8_t value) noexcept ;
int findFirstSet(int value) noexcept ;
constexpr void assume(int expression);
}
inline int EightBit::countBits(const uint8_t value) {
inline int EightBit::countBits(const uint8_t value) noexcept {
#ifdef _MSC_VER
return __popcnt(value);
#else
@ -35,11 +35,11 @@ inline int EightBit::countBits(const uint8_t value) {
#endif
}
inline bool EightBit::oddParity(const uint8_t value) {
inline bool EightBit::oddParity(const uint8_t value) noexcept {
return countBits(value) % 2;
}
inline int EightBit::findFirstSet(const int value) {
inline int EightBit::findFirstSet(const int value) noexcept {
#ifdef _MSC_VER
unsigned long index;
if (_BitScanForward(&index, value))

View File

@ -6,6 +6,6 @@ namespace EightBit {
static EventArgs m_empty;
public:
static auto& empty() { return m_empty; }
static auto& empty() noexcept { return m_empty; }
};
}

View File

@ -33,13 +33,13 @@ namespace EightBit {
~IntelProcessor() = default;
const auto& getDecodedOpcode(const size_t i) const {
const auto& getDecodedOpcode(const size_t i) const noexcept {
return m_decodedOpcodes[i];
}
auto& MEMPTR() { return m_memptr; }
auto& MEMPTR() noexcept { return m_memptr; }
auto& SP() { return m_sp; }
auto& SP() noexcept { return m_sp; }
virtual register16_t& AF() = 0;
auto& A() { return AF().high; }
@ -105,13 +105,13 @@ namespace EightBit {
return ((before & 0x88) >> 1) | ((value & 0x88) >> 2) | ((calculation & 0x88) >> 3);
}
static auto calculateHalfCarryAdd(const uint8_t before, const uint8_t value, const int calculation) {
static auto calculateHalfCarryAdd(const uint8_t before, const uint8_t value, const int calculation) noexcept {
static std::array<bool, 8> m_halfCarryTableAdd = { { false, false, true, false, true, false, true, true } };
const auto index = buildHalfCarryIndex(before, value, calculation);
return m_halfCarryTableAdd[index & Mask3];
}
static auto calculateHalfCarrySub(const uint8_t before, const uint8_t value, const int calculation) {
static auto calculateHalfCarrySub(const uint8_t before, const uint8_t value, const int calculation) noexcept {
std::array<bool, 8> m_halfCarryTableSub = { { false, true, true, true, false, false, false, true } };
const auto index = buildHalfCarryIndex(before, value, calculation);
return m_halfCarryTableSub[index & Mask3];

View File

@ -17,21 +17,21 @@ namespace EightBit {
~Processor() {};
auto& PC() { return m_pc; }
auto& PC() noexcept { return m_pc; }
auto& RESET() { return m_resetLine; }
auto& HALT() { return m_haltLine; }
auto& INT() { return m_intLine; }
auto& IRQ() { return INT(); } // Synonym
auto& RESET() noexcept { return m_resetLine; }
auto& HALT() noexcept { return m_haltLine; }
auto& INT() noexcept { return m_intLine; }
auto& IRQ() noexcept { return INT(); } // Synonym
void powerOn() override;
void reset() { lower(RESET()); }
void reset() noexcept { lower(RESET()); }
int run(int limit);
virtual int step() = 0;
virtual int execute(uint8_t opcode) = 0;
auto cycles() const { return m_cycles; }
auto cycles() const noexcept { return m_cycles; }
virtual register16_t peekWord(register16_t address) = 0;
virtual void pokeWord(register16_t address, register16_t value) = 0;
@ -39,11 +39,11 @@ namespace EightBit {
protected:
Processor(Bus& memory);
auto& BUS() { return m_bus; }
auto& BUS() noexcept { return m_bus; }
auto halted() { return lowered(HALT()); }
auto halt() { --PC(); lower(HALT()); }
auto proceed() { ++PC(); raise(HALT()); }
auto halted() noexcept { return lowered(HALT()); }
auto halt() noexcept { --PC(); lower(HALT()); }
auto proceed() noexcept { ++PC(); raise(HALT()); }
virtual void handleRESET();
virtual void handleINT();
@ -85,7 +85,7 @@ namespace EightBit {
return setWord(value);
}
void jump(const register16_t destination) {
void jump(const register16_t destination) noexcept {
PC() = destination;
}
@ -96,9 +96,9 @@ namespace EightBit {
virtual void ret();
void resetCycles() { m_cycles = 0; }
void addCycles(const int extra) { m_cycles += extra; }
void addCycle() { ++m_cycles; }
void resetCycles() noexcept { m_cycles = 0; }
void addCycles(const int extra) noexcept { m_cycles += extra; }
void addCycle() noexcept { ++m_cycles; }
private:
Bus& m_bus;

View File

@ -16,8 +16,8 @@ namespace EightBit {
std::vector<uint8_t> m_bytes;
protected:
const auto& BYTES() const { return m_bytes; }
auto& BYTES() { return m_bytes; }
const auto& BYTES() const noexcept { return m_bytes; }
auto& BYTES() noexcept { return m_bytes; }
void poke(uint16_t address, uint8_t value) override;