From 8a0ca8715e920d728d872584e5034583753f0d8b Mon Sep 17 00:00:00 2001 From: lazymio Date: Sat, 4 Dec 2021 23:20:24 +0100 Subject: [PATCH] Fix SR read/write and a test --- qemu/target/m68k/unicorn.c | 2 +- tests/unit/test_m68k.c | 32 +++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/qemu/target/m68k/unicorn.c b/qemu/target/m68k/unicorn.c index d8e91906..0ff4213a 100644 --- a/qemu/target/m68k/unicorn.c +++ b/qemu/target/m68k/unicorn.c @@ -78,7 +78,7 @@ static void reg_write(CPUM68KState *env, unsigned int regid, const void *value) env->pc = *(uint32_t *)value; break; case UC_M68K_REG_SR: - env->sr = *(uint32_t *)value; + cpu_m68k_set_sr(env, *(uint32_t *)value); break; } } diff --git a/tests/unit/test_m68k.c b/tests/unit/test_m68k.c index 4c2505f4..752e7eb2 100644 --- a/tests/unit/test_m68k.c +++ b/tests/unit/test_m68k.c @@ -3,4 +3,34 @@ const uint64_t code_start = 0x1000; const uint64_t code_len = 0x4000; -TEST_LIST = {{NULL, NULL}}; \ No newline at end of file +static void uc_common_setup(uc_engine **uc, uc_arch arch, uc_mode mode, + const char *code, uint64_t size, + uc_cpu_m68k cpu_model) +{ + OK(uc_open(arch, mode, uc)); + OK(uc_ctl_set_cpu_model(*uc, cpu_model)); + OK(uc_mem_map(*uc, code_start, code_len, UC_PROT_ALL)); + OK(uc_mem_write(*uc, code_start, code, size)); +} + +static void test_move_to_sr() +{ + + uc_engine *uc; + char code[] = "\x46\xfc\x27\x00"; // move #$2700,sr + int r_sr; + + uc_common_setup(&uc, UC_ARCH_M68K, UC_MODE_BIG_ENDIAN, code, + sizeof(code) - 1, UC_CPU_M68K_M68000); + OK(uc_reg_read(uc, UC_M68K_REG_SR, &r_sr)); + + r_sr = r_sr | 0x2000; + + OK(uc_reg_write(uc, UC_M68K_REG_SR, &r_sr)); + + OK(uc_emu_start(uc, code_start, code_start + sizeof(code) - 1, 0, 0)); + + OK(uc_close(uc)); +} + +TEST_LIST = {{"test_move_to_sr", test_move_to_sr}, {NULL, NULL}}; \ No newline at end of file