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);