# HP Forums

Full Version: HP-71B CPU frequency?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

I'm just wondering about the CPU frequency of real HP-71B?

At the 71IDS vol. 3 document in the =RCKBp entry header is a remark: "note: CPU KHZ is usually 650000 to 700000."

But my experiences show a CPU speed below.

The theoretical speed of Emu71/Win with "Authentic Speed" mode activated is 38 * 16384 = 622592 Hz.

But thank goodness the HP-71B ROM has a CPU speed measuring routine inside which is updated at power on/off or after a INIT:1. The clock speed is standing inside the CSPEED variable (5 nibble) at address 2F977.

So we can read the content with

PEEK\$("2F977",5)

In the case of Emu71/Win the result is "9A790". This is a hexadecimal number in reverse order and multiplied with 16 you get the clock speed in Hz.

In our Emu71/Win example:

```PEEK\$("2F977",5) = "9A790"
-> #097A9h * 16 = #097A90h = 621200 Hz```
Now to my two real HP71B:
```Sn. 2507Axxxxx ROM rev. 1BBBB:
PEEK\$("2F977",5) = "9E990"
-> #099E9h * 16 = #099E90h = 630416 Hz
Sn. 2506Axxxxx ROM rev. 1BBBB:
PEEK\$("2F977",5) = "16790"
-> #09761h * 16 = #097610h = 620048 Hz```

We see that the results of the real calculators are very similar to the Emu71/Win one and far away from the note inside the 71IDS.

I would be glad if some of you could measure the CPU speed in the way like above on your own HP-71B and post the result here.

Quote:
I would be glad if some of you could measure the CPU speed in the way like above on your own HP-71B and post the result here.
626960 for one, 645968 for the other.

IIRC, the CPU frequency is determined by an LC oscillator, which is both not very precise due to loose tolerances of the components, and will change with temperature and ageing. HP considered 650 kHz to be a nominal value, with the expectation that some units would be slower or faster.

The CPU speed test compares the LC oscillator against the 32 kHz crystal oscillator, which should be accurate to better than 100 parts per million except at temperature extremes.

SN 2944*

input:

print peek\$("2f977",5)

output:

DC790

```S/N: 2709Axxxxx
VER\$ -> HP71:1BBBB MATH:1A
PEEK\$("2F977",5)    -> "9A790"
BVAL("097A9",16)*16 ->  621200 Hz
```

Many TNX for your measured frequency values. TNX Eric to pointing me to the LC oscillator so that I have had a look at the hardware IDS document.

71 hardware IDS page 9-4:

"Current HP-71's operate at 600KHz to 650KHz, future HP-71's will run at up to 1MHz."

Regarding this document the measured frequencies make more sense than the one mentioned in the 71IDS vol. 3. And so we mustn't be afraid to renovate the LC components in the CPU oscillator for anti-aging to get the same speed like a new 71B decades ago. ;-)

At the moment I'm working on Emu71/Win v1.04 so that the "CLKSPD - Compute CPU Clockspeed" routine store valid clock speed values into the CSPEED variable even if the emulator isn't in "Authentic Speed" mode.

Although HP did replace the 1LF2 Saturn processor with the improved 1LK7 in later production 71B units, as far as I know they never actually changed the oscillator components for higher speed. While the 1LK7 CPU might have run reliably at higher speeds than the 1LF2, everything else in the 71B, including plug-in modules, would also have had to be requalified for the higher speed.

It's reasonably likely that all 71B units could be modified to run faster at room temperature, but HP wouldn't have changed it unless everything was qualified at all process corners, i.e., at all combinations of temperature and voltage boundaries. Doing that qualification for just one chip takes a lot of time and effort; doing it for all chips that go into a 71B, including in plug-in modules, would have been a huge undertaking.

It was much easier for them to qualify the Saturn-based chips in the 48 series for higher speeds, because they were much more constrained systems.

Quote:
"Current HP-71's operate at 600KHz to 650KHz, future HP-71's will run at up to 1MHz."

I've tripple checked and I still get:
```>VER\$
HP71:2CDCC FTH41:1A EDT:A MATH:1A JPC:Ex HPIL:1B HELP:C FACTR:A
>PEEK\$("2F977",5)
DC790
>BVAL("0DC79",16)*16
903056
```
900KHz. SN 2944*.

Edited: 20 Feb 2013, 7:25 p.m.

2901A* (2CDCC) 639623 Hz

2422A* (1BBBB) 642512 Hz

Edited: 20 Feb 2013, 7:26 p.m.

sn 2421A00I44

VER\$ gives:

HP71:1BBBB HPIL:1B CLK:A CNV:C CSTU:A STR:A TXTU:A ECPY:F EPRM:C

PEEK\$("2F977",5) yelds D9A90 - 633,296 Hz

