8088 vs. 80c88

les at frii.com les at frii.com
Mon Feb 23 12:22:44 CST 2009


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





More information about the cctech mailing list