Browse code

Removing rawchr run

Devine Lu Linvega authored on 14/08/2022 19:06:23
Showing 11 changed files
... ...
@@ -13,13 +13,13 @@
13 13
 	;memory
14 14
 	;program
15 15
 	&while
16
-		LDAk LIT '> NEQ ,&movr JCN [ SWP2 INC2 SWP2 ] &movr
17
-		LDAk LIT '< NEQ ,&movl JCN [ SWP2 #0001 SUB2 SWP2 ] &movl
18
-		LDAk LIT '+ NEQ ,&incr JCN [ OVR2 STH2k LDA INC STH2r STA ] &incr
19
-		LDAk LIT '- NEQ ,&decr JCN [ OVR2 STH2k LDA #01 SUB STH2r STA ] &decr
20
-		LDAk LIT '. NEQ ,&emit JCN [ OVR2 LDA #18 DEO ] &emit
21
-		LDAk LIT '[ NEQ ,&next JCN [ ,goto-next JSR ] &next
22
-		LDAk LIT '] NEQ ,&prev JCN [ ,goto-back JSR ] &prev
16
+		LDAk LIT "> NEQ ,&movr JCN [ SWP2 INC2 SWP2 ] &movr
17
+		LDAk LIT "< NEQ ,&movl JCN [ SWP2 #0001 SUB2 SWP2 ] &movl
18
+		LDAk LIT "+ NEQ ,&incr JCN [ OVR2 STH2k LDA INC STH2r STA ] &incr
19
+		LDAk LIT "- NEQ ,&decr JCN [ OVR2 STH2k LDA #01 SUB STH2r STA ] &decr
20
+		LDAk LIT ". NEQ ,&emit JCN [ OVR2 LDA #18 DEO ] &emit
21
+		LDAk LIT "[ NEQ ,&next JCN [ ,goto-next JSR ] &next
22
+		LDAk LIT "] NEQ ,&prev JCN [ ,goto-back JSR ] &prev
23 23
 		INC2 LDAk ,&while JCN
24 24
 	POP2
25 25
 	( halt ) #010f DEO
... ...
@@ -32,8 +32,8 @@ BRK
32 32
 	( depth ) LITr 00
33 33
 	INC2
34 34
 	&loop
35
-		LDAk LIT '[ NEQ JMP INCr
36
-		LDAk LIT '] NEQ ,&no-end JCN
35
+		LDAk LIT "[ NEQ JMP INCr
36
+		LDAk LIT "] NEQ ,&no-end JCN
37 37
 			STHkr #00 EQU ,&end JCN
38 38
 			LITr 01 SUBr
39 39
 			&no-end
... ...
@@ -49,8 +49,8 @@ JMP2r
49 49
 	( depth ) LITr 00
50 50
 	#0001 SUB2
51 51
 	&loop
52
-		LDAk LIT '] NEQ JMP INCr
53
-		LDAk LIT '[ NEQ ,&no-end JCN
52
+		LDAk LIT "] NEQ JMP INCr
53
+		LDAk LIT "[ NEQ ,&no-end JCN
54 54
 			STHkr #00 EQU ,&end JCN
55 55
 			LITr 01 SUBr
56 56
 			&no-end
... ...
@@ -67,4 +67,4 @@ JMP2r
67 67
 	"..+++.>>.<-.<.+++.------.-------
68 68
 	"-.>>+.>++. $1
69 69
 
70
-@memory
71 70
\ No newline at end of file
71
+@memory
... ...
@@ -25,8 +25,8 @@ JMP2r
25 25
 @input-main ( -> )
26 26
 
27 27
 	.Console/read DEI
28
-	LIT '0 EQUk NIP ,&no JCN
29
-	LIT '1 EQUk NIP ,&yes JCN
28
+	LIT "0 EQUk NIP ,&no JCN
29
+	LIT "1 EQUk NIP ,&yes JCN
30 30
 	( ignore other inputs )
31 31
 	POP
32 32
 
... ...
@@ -56,7 +56,7 @@ JMP2r
56 56
 @pstr ( str* -- )
57 57
 
58 58
 	&while
59
-		LDAk DUP LIT '_ EQU #3f MUL SUB .Console/write DEO
59
+		LDAk DUP LIT "_ EQU #3f MUL SUB .Console/write DEO
60 60
 		INC2 LDAk ,&while JCN
61 61
 	POP2
62 62
 
