Re: Understanding the x18 instruction jump table

John Drake <[email protected]>
Newsgroups gmane.comp.lang.forth.colorforth
Message-ID <[email protected]>

--- Helen Austin <[email protected]> wrote:

> On 6/13/06, John Drake <[email protected]> wrote:
> > : inst ( n ) 1 slot +! 1f and jump jmp jmp call
> call
> > jz jz jns jns @b @+ n @a !b !+ nul !a -x 2*x 2/x
> +*
> > orx andx nul +x r@ a@ t@ s@ r! a!x nul t!
> >
> > Why are the opcodes jmp, call and jns repeated?
> 
> At a guess, because the LSB of those four
> instructions (call, jmp, jz,
> jns) either affects their operation or is ignored
> when decoding them.
> Note that after "1f and jump" there are exactly 32
> words - one for
> every 5-bit opcode, I'd guess.
> 
> Helpful?
> 
> Regards
> Helen

Hello Helen,

I'm aware of the "32 words - one for every 5-bit
opcode" part.  I guess that's why I found the 
repeated instructions a bit odd.  It's also 
different from what was reported in Chuck's
paper on the subject.

http://dec.bournemouth.ac.uk/forth/euro/ef01/moore01b.pdf

: inst ( n ) 1 slot +! 1f and jump ret nul call
jmp nul nul jz jns n @+ @b @a !r !+ !b !a 
+* 2* 2/ - + and or drop dup over pop a nul
b! push a!

These correspond 1 to 1 to the instruction table
listed in the c18 compiler paper.

http://dec.bournemouth.ac.uk/forth/euro/ef01/moore01a.pdf

It's interesting to note that in the version from
the paper there are 4 nuls in the jump table.
In the source there's only 3.  Also the jump
table from the paper includes a "ret" instruction.
The source version does not, even though "ret"
is defined as an instruction.  Also "!r" is 
absent.  So 3 nuls minus 2 "missing" 
instructions plus 3 "repeated" instructions
equals 4 nuls in the jump table in the paper.
My conclusion?  The repeated instructions might
as well be nulls.  (Admittedly I could be wrong
on that).

As for the "missing" instructions, well it seems
"@r" had already been dropped since its missing
from the c18 compiler paper, so I suppose losing
"!r" isn't a biggie.  While there's no "ret" in
the jump table, there is a ";" word defined for
the x18 compiler.

: ; 4 [ ip ] +! ;

I'm not sure at the moment how this is supposed
to work.  Most of the other instructions 
actually compile something into a "slot" but
this is saying increment the IP by 4.  How does
that execute a return?

One more note.  I got my "mini decompiler" to
work.  Now I can step through the example code
from block 114:

( 25x rom ) 180 org 0 dup - dup - dup - dup - 
dup - dup - dup - dup - dup push push push 
push push push push push push a! a nop 

So instead of just seeing the stack grow, I
can actually see the opcode that was just
executed.  Of course I still have no idea 
what this code is actually supposed to do.

So, has anyone else been experimenting with
the X18 compiler/simulator?

Regards,

John M. Drake

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.