Ported asma to new simplified Console device

This commit is contained in:
Andrew Alderwick 2021-07-07 21:04:53 +01:00
parent 3e395e56b0
commit d3aaf705f3
1 changed files with 67 additions and 43 deletions

View File

@ -1,7 +1,7 @@
( devices ) ( devices )
|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ] |00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ]
|10 @Console [ &pad $8 &char $1 &byte $1 &short $2 &string $2 ] |10 @Console [ &pad $8 &write $1 ]
|a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] |a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ]
( vectors ) ( vectors )
@ -20,6 +20,15 @@
) )
|0100 @reset |0100 @reset
(
Set the log level for helping to debug stuff.
Its value is the bitwise OR of all the following output types:
#01 prints the number of lines in the source code,
#04 dumps all defined labels at end, and
#08 prints the heap usage.
)
#09 ;asma/log-level STA
( (
Assemble the source code into an output ROM file. Assemble the source code into an output ROM file.
@ -70,17 +79,6 @@
) )
%asma-IF-ERROR { ;asma/error LDA2 ORA } %asma-IF-ERROR { ;asma/error LDA2 ORA }
%asma-LOG { #09 }
(
asma-LOG is a log-level parameter for helping to debug stuff.
Its value is the bitwise OR of all the following output types:
#01 prints the number of lines in the source code,
#02 prints tokens as they are processed,
#04 dumps all defined labels at end, and
#08 prints the heap usage.
)
%asma-DEO2 { asma-LOG AND #00 EQU JMP DEO2k POP POP2 }
%asma-DEO { asma-LOG AND #00 EQU JMP DEOk POP2 }
( (
Asma's public interface. Asma's public interface.
@ -119,30 +117,34 @@
) )
@asma-print-error ( -- ) @asma-print-error ( -- )
;asma/error LDA2 .Console/string DEO2 ;asma/error LDA2 ;asma-print-string JSR2
#3a .Console/char DEO #3a .Console/write DEO
#20 .Console/char DEO #20 .Console/write DEO
;asma/orig-token LDA2 .Console/string DEO2 ;asma/orig-token LDA2 ;asma-print-string JSR2
;&line .Console/string DEO2 ;&line ;asma-print-string JSR2
;asma/line LDA2 .Console/short DEO2 ;asma/line LDA2 ;asma-print-short JSR2
#2e .Console/char DEO #2e .Console/write DEO
#0a .Console/char DEO #0a .Console/write DEO
JMP2r JMP2r
&line 20 "on 20 "line 20 00 &line 20 "on 20 "line 20 00
@asma-print-line-count ( -- ) @asma-print-line-count ( -- )
;asma/line LDA2 .Console/short #01 asma-DEO2 ;asma/log-level LDA #01 AND #00 EQU ,&skip JCN
;&lines .Console/string #01 asma-DEO2 ;asma/line LDA2 ;asma-print-short JSR2
;&lines ;asma-print-string JSR2
&skip
JMP2r JMP2r
&lines [ 20 "lines 20 "of 20 "source 20 "code. 0a 00 ] &lines [ 20 "lines 20 "of 20 "source 20 "code. 0a 00 ]
@asma-print-heap-usage ( -- ) @asma-print-heap-usage ( -- )
;asma/heap LDA2 ;asma-heap SUB2 .Console/short #08 asma-DEO2 ;asma/log-level LDA #08 AND #00 EQU ,&skip JCN
;&str1 .Console/string #08 asma-DEO2 ;asma/heap LDA2 ;asma-heap SUB2 ;asma-print-short JSR2
;asma-heap/end ;asma/heap LDA2 SUB2 .Console/short #08 asma-DEO2 ;&str1 ;asma-print-string JSR2
;&str2 .Console/string #08 asma-DEO2 ;asma-heap/end ;asma/heap LDA2 SUB2 ;asma-print-short JSR2
;&str2 ;asma-print-string JSR2
&skip
JMP2r JMP2r
&str1 [ 20 "bytes 20 "of 20 "heap 20 "used, 20 00 ] &str1 [ 20 "bytes 20 "of 20 "heap 20 "used, 20 00 ]
@ -157,26 +159,28 @@
( left node ) ( left node )
DUP2 ,asma-print-sublabels JSR DUP2 ,asma-print-sublabels JSR
( here ) ( here )
#09 .Console/char #04 asma-DEO #09 .Console/write DEO
DUP2 #0004 ADD2 DUP2 #0004 ADD2
&loop &loop
DUP2 #0001 ADD2 SWP2 LDA DUP2 #0001 ADD2 SWP2 LDA
DUP #00 EQU ,&end JCN DUP #00 EQU ,&end JCN
.Console/char #04 asma-DEO .Console/write DEO
,&loop JMP ,&loop JMP
&end &end
POP POP
#09 .Console/char #04 asma-DEO #09 .Console/write DEO
LDA2 .Console/short #04 asma-DEO2 LDA2 ;asma-print-short JSR2
#0a .Console/char #04 asma-DEO #0a .Console/write DEO
( right node ) ( right node )
#0002 ADD2 ,asma-print-sublabels JSR #0002 ADD2 ,asma-print-sublabels JSR
JMP2r JMP2r
@asma-print-labels ( incoming-ptr* -- ) @asma-print-labels ( incoming-ptr* -- )
;asma/log-level LDA #04 AND #00 EQU ,&skip JCN
LDA2 LDA2
ORAk ,&valid-incoming-ptr JCN ORAk ,&valid-incoming-ptr JCN
&skip
POP2 JMP2r POP2 JMP2r
&valid-incoming-ptr &valid-incoming-ptr
@ -187,13 +191,13 @@
&loop &loop
DUP2 #0001 ADD2 SWP2 LDA DUP2 #0001 ADD2 SWP2 LDA
DUP #00 EQU ,&end JCN DUP #00 EQU ,&end JCN
.Console/char #04 asma-DEO .Console/write DEO
,&loop JMP ,&loop JMP
&end &end
POP POP
#09 .Console/char #04 asma-DEO #09 .Console/write DEO
LDA2k .Console/short #04 asma-DEO2 LDA2k ;asma-print-short JSR2
#0a .Console/char #04 asma-DEO #0a .Console/write DEO
( subtree ) ( subtree )
#0002 ADD2 ;asma-print-sublabels JSR2 #0002 ADD2 ;asma-print-sublabels JSR2
@ -201,6 +205,27 @@
#0002 ADD2 ,asma-print-labels JSR #0002 ADD2 ,asma-print-labels JSR
JMP2r JMP2r
@asma-print-string ( ptr* -- )
LDAk DUP ,&keep-going JCN
POP POP2 JMP2r
&keep-going
.Console/write DEO
#0001 ADD2
,asma-print-string JMP
@asma-print-short ( short* -- )
LIT '0 .Console/write DEO
LIT 'x .Console/write DEO
OVR #04 SFT ,&hex JSR
SWP #0f AND ,&hex JSR
DUP #04 SFT ,&hex JSR
#0f AND ,&hex JMP
&hex
#30 ADD DUP #39 GTH #27 MUL ADD .Console/write DEO
JMP2r
( (
Initialise the assembler state before loading a file or chunk. Initialise the assembler state before loading a file or chunk.
) )
@ -298,7 +323,13 @@
POP POP2 POP2 POP POP2 POP2
JMP2r JMP2r
@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 ] @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 &log-level $1
]
@asma-trees [ &labels $2 &macros $2 &opcodes $2 &scope $2 ] @asma-trees [ &labels $2 &macros $2 &opcodes $2 &scope $2 ]
( (
@ -314,8 +345,6 @@
) )
@asma-assemble-token ( string-ptr* -- ) @asma-assemble-token ( string-ptr* -- )
DUP2 .Console/string #02 asma-DEO2
#0a .Console/char #02 asma-DEO
DUP2 ;asma/token STA2 DUP2 ;asma/token STA2
DUP2 ;asma/orig-token STA2 DUP2 ;asma/orig-token STA2
LDAk ,&not-empty JCN LDAk ,&not-empty JCN
@ -489,11 +518,6 @@
&after-flush &after-flush
STH2k STA STH2k STA
STH2r #0001 ADD2 ,asma-output/ptr STR2 STH2r #0001 ADD2 ,asma-output/ptr STR2
( #3e .Console/char ;asma/pass LDA asma-DEO
#20 .Console/char ;asma/pass LDA asma-DEO
#00 .Console/byte ;asma/pass LDA asma-DEO
#0a .Console/char ;asma/pass LDA asma-DEO )
JMP2r JMP2r
&flush ( ptr* -- start-of-buffer* ) &flush ( ptr* -- start-of-buffer* )