This commit is contained in:
Adrian Conlon
2019-11-12 22:40:33 +00:00
5 changed files with 26 additions and 27 deletions
Binary file not shown.
+4 -4
View File
@@ -71,19 +71,19 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;C:\Libraries\boost_1_65_1;$(IncludePath)</IncludePath>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;C:\Libraries\boost_1_65_1;$(IncludePath)</IncludePath>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;C:\Libraries\boost_1_65_1;$(IncludePath)</IncludePath>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;C:\Libraries\boost_1_65_1;$(IncludePath)</IncludePath>
<IncludePath>..\inc;..\..\inc;..\..\MC6850\inc;$(SolutionDir)modules\catch2\single_include\catch2;$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
+11 -11
View File
@@ -80,7 +80,7 @@ namespace EightBit {
}
void exxAF() {
m_accumulatorFlagsSet = !m_accumulatorFlagsSet;
m_accumulatorFlagsSet ^= 1;
}
DECLARE_PIN_INPUT(NMI)
@@ -282,26 +282,26 @@ namespace EightBit {
return setBit(f, HC, calculateHalfCarryAdd(before, value, calculation));
}
static void adjustHalfCarrySub(uint8_t& f, const uint8_t before, const uint8_t value, const int calculation) {
f = setBit(f, HC, calculateHalfCarrySub(before, value, calculation));
[[nodiscard]] static uint8_t adjustHalfCarrySub(uint8_t f, const uint8_t before, const uint8_t value, const int calculation) {
return setBit(f, HC, calculateHalfCarrySub(before, value, calculation));
}
static void adjustOverflowAdd(uint8_t& f, const uint8_t before, const uint8_t value, const uint8_t calculation) {
adjustOverflowAdd(f, before & SF, value & SF, calculation & SF);
[[nodiscard]] static uint8_t adjustOverflowAdd(uint8_t f, const uint8_t before, const uint8_t value, const uint8_t calculation) {
return adjustOverflowAdd(f, before & SF, value & SF, calculation & SF);
}
static void adjustOverflowAdd(uint8_t& f, const int beforeNegative, const int valueNegative, const int afterNegative) {
[[nodiscard]] static uint8_t adjustOverflowAdd(uint8_t f, const int beforeNegative, const int valueNegative, const int afterNegative) {
const auto overflow = (beforeNegative == valueNegative) && (beforeNegative != afterNegative);
f = setBit(f, VF, overflow);
return setBit(f, VF, overflow);
}
static void adjustOverflowSub(uint8_t& f, const uint8_t before, const uint8_t value, const uint8_t calculation) {
adjustOverflowSub(f, before & SF, value & SF, calculation & SF);
[[nodiscard]] static uint8_t adjustOverflowSub(uint8_t f, const uint8_t before, const uint8_t value, const uint8_t calculation) {
return adjustOverflowSub(f, before & SF, value & SF, calculation & SF);
}
static void adjustOverflowSub(uint8_t& f, const int beforeNegative, const int valueNegative, const int afterNegative) {
[[nodiscard]] static uint8_t adjustOverflowSub(uint8_t f, const int beforeNegative, const int valueNegative, const int afterNegative) {
const auto overflow = (beforeNegative != valueNegative) && (beforeNegative != afterNegative);
f = setBit(f, VF, overflow);
return setBit(f, VF, overflow);
}
static uint8_t subtract(uint8_t& f, uint8_t operand, uint8_t value, int carry = 0);
+10 -11
View File
@@ -253,13 +253,12 @@ bool EightBit::Z80::callConditionalFlag(const uint8_t f, const int flag) {
EightBit::register16_t EightBit::Z80::sbc(uint8_t& f, const register16_t operand, const register16_t value) {
const auto subtraction = operand.word - value.word - (f & CF);
const register16_t result = subtraction;
f = setBit(f, NF);
f = clearBit(f, ZF, result.word);
f = setBit(f, CF, subtraction & Bit16);
adjustHalfCarrySub(f, operand.high, value.high, result.high);
f = adjustHalfCarrySub(f, operand.high, value.high, result.high);
f = adjustXY<Z80>(f, result.high);
const auto beforeNegative = operand.high & SF;
@@ -267,7 +266,7 @@ EightBit::register16_t EightBit::Z80::sbc(uint8_t& f, const register16_t operand
const auto afterNegative = result.high & SF;
f = setBit(f, SF, afterNegative);
adjustOverflowSub(f, beforeNegative, valueNegative, afterNegative);
f = adjustOverflowSub(f, beforeNegative, valueNegative, afterNegative);
MEMPTR() = operand + 1;
@@ -284,7 +283,7 @@ EightBit::register16_t EightBit::Z80::adc(uint8_t& f, const register16_t operand
const auto afterNegative = result.high & SF;
f = setBit(f, SF, afterNegative);
adjustOverflowAdd(f, beforeNegative, valueNegative, afterNegative);
f = adjustOverflowAdd(f, beforeNegative, valueNegative, afterNegative);
return result;
}
@@ -310,7 +309,7 @@ uint8_t EightBit::Z80::add(uint8_t& f, const uint8_t operand, const uint8_t valu
const auto result = addition.low;
f = adjustHalfCarryAdd(f, operand, value, result);
adjustOverflowAdd(f, operand, value, result);
f = adjustOverflowAdd(f, operand, value, result);
f = clearBit(f, NF);
f = setBit(f, CF, addition.high & CF);
@@ -328,8 +327,8 @@ uint8_t EightBit::Z80::subtract(uint8_t& f, const uint8_t operand, const uint8_t
const register16_t subtraction = operand - value - carry;
const auto result = subtraction.low;
adjustHalfCarrySub(f, operand, value, result);
adjustOverflowSub(f, operand, value, result);
f = adjustHalfCarrySub(f, operand, value, result);
f = adjustOverflowSub(f, operand, value, result);
f = setBit(f, NF);
f = setBit(f, CF, subtraction.high & CF);
@@ -465,7 +464,7 @@ uint8_t EightBit::Z80::res(const int n, const uint8_t operand) {
uint8_t EightBit::Z80::set(const int n, const uint8_t operand) {
ASSUME(n >= 0);
ASSUME(n <= 7);
return operand | Chip::bit(n);
return setBit(operand, Chip::bit(n));
}
uint8_t EightBit::Z80::neg(uint8_t& f, uint8_t operand) {
@@ -476,8 +475,8 @@ uint8_t EightBit::Z80::neg(uint8_t& f, uint8_t operand) {
const uint8_t result = (~operand + 1); // two's complement
adjustHalfCarrySub(f, 0U, operand, result);
adjustOverflowSub(f, 0U, operand, result);
f = adjustHalfCarrySub(f, 0U, operand, result);
f = adjustOverflowSub(f, 0U, operand, result);
f = adjustSZXY<Z80>(f, result);
@@ -549,7 +548,7 @@ void EightBit::Z80::blockCompare(uint8_t& f, const uint8_t value, const register
f = setBit(f, PF, --counter.word);
f = adjustSZ<Z80>(f, result);
adjustHalfCarrySub(f, value, contents, result);
f = adjustHalfCarrySub(f, value, contents, result);
f = setBit(f, NF);
result -= ((f & HC) >> 4);