Browse code

Ported asma to new simplified Console device

Andrew Alderwick authored on 07/07/2021 20:04:53
Showing 1 changed files
... ...
@@ -1,7 +1,7 @@
1 1
 ( devices )
2 2
 
3 3
 |00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g     $2 &b      $2 ]
4
-|10 @Console    [ &pad    $8 &char     $1 &byte   $1 &short $2 &string $2 ]
4
+|10 @Console    [ &pad    $8 &write    $1 ]
5 5
 |a0 @File       [ &vector $2 &success  $2 &offset $2 &pad   $2 &name  $2 &length $2 &load $2 &save $2 ]
6 6
 
7 7
 ( vectors )
... ...
@@ -20,6 +20,15 @@
20 20
 )
21 21
 
22 22
 |0100 @reset
23
+	(
24
+		Set the log level for helping to debug stuff.
25
+		Its value is the bitwise OR of all the following output types:
26
+			#01 prints the number of lines in the source code,
27
+			#04 dumps all defined labels at end, and
28
+			#08 prints the heap usage.
29
+	)
30
+	#09 ;asma/log-level STA
31
+
23 32
 	(
24 33
 		Assemble the source code into an output ROM file.
25 34
 
... ...
@@ -70,17 +79,6 @@
70 79
 )
71 80
 
72 81
 %asma-IF-ERROR { ;asma/error LDA2 ORA }
