mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-12 05:54:03 +00:00
Fixing APU tests
This commit is contained in:
+1
-1
@@ -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:
|
||||
|
||||
+2
-2
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user