Browse code

Removed errcode from stacks

Devine Lu Linvega authored on 13/01/2023 04:35:42
Showing 2 changed files
... ...
@@ -42,13 +42,15 @@ int
42 42
 uxn_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr)
43 43
 {
44 44
 	Uint8 *d = &u->dev[0x00];
45
-	if(instr & 0x40)
46
-		u->rst->err = err;
47
-	else
48
-		u->wst->err = err;
49
-	if(GETVEC(d))
50
-		uxn_eval(u, GETVEC(d));
51
-	else {
45
+	Uint16 handler = GETVEC(d);
46
+	if(handler) {
47
+		u->wst->ptr = 4;
48
+		u->wst->dat[0] = addr >> 0x8;
49
+		u->wst->dat[1] = addr & 0xff;
50
+		u->wst->dat[2] = instr;
51
+		u->wst->dat[3] = err;
52
+		return uxn_eval(u, handler);
53
+	} else {
52 54
 		system_inspect(u);
53 55
 		fprintf(stderr, "%s %s, by %02x at 0x%04x.\n", (instr & 0x40) ? "Return-stack" : "Working-stack", errors[err - 1], instr, addr);
54 56
 	}
... ...
@@ -26,7 +26,7 @@ typedef unsigned int Uint32;
26 26
 /* clang-format on */
27 27
 
28 28
 typedef struct {
29
-	Uint8 dat[254], err, ptr;
29
+	Uint8 dat[255], ptr;
30 30
 } Stack;
31 31
 
32 32
 typedef struct Uxn {