HP67 Logging started. ; A= 0000fffffff100 B= 03000000000022 S= .........9...... P= 11 (00167 - 00213 wait loop) ; [SST] pressed ; S= .........9.....f 00214 ... 00217 keys to a ; A= 0000fffffff900 (row=9 col=0) 00231 shift left a[x] ; A= 0000fffffff2d0 (5*9+0=45 =0x2d) ; P= 1 C= 00000000000000 M1=03000000000400 00256 a -> rom address ; 0010 1101 = 00 101 101 = 055 01455 if n/c go to 01526 do_sst: ; set sst flag, S 1 ; get pc from ram[61] (=62f) ; create step number (A= 001fffffffffff) ; get step (from ram[47] n=6, A= 000000000000ff) 01526 ... ; translate step to keycode (=31 25 24) 00323 delayed rom 07 00324 jsb 03764 ; A= 00000000000eff P= 6 C= ffffff31f25f24 10325 nop 00326 if n/c go to 01077 ; combine step number and keycode 01077 a exchange c[w] ; A= ffffff31f25f24 C= 00000000000eff 01100 m1 -> c ; C= 001ffffffff000 01101 p <- 10 ; P= 10 01102 a exchange c[wp] ; A= fffffffffff000 C= 001fff31f25f24 01103 a exchange c[w] ; A= 001fff31f25f24 C= fffffffffff000 01104 0 -> c[w] ; C= 00000000000000 01105 b exchange c[w] ; show the step and instruction (keycode) 01106 display off 01107 display toggle ; ="001 31 25 24" 01110 0 -> s 3 ; wait for [SST] key to be released 01111 0 -> s 15 ; S= .1.......9...... 01112 if 1 = s 15 01113 then go to 01111 ; get instruction ; (ram[61] -> C= 0000000000062f) ; (ram[47] -> C= 000000000000ff) ; (A= 000000000000ff C= 001fff31f25f2f) 01114 ... ; switch(instruction) 00357 a exchange c[w] ; A= 001fff31f25f2f C= 000000000000ff 00360 m1 exch c ; C= 001ffffffff000 M1=000000000000ff 00361 delayed rom 014 00362 if n/c go to 06021 06021 m1 -> c ; C= 000000000000ff 06022 c -> a[x] ; A= 001fff31f250ff 06023 0 -> a[xs] 06024 b -> c[w] ; C= 00000000000000 06025 p <- 12 ; P= 12 06026 0 -> s 3 06027 a -> rom address ; 0x0f = 0000 1111 = 00 001 111 = 017 ; ***** f LBL (i) do_f_lbl_any: ; do nothing ; go straight to tidy up after a function 06017 delayed rom 00 06020 if n/c go to 0074 ; ***** END ; tidy up after a function 00074 b -> c[w] 00075 1 -> s 9 ; set lift stack flag 00076 0 -> s 12 ; clear digit entry flag 00077 if n/c go to 0124 00124 CRC 1300 ; clear merge flag 00125 binary 00126 0 -> s 3 00127 delayed rom 02 00130 jsb 01205 ; 0 -> s 4 6 7 8 10 13 (=clear prefix) 00131 CRC 1500 ; check if waiting for Crd 00132 if 1 = s 3 00133 then go to 0257 00134 jsb 0116 00116 if 1 = s 2 : 00117 then go to 0122 ; if running go do next step 00120 if 0 = s 1 : 00121 then go to 0123 ; if not sst (but we are) 00122 if n/c go to 0022 00022 delayed rom 05 00023 if n/c go to 02660 ; goto next step (001 -> 002) 02660 p <- 1 ; P= 1 02661 load constant 3 ; C= 00000000000030 P= 0 02662 c -> addr 02663 data register -> c 13 ; ram[61] -> C= 0000000000062f 02664 c - 1 -> c[xs] ; C= 0000000000052f 02665 if n/c go to 02704 02704 delayed rom 00 02705 if n/c go to 0024 00024 c -> data register 13 ; ram[61]= 0000000000052f 00025 return ; tidy up part 2 00135 b -> c[w] ; C= 00000000000000 00136 if 1 = s 2 : 00137 then go to 0304 ; if running then do things 00140 0 -> c[w] 00141 0 -> s 1 ; S= .........9...... (not sst anymore) 00142 0 -> s 3 00143 0 -> c[s] 00144 m1 exch c ; C= 000000000000ff M1=00000000000000 00145 if 1 = s 11 00146 then go to 0317 00147 delayed rom 017 00150 jsb 07706 ; P= 0 ram[63] -> C= 00000000000000 00151 a exchange b[w] ; A= 00000000000000 B= 001fff31f250ff 00152 a -> b[w] ; B= 00000000000000 00153 if 1 = s 12 00154 then go to 0157 00155 delayed rom 04 00156 jsb 02007 ; format x for display ; (get display settings from ram[62]) ; C= 00000012220000 ; (then something else???) 00157 delayed rom 02 00160 jsb 01162 01162 jsb 01143 01143 c -> a[x] ; A= 70000000000100 01144 if b[s] = 0 01145 then go to 01147 01147 p <- 12 01150 shift right c[wp] ; C= 70200000222010 01151 if c[xs] = 0 01152 then go to 01156 01156 shift right c[wp] ; C= 70020000022201 01157 shift right c[wp] ; C= 70002000002220 01160 shift right c[wp] ; C= 70000200000222 01161 return 01163 p <- 3 ; P= 3 01164 shift left a[w] ; A= 00000000001000 01165 0 -> c[m] ; C= 70000000000222 01166 if c[s] = 0 01167 then go to 01174 01170 p + 1 -> p ; P= 4 01171 a - 1 -> a[p] ; A= 000000000f1000 01172 c - 1 -> c[s] ; C= 60000000000222 01173 if n/c go to 01166 ; P= 5 A= 00000000ff1000 C= 50000000000222 ; P= 6 A= 0000000fff1000 C= 40000000000222 ; P= 7 A= 000000ffff1000 C= 30000000000222 ; P= 8 A= 00000fffff1000 C= 20000000000222 ; P= 9 A= 0000ffffff1000 C= 10000000000222 ; P=10 A= 000fffffff1000 C= 00000000000222 01173 if n/c go to 01166 01166 if c[s] = 0 01167 then go to 01174 01174 if c[xs] = 0 01175 then go to 01201 01176 c - 1 -> c[xs] ; C= 00000000000122 01177 p + 1 -> p ; P= 11 01200 if n/c go to 01174 ; C= 00000000000022 P= 12 01200 if n/c go to 01174 01174 if c[xs] = 0 01175 then go to 01201 01201 shift right a[wp] ; A= 0000fffffff100 (extra spot for decimal point) 01202 load constant 3 ; C= 03000000000022 P= 11 (the decimal point) 01203 b exchange c[w] ; B= 03000000000022 C= 00000000000000 01204 return display: 00161 hi im woodstock 00162 display off 00163 display toggle ; "0.00" 00164 0 -> s 15 00165 if 1 = s 15 00166 then go to 0164 ; until you get your finger off the keys waitloop: 00167 0 -> s 3 00170 CRC 1500 00171 if 1 = s 3 00172 then go to 0263 00173 0 -> s 1 00174 CRC 300 00175 if 1 = s 3 00176 then go to 0204 00177 if 0 = s 11 00200 then go to 0206 00206 0 -> s 3 00207 CRC 560 00210 if 1 = s 3 00211 then go to 01324 00212 if 0 = s 15 00213 then go to 0167