Ok, sorry for the confusion. I really shouldn't write in a hurry and then comment from my mobile phone without checking what I have actually writenn...
Apparently I made a copy and paste mistake when quoting the code I used for Bernhards emulator. The correct code is:
Code:
HP67
PROGRAM
LBL 0 ; LBL 0 31 25 00
CLREG ; CLRG 31 43
P<>S ; P<>S 31 42
CLREG ; CLRG 31 43
RTN ; RTN 35 22
LBL a ; LBL a 32 25 11
RND ; RND 31 24
RC I ; RCL I 35 34
X!=Y? ; X!=Y? 32 61
R/S ; R/S 84
LBL 2 ; LBL 2 31 25 02
DSZ ; DSZ I 31 33
LBL 5 ; LBL 5 31 25 05
RC I ; RCL I 35 34
RTN ; RTN 35 22
LBL c ; LBL c 32 25 13
RCL (i) ; RCL (i) 34 24
RC I ; RCL I 35 34
X!=Y? ; X!=Y? 32 61
R/S ; R/S 84
STO + 0 ; ST +0 33 61 00
DSZ ; DSZ I 31 33
GTO c ; GTO c 22 31 13
3 ; 3 03
EEX ; EEX 43
2 ; 2 02
RCL 0 ; RCL 0 34 00
X!=Y? ; X!=Y? 32 61
R/S ; R/S 84
RTN ; RTN 35 22
LBL e ; LBL e 32 25 15
1 ; 1 01
- ; - 51
RTN ; RTN 35 22
LBL A ; LBL A 31 25 11
5 ; 5 05
7 ; 7 07
GSB 0 ; GSB 0 31 22 00
PAUSE ; PSE 35 72
GSB e ; GSB e 32 22 15
ENTER ; ENTER 41
RDOWN ; Rdn 35 53
X<>Y ; X<>Y 35 52
RUP ; Rup 35 54
RUP ; Rup 35 54
X<>Y ; X<>Y 35 52
RUP ; Rup 35 54
X!=0? ; X!=0? 31 61
X!=Y? ; X!=Y? 32 61
RTN ; RTN 35 22
GSB e ; GSB e 32 22 15
X>Y? ; X>Y? 32 81
RTN ; RTN 35 22
GSB e ; GSB e 32 22 15
X=Y? ; X=Y? 32 51
RTN ; RTN 35 22
GSB e ; GSB e 32 22 15
X<=Y? ; X<=Y? 32 71
GTO 1 ; GTO 1 22 01
RTN ; RTN 35 22
LBL 1 ; LBL 1 31 25 01
GSB e ; GSB e 32 22 15
ST I ; STO I 35 33
RC I ; RCL I 35 34
X<>Y ; X<>Y 35 52
X!=Y? ; X!=Y? 32 61
RTN ; RTN 35 22
GSB 2 ; GSB 2 31 22 02
X!=0? ; X!=0? 31 61
GTO 3 ; GTO 3 22 03
RTN ; RTN 35 22
LBL 3 ; LBL 3 31 25 03
GSB 2 ; GSB 2 31 22 02
X=0? ; X=0? 31 51
RTN ; RTN 35 22
GSB 2 ; GSB 2 31 22 02
X<0? ; X<0? 31 71
RTN ; RTN 35 22
GSB 2 ; GSB 2 31 22 02
X>0? ; X>0? 31 81
GTO 4 ; GTO 4 22 04
RTN ; RTN 35 22
LBL 4 ; LBL 4 31 25 04
DSZ ; DSZ I 31 33
F? 2 ; F2? 35 71 02
GTO 5 ; GTO 5 22 05
DSZ ; DSZ I 31 33
F? 1 ; F1? 35 71 01
GTO 5 ; GTO 5 22 05
DSZ ; DSZ I 31 33
F? 3 ; F3? 35 71 03
GTO 6 ; GTO 6 22 06
GTO 5 ; GTO 5 22 05
LBL 6 ; LBL 6 31 25 06
DSZ ; DSZ I 31 33
F? 0 ; F0? 35 71 00
GTO 7 ; GTO 7 22 07
GTO 5 ; GTO 5 22 05
LBL 7 ; LBL 7 31 25 07
SF 2 ; SF2 35 51 02
SF 1 ; SF1 35 51 01
CF 0 ; CF0 35 61 00
DSZ ; DSZ I 31 33
F? 3 ; F3? 35 71 03
GTO 5 ; GTO 5 22 05
DSZ ; DSZ I 31 33
F? 0 ; F0? 35 71 00
GTO 5 ; GTO 5 22 05
DSZ ; DSZ I 31 33
F? 2 ; F2? 35 71 02
GTO 8 ; GTO 8 22 08
GTO 5 ; GTO 5 22 05
LBL 8 ; LBL 8 31 25 08
DSZ ; DSZ I 31 33
F? 1 ; F1? 35 71 01
GTO 9 ; GTO 9 22 09
GTO 5 ; GTO 5 22 05
LBL 9 ; LBL 9 31 25 09
DSZ ; DSZ I 31 33
F? 2 ; F2? 35 71 02
GTO 5 ; GTO 5 22 05
GSB 2 ; GSB 2 31 22 02
DSP 7 ; DSP 7 23 07
DEG ; DEG 35 41
SIN ; SIN 31 62
SIN-1 ; SIN^-1 32 62
GSB a ; GSB a 32 22 11
COS ; COS 31 63
COS-1 ; COS^-1 32 63
GSB a ; GSB a 32 22 11
TAN ; TAN 31 64
TAN-1 ; TAN^-1 32 64
GSB a ; GSB a 32 22 11
R->P ; ->P 32 72
P->R ; ->R 31 72
GSB a ; GSB a 32 22 11
SIN ; SIN 31 62
H->H.MS ; ->HMS 32 74
H.MS->H ; HMS-> 31 74
SIN-1 ; SIN^-1 32 62
GSB a ; GSB a 32 22 11
LOG ; LOG 31 53
10^x ; 10^x 32 53
GSB a ; GSB a 32 22 11
LN ; LN 31 52
e^x ; e^X 32 52
GSB a ; GSB a 32 22 11
SQRT ; SQRT(X) 31 54
x^2 ; X^2 32 54
GSB a ; GSB a 32 22 11
ENTER ; ENTER 41
Y^X ; Y^X 35 63
LastX ; Lastx 35 82
1/X ; 1/X 35 62
y^x ; Y^X 35 63
GSB a ; GSB a 32 22 11
ENTER ; ENTER 41
+ ; + 61
LastX ; LastX 35 82
- ; - 51
GSB a ; GSB a 32 22 11
ENTER ; ENTER 41
* ; * 71
LastX ; LastX 35 82
/ ; / 81
GSB a ; GSB a 32 22 11
SQRT ; SQRT(X) 31 54
FRAC ; FRC 32 83
LastX ; LastX 35 82
INT ; INT 31 83
+ ; + 61
x^2 ; X^2 32 54
GSB a ; GSB a 32 22 11
D->R ; D->R 32 73
R->D ; R->D 31 73
GSB a ; GSB a 32 22 11
EEX ; EEX 43
2 ; 2 02
X<>Y ; X<>Y 35 52
% ; % 31 82
GSB a ; GSB a 32 22 11
DSP 1 ; DSP 1 23 01
LBL b ; LBL b 32 25 12
RC I ; RCL I 35 34
STO (i) ; STO (i) 33 24
DSZ ; DSZ I 31 33
GTO b ; GTO b 22 31 12
2 ; 2 02
4 ; 4 04
X<>I ; X<>I 35 24
GSB c ; GSB c 32 22 13
GSB 0 ; GSB 0 31 22 00
LBL d ; LBL d 32 25 14
DSZ ; DSZ I 31 33
RC I ; RCL I 35 34
ABS ; ABS 35 64
STO (i) ; STO (i) 33 24
2 ; 2 02
4 ; 4 04
X!=Y? ; X!=Y? 32 61
GTO d ; GTO d 22 31 14
ST I ; STO I 35 33
GSB c ; GSB c 32 22 13
9 ; 9 09
EEX ; EEX 43
8 ; 8 08
7 ; 7 07
1/x ; 1/X 35 62
8 ; 8 08
CHS ; CHS 42
* ; * 71
SF 0 ; SF0 35 51 00
CF 1 ; CF1 35 61 01
SF 3 ; SF3 35 51 03
RAD ; RAD 35 42
DSP 3 ; DSP 3 23 03
ENG ; ENG 35 23
-x- ; PRT X 31 84
SCI ; SCI 32 23
-x- ; PRT X 31 84
DSP 1 ; DSP 1 23 01
FIX ; FIX 31 23
-x- ; PRT X 31 84
R/S ; R/S
; This program can be used to test the calculator and diagnose calculator malfunctions. Simply insert the card and press A . After approximately two seconds, the calculator should pause displaying:
; 57.0
; If the calculator does not pause with this number, there is a malfunction in executing and returning from a subroutine, finding Label 0, program storage, the display, the magnetic card, the PAUSE command or the card reader.
; After the pause, the calculator should continue to run about one-and-one-half minutes more and then print the three lines shown:
; -888.9-90
; -8.889-88
; -8.888888888-88
; This output indicates that printing and display formatting are working correctIy. If the calculator stops before displaying -8.888888888-88, a code number corresponding to a function or operation malfunction will be displayed. For instance, if the calculator stopped with 36.0 in the display, an error in tangent or arctangent would be indicated. The sole exception is a failure in primary register 0. The calculator will stop execution of the program with the erroneous contents of R0 displayed.
; If error occurs: code indicating malfunction is shown. To run again after an error, set F0 and F3, clear F1 and F2. Or simply reload card.
; If no error, display shows
; -888.9-90
; -8.889-88
; -8.888888889-88
; (Note that a real HP-67 returns -8.888888888-88 since it doesn't round the last digit correctly.)
END
MODE DEG FIX 2 0 0 0 0
If the MODE section is now changed to
Code:
MODE DEG FIX 2 1 0 0 1
everything works fine.
The comments in the code are
A) the code for Willis Simulator (sorry for confusing it with an emulator before, which it cant be if it displays different results from the real calculator)
B) the key codes
and then below the actual program
C) Willis text regarding the program running on his simulator (which by the way is very nice too, and I used frequently until I dropped my ipad and the screen broke)
And here is my interpretation of Willis comment on the rounding:
The mathematically correct result would be rounded to a 9 in the last digit. The real calculator cannot do that as it has no extra digits and therefore no information on how to round the last digit.
So the result is both correct as in it is the best the calculator can do given its limitations, and at the same time incorrect if you were to look at the mathematically correct result.
Willis Simulator overcomes those limitations by adding extra internal digits and therefore displays the mathematically correct result.