Browse code

The supervisor program now uses its own vectors

neauoire authored on 07/01/2022 03:51:34
Showing 3 changed files
... ...
@@ -36,14 +36,13 @@
36 36
 
37 37
 @center
38 38
 	&x $2 &y $2
39
-
40 39
 @modal
41 40
 	&x $2 &y $2
42 41
 
43 42
 ( init )
44 43
 
45 44
 |0100 ( -> )
46
-
45
+	
47 46
 	.Screen/width DEI2 2// 
48 47
 		DUP2 .center/x STZ2
49 48
 		MODALW #31 SFT2 -- .modal/x STZ2
... ...
@@ -51,11 +50,17 @@
51 50
 		DUP2 .center/y STZ2
52 51
 		MODALH #31 SFT2 -- .modal/y STZ2
53 52
 
53
+	( vectors )
54
+	;on-error .System/vector DEO2
55
+	;on-frame .Screen/vector DEO2
56
+
57
+BRK
58
+
59
+@on-frame ( -> )
60
+
54 61
 	;draw-cross JSR2
55 62
 	;draw-stacks JSR2
56 63
 
57
-	EADDR LDA2 #0000 !! ;on-error JCN2
58
-
59 64
 BRK
60 65
 
61 66
 @on-error ( -> )
... ...
@@ -31,7 +31,7 @@ uxn_halt(Uxn *u, Uint8 error, Uint16 addr)
31 31
 	Uint16 vec = d->vector;
32 32
 	DEVPOKE16(0x4, addr);
33 33
 	d->dat[0x6] = error;
34
-	uxn_eval(&supervisor, PAGE_PROGRAM);
34
+	uxn_eval(&supervisor, supervisor.dev[0].vector);
35 35
 	if(vec) {
36 36
 		d->vector = 0; /* need to rearm to run System/vector again */
37 37
 		if(error != 2) /* working stack overflow has special treatment */
... ...
@@ -309,6 +309,8 @@ start(Uxn *u, char *rom)
309 309
 	uxn_port(&supervisor, 0x1, nil_dei, console_deo);
310 310
 	uxn_port(&supervisor, 0x2, screen_dei, screen_deo);
311 311
 
312
+	uxn_eval(&supervisor, PAGE_PROGRAM);
313
+
312 314
 	if(!uxn_eval(u, PAGE_PROGRAM))
313 315
 		return error("Boot", "Failed to start rom.");
314 316
 
... ...
@@ -485,7 +487,7 @@ run(Uxn *u)
485 487
 				console_input(u, event.cbutton.button);
486 488
 		}
487 489
 		if(devsystem->dat[0xe])
488
-			uxn_eval(&supervisor, PAGE_PROGRAM);
490
+			uxn_eval(&supervisor, supervisor.dev[2].vector);
489 491
 		uxn_eval(u, devscreen->vector);
490 492
 		if(uxn_screen.fg.changed || uxn_screen.bg.changed || devsystem->dat[0xe])
491 493
 			redraw();