From c58c5088b7963c4c18a27c0bb0df9aa50ddc3bcb Mon Sep 17 00:00:00 2001 From: Melefo <42809472+Melefo@users.noreply.github.com> Date: Thu, 9 Apr 2020 19:26:08 +0200 Subject: [PATCH] Fixing APU tests --- sources/APU/APU.cpp | 2 +- sources/APU/APU.hpp | 4 +- sources/APU/Instructions/ProgramFlow.cpp | 4 +- tests/APU/testAPUInstructions.cpp | 139 ++++++++++++----------- 4 files changed, 75 insertions(+), 74 deletions(-) diff --git a/sources/APU/APU.cpp b/sources/APU/APU.cpp index a41d04c..dacb563 100644 --- a/sources/APU/APU.cpp +++ b/sources/APU/APU.cpp @@ -472,7 +472,7 @@ namespace ComSquare::APU case 0x8E: return this->POP(this->_internalRegisters.psw); case 0x8F: - return this->MOV(this->_getImmediateData(), this->_getDirectAddr()); + return this->MOV(this->_getDirectAddr(), this->_getImmediateData()); case 0x90: return this->BCC(this->_getImmediateData()); case 0x91: diff --git a/sources/APU/APU.hpp b/sources/APU/APU.hpp index b692c6e..4ff1acf 100644 --- a/sources/APU/APU.hpp +++ b/sources/APU/APU.hpp @@ -282,9 +282,9 @@ namespace ComSquare::APU //! @brief Branch if Negative Flag is clear. int BPL(int8_t offset); //! @brief Branch if the specified is set in the address, go to the specified location from the next instruction. - int BBS(uint24_t addr, uint8_t bit, int8_t offset); + int BBS(uint24_t addr, int8_t offset, uint8_t bit); //! @brief Branch if the specified is clear in the address, go to the specified location from the next instruction. - int BBC(uint24_t addr, uint8_t bit, int8_t offset); + int BBC(uint24_t addr, int8_t offset, uint8_t bit); //! @brief Branch if the value at the specified address is not equal to the Accumulator Flag. int CBNE(uint24_t addr, int8_t offset, bool by_x = false); //! @brief Decrement a value then branch to the specified location if the value is not zero. diff --git a/sources/APU/Instructions/ProgramFlow.cpp b/sources/APU/Instructions/ProgramFlow.cpp index f22bde2..343b30d 100644 --- a/sources/APU/Instructions/ProgramFlow.cpp +++ b/sources/APU/Instructions/ProgramFlow.cpp @@ -76,7 +76,7 @@ namespace ComSquare::APU return 4; } - int APU::BBS(uint24_t addr, uint8_t bit, int8_t offset) + int APU::BBS(uint24_t addr, int8_t offset, uint8_t bit) { uint8_t data = this->_internalRead(addr); @@ -86,7 +86,7 @@ namespace ComSquare::APU return 7; } - int APU::BBC(uint24_t addr, uint8_t bit, int8_t offset) + int APU::BBC(uint24_t addr, int8_t offset, uint8_t bit) { uint8_t data = this->_internalRead(addr); diff --git a/tests/APU/testAPUInstructions.cpp b/tests/APU/testAPUInstructions.cpp index 4b853eb..4ee153b 100644 --- a/tests/APU/testAPUInstructions.cpp +++ b/tests/APU/testAPUInstructions.cpp @@ -506,11 +506,11 @@ Test(ProgramFlow, BRA) auto apu = snes.apu; int result = 0; + apu->_internalRegisters.pc = 0; apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); - result = apu->BRA(); + result = apu->BRA(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 24); } Test(ProgramFlow, BEQ) @@ -519,14 +519,14 @@ Test(ProgramFlow, BEQ) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); - result = apu->BEQ(); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); + result = apu->BEQ(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.z = true; - result = apu->BEQ(); + result = apu->BEQ(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BNE) @@ -535,15 +535,15 @@ Test(ProgramFlow, BNE) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); apu->_internalRegisters.z = true; - result = apu->BNE(); + result = apu->BNE(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.z = false; - result = apu->BNE(); + result = apu->BNE(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BCS) @@ -552,14 +552,14 @@ Test(ProgramFlow, BCS) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); - result = apu->BCS(); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); + result = apu->BCS(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.c = true; - result = apu->BCS(); + result = apu->BCS(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BCC) @@ -568,15 +568,15 @@ Test(ProgramFlow, BCC) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); apu->_internalRegisters.c = true; - result = apu->BCC(); + result = apu->BCC(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.c = false; - result = apu->BCC(); + result = apu->BCC(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BVS) @@ -585,14 +585,14 @@ Test(ProgramFlow, BVS) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); - result = apu->BVS(); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); + result = apu->BVS(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.v = true; - result = apu->BVS(); + result = apu->BVS(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BVC) @@ -601,15 +601,15 @@ Test(ProgramFlow, BVC) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); apu->_internalRegisters.v = true; - result = apu->BVC(); + result = apu->BVC(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.v = false; - result = apu->BVC(); + result = apu->BVC(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BMI) @@ -618,14 +618,14 @@ Test(ProgramFlow, BMI) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); - result = apu->BMI(); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); + result = apu->BMI(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.n = true; - result = apu->BMI(); + result = apu->BMI(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BPL) @@ -634,15 +634,15 @@ Test(ProgramFlow, BPL) auto apu = snes.apu; int result = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); - apu->_internalWrite(apu->_internalRegisters.pc + 24, 101); + apu->_internalRegisters.pc = 0; + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); apu->_internalRegisters.n = true; - result = apu->BPL(); + result = apu->BPL(apu->_getImmediateData()); cr_assert_eq(result, 2); apu->_internalRegisters.n = false; - result = apu->BPL(); + result = apu->BPL(apu->_getImmediateData()); cr_assert_eq(result, 4); - cr_assert_eq(apu->_internalRead(apu->_internalRegisters.pc), 101); + cr_assert_eq(apu->_internalRegisters.pc, 25); } Test(ProgramFlow, BBS) @@ -652,14 +652,14 @@ Test(ProgramFlow, BBS) int result = 0; apu->_internalRegisters.pc = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 23); + apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); apu->_internalWrite(23, 0); - result = apu->BBS(apu->_getDirectAddr(), 2); + result = apu->BBS(apu->_getDirectAddr(), apu->_getImmediateData(), 2); cr_assert_eq(result, 5); apu->_internalRegisters.pc = 0; - apu->_internalWrite(apu->_internalRegisters.pc + 1, 10); - apu->_internalWrite(23, 255); - result = apu->BBS(apu->_getDirectAddr(), 2); + apu->_internalWrite(apu->_internalRegisters.pc, 10); + apu->_internalWrite(23, 100); + result = apu->BBS(apu->_getDirectAddr(), apu->_getImmediateData(), 2); cr_assert_eq(result, 7); cr_assert_eq(apu->_internalRegisters.pc, 12); } @@ -671,16 +671,16 @@ Test(ProgramFlow, BBC) int result = 0; apu->_internalRegisters.pc = 0; - apu->_internalWrite(apu->_internalRegisters.pc, 10); - apu->_internalWrite( 10, 255); - apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); - result = apu->BBC(apu->_getDirectAddr(), 2); + apu->_internalWrite(apu->_internalRegisters.pc + 1, 10); + apu->_internalWrite(10, 255); + result = apu->BBC(apu->_getDirectAddr(), apu->_getImmediateData(), 2); cr_assert_eq(result, 5); apu->_internalRegisters.pc = 0; - apu->_internalWrite( 10, 0); - result = apu->BBC(apu->_getDirectAddr(), 2); + apu->_internalWrite(apu->_internalRegisters.pc, 10); + apu->_internalWrite(apu->_internalRegisters.pc + 1, 0); + result = apu->BBC(apu->_getDirectAddr(), apu->_getImmediateData(), 2); cr_assert_eq(result, 7); - cr_assert_eq(apu->_internalRegisters.pc, 25); + cr_assert_eq(apu->_internalRegisters.pc, 12); } Test(ProgramFlow, CBNE) @@ -691,16 +691,16 @@ Test(ProgramFlow, CBNE) apu->_internalRegisters.pc = 0; apu->_internalRegisters.a = 4; - apu->_internalWrite(apu->_internalRegisters.pc, 10); - apu->_internalWrite( 10, 4); - apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); - result = apu->CBNE(apu->_getDirectAddr()); + apu->_internalWrite(apu->_internalRegisters.pc + 1, 10); + apu->_internalWrite(10, 4); + result = apu->CBNE(apu->_getDirectAddr(), apu->_getImmediateData()); cr_assert_eq(result, 5); apu->_internalRegisters.pc = 0; - apu->_internalWrite( 10, 0); - result = apu->CBNE(apu->_getDirectAddrByX(), true); + apu->_internalRegisters.a = 0; + apu->_internalWrite(apu->_internalRegisters.pc, 10); + result = apu->CBNE(apu->_getDirectAddrByX(), apu->_getImmediateData(), true); cr_assert_eq(result, 8); - cr_assert_eq(apu->_internalRegisters.pc, 25); + cr_assert_eq(apu->_internalRegisters.pc, 12); } Test(ProgramFlow, DBNZ) @@ -711,14 +711,15 @@ Test(ProgramFlow, DBNZ) apu->_internalRegisters.pc = 0; apu->_internalRegisters.y = 1; - result = apu->DBNZ(); + result = apu->DBNZ(apu->_getImmediateData()); cr_assert_eq(result, 4); apu->_internalWrite(apu->_internalRegisters.pc, 10); - apu->_internalWrite(apu->_internalRegisters.pc + 1, 23); - apu->_internalWrite( 10, 0); - result = apu->DBNZ(true); + apu->_internalWrite(apu->_internalRegisters.pc + 1, 5); + apu->_internalWrite(5, 55); + result = apu->DBNZ(apu->_getImmediateData(), true); cr_assert_eq(result, 7); - cr_assert_eq(apu->_internalRegisters.pc, 25); + cr_assert_eq( apu->_internalRead(5), 54); + cr_assert_eq(apu->_internalRegisters.pc, 13); } Test(ProgramFlow, JMP) @@ -1308,9 +1309,9 @@ Test(VIIIDataTransmission, MovMemToMem) apu->_internalWrite(0x24, 0x33); apu->_internalWrite(0x56, 99); apu->_internalWrite(0x33, 66); - result = apu->MOV(apu->_getDirectAddr(), apu->_getDirectAddr()); + result = apu->MOV(apu->_getDirectAddr(), apu->_getImmediateData()); cr_assert_eq(result, 5); - cr_assert_eq(apu->_internalRead(0x56), 66); + cr_assert_eq(apu->_internalRead(0x33), 0x56); } Test(VIIIDataTransmission, MovRegToMem)