I just got this thing off a colleague of mine who doesn't need it. Can anyone please shed some light on what I actually got? It has 2*4K and 1*32K RAM modules plus AMP-ROM 03 MODULE - CMT71-64E (I suspect it's EPROM with some surveying programs on).

Cheers,
Reth

Quote:
```>PEEK\$("2F977",5)
DC790
>BVAL("0DC79",16)*16
903056
```
900KHz. SN 2944*.

The hex string should be inverted:

```
>BVAL("097CD",16)*16
621776
```

Doh! Thanks. Sanity restored.

To be honest I made the same mistake too: my first result was 1+ MHz :-)

Hi Christoph,

Here are my HP71B's details:

Sn. 2902Axxxxx ROM rev. 2CDCC:
PEEK\$("2F977",5) = "DFD90"
-> #090DFDh * 16 = 647120 Hz

Cheers,

Michael

Better reverse the string manually. Anyway--

```10 X=BVAL(PEEK\$("2F977",5),16)
20 R=FLOOR(X/65536)+65536*MOD(X,16)+256*MOD(X-MOD(X,16),256)+MOD(X-MOD(X,256),4096)
30 R=R+MOD(X-MOD(X,4096),65536)/256
40 DISP "CPU clock frequency:";R*.016;"kHz"
>RUN
CPU clock frequency: 621.776 kHz
```

I am getting a slightly different value this afternoon. Room temperature is only 30°C (°86F) :-)

P.S.: The following requires no Math ROM and is easier to key in:

```>LIST
10 A\$=PEEK\$("2F977",5)
20 H\$="0123456789ABCDEF"
30 F=0
40 FOR I=0 TO 4
50 F=F+(POS(H\$,A\$[I+1,I+1])-1)*16^I
60 NEXT I
70 DISP "CPU clock frequency:";F*.016;"kHz"
>RUN
CPU clock frequency: 621.2 kHz
```

The frequency has decreased to 621.2 kHz again.

Edited: 21 Feb 2013, 3:48 p.m.

Yesterday I found another document as reference, the "71-HandheldComputer-ServiceManual-00071-90055-93pages-Dec83.pdf" available here.

The LC-Oscillator (schematic at PDF-page 76, values at page 6-5/6-6) is build around the components L1 (180uH), C4 (33pF) and C5 (33pF). The frequency at the LC-Oscillator OSC1 line is ~2.5MHz (page 4-6).

I don't know the internal design of the oscillator inside the CPU, but when we assume that the internal capacity between OSC1 and OSC2 is about 6pF (Cint) then we have:

C = 1 / ((1/C4) + (1/C5)) + Cint = 1 / ((1/33pF) + (1/33pF)) + 6pF = 22.5pF

f0 = 1 / (2*pi*sqrt(L1*C)) = 1 / (2*pi*sqrt(180uH*22.5pF)) = 2.5MHz

This LC-Oscillator signal then is divided (by 4?) to get the nominal 640kHz strobe line frequency of the CPU we are measuring (page 4-7).

When I now have a look at the L1, C4 and C5 component tolerances of 5% I get an extimated error of ~103kHz at the OSC1 pin and this divided by 4 an error of ~26kHz (~4%) for the strobe frequency.

Finally a word to used "CLKSPD -Compute CPU Clockspeed" function which is filling the CSPEED variable. The function description tells us: "Detail: Clockspeed is accurate to about 500 hz."

Thanks for the link to the Service Manual. The beeper troubleshooting is at page 4-7 also. I had checked the solder on the Q2 leads, but I see now there are more places to check.
I've read in this old thread that a 4x speed-up is possible. Sure the battery consumption would increase, but that's what the AC adapter is for. Has anyone tried this?

P.S.: FWIW, this one-liner gives the CPU clock frequency in Hz:

```1 A\$=PEEK\$("2F977",5) @ B\$="" @ FOR I=0 TO 4 @ B\$=B\$&A\$[5-I,5-I] @ NEXT I @ DISP BVAL(B\$,16)*16
```
Math ROM of course required.

Edited: 26 Feb 2013, 6:37 a.m.

I'm getting 1,287,632Hz. What did I do wrong?

If you haven't forgotten to reverse the hex string you then you have a 2x spedup unit. If you're going to take a few more measurements, you might want to run this program:

```1 A\$=PEEK\$("2F977",5) @ H\$="0123456789ABCDEF" @ F=0 @ FOR I=1 TO 5
2 F=F+(POS(H\$,A\$[I,I])-1)*16^(I-1) @ NEXT I @ DISP 16*F
```
Or this one, if you have the MATH ROM:
```1 A\$=PEEK\$("2F977",5) @ B\$="" @ FOR I=0 TO 4 @ B\$=B\$&A\$[5-I,5-I] @ NEXT I @ DISP BVAL(B\$,16)*16
```