commit 66de46b

Devine Lu Linvega  ·  2023-01-02 22:15:54 +0000 UTC
parent b762c14
(uxnasm)Added support for JMI, JCI and JSI
4 files changed,  +24, -15
+8, -8
 1@@ -36,7 +36,7 @@
 2 	#ff ;draw-tail/last STA
 3 	( set screen mode auto-x )
 4 	#05 .Screen/auto DEO
 5-	,draw-polycat JSR
 6+	draw-polycat
 7 
 8 BRK
 9 
10@@ -53,8 +53,8 @@ BRK
11 	;body .Screen/addr DEO2
12 	#81 .Screen/sprite DEO
13 	( eye/tail )
14-	#00 ,draw-eye JSR
15-	#00 ,draw-tail JSR
16+	#00 draw-eye
17+	#00 draw-tail
18 
19 JMP2r
20 
21@@ -62,16 +62,16 @@ JMP2r
22 	
23 	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT
24 	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT
25-		ADD ,draw-eye JSR
26+		ADD draw-eye
27 	.cat/timer LDZ INC [ DUP ] .cat/timer STZ
28-		#04 SFT ,draw-tail JSR
29-	,draw-cursor JSR
30+		#04 SFT draw-tail
31+	draw-cursor
32 
33 BRK
34 
35 @draw-eye ( quad -- )
36 	
37-	DUP ,&last LDR NEQ ,&changed JCN
38+	DUP ,&last LDR NEQ ?&changed
39 		POP JMP2r &changed
40 	( only redraw on change )
41 	DUP
42@@ -86,7 +86,7 @@ JMP2r
43 
44 @draw-tail ( frame -- )
45 
46-	STHk ,&last LDR NEQ ,&changed JCN
47+	STHk ,&last LDR NEQ ?&changed
48 		POPr JMP2r &changed
49 	( only redraw on change )
50 	STHr #00 OVR ;frames ADD2 LDA
+1, -1
1@@ -57,7 +57,7 @@ static void
2 console_deo(Uint8 *d, Uint8 port)
3 {
4 	FILE *fd = port == 0x8 ? stdout : port == 0x9 ? stderr :
5-                                                    0;
6+													0;
7 	if(fd) {
8 		fputc(d[port], fd);
9 		fflush(fd);
+14, -5
 1@@ -328,6 +328,14 @@ parse(char *w, FILE *f)
 2 		makereference(p.scope, w, p.ptr);
 3 		if(!writeshort(0xffff, 1)) return 0;
 4 		break;
 5+	case '!': /* JMI */
 6+		makereference(p.scope, w, p.ptr);
 7+		if(!writebyte(0x20) || !writeshort(0xffff, 0)) return 0;
 8+		break;
 9+	case '?': /* JCI */
10+		makereference(p.scope, w, p.ptr);
11+		if(!writebyte(0x40) || !writeshort(0xffff, 0)) return 0;
12+		break;
13 	case '"': /* raw string */
14 		i = 0;
15 		while((c = w[++i]))
16@@ -355,8 +363,11 @@ parse(char *w, FILE *f)
17 				if(!parse(m->items[i], f))
18 					return 0;
19 			return 1;
20-		} else
21-			return error("Unknown token", w);
22+		} else {
23+			makereference(p.scope, w - 1, p.ptr);
24+			if(!writebyte(0x60) || !writeshort(0xffff, 0))
25+				return 0;
26+		}
27 	}
28 	return 1;
29 }
30@@ -405,15 +416,13 @@ resolve(void)
31 			p.data[r->addr + 1] = l->addr & 0xff;
32 			l->refs++;
33 			break;
34-		case ';':
35+		default:
36 			if(!(l = findlabel(r->name)))
37 				return error("Unknown absolute reference", r->name);
38 			p.data[r->addr + 1] = l->addr >> 0x8;
39 			p.data[r->addr + 2] = l->addr & 0xff;
40 			l->refs++;
41 			break;
42-		default:
43-			return error("Unknown reference", r->name);
44 		}
45 	}
46 	return 1;
+1, -1
1@@ -38,7 +38,7 @@ static void
2 console_deo(Uint8 *d, Uint8 port)
3 {
4 	FILE *fd = port == 0x8 ? stdout : port == 0x9 ? stderr :
5-                                                    0;
6+													0;
7 	if(fd) {
8 		fputc(d[port], fd);
9 		fflush(fd);