The HP-20B contains an embedded processor, running custom firmware manufactured by Hewlett-Packard, plus other components (listed below).
Q: What processor are we using?
A: Atmel AT91SAM7L128 ARM7TDMI-core low-power microcontroller in CoB packaging. Datasheet
Q: How fast does it run?
Q: HP says 30MHz. It is PLL controlled.
Battery at 3.0V, maximum speed can be 39.7 MHz. Battery at 2.5V, maximum speed can be 37.5 MHz. Battery at 1.8V, maximum speed can be 30.8 MHz. This might be why HP picked 30MHz.
Q: How much programmable memory do we have to work with, and in what format?
A: 128KB Internal Flash. No EEPROM. 12K Factory-ROM that contains the SAM-BA Boot Assistant and Fast Flash Programming Interface, but since it is ROM it can't be reprogrammed.
Q: How much RAM do we have?
A: 6KB Internal SRAM (Static RAM).
Q: Is any of the RAM battery backed up, or otherwise non-volatile?
A: 2KB is battery-backed. (Can the entire 6kB be battery backed if the CPU is placed in wait mode, instead of off mode? The tradeoff would be increased current consumption when off, as the voltage regulator and core would still be powered, but unclocked. Book shows 9µA in wait mode, as compared to 100nA in off mode.)
Q: What are the LCD display capabilities?
A: Display contains two (2) alphanumeric lines in an LCD display. The first (top) line displays eight (8) characters in a scrolling display feature, plus 11 hard-wired indicators. The second (bottom) line displays 12 characters, plus a three (3) digit superscript display (primarily for showing exponents). The calculator provides an adjustable contrast feature.
Q: Do we have any documentation on how to address the LCD screen?
A: Yes, the SLCDC is covered in the Atmel databook, starting on page 491.
Q: How do we scan the keyboard?
A: It's a 6×7 matrix, so it can be scanned like any matrix keypad.
Q: What is the power source?
A: Power is provided by two (2) CR2032 (or equivalent) batteries. Battery life is estimated at an average of nine months.
Q: How does the calc measure the battery voltage? I don't see any voltage reference for the ADC, and I can't catch the self test accessing the
ADC result registers. (I do see that the brownout detector theshold voltage is programmable. I wonder…could the brownout threshold voltage be swept and code somehow determine when it trips? Hmm. If the brownout reset is disabled, is there any way to catch that a brownout has occured?
If so, maybe that's how the firmware can probe the battery voltage. Seems a little bit too clever.)
A: It uses the Programmable Brown-Out Detector to generate an interrupt. The voltage reference is VDDcore. See SRAM resident battery level display demo for proof.
(feel free to fill in additional questions and answers anyone!)