|
|
|
/*
|
|
|
|
* Copyright (C) 2022 Riyyi
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "cpu.h"
|
|
|
|
#include "macro.h"
|
|
|
|
#include "testcase.h"
|
|
|
|
#include "testsuite.h"
|
|
|
|
|
|
|
|
struct CPUTest {
|
|
|
|
CPU cpu { 0 };
|
|
|
|
|
|
|
|
bool isCarry(uint32_t limit_bit, uint32_t first, uint32_t second, uint32_t third = 0x0)
|
|
|
|
{
|
|
|
|
return cpu.isCarry(limit_bit, first, second, third);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isCarrySubtraction(uint32_t limit_bit, uint32_t lhs, uint32_t rhs, uint32_t rhs_extra = 0x0)
|
|
|
|
{
|
|
|
|
return cpu.isCarrySubtraction(limit_bit, lhs, rhs, rhs_extra);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// -----------------------------------------
|
|
|
|
|
|
|
|
TEST_CASE(CPUIsCarry)
|
|
|
|
{
|
|
|
|
CPUTest test;
|
|
|
|
|
|
|
|
// 8-bit Half-carry false
|
|
|
|
|
|
|
|
EXPECT(test.isCarry(0xf, 56, 17) == false);
|
|
|
|
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 136, 1) == false);
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 219, 20) == false);
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 250, 20) == false);
|
|
|
|
|
|
|
|
// 8-bit Half-carry true
|
|
|
|
|
|
|
|
EXPECT(test.isCarry(0xf, 46, 34) == true);
|
|
|
|
EXPECT(test.isCarry(0xf, 62, 34) == true);
|
|
|
|
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 16, 1) == true);
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 32, 1) == true);
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 144, 1) == true);
|
|
|
|
EXPECT(test.isCarrySubtraction(0xf, 211, 20) == true);
|
|
|
|
|
|
|
|
// 8-bit Full carry false
|
|
|
|
|
|
|
|
EXPECT(test.isCarry(0xff, 254, 1) == false);
|
|
|
|
|
|
|
|
// 8-bit Full carry true
|
|
|
|
|
|
|
|
EXPECT(test.isCarry(0xff, 254, 2) == true);
|
|
|
|
}
|