The Museum of HP Calculators

HP Forum Archive 09

[ Return to Index | Top of Index ]

Self Test on 28S
Message #1 Posted by Scuba Diver on 19 Oct 2002, 9:30 p.m.

Hi there!

Over the past few months I've had the opportunity to run the self-test on three different HP 28Ss.

Prior to displaying the "OK-28S" message, the units appear to run some sort of "screen test" (I'm probably not describing it properly, but hopefully you know what I mean).

The interesting thing is; each unit's screen test was different!! No two units showed the same designs during this test.

I would have expected that the self-test would run in exactly the same way on all 28Ss; can anyone explain the differences?

At first I thought that maybe this was an indication of different ROM versions; but two of the units were manufactured within weeks of one another!

Any insight would be greatly appreciated! Thanks! B.

      
Re: Self Test on 28S
Message #2 Posted by Raymond Hellstern (Germany) on 20 Oct 2002, 11:38 a.m.,
in response to message #1 by Scuba Diver

Unlike the 42S, which has some built-in constants for this purpose, it seems that the 28S uses random patterns for the display tests.

Raymond

      
Re: Self Test on 28S
Message #3 Posted by Vieira, Luiz C. (Brazil) on 20 Oct 2002, 2:33 p.m.,
in response to message #1 by Scuba Diver

Hi;

this is just a guess: as you are running RAM tests, have you cleared RAM contents prior to run them? (e.g. Memory Clear procedure) Maybe, just maybe, RAM contents are used to generate the display patterns (I had one HP28S, Brazilian made, recently stolen, and I bought an used, USA-made; did not have the chance to compare these patterns).

Cheers.

            
Re: Self Test on 28S
Message #4 Posted by Scuba Diver on 21 Oct 2002, 12:09 a.m.,
in response to message #3 by Vieira, Luiz C. (Brazil)

Actually, I have cleared the memory in all 3 units, and each unit's test is identical.

Although the test results vary from unit to unit, the test result on each unit is always the same, regardless of how many times I run it...I've tested it at different times of the day, just in case the clock had something to do with it. I've also removed the batteries and reinstalled them, and once again, they are still the same.

Although I'm not much of a computer expert, logic tells me that either (a)the ROMs are different or (b)there is some piece of data that the unit uses to randomize the test. Based upon my test results, I can only assume that (a) is correct.

Does anyone else have any other ideas? B.

                  
Re: Self Test on 28S
Message #5 Posted by J-F Garnier (France) on 21 Oct 2002, 6:40 a.m.,
in response to message #4 by Scuba Diver

There is only one HP-28S ROM version: 2BB.

You can check it by keying: #10d SYSEVAL.

Regards.

J-F

                  
Re: Self Test on 28S
Message #6 Posted by Christoph Giesselink on 21 Oct 2002, 3:06 p.m.,
in response to message #4 by Scuba Diver

If you think there are different versions of the 2BB ROM, check the CRC correction words of the two 64KB pages of the ROM. You can find the two CRC words (two CRC's per 64KB page) at #1FFF8-1FFFF and #3FFF8-#3FFFF. To read them you need a PEEK program.

But that isn't necessary, the garbage you see in display during the self test on the HP28S is a remainder of 32KB user RAM test. The used RAM test destroys the RAM content, so the old content must be saved first. The display RAM is a good place for this. The different display output during the self test is a function of the different content of the user RAM at testing time.

If you don't believe this, check the following code.

Regards,

Christoph

Disassembled HP28S RAM test code:

* RAM test
018DF   P=      0
018E1   LC(5)   #C0000			start of user RAM
018E8   D=C     A
018EA   GOSUB   [01941]			save #400 nibs of RAM into disp area
018EE   LC(5)   #00043
018F5   P=      4
018F7   GOSUB   [015D0]			user RAM test of area with pattern (destroys content)
018FB   GONC    [0191A]			Ram OK -> NC -> jump
* error condition
018FE   CD0EX
01901   B=C     A
01903   GOSUB   [01972]			restore #400 nibs of RAM
01907   C=B     A
01909   D0=C
0190C   LC(1)   4
0190F   ST=1    9
01912   GOSUB   +0008A                  # Address: 0199C
01916   GOTO    +00008                  # Address: 0191E
0191A   GOSUB   [01972]			restore #400 nibs of RAM
0191E   P=      0
01920   LC(5)   #00400			next page of RAM
01927   D=D+C   A
01929   LC(5)   #D0000			reached last address?
01930   ?D#C    A, GOYES [018EA]
01935   ?ST=1   9, RTNYES		return on error
0193A   LC(1)   4
...

* save #400 nibbles of RAM at D[A] to display 01941 C=D A D[A] addr. of RAM page 01943 D0=C 01946 D1=(5) #FF840 start of display (slave) 0194D LC(5) #00220 no. of nibs to copy 01954 GOSBVL 04FF2 copy! 0195B D1=(5) #FFC00 start of display (master) 01962 LC(5) #001E0 no. of nibs to copy (#220+#1E0=#400) 01969 GOSBVL 04FF2 copy! 01970 RTNCC

* restore #400 nibbles of RAM at C[A] from display 01974 D1=C 01977 D0=(5) #FF840 0197E LC(5) #00220 01985 GOSBVL 04FF2 0198C D0=(5) #FFC00 01993 GOTO -00031 # Address: 01962 01962 LC(5) #001E0 01969 GOSBVL 04FF2 01970 RTNCC

* copy routine 04FF2 C=C-1 A 04FF4 GOC +0004A # Address: 0503E 04FF7 P=C 0 04FFB CSR A 04FFD C=C-1 A 04FFF GOC +00025 # Address: 05024 05002 A=DAT0 W 05006 DAT1=A W 0500A D0=D0+ 16 0500D D1=D1+ 16 05010 C=C-1 B 05013 GONC -00011 # Address: 05002 05016 C=C-1 XS 05019 GONC -00017 # Address: 05002 0501C C=C+1 X 0501F C=C-1 A 05021 GONC -0001F # Address: 05002 05024 A=DAT0 WP 05028 DAT1=A WP 0502C CD0EX 0502F C+P+1 05032 D0=C 05035 CD1EX 05038 C+P+1 0503B D1=C 0503E P= 0 05040 RTNCC


[ Return to Index | Top of Index ]

Go back to the main exhibit hall