... ...
@@ -96,7 +96,7 @@ JMP2r
96 96
 	;program/accumulator
97 97
 	&w
98 98
 		[ LIT2 &a $2 ] OVR2 ;sseg JSR2 #01 NEQ ,&no-found JCN
99
-			,&b LDR2 LDA LIT '~ EQU ,&output JCN
99
+			,&b LDR2 LDA LIT "~ EQU ,&output JCN
100 100
 			( shift ) DUP2 [ ,&b LDR2 ;slen JSR2 ,&a LDR2 ;slen JSR2 SUB2 ] ;ssft JSR2
101 101
 			( write ) [ LIT2 &b $2 ] SWP2 OVR2 ;slen JSR2 ;mcpy JSR2 
102 102
 			POP2 #01 JMP2r
... ...
@@ -109,7 +109,7 @@ JMP2r
109 109
 	&output
110 110
 		,&a LDR2 ;slen JSR2 #0000 SWP2 SUB2 ;ssft JSR2
111 111
 		POP2 ,&b LDR2 INC2
112
-		LDAk LIT '` NEQ ,&no-lb JCN
112
+		LDAk LIT "` NEQ ,&no-lb JCN
113 113
 			#0a18 DEO #01 JMP2r
114 114
 			&no-lb
115 115
 		,print-str JSR #01
... ...
@@ -75,7 +75,7 @@ BRK
75 75
 	LIT 22 #02 ;draw-char JSR2
76 76
 	;buffer #03 ;draw-str JSR2
77 77
 	LIT 22 #02 ;draw-char JSR2
78
-	LIT '. #02 ;draw-char JSR2
78
+	LIT ". #02 ;draw-char JSR2
79 79
 
80 80
 JMP2r
81 81
 
... ...
@@ -85,7 +85,7 @@ JMP2r
85 85
 	#0010 .Screen/x DEO2
86 86
 	.Screen/height DEI2 #0020 SUB2 .Screen/y DEO2
87 87
 
88
-	( marker ) LIT '> #03 ;draw-char JSR2
88
+	( marker ) LIT "> #03 ;draw-char JSR2
89 89
 
90 90
 	;buffer STHr ;draw-str JSR2
91 91
 
... ...
@@ -137,8 +137,8 @@
137 137
 	DUP2 ,asma-print-labels JSR
138 138
 	( here )
139 139
 	DUP2 #0004 ADD2
140
-	LDAk LIT 'A LTH ,&loop JCN
141
-	LDAk LIT 'Z GTH ,&loop JCN
140
+	LDAk LIT "A LTH ,&loop JCN
141
+	LDAk LIT "Z GTH ,&loop JCN
142 142
 	POP2
143 143
 	,&skip-device-label JMP
144 144
 	&loop
... ...
@@ -169,8 +169,8 @@
169 169
 	,asma-print-string JMP
170 170
 
171 171
 @asma-print-short ( short* -- )
172
-	LIT '0 .Console/error DEO
173
-	LIT 'x .Console/error DEO
172
+	LIT "0 .Console/error DEO
173
+	LIT "x .Console/error DEO
174 174
 	OVR #04 SFT ,&hex JSR
175 175
 	SWP #0f AND ,&hex JSR
176 176
 	DUP #04 SFT ,&hex JSR
... ...
@@ -496,15 +496,15 @@
496 496
 	JMP2r
497 497
 
498 498
 	&not-end
499
-	DUP LIT '2 NEQ ,&not-two JCN
499
+	DUP LIT "2 NEQ ,&not-two JCN
500 500
 	POP LIT &short-flag $1 ORA ,&loop JMP
501 501
 
502 502
 	&not-two
503
-	DUP LIT 'r NEQ ,&not-return JCN
503
+	DUP LIT "r NEQ ,&not-return JCN
504 504
 	POP LIT &return-flag $1 ORA ,&loop JMP
505 505
 
506 506
 	&not-return
507
-	LIT 'k NEQ ,&not-keep JCN
507
+	LIT "k NEQ ,&not-keep JCN
508 508
 	&set-keep LIT &keep-flag $1 ORA ,&loop JMP
509 509
 
510 510
 	&not-keep ( 00 byte / end* )
