home .. forth .. misc mail list archive ..

P21 quirks


Intro: Last week, I sent several messages to this list, but none of
them were distributed properly.  This is because the address which I'm
mailing from is not the same as the address I'm subscribed to the list
from.

I believe this is to prevent Cantor&Siegal (sp?) type list spamming.
[In my opinion, it would be better to have an openly declared policy
that this list accepts advertising at the rate of $5000/ad, with a
discount, perhaps 33%, if prior arrangements have been made with the
list administrator.]

Anyways, this is an attempt to work around this restriction by placing
my official list subscription address in the From: line.  If I don't
receive this message on the list in an hour or so, I'll try something
else.

Real message: The MuP21 has a few rather non-obvious quirks.

Consider this instruction sequence:
a!  @+  a   dup
dup -or com nop
+

This is a distillation of the steps used to increment then decrement
the stack pointer.  Let's say that TOS is set to pattern 000001, and
that the corresponding memory is set to the pattern 12345.  Here's an
image of what I'd expect in the stack for the above instructions:

000001
	a!
	@+
012345
	a
012345
000006
	dup
012345
000006
000006
	dup
012345
000006
000006
000006
	-or
012345
000006
000000
	com
012345
000006
1FFFFF
	nop
012345
000006
1FFFFF
	+
012345
0AAAAb

Something's not right.  And, I think it's the generation of the -1.
If I change the instruction sequence to
a!  @+  a   n
AAAAA
com nop nop +

I get the following sequence of stack images:
000001
	a!
	@+
012345
	a
012345
000006
	n
012345
000006
0AAAAA
	com
012345
000006
155555
	nop
012345
000006
155555
	nop
012345
000006
155555
	+
012345
000001

Yet, apparently, there's no problem with the word pair:

': doLIST
   pop a pop nop
   a! @+ drop !		\ note, uses @+ to increment R stack pointer
   a push nop a!
   @+ push ;'

CODE EXIT
   pop nop a! @
   a dup dup -or
   com nop nop +	\ note, dup dup -or com + to decrement R stack pointer
   push nop a! @+
   push ;'

The only alternative that I can see would be that @+ does something
wierd to a -- but this would mean that in the seqence !+ !+ !+ !+ data
would be written to on totally separate data pages.  And that would
break the video drive code that I've seen.

Anyone have a clue what's going on?

Thanks,

Raul D. Miller