| ... | ... |
@@ -5,14 +5,15 @@ |
| 5 | 5 |
|
| 6 | 6 |
( vectors ) |
| 7 | 7 |
|
| 8 |
-|0100 |
|
| 9 |
- ;reset JMP2 |
|
| 8 |
+|0100 @reset |
|
| 9 |
+ ;&source-file ;&dest-file ;asma-assemble-file JSR2 |
|
| 10 |
+ BRK |
|
| 10 | 11 |
|
| 11 |
-( |
|
| 12 |
- Asma's public interface. |
|
| 13 |
- These routines are what are expected to be called from programs that bundle |
|
| 14 |
- Asma into bigger projects. |
|
| 15 |
-) |
|
| 12 |
+ &source-file |
|
| 13 |
+ "test.usm 00 |
|
| 14 |
+ "projects/demos/piano.usm 00 |
|
| 15 |
+ &dest-file |
|
| 16 |
+ "bin/asma-boot.rom 00 |
|
| 16 | 17 |
|
| 17 | 18 |
( |
| 18 | 19 |
Common macros for use later on. |
| ... | ... |
@@ -29,22 +30,67 @@ |
| 29 | 30 |
%asma-DEO2 { asma-LOG NEQ JMP DEO2k POP POP2 }
|
| 30 | 31 |
%asma-DEO { asma-LOG NEQ JMP DEOk POP2 }
|
| 31 | 32 |
|
| 33 |
+( |
|
| 34 |
+ Asma's public interface. |
|
| 35 |
+ These routines are what are expected to be called from programs that bundle |
|
| 36 |
+ Asma into bigger projects. |
|
| 37 |
+) |
|
| 38 |
+ |
|
| 39 |
+@asma-assemble-file ( src-filename* dest-filename* -- ) |
|
| 40 |
+ ;asma/dest-filename STA2 ;asma/src-filename STA2 |
|
| 41 |
+ |
|
| 42 |
+ ;asma-init-first-pass JSR2 |
|
| 43 |
+ ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 |
|
| 44 |
+ asma-IF-ERROR ,&error JCN |
|
| 45 |
+ |
|
| 46 |
+ ;asma-init-next-pass JSR2 |
|
| 47 |
+ ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 |
|
| 48 |
+ asma-IF-ERROR ,&error JCN |
|
| 49 |
+ |
|
| 50 |
+ ;asma-trees/labels ;asma-print-labels JSR2 ( DEBUG ) |
|
| 51 |
+ ;asma-print-linecount JSR2 ( DEBUG ) |
|
| 52 |
+ JMP2r |
|
| 53 |
+ |
|
| 54 |
+ &error |
|
| 55 |
+ ;asma-print-error JSR2 ( DEBUG ) |
|
| 56 |
+ JMP2r |
|
| 57 |
+ |
|
| 32 | 58 |
( |
| 33 | 59 |
Debugging routines. These all output extra information to the Console. |
| 34 | 60 |
These can be stripped out to save space, once the references to them are |
| 35 |
- removed. Look for the word DEBUG later on to find these references: the |
|
| 36 |
- lines that contain that word can be deleted to strip out the functionality |
|
| 61 |
+ removed. Look for the word DEBUG above to find these references: the lines |
|
| 62 |
+ that contain that word can be deleted to strip out the functionality |
|
| 37 | 63 |
cleanly. |
| 38 | 64 |
) |
| 39 | 65 |
|
| 40 |
-@asma-dump-sublabels ( incoming-ptr* -- ) |
|
| 66 |
+@asma-print-error ( -- ) |
|
| 67 |
+ ;asma/error LDA2 .Console/string DEO2 |
|
| 68 |
+ #3a .Console/char DEO |
|
| 69 |
+ #20 .Console/char DEO |
|
| 70 |
+ ;asma/orig-token LDA2 .Console/string DEO2 |
|
| 71 |
+ ;&line .Console/string DEO2 |
|
| 72 |
+ ;asma/line LDA2 .Console/short DEO2 |
|
| 73 |
+ #2e .Console/char DEO |
|
| 74 |
+ #0a .Console/char DEO |
|
| 75 |
+ BRK |
|
| 76 |
+ |
|
| 77 |
+ &line 20 "on 20 "line 20 00 |
|
| 78 |
+ |
|
| 79 |
+@asma-print-linecount ( -- ) |
|
| 80 |
+ ;asma/line LDA2 .Console/short #04 asma-DEO2 |
|
| 81 |
+ ;&lines .Console/string #04 asma-DEO2 |
|
| 82 |
+ JMP2r |
|
| 83 |
+ |
|
| 84 |
+ &lines [ 20 "lines 20 "in 20 "total. 0a 00 ] |
|
| 85 |
+ |
|
| 86 |
+@asma-print-sublabels ( incoming-ptr* -- ) |
|
| 41 | 87 |
LDA2 |
| 42 | 88 |
ORAk ,&valid-incoming-ptr JCN |
| 43 | 89 |
POP2 JMP2r |
| 44 | 90 |
|
| 45 | 91 |
&valid-incoming-ptr |
| 46 | 92 |
( left node ) |
| 47 |
- DUP2 ,asma-dump-sublabels JSR |
|
| 93 |
+ DUP2 ,asma-print-sublabels JSR |
|
| 48 | 94 |
( here ) |
| 49 | 95 |
#09 .Console/char #04 asma-DEO |
| 50 | 96 |
DUP2 #0004 ADD2 |
| ... | ... |
@@ -60,17 +106,17 @@ |
| 60 | 106 |
#0a .Console/char #04 asma-DEO |
| 61 | 107 |
|
| 62 | 108 |
( right node ) |
| 63 |
- #0002 ADD2 ,asma-dump-sublabels JSR |
|
| 109 |
+ #0002 ADD2 ,asma-print-sublabels JSR |
|
| 64 | 110 |
JMP2r |
| 65 | 111 |
|
| 66 |
-@asma-dump-labels ( incoming-ptr* -- ) |
|
| 112 |
+@asma-print-labels ( incoming-ptr* -- ) |
|
| 67 | 113 |
LDA2 |
| 68 | 114 |
ORAk ,&valid-incoming-ptr JCN |
| 69 | 115 |
POP2 JMP2r |
| 70 | 116 |
|
| 71 | 117 |
&valid-incoming-ptr |
| 72 | 118 |
( left node ) |
| 73 |
- DUP2 ,asma-dump-labels JSR |
|
| 119 |
+ DUP2 ,asma-print-labels JSR |
|
| 74 | 120 |
( here ) |
| 75 | 121 |
DUP2 #0004 ADD2 |
| 76 | 122 |
&loop |
| ... | ... |
@@ -84,42 +130,36 @@ |
| 84 | 130 |
LDA2k .Console/short #04 asma-DEO2 |
| 85 | 131 |
#0a .Console/char #04 asma-DEO |
| 86 | 132 |
( subtree ) |
| 87 |
- #0002 ADD2 ;asma-dump-sublabels JSR2 |
|
| 133 |
+ #0002 ADD2 ;asma-print-sublabels JSR2 |
|
| 88 | 134 |
|
| 89 | 135 |
( right node ) |
| 90 |
- #0002 ADD2 ,asma-dump-labels JSR |
|
| 136 |
+ #0002 ADD2 ,asma-print-labels JSR |
|
| 91 | 137 |
JMP2r |
| 92 | 138 |
|
| 93 |
-@reset |
|
| 94 |
- ;asma-init-assembler JSR2 |
|
| 95 |
- ;&filename ;asma-assemble-file-pass JSR2 |
|
| 96 |
- asma-IF-ERROR ,asma-print-error JCN |
|
| 97 |
- ;asma-init-assembler-pass JSR2 |
|
| 98 |
- ;&filename ;asma-assemble-file-pass JSR2 |
|
| 99 |
- asma-IF-ERROR ,asma-print-error JCN |
|
| 100 |
- ;asma-trees/labels ;asma-dump-labels JSR2 |
|
| 101 |
- ;asma/line LDA2 .Console/short #04 asma-DEO2 |
|
| 102 |
- ;&lines .Console/string #04 asma-DEO2 |
|
| 103 |
- BRK |
|
| 104 |
- |
|
| 105 |
- &filename |
|
| 106 |
- "test.usm 00 |
|
| 107 |
- "projects/examples/gui/label.usm 00 |
|
| 139 |
+( |
|
| 140 |
+ Initialise the assembler state before loading a file or chunk. |
|
| 141 |
+) |
|
| 108 | 142 |
|
| 109 |
- &lines [ 20 "lines 20 "in 20 "total. 0a 00 ] |
|
| 143 |
+@asma-init-first-pass ( -- ) |
|
| 144 |
+ #ff ;asma/pass STA |
|
| 145 |
+ #0000 ;asma/error STA2 |
|
| 146 |
+ ;asma-heap ;asma/heap STA2 |
|
| 147 |
+ #0000 ;asma-trees/labels STA2 |
|
| 148 |
+ ;asma-opcodes/_entry ;asma-trees/opcodes STA2 |
|
| 149 |
+ #0000 ;asma-trees/macros STA2 |
|
| 150 |
+ ( fall through ) |
|
| 110 | 151 |
|
| 111 |
-@asma-print-error ( -- ) |
|
| 112 |
- ;asma/error LDA2 .Console/string DEO2 |
|
| 113 |
- #3a .Console/char DEO |
|
| 114 |
- #20 .Console/char DEO |
|
| 115 |
- ;asma/orig-token LDA2 .Console/string DEO2 |
|
| 116 |
- ;&line .Console/string DEO2 |
|
| 117 |
- ;asma/line LDA2 .Console/short DEO2 |
|
| 118 |
- #2e .Console/char DEO |
|
| 119 |
- #0a .Console/char DEO |
|
| 120 |
- BRK |
|
| 152 |
+@asma-init-next-pass ( -- ) |
|
| 153 |
+ ;asma/pass LDA #01 ADD ;asma/pass STA |
|
| 154 |
+ #00 ;asma/state STA |
|
| 155 |
+ #0000 ;asma/addr STA2 |
|
| 156 |
+ #0100 ;asma/written-addr STA2 |
|
| 157 |
+ #0001 ;asma/line STA2 |
|
| 158 |
+ JMP2r |
|
| 121 | 159 |
|
| 122 |
- &line 20 "on 20 "line 20 00 |
|
| 160 |
+( |
|
| 161 |
+ Divide a file up into chunks, and pass each chunk to asma-assemble-chunk. |
|
| 162 |
+) |
|
| 123 | 163 |
|
| 124 | 164 |
@asma-assemble-file-pass ( filename-ptr* -- ) |
| 125 | 165 |
#0000 |
| ... | ... |
@@ -144,21 +184,14 @@ |
| 144 | 184 |
POP2 POP2 POP2 |
| 145 | 185 |
JMP2r |
| 146 | 186 |
|
| 147 |
-@asma-init-assembler ( -- ) |
|
| 148 |
- #ff ;asma/pass STA |
|
| 149 |
- #0000 ;asma/error STA2 |
|
| 150 |
- ;asma-heap ;asma/heap STA2 |
|
| 151 |
- #0000 ;asma-trees/labels STA2 |
|
| 152 |
- ;asma-opcodes/_entry ;asma-trees/opcodes STA2 |
|
| 153 |
- #0000 ;asma-trees/macros STA2 |
|
| 154 |
- |
|
| 155 |
-@asma-init-assembler-pass ( -- ) |
|
| 156 |
- ;asma/pass LDA #01 ADD ;asma/pass STA |
|
| 157 |
- #00 ;asma/state STA |
|
| 158 |
- #0000 ;asma/addr STA2 |
|
| 159 |
- #0100 ;asma/written-addr STA2 |
|
| 160 |
- #0001 ;asma/line STA2 |
|
| 161 |
- JMP2r |
|
| 187 |
+( |
|
| 188 |
+ Assemble a chunk of source code, which begins with whitespace or the start |
|
| 189 |
+ of a token and is divided up into tokens separated by whitespace. If the |
|
| 190 |
+ chunk ends with whitespace, assembled-up-to-ptr* will equal ptr* + len* and |
|
| 191 |
+ every token in the chunk will have been assembled. If the chunk ends with a |
|
| 192 |
+ non-whitespace character, assembled-up-to-ptr* will point to the beginning |
|
| 193 |
+ of the last token in the chunk. |
|
| 194 |
+) |
|
| 162 | 195 |
|
| 163 | 196 |
@asma-assemble-chunk ( ptr* len* -- assembled-up-to-ptr* ) |
| 164 | 197 |
OVR2 ADD2 #0001 SUB2 SWP2 STH2k |
| ... | ... |
@@ -191,7 +224,7 @@ |
| 191 | 224 |
POP POP2 POP2 |
| 192 | 225 |
JMP2r |
| 193 | 226 |
|
| 194 |
-@asma [ &pass $1 &state $1 &line $2 &token $2 &orig-token $2 &heap $2 &addr $2 &written-addr $2 &flush-fn $2 &error $2 ] |
|
| 227 |
+@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 ] |
|
| 195 | 228 |
@asma-trees [ &labels $2 ¯os $2 &opcodes $2 &scope $2 ] |
| 196 | 229 |
|
| 197 | 230 |
( |