HP Forums

Full Version: Self Test on 28S
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

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!

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



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).


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?

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

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



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.



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
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
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