73
-%asma-LOG { #09 }
74
-(
75
-	asma-LOG is a log-level parameter for helping to debug stuff.
76
-	Its value is the bitwise OR of all the following output types:
77
-		#01 prints the number of lines in the source code,
78
-		#02 prints tokens as they are processed,
79
-		#04 dumps all defined labels at end, and
80
-		#08 prints the heap usage.
81
-)
82
-%asma-DEO2 { asma-LOG AND #00 EQU JMP DEO2k POP POP2 }
83
-%asma-DEO { asma-LOG AND #00 EQU JMP DEOk POP2 }
84 82
 
85 83
 (
86 84
 	Asma's public interface.
... ...
@@ -119,30 +117,34 @@
119 117
 )
120 118
 
121 119
 @asma-print-error ( -- )
122
-	;asma/error LDA2 .Console/string DEO2
123
-	#3a .Console/char DEO
124
-	#20 .Console/char DEO
125
-	;asma/orig-token LDA2 .Console/string DEO2
126
-	;&line .Console/string DEO2
127
-	;asma/line LDA2 .Console/short DEO2
128
-	#2e .Console/char DEO
129
-	#0a .Console/char DEO
120
+	;asma/error LDA2 ;asma-print-string JSR2
121
+	#3a .Console/write DEO
122
+	#20 .Console/write DEO
123
+	;asma/orig-token LDA2 ;asma-print-string JSR2
124
+	;&line ;asma-print-string JSR2
125
+	;asma/line LDA2 ;asma-print-short JSR2
126
+	#2e .Console/write DEO
127
+	#0a .Console/write DEO
130 128
 	JMP2r
131 129
 
132 130
 	&line 20 "on 20 "line 20 00
133 131
 
134 132
 @asma-print-line-count ( -- )
135
-	;asma/line LDA2 .Console/short #01 asma-DEO2
136
-	;&lines .Console/string #01 asma-DEO2
133
+	;asma/log-level LDA #01 AND #00 EQU ,&skip JCN
134
+	;asma/line LDA2 ;asma-print-short JSR2
135
+	;&lines ;asma-print-string JSR2
136
+	&skip
137 137
 	JMP2r
138 138
 
139 139
 	&lines [ 20 "lines 20 "of 20 "source 20 "code. 0a 00 ]
140 140
 
141 141
 @asma-print-heap-usage ( -- )
142
-	;asma/heap LDA2 ;asma-heap SUB2 .Console/short #08 asma-DEO2
143
-	;&str1 .Console/string #08 asma-DEO2
144
-	;asma-heap/end ;asma/heap LDA2 SUB2 .Console/short #08 asma-DEO2
145
-	;&str2 .Console/string #08 asma-DEO2
142
+	;asma/log-level LDA #08 AND #00 EQU ,&skip JCN
143
+	;asma/heap LDA2 ;asma-heap SUB2 ;asma-print-short JSR2
144
+	;&str1 ;asma-print-string JSR2
145
+	;asma-heap/end ;asma/heap LDA2 SUB2 ;asma-print-short JSR2
146
+	;&str2 ;asma-print-string JSR2
147
+	&skip
146 148
 	JMP2r
147 149
 
148 150
 	&str1 [ 20 "bytes 20 "of 20 "heap 20 "used, 20 00 ]
... ...
@@ -157,26 +159,28 @@
157 159
 	( left node )
158 160
 	DUP2 ,asma-print-sublabels JSR
159 161
 	( here )
160
-	#09 .Console/char #04 asma-DEO
162
+	#09 .Console/write DEO
161 163
 	DUP2 #0004 ADD2
162 164
 	&loop
163 165
 	DUP2 #0001 ADD2 SWP2 LDA
164 166
 	DUP #00 EQU ,&end JCN
165
-	.Console/char #04 asma-DEO
167
+	.Console/write DEO
166 168
 	,&loop JMP
167 169
 	&end
168 170
 	POP
169
-	#09 .Console/char #04 asma-DEO
170
-	LDA2 .Console/short #04 asma-DEO2
171
-	#0a .Console/char #04 asma-DEO
171
+	#09 .Console/write DEO
172
+	LDA2 ;asma-print-short JSR2
173
+	#0a .Console/write DEO
172 174
 
173 175
 	( right node )
174 176
 	#0002 ADD2 ,asma-print-sublabels JSR
175 177
 	JMP2r
176 178
 
177 179
 @asma-print-labels ( incoming-ptr* -- )
180
+	;asma/log-level LDA #04 AND #00 EQU ,&skip JCN
178 181
 	LDA2
179 182
 	ORAk ,&valid-incoming-ptr JCN
183
+	&skip
180 184
 	POP2 JMP2r
181 185
 
182 186
 	&valid-incoming-ptr
... ...
@@ -187,13 +191,13 @@
187 191
 	&loop
188 192
 	DUP2 #0001 ADD2 SWP2 LDA
189 193
 	DUP #00 EQU ,&end JCN
190
-	.Console/char #04 asma-DEO
194
+	.Console/write DEO
191 195
 	,&loop JMP
192 196
 	&end
193 197
 	POP
194
-	#09 .Console/char #04 asma-DEO
195
-	LDA2k .Console/short #04 asma-DEO2
196
-	#0a .Console/char #04 asma-DEO
198
+	#09 .Console/write DEO
199
+	LDA2k ;asma-print-short JSR2
200
+	#0a .Console/write DEO
197 201
 	( subtree )
198 202
 	#0002 ADD2 ;asma-print-sublabels JSR2
199 203
 
... ...
@@ -201,6 +205,27 @@
201 205
 	#0002 ADD2 ,asma-print-labels JSR
202 206
 	JMP2r
203 207
 
208
+@asma-print-string ( ptr* -- )
209
+	LDAk DUP ,&keep-going JCN
210
+	POP POP2 JMP2r
211
+
212
+	&keep-going
213
+	.Console/write DEO
214
+	#0001 ADD2
215
+	,asma-print-string JMP
216
+
217
+@asma-print-short ( short* -- )
218
+	LIT '0 .Console/write DEO
219
+	LIT 'x .Console/write DEO
220
+	OVR #04 SFT ,&hex JSR
221
+	SWP #0f AND ,&hex JSR
222
+	DUP #04 SFT ,&hex JSR
223
+	    #0f AND ,&hex JMP
224
+
225
+	&hex
226
+	#30 ADD DUP #39 GTH #27 MUL ADD .Console/write DEO
227
+	JMP2r
228
+
204 229
 (
205 230
 	Initialise the assembler state before loading a file or chunk.
206 231
 )
... ...
@@ -298,7 +323,13 @@
298 323
 	POP POP2 POP2
299 324
 	JMP2r
300 325
 
301
-@asma [ &pass $1 &state $1 &line $2 &token $2 &orig-token $2 &heap $2 &addr $2 &written-addr $2 &flush-fn $2 &src-filename $2 &dest-filename $2 &error $2 ]
326
+@asma [
327
+	&pass $1 &state $1 &line $2
328
+	&token $2 &orig-token $2
329
+	&heap $2 &addr $2 &written-addr $2 &flush-fn $2
330
+	&src-filename $2 &dest-filename $2
331
+	&error $2 &log-level $1
332
+]
302 333
 @asma-trees [ &labels $2 &macros $2 &opcodes $2 &scope $2 ]
303 334
 
304 335
 (
... ...
@@ -314,8 +345,6 @@
314 345
 )
315 346
 
316 347
 @asma-assemble-token ( string-ptr* -- )
317
-	DUP2 .Console/string #02 asma-DEO2
318
-	#0a .Console/char #02 asma-DEO
319 348
 	DUP2 ;asma/token STA2
320 349
 	DUP2 ;asma/orig-token STA2
321 350
 	LDAk ,&not-empty JCN
... ...
@@ -489,11 +518,6 @@
489 518
 	&after-flush
490 519
 	STH2k STA
491 520
 	STH2r #0001 ADD2 ,asma-output/ptr STR2
492
-
493
-	( #3e .Console/char ;asma/pass LDA asma-DEO
494
-	#20 .Console/char ;asma/pass LDA asma-DEO
495
-	#00 .Console/byte ;asma/pass LDA asma-DEO
496
-	#0a .Console/char ;asma/pass LDA asma-DEO )
497 521
 	JMP2r
498 522
 
499 523
 	&flush ( ptr* -- start-of-buffer* )