1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,14 @@ |
1 |
+%swap2 { SWP SWP2 } |
|
2 |
+%swap4 { swap2 swap2 } |
|
3 |
+%swap8 { swap4 swap4 } |
|
4 |
+%swap16 { swap8 swap8 } |
|
5 |
+ |
|
6 |
+%NOPa2r { NOP2r } |
|
7 |
+ |
|
8 |
+;Hello { world 2 there 1 testing 10 } |
|
9 |
+ |
|
10 |
+( references to variables (e.g. Hello.world) not implemented yet ) |
|
11 |
+ |
|
12 |
+NOPa2r |
|
13 |
+swap16 |
|
14 |
+ |
... | ... |
@@ -3,6 +3,7 @@ |
3 | 3 |
|
4 | 4 |
%HCF { #0000 DIV } |
5 | 5 |
%SHORT_FLAG { #20 } |
6 |
+%RETURN_FLAG { #40 } |
|
6 | 7 |
|
7 | 8 |
( devices ) |
8 | 9 |
|
... | ... |
@@ -23,19 +24,49 @@ |
23 | 24 |
,assembler-heap-start =assembler.heap |
24 | 25 |
#0070 =assembler.addr |
25 | 26 |
|
26 |
- ,$token ^assemble-token JSR |
|
27 |
- ,$token2 ^assemble-token JSR |
|
28 |
- ,$token3 ^assemble-token JSR |
|
29 |
- ,$token4 ^assemble-token JSR |
|
30 |
- ,$token5 ^assemble-token JSR |
|
31 |
- ~assembler.state |
|
27 |
+ ,$read-filename =File.name |
|
28 |
+ #1000 =File.length |
|
29 |
+ #f000 =File.load |
|
30 |
+ |
|
31 |
+ #f000 #1000 ^assemble-chunk JSR |
|
32 | 32 |
HCF |
33 | 33 |
|
34 |
- $token [ 3b Hello 00 ] |
|
35 |
- $token2 [ 7b 00 ] |
|
36 |
- $token3 [ testing 00 ] |
|
37 |
- $token4 [ 30 00 ] |
|
38 |
- $token5 [ 7d 00 ] |
|
34 |
+ $read-filename [ etc/assembler-test.usm 00 ] |
|
35 |
+ |
|
36 |
+@assemble-chunk ( ptr* len* -- 00 if EOF found in chunk |
|
37 |
+ OR assembled-up-to-ptr* 01 if reached end of chunk ) |
|
38 |
+ OVR2 ADD2 STH2 |
|
39 |
+ #0001 SUB2 |
|
40 |
+ |
|
41 |
+ $per-token |
|
42 |
+ DUP2 STH2 |
|
43 |
+ |
|
44 |
+ $loop |
|
45 |
+ #0001 ADD2 |
|
46 |
+ DUP2 PEK2 |
|
47 |
+ #20 GTH ^$loop JNZ |
|
48 |
+ |
|
49 |
+ DUP2 OVR2r STH2r LTS2 ^$valid JNZ |
|
50 |
+ SWP2r POP2r POP2 |
|
51 |
+ STH2r #0001 ADD2 |
|
52 |
+ #01 JMP2r |
|
53 |
+ |
|
54 |
+ $valid |
|
55 |
+ DUP2 PEK2 #00 OVR2 POK2 |
|
56 |
+ STH2r #0001 ADD2 ^assemble-token JSR |
|
57 |
+ ^$per-token JNZ |
|
58 |
+ |
|
59 |
+ POP2 POP2r #00 JMP2r |
|
60 |
+ |
|
61 |
+@assemble-macro ( macro-ptr* -- ) |
|
62 |
+ DUP2 ,strlen JSR2 DUP2 #0000 EQU2 ^$end JNZ |
|
63 |
+ OVR2 ^assemble-token JSR |
|
64 |
+ ADD2 #0001 ADD2 |
|
65 |
+ ^assemble-macro JMP |
|
66 |
+ |
|
67 |
+ $end |
|
68 |
+ POP2 POP2 |
|
69 |
+ JMP2r |
|
39 | 70 |
|
40 | 71 |
@assemble-token ( string-ptr* -- ) |
41 | 72 |
( get location of tree ) |
... | ... |
@@ -628,6 +659,7 @@ |
628 | 659 |
$end |
629 | 660 |
DUP ^$loop JNZ |
630 | 661 |
POP |
662 |
+ ~assembler.state #0c ORA =assembler.state |
|
631 | 663 |
JMP2r |
632 | 664 |
|
633 | 665 |
( |
... | ... |
@@ -656,7 +688,7 @@ |
656 | 688 |
JMP2r |
657 | 689 |
|
658 | 690 |
@macro-} [ 0000 ] [ 0000 ] [ 7d ] |
659 |
- ~assembler.heap DUP2 #f0 ROT ROT POK2 |
|
691 |
+ ~assembler.heap DUP2 #00 ROT ROT POK2 |
|
660 | 692 |
#0001 ADD2 =assembler.heap |
661 | 693 |
~assembler.state #fc AND =assembler.state |
662 | 694 |
JMP2r |
... | ... |
@@ -687,10 +719,40 @@ |
687 | 719 |
JMP2r |
688 | 720 |
|
689 | 721 |
@normal-main |
690 |
- ,$string =Console.string |
|
691 |
- HCF |
|
722 |
+ ~assembler.token |
|
723 |
+ ,opcodes-tree OVR2 #03 ,traverse-tree JSR2 |
|
724 |
+ ^$not-opcode JNZ |
|
692 | 725 |
|
693 |
- $string [ Not 20 implemented 0a 00 ] |
|
726 |
+ ,opcodes-asm SUB2 #0007 DIV2 |
|
727 |
+ SWP2 #0003 ADD2 |
|
728 |
+ $flags |
|
729 |
+ DUP2 PEK2 |
|
730 |
+ DUP #00 EQU ^$end-flags JNZ |
|
731 |
+ DUP #32 NEQ ^$not-two JNZ |
|
732 |
+ POP SWP2 SHORT_FLAG ORA SWP2 #0001 ADD2 ^$flags JMP |
|
733 |
+ $not-two |
|
734 |
+ DUP #72 NEQ ^$not-r JNZ |
|
735 |
+ POP SWP2 RETURN_FLAG ORA SWP2 #0001 ADD2 ^$flags JMP |
|
736 |
+ $not-r |
|
737 |
+ POP POP2 ~assembler.token SWP2 |
|
738 |
+ ^$not-opcode JMP |
|
739 |
+ |
|
740 |
+ $end-flags |
|
741 |
+ POP POP2 |
|
742 |
+ ,write-byte JSR2 |
|
743 |
+ POP |
|
744 |
+ JMP2r |
|
745 |
+ |
|
746 |
+ $not-opcode |
|
747 |
+ POP2 |
|
748 |
+ ,macro-tree SWP2 #ff ,traverse-tree JSR2 |
|
749 |
+ ^$not-macro JNZ |
|
750 |
+ ,assemble-macro JMP2 ( tail call ) |
|
751 |
+ |
|
752 |
+ $not-macro |
|
753 |
+ ( FIXME complain about bad opcode / nonexistent macro ) |
|
754 |
+ POP2 |
|
755 |
+ JMP2r |
|
694 | 756 |
|
695 | 757 |
( |
696 | 758 |
Here's the big set of trees relating to labels. Starting from l-root, all |