CamelForthRebuildANS - nealcrook/multicomp6809 GitHub Wiki

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:

  1. a metacompiler (called "chromium") which has the ability to create a memory image of a new FORTH (CamelForth) for a target system
  2. 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
  3. 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

Do I need to do this?

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.

⚠️ **GitHub.com Fallback** ⚠️