]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
CPU tester exception stacked PC validation
authorToni Wilen <twilen@winuae.net>
Fri, 3 Jul 2020 16:57:20 +0000 (19:57 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 3 Jul 2020 16:57:20 +0000 (19:57 +0300)
cputest.cpp
cputest/cputest_defines.h
cputest/main.c

index ee10647690616c5ccfcebe588cf1344a171fe873..fd5be1dd51fa0291d91f49b2e5d1991ab8275c0c 100644 (file)
@@ -962,6 +962,10 @@ void REGPARAM2 MakeFromSR(void)
        MakeFromSR_x(0);
 }
 
+void REGPARAM2 MakeFromSR_intmask(uae_u16 oldsr, uae_u16 newsr)
+{
+}
+
 void cpu_halt(int halt)
 {
        cpu_halted = halt;
@@ -3919,10 +3923,15 @@ static uae_u8 *save_exception(uae_u8 *p, struct instr *dp)
                                p = store_rel(p, 0, opcode_memory_start, gl(sf + 2), 1);
                                // program counter
                                p = store_rel(p, 0, opcode_memory_start, gl(sf + 10), 1);
+                       } else {
+                               // program counter
+                               p = store_rel(p, 0, opcode_memory_start, gl(sf + 2), 1);
                        }
                } else if (cpu_lvl > 0) {
                        uae_u8 ccrmask = 0;
                        uae_u16 frame = (sf[6] << 8) | sf[7];
+                       // program counter
+                       p = store_rel(p, 0, opcode_memory_start, gl(sf + 2), 1);
                        // frame + vector offset
                        *p++ = sf[6];
                        *p++ = sf[7];
index e8c649b38e48e7d0970f84c5576d764b287c3a76..9be180a2b98655a780092e6531399e25f634c13a 100644 (file)
@@ -1,5 +1,5 @@
 
-#define DATA_VERSION 20
+#define DATA_VERSION 21
 
 #define CT_FPREG 0
 #define CT_DREG 0
index 26c80632a76d71ea0a66f593fe5f9e3c553bf447..697a3ddabf1ce744a042d4490ebae7c1ec9b94d7 100644 (file)
@@ -1711,12 +1711,24 @@ static uae_u8 *validate_exception(struct registers *regs, uae_u8 *p, short excnu
                                                alts += 2;
                                        }
                                }
+                       } else {
+                               // sr
+                               exc[0] = regs->sr >> 8;
+                               exc[1] = regs->sr;
+                               // program counter
+                               v = opcode_memory_addr;
+                               p = restore_rel_ordered(p, &v);
+                               pl(exc + 2, v);
+                               exclen = 6;
                        }
                } else if (cpu_lvl > 0) {
                        // sr
                        exc[0] = regs->sr >> 8;
                        exc[1] = regs->sr;
-                       pl(exc + 2, regs->pc);
+                       // program counter
+                       v = opcode_memory_addr;
+                       p = restore_rel_ordered(p, &v);
+                       pl(exc + 2, v);
                        const uae_u16 t0 = *p++;
                        const uae_u16 t1 = *p++;
                        // frame type