From efeafb501a2a8b83ce8e8dd61e2d314f05efe799 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 31 Jan 2020 22:48:30 +0200 Subject: [PATCH] Fix prefetch mode address error timing if address error check is before any memory accesses. Fix prefetch mode JMP and JSR address error timing. --- gencpu.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/gencpu.cpp b/gencpu.cpp index 110bca08..f83bcf2d 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -440,7 +440,7 @@ static void write_return_cycles_none(const char *s) } } -static void write_return_cycles(const char *s, int end) +static void write_return_cycles2(const char *s, int end, int no4) { if (end <= 0) { clearmmufixup(0, 1); @@ -455,7 +455,7 @@ static void write_return_cycles(const char *s, int end) } } else { int cc = count_cycles; - if (count_read + count_write + cc == 0) + if (count_read + count_write + cc == 0 && !no4) cc = 4; returncycles(s, (count_read + count_write) * 4 + cc); if (end) { @@ -494,6 +494,16 @@ static void write_return_cycles(const char *s, int end) } } +static void write_return_cycles(const char *s, int end) +{ + write_return_cycles2(s, end, 0); +} +static void write_return_cycles_noadd(const char *s, int end) +{ + write_return_cycles2(s, end, 1); +} + + static void addcycles_ce020 (const char *name, int head, int tail, int cycles) { if (!isce020()) @@ -3202,7 +3212,7 @@ static void genamode2x (amodes mode, const char *reg, wordsizes size, const char (getv == 1 && (g_instr->smode == PC16 || g_instr->smode == PC8r) ? 2 : 1) | fcmodeflags); } - write_return_cycles("\t\t", 0); + write_return_cycles_noadd("\t\t", 0); printf("\t}\n"); } @@ -6525,7 +6535,7 @@ static void gen_opcode (unsigned int opcode) addcycles000_nonce("\t\t", 6); } printf("\t\texception3i(opcode, srca);\n"); - write_return_cycles("\t\t", 0); + write_return_cycles_noadd("\t\t", 0); printf("\t}\n"); pop_ins_cnt(); } @@ -6622,7 +6632,7 @@ static void gen_opcode (unsigned int opcode) addcycles000_nonce("\t\t", 6); } printf("\t\texception3i(opcode, srca);\n"); - write_return_cycles("\t\t", 0); + write_return_cycles_noadd("\t\t", 0); printf("\t}\n"); pop_ins_cnt(); } -- 2.47.3