1) I can attest that the V20 runs cp/m80 (2.2), wordstar, word master,
asm, mac, load, ddt, collasal cave adventure, logicalc. I just verified
these things yesterday.
2) Here's the one with JRT Pascal (IIRC):
LXI SP,LABELX
CALL LABELX
LABELX:
...
Does the 8080 decrement the sp before it pushes the return address, or
after. If its after, that code would of course not work. I can't
remember which order that happens in, although I suspect that it
decrements before pushing.
Another possibility (seems more likely) is that the loading of the stack
pointer is not finished before the next instruction is executed. I am
trying to remember which register was used for the sp in the emulation
mode. (I think it may be BP????) In this case, as long as some
instruction gets executed between lxi sp,xxxx and the first push/pop/call,
it may not show up.
In any case, this seems like a rare issue, as most programs (thats a big
undefensable statement) would set the sp when they start, and then leave
it alone.
Related, I found a bug in Spellstar for DOS. It worked fine on an 8088 or
80286, but crashed on a 386 (it could have been a 486).
Here is what the code did:
100 mov dx, address of routine to jump to
103 mov [121],dx
..
..
..
..
..
120 jmp 0000
This little piece of self modifying code worked great until the
instruction queue in the cpu became large enough that the jump instruction
was already in the pipeline before it was modified with the desired
address.
I was able to fix this with a jmp dx instruction, but compilers do
generate odd code sometimes. The question becomes, did the 386 have a
bug, or is this just a software issue?
Les