| 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 |