
For backwards compatibility, we will still support the “I” register with its ability to modify numbered memory registers, but those numbers will be converted to strings. We will, therefore, allow any number of memory registers, keyed against a string name. Naturally, in a Lisp program, we’re not memory-constrained to the degree that the HP-67 is. A value on the interval 20-24 references the registers “A” through “E”, and a value of 25 references the “I” register itself. A value on the interval 10-19 references the secondary memory 0 through 9. When the indirection register is used to refer to memory registers, a value on the interval 0-9 references the primary memory 0 through 9. The indirection register holds floating-point values, but only the integer value is used for indirection operations. It is unlikely that the user of the calculator would ever use “I” in interactive use of the calculator, but the indirection register is very useful for writing programs on the calculator. The “I” register can be used to supply integer arguments to certain other operations, like setting display width, referencing memory, or branching in programs. The registers “A” through “E” are just normal memory, but the indirection register “I” is special. However, the statistical operations use the secondary registers as their accumulator space, so some care has to be taken with them. The secondary registers are protected, many memory operations can’t touch them until they are swapped with the primary registers. There are registers 0 through 9, secondary registers 0 through 9, registers “A” through “E”, and special register “I”. However: The small performance drop must be weighed against the benefits of virtual memory, which are too numerous to list here.The HP-67 calculator, naturally, has memory into which numbers can be stored. Perhaps you can sabotage the OS by allocating 4k chunks from mmap, in which case the TLB misses might be felt with only a few megs of working set, depending on your processor. If your operating system allows "big pages", the TLB might be able to cover a very large address space indeed.

However, the cost of the check is very small.

It's not just for pointer indirection, but any memory access (other than, say, DMA). Yes, you are paying the price for that extra check.
