Here’s how “Error” gets displayed by the HP-29C.
Using the hp29w:
;
; doing [g] [1/x] (15 74)
; S=...3.5...9.....F
;
03003: if c[m] = 0 then goto 01034 ; Divide by zero
03034: delayed rom 2 ;
03035: if n/c goto 0374 ;
01374: if n/c goto 0231 ;
error:
01231: 0 -> a[w] ; A=00000000000000
01232: 0 -> c[w] ;
01233: 0 -> s 1 ;
01234: 0 -> s 2 ;
01235: p <- 13 ; P=13
01236: load constant 14 ; C=E0000000000000 P=12
01237: load constant 10 ; C=EA000000000000 P=11
01240: load constant 10 ; C=EAA00000000000 P=10
01241: load constant 12 ; C=EAAC0000000000 P= 9
01242: load constant 10 ; C=EAACA000000000 P= 8 "Error"
01243: binary ;
01244: c - 1 -> c[wp] ; C=EAACAFFFFFFFFF
01245: a exchange c[w] ; A=EAACAFFFFFFFFF C=00000000000000
01246: b exchange c[w] ;
01247: display off ;
01250: display toggle ; "Error "
;
; for i=0x400 to -1 step -1
01251: p <- 2 ; P= 2
01252: load constant 4 ; C=00000000000400 P= 1
01253: c - 1 -> c[x] ; C=000000000003FF
01254: if n/c goto 0253 ;
01253: c - 1 -> c[x] ; C=000000000003FE
01254: if n/c goto 0253 ;
...
01253: c - 1 -> c[x] ; C=00000000000001
01254: if n/c goto 0253 ;
01253: c - 1 -> c[x] ; C=00000000000000
01254: if n/c goto 0253 ;
01253: c - 1 -> c[x] ; C=00000000000FFF
01254: if n/c goto 0253 ;
; next i
;
01255: display toggle ; (display off)
;
; for i=255 to -1 step -1
01256: c - 1 -> c[wp] ; C=00000000000FFE
01257: if n/c goto 0256 ;
01256: c - 1 -> c[wp] ; C=00000000000FFD
01257: if n/c goto 0256 ;
01256: c - 1 -> c[wp] ; C=00000000000FFC
01257: if n/c goto 0256 ;
...
01256: c - 1 -> c[wp] ; C=00000000000F01
01257: if n/c goto 0256 ;
01256: c - 1 -> c[wp] ; C=00000000000F00
01257: if n/c goto 0256 ;
01256: c - 1 -> c[wp] ; C=00000000000FFF
01257: if n/c goto 0256 ;
; next i
;
01260: display toggle ; display on again
;
01261: 0 -> s 15 ; S=...3.5...9......
01262: if 1 = s 15 then goto 01261 ; if key down, wait for up
;
01264: 0 -> s 3 ; if RUN mode
01265: if 1 = s 3 then goto 01271 ;
;
; while RUN mode and not key press
01271: if 1 = s 15 then goto 01276 ;
01273: 0 -> s 3 ;
01274: if 1 = s 3 then goto 01271 ;
; endwhile
;
It displays Error for 4 time periods, blanks the display for 1 time period – to get your attention, and then sits there with Error displayed.
Both loops use up 2 opcodes. Per the HP Journal article on the HP-67, there are about 3000 woodstock opcodes per second. The 0x400 loop is 1024×2 opcodes, about 2/3 of a second. The blanked out period is a quarter of that, just 1/6 of a second.
You have to let go of the key that you pressed. Then you can press a key to clear the Error display, or switch to PRGM mode.
Here’s what happens next (on pressing a key, so s 15 gets set):
; S=...3.5...9.....F
01274: if 1 = s 3 then goto 01271 ;
01271: if 1 = s 15 then goto 01276 ;
01276: display toggle ;
01277: delayed rom 0 ;
01300: if n/c goto 0062 ;
00062: 0 -> s 12 ;
00063: jsb 0323 ;
00323: p <- 1 ;
00324: load constant 2 ; C=00000000000F2F P= 0
00325: c -> addr ;
00326: data register -> c 15 ; C=00000000000000
00327: b exchange c[w] ;
00330: return ;
00064: if n/c goto 0114 ;
00114: jsb 0315 ;
00315: if 1 = s 2 then goto 00321 ;
00317: if 0 = s 1 then goto 00322 ;
00322: return ;
00115: binary ;
00116: delayed rom 2 ;
00117: jsb 0167 ;
01167: ... ; 0 -> s 0,4,6-8,10,13,14
01177: return ;
00120: b -> c[w] ;
00121: if 1 = s 2 then goto 00223 ;
00123: 0 -> s 1 ;
00124: 0 -> s 11 ;
00125: 0 -> c[s] ;
00126: m1 exch c ; C=0000000000006B M1=00000000000000
00127: b -> c[w] ; C=00000000000000
00130: 0 -> s 3 ;
00131: if 0 = s 3 then goto 00232 ;
00133: if 0 = s 12 then goto 00140 ;
00140: delayed rom 4 ;
00141: jsb 0000 ;
02000: ... ; get last x
02172: return ;
00142: delayed rom 2 ;
00143: jsb 0371 ;
01371: ... ; format x in A and B
01107: return ; A=0000FFFFFFFF00 B=29000000000000
00144: cpu woodstock ;
00145: display off ;
00146: display toggle ; "0.00"
00147: 0 -> s 15 ; S=...3.5...9......
00150: if 1 = s 15 then goto 00147 ;
00152: 0 -> s 1 ;
00153: 0 -> s 3 ;
00154: if 0 = s 3 then goto 00163 ;
00156: if 0 = s 11 then goto 00165 ;
00165: 0 -> s 5 ;
00166: if 1 = s 5 then goto 00173 ;
00173: if 0 = s 15 then goto 00152 ;
00152: ...