Hi, Mac:
"I can see a reason for making use of PPAGE = 0. This is to gain access to the flash memory that underlies the register blocks, and RAM"
No. To use PAGE0, the only thing needed is that the logical addresses fit the PAGE0 range: 0x0000-007F. Whenever the logical addresses are in this range, the CPU read the PAGE0, whith independence of the value on PPAGE register. Same for pages 1 and 3.
"Whether useful or not, PPAGE values of 1 and 3 still locate their data within the paging window, and should remain fully documented"
No; as to my understanding, PPAGE has nothing to do with addressing this pages 1 and 3 either. The only thing needed to address them is to the logical 16 bit addresses covering their respective ranges. Each time the CPU fetches something in this ranges from pages 0, 1 and 3, the acces is done from these pages, no mather what is in the PPAGE register.
This is the only way that interrupts that hit in the middle of a rutine hosted on pages 2, 4, 5, 6 or 7, run without saving PPAGE register. In this case, PPAGE will store the values: 2, 4, 5, 6 or 7 (corresponding to the routine interrupted), and the ISR will be running on pages 0, 1 or 3. As it can be seen, the code is running on pages whose numbers ID are NOT stored on the PPAGE register.
That is why I say that the original drawing is missleading. It shows PPAGE=0 to run code on PAGE 0; PPAGE=1 to run code on PAGE 1, and PPAGE=3 to run code on PAGE 3, and this NOT the case.
And this must be stated as clear as above, in the documentation. And it is not...
Thanks for all of your kind attention.
Regards,
Luis G. Uribe