On 4/21/2006 at 12:49 PM Holger Veit wrote:
what brand of
chip, etc. so I've never been really tempted to use them
I know of a least one
software (which I had disassembled myself for
curiosity long ago) that actually uses undocumented Z80 instructions,
namely the ones that allow access to the higher and lower haves of the
index registers: this is the 12K-Zapple-Basic by TDL. Concerning these
instructions, they seem to work on most common Z80s, including Z80A, B,
and H variants, tried those myself. I haven't verified, due to lack of
HW, where they also work on the 64180, the z180 or z280.
Those upper-lower IX/IY undocumented instructions seem to be very
straightforward. DD/FD prefixes simply indicate whether IX or IY should be
used in place of HL. Undocumented EDs on the Z80 are another kettle of
fish, however.
On the 8085, one important use of RIM and SIM is handling of TRAP
conditions. I've got a system here that uses TRAP to diagnose accesses of
non-existent peripherals and memory parity errors as well a keyboard entry
akin to (Ctrl+Alt+Del).
Out of curiosity, I got my old Grid laptop with a NEC V30 CPU out and
started to try some of the "undocumented" 8085 opcodes on it. Well, the
few that I've tried aren't no-ops, but on the the other hand, they don't do
anything particularly exciting. For example, 28 seems to be identical in
operation to DAD H (29), while 38 seems to act identically to INR H (24).
FD appears to read the next byte and use it to set or clear the parity and
half-carry flags. My guess is that part of the CPI instruction logic's
being used, although the other flags (C, Z and S) don't seem to be
affected. I haven't tried any others--it's pretty obvious that undefined
opcodes in V30 8080 emulation mode simply take flying leaps into the logic
array. How this compares with, say, a NEC C8080A is something that I'm not
equipped to answer.
After all these years, I'm still not certain that those who exploited the
undocumented instructions in any of these chips saved much in the way of
speed or space. About the only significant exception I can think of is the
80286 LOADALL instruction, which was only semi-documented by Intel.
Cheers,
Chuck