diff --git a/src/apps/cpu_integ_test.c b/src/apps/cpu_integ_test.c new file mode 100644 index 0000000..c75d7f2 --- /dev/null +++ b/src/apps/cpu_integ_test.c @@ -0,0 +1,94 @@ +#include "gbasm/assemble.h" +#include "gbasm/emitter.h" +#include "cpu.h" +#include "common.h" + +#include /* memset */ +#include + +static uint8_t mem[4096] = { 0 }; + +static uint8_t mem_read(struct lr35902_state *cpu, uint16_t addr) +{ + return mem[addr]; +} + +static void mem_write(struct lr35902_state *cpu, uint16_t addr, uint8_t val) +{ + mem[addr] = val; +} + +static void test_inc(const void *test_data) +{ + struct emitter emitter; + struct buffer_emitter buffer_emitter; + struct lr35902_state cpu; + char *src; + int rc; + + src = strdup("inc a\n inc b\n halt\n"); + memset(mem, 0, sizeof(mem)); + buffer_emitter_init(&emitter, &buffer_emitter, mem, sizeof(mem)); + + rc = gbasm_assemble(src, &emitter); + g_assert_cmpint(rc, ==, 0); + + lr35902_init(&cpu, mem_read, mem_write); + while (!cpu.halted) { + lr35902_cycle(&cpu); + } + + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_A), ==, 1); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_B), ==, 1); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_C), ==, 0); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_D), ==, 0); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_E), ==, 0); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_H), ==, 0); + + free(src); +} + + +static void test_dec(const void *test_data) +{ + struct emitter emitter; + struct buffer_emitter buffer_emitter; + struct lr35902_state cpu; + char *src; + int rc; + + src = strdup("dec a\n inc c\n dec c\n dec de\n halt\n"); + memset(mem, 0, sizeof(mem)); + buffer_emitter_init(&emitter, &buffer_emitter, mem, sizeof(mem)); + + rc = gbasm_assemble(src, &emitter); + g_assert_cmpint(rc, ==, 0); + + lr35902_init(&cpu, mem_read, mem_write); + while (!cpu.halted) { + lr35902_cycle(&cpu); + } + + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_A), ==, 0xff); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_B), ==, 0); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_C), ==, 0); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_D), ==, 0xff); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_E), ==, 0xff); + g_assert_cmpint(lr35902_get_reg_8(&cpu, LR35902_REG_H), ==, 0); + + g_assert_cmpint(lr35902_get_reg_16(&cpu, LR35902_REG_DE), ==, 0xffff); + + + free(src); +} + + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + g_test_add_data_func("/gbemu/cpu/inc", NULL, test_inc); + g_test_add_data_func("/gbemu/cpu/dec", NULL, test_dec); + + return g_test_run(); +} diff --git a/src/apps/gbasm-test.c b/src/apps/gbasm_test.c similarity index 100% rename from src/apps/gbasm-test.c rename to src/apps/gbasm_test.c diff --git a/src/apps/sample-test.c b/src/apps/sample-test.c deleted file mode 100644 index ed60f0d..0000000 --- a/src/apps/sample-test.c +++ /dev/null @@ -1,20 +0,0 @@ -#include - -void test_fail(const void *data) -{ - g_test_fail(); -} - -void test_pass(const void *data) -{ -} - -int main(int argc, char **argv) -{ - g_test_init(&argc, &argv, NULL); - - g_test_add_data_func("/pass", NULL, test_pass); - g_test_add_data_func("/fail", NULL, test_fail); - - return g_test_run(); -} diff --git a/src/apps/tri-test.c b/src/apps/tri_test.c similarity index 100% rename from src/apps/tri-test.c rename to src/apps/tri_test.c