Browse code

(uxn.c) Catch div-by-zero errors

Devine Lu Linvega authored on 15/04/2023 16:52:08
Showing 2 changed files
... ...
@@ -4,10 +4,10 @@
4 4
 
5 5
 	;on-halt .System/vector DEO2
6 6
 
7
+	( divzero ) #02 #00 DIV
7 8
 	( underflow ) POP
8 9
 	( overflow ) #00 &l #ffff ROT INC DUP ?&l POP
9
-	( divzero ) #02 #00 DIV
10
-
10
+	
11 11
 	#80 .System/halt DEO
12 12
 
13 13
 BRK
... ...
@@ -111,8 +111,8 @@ uxn_eval(Uxn *u, Uint16 pc)
111 111
 			case 0x39:            t=T2;n=N2;      SET(4,-2) PUT2(0, n - t) break;
112 112
 			case 0x1a: /* MUL  */ t=T;n=N;        SET(2,-1) PUT(0, n * t) break;
113 113
 			case 0x3a:            t=T2;n=N2;      SET(4,-2) PUT2(0, n * t) break;
114
-			case 0x1b: /* DIV  */ t=T;n=N;        SET(2,-1) PUT(0, n / t) break;
115
-			case 0x3b:            t=T2;n=N2;      SET(4,-2) PUT2(0, n / t) break;
114
+			case 0x1b: /* DIV  */ t=T;n=N;        SET(2,-1) if(!t) HALT(3) PUT(0, n / t) break;
115
+			case 0x3b:            t=T2;n=N2;      SET(4,-2) if(!t) HALT(3) PUT2(0, n / t) break;
116 116
 			case 0x1c: /* AND  */ t=T;n=N;        SET(2,-1) PUT(0, n & t) break;
117 117
 			case 0x3c:            t=T2;n=N2;      SET(4,-2) PUT2(0, n & t) break;
118 118
 			case 0x1d: /* ORA  */ t=T;n=N;        SET(2,-1) PUT(0, n | t) break;