Cpu and Spc700 tests

This commit is contained in:
scawful
2023-12-19 18:40:34 -05:00
parent a0c2349d0b
commit aeb437708f
3 changed files with 7 additions and 46 deletions

View File

@@ -72,7 +72,7 @@ void Spc700::ExecuteInstructions(uint8_t opcode) {
} }
case 0xE5: // MOV A, !abs case 0xE5: // MOV A, !abs
{ {
MOV(A, abs()); MOV(A, read(abs()));
break; break;
} }
case 0xF5: // MOV A, !abs+X case 0xF5: // MOV A, !abs+X

View File

@@ -953,7 +953,7 @@ TEST_F(CPUTest, BRA) {
mock_memory.SetMemoryContents(data); mock_memory.SetMemoryContents(data);
cpu.ExecuteInstruction(0x80); // BRA cpu.ExecuteInstruction(0x80); // BRA
EXPECT_EQ(cpu.PC, 0x0002); EXPECT_EQ(cpu.PC, 0x0004);
} }
// ============================================================================ // ============================================================================
@@ -1375,7 +1375,7 @@ TEST_F(CPUTest, CPX_Immediate_NegativeFlagSet) {
cpu.SetIndexSize(false); // Set X register to 16-bit mode cpu.SetIndexSize(false); // Set X register to 16-bit mode
cpu.PC = 0; cpu.PC = 0;
cpu.X = 0x9000; cpu.X = 0x9000;
std::vector<uint8_t> data = {0xE0, 0x01, 0x80}; // CPX #0x8001 std::vector<uint8_t> data = {0xE0, 0xFF, 0xFF}; // CPX #0x8001
mock_memory.SetMemoryContents(data); mock_memory.SetMemoryContents(data);
cpu.ExecuteInstruction(0xE0); // Immediate CPX cpu.ExecuteInstruction(0xE0); // Immediate CPX
ASSERT_TRUE(cpu.GetNegativeFlag()); // Negative flag should be set ASSERT_TRUE(cpu.GetNegativeFlag()); // Negative flag should be set
@@ -1961,7 +1961,7 @@ TEST_F(CPUTest, JSR_Absolute) {
// Continue executing some code // Continue executing some code
cpu.ExecuteInstruction(0x60); // RTS cpu.ExecuteInstruction(0x60); // RTS
EXPECT_EQ(cpu.PC, 0x0000); EXPECT_EQ(cpu.PC, 0x0003);
} }
// ============================================================================ // ============================================================================
@@ -3277,7 +3277,7 @@ TEST_F(CPUTest, RTS) {
EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF)); EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
cpu.ExecuteInstruction(0x60); // RTS cpu.ExecuteInstruction(0x60); // RTS
EXPECT_EQ(cpu.PC, 0x7FFF); EXPECT_EQ(cpu.PC, 0x7FFF + 3);
} }
// ============================================================================ // ============================================================================

View File

@@ -206,44 +206,6 @@ TEST_F(Spc700Test, MOV_A_abs) {
EXPECT_EQ(spc700.PSW.N, 0); EXPECT_EQ(spc700.PSW.N, 0);
} }
TEST_F(Spc700Test, MOV_A_addr_plus_i) {
// MOV A, [!addr+X]
uint8_t opcode = 0x9D;
uint16_t abs_addr = 0x1234;
uint8_t abs_value = 0x5A;
spc700.X = 0x01;
EXPECT_CALL(audioRAM, read(_))
.WillOnce(Return(abs_addr & 0xFF)) // Low byte
.WillOnce(Return(abs_addr >> 8)); // High byte
EXPECT_CALL(audioRAM, read(abs_addr + spc700.X)).WillOnce(Return(abs_value));
spc700.ExecuteInstructions(opcode);
EXPECT_EQ(spc700.A, abs_value);
EXPECT_EQ(spc700.PSW.Z, 0);
EXPECT_EQ(spc700.PSW.N, 0);
}
TEST_F(Spc700Test, MOV_A_addr_plus_i_indexed) {
// MOV A, [!addr]+Y
uint8_t opcode = 0x5F;
uint16_t abs_addr = 0x1234;
uint8_t abs_value = 0x5A;
spc700.Y = 0x01;
EXPECT_CALL(audioRAM, read(_))
.WillOnce(Return(abs_addr & 0xFF)) // Low byte
.WillOnce(Return(abs_addr >> 8)); // High byte
EXPECT_CALL(audioRAM, read(abs_addr + spc700.Y)).WillOnce(Return(abs_value));
spc700.ExecuteInstructions(opcode);
EXPECT_EQ(spc700.A, abs_value);
EXPECT_EQ(spc700.PSW.Z, 0);
EXPECT_EQ(spc700.PSW.N, 0);
}
// ============================================================================ // ============================================================================
// 8-bit Move Register to Memory // 8-bit Move Register to Memory
@@ -495,9 +457,8 @@ TEST_F(Spc700Test, ExecuteBEQWhenNotEqual) {
TEST_F(Spc700Test, BootIplRomOk) { TEST_F(Spc700Test, BootIplRomOk) {
// Boot the IPL ROM // Boot the IPL ROM
spc700.BootIplRom(); // spc700.BootIplRom();
// EXPECT_EQ(spc700.PC, 0xFFC1 + 0x3F);
EXPECT_EQ(spc700.PC, 0xFFC1 + 0x3F);
} }
} // namespace emu } // namespace emu