Browse code

(uxn.c) Fixed issue where JSRr was pushing to wrong stack

Devine Lu Linvega authored on 23/07/2023 16:57:32
Showing 1 changed files
... ...
@@ -85,8 +85,8 @@ uxn_eval(Uxn *u, Uint16 pc)
85 85
 			case 0x2c:            t=T2;           SET(2,-2) pc = t; break;
86 86
 			case 0x0d: /* JCN  */ t=T;n=N;        SET(2,-2) if(n) pc += (Sint8)t; break;
87 87
 			case 0x2d:            t=T2;n=L;       SET(3,-3) if(n) pc = t; break;
88
-			case 0x0e: /* JSR  */ t=T;            SET(1,-1) s = &u->rst; PUSH2(pc) pc += (Sint8)t; break;
89
-			case 0x2e:            t=T2;           SET(2,-2) s = &u->rst; PUSH2(pc) pc = t; break;
88
+			case 0x0e: /* JSR  */ t=T;            SET(1,-1) s = ins & 0x40 ? &u->wst : &u->rst; PUSH2(pc) pc += (Sint8)t; break;
89
+			case 0x2e:            t=T2;           SET(2,-2) s = ins & 0x40 ? &u->wst : &u->rst; PUSH2(pc) pc = t; break;
90 90
 			case 0x0f: /* STH  */ t=T;            SET(1,-1) s = ins & 0x40 ? &u->wst : &u->rst; PUSH(t) break;
91 91
 			case 0x2f:            t=T2;           SET(2,-2) s = ins & 0x40 ? &u->wst : &u->rst; PUSH2(t) break;
92 92
 			case 0x10: /* LDZ  */ t=T;            SET(1, 0) PUT(0, ram[t]) break;