8

The Fairchild F8 CPU, the F3850, has 64 scratchpad registers.

The first 12 of these are directly addressable by several instructions. For example, the opcodes $CX add the contents of scratchpad register X to the accumulator, for values from $0 through $B.

Scratchpad registers 12, 13 and 14 are not addressable this way; the corresponding opcodes instead indirectly accesses the scratchpad register currently addressed by the ISAR (Indirect Scratchpad Addressable Register). For example, opcode $CC does not add scratchpad 12 to the accumulator, but instead it adds whichever scratchpad register is currently addressed by ISAR. $CD does the same but post-increments ISAR, and $CE post-decrements ISAR instead.

So what about opcode $CF? One would think that it would add scratchpad register 15 to the accumulator, since there are no more special addressing modes for ISAR. This opcode table I found seems to suggest that's the case.

However, the F8 Guide to Programming says otherwise in Appendix D:

Scratchpad register addressing

This instead suggests that 15 can't be accessed directly like this, implying that $CF perhaps simply is an illegal opcode.

Note that scratchpad register 15 has an alternate name, QL, which is used in opcodes $03 and $07 which are LR A,QL and LR QL,A respectively. So the effects of $4F and $5F, which would be LR A,15 and LR 15,A respectively, are already covered there. So either $4F and $5F are illegal but covered elsewhere, or they have the exact same effect as those other opcodes.

So who is right? Can scratchpad register 15 be directly addressed or not (either undocumented or not)? And if not, do the corresponding opcodes have any effect?

  • 1
    Now, that's an interesting question. Essentially it should happen with all scratchpad instructions. All defined with SREG: DS; LR A; AS; ASD; XS and NS. – Raffzahn Jun 21 at 21:38
  • 1
    The opcode table you found only defines 'r' for 0-14 (See "Scratchpad addressing as: "). What happens when 15 is used is thus undefined according to that too – secondperson Jun 22 at 20:37
  • (What actually happens when you use 15 on a F8 cpu is still an interesting question, though - just keep in mind that both sources agree it's undefined) – secondperson Jun 22 at 20:39
  • @secondperson Oh, hmm. So it does, I see that now. I was focusing on the nibble saying xxxx, but you're right, under "Scratchpad addressing as:" it doesn't list 15. Thanks for pointing that out! – tobiasvl Jun 22 at 20:46
  • @secondperson There's in fact also a link to this table, which in fact says that these opcodes function as NOP: nyx.net/~lturner/public_html/F8_ins.html – so that settles it, I guess! You should write up an answer! Otherwise I'll self-answer later myself. – tobiasvl Jun 22 at 20:56
5

As pointed out in the comments to my question, the VESWiki opcode table I linked to only defines operations for scratchpad registers 0 through 14. So it is in fact consistent with the F8 Guide to Programming.

I also found another source confirming this, the Mostek 3870/F8 Microcomputer Data Book (the 3870 was the single-chip implementation of the 3850, and as far as I can tell they operated the same way):

enter image description here

And even more definitely stating that the opcode is indeed illegal:

enter image description here

As for what these illegal opcodes actually do, I found a link to Lowell O. Turner's F8 table, which (while not being a primary source) says the following:

1111 NOP With this value, no operation is performed

| improve this answer | |
  • Wunderbar. Danke. – Raffzahn Jun 29 at 21:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.