For example the stack was often referred to as "Kellerstapelspeicher"[1]. The stack pointer was "Kellerstapelspeicherzeiger".
The whole stack terminology revolved around the basement (Keller = cellar) metaphor. For example push was "einkellern" and pop "auskellern". I think this was influenced by Friedrich L. Bauer's work.
[1] The linked manual is quite lax and uses just "Stapelspeicher" and "Stapelzeiger". But at least it has "Stapelzeigeradresse" which is a nice and long compound.
> Klaus Samelson and Friedrich L. Bauer of Technical University Munich proposed the idea of a stack called Operationskeller ("operational cellar") in 1955[6][7] and filed a patent in 1957.[8][9][10][11] In March 1988, by which time Samelson was deceased, Bauer received the IEEE Computer Pioneer Award for the invention of the stack principle.[12][7]
https://en.wikipedia.org/wiki/Stack_(abstract_data_type)#His...
I always assumed the naming confusion for those was just a matter of perspective; if you are thinking about a "download" from the perspective of the PLC receiving the file or the user sending the file.
Because googling for "Kellerstapelspeicherzeiger" yields only a single result which purports the same legend on stackexchange without providing a source and has been downvoted to -3.
As a matter of fact the submission links the full manual and they also just use "Stapelspeicher" and not "Kellerstapelspeicher". And that manual is by Siemens and from the 80s.
"Stapelzeiger" and "Stapelspeicher" otoh yield many results.
Googling for "Kellerstapelspeicher" only yield results for "Keller, Stapelspeicher", indicating that those are not used in one words but are synonyms.
Apart from several humorous mentions over the decades I found one serious reference in an exam text from 1997 [1].
[1] https://www.telle-online.de/fernuni/ruf/klausur/1704-97.html...
[1] https://de.wikipedia.org/wiki/Stapelspeicher [2] https://worldwide.espacenet.com/patent/search/family/0069672...
I wonder how they tested that, though? I don't think developers had to submit their source code to Nintendo, so they would have had to analyse the binaries in some way?
The market was desperate for any kind of standard, but computer manufacturers were rabidly against working with competitors. Then IBM, the gorilla in the room and watched like hawks by everybody, accidentally delivered something open-ish even if ugly. The whole market recrystalized around it, while IBM frantically tried to close the ecosystem and locked themselves out of their own ecosystem. Meanwhile, Microsoft and Intel had no problem with anybody giving them money, developers could deliver 1 version of the application to everyone, and consumers knew what to choose.
I always wonder if something like these undocumented opcodes could be used as a concept in more modern processors. Backend, transistors were a precious resource, and the result was those opcodes. Nowadays, instruction encoding space is more precious because of pressure on the instruction cache. Decoding performance might also be relevant.
The result of these thoughts is something I called "PISC", programmable instruction set computer, which basically means an unchanged back-end (something like RISC + vector) but a programmable decoder in front of it. So then different pieces of code could use different encodings, optimized for each case.
...which you get in RISC with subroutines + instruction cache, if you regard the CALL instructions as "encoded custom instructions", but not quite because CALLs waste a lot of bits, and you need additional instructions to pass arguments.
For pure RISC, all of this would at best take some pressure of the instruction cache, so probably not worth it. Might be more interestring for VLIW backends.
https://developer.arm.com/documentation/dui0473/m/overview-o...
> ARMv4T and later define a 16-bit instruction set called Thumb. Most of the functionality of the 32-bit ARM instruction set is available, but some operations require more instructions. The Thumb instruction set provides better code density, at the expense of performance.
> ARMv6T2 introduces Thumb-2 technology. This is a major enhancement to the Thumb instruction set by providing 32-bit Thumb instructions. The 32-bit and 16-bit Thumb instructions together provide almost exactly the same functionality as the ARM instruction set. This version of the Thumb instruction set achieves the high performance of ARM code along with the benefits of better code density.
So, in summary:
https://developer.arm.com/documentation/ddi0210/c/CACBCAAE
> The Thumb instruction set is a subset of the most commonly used 32-bit ARM instructions. Thumb instructions are each 16 bits long, and have a corresponding 32-bit ARM instruction that has the same effect on the processor model. Thumb instructions operate with the standard ARM register configuration, allowing excellent interoperability between ARM and Thumb states.
> On execution, 16-bit Thumb instructions are transparently decompressed to full 32-bit ARM instructions in real time, without performance loss.
For an example of how loadable microcode worked in practice, look up the Three Rivers PERQ:
https://en.wikipedia.org/wiki/PERQ
> The name "PERQ" was chosen both as an acronym of "Pascal Engine that Runs Quicker," and to evoke the word perquisite commonly called a perk, that is an additional employee benefit
That quote is from the ARM7TDMI manual - the CPU used in the Game Boy Advance, for example. I believe later processors contained entirely separate ARM and Thumb decoders.
[1] https://www.mirrorservice.org/sites/www.bitsavers.org/compon... [2] https://en.wikipedia.org/wiki/AMD_Am2900 [3] https://en.wikipedia.org/wiki/74181
Maybe that was the reason they were undocumented?
It is a side effect of how the instructions are decoded into what parts of the CPU are involved: if this bit is set then affect the X register, unless this other bit is set in which case affect Y, and if one of these bits is set use the ALU, … This results in other instructions magically appearing because it isn't a case of every valid instruction being directly listed¹ and every invalid one having no definition at all. It is also why the opcodes seem strewn around the instructions space arbitrarily, sometimes in obvious groups and sometimes apparently spread widely. And why it is risky to use them: if a later revision of the CPU adds any new instructions, the accidentally useful opcodes could become something quite² different as the designers only need to make sure the official ones keep functioning as they did before.
--------
[0] And probably more current ones too, though I've not kept a close eye on CPU design like the university aged and younger versions of me used did.
[1] There usually isn't a straight table of “this code means do that to that with this and store there” — that would take more silicon, and likely be notably slower, than the pass-the-bits-through-a-bunch-of-logic-gates approach.
[2] Or, perhaps worse, subtly different!
Generally speaking, there are no legal opcodes with both lowest bits set and the decoding triggers for both instructions with either the lowest or the second lowest bit set. (There are some more outside of this pattern, but these result more often in a "jammed" CPU than not.)