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.