-
Notifications
You must be signed in to change notification settings - Fork 17
CamelForthRebuildANS
This page describes how to rebuild CamelForth from source using gforth. It assumes that you are using Linux.
see also: CamelForthRebuild
You will need:
- gforth - install it from your package manager
- a checkout of the github repository multicomp6809
Change directory to the multicomp6809/camelforth directory. You should have the files chromium_ans.scr and gforth_shim.fs (latest versions)
Type this sequence of commands:
gforth gforth_shim.fs
bye
ls -al 6809M.HEX
The whole session should look like this:
$ gforth gforth_shim.fs
redefined cell with CELL redefined offset with OFFSET redefined thru with THRU redefined defined with DEFINED
24 <0>
19 <0>
1A <0>
4 <0>
5 <0>
6 <0>
7 <0>
30 <0> ASSEMBLER META Forth Root ASSEMBLER
1F <0>
20 <0>
21 <0>
22 <0>
23 <0>
24 <0>
25 <0>
26 <0>
27 <0>
28 <0>
29 <0>
2A <0>
2B <0>
2C <0> META Forth Root META
8 <0>
9 <0>
10 <0>
11 <0>
12 <0>
13 <0> -><1> 140141022826824
14 <0>
15 <0>
16 <0>
17 <0>
18 <0>
19 <0> redefined LOAD redefined THRU
20 <0> redefined ( redefined \
21 <0> META Forth Root META
22 <0>
23 <0>
46 <0>
2F <0>
30 <0>
64 <0>
41 <0>
42 <0>
43 <0>
44 <0>
45 <0>
46 <0>
47 <0>
48 <0>
49 <0>
4A <0>
4B <0>
4C <0>
4D <0>
4E <0>
4F <0>
50 <0>
51 <0>
52 <0>
53 <0>
54 <0>
85 <0>
56 <0>
57 <0>
58 <0>
59 <0>
5A <0>
5B <0>
5C <0>
5D <0>
5E <0>
5F <0>
60 <0>
61 <0>
62 <0>
63 <0>
64 <0>
65 <0>
66 <0>
67 <0>
68 <0>
69 <0>
6A <0>
6B <0>
6C <0>
6D <0>
6E <0>
6F <0>
70 <0>
71 <0>
72 <0>
73 <0>
74 <0>
75 <0>
76 <0>
50 <0>
33 <0>
34 <0>
35 <0>
36 <0>
37 <0>
38 <0>
39 <0>
3A <0>
3B <0>
121 <0>
7A <0>
7B <0>
7C <0>
7D <0>
7E <0>
7F <0>
IRET : value= FF8C fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
ENTRY : value= FF7E fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
LIST : value= FF49 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ltop : value= FF27 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
EMPTY-BUFFERS : value= FF13 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UPDATE : value= FEDC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FLUSH : value= FEC4 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SAVE-BUFFERS : value= FEA5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BUFFER : value= FE07 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BLOCK : value= FDED fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
asnblk : value= FD70 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
bufwr : value= FD3A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
bufrd : value= FD11 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
buf2sd : value= FCE2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
buf2a : value= FCC8 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
curbuf : value= FCA5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
nxtbuf : value= FC65 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BBBASE : value= D000 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
RDBLOB : value= FBD1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
WRBLOB : value= FB87 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FIXBLOB : value= FB61 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
RMBLOB : value= FB3C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BLOB : value= FAF9 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BADLD : value= FAD3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BADSIZ : value= FAA7 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BADMAG : value= FA73 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BADBLOB : value= FA4B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FUZIX : value= FA24 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
NITROS9 : value= F9B5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FLEX : value= F988 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BUGGY : value= F95A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDFORTH : value= F947 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BASIC : value= F932 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDBOOT : value= F8FD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
CUBIX : value= F8CD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
CDTOCD : value= F8B6 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
EFTOCD : value= F89E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MMUMAP : value= F866 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
PIVOTRST : value= F842 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
PIVOT : value= F820 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
piv : value= F7DB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDWRZ : value= F796 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDWRn : value= F76D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDRD256n : value= F744 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDRD256 : value= F6CC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDRDn : value= F6A1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDWR : value= F656 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDRD : value= F60C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDIDLE : value= F5EC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDLBA10 : value= F5C4 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SDLBA2 : value= F5AF fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
PASSES : value= F58F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
PASS : value= F579 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TSTUPI : value= F543 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TSTUP : value= F50D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
STUPI : value= F4EC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
STUP : value= F4CD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DUMP : value= F461 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.A : value= F435 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.B : value= F421 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.HHHH : value= F3F3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.HH : value= F3D8 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.H : value= F3AD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
#INIT : value= FF95 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
UINIT : value= FFA2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
COLD : value= F373 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MARKER : value= F344 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
h. : value= F413 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
.S : value= F312 fwdlist= 0 put=,!XT comp=M,REF exec=.S
WORDS : value= F2E8 fwdlist= 0 put=,!XT comp=M,REF exec=WORDS
ENVIRONMENT? : value= F2D5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DEPTH : value= F2B7 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MOVE : value= F28C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
WITHIN : value= F274 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
POSTPONE : value= F23C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
RECURSE : value= F18C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
[CHAR] : value= F103 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
CHAR : value= F0ED fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ABORT" : value= F0C2 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
?ABORT : value= F0A8 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
QUIT : value= F051 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
EVALUATE : value= F01F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ABORT : value= F094 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
INTERPRET : value= EFB5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?NUMBER : value= EF6E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>NUMBER : value= EF2F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?SIGN : value= EEF8 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DIGIT? : value= EEBD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
LITERAL : value= EE9F fwdlist= 0 put=,!XT comp=M,REF exec=TLITERAL
FIND : value= EE34 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
IMMED? : value= EE20 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
NFA>LFA : value= EDF3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>COUNTED : value= ED8C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
/STRING : value= ED70 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SOURCE : value= ED5D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
. : value= ECC3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
U. : value= ECAC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SIGN : value= EC96 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
#> : value= EC7E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
#S : value= EC68 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
# : value= EC52 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>DIGIT : value= EC33 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
<# : value= EC1F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
HOLD : value= EC07 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UD* : value= EBE9 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UD/MOD : value= EBCA fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
." : value= EBB4 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
S" : value= EB96 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
(S") : value= EB80 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TYPE : value= EB56 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ACCEPT : value= EAFE fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UMAX : value= EAE4 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UMIN : value= EACC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SPACES : value= EAB0 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SPACE : value= EA9E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
CR : value= EA85 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
COUNT : value= EA73 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2OVER : value= EA5A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2SWAP : value= EA45 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2DROP : value= EA24 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2! : value= EA0D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2@ : value= E9F9 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MIN : value= E9E3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MAX : value= E9CC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
*/ : value= E9BD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
*/MOD : value= E9AB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
MOD : value= E99A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
/ : value= E98B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
/MOD : value= E97A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
* : value= E96A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FM/MOD : value= E941 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SM/REM : value= E913 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2DUP : value= EA34 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
M* : value= E8F1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DABS : value= E8E3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?DNEGATE : value= E8CF fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DNEGATE : value= E8B1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ABS : value= E89E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?NEGATE : value= E88B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
S>D : value= E878 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
R0 : value= E86D fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
L0 : value= E863 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
PAD : value= E859 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
S0 : value= E84E fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
HP : value= E83A fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
'SOURCE : value= E830 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
STATE : value= E821 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
>IN : value= E814 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BSTATE : value= E7FB fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BLKADRS : value= E7ED fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
SCR : value= E7DE fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BLK : value= E7D3 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
DP : value= E7C8 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BASE : value= E7BE fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
U0 : value= E7B2 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
TIB : value= E7A8 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
TIBSIZE : value= E79D fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BL : value= E78E fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
+LOOP : value= E772 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
LOOP : value= E75F fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
ENDLOOP : value= E741 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
LEAVE : value= E71E fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
DO : value= E703 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
L> : value= E6EB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
LP : value= E844 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
>L : value= E6D5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
REPEAT : value= E6C5 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
WHILE : value= E6B5 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
AGAIN : value= E6A0 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
UNTIL : value= E68B fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
BEGIN : value= E67C fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
ELSE : value= E65F fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
THEN : value= E64D fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
IF : value= E635 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
USER : value= E61C fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
VARIABLE : value= E60A fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
CONSTANT : value= E5EE fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
REVEAL : value= F1E2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
HIDE : value= F1C2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
NFA>CFA : value= EE08 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
LATEST : value= E809 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
<DODOES> : value= E585 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
!DEST : value= E57E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
,DEST : value= E56F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
,BRANCH : value= E560 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
,EXIT : value= E54B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
!COLON : value= E532 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
,CF : value= E51A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
!CF : value= E503 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
COMPILE, : value= E4F6 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>BODY : value= E4E6 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SCAN : value= E485 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SKIP : value= E46B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SKIPDONE : value= E45C fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
SKIPEXIT : value= E45A fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
CMOVE> : value= E43D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
CMOVE : value= E418 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
S= : value= E3E7 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
FILL : value= E3CD fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UM/MOD : value= E393 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UM* : value= E35A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
J : value= E34C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
I : value= E340 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
(+LOOP) : value= E330 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TAKELOOP : value= E315 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
(LOOP) : value= E30C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
UNLOOP : value= E2FF fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
(DO) : value= E2E5 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?BRANCH : value= E2CB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
BRANCH : value= E2BC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
U> : value= E2AB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
U< : value= E29E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
> : value= E291 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
< : value= E285 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
<> : value= E279 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
= : value= E26C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
0< : value= E261 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TOSTRUE : value= E253 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
0= : value= E24D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
RSHIFT : value= E238 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
LSHIFT : value= E21F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
+! : value= E20A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2/ : value= E201 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
2* : value= E1F8 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
1- : value= E1EE fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
1+ : value= E1E4 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>< : value= E1DB fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
INVERT : value= E1D2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
XOR : value= E1C3 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
OR : value= E1B7 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
AND : value= E1AC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
NEGATE : value= E19F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
- : value= E18D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
M+ : value= E17D fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
+ : value= E174 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
RP! : value= E137 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
RP@ : value= E12B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SP! : value= E11F fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SP@ : value= E113 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
R@ : value= E107 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
R> : value= E0FC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
>R : value= E0F1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
PICK : value= E0E6 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
TUCK : value= E0D7 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
NIP : value= E0CC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
ROT : value= E0BC fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
OVER : value= E0B0 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
SWAP : value= E0A1 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DROP : value= E096 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
?DUP : value= E085 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DUP : value= E07A fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
EXECUTE : value= E06E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
<DOCREATE> : value= E045 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
<DOCOLON> : value= E03F fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
EMIT : value= E031 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
KEY? : value= E01C fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
KEY : value= E006 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
VDUDAT : value= FFD1 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
VDUCMD : value= FFD0 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
WORD : value= EDA2 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DP-INIT : value= 0 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
UP-INIT-HI : value= 6 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
UP-INIT : value= 600 fwdlist= 0 put=,!XT comp=,EQU exec=@EQU
\ : value= F127 fwdlist= 0 put=,!XT comp=M,REF exec=\
( : value= F116 fwdlist= 0 put=,!XT comp=M,REF exec=(
DECIMAL : value= ECE8 fwdlist= 0 put=,!XT comp=M,REF exec=decimal
HEX : value= ECFB fwdlist= 0 put=,!XT comp=M,REF exec=hex
ALIGNED : value= E4A2 fwdlist= 0 put=,!XT comp=M,REF exec=TALIGNED
ALIGN : value= E4AC fwdlist= 0 put=,!XT comp=M,REF exec=TALIGN
CHAR+ : value= E4CF fwdlist= 0 put=,!XT comp=M,REF exec=TCHAR+
CHARS : value= E4DC fwdlist= 0 put=,!XT comp=M,REF exec=TCHARS
CELL+ : value= E4B6 fwdlist= 0 put=,!XT comp=M,REF exec=TCELL+
CELLS : value= E4C3 fwdlist= 0 put=,!XT comp=M,REF exec=TCELLS
CELL : value= E784 fwdlist= 0 put=,!XT comp=M,REF exec=<noname>
['] : value= F222 fwdlist= 0 put=,!XT comp=M,REF exec=T[']
' : value= F0D3 fwdlist= 0 put=,!XT comp=M,REF exec=T'
CREATE : value= F161 fwdlist= 0 put=,!XT comp=M,REF exec=TCREATE
ALLOT : value= ED20 fwdlist= 0 put=,!XT comp=M,REF exec=TALLOT
HERE : value= ED0F fwdlist= 0 put=,!XT comp=M,REF exec=THERE
C, : value= ED43 fwdlist= 0 put=,!XT comp=M,REF exec=TC,
, : value= ED2D fwdlist= 0 put=,!XT comp=M,REF exec=T,
THRU : value= FE83 fwdlist= 0 put=,!XT comp=M,REF exec=THRU
C! : value= E150 fwdlist= 0 put=,!XT comp=M,REF exec=TC!
LOAD : value= FE1B fwdlist= 0 put=,!XT comp=M,REF exec=load
C@ : value= E169 fwdlist= 0 put=,!XT comp=M,REF exec=TC@
! : value= E141 fwdlist= 0 put=,!XT comp=M,REF exec=T!
@ : value= E15E fwdlist= 0 put=,!XT comp=M,REF exec=T@
] : value= F1AE fwdlist= 0 put=,!XT comp=M,REF exec=T]
[ : value= F19D fwdlist= 0 put=,!XT comp=M,REF exec=T[
DOES> : value= E5B2 fwdlist= 0 put=,!XT comp=M,REF exec=TDOES>
IMMEDIATE : value= F205 fwdlist= 0 put=,!XT comp=M,REF exec=TIMMEDIATE
; : value= E5D8 fwdlist= 0 put=,!XT comp=M,REF exec=T;
: : value= E5C7 fwdlist= 0 put=,!XT comp=M,REF exec=T:
(DOES>) : value= E59B fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DODOES : value= E585 fwdlist= 0 put=,!JSR comp=M,REF exec=.UNDEF
EXIT : value= E054 fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DOCOLON : value= E03F fwdlist= 0 put=,!CF comp=M,REF exec=.UNDEF
LIT : value= E05E fwdlist= 0 put=,!XT comp=M,REF exec=.UNDEF
DOCREATE : value= E045 fwdlist= 0 put=,!CF comp=M,REF exec=.UNDEF Gforth 0.7.2, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
bye
$ ls -al 6809M.HEX
-rw-rw-r-- 1 me me 23053 Jan 4 19:33 6809M.HEX
$
The source code is arranged in a set of "screens" each of which is 1Kbytes. Before typing "bye" you can type "DECIMAL 45 LIST" to see the load screen (the screen that pulls in all the other screens). The message eg "6F <0>" is a diagnostic message to indicate that the stack is empty (as it should be) at the end of -- in this case -- loading screen 111. The subsequent output is a diagnostic symbol table (a dump of the mirror words), enabled by setting the flag EVERYONE to 1 in screen 23.
The source file gforth_shim.fs performs a set of fix-ups that make the environment look a little more F83-like to the chromium_ans.scr source file.
- There are still a couple of bugs in my ANSification of the Chromium meta-compiler. However, the features that do not work are not used in the creation of this binary, so the bugs remain latent: the HEX/binary produced by chromium_ans.scr and gforth is identical to the HEX/binary produced by chromium.scr and F83.
The source file "chromium_ans.scr" (run it through multicomp6809/bin/forth_block2ascii to inspect it/print it more easily) contains FORTH code that runs on F83 (the host system). It is sufficiently similar to chromium.scr that you can perform a diff on the (ascii extracted) two files (29 differences).
The code (both chromium_ans.scr and chromium.scr) has 3 separate elements:
- a metacompiler (called "chromium") which has the ability to create a memory image of a new FORTH (CamelForth) for a target system
- a 6809 assembler, allowing definitions for the target system to be written in assembler (needed for some of the very low-level components of the target FORTH system
- CamelForth itself, written in a combination of 6809 assembler and FORTH
The "meta" part of all of this is that a lot of the FORTH definitions are in terms of other previously-defined definitions. Each definition that is created has to have some kind of presence both in the host system and in the target system.
The final result is a memory image (for the target system) that gets written out as a HEX file designed to execute from ROM. The target system does not include the assembler. One of my early goals was to add it in, but I soon realised that there was not enough free space in the ROM to hold it. I made other enhancements instead, focussed on using the SD card to load and store FORTH source and precompiled blobs of FORTH code. As a result, the current ROM for multicomp09 has ~16 bytes of free space.
You can use the ROM-based commands to inspect source code (stored on the SD Card) or to compile a bunch of utilities -- including an editor -- which are stored on the SD card. See CamelForth#editor-and-utilities-for-camelforth
There should be no need to rebuild the code from source. Because there is very little free space in the ROM (as mentioned above) it's best to make extensions through files stored on SD Card in source or binary (precompiled) form.