X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;ds=sidebyside;f=jonesforth.f;h=e5718ea59f458e8dcf62b7d4b32d409161fdd28f;hb=092aa5189f24fbfb1714c1d2d31c26a666102c3c;hp=82642f1d0ed874154a5869c5fe8afe5599c4371f;hpb=ac014bc0a927ca7ab4177636056fd267384a8f47;p=rrq%2Fjonesforth.git diff --git a/jonesforth.f b/jonesforth.f index 82642f1..e5718ea 100644 --- a/jonesforth.f +++ b/jonesforth.f @@ -2,7 +2,7 @@ \ A sometimes minimal FORTH compiler and tutorial for Linux / i386 systems. -*- asm -*- \ By Richard W.M. Jones http://annexia.org/forth \ This is PUBLIC DOMAIN (see public domain release statement below). -\ $Id: jonesforth.f,v 1.15 2007-10-11 07:39:51 rich Exp $ +\ $Id: jonesforth.f,v 1.17 2007-10-12 20:07:44 rich Exp $ \ \ The first part of this tutorial is in jonesforth.S. Get if from http://annexia.org/forth \ @@ -822,6 +822,10 @@ Notice that the parameters to DUMP (address, length) are compatible with string words such as WORD and S". + + You can dump out the raw code for the last word you defined by doing something like: + + LATEST @ 128 DUMP ) : DUMP ( addr len -- ) BASE @ ROT ( save the current BASE at the bottom of the stack ) @@ -1705,6 +1709,10 @@ DECIMAL : C@++ INLINE DUP INLINE 1+ INLINE SWAP INLINE C@ ;CODE + One interesting point to note is that this "concatenative" style of programming + allows you to write assembler words portably. The above definition would work + for any CPU architecture. + There are several conditions that must be met for INLINE to be used successfully: (1) You must be currently defining an assembler word (ie. : ... ;CODE). @@ -1734,7 +1742,7 @@ DECIMAL ( (INLINE) is the lowlevel inline function. ) : (INLINE) ( cfa -- ) - @ ( codeword points to the code, remember ) + @ ( remember codeword points to the code ) BEGIN ( copy bytes until we hit NEXT macro ) DUP =NEXT NOT WHILE