... ...
@@ -69,15 +69,15 @@ BRK
69 69
 	[ #1b ] NEQk NIP ,&no-esc JCN ;do-pop JSR2 POP BRK &no-esc
70 70
 	[ #08 ] NEQk NIP ,&no-backspace JCN ;do-erase JSR2 POP BRK &no-backspace
71 71
 	( arithmetic )
72
-	[ LIT '+ ] NEQk NIP ,&no-add JCN ;do-add JSR2 POP BRK &no-add
73
-	[ LIT '- ] NEQk NIP ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
74
-	[ LIT '* ] NEQk NIP ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
75
-	[ LIT '/ ] NEQk NIP ,&no-div JCN ;do-div JSR2 POP BRK &no-div
72
+	[ LIT "+ ] NEQk NIP ,&no-add JCN ;do-add JSR2 POP BRK &no-add
73
+	[ LIT "- ] NEQk NIP ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
74
+	[ LIT "* ] NEQk NIP ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
75
+	[ LIT "/ ] NEQk NIP ,&no-div JCN ;do-div JSR2 POP BRK &no-div
76 76
 	( bitwise )
77
-	[ LIT '& ] NEQk NIP ,&no-and JCN ;do-and JSR2 POP BRK &no-and
78
-	[ LIT '| ] NEQk NIP ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
79
-	[ LIT '^ ] NEQk NIP ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
80
-	[ LIT '~ ] NEQk NIP ,&no-not JCN ;do-not JSR2 POP BRK &no-not
77
+	[ LIT "& ] NEQk NIP ,&no-and JCN ;do-and JSR2 POP BRK &no-and
78
+	[ LIT "| ] NEQk NIP ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
79
+	[ LIT "^ ] NEQk NIP ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
80
+	[ LIT "~ ] NEQk NIP ,&no-not JCN ;do-not JSR2 POP BRK &no-not
81 81
 	( value )
82 82
 	;key-value JSR2 ;push-input JSR2
83 83
 
... ...
@@ -47,7 +47,7 @@
47 47
 		#006c ADD2 .time/y STZ2
48 48
 	;draw-watchface JSR2
49 49
 	( time buffer )
50
-	LIT ':
50
+	LIT ":
51 51
 		DUP .buf/s1 STZ
52 52
 		.buf/s2 STZ
53 53
 
... ...
@@ -121,8 +121,8 @@ JMP2r
121 121
 		DUP ;is-lc JSR2 ,&lc JCN
122 122
 		DUP ;is-uc JSR2 ,&uc JCN
123 123
 		DUP ;is-num JSR2 ,&num JCN
124
-		DUP LIT '/ EQU ,&slash JCN
125
-		DUP LIT ': EQU ,&colon JCN
124
+		DUP LIT "/ EQU ,&slash JCN
125
+		DUP LIT ": EQU ,&colon JCN
126 126
 		POP ;font/blank
127 127
 		&end
128 128
 		.Screen/addr DEO2
... ...
@@ -191,7 +191,7 @@ JMP2r
191 191
 	#0010 .Screen/x DEO2
192 192
 	#0080 .Screen/y DEO2
193 193
 	.browser/sel LDZ #02 ;draw-byte JSR2
194
-	LIT '/ #02 ;draw-char JSR2
194
+	LIT "/ #02 ;draw-char JSR2
195 195
 	.browser/lines LDZ #01 SUB #02 ;draw-byte JSR2
196 196
 	#00 .Screen/auto DEO
197 197
 
... ...
@@ -88,14 +88,14 @@ BRK
88 88
 	#40 .Screen/sprite DEO
89 89
 
90 90
 	.Controller/key DEI
91
-	[ LIT 'a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
92
-	[ LIT 's ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
93
-	[ LIT 'd ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
94
-	[ LIT 'f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
95
-	[ LIT 'g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
96
-	[ LIT 'h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
97
-	[ LIT 'j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
98
-	[ LIT 'k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
91
+	[ LIT "a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
92
+	[ LIT "s ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
93
+	[ LIT "d ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
94
+	[ LIT "f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
95
+	[ LIT "g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
96
+	[ LIT "h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
97
+	[ LIT "j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
98
+	[ LIT "k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
99 99
 	[ #1b ] NEQk NIP ,&no-esc JCN #010f DEO &no-esc
100 100
 	POP
101 101
 
... ...
@@ -415,8 +415,8 @@
415 415
 	OPCODE
416 416
 
417 417
 	( DEI/DEO )
418
-	LIT '1 EMIT
419
-	LIT '1 EMIT
418
+	LIT "1 EMIT
419
+	LIT "1 EMIT
420 420
 	TYPE
421 421
 
422 422
 	( Branching )
... ...
@@ -44,8 +44,6 @@ typedef struct {
44 44
 } Program;
45 45
 
46 46
 Program p;
47
-static int litlast = 0;
48
-static int jsrlast = 0;
49 47
 
50 48
 /* clang-format off */
51 49
 
... ...
@@ -207,8 +205,6 @@ writebyte(Uint8 b)
207 205
 		return error("Memory overwrite", "");
208 206
 	p.data[p.ptr++] = b;
209 207
 	p.length = p.ptr;
210
-	litlast = 0;
211
-	jsrlast = 0;
212 208
 	return 1;
213 209
 }
214 210
 
... ...
@@ -216,14 +212,7 @@ static int
216 212
 writeopcode(char *w)
217 213
 {
218 214
 	Uint8 res;
219
-	if(jsrlast && scmp(w, "JMP2r", 5)) { /* tail-call optimization */
220
-		p.data[p.ptr - 1] = findopcode("JMP2");
221
-		jsrlast = 0;
222
-		return 1;
223
-	}
224 215
 	res = writebyte(findopcode(w));
225
-	if(scmp(w, "JSR2", 4))
226
-		jsrlast = 1;
227 216
 	return res;
228 217
 }
229 218
 
... ...
@@ -238,15 +227,8 @@ writeshort(Uint16 s, int lit)
238 227
 static int
239 228
 writelitbyte(Uint8 b)
240 229
 {
241
-	if(litlast) { /* literals optimization */
242
-		Uint8 hb = p.data[p.ptr - 1];
243
-		p.ptr -= 2;
244
-		p.length = p.ptr;
245
-		return writeshort((hb << 8) + b, 1);
246
-	}
247 230
 	if(!writebyte(findopcode("LIT"))) return 0;
248 231
 	if(!writebyte(b)) return 0;
249
-	litlast = 1;
250 232
 	return 1;
251 233
 }
252 234
 
... ...
@@ -297,24 +279,20 @@ parse(char *w, FILE *f)
297 279
 		if(!sihx(w + 1))
298 280
 			return error("Invalid padding", w);
299 281
 		p.ptr = shex(w + 1);
300
-		litlast = jsrlast = 0;
301 282
 		break;
302 283
 	case '$': /* pad-relative */
303 284
 		if(!sihx(w + 1))
304 285
 			return error("Invalid padding", w);
305 286
 		p.ptr += shex(w + 1);
306
-		litlast = jsrlast = 0;
307 287
 		break;
308 288
 	case '@': /* label */
309 289
 		if(!makelabel(w + 1))
310 290
 			return error("Invalid label", w);
311 291
 		scpy(w + 1, p.scope, 0x40);
312
-		litlast = jsrlast = 0;
313 292
 		break;
314 293
 	case '&': /* sublabel */
315 294
 		if(!makelabel(sublabel(subw, p.scope, w + 1)))
316 295
 			return error("Invalid sublabel", w);
317
-		litlast = jsrlast = 0;
318 296
 		break;
319 297
 	case '#': /* literals hex */
320 298
 		if(!sihx(w + 1) || (slen(w) != 3 && slen(w) != 5))
... ...
@@ -326,11 +304,11 @@ parse(char *w, FILE *f)
326 304
 		}
327 305
 		break;
328 306
 	case '.': /* literal byte zero-page */
329
-		makereference(p.scope, w, p.ptr - litlast);
307
+		makereference(p.scope, w, p.ptr);
330 308
 		if(!writelitbyte(0xff)) return 0;
331 309
 		break;
332 310
 	case ',': /* literal byte relative */
333
-		makereference(p.scope, w, p.ptr - litlast);
311
+		makereference(p.scope, w, p.ptr);
334 312
 		if(!writelitbyte(0xff)) return 0;
335 313
 		break;
336 314
 	case ';': /* literal short absolute */
... ...
@@ -341,9 +319,6 @@ parse(char *w, FILE *f)
341 319
 		makereference(p.scope, w, p.ptr);
342 320
 		if(!writeshort(0xffff, 0)) return 0;
343 321
 		break;
344
-	case '\'': /* raw char */
345
-		if(!writebyte((Uint8)w[1])) return 0;
346
-		break;
347 322
 	case '"': /* raw string */
348 323
 		i = 0;
349 324
 		while((c = w[++i]))