1                       radix   dec
2                       ; Code bank 0; Start address: 0; End address: 2047
3      0000 :           org     0
4               
5                       ; Define start addresses for data regions
6    00000070 = shared___globals equ 112
7    00000020 = globals___0 equ 32
8    000000a0 = globals___1 equ 160
9    00000120 = globals___2 equ 288
10   00000000 = __indf equ 0
11   00000002 = __pcl equ 2
12   00000003 = __status equ 3
13   00000004 = __fsr equ 4
14   00000003 = __c___byte equ 3
15   00000000 = __c___bit equ 0
16   00000003 = __z___byte equ 3
17   00000002 = __z___bit equ 2
18   00000003 = __rp0___byte equ 3
19   00000005 = __rp0___bit equ 5
20   00000003 = __rp1___byte equ 3
21   00000006 = __rp1___bit equ 6
22   00000003 = __irp___byte equ 3
23   00000007 = __irp___bit equ 7
24   0000000a = __pclath equ 10
25   0000000a = __cb0___byte equ 10
26   00000003 = __cb0___bit equ 3
27   0000000a = __cb1___byte equ 10
28   00000004 = __cb1___bit equ 4
29              
30                      ; # Copyright (c) 2006-2012 by Wayne C. Gramlich
31                      ; # All rights reserved.
32              
33                      ; # This code implements the firmware for the MidiMotor1E.
34                      ; # The MidiMotor1E differs from the MidiMotor1 in that the '1E has
35                      ; # two extra connectors N2 and N4.  N2 is a 5 pin connector that can
36                      ; # be used to read in two channels of quardarature position (plus an
37                      ; # an index pulse.)  Alternatively, N2 can be used to read in an
38                      ; # analog signal between 0 and 5V for an absolute position.  N4 is
39                      ; # used as an active low limit switch that can be used to term off
40                      ; # the motor.
41                      ; #
42                      ; # The architecture of this firmware is actually pretty complicated.
43                      ; # The pulse width modulation is controlled by the Timer0 and Timer1
44                      ; # modules.  The quadrature encoding and limit switch is delt with
45                      ; # via some pins on Port A.  The UART is responsible for dealing
46                      ; # with RoboBricks2 bus I/O.  The A/D converter is responsible
47                      ; # for processing Analog to digital conversions.  The code in the
48                      ; # main loop is responsible for running a PID (Proportional,
49                      ; # Integral, Derivative) motor control loop.  The PID algorithm is
50                      ; # done using 32-bit floating point arithmetic.  Heavy use of interrupts
51                      ; # is used to ensure that everything works in a timely fashion.
52                      ; #
53                      ; # There are three main routines -- interrupt(), main() and uart_manage().
54                      ; # The interrupt() routine is responsible for processing all interrupt
55                      ; # events.  UART processing is sufficiently complicated, that UART input
56                      ; # is quickly stuffed into a temporary buffer, to minimize intterupt
57                      ; # latency.  Further UART process is handled by the uart_manage() routine.
58                      ; # Calls to the uart_manage() routine are sprinkled throught the main
59                      ; # loop in main() to ensure that any buffered uart commands are processed
60                      ; # fairly quickly.
61              
62                      ; # We use the PIC16F688 for this module:
63                      ; buffer = 'midimotor1e'
64                      ; line_number = 36
65                      ; library _pic16f688 entered
66              
67                      ; # Copyright (c) 2004-2006 by Wayne C. Gramlich
68                      ; # All rights reserved.
69              
70                      ; buffer = '_pic16f688'
71                      ; line_number = 6
72                      ; processor pic16f688
73                      ; line_number = 7
74                      ; configure_address 0x2007
75                      ; line_number = 8
76                      ;  configure_fill 0x3000
77                      ; line_number = 9
78                      ;  configure_option fcmen: on = 0x800
79                      ; line_number = 10
80                      ;  configure_option fcmen: off = 0x000
81                      ; line_number = 11
82                      ;  configure_option ieso: on = 0x400
83                      ; line_number = 12
84                      ;  configure_option ieso: off = 0x000
85                      ; line_number = 13
86                      ;  configure_option boden: on = 0x300
87                      ; line_number = 14
88                      ;  configure_option boden: partial = 0x200
89                      ; line_number = 15
90                      ;  configure_option boden: sboden = 0x100
91                      ; line_number = 16
92                      ;  configure_option boden: off = 0x000
93                      ; line_number = 17
94                      ;  configure_option cpd: on = 0x00
95                      ; line_number = 18
96                      ;  configure_option cpd: off = 0x80
97                      ; line_number = 19
98                      ;  configure_option cp: on = 0x00
99                      ; line_number = 20
100                     ;  configure_option cp: off = 0x40
101                     ; line_number = 21
102                     ;  configure_option mclre: on = 0x20
103                     ; line_number = 22
104                     ;  configure_option mclre: off = 0x00
105                     ; line_number = 23
106                     ;  configure_option pwrte: on = 0x00
107                     ; line_number = 24
108                     ;  configure_option pwrte: off = 0x10
109                     ; line_number = 25
110                     ;  configure_option wdte: on = 8
111                     ; line_number = 26
112                     ;  configure_option wdte: off = 0
113                     ; line_number = 27
114                     ;  configure_option fosc: rc_clk = 7
115                     ; line_number = 28
116                     ;  configure_option fosc: rc_no_clk = 6
117                     ; line_number = 29
118                     ;  configure_option fosc: int_clk = 5
119                     ; line_number = 30
120                     ;  configure_option fosc: int_no_clk = 4
121                     ; line_number = 31
122                     ;  configure_option fosc: ec = 3
123                     ; line_number = 32
124                     ;  configure_option fosc: hs = 2
125                     ; line_number = 33
126                     ;  configure_option fosc: xt = 1
127                     ; line_number = 34
128                     ;  configure_option fosc: lp = 0
129             
130                     ; line_number = 36
131                     ;  code_bank 0x0 : 0x7ff
132                     ; line_number = 37
133                     ;  code_bank 0x800 : 0xfff
134                     ; line_number = 38
135                     ;  data_bank 0x0 : 0x7f
136                     ; line_number = 39
137                     ;  data_bank 0x80 : 0xff
138                     ; line_number = 40
139                     ;  data_bank 0x100 : 0x17f
140                     ; line_number = 41
141                     ;  data_bank 0x180 : 0x1ff
142             
143                     ; line_number = 43
144                     ;  global_region 0x20 : 0x6f
145                     ; line_number = 44
146                     ;  icd2_global_region 0x20 : 0x6f
147             
148                     ; line_number = 46
149                     ;  global_region 0xa0 : 0xef
150                     ; line_number = 47
151                     ;  icd2_global_region 0xa0 : 0xef
152             
153                     ; line_number = 49
154                     ;  global_region 0x120 : 0x16f
155                     ; line_number = 50
156                     ;  icd2_global_region 0x120 : 0x164
157             
158                     ; line_number = 52
159                     ;  shared_region 0x70 : 0x7f
160                     ; line_number = 53
161                     ;  icd2_shared_region 0x71 : 0x7f
162             
163                     ; line_number = 55
164                     ;  interrupts_possible
165                     ; line_number = 56
166                     ;  packages pdip=14, soic=14, tssop=14
167                     ; line_number = 57
168                     ;  pin vdd, power_supply
169                     ; line_number = 58
170                     ; pin_bindings pdip=1, soic=1, tssop=1
171                     ; line_number = 59
172                     ; pin ra5_in, ra5_nc, ra5_out, t1cki, osc1, clkin
173                     ; line_number = 60
174                     ; pin_bindings pdip=2, soic=2, tssop=2
175                     ; line_number = 61
176                     ;  bind_to _porta@5
177                     ; line_number = 62
178                     ;  or_if ra5_in _trisa 32
179                     ; line_number = 63
180                     ;  or_if ra5_nc _trisa 32
181                     ; line_number = 64
182                     ;  or_if ra5_out _trisa 0
183                     ; line_number = 65
184                     ;  or_if osc1 _trisa 32
185                     ; line_number = 66
186                     ; pin ra4_in, ra4_nc, ra4_out, t1g, osc2, an3, clkout
187                     ; line_number = 67
188                     ; pin_bindings pdip=3, soic=3, tssop=3
189                     ; line_number = 68
190                     ;  bind_to _porta@4
191                     ; line_number = 69
192                     ;  or_if ra4_in _trisa 16
193                     ; line_number = 70
194                     ;  or_if ra4_nc _trisa 16
195                     ; line_number = 71
196                     ;  or_if ra4_out _trisa 0
197                     ; line_number = 72
198                     ;  or_if an3 _trisa 16
199                     ; line_number = 73
200                     ;  or_if osc2 _trisa 16
201                     ; line_number = 74
202                     ;  or_if ra4_in _ansel 0
203                     ; line_number = 75
204                     ;  or_if ra4_out _ansel 0
205                     ; line_number = 76
206                     ;  or_if an3 _ansel 8
207                     ; line_number = 77
208                     ;  or_if ra4_in _adcon0 0
209                     ; line_number = 78
210                     ;  or_if ra4_out _adcon0 0
211                     ; line_number = 79
212                     ;  or_if an3 _adcon0 1
213                     ; line_number = 80
214                     ; pin ra3_in, ra3_nc, mclr, vpp
215                     ; line_number = 81
216                     ; pin_bindings pdip=4, soic=4, tssop=4
217                     ; line_number = 82
218                     ;  bind_to _porta@3
219                     ; line_number = 83
220                     ;  or_if ra3_in _trisa 8
221                     ; line_number = 84
222                     ;  or_if ra3_nc _trisa 8
223                     ; line_number = 85
224                     ; pin rc5_in, rc5_nc, rc5_out, rx, dt
225                     ; line_number = 86
226                     ; pin_bindings pdip=5, soic=5, tssop=5
227                     ; line_number = 87
228                     ;  bind_to _portc@5
229                     ; line_number = 88
230                     ;  or_if rc5_in _trisc 32
231                     ; line_number = 89
232                     ;  or_if rc5_nc _trisc 32
233                     ; line_number = 90
234                     ;  or_if rc5_out _trisc 0
235                     ; line_number = 91
236                     ;  or_if rx _trisc 32
237                     ; line_number = 92
238                     ; pin rc4_in, rc4_nc, rc4_out, c2out, tx, ck
239                     ; line_number = 93
240                     ; pin_bindings pdip=6, soic=6, tssop=6
241                     ; line_number = 94
242                     ;  bind_to _portc@4
243                     ; line_number = 95
244                     ;  or_if rc4_in _trisc 16
245                     ; line_number = 96
246                     ;  or_if rc4_nc _trisc 16
247                     ; line_number = 97
248                     ;  or_if rc4_out _trisc 0
249                     ; # The UART documentation says TX must be marked as in input:
250                     ; line_number = 99
251                     ;  or_if tx _trisc 16
252                     ; line_number = 100
253                     ; pin rc3_in, rc3_nc, rc3_out, an7
254                     ; line_number = 101
255                     ; pin_bindings pdip=7, soic=7, tssop=7
256                     ; line_number = 102
257                     ;  bind_to _portc@3
258                     ; line_number = 103
259                     ;  or_if rc3_in _trisc 8
260                     ; line_number = 104
261                     ;  or_if rc3_nc _trisc 8
262                     ; line_number = 105
263                     ;  or_if rc3_out _trisc 0
264                     ; line_number = 106
265                     ;  or_if an7 _trisc 8
266                     ; line_number = 107
267                     ;  or_if rc3_in _ansel 0
268                     ; line_number = 108
269                     ;  or_if rc3_out _ansel 0
270                     ; line_number = 109
271                     ;  or_if an7 _ansel 128
272                     ; line_number = 110
273                     ;  or_if rc3_in _adcon0 0
274                     ; line_number = 111
275                     ;  or_if rc3_out _adcon0 0
276                     ; line_number = 112
277                     ;  or_if an7 _adcon0 1
278                     ; line_number = 113
279                     ; pin rc2_in, rc2_nc, rc2_out, an6
280                     ; line_number = 114
281                     ; pin_bindings pdip=8, soic=8, tssop=8
282                     ; line_number = 115
283                     ;  bind_to _portc@2
284                     ; line_number = 116
285                     ;  or_if rc2_in _trisc 4
286                     ; line_number = 117
287                     ;  or_if rc2_nc _trisc 4
288                     ; line_number = 118
289                     ;  or_if rc2_out _trisc 0
290                     ; line_number = 119
291                     ;  or_if an6 _trisc 4
292                     ; line_number = 120
293                     ;  or_if rc2_in _ansel 0
294                     ; line_number = 121
295                     ;  or_if rc2_out _ansel 0
296                     ; line_number = 122
297                     ;  or_if an6 _ansel 64
298                     ; line_number = 123
299                     ;  or_if rc2_in _adcon0 0
300                     ; line_number = 124
301                     ;  or_if rc2_out _adcon0 0
302                     ; line_number = 125
303                     ;  or_if an6 _adcon0 1
304                     ; line_number = 126
305                     ; pin rc1_in, rc1_nc, rc1_out, an5, c2in_minus
306                     ; line_number = 127
307                     ; pin_bindings pdip=9, soic=9, tssop=9
308                     ; line_number = 128
309                     ;  bind_to _portc@1
310                     ; line_number = 129
311                     ;  or_if rc1_in _trisc 2
312                     ; line_number = 130
313                     ;  or_if rc1_nc _trisc 2
314                     ; line_number = 131
315                     ;  or_if rc1_out _trisc 0
316                     ; line_number = 132
317                     ;  or_if rc1_in _cmcon0 7
318                     ; line_number = 133
319                     ;  or_if rc1_out _cmcon0 7
320                     ; line_number = 134
321                     ;  or_if an5 _trisc 2
322                     ; line_number = 135
323                     ;  or_if rc1_in _ansel 0
324                     ; line_number = 136
325                     ;  or_if rc1_out _ansel 0
326                     ; line_number = 137
327                     ;  or_if an5 _ansel 32
328                     ; line_number = 138
329                     ;  or_if rc1_in _adcon0 0
330                     ; line_number = 139
331                     ;  or_if rc1_out _adcon0 0
332                     ; line_number = 140
333                     ;  or_if an5 _adcon0 1
334                     ; line_number = 141
335                     ; pin rc0_in, rc0_nc, rc0_out, an4, c2in_plus
336                     ; line_number = 142
337                     ; pin_bindings pdip=10, soic=10, tssop=10
338                     ; line_number = 143
339                     ;  bind_to _portc@0
340                     ; line_number = 144
341                     ;  or_if rc0_in _trisc 1
342                     ; line_number = 145
343                     ;  or_if rc0_nc _trisc 1
344                     ; line_number = 146
345                     ;  or_if rc0_out _trisc 0
346                     ; line_number = 147
347                     ;  or_if rc0_in _cmcon0 7
348                     ; line_number = 148
349                     ;  or_if rc0_out _cmcon0 7
350                     ; line_number = 149
351                     ;  or_if an4 _trisc 1
352                     ; line_number = 150
353                     ;  or_if rc0_in _ansel 0
354                     ; line_number = 151
355                     ;  or_if rc0_out _ansel 0
356                     ; line_number = 152
357                     ;  or_if an4 _ansel 16
358                     ; line_number = 153
359                     ;  or_if rc0_in _adcon0 0
360                     ; line_number = 154
361                     ;  or_if rc0_out _adcon0 0
362                     ; line_number = 155
363                     ;  or_if an4 _adcon0 1
364                     ; line_number = 156
365                     ; pin ra2_in, ra2_nc, ra2_out, an2, c1out, t0cki, int
366                     ; line_number = 157
367                     ; pin_bindings pdip=11, soic=11, tssop=11
368                     ; line_number = 158
369                     ;  bind_to _porta@2
370                     ; line_number = 159
371                     ;  or_if ra2_in _trisa 4
372                     ; line_number = 160
373                     ;  or_if ra2_nc _trisa 4
374                     ; line_number = 161
375                     ;  or_if ra2_out _trisa 0
376                     ; line_number = 162
377                     ;  or_if an2 _trisa 4
378                     ; line_number = 163
379                     ;  or_if ra2_in _ansel 0
380                     ; line_number = 164
381                     ;  or_if ra2_out _ansel 0
382                     ; line_number = 165
383                     ;  or_if an2 _ansel 4
384                     ; line_number = 166
385                     ;  or_if ra2_in _adcon0 0
386                     ; line_number = 167
387                     ;  or_if ra2_out _adcon0 0
388                     ; line_number = 168
389                     ;  or_if an2 _adcon0 1
390                     ; line_number = 169
391                     ; pin ra1_in, ra1_nc, ra1_out, an1, c1in_minus, vref, icspclk
392                     ; line_number = 170
393                     ; pin_bindings pdip=12, soic=12, tssop=12
394                     ; line_number = 171
395                     ;  bind_to _porta@1
396                     ; line_number = 172
397                     ;  or_if ra1_in _trisa 2
398                     ; line_number = 173
399                     ;  or_if ra1_nc _trisa 2
400                     ; line_number = 174
401                     ;  or_if ra1_out _trisa 0
402                     ; line_number = 175
403                     ;  or_if ra1_in _cmcon0 7
404                     ; line_number = 176
405                     ;  or_if ra1_out _cmcon0 7
406                     ; line_number = 177
407                     ;  or_if an1 _trisa 2
408                     ; line_number = 178
409                     ;  or_if vref _trisa 2
410                     ; line_number = 179
411                     ;  or_if ra1_in _ansel 0
412                     ; line_number = 180
413                     ;  or_if ra1_out _ansel 0
414                     ; line_number = 181
415                     ;  or_if an1 _ansel 2
416                     ; line_number = 182
417                     ;  or_if vref _ansel 2
418                     ; line_number = 183
419                     ;  or_if ra1_in _adcon0 0
420                     ; line_number = 184
421                     ;  or_if ra1_out _adcon0 0
422                     ; line_number = 185
423                     ;  or_if an1 _adcon0 1		# Turn on _addon
424                     ; line_number = 186
425                     ;  or_if vref _adcon0 1		# Turn on _addon
426                     ; line_number = 187
427                     ;  or_if vref _adcon0 64		# Turn of _vcfg
428                     ; line_number = 188
429                     ; pin ra0_in, ra0_nc, ra0_out, an0, c1in_plus, icspdat, ulpwu
430                     ; line_number = 189
431                     ; pin_bindings pdip=13, soic=13, tssop=13
432                     ; line_number = 190
433                     ;  bind_to _porta@0
434                     ; line_number = 191
435                     ;  or_if ra0_in _trisa 1
436                     ; line_number = 192
437                     ;  or_if ra0_nc _trisa 1
438                     ; line_number = 193
439                     ;  or_if ra0_out _trisa 0
440                     ; line_number = 194
441                     ;  or_if ra0_in _cmcon0 7
442                     ; line_number = 195
443                     ;  or_if ra0_out _cmcon0 7
444                     ; line_number = 196
445                     ;  or_if an0 _trisa 1
446                     ; line_number = 197
447                     ;  or_if ra0_in _ansel 0
448                     ; line_number = 198
449                     ;  or_if ra0_out _ansel 0
450                     ; line_number = 199
451                     ;  or_if an0 _ansel 1
452                     ; line_number = 200
453                     ;  or_if ra0_in _adcon0 0
454                     ; line_number = 201
455                     ;  or_if ra0_out _adcon0 0
456                     ; line_number = 202
457                     ;  or_if an0 _adcon0 1
458                     ; line_number = 203
459                     ; pin vss, ground
460                     ; line_number = 204
461                     ; pin_bindings pdip=14, soic=14, tssop=14
462             
463                     ; line_number = 206
464                     ; library _standard entered
465             
466                     ; # Copyright (c) 2006 by Wayne C. Gramlich
467                     ; # All rights reserved.
468             
469                     ; # Standard definition for uCL:
470             
471                     ; buffer = '_standard'
472                     ; line_number = 8
473                     ; constant _true = (1 = 1)
474  00000001 = _true equ 1
475                     ; line_number = 9
476                     ; constant _false = (0 != 0)
477  00000000 = _false equ 0
478             
479             
480                     ; buffer = '_pic16f688'
481                     ; line_number = 206
482                     ; library _standard exited
483             
484             
485                     ; # Register/bit bindings:
486             
487                     ; # Databank 0 (0x0 - 0x7f):
488             
489                     ; line_number = 217
490                     ; register _indf = 
491  00000000 = _indf equ 0
492             
493                     ; line_number = 219
494                     ; register _tmr0 = 
495  00000001 = _tmr0 equ 1
496             
497                     ; line_number = 221
498                     ; register _pcl = 
499  00000002 = _pcl equ 2
500             
501                     ; line_number = 223
502                     ; register _status = 
503  00000003 = _status equ 3
504                     ; line_number = 224
505                     ; bind _irp = _status@7
506  00000003 = _irp___byte equ _status
507  00000007 = _irp___bit equ 7
508                     ; line_number = 225
509                     ; bind _rp1 = _status@5
510  00000003 = _rp1___byte equ _status
511  00000005 = _rp1___bit equ 5
512                     ; line_number = 226
513                     ; bind _rp0 = _status@5
514  00000003 = _rp0___byte equ _status
515  00000005 = _rp0___bit equ 5
516                     ; line_number = 227
517                     ; bind _to = _status@4
518  00000003 = _to___byte equ _status
519  00000004 = _to___bit equ 4
520                     ; line_number = 228
521                     ; bind _pd = _status@3
522  00000003 = _pd___byte equ _status
523  00000003 = _pd___bit equ 3
524                     ; line_number = 229
525                     ; bind _z = _status@2
526  00000003 = _z___byte equ _status
527  00000002 = _z___bit equ 2
528                     ; line_number = 230
529                     ; bind _dc = _status@1
530  00000003 = _dc___byte equ _status
531  00000001 = _dc___bit equ 1
532                     ; line_number = 231
533                     ; bind _c = _status@0
534  00000003 = _c___byte equ _status
535  00000000 = _c___bit equ 0
536             
537                     ; line_number = 233
538                     ; register _fsr = 
539  00000004 = _fsr equ 4
540             
541                     ; line_number = 235
542                     ; register _porta = 
543  00000005 = _porta equ 5
544                     ; line_number = 236
545                     ; register _ra = 
546  00000005 = _ra equ 5
547                     ; line_number = 237
548                     ; bind _ra5 = _porta@5
549  00000005 = _ra5___byte equ _porta
550  00000005 = _ra5___bit equ 5
551                     ; line_number = 238
552                     ; bind _ra4 = _porta@4
553  00000005 = _ra4___byte equ _porta
554  00000004 = _ra4___bit equ 4
555                     ; line_number = 239
556                     ; bind _ra3 = _porta@3
557  00000005 = _ra3___byte equ _porta
558  00000003 = _ra3___bit equ 3
559                     ; line_number = 240
560                     ; bind _ra2 = _porta@2
561  00000005 = _ra2___byte equ _porta
562  00000002 = _ra2___bit equ 2
563                     ; line_number = 241
564                     ; bind _ra1 = _porta@1
565  00000005 = _ra1___byte equ _porta
566  00000001 = _ra1___bit equ 1
567                     ; line_number = 242
568                     ; bind _ra0 = _porta@0
569  00000005 = _ra0___byte equ _porta
570  00000000 = _ra0___bit equ 0
571             
572                     ; line_number = 244
573                     ; register _portc = 
574  00000007 = _portc equ 7
575                     ; line_number = 245
576                     ; register _rc = 
577  00000007 = _rc equ 7
578                     ; line_number = 246
579                     ; bind _rc5 = _portc@5
580  00000007 = _rc5___byte equ _portc
581  00000005 = _rc5___bit equ 5
582                     ; line_number = 247
583                     ; bind _rc4 = _portc@4
584  00000007 = _rc4___byte equ _portc
585  00000004 = _rc4___bit equ 4
586                     ; line_number = 248
587                     ; bind _rc3 = _portc@3
588  00000007 = _rc3___byte equ _portc
589  00000003 = _rc3___bit equ 3
590                     ; line_number = 249
591                     ; bind _rc2 = _portc@2
592  00000007 = _rc2___byte equ _portc
593  00000002 = _rc2___bit equ 2
594                     ; line_number = 250
595                     ; bind _rc1 = _portc@1
596  00000007 = _rc1___byte equ _portc
597  00000001 = _rc1___bit equ 1
598                     ; line_number = 251
599                     ; bind _rc0 = _portc@0
600  00000007 = _rc0___byte equ _portc
601  00000000 = _rc0___bit equ 0
602             
603                     ; line_number = 253
604                     ; register _pclath = 
605  0000000a = _pclath equ 10
606             
607                     ; line_number = 255
608                     ; register _intcon = 
609  0000000b = _intcon equ 11
610                     ; line_number = 256
611                     ; bind _gie = _intcon@7
612  0000000b = _gie___byte equ _intcon
613  00000007 = _gie___bit equ 7
614                     ; line_number = 257
615                     ; bind _peie = _intcon@6
616  0000000b = _peie___byte equ _intcon
617  00000006 = _peie___bit equ 6
618                     ; line_number = 258
619                     ; bind _t0ie = _intcon@5
620  0000000b = _t0ie___byte equ _intcon
621  00000005 = _t0ie___bit equ 5
622                     ; line_number = 259
623                     ; bind _inte = _intcon@4
624  0000000b = _inte___byte equ _intcon
625  00000004 = _inte___bit equ 4
626                     ; line_number = 260
627                     ; bind _raie = _intcon@3
628  0000000b = _raie___byte equ _intcon
629  00000003 = _raie___bit equ 3
630                     ; line_number = 261
631                     ; bind _t0if = _intcon@2
632  0000000b = _t0if___byte equ _intcon
633  00000002 = _t0if___bit equ 2
634                     ; line_number = 262
635                     ; bind _intf = _intcon@1
636  0000000b = _intf___byte equ _intcon
637  00000001 = _intf___bit equ 1
638                     ; line_number = 263
639                     ; bind _raif = _intcon@0
640  0000000b = _raif___byte equ _intcon
641  00000000 = _raif___bit equ 0
642             
643                     ; line_number = 265
644                     ; register _pir1 = 
645  0000000c = _pir1 equ 12
646                     ; line_number = 266
647                     ; bind _eeif = _pir1@7
648  0000000c = _eeif___byte equ _pir1
649  00000007 = _eeif___bit equ 7
650                     ; line_number = 267
651                     ; bind _adif = _pir1@6
652  0000000c = _adif___byte equ _pir1
653  00000006 = _adif___bit equ 6
654                     ; line_number = 268
655                     ; bind _rcif = _pir1@5
656  0000000c = _rcif___byte equ _pir1
657  00000005 = _rcif___bit equ 5
658                     ; line_number = 269
659                     ; bind _c2if = _pir1@4
660  0000000c = _c2if___byte equ _pir1
661  00000004 = _c2if___bit equ 4
662                     ; line_number = 270
663                     ; bind _c1if = _pir1@3
664  0000000c = _c1if___byte equ _pir1
665  00000003 = _c1if___bit equ 3
666                     ; line_number = 271
667                     ; bind _osfif = _pir1@2
668  0000000c = _osfif___byte equ _pir1
669  00000002 = _osfif___bit equ 2
670                     ; line_number = 272
671                     ; bind _txif = _pir1@1
672  0000000c = _txif___byte equ _pir1
673  00000001 = _txif___bit equ 1
674                     ; line_number = 273
675                     ; bind _tmr1if = _pir1@0
676  0000000c = _tmr1if___byte equ _pir1
677  00000000 = _tmr1if___bit equ 0
678             
679                     ; line_number = 275
680                     ; register _tmr1l = 
681  0000000e = _tmr1l equ 14
682             
683                     ; line_number = 277
684                     ; register _tmr1h = 
685  0000000f = _tmr1h equ 15
686             
687                     ; line_number = 279
688                     ; register _t1con = 
689  00000010 = _t1con equ 16
690                     ; line_number = 280
691                     ; bind t1ginv = _t1con@7
692  00000010 = t1ginv___byte equ _t1con
693  00000007 = t1ginv___bit equ 7
694                     ; line_number = 281
695                     ; bind _tmr1ge = _t1con@6
696  00000010 = _tmr1ge___byte equ _t1con
697  00000006 = _tmr1ge___bit equ 6
698                     ; line_number = 282
699                     ; bind _t1ckps1 = _t1con@5
700  00000010 = _t1ckps1___byte equ _t1con
701  00000005 = _t1ckps1___bit equ 5
702                     ; line_number = 283
703                     ; bind _t1ckps0 = _t1con@4
704  00000010 = _t1ckps0___byte equ _t1con
705  00000004 = _t1ckps0___bit equ 4
706                     ; line_number = 284
707                     ; bind _t1oscen = _t1con@3
708  00000010 = _t1oscen___byte equ _t1con
709  00000003 = _t1oscen___bit equ 3
710                     ; line_number = 285
711                     ; bind _t1sync = _t1con@2
712  00000010 = _t1sync___byte equ _t1con
713  00000002 = _t1sync___bit equ 2
714                     ; line_number = 286
715                     ; bind _tmr1cs = _t1con@1
716  00000010 = _tmr1cs___byte equ _t1con
717  00000001 = _tmr1cs___bit equ 1
718                     ; line_number = 287
719                     ; bind _tmr1on = _t1con@0
720  00000010 = _tmr1on___byte equ _t1con
721  00000000 = _tmr1on___bit equ 0
722             
723                     ; line_number = 289
724                     ; register _baudctl = 
725  00000011 = _baudctl equ 17
726                     ; line_number = 290
727                     ; bind _abdovf = _baudctl@7
728  00000011 = _abdovf___byte equ _baudctl
729  00000007 = _abdovf___bit equ 7
730                     ; line_number = 291
731                     ; bind _rcidl = _baudctl@6
732  00000011 = _rcidl___byte equ _baudctl
733  00000006 = _rcidl___bit equ 6
734                     ; line_number = 292
735                     ; bind _sckp = _baudctl@4
736  00000011 = _sckp___byte equ _baudctl
737  00000004 = _sckp___bit equ 4
738                     ; line_number = 293
739                     ; bind _brg16 = _baudctl@3
740  00000011 = _brg16___byte equ _baudctl
741  00000003 = _brg16___bit equ 3
742                     ; line_number = 294
743                     ; bind _wue = _baudctl@1
744  00000011 = _wue___byte equ _baudctl
745  00000001 = _wue___bit equ 1
746                     ; line_number = 295
747                     ; bind _abden = _baudctl@0
748  00000011 = _abden___byte equ _baudctl
749  00000000 = _abden___bit equ 0
750             
751                     ; line_number = 297
752                     ; register _spbrgh = 
753  00000012 = _spbrgh equ 18
754             
755                     ; line_number = 299
756                     ; register _spbrg = 
757  00000013 = _spbrg equ 19
758             
759                     ; line_number = 301
760                     ; register _rcreg = 
761  00000014 = _rcreg equ 20
762             
763                     ; line_number = 303
764                     ; register _txreg = 
765  00000015 = _txreg equ 21
766             
767                     ; line_number = 305
768                     ; register _txsta = 
769  00000016 = _txsta equ 22
770                     ; line_number = 306
771                     ; bind _csrc = _txsta@7
772  00000016 = _csrc___byte equ _txsta
773  00000007 = _csrc___bit equ 7
774                     ; line_number = 307
775                     ; bind _tx9 = _txsta@6
776  00000016 = _tx9___byte equ _txsta
777  00000006 = _tx9___bit equ 6
778                     ; line_number = 308
779                     ; bind _txen = _txsta@5
780  00000016 = _txen___byte equ _txsta
781  00000005 = _txen___bit equ 5
782                     ; line_number = 309
783                     ; bind _sync = _txsta@4
784  00000016 = _sync___byte equ _txsta
785  00000004 = _sync___bit equ 4
786                     ; line_number = 310
787                     ; bind _sendb = _txsta@3
788  00000016 = _sendb___byte equ _txsta
789  00000003 = _sendb___bit equ 3
790                     ; line_number = 311
791                     ; bind _brgh = _txsta@2
792  00000016 = _brgh___byte equ _txsta
793  00000002 = _brgh___bit equ 2
794                     ; line_number = 312
795                     ; bind _trmt = _txsta@1
796  00000016 = _trmt___byte equ _txsta
797  00000001 = _trmt___bit equ 1
798                     ; line_number = 313
799                     ; bind _tx9d = _txsta@0
800  00000016 = _tx9d___byte equ _txsta
801  00000000 = _tx9d___bit equ 0
802             
803                     ; line_number = 315
804                     ; register _rcsta = 
805  00000017 = _rcsta equ 23
806                     ; line_number = 316
807                     ; bind _spen = _rcsta@7
808  00000017 = _spen___byte equ _rcsta
809  00000007 = _spen___bit equ 7
810                     ; line_number = 317
811                     ; bind _rx9 = _rcsta@6
812  00000017 = _rx9___byte equ _rcsta
813  00000006 = _rx9___bit equ 6
814                     ; line_number = 318
815                     ; bind _sren = _rcsta@5
816  00000017 = _sren___byte equ _rcsta
817  00000005 = _sren___bit equ 5
818                     ; line_number = 319
819                     ; bind _cren = _rcsta@4
820  00000017 = _cren___byte equ _rcsta
821  00000004 = _cren___bit equ 4
822                     ; line_number = 320
823                     ; bind _adden = _rcsta@3
824  00000017 = _adden___byte equ _rcsta
825  00000003 = _adden___bit equ 3
826                     ; line_number = 321
827                     ; bind _ferr = _rcsta@2
828  00000017 = _ferr___byte equ _rcsta
829  00000002 = _ferr___bit equ 2
830                     ; line_number = 322
831                     ; bind _oerr = _rcsta@1
832  00000017 = _oerr___byte equ _rcsta
833  00000001 = _oerr___bit equ 1
834                     ; line_number = 323
835                     ; bind _rx9d = _rcsta@0
836  00000017 = _rx9d___byte equ _rcsta
837  00000000 = _rx9d___bit equ 0
838             
839                     ; line_number = 325
840                     ; register _wdtcon = 
841  00000018 = _wdtcon equ 24
842                     ; line_number = 326
843                     ; bind _wdtps3 = _wdtcon@4
844  00000018 = _wdtps3___byte equ _wdtcon
845  00000004 = _wdtps3___bit equ 4
846                     ; line_number = 327
847                     ; bind _wdtps2 = _wdtcon@3
848  00000018 = _wdtps2___byte equ _wdtcon
849  00000003 = _wdtps2___bit equ 3
850                     ; line_number = 328
851                     ; bind _wdtps1 = _wdtcon@2
852  00000018 = _wdtps1___byte equ _wdtcon
853  00000002 = _wdtps1___bit equ 2
854                     ; line_number = 329
855                     ; bind _wdtps0 = _wdtcon@1
856  00000018 = _wdtps0___byte equ _wdtcon
857  00000001 = _wdtps0___bit equ 1
858                     ; line_number = 330
859                     ; bind _swdten = _wdtcon@0
860  00000018 = _swdten___byte equ _wdtcon
861  00000000 = _swdten___bit equ 0
862             
863                     ; line_number = 332
864                     ; register _cmcon0 = 
865  00000019 = _cmcon0 equ 25
866                     ; line_number = 333
867                     ; bind _c1out = _cmcon0@7
868  00000019 = _c1out___byte equ _cmcon0
869  00000007 = _c1out___bit equ 7
870                     ; line_number = 334
871                     ; bind _c2out = _cmcon0@6
872  00000019 = _c2out___byte equ _cmcon0
873  00000006 = _c2out___bit equ 6
874                     ; line_number = 335
875                     ; bind _c1inv = _cmcon0@5
876  00000019 = _c1inv___byte equ _cmcon0
877  00000005 = _c1inv___bit equ 5
878                     ; line_number = 336
879                     ; bind _c2inv = _cmcon0@4
880  00000019 = _c2inv___byte equ _cmcon0
881  00000004 = _c2inv___bit equ 4
882                     ; line_number = 337
883                     ; bind _cis = _cmcon0@3
884  00000019 = _cis___byte equ _cmcon0
885  00000003 = _cis___bit equ 3
886                     ; line_number = 338
887                     ; bind _cm2 = _cmcon0@2
888  00000019 = _cm2___byte equ _cmcon0
889  00000002 = _cm2___bit equ 2
890                     ; line_number = 339
891                     ; bind _cm1 = _cmcon0@1
892  00000019 = _cm1___byte equ _cmcon0
893  00000001 = _cm1___bit equ 1
894                     ; line_number = 340
895                     ; bind _cm0 = _cmcon0@0
896  00000019 = _cm0___byte equ _cmcon0
897  00000000 = _cm0___bit equ 0
898             
899                     ; line_number = 342
900                     ; register _cmcon1 = 
901  0000001a = _cmcon1 equ 26
902                     ; line_number = 343
903                     ; bind _t1gss = _cmcon1@0
904  0000001a = _t1gss___byte equ _cmcon1
905  00000000 = _t1gss___bit equ 0
906                     ; line_number = 344
907                     ; bind _c2sync = _cmcon1@1
908  0000001a = _c2sync___byte equ _cmcon1
909  00000001 = _c2sync___bit equ 1
910             
911                     ; line_number = 346
912                     ; register _adresh = 
913  0000001e = _adresh equ 30
914             
915                     ; line_number = 348
916                     ; register _adcon0 = 
917  0000001f = _adcon0 equ 31
918                     ; line_number = 349
919                     ; bind _adfm = _adcon0@7
920  0000001f = _adfm___byte equ _adcon0
921  00000007 = _adfm___bit equ 7
922                     ; line_number = 350
923                     ; bind _vcfg = _adcon0@6
924  0000001f = _vcfg___byte equ _adcon0
925  00000006 = _vcfg___bit equ 6
926                     ; line_number = 351
927                     ; bind _chs2 = _adcon0@4
928  0000001f = _chs2___byte equ _adcon0
929  00000004 = _chs2___bit equ 4
930                     ; line_number = 352
931                     ; bind _chs1 = _adcon0@3
932  0000001f = _chs1___byte equ _adcon0
933  00000003 = _chs1___bit equ 3
934                     ; line_number = 353
935                     ; bind _chs0 = _adcon0@2
936  0000001f = _chs0___byte equ _adcon0
937  00000002 = _chs0___bit equ 2
938                     ; line_number = 354
939                     ; bind _go = _adcon0@1
940  0000001f = _go___byte equ _adcon0
941  00000001 = _go___bit equ 1
942                     ; line_number = 355
943                     ; bind _adon = _adcon0@0
944  0000001f = _adon___byte equ _adcon0
945  00000000 = _adon___bit equ 0
946             
947                     ; # Data bank 1 (0x80-0xff):
948             
949                     ; line_number = 359
950                     ; register _option_reg = 
951  00000081 = _option_reg equ 129
952                     ; line_number = 360
953                     ; bind _rapu = _option_reg@7
954  00000081 = _rapu___byte equ _option_reg
955  00000007 = _rapu___bit equ 7
956                     ; line_number = 361
957                     ; bind _intedg = _option_reg@6
958  00000081 = _intedg___byte equ _option_reg
959  00000006 = _intedg___bit equ 6
960                     ; line_number = 362
961                     ; bind _t0cs = _option_reg@5
962  00000081 = _t0cs___byte equ _option_reg
963  00000005 = _t0cs___bit equ 5
964                     ; line_number = 363
965                     ; bind _t0se = _option_reg@4
966  00000081 = _t0se___byte equ _option_reg
967  00000004 = _t0se___bit equ 4
968                     ; line_number = 364
969                     ; bind _psa = _option_reg@3
970  00000081 = _psa___byte equ _option_reg
971  00000003 = _psa___bit equ 3
972                     ; line_number = 365
973                     ; bind _ps2 = _option_reg@2
974  00000081 = _ps2___byte equ _option_reg
975  00000002 = _ps2___bit equ 2
976                     ; line_number = 366
977                     ; bind _ps1 = _option_reg@1
978  00000081 = _ps1___byte equ _option_reg
979  00000001 = _ps1___bit equ 1
980                     ; line_number = 367
981                     ; bind _ps0 = _option_reg@0
982  00000081 = _ps0___byte equ _option_reg
983  00000000 = _ps0___bit equ 0
984             
985                     ; line_number = 369
986                     ; register _trisa = 
987  00000085 = _trisa equ 133
988                     ; line_number = 370
989                     ; bind _trisa5 = _trisa@5
990  00000085 = _trisa5___byte equ _trisa
991  00000005 = _trisa5___bit equ 5
992                     ; line_number = 371
993                     ; bind _trisa4 = _trisa@4
994  00000085 = _trisa4___byte equ _trisa
995  00000004 = _trisa4___bit equ 4
996                     ; line_number = 372
997                     ; bind _trisa3 = _trisa@3
998  00000085 = _trisa3___byte equ _trisa
999  00000003 = _trisa3___bit equ 3
1000                    ; line_number = 373
1001                    ; bind _trisa2 = _trisa@2
1002 00000085 = _trisa2___byte equ _trisa
1003 00000002 = _trisa2___bit equ 2
1004                    ; line_number = 374
1005                    ; bind _trisa1 = _trisa@1
1006 00000085 = _trisa1___byte equ _trisa
1007 00000001 = _trisa1___bit equ 1
1008                    ; line_number = 375
1009                    ; bind _trisa0 = _trisa@0
1010 00000085 = _trisa0___byte equ _trisa
1011 00000000 = _trisa0___bit equ 0
1012            
1013                    ; line_number = 377
1014                    ; register _trisc = 
1015 00000087 = _trisc equ 135
1016                    ; line_number = 378
1017                    ; bind _trisc5 = _trisc@5
1018 00000087 = _trisc5___byte equ _trisc
1019 00000005 = _trisc5___bit equ 5
1020                    ; line_number = 379
1021                    ; bind _trisc4 = _trisc@4
1022 00000087 = _trisc4___byte equ _trisc
1023 00000004 = _trisc4___bit equ 4
1024                    ; line_number = 380
1025                    ; bind _trisc3 = _trisc@3
1026 00000087 = _trisc3___byte equ _trisc
1027 00000003 = _trisc3___bit equ 3
1028                    ; line_number = 381
1029                    ; bind _trisc2 = _trisc@2
1030 00000087 = _trisc2___byte equ _trisc
1031 00000002 = _trisc2___bit equ 2
1032                    ; line_number = 382
1033                    ; bind _trisc1 = _trisc@1
1034 00000087 = _trisc1___byte equ _trisc
1035 00000001 = _trisc1___bit equ 1
1036                    ; line_number = 383
1037                    ; bind _trisc0 = _trisc@0
1038 00000087 = _trisc0___byte equ _trisc
1039 00000000 = _trisc0___bit equ 0
1040            
1041                    ; line_number = 385
1042                    ; register _pie1 = 
1043 0000008c = _pie1 equ 140
1044                    ; line_number = 386
1045                    ; bind _eeie = _pie1@7
1046 0000008c = _eeie___byte equ _pie1
1047 00000007 = _eeie___bit equ 7
1048                    ; line_number = 387
1049                    ; bind _adie = _pie1@6
1050 0000008c = _adie___byte equ _pie1
1051 00000006 = _adie___bit equ 6
1052                    ; line_number = 388
1053                    ; bind _rcie = _pie1@5
1054 0000008c = _rcie___byte equ _pie1
1055 00000005 = _rcie___bit equ 5
1056                    ; line_number = 389
1057                    ; bind _c2ie = _pie1@4
1058 0000008c = _c2ie___byte equ _pie1
1059 00000004 = _c2ie___bit equ 4
1060                    ; line_number = 390
1061                    ; bind _c1ie = _pie1@3
1062 0000008c = _c1ie___byte equ _pie1
1063 00000003 = _c1ie___bit equ 3
1064                    ; line_number = 391
1065                    ; bind _osfie = _pie1@2
1066 0000008c = _osfie___byte equ _pie1
1067 00000002 = _osfie___bit equ 2
1068                    ; line_number = 392
1069                    ; bind _txie = _pie1@1
1070 0000008c = _txie___byte equ _pie1
1071 00000001 = _txie___bit equ 1
1072                    ; line_number = 393
1073                    ; bind _tmr1ie = _pie1@0
1074 0000008c = _tmr1ie___byte equ _pie1
1075 00000000 = _tmr1ie___bit equ 0
1076            
1077                    ; line_number = 395
1078                    ; register _pcon = 
1079 0000008e = _pcon equ 142
1080                    ; line_number = 396
1081                    ; bind _ulpwue = _pcon@5
1082 0000008e = _ulpwue___byte equ _pcon
1083 00000005 = _ulpwue___bit equ 5
1084                    ; line_number = 397
1085                    ; bind _sboden = _pcon@4
1086 0000008e = _sboden___byte equ _pcon
1087 00000004 = _sboden___bit equ 4
1088                    ; line_number = 398
1089                    ; bind _por = _pcon@1
1090 0000008e = _por___byte equ _pcon
1091 00000001 = _por___bit equ 1
1092                    ; line_number = 399
1093                    ; bind _bod = _pcon@0
1094 0000008e = _bod___byte equ _pcon
1095 00000000 = _bod___bit equ 0
1096            
1097                    ; line_number = 401
1098                    ; register _osccon = 
1099 0000008f = _osccon equ 143
1100                    ; line_number = 402
1101                    ; bind _ircf2 = _osccon@6
1102 0000008f = _ircf2___byte equ _osccon
1103 00000006 = _ircf2___bit equ 6
1104                    ; line_number = 403
1105                    ; bind _ircf1 = _osccon@5
1106 0000008f = _ircf1___byte equ _osccon
1107 00000005 = _ircf1___bit equ 5
1108                    ; line_number = 404
1109                    ; bind _ircf0 = _osccon@4
1110 0000008f = _ircf0___byte equ _osccon
1111 00000004 = _ircf0___bit equ 4
1112                    ; line_number = 405
1113                    ; bind _osts = _osccon@3
1114 0000008f = _osts___byte equ _osccon
1115 00000003 = _osts___bit equ 3
1116                    ; line_number = 406
1117                    ; bind _hts = _osccon@2
1118 0000008f = _hts___byte equ _osccon
1119 00000002 = _hts___bit equ 2
1120                    ; line_number = 407
1121                    ; bind _lts = _osccon@3
1122 0000008f = _lts___byte equ _osccon
1123 00000003 = _lts___bit equ 3
1124                    ; line_number = 408
1125                    ; bind _scs = _osccon@2
1126 0000008f = _scs___byte equ _osccon
1127 00000002 = _scs___bit equ 2
1128            
1129                    ; line_number = 410
1130                    ; register _osctune = 
1131 00000090 = _osctune equ 144
1132                    ; line_number = 411
1133                    ; bind _tun4 = _osctune@4
1134 00000090 = _tun4___byte equ _osctune
1135 00000004 = _tun4___bit equ 4
1136                    ; line_number = 412
1137                    ; bind _tun3 = _osctune@3
1138 00000090 = _tun3___byte equ _osctune
1139 00000003 = _tun3___bit equ 3
1140                    ; line_number = 413
1141                    ; bind _tun2 = _osctune@2
1142 00000090 = _tun2___byte equ _osctune
1143 00000002 = _tun2___bit equ 2
1144                    ; line_number = 414
1145                    ; bind _tun1 = _osctune@1
1146 00000090 = _tun1___byte equ _osctune
1147 00000001 = _tun1___bit equ 1
1148                    ; line_number = 415
1149                    ; bind _tun0 = _osctune@0
1150 00000090 = _tun0___byte equ _osctune
1151 00000000 = _tun0___bit equ 0
1152                    ; line_number = 416
1153                    ; constant _osccal_lsb = 1
1154 00000001 = _osccal_lsb equ 1
1155            
1156                    ; line_number = 418
1157                    ; register _ansel = 
1158 00000091 = _ansel equ 145
1159                    ; line_number = 419
1160                    ; bind _ans7 = _ansel@7
1161 00000091 = _ans7___byte equ _ansel
1162 00000007 = _ans7___bit equ 7
1163                    ; line_number = 420
1164                    ; bind _ans6 = _ansel@6
1165 00000091 = _ans6___byte equ _ansel
1166 00000006 = _ans6___bit equ 6
1167                    ; line_number = 421
1168                    ; bind _ans5 = _ansel@5
1169 00000091 = _ans5___byte equ _ansel
1170 00000005 = _ans5___bit equ 5
1171                    ; line_number = 422
1172                    ; bind _ans4 = _ansel@4
1173 00000091 = _ans4___byte equ _ansel
1174 00000004 = _ans4___bit equ 4
1175                    ; line_number = 423
1176                    ; bind _ans3 = _ansel@3
1177 00000091 = _ans3___byte equ _ansel
1178 00000003 = _ans3___bit equ 3
1179                    ; line_number = 424
1180                    ; bind _ans2 = _ansel@2
1181 00000091 = _ans2___byte equ _ansel
1182 00000002 = _ans2___bit equ 2
1183                    ; line_number = 425
1184                    ; bind _ans1 = _ansel@1
1185 00000091 = _ans1___byte equ _ansel
1186 00000001 = _ans1___bit equ 1
1187                    ; line_number = 426
1188                    ; bind _ans0 = _ansel@0
1189 00000091 = _ans0___byte equ _ansel
1190 00000000 = _ans0___bit equ 0
1191            
1192                    ; line_number = 428
1193                    ; register _wpua = 
1194 00000095 = _wpua equ 149
1195                    ; line_number = 429
1196                    ; bind _wpua5 = _wpua@5
1197 00000095 = _wpua5___byte equ _wpua
1198 00000005 = _wpua5___bit equ 5
1199                    ; line_number = 430
1200                    ; bind _wpua4 = _wpua@4
1201 00000095 = _wpua4___byte equ _wpua
1202 00000004 = _wpua4___bit equ 4
1203                    ; line_number = 431
1204                    ; bind _wpua2 = _wpua@2
1205 00000095 = _wpua2___byte equ _wpua
1206 00000002 = _wpua2___bit equ 2
1207                    ; line_number = 432
1208                    ; bind _wpua1 = _wpua@1
1209 00000095 = _wpua1___byte equ _wpua
1210 00000001 = _wpua1___bit equ 1
1211                    ; line_number = 433
1212                    ; bind _wpua0 = _wpua@0
1213 00000095 = _wpua0___byte equ _wpua
1214 00000000 = _wpua0___bit equ 0
1215            
1216                    ; line_number = 435
1217                    ; register _ioca = 
1218 00000096 = _ioca equ 150
1219                    ; line_number = 436
1220                    ; bind _ioca5 = _ioca@5
1221 00000096 = _ioca5___byte equ _ioca
1222 00000005 = _ioca5___bit equ 5
1223                    ; line_number = 437
1224                    ; bind _ioca4 = _ioca@4
1225 00000096 = _ioca4___byte equ _ioca
1226 00000004 = _ioca4___bit equ 4
1227                    ; line_number = 438
1228                    ; bind _ioca3 = _ioca@3
1229 00000096 = _ioca3___byte equ _ioca
1230 00000003 = _ioca3___bit equ 3
1231                    ; line_number = 439
1232                    ; bind _ioca2 = _ioca@2
1233 00000096 = _ioca2___byte equ _ioca
1234 00000002 = _ioca2___bit equ 2
1235                    ; line_number = 440
1236                    ; bind _ioca1 = _ioca@1
1237 00000096 = _ioca1___byte equ _ioca
1238 00000001 = _ioca1___bit equ 1
1239                    ; line_number = 441
1240                    ; bind _ioca0 = _ioca@0
1241 00000096 = _ioca0___byte equ _ioca
1242 00000000 = _ioca0___bit equ 0
1243            
1244                    ; line_number = 443
1245                    ; register _eedath = 
1246 00000097 = _eedath equ 151
1247            
1248                    ; line_number = 445
1249                    ; register _eeadrh = 
1250 00000098 = _eeadrh equ 152
1251            
1252                    ; line_number = 447
1253                    ; register _vrcon = 
1254 00000099 = _vrcon equ 153
1255                    ; line_number = 448
1256                    ; bind _vren = _vrcon@7
1257 00000099 = _vren___byte equ _vrcon
1258 00000007 = _vren___bit equ 7
1259                    ; line_number = 449
1260                    ; bind _vrr = _vrcon@5
1261 00000099 = _vrr___byte equ _vrcon
1262 00000005 = _vrr___bit equ 5
1263                    ; line_number = 450
1264                    ; bind _vr3 = _vrcon@3
1265 00000099 = _vr3___byte equ _vrcon
1266 00000003 = _vr3___bit equ 3
1267                    ; line_number = 451
1268                    ; bind _vr2 = _vrcon@2
1269 00000099 = _vr2___byte equ _vrcon
1270 00000002 = _vr2___bit equ 2
1271                    ; line_number = 452
1272                    ; bind _vr1 = _vrcon@1
1273 00000099 = _vr1___byte equ _vrcon
1274 00000001 = _vr1___bit equ 1
1275                    ; line_number = 453
1276                    ; bind _vr0 = _vrcon@0
1277 00000099 = _vr0___byte equ _vrcon
1278 00000000 = _vr0___bit equ 0
1279            
1280                    ; line_number = 455
1281                    ; register _eedat = 
1282 0000009a = _eedat equ 154
1283                    ; line_number = 456
1284                    ; bind _eedat7 = _eedat@7
1285 0000009a = _eedat7___byte equ _eedat
1286 00000007 = _eedat7___bit equ 7
1287                    ; line_number = 457
1288                    ; bind _eedat6 = _eedat@6
1289 0000009a = _eedat6___byte equ _eedat
1290 00000006 = _eedat6___bit equ 6
1291                    ; line_number = 458
1292                    ; bind _eedat5 = _eedat@5
1293 0000009a = _eedat5___byte equ _eedat
1294 00000005 = _eedat5___bit equ 5
1295                    ; line_number = 459
1296                    ; bind _eedat4 = _eedat@4
1297 0000009a = _eedat4___byte equ _eedat
1298 00000004 = _eedat4___bit equ 4
1299                    ; line_number = 460
1300                    ; bind _eedat3 = _eedat@3
1301 0000009a = _eedat3___byte equ _eedat
1302 00000003 = _eedat3___bit equ 3
1303                    ; line_number = 461
1304                    ; bind _eedat2 = _eedat@2
1305 0000009a = _eedat2___byte equ _eedat
1306 00000002 = _eedat2___bit equ 2
1307                    ; line_number = 462
1308                    ; bind _eedat1 = _eedat@1
1309 0000009a = _eedat1___byte equ _eedat
1310 00000001 = _eedat1___bit equ 1
1311                    ; line_number = 463
1312                    ; bind _eedat0 = _eedat@0
1313 0000009a = _eedat0___byte equ _eedat
1314 00000000 = _eedat0___bit equ 0
1315            
1316                    ; line_number = 465
1317                    ; register _eeadr = 
1318 0000009b = _eeadr equ 155
1319                    ; line_number = 466
1320                    ; bind _eeadr7 = _eeadr@7
1321 0000009b = _eeadr7___byte equ _eeadr
1322 00000007 = _eeadr7___bit equ 7
1323                    ; line_number = 467
1324                    ; bind _eeadr6 = _eeadr@6
1325 0000009b = _eeadr6___byte equ _eeadr
1326 00000006 = _eeadr6___bit equ 6
1327                    ; line_number = 468
1328                    ; bind _eeadr5 = _eeadr@5
1329 0000009b = _eeadr5___byte equ _eeadr
1330 00000005 = _eeadr5___bit equ 5
1331                    ; line_number = 469
1332                    ; bind _eeadr4 = _eeadr@4
1333 0000009b = _eeadr4___byte equ _eeadr
1334 00000004 = _eeadr4___bit equ 4
1335                    ; line_number = 470
1336                    ; bind _eeadr3 = _eeadr@3
1337 0000009b = _eeadr3___byte equ _eeadr
1338 00000003 = _eeadr3___bit equ 3
1339                    ; line_number = 471
1340                    ; bind _eeadr2 = _eeadr@2
1341 0000009b = _eeadr2___byte equ _eeadr
1342 00000002 = _eeadr2___bit equ 2
1343                    ; line_number = 472
1344                    ; bind _eeadr1 = _eeadr@1
1345 0000009b = _eeadr1___byte equ _eeadr
1346 00000001 = _eeadr1___bit equ 1
1347                    ; line_number = 473
1348                    ; bind _eeadr0 = _eeadr@0
1349 0000009b = _eeadr0___byte equ _eeadr
1350 00000000 = _eeadr0___bit equ 0
1351            
1352                    ; line_number = 475
1353                    ; register _eecon1 = 
1354 0000009c = _eecon1 equ 156
1355                    ; line_number = 476
1356                    ; bind _eepgd = _eecon1@7
1357 0000009c = _eepgd___byte equ _eecon1
1358 00000007 = _eepgd___bit equ 7
1359                    ; line_number = 477
1360                    ; bind _wrerr = _eecon1@3
1361 0000009c = _wrerr___byte equ _eecon1
1362 00000003 = _wrerr___bit equ 3
1363                    ; line_number = 478
1364                    ; bind _wren = _eecon1@2
1365 0000009c = _wren___byte equ _eecon1
1366 00000002 = _wren___bit equ 2
1367                    ; line_number = 479
1368                    ; bind _wr = _eecon1@1
1369 0000009c = _wr___byte equ _eecon1
1370 00000001 = _wr___bit equ 1
1371                    ; line_number = 480
1372                    ; bind _rd = _eecon1@0
1373 0000009c = _rd___byte equ _eecon1
1374 00000000 = _rd___bit equ 0
1375            
1376                    ; line_number = 482
1377                    ; register _eecon2 = 
1378 0000009d = _eecon2 equ 157
1379            
1380                    ; line_number = 484
1381                    ; register _adresl = 
1382 0000009e = _adresl equ 158
1383            
1384                    ; line_number = 486
1385                    ; register _adcon1 = 
1386 0000009f = _adcon1 equ 159
1387                    ; line_number = 487
1388                    ; bind _adcs2 = _adcon1@6
1389 0000009f = _adcs2___byte equ _adcon1
1390 00000006 = _adcs2___bit equ 6
1391                    ; line_number = 488
1392                    ; bind _adcs1 = _adcon1@5
1393 0000009f = _adcs1___byte equ _adcon1
1394 00000005 = _adcs1___bit equ 5
1395                    ; line_number = 489
1396                    ; bind _adcs0 = _adcon1@4
1397 0000009f = _adcs0___byte equ _adcon1
1398 00000004 = _adcs0___bit equ 4
1399            
1400                    ; # Data Bank 2 (0x100 - 0x17f):
1401            
1402                    ; buffer = 'midimotor1e'
1403                    ; line_number = 36
1404                    ; library _pic16f688 exited
1405            
1406                    ; # The module runs at 20MHz:
1407                    ; line_number = 39
1408                    ; library clock20mhz entered
1409                    ; # Copyright (c) 2004 by Wayne C. Gramlich
1410                    ; # All rights reserved.
1411            
1412                    ; # This library defines the contstants {clock_rate}, {instruction_rate},
1413                    ; # and {clocks_per_instruction}.
1414            
1415                    ; # Define processor constants:
1416                    ; buffer = 'clock20mhz'
1417                    ; line_number = 9
1418                    ; constant clock_rate = 20000000
1419 01312d00 = clock_rate equ 20000000
1420                    ; line_number = 10
1421                    ; constant clocks_per_instruction = 4
1422 00000004 = clocks_per_instruction equ 4
1423                    ; line_number = 11
1424                    ; constant instruction_rate = clock_rate / clocks_per_instruction
1425 004c4b40 = instruction_rate equ 5000000
1426            
1427            
1428                    ; buffer = 'midimotor1e'
1429                    ; line_number = 39
1430                    ; library clock20mhz exited
1431            
1432                    ; # The {_eusart} module needs the following 2 constants defined
1433                    ; # before inclusion:
1434                    ; line_number = 43
1435                    ; constant _eusart_clock = clock_rate
1436 01312d00 = _eusart_clock equ 20000000
1437                    ; line_number = 44
1438                    ; constant _eusart_factor = 4
1439 00000004 = _eusart_factor equ 4
1440                    ; line_number = 45
1441                    ; library _eusart entered
1442            
1443                    ; # Copyright (c) 2005 by Wayne C. Gramlich
1444                    ; # All rights reserved.
1445            
1446                    ; # This library contains a bunch of definitions for the Enhanced Universal
1447                    ; # Asynchronous Serial Receiver/Transmitter (EUSART) that is available
1448                    ; # on many of the PIC microcontrollers.
1449            
1450                    ; # In order to use this module you have to get two constants defined
1451                    ; # BEFORE including this library -- {_eusart_factor} and {_eusart_clock}.
1452                    ; # {_eusart_clock} should be set to the frequency oscillator for the chip.
1453                    ; # {_eusart_factor} should be set to 4, 16, or 64 depending upon whether
1454                    ; # the {_brg16} and {_brgh} bits are set.  Use the table below to select:
1455                    ; #
1456                    ; #        _{brg16}	{_brgh}		_{eusart_factor}
1457                    ; #	    0		   0		      64
1458                    ; #	    0		   1		      16
1459                    ; #	    1		   0		      16
1460                    ; #	    1		   1		       4
1461            
1462                    ; # 2400 bits/sec:
1463                    ; buffer = '_eusart'
1464                    ; line_number = 23
1465                    ; constant _eusart_2400 = (_eusart_clock / (2400 * _eusart_factor)) - 1
1466 00000822 = _eusart_2400 equ 2082
1467                    ; line_number = 24
1468                    ; constant _eusart_2400_low = _eusart_2400 & 0xff
1469 00000022 = _eusart_2400_low equ 34
1470                    ; line_number = 25
1471                    ; constant _eusart_2400_high = _eusart_2400 >> 8
1472 00000008 = _eusart_2400_high equ 8
1473                    ; line_number = 26
1474                    ; constant _eusart_2400_index = 0
1475 00000000 = _eusart_2400_index equ 0
1476                    ; # 4800 bits/sec:
1477                    ; line_number = 28
1478                    ; constant _eusart_4800 = (_eusart_clock / (4800 * _eusart_factor)) - 1
1479 00000410 = _eusart_4800 equ 1040
1480                    ; line_number = 29
1481                    ; constant _eusart_4800_low = _eusart_4800 & 0xff
1482 00000010 = _eusart_4800_low equ 16
1483                    ; line_number = 30
1484                    ; constant _eusart_4800_high = _eusart_4800 >> 8
1485 00000004 = _eusart_4800_high equ 4
1486                    ; line_number = 31
1487                    ; constant _eusart_4800_index = 1
1488 00000001 = _eusart_4800_index equ 1
1489                    ; # 9600 bits/sec:
1490                    ; line_number = 33
1491                    ; constant _eusart_9600 = (_eusart_clock / (9600 * _eusart_factor)) - 1
1492 00000207 = _eusart_9600 equ 519
1493                    ; line_number = 34
1494                    ; constant _eusart_9600_low = _eusart_9600 & 0xff
1495 00000007 = _eusart_9600_low equ 7
1496                    ; line_number = 35
1497                    ; constant _eusart_9600_high = _eusart_9600 >> 8
1498 00000002 = _eusart_9600_high equ 2
1499                    ; line_number = 36
1500                    ; constant _eusart_9600_index = 2
1501 00000002 = _eusart_9600_index equ 2
1502                    ; # 19200 bits/sec:
1503                    ; line_number = 38
1504                    ; constant _eusart_19200 = (_eusart_clock / (19200 * _eusart_factor)) - 1
1505 00000103 = _eusart_19200 equ 259
1506                    ; line_number = 39
1507                    ; constant _eusart_19200_low = _eusart_19200 & 0xff
1508 00000003 = _eusart_19200_low equ 3
1509                    ; line_number = 40
1510                    ; constant _eusart_19200_high = _eusart_19200 >> 8
1511 00000001 = _eusart_19200_high equ 1
1512                    ; line_number = 41
1513                    ; constant _eusart_19200_index = 3
1514 00000003 = _eusart_19200_index equ 3
1515                    ; # 38400 bits/sec:
1516                    ; line_number = 43
1517                    ; constant _eusart_38400 = (_eusart_clock / (38400 * _eusart_factor)) - 1
1518 00000081 = _eusart_38400 equ 129
1519                    ; line_number = 44
1520                    ; constant _eusart_38400_low = _eusart_38400 & 0xff
1521 00000081 = _eusart_38400_low equ 129
1522                    ; line_number = 45
1523                    ; constant _eusart_38400_high = _eusart_38400 >> 8
1524 00000000 = _eusart_38400_high equ 0
1525                    ; line_number = 46
1526                    ; constant _eusart_38400_index = 4
1527 00000004 = _eusart_38400_index equ 4
1528                    ; # 57600 bits/sec:
1529                    ; line_number = 48
1530                    ; constant _eusart_57600 = (_eusart_clock / (57600 * _eusart_factor)) - 1
1531 00000055 = _eusart_57600 equ 85
1532                    ; line_number = 49
1533                    ; constant _eusart_57600_low = _eusart_57600 & 0xff
1534 00000055 = _eusart_57600_low equ 85
1535                    ; line_number = 50
1536                    ; constant _eusart_57600_high = _eusart_57600 >> 8
1537 00000000 = _eusart_57600_high equ 0
1538                    ; line_number = 51
1539                    ; constant _eusart_57600_index = 5
1540 00000005 = _eusart_57600_index equ 5
1541                    ; # 115200 bits/sec:
1542                    ; line_number = 53
1543                    ; constant _eusart_115200 = (_eusart_clock / (115200 * _eusart_factor)) - 1
1544 0000002a = _eusart_115200 equ 42
1545                    ; line_number = 54
1546                    ; constant _eusart_115200_low = _eusart_115200 & 0xff
1547 0000002a = _eusart_115200_low equ 42
1548                    ; line_number = 55
1549                    ; constant _eusart_115200_high = _eusart_115200 >> 8
1550 00000000 = _eusart_115200_high equ 0
1551                    ; line_number = 56
1552                    ; constant _eusart_115200_index = 6
1553 00000006 = _eusart_115200_index equ 6
1554                    ; # 203400 bits/sec:
1555                    ; line_number = 58
1556                    ; constant _eusart_230400 = (_eusart_clock / (230400 * _eusart_factor)) - 1
1557 00000014 = _eusart_230400 equ 20
1558                    ; line_number = 59
1559                    ; constant _eusart_230400_low = _eusart_230400 & 0xff
1560 00000014 = _eusart_230400_low equ 20
1561                    ; line_number = 60
1562                    ; constant _eusart_230400_high = _eusart_230400 >> 8
1563 00000000 = _eusart_230400_high equ 0
1564                    ; line_number = 61
1565                    ; constant _eusart_230400_index = 7
1566 00000007 = _eusart_230400_index equ 7
1567                    ; # 406800 bits/sec:
1568                    ; line_number = 63
1569                    ; constant _eusart_460800 = (_eusart_clock / (460800 * _eusart_factor)) - 1
1570 00000009 = _eusart_460800 equ 9
1571                    ; line_number = 64
1572                    ; constant _eusart_460800_low = _eusart_460800 & 0xff
1573 00000009 = _eusart_460800_low equ 9
1574                    ; line_number = 65
1575                    ; constant _eusart_460800_high = _eusart_460800 >> 8
1576 00000000 = _eusart_460800_high equ 0
1577                    ; line_number = 66
1578                    ; constant _eusart_460800_index = 8
1579 00000008 = _eusart_460800_index equ 8
1580                    ; # 500000 bits/sec:
1581                    ; line_number = 68
1582                    ; constant _eusart_500000 = (_eusart_clock / (500000 * _eusart_factor)) - 1
1583 00000009 = _eusart_500000 equ 9
1584                    ; line_number = 69
1585                    ; constant _eusart_500000_low = _eusart_500000 & 0xff
1586 00000009 = _eusart_500000_low equ 9
1587                    ; line_number = 70
1588                    ; constant _eusart_500000_high = _eusart_500000 >> 8
1589 00000000 = _eusart_500000_high equ 0
1590                    ; line_number = 71
1591                    ; constant _eusart_500000_index = 9
1592 00000009 = _eusart_500000_index equ 9
1593                    ; # 576000 bits/sec (1MHz):
1594                    ; line_number = 73
1595                    ; constant _eusart_576000 = (_eusart_clock / (576000 * _eusart_factor)) - 1
1596 00000007 = _eusart_576000 equ 7
1597                    ; line_number = 74
1598                    ; constant _eusart_576000_low = _eusart_576000 & 0xff
1599 00000007 = _eusart_576000_low equ 7
1600                    ; line_number = 75
1601                    ; constant _eusart_576000_high = _eusart_576000 >> 8
1602 00000000 = _eusart_576000_high equ 0
1603                    ; line_number = 76
1604                    ; constant _eusart_576000_index = 10
1605 0000000a = _eusart_576000_index equ 10
1606                    ; # 625000 bits/sec:
1607                    ; line_number = 78
1608                    ; constant _eusart_625000 = (_eusart_clock / (625000 * _eusart_factor)) - 1
1609 00000007 = _eusart_625000 equ 7
1610                    ; line_number = 79
1611                    ; constant _eusart_625000_low = _eusart_625000 & 0xff
1612 00000007 = _eusart_625000_low equ 7
1613                    ; line_number = 80
1614                    ; constant _eusart_625000_high = _eusart_625000 >> 8
1615 00000000 = _eusart_625000_high equ 0
1616                    ; line_number = 81
1617                    ; constant _eusart_625000_index = 11
1618 0000000b = _eusart_625000_index equ 11
1619                    ; # 833333 bits/sec:
1620                    ; line_number = 83
1621                    ; constant _eusart_833333 = (_eusart_clock / (833333 * _eusart_factor)) - 1
1622 00000005 = _eusart_833333 equ 5
1623                    ; line_number = 84
1624                    ; constant _eusart_833333_low = _eusart_833333 & 0xff
1625 00000005 = _eusart_833333_low equ 5
1626                    ; line_number = 85
1627                    ; constant _eusart_833333_high = _eusart_833333 >> 8
1628 00000000 = _eusart_833333_high equ 0
1629                    ; line_number = 86
1630                    ; constant _eusart_833333_index = 12
1631 0000000c = _eusart_833333_index equ 12
1632                    ; # 921600 bits/sec:
1633                    ; line_number = 88
1634                    ; constant _eusart_921600 = (_eusart_clock / (921600 * _eusart_factor)) - 1
1635 00000004 = _eusart_921600 equ 4
1636                    ; line_number = 89
1637                    ; constant _eusart_921600_low = _eusart_921600 & 0xff
1638 00000004 = _eusart_921600_low equ 4
1639                    ; line_number = 90
1640                    ; constant _eusart_921600_high = _eusart_921600 >> 8
1641 00000000 = _eusart_921600_high equ 0
1642                    ; line_number = 91
1643                    ; constant _eusart_921600_index = 13
1644 0000000d = _eusart_921600_index equ 13
1645                    ; # 1000000 bits/sec (1MHz):
1646                    ; line_number = 93
1647                    ; constant _eusart_1000000 = (_eusart_clock / (1000000 * _eusart_factor)) - 1
1648 00000004 = _eusart_1000000 equ 4
1649                    ; line_number = 94
1650                    ; constant _eusart_1000000_low = _eusart_1000000 & 0xff
1651 00000004 = _eusart_1000000_low equ 4
1652                    ; line_number = 95
1653                    ; constant _eusart_1000000_high = _eusart_1000000 >> 8
1654 00000000 = _eusart_1000000_high equ 0
1655                    ; line_number = 96
1656                    ; constant _eusart_1000000_index = 14
1657 0000000e = _eusart_1000000_index equ 14
1658            
1659                    ; buffer = 'midimotor1e'
1660                    ; line_number = 45
1661                    ; library _eusart exited
1662            
1663                    ; line_number = 47
1664                    ; constant microsecond = 5
1665 00000005 = microsecond equ 5
1666            
1667                    ; line_number = 49
1668                    ; library rb2_constants entered
1669            
1670                    ; # Copyright (c) 2006-2007 by Wayne C. Gramlich.
1671                    ; # All rights reserved.
1672            
1673                    ; buffer = 'rb2_constants'
1674                    ; line_number = 6
1675                    ; constant rb2_ok = 0xa5
1676 000000a5 = rb2_ok equ 165
1677            
1678                    ; line_number = 8
1679                    ; constant rb2_common_address_set = 0xfc
1680 000000fc = rb2_common_address_set equ 252
1681                    ; line_number = 9
1682                    ; constant rb2_common_id_next = 0xfd
1683 000000fd = rb2_common_id_next equ 253
1684                    ; line_number = 10
1685                    ; constant rb2_common_id_start = 0xfe
1686 000000fe = rb2_common_id_start equ 254
1687                    ; line_number = 11
1688                    ; constant rb2_common_deselect = 0xff
1689 000000ff = rb2_common_deselect equ 255
1690            
1691                    ; line_number = 13
1692                    ; constant rb2_laser1_address = 1
1693 00000001 = rb2_laser1_address equ 1
1694                    ; line_number = 14
1695                    ; constant rb2_laser1_sense_read = 0
1696 00000000 = rb2_laser1_sense_read equ 0
1697                    ; line_number = 15
1698                    ; constant rb2_laser1_enable_read = 1
1699 00000001 = rb2_laser1_enable_read equ 1
1700                    ; line_number = 16
1701                    ; constant rb2_laser1_enable_clear = 2
1702 00000002 = rb2_laser1_enable_clear equ 2
1703                    ; line_number = 17
1704                    ; constant rb2_laser1_enable_set = 3
1705 00000003 = rb2_laser1_enable_set equ 3
1706            
1707                    ; line_number = 19
1708                    ; constant rb2_minimotor2_address = 2
1709 00000002 = rb2_minimotor2_address equ 2
1710                    ; line_number = 20
1711                    ; constant rb2_midimotor2_address = 3
1712 00000003 = rb2_midimotor2_address equ 3
1713                    ; line_number = 21
1714                    ; constant rb2_motor0_speed_get = 0
1715 00000000 = rb2_motor0_speed_get equ 0
1716                    ; line_number = 22
1717                    ; constant rb2_motor0_speed_set = 1
1718 00000001 = rb2_motor0_speed_set equ 1
1719                    ; line_number = 23
1720                    ; constant rb2_motor1_speed_get = 2
1721 00000002 = rb2_motor1_speed_get equ 2
1722                    ; line_number = 24
1723                    ; constant rb2_motor1_speed_set = 3
1724 00000003 = rb2_motor1_speed_set equ 3
1725                    ; line_number = 25
1726                    ; constant rb2_duty_cycle_get = 4
1727 00000004 = rb2_duty_cycle_get equ 4
1728                    ; line_number = 26
1729                    ; constant rb2_duty_cycle_set = 8
1730 00000008 = rb2_duty_cycle_set equ 8
1731            
1732                    ; line_number = 28
1733                    ; constant rb2_irdistance2_address = 4
1734 00000004 = rb2_irdistance2_address equ 4
1735                    ; line_number = 29
1736                    ; constant rb2_irdistance2_raw0_get = 0
1737 00000000 = rb2_irdistance2_raw0_get equ 0
1738                    ; line_number = 30
1739                    ; constant rb2_irdistance2_raw1_get = 1
1740 00000001 = rb2_irdistance2_raw1_get equ 1
1741                    ; line_number = 31
1742                    ; constant rb2_irdistance2_smooth0_get = 2
1743 00000002 = rb2_irdistance2_smooth0_get equ 2
1744                    ; line_number = 32
1745                    ; constant rb2_irdistance2_smooth1_get = 3
1746 00000003 = rb2_irdistance2_smooth1_get equ 3
1747                    ; line_number = 33
1748                    ; constant rb2_irdistance2_linear0_get = 4
1749 00000004 = rb2_irdistance2_linear0_get equ 4
1750                    ; line_number = 34
1751                    ; constant rb2_irdistance2_linear1_get = 6
1752 00000006 = rb2_irdistance2_linear1_get equ 6
1753            
1754                    ; line_number = 36
1755                    ; constant rb2_shaft2_address = 5
1756 00000005 = rb2_shaft2_address equ 5
1757                    ; line_number = 37
1758                    ; constant rb2_shaft2_count_latch = 0
1759 00000000 = rb2_shaft2_count_latch equ 0
1760                    ; line_number = 38
1761                    ; constant rb2_shaft2_count_clear = 1
1762 00000001 = rb2_shaft2_count_clear equ 1
1763                    ; line_number = 39
1764                    ; constant rb2_shaft2_shaft0_high_get = 2
1765 00000002 = rb2_shaft2_shaft0_high_get equ 2
1766                    ; line_number = 40
1767                    ; constant rb2_shaft2_shaft1_high_get = 3
1768 00000003 = rb2_shaft2_shaft1_high_get equ 3
1769                    ; line_number = 41
1770                    ; constant rb2_shaft2_continue_get = 4
1771 00000004 = rb2_shaft2_continue_get equ 4
1772                    ; line_number = 42
1773                    ; constant rb2_shaft2_shaft0_low_get = rb2_shaft2_continue_get
1774 00000004 = rb2_shaft2_shaft0_low_get equ 4
1775                    ; line_number = 43
1776                    ; constant rb2_shaft2_shaft1_low_get = rb2_shaft2_continue_get
1777 00000004 = rb2_shaft2_shaft1_low_get equ 4
1778                    ; line_number = 44
1779                    ; constant rb2_shaft2_x_get = 0x10
1780 00000010 = rb2_shaft2_x_get equ 16
1781                    ; line_number = 45
1782                    ; constant rb2_shaft2_y_get = 0x11
1783 00000011 = rb2_shaft2_y_get equ 17
1784                    ; line_number = 46
1785                    ; constant rb2_shaft2_bearing16_get = 0x12
1786 00000012 = rb2_shaft2_bearing16_get equ 18
1787                    ; line_number = 47
1788                    ; constant rb2_shaft2_bearing8_get = 0x13
1789 00000013 = rb2_shaft2_bearing8_get equ 19
1790                    ; line_number = 48
1791                    ; constant rb2_shaft2_target_x_get = 0x14
1792 00000014 = rb2_shaft2_target_x_get equ 20
1793                    ; line_number = 49
1794                    ; constant rb2_shaft2_target_y_get = 0x15
1795 00000015 = rb2_shaft2_target_y_get equ 21
1796                    ; line_number = 50
1797                    ; constant rb2_shaft2_target_bearing16_get = 0x16
1798 00000016 = rb2_shaft2_target_bearing16_get equ 22
1799                    ; line_number = 51
1800                    ; constant rb2_shaft2_target_bearing8_get = 0x17
1801 00000017 = rb2_shaft2_target_bearing8_get equ 23
1802                    ; line_number = 52
1803                    ; constant rb2_shaft2_target_distance_get = 0x18
1804 00000018 = rb2_shaft2_target_distance_get equ 24
1805                    ; line_number = 53
1806                    ; constant rb2_shaft2_wheel_spacing_get = 0x19
1807 00000019 = rb2_shaft2_wheel_spacing_get equ 25
1808                    ; line_number = 54
1809                    ; constant rb2_shaft2_wheel_ticks_get = 0x1a
1810 0000001a = rb2_shaft2_wheel_ticks_get equ 26
1811                    ; line_number = 55
1812                    ; constant rb2_shaft2_wheel_diameter_get = 0x1b
1813 0000001b = rb2_shaft2_wheel_diameter_get equ 27
1814                    ; line_number = 56
1815                    ; constant rb2_shaft2_count_iteration_get = 0x1c
1816 0000001c = rb2_shaft2_count_iteration_get equ 28
1817                    ; line_number = 57
1818                    ; constant rb2_shaft2_counter_signs_get = 0x1d
1819 0000001d = rb2_shaft2_counter_signs_get equ 29
1820                    ; line_number = 58
1821                    ; constant rb2_shaft2_x_set = 0x20
1822 00000020 = rb2_shaft2_x_set equ 32
1823                    ; line_number = 59
1824                    ; constant rb2_shaft2_y_set = 0x21
1825 00000021 = rb2_shaft2_y_set equ 33
1826                    ; line_number = 60
1827                    ; constant rb2_shaft2_bearing16_set = 0x22
1828 00000022 = rb2_shaft2_bearing16_set equ 34
1829                    ; line_number = 61
1830                    ; constant rb2_shaft2_navigation_latch = 0x23
1831 00000023 = rb2_shaft2_navigation_latch equ 35
1832                    ; line_number = 62
1833                    ; constant rb2_shaft2_target_x_set = 0x24
1834 00000024 = rb2_shaft2_target_x_set equ 36
1835                    ; line_number = 63
1836                    ; constant rb2_shaft2_target_y_set = 0x25
1837 00000025 = rb2_shaft2_target_y_set equ 37
1838                    ; line_number = 64
1839                    ; constant rb2_shaft2_wheel_spacing_set = 0x29
1840 00000029 = rb2_shaft2_wheel_spacing_set equ 41
1841                    ; line_number = 65
1842                    ; constant rb2_shaft2_wheel_ticks_set = 0x2a
1843 0000002a = rb2_shaft2_wheel_ticks_set equ 42
1844                    ; line_number = 66
1845                    ; constant rb2_shaft2_wheel_diameter_set = 0x2b
1846 0000002b = rb2_shaft2_wheel_diameter_set equ 43
1847                    ; line_number = 67
1848                    ; constant rb2_shaft2_counter_signs_set = 0x2c
1849 0000002c = rb2_shaft2_counter_signs_set equ 44
1850            
1851                    ; line_number = 69
1852                    ; constant rb2_orient5_address = 6
1853 00000006 = rb2_orient5_address equ 6
1854            
1855                    ; line_number = 71
1856                    ; constant rb2_compass8_address = 7
1857 00000007 = rb2_compass8_address equ 7
1858            
1859                    ; line_number = 73
1860                    ; constant rb2_io8_address = 8
1861 00000008 = rb2_io8_address equ 8
1862                    ; line_number = 74
1863                    ; constant rb2_io8_digital8_get = 0
1864 00000000 = rb2_io8_digital8_get equ 0
1865                    ; line_number = 75
1866                    ; constant rb2_io8_digital8_set = 1
1867 00000001 = rb2_io8_digital8_set equ 1
1868                    ; line_number = 76
1869                    ; constant rb2_io8_direction_get = 2
1870 00000002 = rb2_io8_direction_get equ 2
1871                    ; line_number = 77
1872                    ; constant rb2_io8_direction_set = 3
1873 00000003 = rb2_io8_direction_set equ 3
1874                    ; line_number = 78
1875                    ; constant rb2_io8_analog_mask_get = 4
1876 00000004 = rb2_io8_analog_mask_get equ 4
1877                    ; line_number = 79
1878                    ; constant rb2_io8_analog_mask_set = 5
1879 00000005 = rb2_io8_analog_mask_set equ 5
1880                    ; line_number = 80
1881                    ; constant rb2_io8_analog8_get = 0x10
1882 00000010 = rb2_io8_analog8_get equ 16
1883                    ; line_number = 81
1884                    ; constant rb2_io8_analog10_get = 0x18
1885 00000018 = rb2_io8_analog10_get equ 24
1886                    ; line_number = 82
1887                    ; constant rb2_low_set = 0x20
1888 00000020 = rb2_low_set equ 32
1889                    ; line_number = 83
1890                    ; constant rb2_high_set = 0x30
1891 00000030 = rb2_high_set equ 48
1892            
1893                    ; line_number = 85
1894                    ; constant rb2_sonar2_address = 9
1895 00000009 = rb2_sonar2_address equ 9
1896            
1897                    ; line_number = 87
1898                    ; constant rb2_voice1_address = 10
1899 0000000a = rb2_voice1_address equ 10
1900            
1901                    ; line_number = 89
1902                    ; constant rb2_servo4_address = 11
1903 0000000b = rb2_servo4_address equ 11
1904                    ; line_number = 90
1905                    ; constant rb2_servo4_servo0 = 0
1906 00000000 = rb2_servo4_servo0 equ 0
1907                    ; line_number = 91
1908                    ; constant rb2_servo4_servo1 = 1
1909 00000001 = rb2_servo4_servo1 equ 1
1910                    ; line_number = 92
1911                    ; constant rb2_servo4_servo2 = 2
1912 00000002 = rb2_servo4_servo2 equ 2
1913                    ; line_number = 93
1914                    ; constant rb2_servo4_servo3 = 3
1915 00000003 = rb2_servo4_servo3 equ 3
1916                    ; line_number = 94
1917                    ; constant rb2_servo4_quick_set = 0
1918 00000000 = rb2_servo4_quick_set equ 0
1919                    ; line_number = 95
1920                    ; constant rb2_servo4_quick_low = 0
1921 00000000 = rb2_servo4_quick_low equ 0
1922                    ; line_number = 96
1923                    ; constant rb2_servo4_quick_center = 40
1924 00000028 = rb2_servo4_quick_center equ 40
1925                    ; line_number = 97
1926                    ; constant rb2_servo4_quick_high = 0x7c
1927 0000007c = rb2_servo4_quick_high equ 124
1928                    ; line_number = 98
1929                    ; constant rb2_servo4_high_low_set = 0x80
1930 00000080 = rb2_servo4_high_low_set equ 128
1931                    ; line_number = 99
1932                    ; constant rb2_servo4_short_high_low_set = 0x84
1933 00000084 = rb2_servo4_short_high_low_set equ 132
1934                    ; line_number = 100
1935                    ; constant rb2_servo4_high_set = 0x88
1936 00000088 = rb2_servo4_high_set equ 136
1937                    ; line_number = 101
1938                    ; constant rb2_servo4_low_set = 0x8c
1939 0000008c = rb2_servo4_low_set equ 140
1940                    ; line_number = 102
1941                    ; constant rb2_servo4_enables_set = 0x90
1942 00000090 = rb2_servo4_enables_set equ 144
1943                    ; line_number = 103
1944                    ; constant rb2_servo4_enable0 = 1
1945 00000001 = rb2_servo4_enable0 equ 1
1946                    ; line_number = 104
1947                    ; constant rb2_servo4_enable1 = 2
1948 00000002 = rb2_servo4_enable1 equ 2
1949                    ; line_number = 105
1950                    ; constant rb2_servo4_enable2 = 4
1951 00000004 = rb2_servo4_enable2 equ 4
1952                    ; line_number = 106
1953                    ; constant rb2_servo4_enable3 = 8
1954 00000008 = rb2_servo4_enable3 equ 8
1955                    ; line_number = 107
1956                    ; constant rb2_servo4_enable_all = 0xf
1957 0000000f = rb2_servo4_enable_all equ 15
1958                    ; line_number = 108
1959                    ; constant rb2_servo4_enable_none = 0
1960 00000000 = rb2_servo4_enable_none equ 0
1961                    ; line_number = 109
1962                    ; constant rb2_servo4_high_get = 0xa0
1963 000000a0 = rb2_servo4_high_get equ 160
1964                    ; line_number = 110
1965                    ; constant rb2_servo4_low_get = 0xa4
1966 000000a4 = rb2_servo4_low_get equ 164
1967                    ; line_number = 111
1968                    ; constant rb2_servo4_enables_get = 0xa8
1969 000000a8 = rb2_servo4_enables_get equ 168
1970            
1971                    ; line_number = 113
1972                    ; constant rb2_controller28_address = 28
1973 0000001c = rb2_controller28_address equ 28
1974            
1975                    ; line_number = 115
1976                    ; constant rb2_lcd32_address = 32
1977 00000020 = rb2_lcd32_address equ 32
1978                    ; line_number = 116
1979                    ; constant rb2_lcd32_row_set = 4
1980 00000004 = rb2_lcd32_row_set equ 4
1981                    ; line_number = 117
1982                    ; constant rb2_lcd32_row0_set = rb2_lcd32_row_set | 0
1983 00000004 = rb2_lcd32_row0_set equ 4
1984                    ; line_number = 118
1985                    ; constant rb2_lcd32_row1_set = rb2_lcd32_row_set | 1
1986 00000005 = rb2_lcd32_row1_set equ 5
1987                    ; line_number = 119
1988                    ; constant rb2_lcd32_row2_set = rb2_lcd32_row_set | 2
1989 00000006 = rb2_lcd32_row2_set equ 6
1990                    ; line_number = 120
1991                    ; constant rb2_lcd32_row3_set = rb2_lcd32_row_set | 3
1992 00000007 = rb2_lcd32_row3_set equ 7
1993                    ; line_number = 121
1994                    ; constant rb2_lcd32_new_line = 0xa
1995 0000000a = rb2_lcd32_new_line equ 10
1996                    ; line_number = 122
1997                    ; constant rb2_lcd32_form_feed = 0xc
1998 0000000c = rb2_lcd32_form_feed equ 12
1999                    ; line_number = 123
2000                    ; constant rb2_lcd32_carriage_return = 0xd
2001 0000000d = rb2_lcd32_carriage_return equ 13
2002                    ; line_number = 124
2003                    ; constant rb2_lcd32_column_set = 0x10
2004 00000010 = rb2_lcd32_column_set equ 16
2005            
2006            
2007                    ; buffer = 'midimotor1e'
2008                    ; line_number = 49
2009                    ; library rb2_constants exited
2010            
2011                    ; # The module uses a 20MHz resonator; thus, the oscillator mode is HS:
2012            
2013                    ; # Besides the bus RX/TX lines, only 4 other lines are used to
2014                    ; # control the motor -- RC<0:3>:
2015                    ; line_number = 56
2016                    ; package pdip
2017                    ; line_number = 57
2018                    ; pin 1 = power_supply
2019                    ; line_number = 58
2020                    ;  pin 2 = osc1
2021                    ; line_number = 59
2022                    ;  pin 3 = osc2
2023                    ; line_number = 60
2024                    ;  pin 4 = ra3_nc
2025                    ; line_number = 61
2026                    ;  pin 5 = rx, name=rx, bit=rx_bit
2027 00000007 = rx___byte equ _portc
2028 00000005 = rx___bit equ 5
2029 00000005 = rx_bit equ 5
2030                    ; line_number = 62
2031                    ;  pin 6 = tx, name=tx, bit=tx_bit
2032 00000007 = tx___byte equ _portc
2033 00000004 = tx___bit equ 4
2034 00000004 = tx_bit equ 4
2035                    ; line_number = 63
2036                    ;  pin 7 = rc3_nc
2037                    ; line_number = 64
2038                    ;  pin 8 = rc2_nc
2039                    ; line_number = 65
2040                    ;  pin 9 = rc1_out, name=m1b, mask=m1b_mask, bit=m1b_bit
2041 00000007 = m1b___byte equ _portc
2042 00000001 = m1b___bit equ 1
2043 00000002 = m1b_mask equ 2
2044 00000001 = m1b_bit equ 1
2045                    ; line_number = 66
2046                    ;  pin 10 = rc0_out, name=m1a, mask=m1a_mask, bit=m1a_bit
2047 00000007 = m1a___byte equ _portc
2048 00000000 = m1a___bit equ 0
2049 00000001 = m1a_mask equ 1
2050 00000000 = m1a_bit equ 0
2051                    ; line_number = 67
2052                    ;  pin 11 = an2
2053                    ; line_number = 68
2054                    ;  pin 12 = ra1_in, name=quad_a, mask=quad_a_mask, bit=quad_a_bit
2055 00000005 = quad_a___byte equ _porta
2056 00000001 = quad_a___bit equ 1
2057 00000002 = quad_a_mask equ 2
2058 00000001 = quad_a_bit equ 1
2059                    ; line_number = 69
2060                    ;  pin 13 = ra0_in, name=quad_b, mask=quad_b_mask, bit=quad_b_bit
2061 00000005 = quad_b___byte equ _porta
2062 00000000 = quad_b___bit equ 0
2063 00000001 = quad_b_mask equ 1
2064 00000000 = quad_b_bit equ 0
2065                    ; line_number = 70
2066                    ;  pin 14 = ground
2067            
2068                    ; # All of the 24-bit signed file24 in the 24-bit register file are stored
2069                    ; # in the {highs}, {middles} and {lows} arrays:
2070                    ; line_number = 74
2071                    ; constant position_index = 0		# Current position
2072 00000000 = position_index equ 0
2073                    ; line_number = 75
2074                    ; constant target_index = 1		# Target position
2075 00000001 = target_index equ 1
2076                    ; line_number = 76
2077                    ; constant divisor_index = 2		# Denominator for {kp}, {ki}, and {kd}
2078 00000002 = divisor_index equ 2
2079                    ; line_number = 77
2080                    ; constant kp_index = 3			# Numerator for {kp}
2081 00000003 = kp_index equ 3
2082                    ; line_number = 78
2083                    ; constant ki_index = 4			# Numerator for {ki}
2084 00000004 = ki_index equ 4
2085                    ; line_number = 79
2086                    ; constant kd_index = 5			# Numerator for {kd}
2087 00000005 = kd_index equ 5
2088                    ; line_number = 80
2089                    ; constant ad0_value_index = 6		# AD0
2090 00000006 = ad0_value_index equ 6
2091                    ; line_number = 81
2092                    ; constant ad1_value_index = 7		# AD1
2093 00000007 = ad1_value_index equ 7
2094                    ; line_number = 82
2095                    ; constant ad0_limit_index = 8		# AD0
2096 00000008 = ad0_limit_index equ 8
2097                    ; line_number = 83
2098                    ; constant ad1_limit_index = 9		# AD1
2099 00000009 = ad1_limit_index equ 9
2100                    ; line_number = 84
2101                    ; constant file24_size = 10		# 24-bit register file has 6 registers
2102 0000000a = file24_size equ 10
2103            
2104                    ; # We are short of bytes in data bank 0, so we stuff the 24-bit register
2105                    ; # files off into data bank 2:
2106                    ; line_number = 89
2107                    ; global highs[file24_size] array[byte]	# All the highs are grouped together
2108 00000120 = highs equ globals___2
2109                    ; line_number = 90
2110                    ; global middles[file24_size] array[byte]	# All the middles are grouped together
2111 0000012a = middles equ globals___2+10
2112                    ; line_number = 91
2113                    ; global lows[file24_size] array[byte]	# All the lows are grouped together
2114 00000134 = lows equ globals___2+20
2115            
2116                    ; # The quardarture is actually the same as the position:
2117                    ; line_number = 94
2118                    ; bind quad_high = highs[position_index]
2119 00000120 = quad_high equ globals___2
2120                    ; line_number = 95
2121                    ; bind quad_middle = middles[position_index]
2122 0000012a = quad_middle equ globals___2+10
2123                    ; line_number = 96
2124                    ; bind quad_low = lows[position_index]
2125 00000134 = quad_low equ globals___2+20
2126                    ; line_number = 97
2127                    ; global quad_state byte			# The quadrature state
2128 0000013e = quad_state equ globals___2+30
2129            
2130                    ; line_number = 99
2131                    ; bind ad0_value_high = highs[ad0_value_index]
2132 00000126 = ad0_value_high equ globals___2+6
2133                    ; line_number = 100
2134                    ; bind ad0_value_middle = middles[ad0_value_index]
2135 00000130 = ad0_value_middle equ globals___2+16
2136                    ; line_number = 101
2137                    ; bind ad0_value_low = lows[ad0_value_index]
2138 0000013a = ad0_value_low equ globals___2+26
2139                    ; line_number = 102
2140                    ; bind ad1_value_high = highs[ad1_value_index]
2141 00000127 = ad1_value_high equ globals___2+7
2142                    ; line_number = 103
2143                    ; bind ad1_value_middle = middles[ad1_value_index]
2144 00000131 = ad1_value_middle equ globals___2+17
2145                    ; line_number = 104
2146                    ; bind ad1_value_low = lows[ad1_value_index]
2147 0000013b = ad1_value_low equ globals___2+27
2148            
2149                    ; line_number = 106
2150                    ; bind ad0_limit_high = highs[ad0_limit_index]
2151 00000128 = ad0_limit_high equ globals___2+8
2152                    ; line_number = 107
2153                    ; bind ad0_limit_middle = middles[ad0_limit_index]
2154 00000132 = ad0_limit_middle equ globals___2+18
2155                    ; line_number = 108
2156                    ; bind ad0_limit_low = lows[ad0_limit_index]
2157 0000013c = ad0_limit_low equ globals___2+28
2158                    ; line_number = 109
2159                    ; bind ad1_limit_high = highs[ad1_limit_index]
2160 00000129 = ad1_limit_high equ globals___2+9
2161                    ; line_number = 110
2162                    ; bind ad1_limit_middle = middles[ad1_limit_index]
2163 00000133 = ad1_limit_middle equ globals___2+19
2164                    ; line_number = 111
2165                    ; bind ad1_limit_low = lows[ad1_limit_index]
2166 0000013d = ad1_limit_low equ globals___2+29
2167            
2168                    ; # Temporarily removed to free up some space:
2169                    ; #global xstates[32] array[byte]
2170            
2171                    ; # Every else with the 24-bit register file24 is in data bank 0:
2172                    ; line_number = 118
2173                    ; global file24_changed byte		# 1 bit for each value to mark change
2174 00000020 = file24_changed equ globals___0
2175                    ; line_number = 119
2176                    ; global file24_zero byte			# 1 bit for each value set to zero
2177 00000021 = file24_zero equ globals___0+1
2178            
2179                    ; # A number of places need a temporary for high, middle and low.  Rather
2180                    ; # than chew up scarse memory, we share them all with globals.  As of now,
2181                    ; # these bytes are used in {file24_float_convert}() and {uart_manage}():
2182                    ; line_number = 124
2183                    ; global high byte			# Temporary high byte
2184 00000022 = high equ globals___0+2
2185                    ; line_number = 125
2186                    ; global middle byte			# Temporary middle byte
2187 00000023 = middle equ globals___0+3
2188                    ; line_number = 126
2189                    ; global low byte				# Temporary low byte
2190 00000024 = low equ globals___0+4
2191            
2192                    ; # The 8-bit register file is stored in {file8} and indexed using the
2193                    ; # indices below:
2194                    ; line_number = 130
2195                    ; constant configure_index = 0		# Configuration byte index
2196 00000000 = configure_index equ 0
2197                    ; line_number = 131
2198                    ; constant status_index = 1		# Status byte index
2199 00000001 = status_index equ 1
2200                    ; line_number = 132
2201                    ; constant speed_index = 2		# Current motor speed index
2202 00000002 = speed_index equ 2
2203                    ; line_number = 133
2204                    ; constant errors_index = 3		# Error count
2205 00000003 = errors_index equ 3
2206                    ; line_number = 134
2207                    ; constant deadband_index = 4		# Deadband for error
2208 00000004 = deadband_index equ 4
2209                    ; line_number = 135
2210                    ; constant minimum_index = 5		# Motor (non-zero) speed minimum
2211 00000005 = minimum_index equ 5
2212                    ; line_number = 136
2213                    ; constant maximum_index = 6		# Motor speed maximum
2214 00000006 = maximum_index equ 6
2215                    ; line_number = 137
2216                    ; constant file24_index_index = 7		# Index into 24-bit register file
2217 00000007 = file24_index_index equ 7
2218                    ; line_number = 138
2219                    ; constant file8_size = 8			# We have 8 registers in {file8]
2220 00000008 = file8_size equ 8
2221            
2222                    ; # These are the configure bits numbers:
2223                    ; line_number = 141
2224                    ; constant configure_motor_reverse_bit = 0    # Motor reverse bit
2225 00000000 = configure_motor_reverse_bit equ 0
2226                    ; line_number = 142
2227                    ; constant configure_position_reverse_bit = 1 # Position sensor reverse bit
2228 00000001 = configure_position_reverse_bit equ 1
2229                    ; line_number = 143
2230                    ; constant configure_quadrature_bit = 2	    # Quadrature disable bit
2231 00000002 = configure_quadrature_bit equ 2
2232                    ; line_number = 144
2233                    ; constant configure_lock_bit = 3		    # Lock configuration registers
2234 00000003 = configure_lock_bit equ 3
2235                    ; line_number = 145
2236                    ; constant configure_analog1_reverse_bit = 4  # Reverse analog1 sense direction
2237 00000004 = configure_analog1_reverse_bit equ 4
2238                    ; line_number = 146
2239                    ; constant configure_analog1_enable_bit = 5   # Reverse analog1 enable
2240 00000005 = configure_analog1_enable_bit equ 5
2241                    ; line_number = 147
2242                    ; constant configure_analog0_reverse_bit = 6  # Reverse analog0 sense direction
2243 00000006 = configure_analog0_reverse_bit equ 6
2244                    ; line_number = 148
2245                    ; constant configure_analog0_enable_bit = 7   # Reverse analog0 enable
2246 00000007 = configure_analog0_enable_bit equ 7
2247            
2248                    ; # Associated analog masks:
2249                    ; line_number = 151
2250                    ; constant configure_motor_reverse_mask = 1 << configure_motor_reverse_bit
2251 00000001 = configure_motor_reverse_mask equ 1
2252                    ; line_number = 152
2253                    ; constant configure_position_reverse_mask = 1 << configure_position_reverse_bit
2254 00000002 = configure_position_reverse_mask equ 2
2255                    ; line_number = 153
2256                    ; constant configure_quadrature_mask = 1 << configure_quadrature_bit
2257 00000004 = configure_quadrature_mask equ 4
2258                    ; line_number = 154
2259                    ; constant configure_analog1_reverse_mask = 1 << configure_analog1_reverse_bit
2260 00000010 = configure_analog1_reverse_mask equ 16
2261                    ; line_number = 155
2262                    ; constant configure_analog1_enable_mask = 1 << configure_analog1_enable_bit
2263 00000020 = configure_analog1_enable_mask equ 32
2264                    ; line_number = 156
2265                    ; constant configure_analog0_reverse_mask = 1 << configure_analog0_reverse_bit
2266 00000040 = configure_analog0_reverse_mask equ 64
2267                    ; line_number = 157
2268                    ; constant configure_analog0_enable_mask = 1 << configure_analog0_enable_bit
2269 00000080 = configure_analog0_enable_mask equ 128
2270                    ; line_number = 158
2271                    ; constant configure_analogs_enabled_mask = configure_analog0_enable_mask | configure_analog1_enable_mask 
2272 000000a0 = configure_analogs_enabled_mask equ 160
2273            
2274                    ; # Here is the actual array of {file8}:
2275                    ; line_number = 162
2276                    ; global file8[file8_size] array[byte]
2277 00000025 = file8 equ globals___0+5
2278            
2279                    ; # It is a hassle to always index into {file8}, we use binds to make
2280                    ; # the code more readable:
2281                    ; line_number = 166
2282                    ; bind configure = file8[configure_index]
2283 00000025 = configure equ globals___0+5
2284                    ; line_number = 167
2285                    ; bind motor_reverse = configure@configure_motor_reverse_bit
2286 00000025 = motor_reverse___byte equ globals___0+5
2287 00000000 = motor_reverse___bit equ 0
2288                    ; line_number = 168
2289                    ; bind position_reverse = configure@configure_position_reverse_bit
2290 00000025 = position_reverse___byte equ globals___0+5
2291 00000001 = position_reverse___bit equ 1
2292                    ; line_number = 169
2293                    ; bind use_potentiometer = configure@configure_quadrature_bit
2294 00000025 = use_potentiometer___byte equ globals___0+5
2295 00000002 = use_potentiometer___bit equ 2
2296                    ; line_number = 170
2297                    ; bind configure_lock = configure@configure_lock_bit
2298 00000025 = configure_lock___byte equ globals___0+5
2299 00000003 = configure_lock___bit equ 3
2300                    ; line_number = 171
2301                    ; bind ad0_reverse = configure@configure_analog0_reverse_bit
2302 00000025 = ad0_reverse___byte equ globals___0+5
2303 00000006 = ad0_reverse___bit equ 6
2304                    ; line_number = 172
2305                    ; bind ad0_enable = configure@configure_analog0_enable_bit
2306 00000025 = ad0_enable___byte equ globals___0+5
2307 00000007 = ad0_enable___bit equ 7
2308                    ; line_number = 173
2309                    ; bind ad1_reverse = configure@configure_analog0_reverse_bit
2310 00000025 = ad1_reverse___byte equ globals___0+5
2311 00000006 = ad1_reverse___bit equ 6
2312                    ; line_number = 174
2313                    ; bind ad1_enable = configure@configure_analog1_enable_bit
2314 00000025 = ad1_enable___byte equ globals___0+5
2315 00000005 = ad1_enable___bit equ 5
2316                    ; line_number = 175
2317                    ; bind status = file8[status_index]
2318 00000026 = status equ globals___0+6
2319                    ; line_number = 176
2320                    ; bind speed = file8[speed_index]
2321 00000027 = speed equ globals___0+7
2322                    ; line_number = 177
2323                    ; bind errors = file8[errors_index]
2324 00000028 = errors equ globals___0+8
2325                    ; line_number = 178
2326                    ; bind deadband = file8[deadband_index]
2327 00000029 = deadband equ globals___0+9
2328                    ; line_number = 179
2329                    ; bind minimum = file8[minimum_index]
2330 0000002a = minimum equ globals___0+10
2331                    ; line_number = 180
2332                    ; bind maximum = file8[maximum_index]
2333 0000002b = maximum equ globals___0+11
2334                    ; line_number = 181
2335                    ; bind file24_index = file8[file24_index_index]
2336 0000002c = file24_index equ globals___0+12
2337            
2338                    ; # These are the variables used to control motor1:
2339                    ; line_number = 184
2340                    ; global motor1_speed byte
2341 0000002d = motor1_speed equ globals___0+13
2342                    ; line_number = 185
2343                    ; global motor1_on_mask byte
2344 0000002e = motor1_on_mask equ globals___0+14
2345                    ; line_number = 186
2346                    ; global motor1_pulse_width byte
2347 0000002f = motor1_pulse_width equ globals___0+15
2348            
2349                    ; # UART Globals and constants:
2350            
2351                    ; line_number = 190
2352                    ; global state byte			# State machine for command parsing
2353 00000030 = state equ globals___0+16
2354                    ; line_number = 191
2355                    ; constant state_select_wait = 0		# Waiting for a select address
2356 00000000 = state_select_wait equ 0
2357                    ; line_number = 192
2358                    ; constant state_echo_then_command = 1	# Wait for echo then a command
2359 00000001 = state_echo_then_command equ 1
2360                    ; line_number = 193
2361                    ; constant state_command = 2		# Wait for a command
2362 00000002 = state_command equ 2
2363                    ; line_number = 194
2364                    ; constant state_file24_full_get1 = 3
2365 00000003 = state_file24_full_get1 equ 3
2366                    ; line_number = 195
2367                    ; constant state_file24_full_get2 = 4
2368 00000004 = state_file24_full_get2 equ 4
2369                    ; line_number = 196
2370                    ; constant state_file24_full_set1 = 5
2371 00000005 = state_file24_full_set1 equ 5
2372                    ; line_number = 197
2373                    ; constant state_file24_full_set2 = 6
2374 00000006 = state_file24_full_set2 equ 6
2375                    ; line_number = 198
2376                    ; constant state_file24_full_set3 = 7
2377 00000007 = state_file24_full_set3 equ 7
2378                    ; line_number = 199
2379                    ; constant state_value_low_set1 = 8
2380 00000008 = state_value_low_set1 equ 8
2381                    ; line_number = 200
2382                    ; constant state_value_middle_set1 = 9
2383 00000009 = state_value_middle_set1 equ 9
2384                    ; line_number = 201
2385                    ; constant state_value_high_set1 = 10
2386 0000000a = state_value_high_set1 equ 10
2387                    ; line_number = 202
2388                    ; constant state_file8_set1 = 11
2389 0000000b = state_file8_set1 equ 11
2390                    ; line_number = 203
2391                    ; constant state_file8_set2 = 12
2392 0000000c = state_file8_set2 equ 12
2393                    ; line_number = 204
2394                    ; constant state_file8_set3 = 13
2395 0000000d = state_file8_set3 equ 13
2396                    ; line_number = 205
2397                    ; constant state_address_set1 = 14
2398 0000000e = state_address_set1 equ 14
2399                    ; line_number = 206
2400                    ; constant state_address_set2 = 15
2401 0000000f = state_address_set2 equ 15
2402                    ; line_number = 207
2403                    ; constant state_address_set3 = 16
2404 00000010 = state_address_set3 equ 16
2405                    ; line_number = 208
2406                    ; constant state_address_set4 = 17
2407 00000011 = state_address_set4 equ 17
2408                    ; line_number = 209
2409                    ; constant state_probe_get1 = 18
2410 00000012 = state_probe_get1 equ 18
2411                    ; line_number = 210
2412                    ; constant state_probe_get2 = 19
2413 00000013 = state_probe_get2 equ 19
2414            
2415                    ; line_number = 212
2416                    ; global id_index byte			# Index into id string
2417 00000031 = id_index equ globals___0+17
2418            
2419                    ; # UART data input buffer:
2420                    ; line_number = 215
2421                    ; constant uart_input_size = 4			# Buffer size (=power of 2)
2422 00000004 = uart_input_size equ 4
2423                    ; line_number = 216
2424                    ; constant uart_input_mask = uart_input_size - 1	# Mask for index
2425 00000003 = uart_input_mask equ 3
2426                    ; line_number = 217
2427                    ; global uart_input[uart_input_size] array[byte]	# Buffer for input
2428 00000032 = uart_input equ globals___0+18
2429                    ; line_number = 218
2430                    ; global uart_input_in_index byte			# Next index to insert into
2431 00000036 = uart_input_in_index equ globals___0+22
2432                    ; line_number = 219
2433                    ; global uart_input_out_index byte		# Next index to remove from
2434 00000037 = uart_input_out_index equ globals___0+23
2435                    ; line_number = 220
2436                    ; global uart_input_count byte			# Bytes in buffer
2437 00000038 = uart_input_count equ globals___0+24
2438                    ; line_number = 221
2439                    ; global uart_input_pending bit			# 1=>data is pending; 0=>no data
2440 0000006f = uart_input_pending___byte equ globals___0+79
2441 00000000 = uart_input_pending___bit equ 0
2442            
2443                    ; line_number = 223
2444                    ; global address byte			# Address of this module
2445 00000039 = address equ globals___0+25
2446                    ; line_number = 224
2447                    ; global new_address byte			# New address of this module
2448 0000003a = new_address equ globals___0+26
2449                    ; line_number = 225
2450                    ; global channel byte			# A/D channel
2451 0000003b = channel equ globals___0+27
2452            
2453                    ; # Load up floating point library in code bank 1 using datab bank 0:
2454                    ; line_number = 228
2455                    ; library_bank 1
2456                    ; line_number = 230
2457                    ; library _float32 entered
2458            
2459                    ; # Copyright (c) 2005-2006 Wayne C. Gramlich
2460                    ; # All rights reserved.
2461            
2462                    ; # This library implements the following procedures for general use
2463                    ; # by users:
2464                    ; #
2465                    ; #    _float32_from_byte			return float(x) where x is a byte
2466                    ; #    _float32_to_byte			return byte(x) whre x is a float
2467                    ; #
2468                    ; # The following additional procedures are implemented for use by the
2469                    ; # compiler.
2470                    ; #
2471                    ; #    _float32_pointer_load()		A := M[W]
2472                    ; #    _float32_pointer_add()		A := M[W]
2473                    ; #    _float32_pointer_divide()		A := A / M[W]
2474                    ; #    _float32_pointer_multiply()	A := A * M[W]
2475                    ; #    _float32_pointer_subtract()	A := A - M[W]
2476                    ; #    _float32_pointer_store		M[W] := A
2477                    ; #    _float32_pointer_negate		A := -A
2478                    ; #    _float32_pointer_reciprocal	A := 1/A
2479                    ; #    _float32_pointer_swap		A <=> M[W]
2480                    ; #    _float32_equals			_z := A = 0.0
2481                    ; #    _float32_not_equal			_z := A != 0.0
2482                    ; #    _float32_less_than			_z := if A < 0.0
2483                    ; #    _float32_less_than_or_equal	_z := A <= 0.0
2484                    ; #    _float32_greater_than		_z := A > 0.0
2485                    ; #    _float32_greater_than_or_equal	_z := A >= 0.0
2486                    ; #
2487                    ; # All of the procedures constants and labels in this library are
2488                    ; # prefixed by "_float32_".
2489                    ; #
2490                    ; # The _float32 library is seriously intertwingled (technical term)
2491                    ; # with the _float32_base library.  What this means is both libraries
2492                    ; # need to be loaded into the same code bank and data bank.  There
2493                    ; # is no real nead to worry since there is a "library _float32_base"
2494                    ; # immediately below.  These two libraries pretty much fill up
2495                    ; # all of the code bank they are loaded into.
2496                    ; #
2497                    ; # For the uCL compiler, floats are required to be aligned on even
2498                    ; # memory addresses.  Since the PIC16F* processor can not access more
2499                    ; # 512 bytes of RAM, this means that a pointer a float can be represented
2500                    ; # in 8-bits as (float_address>>1).  (Pretty, slick!)
2501            
2502                    ; buffer = '_float32'
2503                    ; line_number = 46
2504                    ; library _float32_base entered
2505            
2506                    ; # Copyright (c) 2005-2006 by Wayne C. Gramlich
2507                    ; # All rights reserved.
2508                    ; # Copyright (c) 1997 by Microchip, Inc.
2509                    ; # All rights reserved.
2510                    ; #
2511                    ; # This code is based on a floating point library provided by Microchip
2512                    ; # in AN575.  Note, only the translation aspect is copyright Wayne C.
2513                    ; # Gramlich; the original code is copyright by Microchip.
2514                    ; #
2515                    ; #
2516                    ; # This library implements the following procedures:
2517                    ; #
2518                    ; #    _float32_from_integer24()		Convert 24-bit integer into float
2519                    ; #    _float32_normalize()		Normalize a float
2520                    ; #    _float32_from integer32()		Convert 32-bit integer into float
2521                    ; #    _float32_normalize40()		Normalize a 40-bit float
2522                    ; #    _float32_integer24_convert()	Convert float into 24 bit integer
2523                    ; #    _float32_integer32_convert()	Convert float into 32 bit integer
2524                    ; #    _float32_multiply()		Multiply two floats
2525                    ; #    _float32_divide()			Divide two floats
2526                    ; #    _float32_subtract()		Subtract two floats
2527                    ; #    _float32_add()			Add two floats
2528                    ; #
2529                    ; # All procedures, constants, and labels in this procedure are
2530                    ; # prefixed with "_float32_".
2531                    ; #
2532                    ; # Every attempt has been made to ensure that it compiles *exactly* as
2533                    ; # the .hex file that ships with AN575.  The remaining procedures
2534                    ; # needed by the uCL compiler are in library _float32.
2535                    ; #
2536                    ; # Note that this procedure defines memory needed for both the
2537                    ; # main arithmetic procedures and some of the square root and trigametric
2538                    ; # procedures in the _float32_trig library.
2539            
2540                    ; buffer = '_float32_base'
2541                    ; line_number = 37
2542                    ; constant _float32_status = 3
2543 00000003 = _float32_status equ 3
2544                    ; line_number = 38
2545                    ; constant _float32_c = 0
2546 00000000 = _float32_c equ 0
2547                    ; line_number = 39
2548                    ; constant _float32_z = 2
2549 00000002 = _float32_z equ 2
2550            
2551                    ; # The floating point variables:
2552                    ; line_number = 42
2553                    ; constant _float32_msb = 7
2554 00000007 = _float32_msb equ 7
2555                    ; line_number = 43
2556                    ; constant _float32_lsb = 0
2557 00000000 = _float32_lsb equ 0
2558            
2559                    ; line_number = 45
2560                    ; global _float32_loc20 byte
2561 000000a0 = _float32_loc20 equ globals___1
2562                    ; line_number = 46
2563                    ; global _float32_loc21 byte
2564 000000a1 = _float32_loc21 equ globals___1+1
2565                    ; line_number = 47
2566                    ; global _float32_loc22 byte
2567 000000a2 = _float32_loc22 equ globals___1+2
2568                    ; line_number = 48
2569                    ; global _float32_loc23 byte
2570 000000a3 = _float32_loc23 equ globals___1+3
2571                    ; line_number = 49
2572                    ; global _float32_loc24 byte
2573 000000a4 = _float32_loc24 equ globals___1+4
2574                    ; line_number = 50
2575                    ; global _float32_loc25 byte
2576 000000a5 = _float32_loc25 equ globals___1+5
2577                    ; line_number = 51
2578                    ; global _float32_loc26 byte
2579 000000a6 = _float32_loc26 equ globals___1+6
2580                    ; line_number = 52
2581                    ; global _float32_loc27 byte
2582 000000a7 = _float32_loc27 equ globals___1+7
2583                    ; line_number = 53
2584                    ; global _float32_loc28 byte
2585 000000a8 = _float32_loc28 equ globals___1+8
2586                    ; line_number = 54
2587                    ; global _float32_loc29 byte
2588 000000a9 = _float32_loc29 equ globals___1+9
2589                    ; line_number = 55
2590                    ; global _float32_loc2a byte
2591 000000aa = _float32_loc2a equ globals___1+10
2592                    ; line_number = 56
2593                    ; global _float32_loc2b byte
2594 000000ab = _float32_loc2b equ globals___1+11
2595                    ; line_number = 57
2596                    ; global _float32_loc2c byte
2597 000000ac = _float32_loc2c equ globals___1+12
2598                    ; line_number = 58
2599                    ; global _float32_loc2d byte
2600 000000ad = _float32_loc2d equ globals___1+13
2601                    ; line_number = 59
2602                    ; global _float32_loc2e byte
2603 000000ae = _float32_loc2e equ globals___1+14
2604                    ; line_number = 60
2605                    ; global _float32_loc2f byte
2606 000000af = _float32_loc2f equ globals___1+15
2607                    ; line_number = 61
2608                    ; global _float32_loc30 byte
2609 000000b0 = _float32_loc30 equ globals___1+16
2610                    ; line_number = 62
2611                    ; global _float32_loc31 byte
2612 000000b1 = _float32_loc31 equ globals___1+17
2613                    ; line_number = 63
2614                    ; global _float32_loc32 byte
2615 000000b2 = _float32_loc32 equ globals___1+18
2616                    ; line_number = 64
2617                    ; global _float32_loc33 byte
2618 000000b3 = _float32_loc33 equ globals___1+19
2619                    ; line_number = 65
2620                    ; global _float32_loc34 byte
2621 000000b4 = _float32_loc34 equ globals___1+20
2622                    ; line_number = 66
2623                    ; global _float32_loc35 byte
2624 000000b5 = _float32_loc35 equ globals___1+21
2625                    ; line_number = 67
2626                    ; global _float32_loc36 byte
2627 000000b6 = _float32_loc36 equ globals___1+22
2628                    ; line_number = 68
2629                    ; global _float32_loc37 byte
2630 000000b7 = _float32_loc37 equ globals___1+23
2631                    ; line_number = 69
2632                    ; global _float32_loc38 byte
2633 000000b8 = _float32_loc38 equ globals___1+24
2634                    ; line_number = 70
2635                    ; global _float32_loc39 byte
2636 000000b9 = _float32_loc39 equ globals___1+25
2637                    ; line_number = 71
2638                    ; global _float32_loc3a byte
2639 000000ba = _float32_loc3a equ globals___1+26
2640                    ; line_number = 72
2641                    ; global _float32_loc3b byte
2642 000000bb = _float32_loc3b equ globals___1+27
2643                    ; line_number = 73
2644                    ; global _float32_loc3c byte
2645 000000bc = _float32_loc3c equ globals___1+28
2646                    ; line_number = 74
2647                    ; global _float32_loc3d byte
2648 000000bd = _float32_loc3d equ globals___1+29
2649                    ; line_number = 75
2650                    ; global _float32_loc3e byte
2651 000000be = _float32_loc3e equ globals___1+30
2652                    ; line_number = 76
2653                    ; global _float32_loc3f byte
2654 000000bf = _float32_loc3f equ globals___1+31
2655                    ; line_number = 77
2656                    ; global _float32_loc40 byte
2657 000000c0 = _float32_loc40 equ globals___1+32
2658                    ; line_number = 78
2659                    ; global _float32_loc41 byte
2660 000000c1 = _float32_loc41 equ globals___1+33
2661                    ; line_number = 79
2662                    ; global _float32_loc42 byte
2663 000000c2 = _float32_loc42 equ globals___1+34
2664                    ; line_number = 80
2665                    ; global _float32_loc43 byte
2666 000000c3 = _float32_loc43 equ globals___1+35
2667                    ; #global _float32_loc44 byte
2668                    ; #global _float32_loc45 byte
2669                    ; #global _float32_loc46 byte
2670                    ; #global _float32_loc47 byte
2671                    ; #global _float32_loc48 byte
2672                    ; #global _float32_loc49 byte
2673                    ; #global _float32_loc4a byte
2674                    ; #global _float32_loc4b byte
2675            
2676                    ; # general register variables
2677            
2678                    ; # These are not used currently!!!
2679                    ; #bind _float32_accb7 = _float32_loc20
2680                    ; #bind _float32_accb6 = _float32_loc21
2681                    ; #bind _float32_accb5 = _float32_loc22
2682                    ; #bind _float32_accb4 = _float32_loc23
2683                    ; #bind _float32_accb3 = _float32_loc24
2684                    ; #bind _float32_accb2 = _float32_loc25
2685                    ; #bind _float32_accb1 = _float32_loc26
2686                    ; #bind _float32_accb0 = _float32_loc27
2687                    ; # most significant byte of contiguous 8 byte accumulator
2688                    ; #bind _float32_acc = _float32_loc27
2689            
2690                    ; # save location for sign in MSB
2691                    ; line_number = 105
2692                    ; bind _float32_sign = _float32_loc29
2693 000000a9 = _float32_sign equ globals___1+9
2694            
2695                    ; line_number = 107
2696                    ; bind _float32_tempb3 = _float32_loc30
2697 000000b0 = _float32_tempb3 equ globals___1+16
2698                    ; line_number = 108
2699                    ; bind _float32_tempb2 = _float32_loc31
2700 000000b1 = _float32_tempb2 equ globals___1+17
2701                    ; line_number = 109
2702                    ; bind _float32_tempb1 = _float32_loc32
2703 000000b2 = _float32_tempb1 equ globals___1+18
2704                    ; line_number = 110
2705                    ; bind _float32_tempb0 = _float32_loc33
2706 000000b3 = _float32_tempb0 equ globals___1+19
2707                    ; # temporary storage
2708                    ; line_number = 112
2709                    ; bind _float32_temp = _float32_loc33
2710 000000b3 = _float32_temp equ globals___1+19
2711            
2712                    ; # binary operation arguments
2713            
2714                    ; line_number = 116
2715                    ; bind _float32_aargb7 = _float32_loc20
2716 000000a0 = _float32_aargb7 equ globals___1
2717                    ; line_number = 117
2718                    ; bind _float32_aargb6 = _float32_loc21
2719 000000a1 = _float32_aargb6 equ globals___1+1
2720                    ; line_number = 118
2721                    ; bind _float32_aargb5 = _float32_loc22
2722 000000a2 = _float32_aargb5 equ globals___1+2
2723                    ; line_number = 119
2724                    ; bind _float32_aargb4 = _float32_loc23
2725 000000a3 = _float32_aargb4 equ globals___1+3
2726                    ; line_number = 120
2727                    ; bind _float32_aargb3 = _float32_loc24
2728 000000a4 = _float32_aargb3 equ globals___1+4
2729                    ; line_number = 121
2730                    ; bind _float32_aargb2 = _float32_loc25
2731 000000a5 = _float32_aargb2 equ globals___1+5
2732                    ; line_number = 122
2733                    ; bind _float32_aargb1 = _float32_loc26
2734 000000a6 = _float32_aargb1 equ globals___1+6
2735                    ; line_number = 123
2736                    ; bind _float32_aargb0 = _float32_loc27
2737 000000a7 = _float32_aargb0 equ globals___1+7
2738                    ; # most significant byte of argument A
2739                    ; line_number = 125
2740                    ; bind _float32_aarg = _float32_loc27
2741 000000a7 = _float32_aarg equ globals___1+7
2742            
2743                    ; line_number = 127
2744                    ; bind _float32_bargb3 = _float32_loc2b
2745 000000ab = _float32_bargb3 equ globals___1+11
2746                    ; line_number = 128
2747                    ; bind _float32_bargb2 = _float32_loc2c
2748 000000ac = _float32_bargb2 equ globals___1+12
2749                    ; line_number = 129
2750                    ; bind _float32_bargb1 = _float32_loc2d
2751 000000ad = _float32_bargb1 equ globals___1+13
2752                    ; line_number = 130
2753                    ; bind _float32_bargb0 = _float32_loc2e
2754 000000ae = _float32_bargb0 equ globals___1+14
2755                    ; # most significant byte of argument B
2756                    ; line_number = 132
2757                    ; bind _float32_barg = _float32_loc2e
2758 000000ae = _float32_barg equ globals___1+14
2759            
2760                    ; # Note that AARG and ACC reference the same storage locations
2761            
2762                    ; # FIXED POINT SPECIFIC DEFINITIONS
2763                    ; # remainder storage
2764            
2765                    ; # These are not currently being used!!!
2766                    ; #bind _float32_remb3 = _float32_loc20
2767                    ; #bind _float32_remb2 = _float32_loc21
2768                    ; #bind _float32_remb1 = _float32_loc22
2769                    ; ## most significant byte of remainder
2770                    ; #bind _float32_remb0 = _float32_loc23
2771            
2772                    ; line_number = 146
2773                    ; bind _float32_loopcount = _float32_loc34
2774 000000b4 = _float32_loopcount equ globals___1+20
2775            
2776                    ; # FLOATING POINT SPECIFIC DEFINITIONS
2777                    ; # literal constants
2778                    ; line_number = 150
2779                    ; constant _float32_expbias = 127
2780 0000007f = _float32_expbias equ 127
2781                    ; line_number = 151
2782                    ; constant _float32_expbias_1 = _float32_expbias - 1
2783 0000007e = _float32_expbias_1 equ 126
2784                    ; line_number = 152
2785                    ; constant _float32_expbias_23 = _float32_expbias + 23
2786 00000096 = _float32_expbias_23 equ 150
2787                    ; line_number = 153
2788                    ; constant _float32_expbias_31 = _float32_expbias + 31
2789 0000009e = _float32_expbias_31 equ 158
2790            
2791                    ; # biased exponents:
2792            
2793                    ; # 8 bit biased exponent
2794                    ; line_number = 158
2795                    ; bind _float32_exp = _float32_loc28
2796 000000a8 = _float32_exp equ globals___1+8
2797            
2798                    ; # 8 bit biased exponent for argument A
2799                    ; line_number = 161
2800                    ; bind _float32_aexp = _float32_loc28
2801 000000a8 = _float32_aexp equ globals___1+8
2802            
2803                    ; # 8 bit biased exponent for argument B
2804                    ; line_number = 164
2805                    ; bind _float32_bexp = _float32_loc2f
2806 000000af = _float32_bexp equ globals___1+15
2807            
2808                    ; # floating point library exception flags
2809            
2810                    ; # floating point library exception flags
2811                    ; line_number = 169
2812                    ; bind _float32_fpflags = _float32_loc2a
2813 000000aa = _float32_fpflags equ globals___1+10
2814            
2815                    ; # bit0 = integer overflow flag
2816                    ; line_number = 172
2817                    ; constant _float32_iov = 0
2818 00000000 = _float32_iov equ 0
2819            
2820                    ; # bit1 = floating point overflow flag
2821                    ; line_number = 175
2822                    ; constant _float32_fov = 1
2823 00000001 = _float32_fov equ 1
2824            
2825                    ; # bit2 = floating point underflow flag
2826                    ; line_number = 178
2827                    ; constant _float32_fun = 2
2828 00000002 = _float32_fun equ 2
2829            
2830                    ; # bit3 = floating point divide by zero flag
2831                    ; line_number = 181
2832                    ; constant _float32_fdz = 3
2833 00000003 = _float32_fdz equ 3
2834            
2835                    ; # bit4 = not-a-number exception flag
2836                    ; line_number = 184
2837                    ; constant _float32_nan = 4
2838 00000004 = _float32_nan equ 4
2839            
2840                    ; # bit5 = domain error exception flag
2841                    ; line_number = 187
2842                    ; constant _float32_dom = 5
2843 00000005 = _float32_dom equ 5
2844            
2845                    ; # bit6 = floating point rounding flag, 0 = truncation; 1 = unbiased rounding
2846                    ; # to nearest LSB
2847                    ; line_number = 191
2848                    ; constant _float32_rnd = 6
2849 00000006 = _float32_rnd equ 6
2850            
2851                    ; # bit7 = floating point saturate flag, 0 = terminate on
2852                    ; # exception without saturation, 1 = terminate on
2853                    ; # exception with saturation to appropriate value
2854                    ; line_number = 196
2855                    ; constant _float32_sat = 7
2856 00000007 = _float32_sat equ 7
2857            
2858                    ; #	ELEMENTARY FUNCTION MEMORY
2859            
2860                    ; line_number = 200
2861                    ; bind _float32_cexp = _float32_loc35
2862 000000b5 = _float32_cexp equ globals___1+21
2863                    ; line_number = 201
2864                    ; bind _float32_cargb0 = _float32_loc36
2865 000000b6 = _float32_cargb0 equ globals___1+22
2866                    ; line_number = 202
2867                    ; bind _float32_cargb1 = _float32_loc37
2868 000000b7 = _float32_cargb1 equ globals___1+23
2869                    ; line_number = 203
2870                    ; bind _float32_cargb2 = _float32_loc38
2871 000000b8 = _float32_cargb2 equ globals___1+24
2872                    ; line_number = 204
2873                    ; bind _float32_cargb3 = _float32_loc39
2874 000000b9 = _float32_cargb3 equ globals___1+25
2875            
2876                    ; line_number = 206
2877                    ; bind _float32_dexp = _float32_loc3a
2878 000000ba = _float32_dexp equ globals___1+26
2879                    ; line_number = 207
2880                    ; bind _float32_dargb0 = _float32_loc3b
2881 000000bb = _float32_dargb0 equ globals___1+27
2882                    ; line_number = 208
2883                    ; bind _float32_dargb1 = _float32_loc3c
2884 000000bc = _float32_dargb1 equ globals___1+28
2885                    ; line_number = 209
2886                    ; bind _float32_dargb2 = _float32_loc3d
2887 000000bd = _float32_dargb2 equ globals___1+29
2888                    ; line_number = 210
2889                    ; bind _float32_dargb3 = _float32_loc3e
2890 000000be = _float32_dargb3 equ globals___1+30
2891            
2892                    ; line_number = 212
2893                    ; bind _float32_eexp = _float32_loc3f
2894 000000bf = _float32_eexp equ globals___1+31
2895                    ; line_number = 213
2896                    ; bind _float32_eargb0 = _float32_loc40
2897 000000c0 = _float32_eargb0 equ globals___1+32
2898                    ; line_number = 214
2899                    ; bind _float32_eargb1 = _float32_loc41
2900 000000c1 = _float32_eargb1 equ globals___1+33
2901                    ; line_number = 215
2902                    ; bind _float32_eargb2 = _float32_loc42
2903 000000c2 = _float32_eargb2 equ globals___1+34
2904                    ; line_number = 216
2905                    ; bind _float32_eargb3 = _float32_loc43
2906 000000c3 = _float32_eargb3 equ globals___1+35
2907            
2908                    ; #bind _float32_zargb0 = _float32_loc44
2909                    ; #bind _float32_zargb1 = _float32_loc45
2910                    ; #bind _float32_zargb2 = _float32_loc46
2911                    ; #bind _float32_zargb3 = _float32_loc47
2912            
2913                    ; #bind _float32_randb0 = _float32_loc48
2914                    ; #bind _float32_randb1 = _float32_loc49
2915                    ; #bind _float32_randb2 = _float32_loc4a
2916                    ; #bind _float32_randb3 = _float32_loc4b
2917            
2918                    ; # 32 BIT FLOATING POINT CONSTANTS
2919            
2920                    ; # Machine precision
2921                    ; # 5.96046447754E-8 = 2**-24
2922                    ; line_number = 232
2923                    ; constant _float32_machep32exp = 0x67
2924 00000067 = _float32_machep32exp equ 103
2925                    ; line_number = 233
2926                    ; constant _float32_machep32b0 = 0
2927 00000000 = _float32_machep32b0 equ 0
2928                    ; line_number = 234
2929                    ; constant _float32_machep32b1 = 0
2930 00000000 = _float32_machep32b1 equ 0
2931                    ; line_number = 235
2932                    ; constant _float32_machep32b2 = 0
2933 00000000 = _float32_machep32b2 equ 0
2934            
2935                    ; # Maximum argument to EXP32
2936                    ; # 88.7228391117 = log(2**128)
2937                    ; line_number = 239
2938                    ; constant _float32_maxlog32exp = 0x85
2939 00000085 = _float32_maxlog32exp equ 133
2940                    ; line_number = 240
2941                    ; constant _float32_maxlog32b0 = 0x31
2942 00000031 = _float32_maxlog32b0 equ 49
2943                    ; line_number = 241
2944                    ; constant _float32_maxlog32b1 = 0x72
2945 00000072 = _float32_maxlog32b1 equ 114
2946                    ; line_number = 242
2947                    ; constant _float32_maxlog32b2 = 0x18
2948 00000018 = _float32_maxlog32b2 equ 24
2949            
2950                    ; # Minimum argument to EXP32
2951                    ; # -87.3365447506 = log(2**-126)
2952                    ; line_number = 246
2953                    ; constant _float32_minlog32exp = 0x85
2954 00000085 = _float32_minlog32exp equ 133
2955                    ; line_number = 247
2956                    ; constant _float32_minlog32b0 = 0xae
2957 000000ae = _float32_minlog32b0 equ 174
2958                    ; line_number = 248
2959                    ; constant _float32_minlog32b1 = 0xac
2960 000000ac = _float32_minlog32b1 equ 172
2961                    ; line_number = 249
2962                    ; constant _float32_minlog32b2 = 0x50
2963 00000050 = _float32_minlog32b2 equ 80
2964            
2965                    ; # Maximum argument to EXP1032
2966                    ; # 38.531839445 = log10(2**128)
2967                    ; line_number = 253
2968                    ; constant _float32_maxlog1032exp = 0x84
2969 00000084 = _float32_maxlog1032exp equ 132
2970                    ; line_number = 254
2971                    ; constant _float32_maxlog1032b0 = 0x1a
2972 0000001a = _float32_maxlog1032b0 equ 26
2973                    ; line_number = 255
2974                    ; constant _float32_maxlog1032b1 = 0x20
2975 00000020 = _float32_maxlog1032b1 equ 32
2976                    ; line_number = 256
2977                    ; constant _float32_maxlog1032b2 = 0x9b
2978 0000009b = _float32_maxlog1032b2 equ 155
2979            
2980                    ; # Minimum argument to EXP1032
2981                    ; # -37.9297794537 = log10(2**-126)
2982                    ; line_number = 260
2983                    ; constant _float32_minlog1032exp = 0x84
2984 00000084 = _float32_minlog1032exp equ 132
2985                    ; line_number = 261
2986                    ; constant _float32_minlog1032b0 = 0x97
2987 00000097 = _float32_minlog1032b0 equ 151
2988                    ; line_number = 262
2989                    ; constant _float32_minlog1032b1 = 0xb8
2990 000000b8 = _float32_minlog1032b1 equ 184
2991                    ; line_number = 263
2992                    ; constant _float32_minlog1032b2 = 0x18
2993 00000018 = _float32_minlog1032b2 equ 24
2994            
2995                    ; # Maximum representable number before overflow
2996                    ; # 6.80564774407E38 = (2**128) * (2 - 2**-23)
2997                    ; line_number = 267
2998                    ; constant _float32_maxnum32exp = 0xff
2999 000000ff = _float32_maxnum32exp equ 255
3000                    ; line_number = 268
3001                    ; constant _float32_maxnum32b0 = 0x7f
3002 0000007f = _float32_maxnum32b0 equ 127
3003                    ; line_number = 269
3004                    ; constant _float32_maxnum32b1 = 0xff
3005 000000ff = _float32_maxnum32b1 equ 255
3006                    ; line_number = 270
3007                    ; constant _float32_maxnum32b2 = 0xff
3008 000000ff = _float32_maxnum32b2 equ 255
3009            
3010                    ; # Minimum representable number before underflow
3011                    ; # 1.17549435082E-38 = (2**-126) * 1
3012                    ; line_number = 274
3013                    ; constant _float32_minnum32exp = 1
3014 00000001 = _float32_minnum32exp equ 1
3015                    ; line_number = 275
3016                    ; constant _float32_minnum32b0 = 0
3017 00000000 = _float32_minnum32b0 equ 0
3018                    ; line_number = 276
3019                    ; constant _float32_minnum32b1 = 0
3020 00000000 = _float32_minnum32b1 equ 0
3021                    ; line_number = 277
3022                    ; constant _float32_minnum32b2 = 0
3023 00000000 = _float32_minnum32b2 equ 0
3024            
3025                    ; # Loss threshhold for argument to SIN32 and COS32
3026                    ; # 4096 = sqrt(2**24)
3027                    ; line_number = 281
3028                    ; constant _float32_lossthr32exp = 0x8b
3029 0000008b = _float32_lossthr32exp equ 139
3030                    ; line_number = 282
3031                    ; constant _float32_lossthr32b0 = 0
3032 00000000 = _float32_lossthr32b0 equ 0
3033                    ; line_number = 283
3034                    ; constant _float32_lossthr32b1 = 0
3035 00000000 = _float32_lossthr32b1 equ 0
3036                    ; line_number = 284
3037                    ; constant _float32_lossthr32b2 = 0
3038 00000000 = _float32_lossthr32b2 equ 0
3039            
3040                    ; # PIC16 32 BIT FLOATING POINT LIBRARY
3041                    ; #
3042                    ; # Unary operations: both input and output are in _float32_aexp,_FLOAT32_AARG
3043                    ; # Binary operations: input in _float32_aexp,_FLOAT32_AARG and _float32_bexp,_FLOAT32_BARG with output in _float32_aexp,_FLOAT32_AARG
3044                    ; #
3045                    ; # All routines return WREG = 0x00 for successful completion, and WREG = 0xFF
3046                    ; # for an error condition specified in _FLOAT32_FPFLAGS.
3047                    ; # All timings are worst case cycle counts
3048            
3049                    ; # Routine		Function
3050            
3051                    ; # FLO2432	24 bit integer to 32 bit floating point conversion
3052                    ; # FLO32
3053                    ; #	Timing:	RND0	RND1
3054                    ; #	SAT0	104	104
3055                    ; #	SAT1	110	110
3056            
3057                    ; # NRM3232	32 bit normalization of unnormalized 32 bit
3058                    ; # NRM32		floating point numbers
3059                    ; #	Timing:	RND0	RND1
3060                    ; #	SAT0	90	90
3061                    ; #	SAT1	96	96
3062            
3063                    ; # INT3224	32 bit floating point to 24 bit integer conversion
3064                    ; # INT32
3065                    ; #	Timing:	RND0	RND1
3066                    ; #	SAT0	104	112
3067                    ; #	SAT1	104	114
3068            
3069                    ; # FLO3232	32 bit integer to 32 bit floating point conversion
3070                    ; #	Timing:	RND0	RND1
3071                    ; #	SAT0	129	145
3072                    ; #	SAT1	129	152
3073            
3074                    ; # NRM4032	32 bit normalization of unnormalized 40 bit floating
3075                    ; #		 point numbers
3076                    ; #	Timing: RND0	RND1
3077                    ; #	SAT0	112	128
3078                    ; #	SAT1	112	135
3079            
3080                    ; # INT3232	32 bit floating point to 32 bit integer conversion
3081                    ; #	Timing:	RND0	RND1
3082                    ; #	SAT0	130	137
3083                    ; #	SAT1	130	137
3084            
3085                    ; # FPA32		32 bit floating point add
3086                    ; #	Timing:	RND0	RND1
3087                    ; #	SAT0	251	265
3088                    ; #	SAT1	251	271
3089            
3090                    ; # FPS32		32 bit floating point subtract
3091                    ; #	Timing:	RND0	RND1
3092                    ; #	SAT0	253	267
3093                    ; #	SAT1	253	273
3094            
3095                    ; # FPM32		32 bit floating point multiply
3096                    ; # 	Timing: RND0	RND1
3097                    ; #	SAT0	574	588
3098                    ; #	SAT1	574	591
3099            
3100                    ; # FPD32		32 bit floating point divide
3101                    ; #	Timing:	RND0	RND1
3102                    ; #	SAT0	932	968
3103                    ; #	SAT1	932	971
3104            
3105                    ; # 32 bit floating point representation
3106                    ; #
3107                    ; # EXPONENT	8 bit biased exponent
3108                    ; #		It is important to note that the use of biased
3109                    ; #		exponents produces a unique representation of a
3110                    ; #		floating point 0, given by
3111                    ; #		EXP = HIGHBYTE = MIDBYTE = LOWBYTE = 0x00,
3112                    ; #		with 0 being the only number with EXP = 0.
3113                    ; #
3114                    ; # HIGHBYTE	8 bit most significant byte of fraction in
3115                    ; #		sign-magnitude representation, with SIGN = MSB,
3116                    ; #		implicit MSB = 1 and radix point to the right of MSB
3117                    ; #
3118                    ; # MIDBYTE	8 bit middle significant byte of sign-magnitude fraction
3119                    ; #
3120                    ; # LOWBYTE	8 bit least significant byte of sign-magnitude fraction
3121                    ; #
3122                    ; # EXPONENT	HIGHBYTE	MIDBYTE		LOWBYTE
3123                    ; # xxxxxxxx	S.xxxxxxx	xxxxxxxx	xxxxxxxx
3124                    ; #                |
3125                    ; #		RADIX
3126                    ; #		POINT
3127            
3128                    ; Delaying code generation for procedure  _float32_from_integer24
3129                    ; Delaying code generation for procedure  _float32_normalize
3130                    ; Delaying code generation for procedure  _float32_from_integer32
3131                    ; Delaying code generation for procedure  _float32_normalize40
3132                    ; Delaying code generation for procedure  _float32_integer24_convert
3133                    ; Delaying code generation for procedure  float32_integer32_convert
3134                    ; Delaying code generation for procedure  _float32_multiply
3135                    ; Delaying code generation for procedure  _float32_divide
3136                    ; Delaying code generation for procedure  _float32_subtract
3137                    ; Delaying code generation for procedure  _float32_add
3138            
3139                    ; buffer = '_float32'
3140                    ; line_number = 46
3141                    ; library _float32_base exited
3142            
3143                    ; # FIXME: Make sure that none of the procedure allocate any argument storage!!!
3144            
3145                    ; Delaying code generation for procedure  _float32_pointer_load
3146                    ; Delaying code generation for procedure  _float32_pointer_add
3147                    ; Delaying code generation for procedure  _float32_pointer_divide
3148                    ; Delaying code generation for procedure  _float32_pointer_multiply
3149                    ; Delaying code generation for procedure  _float32_pointer_subtract
3150                    ; Delaying code generation for procedure  _float32_pointer_store
3151                    ; Delaying code generation for procedure  _float32_negate
3152                    ; Delaying code generation for procedure  _float32_reciprocal
3153                    ; Delaying code generation for procedure  _float32_pointer_swap
3154                    ; Delaying code generation for procedure  _float32_from_byte
3155                    ; Delaying code generation for procedure  _float32_to_byte
3156                    ; Delaying code generation for procedure  _float32_equals
3157                    ; Delaying code generation for procedure  _float32_not_equal
3158                    ; Delaying code generation for procedure  _float32_less_than
3159                    ; Delaying code generation for procedure  _float32_less_than_or_equal
3160                    ; Delaying code generation for procedure  _float32_greater_than
3161                    ; Delaying code generation for procedure  _float32_greater_than_or_equal
3162            
3163                    ; buffer = 'midimotor1e'
3164                    ; line_number = 230
3165                    ; library _float32 exited
3166            
3167                    ; line_number = 233
3168                    ; origin 0
3169   0000 :           org     0
3170            
3171                    ; line_number = 235
3172                    ;info   235, 0
3173                    ; procedure start
3174   0000 :   start:
3175                    ; arguments_none
3176                    ; line_number = 237
3177                    ;  returns_nothing
3178                    ; line_number = 238
3179                    ;  return_suppress
3180            
3181                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
3182                    ; line_number = 240
3183                    ;  assemble
3184                    ;info   240, 0
3185                    ; line_number = 241
3186                    ;info   241, 0
3187                    ; databank start, main
3188                    ; line_number = 242
3189                    ;info   242, 0
3190                    ; codebank start, main
3191                    ; line_number = 243
3192                    ;info   243, 0
3193 0000 28d8          goto    main
3194            
3195                    ; delay after procedure statements=non-uniform
3196                    ; Return instruction suppressed by 'return_suppress'
3197            
3198            
3199            
3200            
3201                    ; line_number = 245
3202                    ; origin 4
3203   0004 :           org     4
3204            
3205                    ; line_number = 247
3206                    ;info   247, 4
3207                    ; procedure interrupt
3208   0004 :   interrupt:
3209 00000071 = interrupt___w_save equ shared___globals+1
3210 00000070 = interrupt___status_save equ shared___globals
3211                    ; Carefully save __w and __tatus into RAM
3212                    ; Save W first (easy)
3213 0004 00f1          movwf   interrupt___w_save
3214                    ; Save Status without smashing it (tricky)
3215                    ; Move swapped version of status into W
3216 0005 0e03          swapf   __status,w
3217                    ; Store swapped version of status into RAM
3218 0006 00f0          movwf   interrupt___status_save
3219                    ; arguments_none
3220                    ; line_number = 249
3221                    ;  returns_nothing
3222            
3223                    ; # This is the interrupt processing routine.  While it is quite long
3224                    ; # it actually does not take very long to execute.  This is important
3225                    ; # since long interrupt routines can cause problems with over module
3226                    ; # latency.
3227            
3228                    ; # Step1:  Save our system registers.  There are 4 registers that
3229                    ; # need to be saved -- W, STATUS, FSR, and PCLATH.
3230                    ; # 
3231                    ; #  W & STATUS:
3232                    ; #	  The compiler takes care of the weird code needed to safely
3233                    ; #     save W adn STATUS registers.  (Read the generated assembly code
3234                    ; #     comments to see some strange usage of the SWAPF instruction.)
3235                    ; #     Since the microcontroller can be using any of the 4 register
3236                    ; #     banks when the interrupt occurs, the W and STATUS register
3237                    ; #     are stored into a couple of shared memory bank registers.
3238                    ; #     There are 16 of these registers available, and the interupt
3239                    ; #     takes 2 of the 16.
3240                    ; #
3241                    ; #  PCLATH:
3242                    ; #     When the interrupt occurs, the previous progam counter is
3243                    ; #     pushed onto the stack and then the program counter is set
3244                    ; #     to 4 to force execution of the interrupt routine.  The PCLATH
3245                    ; #     register is left unchanged.  Since the PCLATH register can
3246                    ; #     pointing to any of the 4 code banks (only 2 implemented for
3247                    ; #     the PIC16F688), it is vital that we update PCLATH to point
3248                    ; #     to code bank 0 (where the interrupt routine is) before the
3249                    ; #     first GOTO, CALL, or computed GOTO.  Otherwise, the first
3250                    ; #     GOTO, CALL, or computed GOTO will jump off into code bank
3251                    ; #     that was being used prior to the interrupt.
3252                    ; #
3253                    ; #  FSR:
3254                    ; #     The FSR register needs to be saved since we using code that
3255                    ; #     indexes into a small buffer to store UART input.
3256                    ; #
3257                    ; #  Both PCLATH and FSR can be saved into regular registers in
3258                    ; #  register bank 0.  No shared registers are needed.  Once we have
3259                    ; #  STATUS stashed away, the register bank can be set to 0.  The
3260                    ; #  compiler takes care of this automagically before the first save
3261                    ; #  assignment.
3262            
3263                    ; line_number = 291
3264                    ;  local fsr_save byte
3265 0000003c = interrupt__fsr_save equ globals___0+28
3266                    ; line_number = 292
3267                    ;  local pclath_save byte
3268 0000003d = interrupt__pclath_save equ globals___0+29
3269            
3270                    ; before procedure statements delay=non-uniform, bit states=(data:??=uu=>?? code:X0=cu=>X0)
3271                    ; line_number = 294
3272                    ;  fsr_save := _fsr
3273                    ;info   294, 7
3274 0007 0804          movf    _fsr,w
3275 0008 1283          bcf     __rp0___byte, __rp0___bit
3276 0009 1303          bcf     __rp1___byte, __rp1___bit
3277 000a 00bc          movwf   interrupt__fsr_save
3278                    ; line_number = 295
3279                    ;  pclath_save := _pclath
3280                    ;info   295, 11
3281 000b 080a          movf    _pclath,w
3282 000c 00bd          movwf   interrupt__pclath_save
3283                    ; # Make sure we are on correct page:
3284                    ; line_number = 297
3285                    ;  _pclath := 0
3286                    ;info   297, 13
3287 000d 018a          clrf    _pclath
3288            
3289                    ; # Now we have to deal with any of the pending interrupts.  Timer0
3290                    ; # is set to go off at the overall duty cycle of the PWM (Pulse Width
3291                    ; # Modulation) rate.  We turn the motor "on" each time Timer0 triggers
3292                    ; # an interrupt.  We also start Timer1 to specifiy the over width of
3293                    ; # the pulse before we turn it off.  When Timer1 triggers, it is time
3294                    ; # to turn the pulse off.  Timer0 is an 8-bit register and it it is
3295                    ; # being driven by a the system clock divided by 256.  Thus, the Timer0
3296                    ; # triggers every 65536 (=2^16) clock ticks.  Timer 1 is a 16-bit
3297                    ; # counter that runs at the system clock.  We always set the low
3298                    ; # order byte to 0, and the high order byte to W, where W=255-PW and
3299                    ; # PW is the pulse width as a number between 0 and 255.  Thus, we can
3300                    ; # have the pulse width vary in increments of 1/256 of the total duty
3301                    ; # cycle.
3302            
3303                    ; # Deal with Timer 0 interrupt:
3304                    ; line_number = 314
3305                    ;  if _t0if start
3306                    ;info   314, 14
3307                    ; =>bit_code_emit@symbol(): sym=_t0if
3308                    ; No 1TEST: true.size=89 false.size=0
3309                    ; No 2TEST: true.size=89 false.size=0
3310                    ; 1GOTO: Single test with GOTO
3311 000e 1d0b          btfss   _t0if___byte, _t0if___bit
3312 000f 2869          goto    interrupt__14
3313                    ; # Timer 0 just triggered.  It is time to start a new pulse width
3314                    ; # duty cycle:
3315            
3316                    ; # Clear the interrupt flag:
3317                    ; line_number = 319
3318                    ;  _t0if := _false
3319                    ;info   319, 16
3320 0010 110b          bcf     _t0if___byte, _t0if___bit
3321            
3322                    ; # Make sure Timer1 is off while we muck around with Timer1:
3323                    ; line_number = 322
3324                    ;  _tmr1on := _false
3325                    ;info   322, 17
3326 0011 1010          bcf     _tmr1on___byte, _tmr1on___bit
3327            
3328                    ; # Set the pulse width to W::0, where W=255-PW, where PW={0,...,255}.
3329                    ; line_number = 325
3330                    ;  _tmr1l := 0
3331                    ;info   325, 18
3332 0012 018e          clrf    _tmr1l
3333                    ; line_number = 326
3334                    ;  _tmr1h := motor1_pulse_width
3335                    ;info   326, 19
3336 0013 082f          movf    motor1_pulse_width,w
3337 0014 008f          movwf   _tmr1h
3338            
3339                    ; # Make sure that we clear off the Timer1 interrupt flag, just in case:
3340                    ; line_number = 329
3341                    ;  _tmr1if := _false
3342                    ;info   329, 21
3343 0015 100c          bcf     _tmr1if___byte, _tmr1if___bit
3344            
3345                    ; # Turn on Timer1:
3346                    ; line_number = 332
3347                    ;  _tmr1on := _true
3348                    ;info   332, 22
3349 0016 1410          bsf     _tmr1on___byte, _tmr1on___bit
3350            
3351                    ; # Finally, turn on the appropriate leads of the motor to make it move.
3352                    ; line_number = 335
3353                    ;  _portc := motor1_on_mask
3354                    ;info   335, 23
3355 0017 082e          movf    motor1_on_mask,w
3356 0018 0087          movwf   _portc
3357            
3358                    ; line_number = 337
3359                    ;  if use_potentiometer start
3360                    ;info   337, 25
3361                    ; =>bit_code_emit@symbol(): sym=use_potentiometer
3362                    ; No 1TEST: true.size=77 false.size=0
3363                    ; No 2TEST: true.size=77 false.size=0
3364                    ; 1GOTO: Single test with GOTO
3365 0019 1d25          btfss   use_potentiometer___byte, use_potentiometer___bit
3366 001a 2868          goto    interrupt__13
3367                    ; line_number = 338
3368                    ; switch channel start
3369                    ;info   338, 27
3370                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
3371                    ; line_number = 358
3372                    ; case_maximum 2
3373 001b 3000          movlw   interrupt__6>>8
3374 001c 008a          movwf   __pclath
3375 001d 083b          movf    channel,w
3376                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
3377                    ; All case bodies prefer this bit set
3378 001e 1683          bsf     __rp0___byte, __rp0___bit
3379 001f 3e21          addlw   interrupt__6
3380 0020 0082          movwf   __pcl
3381                    ; page_group 3
3382   0021 :   interrupt__6:
3383 0021 2824          goto    interrupt__3
3384 0022 282e          goto    interrupt__4
3385 0023 2838          goto    interrupt__5
3386                    ; line_number = 339
3387                    ; case 0
3388   0024 :   interrupt__3:
3389                    ; line_number = 340
3390                    ; ad1_value_low := _adresl
3391                    ;info   340, 36
3392 0024 081e          movf    _adresl,w
3393 0025 1283          bcf     __rp0___byte, __rp0___bit
3394 0026 1703          bsf     __rp1___byte, __rp1___bit
3395 0027 00bb          movwf   ad1_value_low
3396                    ; line_number = 341
3397                    ;  ad1_value_middle := _adresh
3398                    ;info   341, 40
3399 0028 1303          bcf     __rp1___byte, __rp1___bit
3400 0029 081e          movf    _adresh,w
3401 002a 1703          bsf     __rp1___byte, __rp1___bit
3402 002b 00b1          movwf   ad1_value_middle
3403                    ; line_number = 342
3404                    ;  ad1_value_high := 0
3405                    ;info   342, 44
3406 002c 01a7          clrf    ad1_value_high
3407 002d 284e          goto    interrupt__7
3408                    ; line_number = 343
3409                    ; case 1
3410   002e :   interrupt__4:
3411                    ; line_number = 344
3412                    ; ad0_value_low := _adresl
3413                    ;info   344, 46
3414 002e 081e          movf    _adresl,w
3415 002f 1283          bcf     __rp0___byte, __rp0___bit
3416 0030 1703          bsf     __rp1___byte, __rp1___bit
3417 0031 00ba          movwf   ad0_value_low
3418                    ; line_number = 345
3419                    ;  ad0_value_middle := _adresh
3420                    ;info   345, 50
3421 0032 1303          bcf     __rp1___byte, __rp1___bit
3422 0033 081e          movf    _adresh,w
3423 0034 1703          bsf     __rp1___byte, __rp1___bit
3424 0035 00b0          movwf   ad0_value_middle
3425                    ; line_number = 346
3426                    ;  ad0_value_high := 0
3427                    ;info   346, 54
3428 0036 01a6          clrf    ad0_value_high
3429 0037 284e          goto    interrupt__7
3430                    ; line_number = 347
3431                    ; case 2
3432   0038 :   interrupt__5:
3433                    ; line_number = 348
3434                    ; quad_low := _adresl
3435                    ;info   348, 56
3436 0038 081e          movf    _adresl,w
3437 0039 1283          bcf     __rp0___byte, __rp0___bit
3438 003a 1703          bsf     __rp1___byte, __rp1___bit
3439 003b 00b4          movwf   quad_low
3440                    ; line_number = 349
3441                    ;  quad_middle := _adresh
3442                    ;info   349, 60
3443 003c 1303          bcf     __rp1___byte, __rp1___bit
3444 003d 081e          movf    _adresh,w
3445 003e 1703          bsf     __rp1___byte, __rp1___bit
3446 003f 00aa          movwf   quad_middle
3447                    ; line_number = 350
3448                    ;  quad_high := 0
3449                    ;info   350, 64
3450 0040 01a0          clrf    quad_high
3451                    ; line_number = 351
3452                    ;  if position_reverse start
3453                    ;info   351, 65
3454                    ; =>bit_code_emit@symbol(): sym=position_reverse
3455                    ; No 1TEST: true.size=9 false.size=0
3456                    ; No 2TEST: true.size=9 false.size=0
3457                    ; 1GOTO: Single test with GOTO
3458 0041 1303          bcf     __rp1___byte, __rp1___bit
3459 0042 1ca5          btfss   position_reverse___byte, position_reverse___bit
3460 0043 284e          goto    interrupt__2
3461 0044 1703          bsf     __rp1___byte, __rp1___bit
3462                    ; # Perform a 1's complement of the result:
3463                    ; line_number = 353
3464                    ;  quad_low := quad_low ^ 0xff
3465                    ;info   353, 69
3466 0045 09b4          comf    quad_low,f
3467                    ; line_number = 354
3468                    ;  quad_middle := quad_middle ^ 3
3469                    ;info   354, 70
3470 0046 3003          movlw   3
3471 0047 06aa          xorwf   quad_middle,f
3472                    ; line_number = 355
3473                    ;  quad_low := quad_low + 1
3474                    ;info   355, 72
3475 0048 0ab4          incf    quad_low,f
3476                    ; line_number = 356
3477                    ;  if _z start
3478                    ;info   356, 73
3479                    ; =>bit_code_emit@symbol(): sym=_z
3480                    ; No 1TEST: true.size=3 false.size=0
3481                    ; No 2TEST: true.size=3 false.size=0
3482                    ; 1GOTO: Single test with GOTO
3483 0049 1d03          btfss   _z___byte, _z___bit
3484 004a 284e          goto    interrupt__1
3485                    ; line_number = 357
3486                    ; quad_middle := (quad_middle + 1) & 3
3487                    ;info   357, 75
3488 004b 0a2a          incf    quad_middle,w
3489 004c 3903          andlw   3
3490 004d 00aa          movwf   quad_middle
3491                    ; Recombine size1 = 0 || size2 = 0
3492   004e :   interrupt__1:
3493                    ; line_number = 356
3494                    ;  if _z done
3495                    ; Recombine size1 = 0 || size2 = 0
3496   004e :   interrupt__2:
3497                    ; line_number = 351
3498                    ;  if position_reverse done
3499   004e :   interrupt__7:
3500                    ; line_number = 338
3501                    ; switch channel done
3502                    ; line_number = 359
3503                    ; if configure & configure_analogs_enabled_mask = 0 start
3504                    ;info   359, 78
3505                    ; Left minus Right
3506 004e 30a0          movlw   160
3507 004f 1303          bcf     __rp1___byte, __rp1___bit
3508 0050 0525          andwf   configure,w
3509                    ; =>bit_code_emit@symbol(): sym=__z
3510                    ; No 1TEST: true.size=2 false.size=5
3511                    ; No 2TEST: true.size=2 false.size=5
3512                    ; 2GOTO: Single test with two GOTO's
3513 0051 1d03          btfss   __z___byte, __z___bit
3514 0052 2856          goto    interrupt__8
3515                    ; line_number = 360
3516                    ; channel := 2
3517                    ;info   360, 83
3518 0053 3002          movlw   2
3519 0054 00bb          movwf   channel
3520 0055 285b          goto    interrupt__9
3521                    ; 2GOTO: Starting code 2
3522   0056 :   interrupt__8:
3523                    ; line_number = 362
3524                    ; channel := channel + 1
3525                    ;info   362, 86
3526 0056 0abb          incf    channel,f
3527                    ; line_number = 363
3528                    ;  if channel >= 3 start
3529                    ;info   363, 87
3530 0057 3003          movlw   3
3531 0058 023b          subwf   channel,w
3532                    ; =>bit_code_emit@symbol(): sym=__c
3533                    ; 1TEST: Single test with code in skip slot
3534 0059 1803          btfsc   __c___byte, __c___bit
3535                    ; line_number = 364
3536                    ; channel := 0
3537                    ;info   364, 90
3538 005a 01bb          clrf    channel
3539            
3540                    ; Recombine size1 = 0 || size2 = 0
3541                    ; line_number = 363
3542                    ;  if channel >= 3 done
3543   005b :   interrupt__9:
3544                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
3545                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
3546                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
3547                    ; line_number = 359
3548                    ; if configure & configure_analogs_enabled_mask = 0 done
3549                    ; # The other channels are enabled:
3550                    ; line_number = 367
3551                    ;  _adcon0 := _adcon0 & 0xc3 | (channel << 2)
3552                    ;info   367, 91
3553 00000060 = interrupt__10 equ globals___0+64
3554 005b 30c3          movlw   195
3555 005c 051f          andwf   _adcon0,w
3556 005d 00e0          movwf   interrupt__10
3557 00000061 = interrupt__11 equ globals___0+65
3558 005e 0d3b          rlf     channel,w
3559 005f 00e1          movwf   interrupt__11
3560 0060 0d61          rlf     interrupt__11,w
3561 0061 39fc          andlw   252
3562 0062 0460          iorwf   interrupt__10,w
3563 0063 009f          movwf   _adcon0
3564                    ; line_number = 368
3565                    ;  delay 20 * microsecond start
3566                    ;info   368, 100
3567                    ; Delay expression evaluates to 100
3568                    ; line_number = 369
3569                    ; do_nothing
3570                    ;info   369, 100
3571            
3572            
3573                    ; Delay 100 cycles
3574                    ; Delay loop takes 25 * 4 = 100 cycles
3575 0064 3019          movlw   25
3576   0065 :   interrupt__12:
3577 0065 3eff          addlw   255
3578 0066 1d03          btfss   __z___byte, __z___bit
3579 0067 2865          goto    interrupt__12
3580                    ; line_number = 368
3581                    ;  delay 20 * microsecond done
3582                    ; Recombine size1 = 0 || size2 = 0
3583   0068 :   interrupt__13:
3584                    ; line_number = 337
3585                    ;  if use_potentiometer done
3586                    ; # Trigger an A/D conversion to pick up next time:
3587                    ; line_number = 373
3588                    ;  _go := _true
3589                    ;info   373, 104
3590 0068 149f          bsf     _go___byte, _go___bit
3591            
3592                    ; Recombine size1 = 0 || size2 = 0
3593   0069 :   interrupt__14:
3594                    ; line_number = 314
3595                    ;  if _t0if done
3596                    ; # Deal with Timer 1 interrupt:
3597                    ; line_number = 376
3598                    ;  if _tmr1if start
3599                    ;info   376, 105
3600                    ; =>bit_code_emit@symbol(): sym=_tmr1if
3601                    ; No 1TEST: true.size=3 false.size=0
3602                    ; No 2TEST: true.size=3 false.size=0
3603                    ; 1GOTO: Single test with GOTO
3604 0069 1c0c          btfss   _tmr1if___byte, _tmr1if___bit
3605 006a 286e          goto    interrupt__15
3606                    ; # Timer 1 just triggered.  It is time to turn off the pulse width.
3607            
3608                    ; # Turn off the motor leads:
3609                    ; line_number = 380
3610                    ;  _portc := 0
3611                    ;info   380, 107
3612 006b 0187          clrf    _portc
3613            
3614                    ; # Turn off Timer 1:
3615                    ; line_number = 383
3616                    ;  _tmr1on := _false
3617                    ;info   383, 108
3618 006c 1010          bcf     _tmr1on___byte, _tmr1on___bit
3619            
3620                    ; # Make sure we clear timer 1 interrupt flag:
3621                    ; line_number = 386
3622                    ;  _tmr1if := _false
3623                    ;info   386, 109
3624 006d 100c          bcf     _tmr1if___byte, _tmr1if___bit
3625            
3626                    ; Recombine size1 = 0 || size2 = 0
3627   006e :   interrupt__15:
3628                    ; line_number = 376
3629                    ;  if _tmr1if done
3630                    ; # Deal with UART receive interrupt:
3631                    ; line_number = 389
3632                    ;  if _rcif start
3633                    ;info   389, 110
3634                    ; =>bit_code_emit@symbol(): sym=_rcif
3635                    ; No 1TEST: true.size=35 false.size=0
3636                    ; No 2TEST: true.size=35 false.size=0
3637                    ; 1GOTO: Single test with GOTO
3638 006e 1e8c          btfss   _rcif___byte, _rcif___bit
3639 006f 2893          goto    interrupt__20
3640                    ; # We have a byte in the UART receive buffer.  We want to be as
3641                    ; # quick as possible here.  Do the minimum to process the incoming
3642                    ; # byte and move on.a
3643            
3644                    ; # First, look at the ninth bit.  If the ninth bit is set, we
3645                    ; # process it immediately.
3646                    ; line_number = 396
3647                    ;  if _rx9d start
3648                    ;info   396, 112
3649                    ; =>bit_code_emit@symbol(): sym=_rx9d
3650                    ; No 1TEST: true.size=16 false.size=10
3651                    ; No 2TEST: true.size=16 false.size=10
3652                    ; 2GOTO: Single test with two GOTO's
3653 0070 1c17          btfss   _rx9d___byte, _rx9d___bit
3654 0071 2883          goto    interrupt__18
3655                    ; # The ninth bit is set, we have an module address select
3656                    ; # command:
3657                    ; line_number = 399
3658                    ;  if _rcreg = address start
3659                    ;info   399, 114
3660                    ; Left minus Right
3661 0072 0839          movf    address,w
3662 0073 0214          subwf   _rcreg,w
3663                    ; =>bit_code_emit@symbol(): sym=__z
3664                    ; No 1TEST: true.size=9 false.size=2
3665                    ; No 2TEST: true.size=9 false.size=2
3666                    ; 2GOTO: Single test with two GOTO's
3667 0074 1d03          btfss   __z___byte, __z___bit
3668 0075 2880          goto    interrupt__16
3669                    ; # The address that came in matches ours in {address}.
3670                    ; # We need to prepare for further incoming data bytes:
3671            
3672                    ; # Force the UART to start accepting data bytes with the
3673                    ; # ninth bit clear:
3674                    ; line_number = 405
3675                    ;  _adden := _false
3676                    ;info   405, 118
3677 0076 1197          bcf     _adden___byte, _adden___bit
3678            
3679                    ; # Clear out the input data buffer:
3680                    ; line_number = 408
3681                    ;  uart_input_in_index := 0
3682                    ;info   408, 119
3683 0077 01b6          clrf    uart_input_in_index
3684                    ; line_number = 409
3685                    ;  uart_input_out_index := 0
3686                    ;info   409, 120
3687 0078 01b7          clrf    uart_input_out_index
3688                    ; line_number = 410
3689                    ;  uart_input_count := 0
3690                    ;info   410, 121
3691 0079 01b8          clrf    uart_input_count
3692                    ; line_number = 411
3693                    ;  uart_input_pending := _false
3694                    ;info   411, 122
3695 007a 106f          bcf     uart_input_pending___byte, uart_input_pending___bit
3696            
3697                    ; # Send an acknowledge byte:
3698                    ; line_number = 414
3699                    ;  call uart_byte_put(rb2_ok)
3700                    ;info   414, 123
3701 007b 30a5          movlw   165
3702 007c 258e          call    uart_byte_put
3703            
3704                    ; # Set the state machine for {uart_manage} to eat the echo
3705                    ; # and start processing commands:
3706                    ; line_number = 418
3707                    ;  state := state_echo_then_command
3708                    ;info   418, 125
3709 007d 3001          movlw   1
3710 007e 00b0          movwf   state
3711                    ; Recombine code1_bit_states != code2_bit_states
3712 007f 2882          goto    interrupt__17
3713                    ; 2GOTO: Starting code 2
3714   0080 :   interrupt__16:
3715                    ; # The address that came in did not match our address:
3716            
3717                    ; # Force the UART to only listen to bytes that have the
3718                    ; # ninth bit set (i.e. address commands).  All data bytes
3719                    ; # to the other selected module will be invisible to us:
3720                    ; line_number = 425
3721                    ;  _adden := _true
3722                    ;info   425, 128
3723 0080 1597          bsf     _adden___byte, _adden___bit
3724            
3725                    ; # Set the state machine for {uart_manage} to ignore any
3726                    ; # incoming data bytes.  This should never happen, be it
3727                    ; # it never hurts to be careful.
3728                    ; line_number = 430
3729                    ;  state := state_select_wait
3730                    ;info   430, 129
3731 0081 01b0          clrf    state
3732   0082 :   interrupt__17:
3733                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
3734                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
3735                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
3736                    ; line_number = 399
3737                    ;  if _rcreg = address done
3738                    ; Recombine code1_bit_states != code2_bit_states
3739 0082 288d          goto    interrupt__19
3740                    ; 2GOTO: Starting code 2
3741   0083 :   interrupt__18:
3742                    ; # We have a data byte for us to process.  For now we
3743                    ; # stuff it into an input buffer:
3744            
3745                    ; # Stuff the byte into the {uart_input} buffer being careful
3746                    ; # not to go out of bounds.  The buffer is a power of 2 in
3747                    ; # size, so masking {uart_input_in_index} with {uart_input_mask}
3748                    ; # will keep us in bounds:
3749                    ; line_number = 439
3750                    ;  uart_input[uart_input_in_index & uart_input_mask] := _rcreg
3751                    ;info   439, 131
3752                    ; index_fsr_first
3753 0083 3003          movlw   3
3754 0084 0536          andwf   uart_input_in_index,w
3755 0085 3e32          addlw   uart_input
3756 0086 0084          movwf   __fsr
3757 0087 1383          bcf     __irp___byte, __irp___bit
3758 0088 0814          movf    _rcreg,w
3759 0089 0080          movwf   __indf
3760            
3761                    ; # Bump {uart_input_in_index} so that we next byte the comes
3762                    ; # in will follow this current byte:
3763                    ; line_number = 443
3764                    ;  uart_input_in_index := uart_input_in_index + 1
3765                    ;info   443, 138
3766 008a 0ab6          incf    uart_input_in_index,f
3767            
3768                    ; # Keep track of how many bytes are in the input buffer:
3769                    ; line_number = 446
3770                    ;  uart_input_count := uart_input_count + 1
3771                    ;info   446, 139
3772 008b 0ab8          incf    uart_input_count,f
3773            
3774                    ; # Let the {uart_manage} routine know that it has work to do:
3775                    ; line_number = 449
3776                    ;  uart_input_pending := _true
3777                    ;info   449, 140
3778 008c 146f          bsf     uart_input_pending___byte, uart_input_pending___bit
3779            
3780   008d :   interrupt__19:
3781                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
3782                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
3783                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
3784                    ; line_number = 396
3785                    ;  if _rx9d done
3786                    ; # The PIC UART can get wedged by errors.  We fix that problem
3787                    ; # by toggling {_cren} whenever we have an overrun error.  The
3788                    ; # code below is really tight (5 instructions):
3789                    ; line_number = 454
3790                    ;  if _oerr start
3791                    ;info   454, 141
3792                    ; =>bit_code_emit@symbol(): sym=_oerr
3793                    ; 1TEST: Single test with code in skip slot
3794 008d 1897          btfsc   _oerr___byte, _oerr___bit
3795                    ; # We have an over run error, clear {_cren}:
3796                    ; line_number = 456
3797                    ;  _cren := _false
3798                    ;info   456, 142
3799 008e 1217          bcf     _cren___byte, _cren___bit
3800                    ; Recombine size1 = 0 || size2 = 0
3801                    ; line_number = 454
3802                    ;  if _oerr done
3803                    ; line_number = 457
3804                    ; if _ferr start
3805                    ;info   457, 143
3806                    ; =>bit_code_emit@symbol(): sym=_ferr
3807                    ; 1TEST: Single test with code in skip slot
3808 008f 1917          btfsc   _ferr___byte, _ferr___bit
3809                    ; # We have a framing error, clear {_cren}:
3810                    ; line_number = 459
3811                    ;  _cren := _false
3812                    ;info   459, 144
3813 0090 1217          bcf     _cren___byte, _cren___bit
3814                    ; Recombine size1 = 0 || size2 = 0
3815                    ; line_number = 457
3816                    ; if _ferr done
3817                    ; # If either of the two previous statements triggered, {_cren}
3818                    ; # got turned off.  This next statement will turn it on again.
3819                    ; # Otherwise, {_cren} is already on, and this statement will do
3820                    ; # nothing:
3821                    ; line_number = 464
3822                    ;  _cren := _true
3823                    ;info   464, 145
3824 0091 1617          bsf     _cren___byte, _cren___bit
3825            
3826                    ; # Clear the recieve interrupt condition:
3827                    ; line_number = 467
3828                    ;  _rcif := _false
3829                    ;info   467, 146
3830 0092 128c          bcf     _rcif___byte, _rcif___bit
3831            
3832                    ; Recombine size1 = 0 || size2 = 0
3833   0093 :   interrupt__20:
3834                    ; line_number = 389
3835                    ;  if _rcif done
3836                    ; # Deal with quadrature input changes:
3837                    ; line_number = 470
3838                    ;  if _raif start
3839                    ;info   470, 147
3840                    ; =>bit_code_emit@symbol(): sym=_raif
3841                    ; No 1TEST: true.size=56 false.size=0
3842                    ; No 2TEST: true.size=56 false.size=0
3843                    ; 1GOTO: Single test with GOTO
3844 0093 1c0b          btfss   _raif___byte, _raif___bit
3845 0094 28ce          goto    interrupt__35
3846 0095 1703          bsf     __rp1___byte, __rp1___bit
3847                    ; # The file24 a the A and B channels of Port A have changed
3848                    ; # since the last time we read Port A.  Deal with the change
3849                    ; # by cycling the {quad_state} state machine.  Please carefully
3850                    ; # read the documentation in the states.ucl library to understand
3851                    ; # the format of the {states} vector.
3852            
3853                    ; # Cycle the {quad_state} state machine.  Use only the lower 3 bits
3854                    ; # currently in {quad_state} concatenated with the low order 2 bits
3855                    ; # of {_porta} (the A and B quadrature channels).  That gives a total
3856                    ; # of 5 bits to work with:
3857                    ; #FIXME: should be {xstates}!!!
3858                    ; #quad_state := xstates[quad_state & 7 | (_porta << 3) & 0x18]
3859                    ; line_number = 483
3860                    ;  quad_state := states[quad_state & 7 | (_porta << 3) & 0x18]
3861                    ;info   483, 150
3862 00000060 = interrupt__21 equ globals___0+64
3863 0096 3007          movlw   7
3864 0097 053e          andwf   quad_state,w
3865 0098 1303          bcf     __rp1___byte, __rp1___bit
3866 0099 00e0          movwf   interrupt__21
3867 00000061 = interrupt__22 equ globals___0+65
3868 009a 0d05          rlf     _porta,w
3869 009b 00e1          movwf   interrupt__22
3870 009c 0de1          rlf     interrupt__22,f
3871 009d 0d61          rlf     interrupt__22,w
3872 009e 3918          andlw   24
3873 009f 0460          iorwf   interrupt__21,w
3874 00a0 265a          call    states
3875 00a1 1703          bsf     __rp1___byte, __rp1___bit
3876 00a2 00be          movwf   quad_state
3877            
3878                    ; # Disable interrupt condition until the next time:
3879                    ; line_number = 486
3880                    ;  _raif := _false
3881                    ;info   486, 163
3882 00a3 100b          bcf     _raif___byte, _raif___bit
3883            
3884                    ; # The rest of this code just increments and decrements the quadrature
3885                    ; # counter.  The quad counter is signed 24 bit integer that is stored
3886                    ; # in {quad_high}, {quad_middle}, and {quad_low}.  This code is kind
3887                    ; # big and long, but in reality, 99% of the time we will perform either
3888                    ; # a single increment or decrement of {quad_low}.  So, most of the
3889                    ; # time this code very fast:
3890            
3891                    ; line_number = 495
3892                    ;  if quad_state@7 start
3893                    ;info   495, 164
3894 0000013e = interrupt__select__27___byte equ quad_state
3895 00000007 = interrupt__select__27___bit equ 7
3896                    ; =>bit_code_emit@symbol(): sym=interrupt__select__27
3897                    ; No 1TEST: true.size=17 false.size=0
3898                    ; No 2TEST: true.size=17 false.size=0
3899                    ; 1GOTO: Single test with GOTO
3900 00a4 1fbe          btfss   interrupt__select__27___byte, interrupt__select__27___bit
3901 00a5 28b7          goto    interrupt__28
3902                    ; # The state machine wants us to increment the quadrature counter
3903                    ; # by 1.  We work our way from {quad_low} through {quad_high}:
3904                    ; line_number = 498
3905                    ;  quad_low := quad_low + 1
3906                    ;info   498, 166
3907 00a6 0ab4          incf    quad_low,f
3908                    ; line_number = 499
3909                    ;  if _z start
3910                    ;info   499, 167
3911                    ; =>bit_code_emit@symbol(): sym=_z
3912                    ; No 1TEST: true.size=3 false.size=0
3913                    ; No 2TEST: true.size=3 false.size=0
3914                    ; 1GOTO: Single test with GOTO
3915 00a7 1d03          btfss   _z___byte, _z___bit
3916 00a8 28ac          goto    interrupt__23
3917                    ; # The zero status flag is set, so {quad_low} just wrapped from
3918                    ; # 0xff to 0.  Thus, we need to increment {quad_middle}"
3919                    ; line_number = 502
3920                    ;  quad_middle := quad_middle + 1
3921                    ;info   502, 169
3922 00a9 0aaa          incf    quad_middle,f
3923                    ; line_number = 503
3924                    ;  if _z start
3925                    ;info   503, 170
3926                    ; =>bit_code_emit@symbol(): sym=_z
3927                    ; 1TEST: Single test with code in skip slot
3928 00aa 1903          btfsc   _z___byte, _z___bit
3929                    ; # The zero status flat is set, so {quad_middle} just
3930                    ; # wrapped from 0xff to 0.  Thus we need to increment
3931                    ; # {quad_high}:
3932                    ; line_number = 507
3933                    ;  quad_high := quad_high + 1
3934                    ;info   507, 171
3935 00ab 0aa0          incf    quad_high,f
3936            
3937                    ; Recombine size1 = 0 || size2 = 0
3938                    ; line_number = 503
3939                    ;  if _z done
3940                    ; Recombine size1 = 0 || size2 = 0
3941   00ac :   interrupt__23:
3942                    ; line_number = 499
3943                    ;  if _z done
3944                    ; line_number = 509
3945                    ; if quad_state@6 start
3946                    ;info   509, 172
3947 0000013e = interrupt__select__25___byte equ quad_state
3948 00000006 = interrupt__select__25___bit equ 6
3949                    ; =>bit_code_emit@symbol(): sym=interrupt__select__25
3950                    ; No 1TEST: true.size=8 false.size=0
3951                    ; No 2TEST: true.size=8 false.size=0
3952                    ; 1GOTO: Single test with GOTO
3953 00ac 1f3e          btfss   interrupt__select__25___byte, interrupt__select__25___bit
3954 00ad 28b7          goto    interrupt__26
3955 00ae 1303          bcf     __rp1___byte, __rp1___bit
3956                    ; # This bit will be set in the state machine if we have an
3957                    ; # "illegal" state machine transistion.
3958            
3959                    ; # Bump the {errors} counter to let somebody know
3960                    ; # that we are having problems:
3961                    ; line_number = 515
3962                    ;  errors := errors + 1
3963                    ;info   515, 175
3964 00af 0aa8          incf    errors,f
3965            
3966                    ; # This code is the same as the first increment, so the
3967                    ; # comments are not repeated:
3968                    ; line_number = 519
3969                    ;  quad_low := quad_low + 1
3970                    ;info   519, 176
3971 00b0 1703          bsf     __rp1___byte, __rp1___bit
3972 00b1 0ab4          incf    quad_low,f
3973                    ; line_number = 520
3974                    ;  if _z start
3975                    ;info   520, 178
3976                    ; =>bit_code_emit@symbol(): sym=_z
3977                    ; No 1TEST: true.size=3 false.size=0
3978                    ; No 2TEST: true.size=3 false.size=0
3979                    ; 1GOTO: Single test with GOTO
3980 00b2 1d03          btfss   _z___byte, _z___bit
3981 00b3 28b7          goto    interrupt__24
3982                    ; line_number = 521
3983                    ; quad_middle := quad_middle + 1
3984                    ;info   521, 180
3985 00b4 0aaa          incf    quad_middle,f
3986                    ; line_number = 522
3987                    ;  if _z start
3988                    ;info   522, 181
3989                    ; =>bit_code_emit@symbol(): sym=_z
3990                    ; 1TEST: Single test with code in skip slot
3991 00b5 1903          btfsc   _z___byte, _z___bit
3992                    ; line_number = 523
3993                    ; quad_high := quad_high + 1
3994                    ;info   523, 182
3995 00b6 0aa0          incf    quad_high,f
3996                    ; Recombine size1 = 0 || size2 = 0
3997                    ; line_number = 522
3998                    ;  if _z done
3999                    ; Recombine size1 = 0 || size2 = 0
4000   00b7 :   interrupt__24:
4001                    ; line_number = 520
4002                    ;  if _z done
4003                    ; Recombine size1 = 0 || size2 = 0
4004   00b7 :   interrupt__26:
4005                    ; line_number = 509
4006                    ; if quad_state@6 done
4007                    ; Recombine size1 = 0 || size2 = 0
4008   00b7 :   interrupt__28:
4009                    ; line_number = 495
4010                    ;  if quad_state@7 done
4011                    ; line_number = 524
4012                    ; if quad_state@5 start
4013                    ;info   524, 183
4014 0000013e = interrupt__select__33___byte equ quad_state
4015 00000005 = interrupt__select__33___bit equ 5
4016                    ; =>bit_code_emit@symbol(): sym=interrupt__select__33
4017                    ; No 1TEST: true.size=21 false.size=0
4018                    ; No 2TEST: true.size=21 false.size=0
4019                    ; 1GOTO: Single test with GOTO
4020 00b7 1ebe          btfss   interrupt__select__33___byte, interrupt__select__33___bit
4021 00b8 28ce          goto    interrupt__34
4022                    ; # The state machine wants us to decrement the quadrature counter
4023                    ; # by 1.  We work our way from {quad_low} through {quad_high}:
4024                    ; line_number = 527
4025                    ;  if quad_low = 0 start
4026                    ;info   527, 185
4027                    ; Left minus Right
4028 00b9 0834          movf    quad_low,w
4029                    ; =>bit_code_emit@symbol(): sym=__z
4030                    ; No 1TEST: true.size=4 false.size=0
4031                    ; No 2TEST: true.size=4 false.size=0
4032                    ; 1GOTO: Single test with GOTO
4033 00ba 1d03          btfss   __z___byte, __z___bit
4034 00bb 28c0          goto    interrupt__29
4035                    ; # {quad_low} is 0, so we are going to wrap down to 0xff.
4036                    ; # We need to decrement {quad_middle}:
4037                    ; line_number = 530
4038                    ;  if quad_middle = 0 start
4039                    ;info   530, 188
4040                    ; Left minus Right
4041 00bc 082a          movf    quad_middle,w
4042                    ; =>bit_code_emit@symbol(): sym=__z
4043                    ; 1TEST: Single test with code in skip slot
4044 00bd 1903          btfsc   __z___byte, __z___bit
4045                    ; # {quad_middle} is 0, we are going to wrap down to 0xff.
4046                    ; # We need to decrement {quad_high}:
4047                    ; line_number = 533
4048                    ;  quad_high := quad_high - 1
4049                    ;info   533, 190
4050 00be 03a0          decf    quad_high,f
4051                    ; Recombine size1 = 0 || size2 = 0
4052                    ; line_number = 530
4053                    ;  if quad_middle = 0 done
4054                    ; # Do the {quad_middle} decrement:
4055                    ; line_number = 535
4056                    ;  quad_middle := quad_middle - 1
4057                    ;info   535, 191
4058 00bf 03aa          decf    quad_middle,f
4059                    ; Recombine size1 = 0 || size2 = 0
4060   00c0 :   interrupt__29:
4061                    ; line_number = 527
4062                    ;  if quad_low = 0 done
4063                    ; # Do the {quad_low} decrement:
4064                    ; line_number = 537
4065                    ;  quad_low := quad_low - 1
4066                    ;info   537, 192
4067 00c0 03b4          decf    quad_low,f
4068            
4069                    ; line_number = 539
4070                    ;  if quad_state@4 start
4071                    ;info   539, 193
4072 0000013e = interrupt__select__31___byte equ quad_state
4073 00000004 = interrupt__select__31___bit equ 4
4074                    ; =>bit_code_emit@symbol(): sym=interrupt__select__31
4075                    ; No 1TEST: true.size=10 false.size=0
4076                    ; No 2TEST: true.size=10 false.size=0
4077                    ; 1GOTO: Single test with GOTO
4078 00c1 1e3e          btfss   interrupt__select__31___byte, interrupt__select__31___bit
4079 00c2 28ce          goto    interrupt__32
4080 00c3 1303          bcf     __rp1___byte, __rp1___bit
4081                    ; # This bit will be set in the state machine if we have an
4082                    ; # "illegal" state machine transition:
4083            
4084                    ; # Bump the {errors} counter to let somebody know that
4085                    ; # we are having problems:
4086                    ; line_number = 545
4087                    ;  errors := errors + 1
4088                    ;info   545, 196
4089 00c4 0aa8          incf    errors,f
4090            
4091                    ; # This code is the same as the first decrement, so the
4092                    ; # comments are not repeated:
4093                    ; line_number = 549
4094                    ;  if quad_low = 0 start
4095                    ;info   549, 197
4096                    ; Left minus Right
4097 00c5 1703          bsf     __rp1___byte, __rp1___bit
4098 00c6 0834          movf    quad_low,w
4099                    ; =>bit_code_emit@symbol(): sym=__z
4100                    ; No 1TEST: true.size=4 false.size=0
4101                    ; No 2TEST: true.size=4 false.size=0
4102                    ; 1GOTO: Single test with GOTO
4103 00c7 1d03          btfss   __z___byte, __z___bit
4104 00c8 28cd          goto    interrupt__30
4105                    ; line_number = 550
4106                    ; if quad_middle = 0 start
4107                    ;info   550, 201
4108                    ; Left minus Right
4109 00c9 082a          movf    quad_middle,w
4110                    ; =>bit_code_emit@symbol(): sym=__z
4111                    ; 1TEST: Single test with code in skip slot
4112 00ca 1903          btfsc   __z___byte, __z___bit
4113                    ; line_number = 551
4114                    ; quad_high := quad_high - 1
4115                    ;info   551, 203
4116 00cb 03a0          decf    quad_high,f
4117                    ; Recombine size1 = 0 || size2 = 0
4118                    ; line_number = 550
4119                    ; if quad_middle = 0 done
4120                    ; line_number = 552
4121                    ; quad_middle := quad_middle - 1
4122                    ;info   552, 204
4123 00cc 03aa          decf    quad_middle,f
4124                    ; Recombine size1 = 0 || size2 = 0
4125   00cd :   interrupt__30:
4126                    ; line_number = 549
4127                    ;  if quad_low = 0 done
4128                    ; line_number = 553
4129                    ; quad_low := quad_low - 1
4130                    ;info   553, 205
4131 00cd 03b4          decf    quad_low,f
4132            
4133                    ; Recombine size1 = 0 || size2 = 0
4134   00ce :   interrupt__32:
4135                    ; line_number = 539
4136                    ;  if quad_state@4 done
4137                    ; Recombine size1 = 0 || size2 = 0
4138   00ce :   interrupt__34:
4139                    ; line_number = 524
4140                    ; if quad_state@5 done
4141                    ; Recombine size1 = 0 || size2 = 0
4142   00ce :   interrupt__35:
4143                    ; line_number = 470
4144                    ;  if _raif done
4145                    ; # All done processing interrupt conditions.  Let's get out of here by
4146                    ; # restoring {_fsr} and {_pclath}:
4147                    ; line_number = 557
4148                    ;  _fsr := fsr_save    
4149                    ;info   557, 206
4150 00ce 1303          bcf     __rp1___byte, __rp1___bit
4151 00cf 083c          movf    interrupt__fsr_save,w
4152 00d0 0084          movwf   _fsr
4153                    ; line_number = 558
4154                    ;  _pclath := pclath_save
4155                    ;info   558, 209
4156 00d1 083d          movf    interrupt__pclath_save,w
4157 00d2 008a          movwf   _pclath
4158            
4159                    ; # The compiler takes care of restoring {_status} and {_w}.
4160            
4161                    ; delay after procedure statements=non-uniform
4162                    ; Interrupt return
4163                    ; Carefully restore __w and __tatus from RAM
4164                    ; Restore swapped status into W
4165 00d3 0e70          swapf   interrupt___status_save,w
4166                    ; W now contains (unswapped) status
4167                    ; Restore W to __status
4168 00d4 0083          movwf   __status
4169                    ; From here on out, do not modify __status
4170                    ; Swap saved W register in RAM
4171 00d5 0ef1          swapf   interrupt___w_save,f
4172                    ; Unswap the saved W reg and restore to W
4173 00d6 0e71          swapf   interrupt___w_save,w
4174                    ; __w and __status are now restored
4175                    ; Return from interrupt
4176 00d7 0009          retfie  
4177            
4178            
4179            
4180            
4181                    ; # Split the floats between data banks 1 and 2:
4182            
4183            
4184                    ; line_number = 566
4185                    ; global error float32
4186 00000140 = error equ globals___2+32
4187                    ; line_number = 567
4188                    ; global position float32
4189 00000144 = position equ globals___2+36
4190                    ; line_number = 568
4191                    ; global target float32
4192 00000148 = target equ globals___2+40
4193                    ; line_number = 569
4194                    ; global kp float32
4195 0000014c = kp equ globals___2+44
4196                    ; line_number = 570
4197                    ; global ki float32
4198 00000150 = ki equ globals___2+48
4199            
4200            
4201                    ; line_number = 574
4202                    ; global kd float32
4203 000000d4 = kd equ globals___1+52
4204                    ; line_number = 575
4205                    ; global pid float32
4206 000000d8 = pid equ globals___1+56
4207                    ; line_number = 576
4208                    ; global divisor float32
4209 000000dc = divisor equ globals___1+60
4210                    ; line_number = 577
4211                    ; global numerator float32
4212 000000e0 = numerator equ globals___1+64
4213                    ; line_number = 578
4214                    ; global previous_error float32
4215 000000e4 = previous_error equ globals___1+68
4216                    ; line_number = 579
4217                    ; global error_sum float32
4218 000000e8 = error_sum equ globals___1+72
4219            
4220            
4221                    ; line_number = 583
4222                    ; global target_speed byte		# Target motor speed
4223 0000003e = target_speed equ globals___0+30
4224                    ; line_number = 584
4225                    ; global target_seek bit
4226 0000006f = target_seek___byte equ globals___0+79
4227 00000001 = target_seek___bit equ 1
4228                    ; line_number = 585
4229                    ; global analog0_greater_than bit		# Analog0 value > analog0 limit
4230 0000006f = analog0_greater_than___byte equ globals___0+79
4231 00000002 = analog0_greater_than___bit equ 2
4232                    ; line_number = 586
4233                    ; global analog1_greater_than bit		# Analog1 value > analog1 limit
4234 0000006f = analog1_greater_than___byte equ globals___0+79
4235 00000003 = analog1_greater_than___bit equ 3
4236                    ; line_number = 587
4237                    ; global value byte			# 8-bit analog value
4238 0000003f = value equ globals___0+31
4239                    ; line_number = 588
4240                    ; global limit byte			# 8-bit limit value
4241 00000040 = limit equ globals___0+32
4242            
4243                    ; line_number = 590
4244                    ;info   590, 216
4245                    ; procedure main
4246   00d8 :   main:
4247                    ; Initialize some registers
4248 00d8 3001          movlw   1
4249 00d9 009f          movwf   _adcon0
4250 00da 3004          movlw   4
4251 00db 1683          bsf     __rp0___byte, __rp0___bit
4252 00dc 0091          movwf   _ansel
4253 00dd 3007          movlw   7
4254 00de 1283          bcf     __rp0___byte, __rp0___bit
4255 00df 0099          movwf   _cmcon0
4256 00e0 303f          movlw   63
4257 00e1 1683          bsf     __rp0___byte, __rp0___bit
4258 00e2 0085          movwf   _trisa
4259 00e3 303c          movlw   60
4260 00e4 0087          movwf   _trisc
4261                    ; arguments_none
4262                    ; line_number = 592
4263                    ;  returns_nothing
4264            
4265                    ; line_number = 594
4266                    ;  local pos_high byte
4267 00000041 = main__pos_high equ globals___0+33
4268                    ; line_number = 595
4269                    ;  local pos_middle byte
4270 00000042 = main__pos_middle equ globals___0+34
4271                    ; line_number = 596
4272                    ;  local pos_low byte
4273 00000043 = main__pos_low equ globals___0+35
4274                    ; line_number = 597
4275                    ;  local negative bit
4276 0000006f = main__negative___byte equ globals___0+79
4277 00000004 = main__negative___bit equ 4
4278                    ; line_number = 598
4279                    ;  local small_error byte
4280 00000044 = main__small_error equ globals___0+36
4281            
4282                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>01 code:X0=cu=>X0)
4283                    ; line_number = 600
4284                    ;  call reset()
4285                    ;info   600, 229
4286 00e5 1283          bcf     __rp0___byte, __rp0___bit
4287 00e6 22d2          call    reset
4288            
4289                    ; line_number = 602
4290                    ;  loop_forever start
4291   00e7 :   main__1:
4292                    ; # Make sure we manage the UART:
4293                    ; line_number = 604
4294                    ;  call uart_manage()
4295                    ;info   604, 231
4296 00e7 2340          call    uart_manage
4297            
4298                    ; # Update target if necesary
4299                    ; line_number = 607
4300                    ;  if file24_changed != 0 start
4301                    ;info   607, 232
4302                    ; Left minus Right
4303 00e8 0820          movf    file24_changed,w
4304                    ; =>bit_code_emit@symbol(): sym=__z
4305                    ; No 1TEST: true.size=0 false.size=120
4306                    ; No 2TEST: true.size=0 false.size=120
4307                    ; 1GOTO: Single test with GOTO
4308 00e9 1903          btfsc   __z___byte, __z___bit
4309 00ea 2963          goto    main__22
4310                    ; # Something has changed:
4311                    ; line_number = 609
4312                    ;  if file24_changed@target_index start
4313                    ;info   609, 235
4314 00000020 = main__select__3___byte equ file24_changed
4315 00000001 = main__select__3___bit equ 1
4316                    ; =>bit_code_emit@symbol(): sym=main__select__3
4317                    ; No 1TEST: true.size=13 false.size=0
4318                    ; No 2TEST: true.size=13 false.size=0
4319                    ; 1GOTO: Single test with GOTO
4320 00eb 1ca0          btfss   main__select__3___byte, main__select__3___bit
4321 00ec 28fa          goto    main__4
4322                    ; line_number = 610
4323                    ; target_seek := _true
4324                    ;info   610, 237
4325 00ed 14ef          bsf     target_seek___byte, target_seek___bit
4326                    ; line_number = 611
4327                    ;  target := file24_float_convert(target_index)
4328                    ;info   611, 238
4329 00ee 3001          movlw   1
4330 00ef 252a          call    file24_float_convert
4331 00f0 3025          movlw   file24_float_convert__0return>>1
4332 00f1 158a          bsf     __cb0___byte, __cb0___bit
4333 00f2 1683          bsf     __rp0___byte, __rp0___bit
4334 00f3 22d8          call    _float32_pointer_load
4335 00f4 30a4          movlw   target>>1
4336 00f5 2337          call    _float32_pointer_store
4337                    ; line_number = 612
4338                    ;  file24_changed@target_index := _false
4339                    ;info   612, 246
4340 00000020 = main__select__2___byte equ file24_changed
4341 00000001 = main__select__2___bit equ 1
4342 00f6 1283          bcf     __rp0___byte, __rp0___bit
4343 00f7 10a0          bcf     main__select__2___byte, main__select__2___bit
4344                    ; line_number = 613
4345                    ;  call uart_manage()
4346                    ;info   613, 248
4347 00f8 118a          bcf     __cb0___byte, __cb0___bit
4348 00f9 2340          call    uart_manage
4349                    ; Recombine size1 = 0 || size2 = 0
4350   00fa :   main__4:
4351                    ; line_number = 609
4352                    ;  if file24_changed@target_index done
4353                    ; line_number = 614
4354                    ; if file24_changed@divisor_index start
4355                    ;info   614, 250
4356 00000020 = main__select__11___byte equ file24_changed
4357 00000002 = main__select__11___bit equ 2
4358                    ; =>bit_code_emit@symbol(): sym=main__select__11
4359                    ; No 1TEST: true.size=28 false.size=0
4360                    ; No 2TEST: true.size=28 false.size=0
4361                    ; 1GOTO: Single test with GOTO
4362 00fa 1d20          btfss   main__select__11___byte, main__select__11___bit
4363 00fb 2918          goto    main__12
4364                    ; line_number = 615
4365                    ; divisor := file24_float_convert(divisor_index)
4366                    ;info   615, 252
4367 00fc 3002          movlw   2
4368 00fd 252a          call    file24_float_convert
4369 00fe 3025          movlw   file24_float_convert__0return>>1
4370 00ff 158a          bsf     __cb0___byte, __cb0___bit
4371 0100 1683          bsf     __rp0___byte, __rp0___bit
4372 0101 22d8          call    _float32_pointer_load
4373 0102 306e          movlw   divisor>>1
4374 0103 2337          call    _float32_pointer_store
4375                    ; line_number = 616
4376                    ;  if file24_zero@divisor_index start
4377                    ;info   616, 260
4378 00000021 = main__select__5___byte equ file24_zero
4379 00000002 = main__select__5___bit equ 2
4380                    ; =>bit_code_emit@symbol(): sym=main__select__5
4381                    ; No 1TEST: true.size=9 false.size=0
4382                    ; No 2TEST: true.size=9 false.size=0
4383                    ; 1GOTO: Single test with GOTO
4384 0104 1283          bcf     __rp0___byte, __rp0___bit
4385 0105 118a          bcf     __cb0___byte, __cb0___bit
4386 0106 1d21          btfss   main__select__5___byte, main__select__5___bit
4387 0107 2912          goto    main__6
4388 0108 1703          bsf     __rp1___byte, __rp1___bit
4389                    ; # Yikes, the user set the divisor to zero; set to 1 instead:
4390                    ; line_number = 618
4391                    ;  lows[divisor_index] := 1
4392                    ;info   618, 265
4393 0109 3001          movlw   1
4394 010a 00b6          movwf   lows+2
4395                    ; line_number = 619
4396                    ;  divisor := 1.0
4397                    ;info   619, 267
4398                    ; divisor := 1 (7F 00 00 00)
4399 010b 307f          movlw   127
4400 010c 1683          bsf     __rp0___byte, __rp0___bit
4401 010d 1303          bcf     __rp1___byte, __rp1___bit
4402 010e 00dc          movwf   divisor
4403 010f 01dd          clrf    divisor+1
4404 0110 01de          clrf    divisor+2
4405 0111 01df          clrf    divisor+3
4406                    ; Recombine size1 = 0 || size2 = 0
4407   0112 :   main__6:
4408                    ; line_number = 616
4409                    ;  if file24_zero@divisor_index done
4410                    ; line_number = 620
4411                    ; file24_changed@divisor_index := _false
4412                    ;info   620, 274
4413 00000020 = main__select__7___byte equ file24_changed
4414 00000002 = main__select__7___bit equ 2
4415 0112 1283          bcf     __rp0___byte, __rp0___bit
4416 0113 1120          bcf     main__select__7___byte, main__select__7___bit
4417                    ; line_number = 621
4418                    ;  file24_changed@kp_index := _true
4419                    ;info   621, 276
4420 00000020 = main__select__8___byte equ file24_changed
4421 00000003 = main__select__8___bit equ 3
4422 0114 15a0          bsf     main__select__8___byte, main__select__8___bit
4423                    ; line_number = 622
4424                    ;  file24_changed@ki_index := _true
4425                    ;info   622, 277
4426 00000020 = main__select__9___byte equ file24_changed
4427 00000004 = main__select__9___bit equ 4
4428 0115 1620          bsf     main__select__9___byte, main__select__9___bit
4429                    ; line_number = 623
4430                    ;  file24_changed@kd_index := _true
4431                    ;info   623, 278
4432 00000020 = main__select__10___byte equ file24_changed
4433 00000005 = main__select__10___bit equ 5
4434 0116 16a0          bsf     main__select__10___byte, main__select__10___bit
4435                    ; line_number = 624
4436                    ;  call uart_manage()
4437                    ;info   624, 279
4438 0117 2340          call    uart_manage
4439                    ; Recombine size1 = 0 || size2 = 0
4440   0118 :   main__12:
4441                    ; line_number = 614
4442                    ; if file24_changed@divisor_index done
4443                    ; line_number = 625
4444                    ; if file24_changed@kp_index start
4445                    ;info   625, 280
4446 00000020 = main__select__14___byte equ file24_changed
4447 00000003 = main__select__14___bit equ 3
4448                    ; =>bit_code_emit@symbol(): sym=main__select__14
4449                    ; No 1TEST: true.size=23 false.size=0
4450                    ; No 2TEST: true.size=23 false.size=0
4451                    ; 1GOTO: Single test with GOTO
4452 0118 1da0          btfss   main__select__14___byte, main__select__14___bit
4453 0119 2931          goto    main__15
4454                    ; line_number = 626
4455                    ; numerator := file24_float_convert(kp_index)
4456                    ;info   626, 282
4457 011a 3003          movlw   3
4458 011b 252a          call    file24_float_convert
4459 011c 3025          movlw   file24_float_convert__0return>>1
4460 011d 158a          bsf     __cb0___byte, __cb0___bit
4461 011e 1683          bsf     __rp0___byte, __rp0___bit
4462 011f 22d8          call    _float32_pointer_load
4463 0120 3070          movlw   numerator>>1
4464 0121 2337          call    _float32_pointer_store
4465                    ; line_number = 627
4466                    ;  call uart_manage()
4467                    ;info   627, 290
4468 0122 118a          bcf     __cb0___byte, __cb0___bit
4469 0123 1283          bcf     __rp0___byte, __rp0___bit
4470 0124 2340          call    uart_manage
4471                    ; line_number = 628
4472                    ;  kp := numerator / divisor
4473                    ;info   628, 293
4474 0125 3070          movlw   numerator>>1
4475 0126 158a          bsf     __cb0___byte, __cb0___bit
4476 0127 1683          bsf     __rp0___byte, __rp0___bit
4477 0128 22d8          call    _float32_pointer_load
4478 0129 306e          movlw   divisor>>1
4479 012a 22fe          call    _float32_pointer_divide
4480 012b 30a6          movlw   kp>>1
4481 012c 2337          call    _float32_pointer_store
4482                    ; line_number = 629
4483                    ;  file24_changed@kp_index := _false
4484                    ;info   629, 301
4485 00000020 = main__select__13___byte equ file24_changed
4486 00000003 = main__select__13___bit equ 3
4487 012d 1283          bcf     __rp0___byte, __rp0___bit
4488 012e 11a0          bcf     main__select__13___byte, main__select__13___bit
4489                    ; line_number = 630
4490                    ;  call uart_manage()
4491                    ;info   630, 303
4492 012f 118a          bcf     __cb0___byte, __cb0___bit
4493 0130 2340          call    uart_manage
4494                    ; Recombine size1 = 0 || size2 = 0
4495   0131 :   main__15:
4496                    ; line_number = 625
4497                    ; if file24_changed@kp_index done
4498                    ; line_number = 631
4499                    ; if file24_changed@ki_index start
4500                    ;info   631, 305
4501 00000020 = main__select__17___byte equ file24_changed
4502 00000004 = main__select__17___bit equ 4
4503                    ; =>bit_code_emit@symbol(): sym=main__select__17
4504                    ; No 1TEST: true.size=23 false.size=0
4505                    ; No 2TEST: true.size=23 false.size=0
4506                    ; 1GOTO: Single test with GOTO
4507 0131 1e20          btfss   main__select__17___byte, main__select__17___bit
4508 0132 294a          goto    main__18
4509                    ; line_number = 632
4510                    ; numerator := file24_float_convert(ki_index)
4511                    ;info   632, 307
4512 0133 3004          movlw   4
4513 0134 252a          call    file24_float_convert
4514 0135 3025          movlw   file24_float_convert__0return>>1
4515 0136 158a          bsf     __cb0___byte, __cb0___bit
4516 0137 1683          bsf     __rp0___byte, __rp0___bit
4517 0138 22d8          call    _float32_pointer_load
4518 0139 3070          movlw   numerator>>1
4519 013a 2337          call    _float32_pointer_store
4520                    ; line_number = 633
4521                    ;  call uart_manage()
4522                    ;info   633, 315
4523 013b 118a          bcf     __cb0___byte, __cb0___bit
4524 013c 1283          bcf     __rp0___byte, __rp0___bit
4525 013d 2340          call    uart_manage
4526                    ; line_number = 634
4527                    ;  ki := numerator / divisor
4528                    ;info   634, 318
4529 013e 3070          movlw   numerator>>1
4530 013f 158a          bsf     __cb0___byte, __cb0___bit
4531 0140 1683          bsf     __rp0___byte, __rp0___bit
4532 0141 22d8          call    _float32_pointer_load
4533 0142 306e          movlw   divisor>>1
4534 0143 22fe          call    _float32_pointer_divide
4535 0144 30a8          movlw   ki>>1
4536 0145 2337          call    _float32_pointer_store
4537                    ; line_number = 635
4538                    ;  file24_changed@ki_index := _false
4539                    ;info   635, 326
4540 00000020 = main__select__16___byte equ file24_changed
4541 00000004 = main__select__16___bit equ 4
4542 0146 1283          bcf     __rp0___byte, __rp0___bit
4543 0147 1220          bcf     main__select__16___byte, main__select__16___bit
4544                    ; line_number = 636
4545                    ;  call uart_manage()
4546                    ;info   636, 328
4547 0148 118a          bcf     __cb0___byte, __cb0___bit
4548 0149 2340          call    uart_manage
4549                    ; Recombine size1 = 0 || size2 = 0
4550   014a :   main__18:
4551                    ; line_number = 631
4552                    ; if file24_changed@ki_index done
4553                    ; line_number = 637
4554                    ; if file24_changed@kd_index start
4555                    ;info   637, 330
4556 00000020 = main__select__20___byte equ file24_changed
4557 00000005 = main__select__20___bit equ 5
4558                    ; =>bit_code_emit@symbol(): sym=main__select__20
4559                    ; No 1TEST: true.size=23 false.size=0
4560                    ; No 2TEST: true.size=23 false.size=0
4561                    ; 1GOTO: Single test with GOTO
4562 014a 1ea0          btfss   main__select__20___byte, main__select__20___bit
4563 014b 2963          goto    main__21
4564                    ; line_number = 638
4565                    ; numerator := file24_float_convert(kd_index)
4566                    ;info   638, 332
4567 014c 3005          movlw   5
4568 014d 252a          call    file24_float_convert
4569 014e 3025          movlw   file24_float_convert__0return>>1
4570 014f 158a          bsf     __cb0___byte, __cb0___bit
4571 0150 1683          bsf     __rp0___byte, __rp0___bit
4572 0151 22d8          call    _float32_pointer_load
4573 0152 3070          movlw   numerator>>1
4574 0153 2337          call    _float32_pointer_store
4575                    ; line_number = 639
4576                    ;  call uart_manage()
4577                    ;info   639, 340
4578 0154 118a          bcf     __cb0___byte, __cb0___bit
4579 0155 1283          bcf     __rp0___byte, __rp0___bit
4580 0156 2340          call    uart_manage
4581                    ; line_number = 640
4582                    ;  kd := numerator / divisor
4583                    ;info   640, 343
4584 0157 3070          movlw   numerator>>1
4585 0158 158a          bsf     __cb0___byte, __cb0___bit
4586 0159 1683          bsf     __rp0___byte, __rp0___bit
4587 015a 22d8          call    _float32_pointer_load
4588 015b 306e          movlw   divisor>>1
4589 015c 22fe          call    _float32_pointer_divide
4590 015d 306a          movlw   kd>>1
4591 015e 2337          call    _float32_pointer_store
4592                    ; line_number = 641
4593                    ;  file24_changed@kd_index := _false
4594                    ;info   641, 351
4595 00000020 = main__select__19___byte equ file24_changed
4596 00000005 = main__select__19___bit equ 5
4597 015f 1283          bcf     __rp0___byte, __rp0___bit
4598 0160 12a0          bcf     main__select__19___byte, main__select__19___bit
4599                    ; line_number = 642
4600                    ;  call uart_manage()
4601                    ;info   642, 353
4602 0161 118a          bcf     __cb0___byte, __cb0___bit
4603 0162 2340          call    uart_manage
4604            
4605                    ; Recombine size1 = 0 || size2 = 0
4606   0163 :   main__21:
4607                    ; line_number = 637
4608                    ; if file24_changed@kd_index done
4609   0163 :   main__22:
4610                    ; Recombine size1 = 0 || size2 = 0
4611                    ; line_number = 607
4612                    ;  if file24_changed != 0 done
4613                    ; line_number = 644
4614                    ; if target_seek start
4615                    ;info   644, 355
4616                    ; =>bit_code_emit@symbol(): sym=target_seek
4617                    ; No 1TEST: true.size=363 false.size=0
4618                    ; No 2TEST: true.size=363 false.size=0
4619                    ; 1GOTO: Single test with GOTO
4620 0163 1cef          btfss   target_seek___byte, target_seek___bit
4621 0164 2ad1          goto    main__52
4622 0165 1703          bsf     __rp1___byte, __rp1___bit
4623                    ; # Fetch the position atomically:
4624                    ; line_number = 646
4625                    ;  _gie := _false
4626                    ;info   646, 358
4627 0166 138b          bcf     _gie___byte, _gie___bit
4628                    ; line_number = 647
4629                    ;  pos_high := quad_high
4630                    ;info   647, 359
4631 0167 0820          movf    quad_high,w
4632 0168 1303          bcf     __rp1___byte, __rp1___bit
4633 0169 00c1          movwf   main__pos_high
4634                    ; line_number = 648
4635                    ;  pos_middle := quad_middle
4636                    ;info   648, 362
4637 016a 1703          bsf     __rp1___byte, __rp1___bit
4638 016b 082a          movf    quad_middle,w
4639 016c 1303          bcf     __rp1___byte, __rp1___bit
4640 016d 00c2          movwf   main__pos_middle
4641                    ; line_number = 649
4642                    ;  pos_low := quad_low
4643                    ;info   649, 366
4644 016e 1703          bsf     __rp1___byte, __rp1___bit
4645 016f 0834          movf    quad_low,w
4646 0170 1303          bcf     __rp1___byte, __rp1___bit
4647 0171 00c3          movwf   main__pos_low
4648                    ; line_number = 650
4649                    ;  _gie := _true
4650                    ;info   650, 370
4651 0172 178b          bsf     _gie___byte, _gie___bit
4652                    ; line_number = 651
4653                    ;  call uart_manage()
4654                    ;info   651, 371
4655 0173 2340          call    uart_manage
4656            
4657                    ; # Convert the position bytes into a float:
4658                    ; line_number = 654
4659                    ;  position := xyz(pos_high, pos_middle, pos_low)
4660                    ;info   654, 372
4661 0174 0841          movf    main__pos_high,w
4662 0175 00d5          movwf   xyz__high
4663 0176 0842          movf    main__pos_middle,w
4664 0177 00d6          movwf   xyz__middle
4665 0178 0843          movf    main__pos_low,w
4666 0179 2605          call    xyz
4667 017a 302c          movlw   xyz__0return>>1
4668 017b 158a          bsf     __cb0___byte, __cb0___bit
4669 017c 1683          bsf     __rp0___byte, __rp0___bit
4670 017d 22d8          call    _float32_pointer_load
4671 017e 30a2          movlw   position>>1
4672 017f 2337          call    _float32_pointer_store
4673                    ; line_number = 655
4674                    ;  call uart_manage()
4675                    ;info   655, 384
4676 0180 118a          bcf     __cb0___byte, __cb0___bit
4677 0181 1283          bcf     __rp0___byte, __rp0___bit
4678 0182 2340          call    uart_manage
4679            
4680                    ; # Figure out the proportional error:
4681                    ; line_number = 658
4682                    ;  previous_error := error
4683                    ;info   658, 387
4684 0183 30a0          movlw   error>>1
4685 0184 158a          bsf     __cb0___byte, __cb0___bit
4686 0185 1683          bsf     __rp0___byte, __rp0___bit
4687 0186 22d8          call    _float32_pointer_load
4688 0187 3072          movlw   previous_error>>1
4689 0188 2337          call    _float32_pointer_store
4690                    ; line_number = 659
4691                    ;  error := position - target
4692                    ;info   659, 393
4693 0189 30a2          movlw   position>>1
4694 018a 22d8          call    _float32_pointer_load
4695 018b 30a4          movlw   target>>1
4696 018c 2324          call    _float32_pointer_subtract
4697 018d 30a0          movlw   error>>1
4698 018e 2337          call    _float32_pointer_store
4699                    ; line_number = 660
4700                    ;  error_sum := error_sum + error
4701                    ;info   660, 399
4702 018f 3074          movlw   error_sum>>1
4703 0190 22d8          call    _float32_pointer_load
4704 0191 30a0          movlw   error>>1
4705 0192 22eb          call    _float32_pointer_add
4706 0193 3074          movlw   error_sum>>1
4707 0194 2337          call    _float32_pointer_store
4708                    ; line_number = 661
4709                    ;  call uart_manage()
4710                    ;info   661, 405
4711 0195 118a          bcf     __cb0___byte, __cb0___bit
4712 0196 1283          bcf     __rp0___byte, __rp0___bit
4713 0197 2340          call    uart_manage
4714            
4715                    ; # Compute the PID equation:
4716                    ; line_number = 664
4717                    ;  pid := kp * error
4718                    ;info   664, 408
4719 0198 30a6          movlw   kp>>1
4720 0199 158a          bsf     __cb0___byte, __cb0___bit
4721 019a 1683          bsf     __rp0___byte, __rp0___bit
4722 019b 22d8          call    _float32_pointer_load
4723 019c 30a0          movlw   error>>1
4724 019d 2311          call    _float32_pointer_multiply
4725 019e 306c          movlw   pid>>1
4726 019f 2337          call    _float32_pointer_store
4727                    ; line_number = 665
4728                    ;  call uart_manage()
4729                    ;info   665, 416
4730 01a0 118a          bcf     __cb0___byte, __cb0___bit
4731 01a1 1283          bcf     __rp0___byte, __rp0___bit
4732 01a2 2340          call    uart_manage
4733                    ; line_number = 666
4734                    ;  pid := pid + kd * (error - previous_error)
4735                    ;info   666, 419
4736 01a3 30a0          movlw   error>>1
4737 01a4 158a          bsf     __cb0___byte, __cb0___bit
4738 01a5 1683          bsf     __rp0___byte, __rp0___bit
4739 01a6 22d8          call    _float32_pointer_load
4740 01a7 3072          movlw   previous_error>>1
4741 01a8 2324          call    _float32_pointer_subtract
4742 01a9 306a          movlw   kd>>1
4743 01aa 2311          call    _float32_pointer_multiply
4744 01ab 306c          movlw   pid>>1
4745 01ac 22eb          call    _float32_pointer_add
4746 01ad 306c          movlw   pid>>1
4747 01ae 2337          call    _float32_pointer_store
4748                    ; line_number = 667
4749                    ;  call uart_manage()
4750                    ;info   667, 431
4751 01af 118a          bcf     __cb0___byte, __cb0___bit
4752 01b0 1283          bcf     __rp0___byte, __rp0___bit
4753 01b1 2340          call    uart_manage
4754                    ; line_number = 668
4755                    ;  pid := pid + ki * error_sum
4756                    ;info   668, 434
4757 01b2 30a8          movlw   ki>>1
4758 01b3 158a          bsf     __cb0___byte, __cb0___bit
4759 01b4 1683          bsf     __rp0___byte, __rp0___bit
4760 01b5 22d8          call    _float32_pointer_load
4761 01b6 3074          movlw   error_sum>>1
4762 01b7 2311          call    _float32_pointer_multiply
4763 01b8 306c          movlw   pid>>1
4764 01b9 22eb          call    _float32_pointer_add
4765 01ba 306c          movlw   pid>>1
4766 01bb 2337          call    _float32_pointer_store
4767            
4768                    ; # Set the new motor speed:
4769                    ; line_number = 671
4770                    ;  negative := _false
4771                    ;info   671, 444
4772 01bc 1283          bcf     __rp0___byte, __rp0___bit
4773 01bd 126f          bcf     main__negative___byte, main__negative___bit
4774                    ; line_number = 672
4775                    ;  if pid < 0.0 start
4776                    ;info   672, 446
4777 01be 306c          movlw   pid>>1
4778 01bf 1683          bsf     __rp0___byte, __rp0___bit
4779 01c0 22d8          call    _float32_pointer_load
4780 01c1 2393          call    _float32_less_than
4781                    ; =>bit_code_emit@symbol(): sym=__z
4782                    ; No 1TEST: true.size=7 false.size=0
4783                    ; No 2TEST: true.size=7 false.size=0
4784                    ; 1GOTO: Single test with GOTO
4785 01c2 118a          bcf     __cb0___byte, __cb0___bit
4786 01c3 1d03          btfss   __z___byte, __z___bit
4787 01c4 29ce          goto    main__23
4788 01c5 158a          bsf     __cb0___byte, __cb0___bit
4789 01c6 1283          bcf     __rp0___byte, __rp0___bit
4790                    ; # Work in positive arithmetic:
4791                    ; line_number = 674
4792                    ;  negative := _true
4793                    ;info   674, 455
4794 01c7 166f          bsf     main__negative___byte, main__negative___bit
4795                    ; line_number = 675
4796                    ;  pid := -pid
4797                    ;info   675, 456
4798 01c8 306c          movlw   pid>>1
4799 01c9 1683          bsf     __rp0___byte, __rp0___bit
4800 01ca 22d8          call    _float32_pointer_load
4801 01cb 234a          call    _float32_negate
4802 01cc 306c          movlw   pid>>1
4803 01cd 2337          call    _float32_pointer_store
4804            
4805                    ; Recombine size1 = 0 || size2 = 0
4806   01ce :   main__23:
4807                    ; line_number = 672
4808                    ;  if pid < 0.0 done
4809                    ; line_number = 677
4810                    ; if pid > 127.0 start
4811                    ;info   677, 462
4812                    ; -127 = 85 fe 00 00
4813 01ce 3085          movlw   133
4814 01cf 00a8          movwf   _float32_aexp
4815 01d0 30fe          movlw   254
4816 01d1 00a7          movwf   _float32_aargb0
4817 01d2 01a6          clrf    _float32_aargb1
4818 01d3 01a5          clrf    _float32_aargb2
4819 01d4 306c          movlw   pid>>1
4820 01d5 158a          bsf     __cb0___byte, __cb0___bit
4821 01d6 22eb          call    _float32_pointer_add
4822 01d7 23a1          call    _float32_greater_than
4823                    ; =>bit_code_emit@symbol(): sym=__z
4824                    ; No 1TEST: true.size=7 false.size=83
4825                    ; No 2TEST: true.size=7 false.size=83
4826 01d8 118a          bcf     __cb0___byte, __cb0___bit
4827                    ; 2GOTO: Single test with two GOTO's
4828 01d9 1d03          btfss   __z___byte, __z___bit
4829 01da 29e4          goto    main__31
4830 01db 1283          bcf     __rp0___byte, __rp0___bit
4831                    ; line_number = 678
4832                    ; target_speed := 127
4833                    ;info   678, 476
4834 01dc 307f          movlw   127
4835 01dd 00be          movwf   target_speed
4836                    ; line_number = 679
4837                    ;  error_sum := 0.0
4838                    ;info   679, 478
4839                    ; error_sum := 0 (00 00 00 00)
4840 01de 1683          bsf     __rp0___byte, __rp0___bit
4841 01df 01e8          clrf    error_sum
4842 01e0 01e9          clrf    error_sum+1
4843 01e1 01ea          clrf    error_sum+2
4844 01e2 01eb          clrf    error_sum+3
4845                    ; Recombine code1_bit_states != code2_bit_states
4846 01e3 2a38          goto    main__32
4847                    ; 2GOTO: Starting code 2
4848   01e4 :   main__31:
4849 01e4 158a          bsf     __cb0___byte, __cb0___bit
4850                    ; line_number = 681
4851                    ; target_speed := _float32_to_byte(pid)
4852                    ;info   681, 485
4853 01e5 306c          movlw   pid>>1
4854 01e6 22d8          call    _float32_pointer_load
4855 01e7 3068          movlw   _float32_to_byte__number>>1
4856 01e8 2337          call    _float32_pointer_store
4857 01e9 2385          call    _float32_to_byte
4858 01ea 1283          bcf     __rp0___byte, __rp0___bit
4859 01eb 00be          movwf   target_speed
4860                    ; line_number = 682
4861                    ;  call uart_manage()
4862                    ;info   682, 492
4863 01ec 118a          bcf     __cb0___byte, __cb0___bit
4864 01ed 2340          call    uart_manage
4865            
4866                    ; # Extract the error as a small byte:
4867                    ; line_number = 685
4868                    ;  if error >= 0.0 start
4869                    ;info   685, 494
4870 01ee 30a0          movlw   error>>1
4871 01ef 158a          bsf     __cb0___byte, __cb0___bit
4872 01f0 1683          bsf     __rp0___byte, __rp0___bit
4873 01f1 22d8          call    _float32_pointer_load
4874 01f2 23a9          call    _float32_greater_than_or_equal
4875                    ; =>bit_code_emit@symbol(): sym=__z
4876                    ; line_number = 686
4877                    ; if error >= 255.0 start
4878                    ;info   686, 499
4879                    ; -255 = 86 ff 00 00
4880 01f3 3086          movlw   134
4881 01f4 00a8          movwf   _float32_aexp
4882                    ; line_number = 691
4883                    ; if error < -255.0 start
4884                    ;info   691, 501
4885                    ; 255 = 86 7f 00 00
4886                    ; No 1TEST: true.size=22 false.size=23
4887                    ; No 2TEST: true.size=22 false.size=23
4888 01f5 118a          bcf     __cb0___byte, __cb0___bit
4889                    ; 2GOTO: Single test with two GOTO's
4890 01f6 1d03          btfss   __z___byte, __z___bit
4891 01f7 2a11          goto    main__28
4892 01f8 158a          bsf     __cb0___byte, __cb0___bit
4893 01f9 30ff          movlw   255
4894 01fa 00a7          movwf   _float32_aargb0
4895 01fb 01a6          clrf    _float32_aargb1
4896 01fc 01a5          clrf    _float32_aargb2
4897 01fd 30a0          movlw   error>>1
4898 01fe 22eb          call    _float32_pointer_add
4899 01ff 23a9          call    _float32_greater_than_or_equal
4900                    ; =>bit_code_emit@symbol(): sym=__z
4901                    ; No 1TEST: true.size=2 false.size=7
4902                    ; No 2TEST: true.size=2 false.size=7
4903 0200 118a          bcf     __cb0___byte, __cb0___bit
4904                    ; 2GOTO: Single test with two GOTO's
4905 0201 1d03          btfss   __z___byte, __z___bit
4906 0202 2a07          goto    main__26
4907 0203 1283          bcf     __rp0___byte, __rp0___bit
4908                    ; line_number = 687
4909                    ; small_error := 255
4910                    ;info   687, 516
4911 0204 30ff          movlw   255
4912 0205 00c4          movwf   main__small_error
4913                    ; Recombine code1_bit_states != code2_bit_states
4914 0206 2a0f          goto    main__27
4915                    ; 2GOTO: Starting code 2
4916   0207 :   main__26:
4917 0207 158a          bsf     __cb0___byte, __cb0___bit
4918                    ; line_number = 689
4919                    ; small_error := _float32_to_byte(error)
4920                    ;info   689, 520
4921 0208 30a0          movlw   error>>1
4922 0209 22d8          call    _float32_pointer_load
4923 020a 3068          movlw   _float32_to_byte__number>>1
4924 020b 2337          call    _float32_pointer_store
4925 020c 2385          call    _float32_to_byte
4926 020d 1283          bcf     __rp0___byte, __rp0___bit
4927 020e 00c4          movwf   main__small_error
4928   020f :   main__27:
4929                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
4930                    ; 2GOTO: code2 final bitstates:(data:01=uu=>00 code:X1=cu=>X1)
4931                    ; 2GOTO: code final bitstates:(data:01=uu=>00 code:X1=cu=>X?)
4932                    ; line_number = 686
4933                    ; if error >= 255.0 done
4934 020f 118a          bcf     __cb0___byte, __cb0___bit
4935 0210 2a29          goto    main__29
4936                    ; 2GOTO: Starting code 2
4937   0211 :   main__28:
4938 0211 158a          bsf     __cb0___byte, __cb0___bit
4939 0212 307f          movlw   127
4940 0213 00a7          movwf   _float32_aargb0
4941 0214 01a6          clrf    _float32_aargb1
4942 0215 01a5          clrf    _float32_aargb2
4943 0216 30a0          movlw   error>>1
4944 0217 22eb          call    _float32_pointer_add
4945 0218 2393          call    _float32_less_than
4946                    ; =>bit_code_emit@symbol(): sym=__z
4947                    ; No 1TEST: true.size=2 false.size=8
4948                    ; No 2TEST: true.size=2 false.size=8
4949 0219 118a          bcf     __cb0___byte, __cb0___bit
4950                    ; 2GOTO: Single test with two GOTO's
4951 021a 1d03          btfss   __z___byte, __z___bit
4952 021b 2a20          goto    main__24
4953 021c 1283          bcf     __rp0___byte, __rp0___bit
4954                    ; line_number = 692
4955                    ; small_error := 255
4956                    ;info   692, 541
4957 021d 30ff          movlw   255
4958 021e 00c4          movwf   main__small_error
4959                    ; Recombine code1_bit_states != code2_bit_states
4960 021f 2a29          goto    main__25
4961                    ; 2GOTO: Starting code 2
4962   0220 :   main__24:
4963 0220 158a          bsf     __cb0___byte, __cb0___bit
4964                    ; line_number = 694
4965                    ; small_error := _float32_to_byte(-error)
4966                    ;info   694, 545
4967 0221 30a0          movlw   error>>1
4968 0222 22d8          call    _float32_pointer_load
4969 0223 234a          call    _float32_negate
4970 0224 3068          movlw   _float32_to_byte__number>>1
4971 0225 2337          call    _float32_pointer_store
4972 0226 2385          call    _float32_to_byte
4973 0227 1283          bcf     __rp0___byte, __rp0___bit
4974 0228 00c4          movwf   main__small_error
4975   0229 :   main__25:
4976                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
4977                    ; 2GOTO: code2 final bitstates:(data:01=uu=>00 code:X1=cu=>X1)
4978                    ; 2GOTO: code final bitstates:(data:01=uu=>00 code:X1=cu=>X?)
4979                    ; line_number = 691
4980                    ; if error < -255.0 done
4981   0229 :   main__29:
4982                    ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
4983                    ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
4984                    ; 2GOTO: code final bitstates:(data:01=uu=>01 code:X1=cu=>X?)
4985 0229 1283          bcf     __rp0___byte, __rp0___bit
4986                    ; line_number = 685
4987                    ;  if error >= 0.0 done
4988                    ; line_number = 695
4989                    ; call uart_manage()
4990                    ;info   695, 554
4991 022a 118a          bcf     __cb0___byte, __cb0___bit
4992 022b 2340          call    uart_manage
4993            
4994                    ; # We we are in -{deadband} <= {error} <= {deadband},
4995                    ; # we turn everything off:
4996                    ; line_number = 699
4997                    ;  if small_error <= deadband start
4998                    ;info   699, 556
4999 022c 0829          movf    deadband,w
5000 022d 0244          subwf   main__small_error,w
5001 022e 1903          btfsc   __z___byte, __z___bit
5002 022f 1003          bcf     __c___byte, __c___bit
5003                    ; =>bit_code_emit@symbol(): sym=__c
5004                    ; No 1TEST: true.size=0 false.size=6
5005                    ; No 2TEST: true.size=0 false.size=6
5006                    ; 1GOTO: Single test with GOTO
5007 0230 1803          btfsc   __c___byte, __c___bit
5008 0231 2a38          goto    main__30
5009                    ; line_number = 700
5010                    ; target_speed := 0
5011                    ;info   700, 562
5012 0232 01be          clrf    target_speed
5013                    ; line_number = 701
5014                    ;  error_sum := 0.0
5015                    ;info   701, 563
5016                    ; error_sum := 0 (00 00 00 00)
5017 0233 1683          bsf     __rp0___byte, __rp0___bit
5018 0234 01e8          clrf    error_sum
5019 0235 01e9          clrf    error_sum+1
5020 0236 01ea          clrf    error_sum+2
5021 0237 01eb          clrf    error_sum+3
5022            
5023   0238 :   main__30:
5024                    ; Recombine size1 = 0 || size2 = 0
5025                    ; line_number = 699
5026                    ;  if small_error <= deadband done
5027   0238 :   main__32:
5028                    ; 2GOTO: code1 final bitstates:(data:00=uu=>01 code:XX=cc=>XX)
5029                    ; 2GOTO: code2 final bitstates:(data:01=uu=>0? code:X1=cu=>X0)
5030                    ; 2GOTO: code final bitstates:(data:10=uu=>0? code:X0=cu=>X0)
5031                    ; line_number = 677
5032                    ; if pid > 127.0 done
5033                    ; # Deal with {minimum}:
5034                    ; line_number = 704
5035                    ;  if target_speed != 0 start
5036                    ;info   704, 568
5037                    ; Left minus Right
5038 0238 1283          bcf     __rp0___byte, __rp0___bit
5039 0239 083e          movf    target_speed,w
5040                    ; =>bit_code_emit@symbol(): sym=__z
5041                    ; No 1TEST: true.size=0 false.size=15
5042                    ; No 2TEST: true.size=0 false.size=15
5043                    ; 1GOTO: Single test with GOTO
5044 023a 1903          btfsc   __z___byte, __z___bit
5045 023b 2a4b          goto    main__35
5046                    ; line_number = 705
5047                    ; target_speed := target_speed + minimum
5048                    ;info   705, 572
5049 023c 082a          movf    minimum,w
5050 023d 07be          addwf   target_speed,f
5051                    ; line_number = 706
5052                    ;  if target_speed > maximum start
5053                    ;info   706, 574
5054 023e 082b          movf    maximum,w
5055 023f 023e          subwf   target_speed,w
5056 0240 1903          btfsc   __z___byte, __z___bit
5057 0241 1003          bcf     __c___byte, __c___bit
5058                    ; =>bit_code_emit@symbol(): sym=__c
5059                    ; No 1TEST: true.size=2 false.size=0
5060                    ; No 2TEST: true.size=2 false.size=0
5061                    ; 1GOTO: Single test with GOTO
5062 0242 1c03          btfss   __c___byte, __c___bit
5063 0243 2a46          goto    main__33
5064                    ; line_number = 707
5065                    ; target_speed := maximum
5066                    ;info   707, 580
5067 0244 082b          movf    maximum,w
5068 0245 00be          movwf   target_speed
5069            
5070                    ; Recombine size1 = 0 || size2 = 0
5071   0246 :   main__33:
5072                    ; line_number = 706
5073                    ;  if target_speed > maximum done
5074                    ; line_number = 709
5075                    ; if negative start
5076                    ;info   709, 582
5077                    ; =>bit_code_emit@symbol(): sym=main__negative
5078                    ; No 1TEST: true.size=3 false.size=0
5079                    ; No 2TEST: true.size=3 false.size=0
5080                    ; 1GOTO: Single test with GOTO
5081 0246 1e6f          btfss   main__negative___byte, main__negative___bit
5082 0247 2a4b          goto    main__34
5083                    ; line_number = 710
5084                    ; target_speed := 0 - target_speed
5085                    ;info   710, 584
5086 0248 083e          movf    target_speed,w
5087 0249 3c00          sublw   0
5088 024a 00be          movwf   target_speed
5089            
5090                    ; Recombine size1 = 0 || size2 = 0
5091   024b :   main__34:
5092                    ; line_number = 709
5093                    ; if negative done
5094   024b :   main__35:
5095                    ; Recombine size1 = 0 || size2 = 0
5096                    ; line_number = 704
5097                    ;  if target_speed != 0 done
5098                    ; # Deal with analog0 motor disable:
5099                    ; line_number = 713
5100                    ;  if ad0_enable start
5101                    ;info   713, 587
5102                    ; =>bit_code_emit@symbol(): sym=ad0_enable
5103                    ; No 1TEST: true.size=62 false.size=0
5104                    ; No 2TEST: true.size=62 false.size=0
5105                    ; 1GOTO: Single test with GOTO
5106 024b 1fa5          btfss   ad0_enable___byte, ad0_enable___bit
5107 024c 2a8c          goto    main__43
5108 024d 1703          bsf     __rp1___byte, __rp1___bit
5109                    ; line_number = 714
5110                    ; value := (ad0_value_middle << 6) | (ad0_value_low >> 2)
5111                    ;info   714, 590
5112 00000062 = main__36 equ globals___0+66
5113 024e 0e30          swapf   ad0_value_middle,w
5114 024f 1303          bcf     __rp1___byte, __rp1___bit
5115 0250 00e2          movwf   main__36
5116 0251 0de2          rlf     main__36,f
5117 0252 0de2          rlf     main__36,f
5118 0253 30c0          movlw   192
5119 0254 05e2          andwf   main__36,f
5120 00000063 = main__37 equ globals___0+67
5121 0255 1703          bsf     __rp1___byte, __rp1___bit
5122 0256 0c3a          rrf     ad0_value_low,w
5123 0257 1303          bcf     __rp1___byte, __rp1___bit
5124 0258 00e3          movwf   main__37
5125 0259 0c63          rrf     main__37,w
5126 025a 393f          andlw   63
5127 025b 0462          iorwf   main__36,w
5128 025c 00bf          movwf   value
5129                    ; line_number = 715
5130                    ;  limit := (ad0_limit_middle << 6) | (ad0_limit_low >> 2)
5131                    ;info   715, 605
5132 00000063 = main__38 equ globals___0+67
5133 025d 1703          bsf     __rp1___byte, __rp1___bit
5134 025e 0e32          swapf   ad0_limit_middle,w
5135 025f 1303          bcf     __rp1___byte, __rp1___bit
5136 0260 00e3          movwf   main__38
5137 0261 0de3          rlf     main__38,f
5138 0262 0de3          rlf     main__38,f
5139 0263 30c0          movlw   192
5140 0264 05e3          andwf   main__38,f
5141 00000064 = main__39 equ globals___0+68
5142 0265 1703          bsf     __rp1___byte, __rp1___bit
5143 0266 0c3c          rrf     ad0_limit_low,w
5144 0267 1303          bcf     __rp1___byte, __rp1___bit
5145 0268 00e4          movwf   main__39
5146 0269 0c64          rrf     main__39,w
5147 026a 393f          andlw   63
5148 026b 0463          iorwf   main__38,w
5149 026c 00c0          movwf   limit
5150                    ; line_number = 716
5151                    ;  analog0_greater_than := _false
5152                    ;info   716, 621
5153 026d 116f          bcf     analog0_greater_than___byte, analog0_greater_than___bit
5154                    ; line_number = 717
5155                    ;  if value > limit start
5156                    ;info   717, 622
5157 026e 0840          movf    limit,w
5158 026f 023f          subwf   value,w
5159 0270 1903          btfsc   __z___byte, __z___bit
5160 0271 1003          bcf     __c___byte, __c___bit
5161                    ; =>bit_code_emit@symbol(): sym=__c
5162                    ; No 1TEST: true.size=23 false.size=0
5163                    ; No 2TEST: true.size=23 false.size=0
5164                    ; 1GOTO: Single test with GOTO
5165 0272 1c03          btfss   __c___byte, __c___bit
5166 0273 2a8c          goto    main__42
5167 0274 158a          bsf     __cb0___byte, __cb0___bit
5168                    ; line_number = 718
5169                    ; analog0_greater_than := _true
5170                    ;info   718, 629
5171 0275 156f          bsf     analog0_greater_than___byte, analog0_greater_than___bit
5172                    ; line_number = 719
5173                    ;  if ad0_reverse start
5174                    ;info   719, 630
5175                    ; =>bit_code_emit@symbol(): sym=ad0_reverse
5176 0276 1683          bsf     __rp0___byte, __rp0___bit
5177                    ; line_number = 720
5178                    ; if target < position start
5179                    ;info   720, 631
5180 0277 30a4          movlw   target>>1
5181 0278 22d8          call    _float32_pointer_load
5182 0279 30a2          movlw   position>>1
5183 027a 2324          call    _float32_pointer_subtract
5184                    ; line_number = 723
5185                    ; if target > position start
5186                    ;info   723, 635
5187                    ; No 1TEST: true.size=1 false.size=1
5188                    ; No 2TEST: data0 mismatch
5189 027b 118a          bcf     __cb0___byte, __cb0___bit
5190                    ; 2GOTO: Single test with two GOTO's
5191 027c 1283          bcf     __rp0___byte, __rp0___bit
5192 027d 1f25          btfss   ad0_reverse___byte, ad0_reverse___bit
5193 027e 2a84          goto    main__40
5194 027f 158a          bsf     __cb0___byte, __cb0___bit
5195 0280 1683          bsf     __rp0___byte, __rp0___bit
5196 0281 2393          call    _float32_less_than
5197                    ; =>bit_code_emit@symbol(): sym=__z
5198                    ; 1TEST: Single test with code in skip slot
5199 0282 118a          bcf     __cb0___byte, __cb0___bit
5200 0283 2a87          goto    main__41
5201                    ; 2GOTO: Starting code 2
5202   0284 :   main__40:
5203 0284 158a          bsf     __cb0___byte, __cb0___bit
5204 0285 1683          bsf     __rp0___byte, __rp0___bit
5205 0286 23a1          call    _float32_greater_than
5206                    ; =>bit_code_emit@symbol(): sym=__z
5207                    ; 1TEST: Single test with code in skip slot
5208   0287 :   main__41:
5209                    ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
5210                    ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
5211                    ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X1=cu=>X?)
5212 0287 158a          bsf     __cb0___byte, __cb0___bit
5213 0288 1283          bcf     __rp0___byte, __rp0___bit
5214 0289 1283          bcf     __rp0___byte, __rp0___bit
5215 028a 1903          btfsc   __z___byte, __z___bit
5216                    ; line_number = 721
5217                    ; target_speed := 0
5218                    ;info   721, 651
5219 028b 01be          clrf    target_speed
5220                    ; Recombine size1 = 0 || size2 = 0
5221                    ; line_number = 720
5222                    ; if target < position done
5223                    ; line_number = 724
5224                    ; target_speed := 0
5225                    ;info   724, 652
5226            
5227                    ; Recombine size1 = 0 || size2 = 0
5228                    ; line_number = 723
5229                    ; if target > position done
5230                    ; line_number = 719
5231                    ;  if ad0_reverse done
5232                    ; Recombine size1 = 0 || size2 = 0
5233   028c :   main__42:
5234                    ; line_number = 717
5235                    ;  if value > limit done
5236                    ; Recombine size1 = 0 || size2 = 0
5237   028c :   main__43:
5238                    ; line_number = 713
5239                    ;  if ad0_enable done
5240                    ; # Deal with analog1 motor disable:
5241                    ; line_number = 727
5242                    ;  if ad1_enable start
5243                    ;info   727, 652
5244                    ; =>bit_code_emit@symbol(): sym=ad1_enable
5245                    ; No 1TEST: true.size=62 false.size=0
5246                    ; No 2TEST: true.size=62 false.size=0
5247                    ; 1GOTO: Single test with GOTO
5248 028c 118a          bcf     __cb0___byte, __cb0___bit
5249 028d 1ea5          btfss   ad1_enable___byte, ad1_enable___bit
5250 028e 2ace          goto    main__51
5251 028f 1703          bsf     __rp1___byte, __rp1___bit
5252                    ; line_number = 728
5253                    ; value := (ad1_value_middle << 6) | (ad1_value_low >> 2)
5254                    ;info   728, 656
5255 00000063 = main__44 equ globals___0+67
5256 0290 0e31          swapf   ad1_value_middle,w
5257 0291 1303          bcf     __rp1___byte, __rp1___bit
5258 0292 00e3          movwf   main__44
5259 0293 0de3          rlf     main__44,f
5260 0294 0de3          rlf     main__44,f
5261 0295 30c0          movlw   192
5262 0296 05e3          andwf   main__44,f
5263 00000064 = main__45 equ globals___0+68
5264 0297 1703          bsf     __rp1___byte, __rp1___bit
5265 0298 0c3b          rrf     ad1_value_low,w
5266 0299 1303          bcf     __rp1___byte, __rp1___bit
5267 029a 00e4          movwf   main__45
5268 029b 0c64          rrf     main__45,w
5269 029c 393f          andlw   63
5270 029d 0463          iorwf   main__44,w
5271 029e 00bf          movwf   value
5272                    ; line_number = 729
5273                    ;  limit := (ad1_limit_middle << 6) | (ad1_limit_low >> 2)
5274                    ;info   729, 671
5275 00000064 = main__46 equ globals___0+68
5276 029f 1703          bsf     __rp1___byte, __rp1___bit
5277 02a0 0e33          swapf   ad1_limit_middle,w
5278 02a1 1303          bcf     __rp1___byte, __rp1___bit
5279 02a2 00e4          movwf   main__46
5280 02a3 0de4          rlf     main__46,f
5281 02a4 0de4          rlf     main__46,f
5282 02a5 30c0          movlw   192
5283 02a6 05e4          andwf   main__46,f
5284 00000065 = main__47 equ globals___0+69
5285 02a7 1703          bsf     __rp1___byte, __rp1___bit
5286 02a8 0c3d          rrf     ad1_limit_low,w
5287 02a9 1303          bcf     __rp1___byte, __rp1___bit
5288 02aa 00e5          movwf   main__47
5289 02ab 0c65          rrf     main__47,w
5290 02ac 393f          andlw   63
5291 02ad 0464          iorwf   main__46,w
5292 02ae 00c0          movwf   limit
5293                    ; line_number = 730
5294                    ;  analog1_greater_than := _false
5295                    ;info   730, 687
5296 02af 11ef          bcf     analog1_greater_than___byte, analog1_greater_than___bit
5297                    ; line_number = 731
5298                    ;  if value > limit start
5299                    ;info   731, 688
5300 02b0 0840          movf    limit,w
5301 02b1 023f          subwf   value,w
5302 02b2 1903          btfsc   __z___byte, __z___bit
5303 02b3 1003          bcf     __c___byte, __c___bit
5304                    ; =>bit_code_emit@symbol(): sym=__c
5305                    ; No 1TEST: true.size=23 false.size=0
5306                    ; No 2TEST: true.size=23 false.size=0
5307                    ; 1GOTO: Single test with GOTO
5308 02b4 1c03          btfss   __c___byte, __c___bit
5309 02b5 2ace          goto    main__50
5310 02b6 158a          bsf     __cb0___byte, __cb0___bit
5311                    ; line_number = 732
5312                    ; analog1_greater_than := _true
5313                    ;info   732, 695
5314 02b7 15ef          bsf     analog1_greater_than___byte, analog1_greater_than___bit
5315                    ; line_number = 733
5316                    ;  if ad1_reverse start
5317                    ;info   733, 696
5318                    ; =>bit_code_emit@symbol(): sym=ad1_reverse
5319 02b8 1683          bsf     __rp0___byte, __rp0___bit
5320                    ; line_number = 734
5321                    ; if target < position start
5322                    ;info   734, 697
5323 02b9 30a4          movlw   target>>1
5324 02ba 22d8          call    _float32_pointer_load
5325 02bb 30a2          movlw   position>>1
5326 02bc 2324          call    _float32_pointer_subtract
5327                    ; line_number = 737
5328                    ; if target > position start
5329                    ;info   737, 701
5330                    ; No 1TEST: true.size=1 false.size=1
5331                    ; No 2TEST: data0 mismatch
5332 02bd 118a          bcf     __cb0___byte, __cb0___bit
5333                    ; 2GOTO: Single test with two GOTO's
5334 02be 1283          bcf     __rp0___byte, __rp0___bit
5335 02bf 1f25          btfss   ad1_reverse___byte, ad1_reverse___bit
5336 02c0 2ac6          goto    main__48
5337 02c1 158a          bsf     __cb0___byte, __cb0___bit
5338 02c2 1683          bsf     __rp0___byte, __rp0___bit
5339 02c3 2393          call    _float32_less_than
5340                    ; =>bit_code_emit@symbol(): sym=__z
5341                    ; 1TEST: Single test with code in skip slot
5342 02c4 118a          bcf     __cb0___byte, __cb0___bit
5343 02c5 2ac9          goto    main__49
5344                    ; 2GOTO: Starting code 2
5345   02c6 :   main__48:
5346 02c6 158a          bsf     __cb0___byte, __cb0___bit
5347 02c7 1683          bsf     __rp0___byte, __rp0___bit
5348 02c8 23a1          call    _float32_greater_than
5349                    ; =>bit_code_emit@symbol(): sym=__z
5350                    ; 1TEST: Single test with code in skip slot
5351   02c9 :   main__49:
5352                    ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
5353                    ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
5354                    ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X1=cu=>X?)
5355 02c9 158a          bsf     __cb0___byte, __cb0___bit
5356 02ca 1283          bcf     __rp0___byte, __rp0___bit
5357 02cb 1283          bcf     __rp0___byte, __rp0___bit
5358 02cc 1903          btfsc   __z___byte, __z___bit
5359                    ; line_number = 735
5360                    ; target_speed := 0
5361                    ;info   735, 717
5362 02cd 01be          clrf    target_speed
5363                    ; Recombine size1 = 0 || size2 = 0
5364                    ; line_number = 734
5365                    ; if target < position done
5366                    ; line_number = 738
5367                    ; target_speed := 0
5368                    ;info   738, 718
5369            
5370                    ; Recombine size1 = 0 || size2 = 0
5371                    ; line_number = 737
5372                    ; if target > position done
5373                    ; line_number = 733
5374                    ;  if ad1_reverse done
5375                    ; Recombine size1 = 0 || size2 = 0
5376   02ce :   main__50:
5377                    ; line_number = 731
5378                    ;  if value > limit done
5379                    ; Recombine size1 = 0 || size2 = 0
5380   02ce :   main__51:
5381                    ; line_number = 727
5382                    ;  if ad1_enable done
5383                    ; line_number = 740
5384                    ; call speed_set(target_speed)
5385                    ;info   740, 718
5386 02ce 083e          movf    target_speed,w
5387 02cf 118a          bcf     __cb0___byte, __cb0___bit
5388 02d0 25b3          call    speed_set
5389            
5390            
5391                    ; Recombine size1 = 0 || size2 = 0
5392   02d1 :   main__52:
5393                    ; line_number = 644
5394                    ; if target_seek done
5395                    ; line_number = 602
5396                    ;  loop_forever wrap-up
5397 02d1 28e7          goto    main__1
5398                    ; line_number = 602
5399                    ;  loop_forever done
5400                    ; delay after procedure statements=non-uniform
5401            
5402            
5403            
5404            
5405                    ; line_number = 743
5406                    ;info   743, 722
5407                    ; procedure reset
5408   02d2 :   reset:
5409                    ; arguments_none
5410                    ; line_number = 745
5411                    ;  returns_nothing
5412            
5413                    ; # This procedure will return the restore all of the state to start-up state.
5414            
5415                    ; line_number = 749
5416                    ;  local index byte
5417 00000045 = reset__index equ globals___0+37
5418            
5419                    ; # Initialize UART:
5420                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
5421                    ; line_number = 752
5422                    ;  address := rb2bus_eedata_read()
5423                    ;info   752, 722
5424 02d2 25d0          call    rb2bus_eedata_read
5425 02d3 00b9          movwf   address
5426                    ; line_number = 753
5427                    ;  if address = 0 start
5428                    ;info   753, 724
5429                    ; Left minus Right
5430 02d4 0839          movf    address,w
5431                    ; =>bit_code_emit@symbol(): sym=__z
5432                    ; No 1TEST: true.size=2 false.size=0
5433                    ; No 2TEST: true.size=2 false.size=0
5434                    ; 1GOTO: Single test with GOTO
5435 02d5 1d03          btfss   __z___byte, __z___bit
5436 02d6 2ad9          goto    reset__1
5437                    ; line_number = 754
5438                    ; address := 21
5439                    ;info   754, 727
5440 02d7 3015          movlw   21
5441 02d8 00b9          movwf   address
5442                    ; Recombine size1 = 0 || size2 = 0
5443   02d9 :   reset__1:
5444                    ; line_number = 753
5445                    ;  if address = 0 done
5446                    ; line_number = 755
5447                    ; call uart_initialize()
5448                    ;info   755, 729
5449 02d9 2596          call    uart_initialize
5450            
5451                    ; # Initialize prescaler for use by Timer 0:
5452                    ; # _rapu := _true	# Disable bit port A pull-ups (bit 7)
5453                    ; # _integ := _false	# Interrupt edge select (bit 6)
5454                    ; # _t0cs := _false	# Use clock for tmr0 (bit 5)
5455                    ; # _t0se := _false	# Source edge select (bit 4)
5456                    ; # _psa := _false	# Prescaler is assigned to timer0 (bit 3)
5457                    ; # _ps2 := _true
5458                    ; # _ps1 := _true
5459                    ; # _ps0 := _true	# Prescaler = 256
5460                    ; # 1000 0111 = 0x87
5461                    ; line_number = 767
5462                    ;  _option_reg := 0x87
5463                    ;info   767, 730
5464 02da 3087          movlw   135
5465 02db 1683          bsf     __rp0___byte, __rp0___bit
5466 02dc 0081          movwf   _option_reg
5467            
5468                    ; # Initialize Timer 1:
5469                    ; # _t1ginv := _false	# Timer1 gate (bit 7)
5470                    ; # _tmr1ge := _false	# Timer1 gate enable (bit 6)
5471                    ; # _t1ckps1 := _false # (bit 5)
5472                    ; # _t1ckps0 := _false # Timer1 prescale = 1:1 (bit 4)
5473                    ; # _t10scen := _false # LP oscillator is off (bit 3)
5474                    ; # _t1sync := _false	# Timer 1 synchorinize (bit 2)
5475                    ; # _tmr1cs := _false	# Use internal clock (bit 1)
5476                    ; # _tmr1on := _false	# Leave timer off for now (bit 0)
5477                    ; # 0000 0000 = 0
5478                    ; line_number = 779
5479                    ;  _t1con := 0
5480                    ;info   779, 733
5481 02dd 1283          bcf     __rp0___byte, __rp0___bit
5482 02de 0190          clrf    _t1con
5483            
5484                    ; # Initialize A/D module:
5485                    ; # ANSEL is already set by the compiler:
5486                    ; #
5487                    ; # ADCON0 needs to be configured:
5488                    ; # _adfm := _true	# Right justified result
5489                    ; # _vcfg := _false	# Use 5V as Vref
5490                    ; # _chs2 := _false
5491                    ; # _chs1 := _true
5492                    ; # _chs0 := _false	# Channel = 010 = AN2
5493                    ; # _go := _false
5494                    ; # _adon := _true	# Turn on A/D converter
5495                    ; # 10x0 1001 = 0x89
5496                    ; line_number = 793
5497                    ;  _adcon0 := 0x89
5498                    ;info   793, 735
5499 02df 3089          movlw   137
5500 02e0 009f          movwf   _adcon0
5501                    ; line_number = 794
5502                    ;  channel := 2
5503                    ;info   794, 737
5504 02e1 3002          movlw   2
5505 02e2 00bb          movwf   channel
5506            
5507                    ; # ADCON1 needs to be configured:
5508                    ; # ADCS<2:0> := 101 = Tad=1.6uS at Fosc=20MHz
5509                    ; # _adcs2 := _true
5510                    ; # _adcs1 := _false
5511                    ; # _adcs0 := _true
5512                    ; # x110 xxxx = 0x50
5513                    ; line_number = 802
5514                    ;  _adcon1 := 0x50
5515                    ;info   802, 739
5516 02e3 3050          movlw   80
5517 02e4 1683          bsf     __rp0___byte, __rp0___bit
5518 02e5 009f          movwf   _adcon1
5519            
5520                    ; # Initialize motor:
5521                    ; line_number = 805
5522                    ;  call speed_set(0)
5523                    ;info   805, 742
5524 02e6 3000          movlw   0
5525 02e7 1283          bcf     __rp0___byte, __rp0___bit
5526 02e8 25b3          call    speed_set
5527            
5528                    ; # Initialize {file8}:
5529                    ; line_number = 808
5530                    ;  index := 0
5531                    ;info   808, 745
5532 02e9 01c5          clrf    reset__index
5533                    ; line_number = 809
5534                    ;  while index < file8_size start
5535   02ea :   reset__2:
5536                    ;info   809, 746
5537 02ea 3008          movlw   8
5538 02eb 0245          subwf   reset__index,w
5539                    ; =>bit_code_emit@symbol(): sym=__c
5540                    ; No 1TEST: true.size=0 false.size=7
5541                    ; No 2TEST: true.size=0 false.size=7
5542                    ; 1GOTO: Single test with GOTO
5543 02ec 1803          btfsc   __c___byte, __c___bit
5544 02ed 2af5          goto    reset__3
5545                    ; line_number = 810
5546                    ; file8[index] := 0
5547                    ;info   810, 750
5548                    ; index_fsr_first
5549 02ee 0845          movf    reset__index,w
5550 02ef 3e25          addlw   file8
5551 02f0 0084          movwf   __fsr
5552 02f1 1383          bcf     __irp___byte, __irp___bit
5553 02f2 0180          clrf    __indf
5554                    ; line_number = 811
5555                    ;  index := index + 1
5556                    ;info   811, 755
5557 02f3 0ac5          incf    reset__index,f
5558 02f4 2aea          goto    reset__2
5559   02f5 :   reset__3:
5560                    ; Recombine size1 = 0 || size2 = 0
5561                    ; line_number = 809
5562                    ;  while index < file8_size done
5563                    ; line_number = 812
5564                    ; call configure_update()
5565                    ;info   812, 757
5566 02f5 2567          call    configure_update
5567                    ; line_number = 813
5568                    ;  deadband := 5
5569                    ;info   813, 758
5570 02f6 3005          movlw   5
5571 02f7 00a9          movwf   deadband
5572                    ; line_number = 814
5573                    ;  minimum := 0
5574                    ;info   814, 760
5575 02f8 01aa          clrf    minimum
5576                    ; line_number = 815
5577                    ;  maximum := 60
5578                    ;info   815, 761
5579 02f9 303c          movlw   60
5580 02fa 00ab          movwf   maximum
5581                    ; line_number = 816
5582                    ;  error_sum := 0.0
5583                    ;info   816, 763
5584                    ; error_sum := 0 (00 00 00 00)
5585 02fb 1683          bsf     __rp0___byte, __rp0___bit
5586 02fc 01e8          clrf    error_sum
5587 02fd 01e9          clrf    error_sum+1
5588 02fe 01ea          clrf    error_sum+2
5589 02ff 01eb          clrf    error_sum+3
5590            
5591                    ; # Initialize {file24}:
5592                    ; line_number = 819
5593                    ;  index := 0
5594                    ;info   819, 768
5595 0300 1283          bcf     __rp0___byte, __rp0___bit
5596 0301 01c5          clrf    reset__index
5597                    ; line_number = 820
5598                    ;  while index < file24_size start
5599   0302 :   reset__4:
5600                    ;info   820, 770
5601 0302 300a          movlw   10
5602 0303 0245          subwf   reset__index,w
5603                    ; =>bit_code_emit@symbol(): sym=__c
5604                    ; No 1TEST: true.size=0 false.size=17
5605                    ; No 2TEST: true.size=0 false.size=17
5606                    ; 1GOTO: Single test with GOTO
5607 0304 1803          btfsc   __c___byte, __c___bit
5608 0305 2b17          goto    reset__5
5609                    ; line_number = 821
5610                    ; highs[index] := 0
5611                    ;info   821, 774
5612                    ; index_fsr_first
5613 0306 0845          movf    reset__index,w
5614 0307 3e20          addlw   highs
5615 0308 0084          movwf   __fsr
5616 0309 1783          bsf     __irp___byte, __irp___bit
5617 030a 0180          clrf    __indf
5618                    ; line_number = 822
5619                    ;  middles[index] := 0
5620                    ;info   822, 779
5621                    ; index_fsr_first
5622 030b 0845          movf    reset__index,w
5623 030c 3e2a          addlw   middles
5624 030d 0084          movwf   __fsr
5625 030e 1783          bsf     __irp___byte, __irp___bit
5626 030f 0180          clrf    __indf
5627                    ; line_number = 823
5628                    ;  lows[index] := 0
5629                    ;info   823, 784
5630                    ; index_fsr_first
5631 0310 0845          movf    reset__index,w
5632 0311 3e34          addlw   lows
5633 0312 0084          movwf   __fsr
5634 0313 1783          bsf     __irp___byte, __irp___bit
5635 0314 0180          clrf    __indf
5636                    ; line_number = 824
5637                    ;  index := index + 1
5638                    ;info   824, 789
5639 0315 0ac5          incf    reset__index,f
5640 0316 2b02          goto    reset__4
5641   0317 :   reset__5:
5642                    ; Recombine size1 = 0 || size2 = 0
5643                    ; line_number = 820
5644                    ;  while index < file24_size done
5645                    ; line_number = 825
5646                    ; file24_index := 0
5647                    ;info   825, 791
5648 0317 01ac          clrf    file24_index
5649                    ; line_number = 826
5650                    ;  file24_changed := 0
5651                    ;info   826, 792
5652 0318 01a0          clrf    file24_changed
5653                    ; line_number = 827
5654                    ;  file24_zero := 0	
5655                    ;info   827, 793
5656 0319 01a1          clrf    file24_zero
5657            
5658                    ; # For now force divisor to -1:
5659                    ; line_number = 830
5660                    ;  highs[divisor_index] := 0xff
5661                    ;info   830, 794
5662 031a 30ff          movlw   255
5663 031b 1703          bsf     __rp1___byte, __rp1___bit
5664 031c 00a2          movwf   highs+2
5665                    ; line_number = 831
5666                    ;  middles[divisor_index] := 0xff
5667                    ;info   831, 797
5668 031d 30ff          movlw   255
5669 031e 00ac          movwf   middles+2
5670                    ; line_number = 832
5671                    ;  lows[divisor_index] := 0xff
5672                    ;info   832, 799
5673 031f 30ff          movlw   255
5674 0320 00b6          movwf   lows+2
5675            
5676                    ; # Force the an update of {divisor}:
5677                    ; line_number = 835
5678                    ;  file24_changed@divisor_index := _true
5679                    ;info   835, 801
5680 00000020 = reset__select__6___byte equ file24_changed
5681 00000002 = reset__select__6___bit equ 2
5682 0321 1303          bcf     __rp1___byte, __rp1___bit
5683 0322 1520          bsf     reset__select__6___byte, reset__select__6___bit
5684            
5685                    ; # For now kp = 20:
5686                    ; line_number = 838
5687                    ;  lows[kp_index] := 1
5688                    ;info   838, 803
5689 0323 3001          movlw   1
5690 0324 1703          bsf     __rp1___byte, __rp1___bit
5691 0325 00b7          movwf   lows+3
5692            
5693                    ; # No need to manually force a {kp} update, since updating {divisor} does
5694                    ; # that already:
5695            
5696                    ; # We only turn on target seeking when the {target} is changed.
5697                    ; # It gets turned off when find the target (or a limit switch is hit):
5698                    ; line_number = 845
5699                    ;  target_seek := _false
5700                    ;info   845, 806
5701 0326 1303          bcf     __rp1___byte, __rp1___bit
5702 0327 10ef          bcf     target_seek___byte, target_seek___bit
5703            
5704                    ; # It does not really matter, but setting {target} to 0.0 does not hurt:
5705                    ; line_number = 848
5706                    ;  target := 0.0
5707                    ;info   848, 808
5708                    ; target := 0 (00 00 00 00)
5709 0328 1703          bsf     __rp1___byte, __rp1___bit
5710 0329 01c8          clrf    target
5711 032a 01c9          clrf    target+1
5712 032b 01ca          clrf    target+2
5713 032c 01cb          clrf    target+3
5714            
5715                    ; # Always initialize {quad_state} even if we do not use quadrature:
5716                    ; line_number = 851
5717                    ;  quad_state := 0
5718                    ;info   851, 813
5719 032d 01be          clrf    quad_state
5720            
5721                    ; # The weak pull-ups can be turned off:
5722                    ; line_number = 854
5723                    ;  _wpua := 0
5724                    ;info   854, 814
5725 032e 1683          bsf     __rp0___byte, __rp0___bit
5726 032f 1303          bcf     __rp1___byte, __rp1___bit
5727 0330 0195          clrf    _wpua
5728            
5729                    ; # We are only interested in changes in the A and B channels:
5730                    ; line_number = 857
5731                    ;  _ioca := quad_a_mask | quad_b_mask
5732                    ;info   857, 817
5733 0331 3003          movlw   3
5734 0332 0096          movwf   _ioca
5735            
5736                    ; # We only want to turn on the interrupt on change if we are using
5737                    ; # the quadrature (i.e. !{use_potentiometer}:
5738                    ; line_number = 861
5739                    ;  _raie := !use_potentiometer
5740                    ;info   861, 819
5741 0333 118b          bcf     _raie___byte, _raie___bit
5742                    ; =>bit_code_emit@symbol(): sym=use_potentiometer
5743                    ; 1TEST: Single test with code in skip slot
5744 0334 1283          bcf     __rp0___byte, __rp0___bit
5745 0335 1d25          btfss   use_potentiometer___byte, use_potentiometer___bit
5746 0336 158b          bsf     _raie___byte, _raie___bit
5747                    ; Recombine size1 = 0 || size2 = 0
5748            
5749                    ; # Enable the appropriate interrupts:
5750                    ; line_number = 864
5751                    ;  _t0if := _false
5752                    ;info   864, 823
5753 0337 110b          bcf     _t0if___byte, _t0if___bit
5754                    ; line_number = 865
5755                    ;  _t0ie := _true
5756                    ;info   865, 824
5757 0338 168b          bsf     _t0ie___byte, _t0ie___bit
5758                    ; line_number = 866
5759                    ;  _tmr1if := _false
5760                    ;info   866, 825
5761 0339 100c          bcf     _tmr1if___byte, _tmr1if___bit
5762                    ; line_number = 867
5763                    ;  _tmr1ie := _true
5764                    ;info   867, 826
5765 033a 1683          bsf     __rp0___byte, __rp0___bit
5766 033b 140c          bsf     _tmr1ie___byte, _tmr1ie___bit
5767                    ; line_number = 868
5768                    ;  _peie := _true
5769                    ;info   868, 828
5770 033c 170b          bsf     _peie___byte, _peie___bit
5771                    ; line_number = 869
5772                    ;  _gie := _true
5773                    ;info   869, 829
5774 033d 178b          bsf     _gie___byte, _gie___bit
5775            
5776            
5777                    ; delay after procedure statements=non-uniform
5778 033e 1283          bcf     __rp0___byte, __rp0___bit
5779                    ; Implied return
5780 033f 3400          retlw   0
5781            
5782            
5783            
5784            
5785                    ; line_number = 872
5786                    ;info   872, 832
5787                    ; procedure uart_manage
5788   0340 :   uart_manage:
5789                    ; arguments_none
5790                    ; line_number = 874
5791                    ;  returns_nothing
5792            
5793                    ; line_number = 876
5794                    ;  local command byte
5795 00000046 = uart_manage__command equ globals___0+38
5796                    ; line_number = 877
5797                    ;  local index byte
5798 00000047 = uart_manage__index equ globals___0+39
5799                    ; line_number = 878
5800                    ;  local allow bit
5801 0000006f = uart_manage__allow___byte equ globals___0+79
5802 00000005 = uart_manage__allow___bit equ 5
5803            
5804                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
5805                    ; line_number = 880
5806                    ;  if uart_input_count != 0 start
5807                    ;info   880, 832
5808                    ; Left minus Right
5809 0340 0838          movf    uart_input_count,w
5810                    ; =>bit_code_emit@symbol(): sym=__z
5811                    ; No 1TEST: true.size=0 false.size=464
5812                    ; No 2TEST: true.size=0 false.size=464
5813                    ; 1GOTO: Single test with GOTO
5814 0341 1903          btfsc   __z___byte, __z___bit
5815 0342 2d13          goto    uart_manage__75
5816                    ; # We have a data/command byte to process:
5817                    ; line_number = 882
5818                    ;  command := uart_input[uart_input_out_index & uart_input_mask]
5819                    ;info   882, 835
5820 0343 3003          movlw   3
5821 0344 0537          andwf   uart_input_out_index,w
5822 0345 3e32          addlw   uart_input
5823 0346 0084          movwf   __fsr
5824 0347 1383          bcf     __irp___byte, __irp___bit
5825 0348 0800          movf    __indf,w
5826 0349 00c6          movwf   uart_manage__command
5827                    ; line_number = 883
5828                    ;  uart_input_out_index := uart_input_out_index + 1
5829                    ;info   883, 842
5830 034a 0ab7          incf    uart_input_out_index,f
5831            
5832                    ; # Manage {uart_input_count} and {uart_input_pending} atomically:
5833                    ; line_number = 886
5834                    ;  _gie := _false
5835                    ;info   886, 843
5836 034b 138b          bcf     _gie___byte, _gie___bit
5837                    ; line_number = 887
5838                    ;  uart_input_count := uart_input_count - 1
5839                    ;info   887, 844
5840 034c 03b8          decf    uart_input_count,f
5841                    ; line_number = 888
5842                    ;  if uart_input_count = 0 start
5843                    ;info   888, 845
5844                    ; Left minus Right
5845 034d 0838          movf    uart_input_count,w
5846                    ; =>bit_code_emit@symbol(): sym=__z
5847                    ; 1TEST: Single test with code in skip slot
5848 034e 1903          btfsc   __z___byte, __z___bit
5849                    ; line_number = 889
5850                    ; uart_input_pending := _false
5851                    ;info   889, 847
5852 034f 106f          bcf     uart_input_pending___byte, uart_input_pending___bit
5853                    ; Recombine size1 = 0 || size2 = 0
5854                    ; line_number = 888
5855                    ;  if uart_input_count = 0 done
5856                    ; line_number = 890
5857                    ; _gie := _true
5858                    ;info   890, 848
5859 0350 178b          bsf     _gie___byte, _gie___bit
5860            
5861                    ; # We received a "data" byte"
5862                    ; line_number = 893
5863                    ;  switch state start
5864                    ;info   893, 849
5865                    ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=14
5866 0351 3003          movlw   uart_manage__73>>8
5867 0352 008a          movwf   __pclath
5868 0353 0830          movf    state,w
5869                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
5870 0354 3e56          addlw   uart_manage__73
5871 0355 0082          movwf   __pcl
5872                    ; page_group 20
5873   0356 :   uart_manage__73:
5874 0356 2b6a          goto    uart_manage__55
5875 0357 2b6b          goto    uart_manage__56
5876 0358 2b6e          goto    uart_manage__57
5877 0359 2c67          goto    uart_manage__58
5878 035a 2c70          goto    uart_manage__59
5879 035b 2c79          goto    uart_manage__60
5880 035c 2c7e          goto    uart_manage__61
5881 035d 2c83          goto    uart_manage__62
5882 035e 2c99          goto    uart_manage__63
5883 035f 2ca3          goto    uart_manage__64
5884 0360 2cad          goto    uart_manage__65
5885 0361 2cb7          goto    uart_manage__66
5886 0362 2d13          goto    uart_manage__74
5887 0363 2d13          goto    uart_manage__74
5888 0364 2ced          goto    uart_manage__67
5889 0365 2cf0          goto    uart_manage__68
5890 0366 2cf7          goto    uart_manage__69
5891 0367 2cfa          goto    uart_manage__70
5892 0368 2d0a          goto    uart_manage__71
5893 0369 2d0f          goto    uart_manage__72
5894                    ; line_number = 894
5895                    ; case 0
5896   036a :   uart_manage__55:
5897                    ; # Technically we should not get here because {_adden} should
5898                    ; # be {_true}, but just in case we do, we just ignore the byte:
5899                    ; line_number = 897
5900                    ;  do_nothing
5901                    ;info   897, 874
5902 036a 2d13          goto    uart_manage__74
5903                    ; line_number = 898
5904                    ; case 1
5905   036b :   uart_manage__56:
5906                    ; # Ignore the echo before processing a command byte:
5907                    ; line_number = 900
5908                    ;  state := state_command
5909                    ;info   900, 875
5910 036b 3002          movlw   2
5911 036c 00b0          movwf   state
5912 036d 2d13          goto    uart_manage__74
5913                    ; line_number = 901
5914                    ; case 2
5915   036e :   uart_manage__57:
5916                    ; # Process a command byte:
5917                    ; line_number = 903
5918                    ;  switch command >> 6 start
5919                    ;info   903, 878
5920                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
5921 036e 3003          movlw   uart_manage__39>>8
5922 036f 008a          movwf   __pclath
5923 00000066 = uart_manage__40 equ globals___0+70
5924 0370 0e46          swapf   uart_manage__command,w
5925 0371 00e6          movwf   uart_manage__40
5926 0372 0ce6          rrf     uart_manage__40,f
5927 0373 0c66          rrf     uart_manage__40,w
5928 0374 3903          andlw   3
5929                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
5930 0375 3e77          addlw   uart_manage__39
5931 0376 0082          movwf   __pcl
5932                    ; page_group 4
5933   0377 :   uart_manage__39:
5934 0377 2b7b          goto    uart_manage__37
5935 0378 2c66          goto    uart_manage__41
5936 0379 2c66          goto    uart_manage__41
5937 037a 2c33          goto    uart_manage__38
5938                    ; line_number = 904
5939                    ; case 0
5940   037b :   uart_manage__37:
5941                    ; # 00xx xxxx:
5942                    ; line_number = 906
5943                    ;  switch (command >> 3) & 7 start
5944                    ;info   906, 891
5945                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
5946                    ; line_number = 975
5947                    ; case_maximum 7
5948 037b 3003          movlw   uart_manage__24>>8
5949 037c 008a          movwf   __pclath
5950 00000066 = uart_manage__25 equ globals___0+70
5951 037d 0c46          rrf     uart_manage__command,w
5952 037e 00e6          movwf   uart_manage__25
5953 037f 0ce6          rrf     uart_manage__25,f
5954 0380 0c66          rrf     uart_manage__25,w
5955 0381 3907          andlw   7
5956                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
5957 0382 3e84          addlw   uart_manage__24
5958 0383 0082          movwf   __pcl
5959                    ; page_group 8
5960   0384 :   uart_manage__24:
5961 0384 2b8c          goto    uart_manage__19
5962 0385 2bca          goto    uart_manage__20
5963 0386 2bd4          goto    uart_manage__21
5964 0387 2be4          goto    uart_manage__22
5965 0388 2bea          goto    uart_manage__23
5966 0389 2c32          goto    uart_manage__26
5967 038a 2c32          goto    uart_manage__26
5968 038b 2c32          goto    uart_manage__26
5969                    ; line_number = 907
5970                    ; case 0
5971   038c :   uart_manage__19:
5972                    ; # 0000 0xxx:
5973                    ; line_number = 909
5974                    ;  switch command & 7 start
5975                    ;info   909, 908
5976                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
5977 038c 3003          movlw   uart_manage__9>>8
5978 038d 008a          movwf   __pclath
5979 038e 3007          movlw   7
5980 038f 0546          andwf   uart_manage__command,w
5981                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
5982 0390 3e92          addlw   uart_manage__9
5983 0391 0082          movwf   __pcl
5984                    ; page_group 8
5985   0392 :   uart_manage__9:
5986 0392 2b9a          goto    uart_manage__1
5987 0393 2ba3          goto    uart_manage__2
5988 0394 2bac          goto    uart_manage__3
5989 0395 2bb5          goto    uart_manage__4
5990 0396 2bbe          goto    uart_manage__5
5991 0397 2bc1          goto    uart_manage__6
5992 0398 2bc4          goto    uart_manage__7
5993 0399 2bc7          goto    uart_manage__8
5994                    ; line_number = 910
5995                    ; case 0
5996   039a :   uart_manage__1:
5997                    ; # 0000 0000 (Value All Get):
5998                    ; line_number = 912
5999                    ;  call uart_byte_put(highs[file24_index])
6000                    ;info   912, 922
6001 039a 082c          movf    file24_index,w
6002 039b 3e20          addlw   highs
6003 039c 0084          movwf   __fsr
6004 039d 1783          bsf     __irp___byte, __irp___bit
6005 039e 0800          movf    __indf,w
6006 039f 258e          call    uart_byte_put
6007                    ; line_number = 913
6008                    ;  state := state_file24_full_get1
6009                    ;info   913, 928
6010 03a0 3003          movlw   3
6011 03a1 00b0          movwf   state
6012 03a2 2bc9          goto    uart_manage__10
6013                    ; line_number = 914
6014                    ; case 1
6015   03a3 :   uart_manage__2:
6016                    ; # 0000 0001 (Value Low Get):
6017                    ; line_number = 916
6018                    ;  call uart_byte_put(lows[file24_index])
6019                    ;info   916, 931
6020 03a3 082c          movf    file24_index,w
6021 03a4 3e34          addlw   lows
6022 03a5 0084          movwf   __fsr
6023 03a6 1783          bsf     __irp___byte, __irp___bit
6024 03a7 0800          movf    __indf,w
6025 03a8 258e          call    uart_byte_put
6026                    ; line_number = 917
6027                    ;  state := state_echo_then_command
6028                    ;info   917, 937
6029 03a9 3001          movlw   1
6030 03aa 00b0          movwf   state
6031 03ab 2bc9          goto    uart_manage__10
6032                    ; line_number = 918
6033                    ; case 2
6034   03ac :   uart_manage__3:
6035                    ; # 0000 0010 (Value Middle Get):
6036                    ; line_number = 920
6037                    ;  call uart_byte_put(middles[file24_index])
6038                    ;info   920, 940
6039 03ac 082c          movf    file24_index,w
6040 03ad 3e2a          addlw   middles
6041 03ae 0084          movwf   __fsr
6042 03af 1783          bsf     __irp___byte, __irp___bit
6043 03b0 0800          movf    __indf,w
6044 03b1 258e          call    uart_byte_put
6045                    ; line_number = 921
6046                    ;  state := state_echo_then_command
6047                    ;info   921, 946
6048 03b2 3001          movlw   1
6049 03b3 00b0          movwf   state
6050 03b4 2bc9          goto    uart_manage__10
6051                    ; line_number = 922
6052                    ; case 3
6053   03b5 :   uart_manage__4:
6054                    ; # 0000 0011 (Value High Get):
6055                    ; line_number = 924
6056                    ;  call uart_byte_put(highs[file24_index])
6057                    ;info   924, 949
6058 03b5 082c          movf    file24_index,w
6059 03b6 3e20          addlw   highs
6060 03b7 0084          movwf   __fsr
6061 03b8 1783          bsf     __irp___byte, __irp___bit
6062 03b9 0800          movf    __indf,w
6063 03ba 258e          call    uart_byte_put
6064                    ; line_number = 925
6065                    ;  state := state_echo_then_command
6066                    ;info   925, 955
6067 03bb 3001          movlw   1
6068 03bc 00b0          movwf   state
6069 03bd 2bc9          goto    uart_manage__10
6070                    ; line_number = 926
6071                    ; case 4
6072   03be :   uart_manage__5:
6073                    ; # 0000 0100 (Value All Set):
6074                    ; line_number = 928
6075                    ;  state := state_file24_full_set1
6076                    ;info   928, 958
6077 03be 3005          movlw   5
6078 03bf 00b0          movwf   state
6079 03c0 2bc9          goto    uart_manage__10
6080                    ; line_number = 929
6081                    ; case 5
6082   03c1 :   uart_manage__6:
6083                    ; # 0000 0101 (Value Low Set):
6084                    ; line_number = 931
6085                    ;  state := state_value_low_set1
6086                    ;info   931, 961
6087 03c1 3008          movlw   8
6088 03c2 00b0          movwf   state
6089 03c3 2bc9          goto    uart_manage__10
6090                    ; line_number = 932
6091                    ; case 6
6092   03c4 :   uart_manage__7:
6093                    ; # 0000 0110 (Value Middle Set):
6094                    ; line_number = 934
6095                    ;  state := state_value_middle_set1
6096                    ;info   934, 964
6097 03c4 3009          movlw   9
6098 03c5 00b0          movwf   state
6099 03c6 2bc9          goto    uart_manage__10
6100                    ; line_number = 935
6101                    ; case 7
6102   03c7 :   uart_manage__8:
6103                    ; # 0000 0111 (Value High Set):
6104                    ; line_number = 937
6105                    ;  state := state_value_high_set1
6106                    ;info   937, 967
6107 03c7 300a          movlw   10
6108 03c8 00b0          movwf   state
6109   03c9 :   uart_manage__10:
6110                    ; line_number = 909
6111                    ;  switch command & 7 done
6112 03c9 2c32          goto    uart_manage__26
6113                    ; line_number = 938
6114                    ; case 1
6115   03ca :   uart_manage__20:
6116                    ; # 0000 1sss (Value Index Set):
6117                    ; line_number = 940
6118                    ;  file24_index := command & 7
6119                    ;info   940, 970
6120 03ca 3007          movlw   7
6121 03cb 0546          andwf   uart_manage__command,w
6122 03cc 00ac          movwf   file24_index
6123                    ; # Make sure we stay in bounds:
6124                    ; line_number = 942
6125                    ;  if file24_index >= file24_size start
6126                    ;info   942, 973
6127 03cd 300a          movlw   10
6128 03ce 022c          subwf   file24_index,w
6129                    ; =>bit_code_emit@symbol(): sym=__c
6130                    ; 1TEST: Single test with code in skip slot
6131 03cf 1803          btfsc   __c___byte, __c___bit
6132                    ; line_number = 943
6133                    ; file24_index := 0
6134                    ;info   943, 976
6135 03d0 01ac          clrf    file24_index
6136                    ; Recombine size1 = 0 || size2 = 0
6137                    ; line_number = 942
6138                    ;  if file24_index >= file24_size done
6139                    ; line_number = 944
6140                    ; state := state_command
6141                    ;info   944, 977
6142 03d1 3002          movlw   2
6143 03d2 00b0          movwf   state
6144 03d3 2c32          goto    uart_manage__26
6145                    ; line_number = 945
6146                    ; case 2
6147   03d4 :   uart_manage__21:
6148                    ; # 0001 0xxx (Byte Get):
6149                    ; line_number = 947
6150                    ;  index := command & 7
6151                    ;info   947, 980
6152 03d4 3007          movlw   7
6153 03d5 0546          andwf   uart_manage__command,w
6154 03d6 00c7          movwf   uart_manage__index
6155                    ; line_number = 948
6156                    ;  if index = 2 start
6157                    ;info   948, 983
6158                    ; Left minus Right
6159 03d7 30fe          movlw   254
6160 03d8 0747          addwf   uart_manage__index,w
6161                    ; =>bit_code_emit@symbol(): sym=__z
6162                    ; 1TEST: Single test with code in skip slot
6163 03d9 1903          btfsc   __z___byte, __z___bit
6164                    ; # 0001 0010: (Status_Get):
6165                    ; line_number = 950
6166                    ;  call status_update()
6167                    ;info   950, 986
6168 03da 255d          call    status_update
6169                    ; Recombine size1 = 0 || size2 = 0
6170                    ; line_number = 948
6171                    ;  if index = 2 done
6172                    ; line_number = 951
6173                    ; call uart_byte_put(file8[index])
6174                    ;info   951, 987
6175 03db 0847          movf    uart_manage__index,w
6176 03dc 3e25          addlw   file8
6177 03dd 0084          movwf   __fsr
6178 03de 1383          bcf     __irp___byte, __irp___bit
6179 03df 0800          movf    __indf,w
6180 03e0 258e          call    uart_byte_put
6181                    ; line_number = 952
6182                    ;  state := state_echo_then_command
6183                    ;info   952, 993
6184 03e1 3001          movlw   1
6185 03e2 00b0          movwf   state
6186 03e3 2c32          goto    uart_manage__26
6187                    ; line_number = 953
6188                    ; case 3
6189   03e4 :   uart_manage__22:
6190                    ; # 0001 1xxx (Byte Set):
6191                    ; line_number = 955
6192                    ;  index := command & 7
6193                    ;info   955, 996
6194 03e4 3007          movlw   7
6195 03e5 0546          andwf   uart_manage__command,w
6196 03e6 00c7          movwf   uart_manage__index
6197                    ; line_number = 956
6198                    ;  state := state_file8_set1
6199                    ;info   956, 999
6200 03e7 300b          movlw   11
6201 03e8 00b0          movwf   state
6202 03e9 2c32          goto    uart_manage__26
6203                    ; line_number = 957
6204                    ; case 4
6205   03ea :   uart_manage__23:
6206                    ; # 0010 0xxx (Probe Get):
6207                    ; line_number = 959
6208                    ;  switch command & 7 start
6209                    ;info   959, 1002
6210                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
6211                    ; line_number = 972
6212                    ; case_maximum 7
6213 03ea 3003          movlw   uart_manage__17>>8
6214 03eb 008a          movwf   __pclath
6215 03ec 3007          movlw   7
6216 03ed 0546          andwf   uart_manage__command,w
6217                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
6218                    ; All case bodies prefer this bit set
6219 03ee 1683          bsf     __rp0___byte, __rp0___bit
6220 03ef 3ef1          addlw   uart_manage__17
6221 03f0 0082          movwf   __pcl
6222                    ; page_group 8
6223   03f1 :   uart_manage__17:
6224 03f1 2bf9          goto    uart_manage__11
6225 03f2 2c02          goto    uart_manage__12
6226 03f3 2c0b          goto    uart_manage__13
6227 03f4 2c14          goto    uart_manage__14
6228 03f5 2c1d          goto    uart_manage__15
6229 03f6 2c26          goto    uart_manage__16
6230 03f7 2c2e          goto    uart_manage__18
6231 03f8 2c2e          goto    uart_manage__18
6232                    ; line_number = 960
6233                    ; case 0
6234   03f9 :   uart_manage__11:
6235 03f9 158a          bsf     __cb0___byte, __cb0___bit
6236                    ; line_number = 961
6237                    ; call zyx(position)
6238                    ;info   961, 1018
6239 03fa 30a2          movlw   position>>1
6240 03fb 22d8          call    _float32_pointer_load
6241 03fc 302e          movlw   zyx__value>>1
6242 03fd 2337          call    _float32_pointer_store
6243 03fe 118a          bcf     __cb0___byte, __cb0___bit
6244 03ff 1283          bcf     __rp0___byte, __rp0___bit
6245 0400 2618          call    zyx
6246 0401 2c2e          goto    uart_manage__18
6247                    ; line_number = 962
6248                    ; case 1
6249   0402 :   uart_manage__12:
6250 0402 158a          bsf     __cb0___byte, __cb0___bit
6251                    ; line_number = 963
6252                    ; call zyx(target)
6253                    ;info   963, 1027
6254 0403 30a4          movlw   target>>1
6255 0404 22d8          call    _float32_pointer_load
6256 0405 302e          movlw   zyx__value>>1
6257 0406 2337          call    _float32_pointer_store
6258 0407 118a          bcf     __cb0___byte, __cb0___bit
6259 0408 1283          bcf     __rp0___byte, __rp0___bit
6260 0409 2618          call    zyx
6261 040a 2c2e          goto    uart_manage__18
6262                    ; line_number = 964
6263                    ; case 2
6264   040b :   uart_manage__13:
6265 040b 158a          bsf     __cb0___byte, __cb0___bit
6266                    ; line_number = 965
6267                    ; call zyx(error)
6268                    ;info   965, 1036
6269 040c 30a0          movlw   error>>1
6270 040d 22d8          call    _float32_pointer_load
6271 040e 302e          movlw   zyx__value>>1
6272 040f 2337          call    _float32_pointer_store
6273 0410 118a          bcf     __cb0___byte, __cb0___bit
6274 0411 1283          bcf     __rp0___byte, __rp0___bit
6275 0412 2618          call    zyx
6276 0413 2c2e          goto    uart_manage__18
6277                    ; line_number = 966
6278                    ; case 3
6279   0414 :   uart_manage__14:
6280 0414 158a          bsf     __cb0___byte, __cb0___bit
6281                    ; line_number = 967
6282                    ; call zyx(pid)
6283                    ;info   967, 1045
6284 0415 306c          movlw   pid>>1
6285 0416 22d8          call    _float32_pointer_load
6286 0417 302e          movlw   zyx__value>>1
6287 0418 2337          call    _float32_pointer_store
6288 0419 118a          bcf     __cb0___byte, __cb0___bit
6289 041a 1283          bcf     __rp0___byte, __rp0___bit
6290 041b 2618          call    zyx
6291 041c 2c2e          goto    uart_manage__18
6292                    ; line_number = 968
6293                    ; case 4
6294   041d :   uart_manage__15:
6295 041d 158a          bsf     __cb0___byte, __cb0___bit
6296                    ; line_number = 969
6297                    ; call zyx(divisor)
6298                    ;info   969, 1054
6299 041e 306e          movlw   divisor>>1
6300 041f 22d8          call    _float32_pointer_load
6301 0420 302e          movlw   zyx__value>>1
6302 0421 2337          call    _float32_pointer_store
6303 0422 118a          bcf     __cb0___byte, __cb0___bit
6304 0423 1283          bcf     __rp0___byte, __rp0___bit
6305 0424 2618          call    zyx
6306 0425 2c2e          goto    uart_manage__18
6307                    ; line_number = 970
6308                    ; case 5
6309   0426 :   uart_manage__16:
6310 0426 158a          bsf     __cb0___byte, __cb0___bit
6311                    ; line_number = 971
6312                    ; call zyx(kp)
6313                    ;info   971, 1063
6314 0427 30a6          movlw   kp>>1
6315 0428 22d8          call    _float32_pointer_load
6316 0429 302e          movlw   zyx__value>>1
6317 042a 2337          call    _float32_pointer_store
6318 042b 118a          bcf     __cb0___byte, __cb0___bit
6319 042c 1283          bcf     __rp0___byte, __rp0___bit
6320 042d 2618          call    zyx
6321   042e :   uart_manage__18:
6322                    ; line_number = 959
6323                    ;  switch command & 7 done
6324                    ; line_number = 973
6325                    ; call uart_byte_put(high)
6326                    ;info   973, 1070
6327 042e 0822          movf    high,w
6328 042f 258e          call    uart_byte_put
6329                    ; line_number = 974
6330                    ;  state := state_probe_get1
6331                    ;info   974, 1072
6332 0430 3012          movlw   18
6333 0431 00b0          movwf   state
6334   0432 :   uart_manage__26:
6335                    ; line_number = 906
6336                    ;  switch (command >> 3) & 7 done
6337 0432 2c66          goto    uart_manage__41
6338                    ; line_number = 976
6339                    ; case 3
6340   0433 :   uart_manage__38:
6341                    ; # 11xx xxxx:
6342                    ; line_number = 978
6343                    ;  switch (command >> 3) & 7 start
6344                    ;info   978, 1075
6345                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
6346 0433 3004          movlw   uart_manage__34>>8
6347 0434 008a          movwf   __pclath
6348 00000066 = uart_manage__35 equ globals___0+70
6349 0435 0c46          rrf     uart_manage__command,w
6350 0436 00e6          movwf   uart_manage__35
6351 0437 0ce6          rrf     uart_manage__35,f
6352 0438 0c66          rrf     uart_manage__35,w
6353 0439 3907          andlw   7
6354                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
6355 043a 3e3c          addlw   uart_manage__34
6356 043b 0082          movwf   __pcl
6357                    ; page_group 8
6358   043c :   uart_manage__34:
6359 043c 2c66          goto    uart_manage__36
6360 043d 2c66          goto    uart_manage__36
6361 043e 2c66          goto    uart_manage__36
6362 043f 2c66          goto    uart_manage__36
6363 0440 2c66          goto    uart_manage__36
6364 0441 2c66          goto    uart_manage__36
6365 0442 2c66          goto    uart_manage__36
6366 0443 2c44          goto    uart_manage__33
6367                    ; line_number = 979
6368                    ; case 7
6369   0444 :   uart_manage__33:
6370                    ; # 1111 1xxx:
6371                    ; line_number = 981
6372                    ;  switch command & 7 start
6373                    ;info   981, 1092
6374                    ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
6375 0444 3004          movlw   uart_manage__31>>8
6376 0445 008a          movwf   __pclath
6377 0446 3007          movlw   7
6378 0447 0546          andwf   uart_manage__command,w
6379                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
6380 0448 3e4a          addlw   uart_manage__31
6381 0449 0082          movwf   __pcl
6382                    ; page_group 8
6383   044a :   uart_manage__31:
6384 044a 2c66          goto    uart_manage__32
6385 044b 2c66          goto    uart_manage__32
6386 044c 2c66          goto    uart_manage__32
6387 044d 2c66          goto    uart_manage__32
6388 044e 2c52          goto    uart_manage__27
6389 044f 2c57          goto    uart_manage__28
6390 0450 2c62          goto    uart_manage__29
6391 0451 2c64          goto    uart_manage__30
6392                    ; line_number = 982
6393                    ; case 4
6394   0452 :   uart_manage__27:
6395                    ; # 1111 1100 (Address Set):
6396                    ; line_number = 984
6397                    ;  call uart_byte_put(address)
6398                    ;info   984, 1106
6399 0452 0839          movf    address,w
6400 0453 258e          call    uart_byte_put
6401                    ; line_number = 985
6402                    ;  state := state_address_set1
6403                    ;info   985, 1108
6404 0454 300e          movlw   14
6405 0455 00b0          movwf   state
6406 0456 2c66          goto    uart_manage__32
6407                    ; line_number = 986
6408                    ; case 5
6409   0457 :   uart_manage__28:
6410                    ; # 1111 1101 (Id_Next):
6411                    ; line_number = 988
6412                    ;  call uart_byte_put(id[id_index])
6413                    ;info   988, 1111
6414 0457 0831          movf    id_index,w
6415 0458 2638          call    id
6416 0459 258e          call    uart_byte_put
6417                    ; line_number = 989
6418                    ;  id_index := id_index + 1
6419                    ;info   989, 1114
6420 045a 0ab1          incf    id_index,f
6421                    ; line_number = 990
6422                    ;  if id_index >= id.size start
6423                    ;info   990, 1115
6424 045b 301c          movlw   28
6425 045c 0231          subwf   id_index,w
6426                    ; =>bit_code_emit@symbol(): sym=__c
6427                    ; 1TEST: Single test with code in skip slot
6428 045d 1803          btfsc   __c___byte, __c___bit
6429                    ; line_number = 991
6430                    ; id_index := id_index - 1
6431                    ;info   991, 1118
6432 045e 03b1          decf    id_index,f
6433                    ; Recombine size1 = 0 || size2 = 0
6434                    ; line_number = 990
6435                    ;  if id_index >= id.size done
6436                    ; line_number = 992
6437                    ; state := state_echo_then_command
6438                    ;info   992, 1119
6439 045f 3001          movlw   1
6440 0460 00b0          movwf   state
6441 0461 2c66          goto    uart_manage__32
6442                    ; line_number = 993
6443                    ; case 6
6444   0462 :   uart_manage__29:
6445                    ; # 1111 1110 (Id_Start):
6446                    ; line_number = 995
6447                    ;  id_index := 0
6448                    ;info   995, 1122
6449 0462 01b1          clrf    id_index
6450 0463 2c66          goto    uart_manage__32
6451                    ; line_number = 996
6452                    ; case 7
6453   0464 :   uart_manage__30:
6454                    ; # 1111 1111 (Deselect):
6455                    ; line_number = 998
6456                    ;  _adden := _true
6457                    ;info   998, 1124
6458 0464 1597          bsf     _adden___byte, _adden___bit
6459                    ; line_number = 999
6460                    ;  state := state_select_wait
6461                    ;info   999, 1125
6462 0465 01b0          clrf    state
6463   0466 :   uart_manage__32:
6464                    ; line_number = 981
6465                    ;  switch command & 7 done
6466   0466 :   uart_manage__36:
6467                    ; line_number = 978
6468                    ;  switch (command >> 3) & 7 done
6469   0466 :   uart_manage__41:
6470                    ; line_number = 903
6471                    ;  switch command >> 6 done
6472 0466 2d13          goto    uart_manage__74
6473                    ; line_number = 1000
6474                    ; case 3
6475   0467 :   uart_manage__58:
6476                    ; # Value All Get 2nd response byte:
6477                    ; line_number = 1002
6478                    ;  call uart_byte_put(middles[file24_index])
6479                    ;info   1002, 1127
6480 0467 082c          movf    file24_index,w
6481 0468 3e2a          addlw   middles
6482 0469 0084          movwf   __fsr
6483 046a 1783          bsf     __irp___byte, __irp___bit
6484 046b 0800          movf    __indf,w
6485 046c 258e          call    uart_byte_put
6486                    ; line_number = 1003
6487                    ;  state := state_file24_full_get2
6488                    ;info   1003, 1133
6489 046d 3004          movlw   4
6490 046e 00b0          movwf   state
6491 046f 2d13          goto    uart_manage__74
6492                    ; line_number = 1004
6493                    ; case 4
6494   0470 :   uart_manage__59:
6495                    ; # Value All Get 3rd response byte:
6496                    ; line_number = 1006
6497                    ;  call uart_byte_put(lows[file24_index])
6498                    ;info   1006, 1136
6499 0470 082c          movf    file24_index,w
6500 0471 3e34          addlw   lows
6501 0472 0084          movwf   __fsr
6502 0473 1783          bsf     __irp___byte, __irp___bit
6503 0474 0800          movf    __indf,w
6504 0475 258e          call    uart_byte_put
6505                    ; line_number = 1007
6506                    ;  state := state_echo_then_command
6507                    ;info   1007, 1142
6508 0476 3001          movlw   1
6509 0477 00b0          movwf   state
6510 0478 2d13          goto    uart_manage__74
6511                    ; line_number = 1008
6512                    ; case 5
6513   0479 :   uart_manage__60:
6514                    ; # Value All Set 2nd command byte:
6515                    ; line_number = 1010
6516                    ;  high := command
6517                    ;info   1010, 1145
6518 0479 0846          movf    uart_manage__command,w
6519 047a 00a2          movwf   high
6520                    ; line_number = 1011
6521                    ;  state := state_file24_full_set2
6522                    ;info   1011, 1147
6523 047b 3006          movlw   6
6524 047c 00b0          movwf   state
6525 047d 2d13          goto    uart_manage__74
6526                    ; line_number = 1012
6527                    ; case 6
6528   047e :   uart_manage__61:
6529                    ; # Value All Set 3rd command byte:
6530                    ; line_number = 1014
6531                    ;  middle := command
6532                    ;info   1014, 1150
6533 047e 0846          movf    uart_manage__command,w
6534 047f 00a3          movwf   middle
6535                    ; line_number = 1015
6536                    ;  state := state_file24_full_set3
6537                    ;info   1015, 1152
6538 0480 3007          movlw   7
6539 0481 00b0          movwf   state
6540 0482 2d13          goto    uart_manage__74
6541                    ; line_number = 1016
6542                    ; case 7
6543   0483 :   uart_manage__62:
6544                    ; # Value All Set 4th command byte:
6545                    ; line_number = 1018
6546                    ;  highs[file24_index] := high
6547                    ;info   1018, 1155
6548                    ; index_fsr_first
6549 0483 082c          movf    file24_index,w
6550 0484 3e20          addlw   highs
6551 0485 0084          movwf   __fsr
6552 0486 1783          bsf     __irp___byte, __irp___bit
6553 0487 0822          movf    high,w
6554 0488 0080          movwf   __indf
6555                    ; line_number = 1019
6556                    ;  middles[file24_index] := middle
6557                    ;info   1019, 1161
6558                    ; index_fsr_first
6559 0489 082c          movf    file24_index,w
6560 048a 3e2a          addlw   middles
6561 048b 0084          movwf   __fsr
6562 048c 1783          bsf     __irp___byte, __irp___bit
6563 048d 0823          movf    middle,w
6564 048e 0080          movwf   __indf
6565                    ; line_number = 1020
6566                    ;  lows[file24_index] := command
6567                    ;info   1020, 1167
6568                    ; index_fsr_first
6569 048f 082c          movf    file24_index,w
6570 0490 3e34          addlw   lows
6571 0491 0084          movwf   __fsr
6572 0492 1783          bsf     __irp___byte, __irp___bit
6573 0493 0846          movf    uart_manage__command,w
6574 0494 0080          movwf   __indf
6575                    ; line_number = 1021
6576                    ;  call file24_updated()
6577                    ;info   1021, 1173
6578 0495 2514          call    file24_updated
6579                    ; line_number = 1022
6580                    ;  state := state_command
6581                    ;info   1022, 1174
6582 0496 3002          movlw   2
6583 0497 00b0          movwf   state
6584 0498 2d13          goto    uart_manage__74
6585                    ; line_number = 1023
6586                    ; case 8
6587   0499 :   uart_manage__63:
6588                    ; # Value Low Set 2nd command byte:
6589                    ; line_number = 1025
6590                    ;  lows[file24_index] := command
6591                    ;info   1025, 1177
6592                    ; index_fsr_first
6593 0499 082c          movf    file24_index,w
6594 049a 3e34          addlw   lows
6595 049b 0084          movwf   __fsr
6596 049c 1783          bsf     __irp___byte, __irp___bit
6597 049d 0846          movf    uart_manage__command,w
6598 049e 0080          movwf   __indf
6599                    ; line_number = 1026
6600                    ;  call file24_updated()
6601                    ;info   1026, 1183
6602 049f 2514          call    file24_updated
6603                    ; line_number = 1027
6604                    ;  state := state_command
6605                    ;info   1027, 1184
6606 04a0 3002          movlw   2
6607 04a1 00b0          movwf   state
6608 04a2 2d13          goto    uart_manage__74
6609                    ; line_number = 1028
6610                    ; case 9
6611   04a3 :   uart_manage__64:
6612                    ; # Value Middle Set 2nd command byte:
6613                    ; line_number = 1030
6614                    ;  middles[file24_index] := command
6615                    ;info   1030, 1187
6616                    ; index_fsr_first
6617 04a3 082c          movf    file24_index,w
6618 04a4 3e2a          addlw   middles
6619 04a5 0084          movwf   __fsr
6620 04a6 1783          bsf     __irp___byte, __irp___bit
6621 04a7 0846          movf    uart_manage__command,w
6622 04a8 0080          movwf   __indf
6623                    ; line_number = 1031
6624                    ;  call file24_updated()
6625                    ;info   1031, 1193
6626 04a9 2514          call    file24_updated
6627                    ; line_number = 1032
6628                    ;  state := state_command
6629                    ;info   1032, 1194
6630 04aa 3002          movlw   2
6631 04ab 00b0          movwf   state
6632 04ac 2d13          goto    uart_manage__74
6633                    ; line_number = 1033
6634                    ; case 10
6635   04ad :   uart_manage__65:
6636                    ; # Value High Set 2nd command byte:
6637                    ; line_number = 1035
6638                    ;  highs[file24_index] := command
6639                    ;info   1035, 1197
6640                    ; index_fsr_first
6641 04ad 082c          movf    file24_index,w
6642 04ae 3e20          addlw   highs
6643 04af 0084          movwf   __fsr
6644 04b0 1783          bsf     __irp___byte, __irp___bit
6645 04b1 0846          movf    uart_manage__command,w
6646 04b2 0080          movwf   __indf
6647                    ; line_number = 1036
6648                    ;  call file24_updated()
6649                    ;info   1036, 1203
6650 04b3 2514          call    file24_updated
6651                    ; line_number = 1037
6652                    ;  state := state_command
6653                    ;info   1037, 1204
6654 04b4 3002          movlw   2
6655 04b5 00b0          movwf   state
6656 04b6 2d13          goto    uart_manage__74
6657                    ; line_number = 1038
6658                    ; case 11
6659   04b7 :   uart_manage__66:
6660                    ; # File8 Set 2nd command byte:
6661                    ; line_number = 1040
6662                    ;  allow := _false
6663                    ;info   1040, 1207
6664 04b7 12ef          bcf     uart_manage__allow___byte, uart_manage__allow___bit
6665                    ; line_number = 1041
6666                    ;  switch index start
6667                    ;info   1041, 1208
6668                    ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=1
6669                    ; line_number = 1049
6670                    ; case_maximum 7
6671 04b8 3004          movlw   uart_manage__45>>8
6672 04b9 008a          movwf   __pclath
6673 04ba 0847          movf    uart_manage__index,w
6674                    ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
6675 04bb 3ebd          addlw   uart_manage__45
6676 04bc 0082          movwf   __pcl
6677                    ; page_group 8
6678   04bd :   uart_manage__45:
6679 04bd 2cc5          goto    uart_manage__42
6680 04be 2cc7          goto    uart_manage__43
6681 04bf 2cc8          goto    uart_manage__44
6682 04c0 2cc8          goto    uart_manage__44
6683 04c1 2cc8          goto    uart_manage__44
6684 04c2 2cc8          goto    uart_manage__44
6685 04c3 2cc8          goto    uart_manage__44
6686 04c4 2cc8          goto    uart_manage__44
6687                    ; line_number = 1042
6688                    ; case 0
6689   04c5 :   uart_manage__42:
6690                    ; line_number = 1043
6691                    ; allow := _true
6692                    ;info   1043, 1221
6693 04c5 16ef          bsf     uart_manage__allow___byte, uart_manage__allow___bit
6694 04c6 2cca          goto    uart_manage__46
6695                    ; line_number = 1044
6696                    ; case 1
6697   04c7 :   uart_manage__43:
6698                    ; line_number = 1045
6699                    ; do_nothing
6700                    ;info   1045, 1223
6701 04c7 2cca          goto    uart_manage__46
6702                    ; line_number = 1046
6703                    ; default
6704   04c8 :   uart_manage__44:
6705                    ; line_number = 1047
6706                    ; if !configure_lock start
6707                    ;info   1047, 1224
6708                    ; =>bit_code_emit@symbol(): sym=configure_lock
6709                    ; 1TEST: Single test with code in skip slot
6710 04c8 1da5          btfss   configure_lock___byte, configure_lock___bit
6711                    ; line_number = 1048
6712                    ; allow := _true
6713                    ;info   1048, 1225
6714 04c9 16ef          bsf     uart_manage__allow___byte, uart_manage__allow___bit
6715                    ; Recombine size1 = 0 || size2 = 0
6716                    ; line_number = 1047
6717                    ; if !configure_lock done
6718   04ca :   uart_manage__46:
6719                    ; line_number = 1041
6720                    ;  switch index done
6721                    ; line_number = 1050
6722                    ; if allow start
6723                    ;info   1050, 1226
6724                    ; =>bit_code_emit@symbol(): sym=uart_manage__allow
6725                    ; No 1TEST: true.size=6 false.size=0
6726                    ; No 2TEST: true.size=6 false.size=0
6727                    ; 1GOTO: Single test with GOTO
6728 04ca 1eef          btfss   uart_manage__allow___byte, uart_manage__allow___bit
6729 04cb 2cd2          goto    uart_manage__47
6730                    ; line_number = 1051
6731                    ; file8[index] := command
6732                    ;info   1051, 1228
6733                    ; index_fsr_first
6734 04cc 0847          movf    uart_manage__index,w
6735 04cd 3e25          addlw   file8
6736 04ce 0084          movwf   __fsr
6737 04cf 1383          bcf     __irp___byte, __irp___bit
6738 04d0 0846          movf    uart_manage__command,w
6739 04d1 0080          movwf   __indf
6740                    ; Recombine size1 = 0 || size2 = 0
6741   04d2 :   uart_manage__47:
6742                    ; line_number = 1050
6743                    ; if allow done
6744                    ; line_number = 1052
6745                    ; switch index start
6746                    ;info   1052, 1234
6747                    ; switch_before:(data:00=uu=>00 code:X0=cu=>X0) size=27
6748                    ; line_number = 1060
6749                    ; case_maximum 7
6750 04d2 3004          movlw   uart_manage__51>>8
6751 04d3 008a          movwf   __pclath
6752 04d4 0847          movf    uart_manage__index,w
6753                    ; switch after expression:(data:00=uu=>00 code:X0=cu=>X0)
6754 04d5 3ed7          addlw   uart_manage__51
6755 04d6 0082          movwf   __pcl
6756                    ; page_group 8
6757   04d7 :   uart_manage__51:
6758 04d7 2cdf          goto    uart_manage__48
6759 04d8 2cea          goto    uart_manage__52
6760 04d9 2ce1          goto    uart_manage__49
6761 04da 2cea          goto    uart_manage__52
6762 04db 2cea          goto    uart_manage__52
6763 04dc 2cea          goto    uart_manage__52
6764 04dd 2cea          goto    uart_manage__52
6765 04de 2ce4          goto    uart_manage__50
6766                    ; line_number = 1053
6767                    ; case 0
6768   04df :   uart_manage__48:
6769                    ; line_number = 1054
6770                    ; call configure_update()
6771                    ;info   1054, 1247
6772 04df 2567          call    configure_update
6773 04e0 2cea          goto    uart_manage__52
6774                    ; line_number = 1055
6775                    ; case 2
6776   04e1 :   uart_manage__49:
6777                    ; line_number = 1056
6778                    ; call speed_set(speed)
6779                    ;info   1056, 1249
6780 04e1 0827          movf    speed,w
6781 04e2 25b3          call    speed_set
6782 04e3 2cea          goto    uart_manage__52
6783                    ; line_number = 1057
6784                    ; case 7
6785   04e4 :   uart_manage__50:
6786                    ; line_number = 1058
6787                    ; if command > file24_size start
6788                    ;info   1058, 1252
6789 04e4 300a          movlw   10
6790 04e5 0246          subwf   uart_manage__command,w
6791 04e6 1903          btfsc   __z___byte, __z___bit
6792 04e7 1003          bcf     __c___byte, __c___bit
6793                    ; =>bit_code_emit@symbol(): sym=__c
6794                    ; 1TEST: Single test with code in skip slot
6795 04e8 1803          btfsc   __c___byte, __c___bit
6796                    ; line_number = 1059
6797                    ; command := 0
6798                    ;info   1059, 1257
6799 04e9 01c6          clrf    uart_manage__command
6800                    ; Recombine size1 = 0 || size2 = 0
6801                    ; line_number = 1058
6802                    ; if command > file24_size done
6803   04ea :   uart_manage__52:
6804                    ; line_number = 1052
6805                    ; switch index done
6806                    ; line_number = 1061
6807                    ; state:= state_command
6808                    ;info   1061, 1258
6809 04ea 3002          movlw   2
6810 04eb 00b0          movwf   state
6811 04ec 2d13          goto    uart_manage__74
6812                    ; line_number = 1062
6813                    ; case 14
6814   04ed :   uart_manage__67:
6815                    ; # Ignore the echo and wait for the new address:
6816                    ; line_number = 1064
6817                    ;  state := state_address_set2
6818                    ;info   1064, 1261
6819 04ed 300f          movlw   15
6820 04ee 00b0          movwf   state
6821 04ef 2d13          goto    uart_manage__74
6822                    ; line_number = 1065
6823                    ; case 15
6824   04f0 :   uart_manage__68:
6825                    ; # First, copy of new address just arrived:
6826                    ; line_number = 1067
6827                    ;  new_address := command
6828                    ;info   1067, 1264
6829 04f0 0846          movf    uart_manage__command,w
6830 04f1 00ba          movwf   new_address
6831                    ; # Return it
6832                    ; line_number = 1069
6833                    ;  call uart_byte_put(new_address)
6834                    ;info   1069, 1266
6835 04f2 083a          movf    new_address,w
6836 04f3 258e          call    uart_byte_put
6837                    ; line_number = 1070
6838                    ;  state := state_address_set3
6839                    ;info   1070, 1268
6840 04f4 3010          movlw   16
6841 04f5 00b0          movwf   state
6842 04f6 2d13          goto    uart_manage__74
6843                    ; line_number = 1071
6844                    ; case 16
6845   04f7 :   uart_manage__69:
6846                    ; # Ignore the echo
6847                    ; line_number = 1073
6848                    ;  state := state_address_set4
6849                    ;info   1073, 1271
6850 04f7 3011          movlw   17
6851 04f8 00b0          movwf   state
6852 04f9 2d13          goto    uart_manage__74
6853                    ; line_number = 1074
6854                    ; case 17
6855   04fa :   uart_manage__70:
6856                    ; # We have the 2nd copy of new addres.
6857                    ; line_number = 1076
6858                    ;  if command = new_address start
6859                    ;info   1076, 1274
6860                    ; Left minus Right
6861 04fa 083a          movf    new_address,w
6862 04fb 0246          subwf   uart_manage__command,w
6863                    ; =>bit_code_emit@symbol(): sym=__z
6864                    ; No 1TEST: true.size=6 false.size=1
6865                    ; No 2TEST: true.size=6 false.size=1
6866                    ; 2GOTO: Single test with two GOTO's
6867 04fc 1d03          btfss   __z___byte, __z___bit
6868 04fd 2d05          goto    uart_manage__53
6869                    ; # They match; write it in:
6870                    ; line_number = 1078
6871                    ;  call rb2bus_eedata_write(new_address)
6872                    ;info   1078, 1278
6873 04fe 083a          movf    new_address,w
6874 04ff 25e5          call    rb2bus_eedata_write
6875                    ; line_number = 1079
6876                    ;  _gie := _true
6877                    ;info   1079, 1280
6878 0500 178b          bsf     _gie___byte, _gie___bit
6879                    ; line_number = 1080
6880                    ;  address := new_address
6881                    ;info   1080, 1281
6882 0501 083a          movf    new_address,w
6883 0502 00b9          movwf   address
6884                    ; line_number = 1081
6885                    ;  call uart_byte_put(rb2_ok)
6886                    ;info   1081, 1283
6887 0503 30a5          movlw   165
6888 0504 2d06          goto    uart_manage__54
6889                    ; 2GOTO: Starting code 2
6890   0505 :   uart_manage__53:
6891                    ; # They do not match, return an error:
6892                    ; line_number = 1084
6893                    ;  call uart_byte_put(0)
6894                    ;info   1084, 1285
6895 0505 3000          movlw   0
6896   0506 :   uart_manage__54:
6897                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
6898                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
6899                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
6900 0506 258e          call    uart_byte_put
6901                    ; line_number = 1076
6902                    ;  if command = new_address done
6903                    ; line_number = 1085
6904                    ; state := state_echo_then_command
6905                    ;info   1085, 1287
6906 0507 3001          movlw   1
6907 0508 00b0          movwf   state
6908 0509 2d13          goto    uart_manage__74
6909                    ; line_number = 1086
6910                    ; case 18
6911   050a :   uart_manage__71:
6912                    ; line_number = 1087
6913                    ; call uart_byte_put(middle)
6914                    ;info   1087, 1290
6915 050a 0823          movf    middle,w
6916 050b 258e          call    uart_byte_put
6917                    ; line_number = 1088
6918                    ;  state := state_probe_get2
6919                    ;info   1088, 1292
6920 050c 3013          movlw   19
6921 050d 00b0          movwf   state
6922 050e 2d13          goto    uart_manage__74
6923                    ; line_number = 1089
6924                    ; case 19
6925   050f :   uart_manage__72:
6926                    ; line_number = 1090
6927                    ; call uart_byte_put(low)
6928                    ;info   1090, 1295
6929 050f 0824          movf    low,w
6930 0510 258e          call    uart_byte_put
6931                    ; line_number = 1091
6932                    ;  state := state_echo_then_command
6933                    ;info   1091, 1297
6934 0511 3001          movlw   1
6935 0512 00b0          movwf   state
6936            
6937            
6938            
6939   0513 :   uart_manage__74:
6940                    ; line_number = 893
6941                    ;  switch state done
6942   0513 :   uart_manage__75:
6943                    ; Recombine size1 = 0 || size2 = 0
6944                    ; line_number = 880
6945                    ;  if uart_input_count != 0 done
6946                    ; delay after procedure statements=non-uniform
6947                    ; Implied return
6948 0513 3400          retlw   0
6949            
6950            
6951            
6952            
6953                    ; line_number = 1095
6954                    ;info   1095, 1300
6955                    ; procedure file24_updated
6956   0514 :   file24_updated:
6957                    ; arguments_none
6958                    ; line_number = 1097
6959                    ;  returns_nothing
6960            
6961                    ; # This routine will cause the {file24_change} mask to be updated
6962                    ; # with the value that changed.
6963            
6964                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
6965                    ; line_number = 1102
6966                    ;  switch file24_index start
6967                    ;info   1102, 1300
6968                    ; switch_before:(data:00=uu=>00 code:X0=cu=>X0) size=0
6969 0514 3005          movlw   file24_updated__12>>8
6970 0515 008a          movwf   __pclath
6971 0516 082c          movf    file24_index,w
6972                    ; switch after expression:(data:00=uu=>00 code:X0=cu=>X0)
6973 0517 3e19          addlw   file24_updated__12
6974 0518 0082          movwf   __pcl
6975                    ; page_group 6
6976   0519 :   file24_updated__12:
6977 0519 2d1f          goto    file24_updated__6
6978 051a 2d20          goto    file24_updated__7
6979 051b 2d22          goto    file24_updated__8
6980 051c 2d24          goto    file24_updated__9
6981 051d 2d26          goto    file24_updated__10
6982 051e 2d28          goto    file24_updated__11
6983                    ; line_number = 1103
6984                    ; case 0
6985   051f :   file24_updated__6:
6986                    ; line_number = 1104
6987                    ; do_nothing
6988                    ;info   1104, 1311
6989 051f 2d29          goto    file24_updated__13
6990                    ; line_number = 1105
6991                    ; case 1
6992   0520 :   file24_updated__7:
6993                    ; line_number = 1106
6994                    ; file24_changed@target_index := _true
6995                    ;info   1106, 1312
6996 00000020 = file24_updated__select__1___byte equ file24_changed
6997 00000001 = file24_updated__select__1___bit equ 1
6998 0520 14a0          bsf     file24_updated__select__1___byte, file24_updated__select__1___bit
6999 0521 2d29          goto    file24_updated__13
7000                    ; line_number = 1107
7001                    ; case 2
7002   0522 :   file24_updated__8:
7003                    ; line_number = 1108
7004                    ; file24_changed@divisor_index := _true
7005                    ;info   1108, 1314
7006 00000020 = file24_updated__select__2___byte equ file24_changed
7007 00000002 = file24_updated__select__2___bit equ 2
7008 0522 1520          bsf     file24_updated__select__2___byte, file24_updated__select__2___bit
7009                    ; # Changing the divisor will cause kp, ki, and kd to be updated:
7010 0523 2d29          goto    file24_updated__13
7011                    ; line_number = 1110
7012                    ; case 3
7013   0524 :   file24_updated__9:
7014                    ; line_number = 1111
7015                    ; file24_changed@kp_index := _true
7016                    ;info   1111, 1316
7017 00000020 = file24_updated__select__3___byte equ file24_changed
7018 00000003 = file24_updated__select__3___bit equ 3
7019 0524 15a0          bsf     file24_updated__select__3___byte, file24_updated__select__3___bit
7020 0525 2d29          goto    file24_updated__13
7021                    ; line_number = 1112
7022                    ; case 4
7023   0526 :   file24_updated__10:
7024                    ; line_number = 1113
7025                    ; file24_changed@ki_index := _true
7026                    ;info   1113, 1318
7027 00000020 = file24_updated__select__4___byte equ file24_changed
7028 00000004 = file24_updated__select__4___bit equ 4
7029 0526 1620          bsf     file24_updated__select__4___byte, file24_updated__select__4___bit
7030 0527 2d29          goto    file24_updated__13
7031                    ; line_number = 1114
7032                    ; case 5
7033   0528 :   file24_updated__11:
7034                    ; line_number = 1115
7035                    ; file24_changed@kd_index := _true
7036                    ;info   1115, 1320
7037 00000020 = file24_updated__select__5___byte equ file24_changed
7038 00000005 = file24_updated__select__5___bit equ 5
7039 0528 16a0          bsf     file24_updated__select__5___byte, file24_updated__select__5___bit
7040            
7041            
7042   0529 :   file24_updated__13:
7043                    ; line_number = 1102
7044                    ;  switch file24_index done
7045                    ; delay after procedure statements=non-uniform
7046                    ; Implied return
7047 0529 3400          retlw   0
7048            
7049            
7050            
7051            
7052 0000004a = file24_float_convert__0return equ globals___0+42
7053                    ; line_number = 1118
7054                    ;info   1118, 1322
7055                    ; procedure file24_float_convert
7056   052a :   file24_float_convert:
7057                    ; Last argument is sitting in W; save into argument variable
7058 052a 00c9          movwf   file24_float_convert__index
7059                    ; delay=4294967295
7060                    ; line_number = 1119
7061                    ; argument index byte
7062 00000049 = file24_float_convert__index equ globals___0+41
7063                    ; line_number = 1120
7064                    ;  returns float32
7065            
7066                    ; # This routine will return {file24}[{index}] as a {float32}.
7067            
7068                    ; line_number = 1124
7069                    ;  local mask byte
7070 00000048 = file24_float_convert__mask equ globals___0+40
7071            
7072                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7073                    ; line_number = 1126
7074                    ;  high := highs[index]
7075                    ;info   1126, 1323
7076 052b 0849          movf    file24_float_convert__index,w
7077 052c 3e20          addlw   highs
7078 052d 0084          movwf   __fsr
7079 052e 1783          bsf     __irp___byte, __irp___bit
7080 052f 0800          movf    __indf,w
7081 0530 00a2          movwf   high
7082                    ; line_number = 1127
7083                    ;  middle := middles[index]
7084                    ;info   1127, 1329
7085 0531 0849          movf    file24_float_convert__index,w
7086 0532 3e2a          addlw   middles
7087 0533 0084          movwf   __fsr
7088 0534 1783          bsf     __irp___byte, __irp___bit
7089 0535 0800          movf    __indf,w
7090 0536 00a3          movwf   middle
7091                    ; line_number = 1128
7092                    ;  low := lows[index]
7093                    ;info   1128, 1335
7094 0537 0849          movf    file24_float_convert__index,w
7095 0538 3e34          addlw   lows
7096 0539 0084          movwf   __fsr
7097 053a 1783          bsf     __irp___byte, __irp___bit
7098 053b 0800          movf    __indf,w
7099 053c 00a4          movwf   low
7100                    ; line_number = 1129
7101                    ;  mask := index2mask[index]
7102                    ;info   1129, 1341
7103 053d 0849          movf    file24_float_convert__index,w
7104 053e 262a          call    index2mask
7105 053f 00c8          movwf   file24_float_convert__mask
7106                    ; line_number = 1130
7107                    ;  if high = 0 && middle = 0 && low = 0 start
7108                    ;info   1130, 1344
7109                    ; Left minus Right
7110 0540 0822          movf    high,w
7111                    ; =>bit_code_emit@symbol(): sym=__z
7112                    ; No 1TEST: true.size=11 false.size=1
7113                    ; No 2TEST: true.size=11 false.size=1
7114                    ; 2GOTO: Single test with two GOTO's
7115 0541 1d03          btfss   __z___byte, __z___bit
7116 0542 2d4c          goto    file24_float_convert__1
7117                    ; Left minus Right
7118 0543 0823          movf    middle,w
7119                    ; =>bit_code_emit@symbol(): sym=__z
7120                    ; No 1TEST: true.size=8 false.size=1
7121                    ; No 2TEST: true.size=8 false.size=1
7122                    ; 2GOTO: Single test with two GOTO's
7123 0544 1d03          btfss   __z___byte, __z___bit
7124 0545 2d4c          goto    file24_float_convert__1
7125                    ; &&||: index=2 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
7126                    ; Left minus Right
7127 0546 0824          movf    low,w
7128                    ; =>bit_code_emit@symbol(): sym=__z
7129                    ; No 1TEST: true.size=2 false.size=2
7130                    ; No 2TEST: true.size=2 false.size=2
7131                    ; 2GOTO: Single test with two GOTO's
7132 0547 1d03          btfss   __z___byte, __z___bit
7133 0548 2d4c          goto    file24_float_convert__2
7134                    ; line_number = 1131
7135                    ; file24_zero := file24_zero | mask
7136                    ;info   1131, 1353
7137 0549 0848          movf    file24_float_convert__mask,w
7138 054a 04a1          iorwf   file24_zero,f
7139 054b 2d4e          goto    file24_float_convert__3
7140                    ; 2GOTO: Starting code 2
7141   054c :   file24_float_convert__2:
7142   054c :   file24_float_convert__1:
7143                    ; line_number = 1133
7144                    ; file24_zero := file24_zero & (mask ^ 0xff)
7145                    ;info   1133, 1356
7146 054c 0948          comf    file24_float_convert__mask,w
7147 054d 05a1          andwf   file24_zero,f
7148   054e :   file24_float_convert__3:
7149                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
7150                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
7151                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7152                    ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
7153                    ; &&||:: index=1 new_delay=4294967295 goto_delay=4294967295
7154                    ; Recombine code1_bit_states != code2_bit_states
7155                    ; 2GOTO: No goto needed; true= false=file24_float_convert__1 true_size=8 false_size=1
7156                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7157                    ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:X0=cu=>X0)
7158                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7159                    ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
7160                    ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295
7161                    ; Recombine code1_bit_states != code2_bit_states
7162                    ; 2GOTO: No goto needed; true= false=file24_float_convert__1 true_size=11 false_size=1
7163                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7164                    ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:X0=cu=>X0)
7165                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7166                    ; line_number = 1130
7167                    ;  if high = 0 && middle = 0 && low = 0 done
7168                    ; line_number = 1134
7169                    ; return xyz(high, middle, low) start
7170                    ; line_number = 1134
7171                    ;info   1134, 1358
7172 054e 0822          movf    high,w
7173 054f 00d5          movwf   xyz__high
7174 0550 0823          movf    middle,w
7175 0551 00d6          movwf   xyz__middle
7176 0552 0824          movf    low,w
7177 0553 2605          call    xyz
7178 0554 302c          movlw   xyz__0return>>1
7179 0555 158a          bsf     __cb0___byte, __cb0___bit
7180 0556 1683          bsf     __rp0___byte, __rp0___bit
7181 0557 22d8          call    _float32_pointer_load
7182 0558 3025          movlw   file24_float_convert__0return>>1
7183 0559 2337          call    _float32_pointer_store
7184 055a 1283          bcf     __rp0___byte, __rp0___bit
7185 055b 118a          bcf     __cb0___byte, __cb0___bit
7186 055c 0008          return  
7187                    ; line_number = 1134
7188                    ; return xyz(high, middle, low) done
7189            
7190            
7191                    ; delay after procedure statements=non-uniform
7192            
7193            
7194            
7195            
7196                    ; line_number = 1137
7197                    ;info   1137, 1373
7198                    ; procedure status_update
7199   055d :   status_update:
7200                    ; arguments_none
7201                    ; line_number = 1139
7202                    ;  returns_nothing
7203            
7204                    ; # This routine will cause {status} to be updated.
7205            
7206                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7207                    ; line_number = 1143
7208                    ;  status := 0
7209                    ;info   1143, 1373
7210 055d 01a6          clrf    status
7211                    ; line_number = 1144
7212                    ;  if quad_a start
7213                    ;info   1144, 1374
7214                    ; =>bit_code_emit@symbol(): sym=quad_a
7215                    ; 1TEST: Single test with code in skip slot
7216 055e 1885          btfsc   quad_a___byte, quad_a___bit
7217                    ; line_number = 1145
7218                    ; status@0 := _true
7219                    ;info   1145, 1375
7220 00000026 = status_update__select__1___byte equ status
7221 00000000 = status_update__select__1___bit equ 0
7222 055f 1426          bsf     status_update__select__1___byte, status_update__select__1___bit
7223                    ; Recombine size1 = 0 || size2 = 0
7224                    ; line_number = 1144
7225                    ;  if quad_a done
7226                    ; line_number = 1146
7227                    ; if quad_b start
7228                    ;info   1146, 1376
7229                    ; =>bit_code_emit@symbol(): sym=quad_b
7230                    ; 1TEST: Single test with code in skip slot
7231 0560 1805          btfsc   quad_b___byte, quad_b___bit
7232                    ; line_number = 1147
7233                    ; status@1 := _true
7234                    ;info   1147, 1377
7235 00000026 = status_update__select__2___byte equ status
7236 00000001 = status_update__select__2___bit equ 1
7237 0561 14a6          bsf     status_update__select__2___byte, status_update__select__2___bit
7238                    ; Recombine size1 = 0 || size2 = 0
7239                    ; line_number = 1146
7240                    ; if quad_b done
7241                    ; line_number = 1148
7242                    ; if analog0_greater_than start
7243                    ;info   1148, 1378
7244                    ; =>bit_code_emit@symbol(): sym=analog0_greater_than
7245                    ; 1TEST: Single test with code in skip slot
7246 0562 196f          btfsc   analog0_greater_than___byte, analog0_greater_than___bit
7247                    ; line_number = 1149
7248                    ; status@2 := _true
7249                    ;info   1149, 1379
7250 00000026 = status_update__select__3___byte equ status
7251 00000002 = status_update__select__3___bit equ 2
7252 0563 1526          bsf     status_update__select__3___byte, status_update__select__3___bit
7253                    ; Recombine size1 = 0 || size2 = 0
7254                    ; line_number = 1148
7255                    ; if analog0_greater_than done
7256                    ; line_number = 1150
7257                    ; if analog1_greater_than start
7258                    ;info   1150, 1380
7259                    ; =>bit_code_emit@symbol(): sym=analog1_greater_than
7260                    ; 1TEST: Single test with code in skip slot
7261 0564 19ef          btfsc   analog1_greater_than___byte, analog1_greater_than___bit
7262                    ; line_number = 1151
7263                    ; status@3 := _true
7264                    ;info   1151, 1381
7265 00000026 = status_update__select__4___byte equ status
7266 00000003 = status_update__select__4___bit equ 3
7267 0565 15a6          bsf     status_update__select__4___byte, status_update__select__4___bit
7268            
7269            
7270                    ; Recombine size1 = 0 || size2 = 0
7271                    ; line_number = 1150
7272                    ; if analog1_greater_than done
7273                    ; delay after procedure statements=non-uniform
7274                    ; Implied return
7275 0566 3400          retlw   0
7276            
7277            
7278            
7279            
7280                    ; line_number = 1154
7281                    ;info   1154, 1383
7282                    ; procedure configure_update
7283   0567 :   configure_update:
7284                    ; arguments_none
7285                    ; line_number = 1156
7286                    ;  returns_nothing
7287            
7288                    ; line_number = 1158
7289                    ;  local index byte
7290 0000004e = configure_update__index equ globals___0+46
7291                    ; line_number = 1159
7292                    ;  local state byte
7293 0000004f = configure_update__state equ globals___0+47
7294            
7295                    ; # This routine will read {configure} and process it:
7296            
7297                    ; # 0x1c = ad0_enable:ad1_enable:
7298                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7299                    ; line_number = 1164
7300                    ;  if configure & 0x18 != 0 start
7301                    ;info   1164, 1383
7302                    ; Left minus Right
7303 0567 3018          movlw   24
7304 0568 0525          andwf   configure,w
7305                    ; =>bit_code_emit@symbol(): sym=__z
7306                    ; No 1TEST: true.size=2 false.size=2
7307                    ; No 2TEST: true.size=2 false.size=2
7308                    ; 2GOTO: Single test with two GOTO's
7309 0569 1d03          btfss   __z___byte, __z___bit
7310 056a 2d6f          goto    configure_update__5
7311 056b 1683          bsf     __rp0___byte, __rp0___bit
7312                    ; # We configure quad A and B as digital inputs:
7313                    ; line_number = 1170
7314                    ;  _ansel@0 := _false
7315                    ;info   1170, 1388
7316 00000091 = configure_update__select__1___byte equ _ansel
7317 00000000 = configure_update__select__1___bit equ 0
7318 056c 1011          bcf     configure_update__select__1___byte, configure_update__select__1___bit
7319                    ; line_number = 1171
7320                    ;  _ansel@1 := _false
7321                    ;info   1171, 1389
7322 00000091 = configure_update__select__2___byte equ _ansel
7323 00000001 = configure_update__select__2___bit equ 1
7324 056d 1091          bcf     configure_update__select__2___byte, configure_update__select__2___bit
7325            
7326 056e 2d72          goto    configure_update__6
7327                    ; 2GOTO: Starting code 2
7328   056f :   configure_update__5:
7329 056f 1683          bsf     __rp0___byte, __rp0___bit
7330                    ; # We have to configure quad A and B as A/D inputs:
7331                    ; line_number = 1166
7332                    ;  _ansel@0 := _true
7333                    ;info   1166, 1392
7334 00000091 = configure_update__select__3___byte equ _ansel
7335 00000000 = configure_update__select__3___bit equ 0
7336 0570 1411          bsf     configure_update__select__3___byte, configure_update__select__3___bit
7337                    ; line_number = 1167
7338                    ;  _ansel@1 := _true
7339                    ;info   1167, 1393
7340 00000091 = configure_update__select__4___byte equ _ansel
7341 00000001 = configure_update__select__4___bit equ 1
7342 0571 1491          bsf     configure_update__select__4___byte, configure_update__select__4___bit
7343   0572 :   configure_update__6:
7344                    ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:XX=cc=>XX)
7345                    ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:XX=cc=>XX)
7346                    ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X0=cu=>X0)
7347                    ; line_number = 1164
7348                    ;  if configure & 0x18 != 0 done
7349                    ; line_number = 1173
7350                    ; index := 0
7351                    ;info   1173, 1394
7352 0572 1283          bcf     __rp0___byte, __rp0___bit
7353 0573 01ce          clrf    configure_update__index
7354                    ; line_number = 1174
7355                    ;  while index < 32 start
7356   0574 :   configure_update__7:
7357                    ;info   1174, 1396
7358 0574 3020          movlw   32
7359 0575 024e          subwf   configure_update__index,w
7360                    ; =>bit_code_emit@symbol(): sym=__c
7361                    ; No 1TEST: true.size=0 false.size=21
7362                    ; No 2TEST: true.size=0 false.size=21
7363                    ; 1GOTO: Single test with GOTO
7364 0576 1803          btfsc   __c___byte, __c___bit
7365 0577 2d8d          goto    configure_update__12
7366                    ; line_number = 1175
7367                    ; state := states[index]
7368                    ;info   1175, 1400
7369 0578 084e          movf    configure_update__index,w
7370 0579 265a          call    states
7371 057a 00cf          movwf   configure_update__state
7372                    ; line_number = 1176
7373                    ;  if position_reverse start
7374                    ;info   1176, 1403
7375                    ; =>bit_code_emit@symbol(): sym=position_reverse
7376                    ; No 1TEST: true.size=14 false.size=0
7377                    ; No 2TEST: true.size=14 false.size=0
7378                    ; 1GOTO: Single test with GOTO
7379 057b 1ca5          btfss   position_reverse___byte, position_reverse___bit
7380 057c 2d8b          goto    configure_update__11
7381                    ; # Swap the increment and decrement bits in {xstates}:
7382                    ; line_number = 1178
7383                    ;  state := state & 0xf | (state << 2) & 0xc0 | (state >> 2) & 0x30
7384                    ;info   1178, 1405
7385 00000067 = configure_update__8 equ globals___0+71
7386 057d 300f          movlw   15
7387 057e 054f          andwf   configure_update__state,w
7388 057f 00e7          movwf   configure_update__8
7389 00000068 = configure_update__9 equ globals___0+72
7390 0580 0d4f          rlf     configure_update__state,w
7391 0581 00e8          movwf   configure_update__9
7392 0582 0d68          rlf     configure_update__9,w
7393 0583 39c0          andlw   192
7394 0584 04e7          iorwf   configure_update__8,f
7395 00000069 = configure_update__10 equ globals___0+73
7396 0585 0c4f          rrf     configure_update__state,w
7397 0586 00e9          movwf   configure_update__10
7398 0587 0c69          rrf     configure_update__10,w
7399 0588 3930          andlw   48
7400 0589 0467          iorwf   configure_update__8,w
7401 058a 00cf          movwf   configure_update__state
7402                    ; Recombine size1 = 0 || size2 = 0
7403   058b :   configure_update__11:
7404                    ; line_number = 1176
7405                    ;  if position_reverse done
7406                    ; #FIXME: Uncomment to enable {xstates}:
7407                    ; #xstates[index] := state
7408                    ; line_number = 1181
7409                    ;  index := index + 1
7410                    ;info   1181, 1419
7411 058b 0ace          incf    configure_update__index,f
7412            
7413            
7414 058c 2d74          goto    configure_update__7
7415   058d :   configure_update__12:
7416                    ; Recombine size1 = 0 || size2 = 0
7417                    ; line_number = 1174
7418                    ;  while index < 32 done
7419                    ; delay after procedure statements=non-uniform
7420                    ; Implied return
7421 058d 3400          retlw   0
7422            
7423            
7424            
7425            
7426                    ; line_number = 1184
7427                    ;info   1184, 1422
7428                    ; procedure uart_byte_put
7429   058e :   uart_byte_put:
7430                    ; Last argument is sitting in W; save into argument variable
7431 058e 00d0          movwf   uart_byte_put__value
7432                    ; delay=4294967295
7433                    ; line_number = 1185
7434                    ; argument value byte
7435 00000050 = uart_byte_put__value equ globals___0+48
7436                    ; line_number = 1186
7437                    ;  returns_nothing
7438            
7439                    ; # This routine will send {value} to the bus.
7440            
7441                    ; # Wait until {_txreg} is ready for a value:
7442                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7443                    ; line_number = 1191
7444                    ;  while !_txif start
7445   058f :   uart_byte_put__1:
7446                    ;info   1191, 1423
7447                    ; =>bit_code_emit@symbol(): sym=_txif
7448                    ; 1TEST: Single test with code in skip slot
7449 058f 1c8c          btfss   _txif___byte, _txif___bit
7450                    ; line_number = 1192
7451                    ; do_nothing
7452                    ;info   1192, 1424
7453            
7454 0590 2d8f          goto    uart_byte_put__1
7455                    ; Recombine size1 = 0 || size2 = 0
7456                    ; line_number = 1191
7457                    ;  while !_txif done
7458                    ; # Ship {value} out to the bus with 9th bit turned off:
7459                    ; line_number = 1195
7460                    ;  _adden := _false
7461                    ;info   1195, 1425
7462 0591 1197          bcf     _adden___byte, _adden___bit
7463                    ; line_number = 1196
7464                    ;  _tx9d := _false
7465                    ;info   1196, 1426
7466 0592 1016          bcf     _tx9d___byte, _tx9d___bit
7467                    ; line_number = 1197
7468                    ;  _txreg := value
7469                    ;info   1197, 1427
7470 0593 0850          movf    uart_byte_put__value,w
7471 0594 0095          movwf   _txreg
7472            
7473            
7474                    ; delay after procedure statements=non-uniform
7475                    ; Implied return
7476 0595 3400          retlw   0
7477            
7478            
7479            
7480            
7481                    ; line_number = 1200
7482                    ;info   1200, 1430
7483                    ; procedure uart_initialize
7484   0596 :   uart_initialize:
7485                    ; arguments_none
7486                    ; line_number = 1202
7487                    ;  returns_nothing
7488            
7489                    ; # This procedure is responsibile for initializing the UART
7490                    ; # connected to the bus.  This code is currently specific to
7491                    ; # the PIC16F688.
7492            
7493                    ; #FIXME: Use {rx_bit} and {tx_bit}!!!
7494            
7495                    ; # Warm up the UART:
7496                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7497                    ; line_number = 1211
7498                    ;  _trisc@5 := _true
7499                    ;info   1211, 1430
7500 00000087 = uart_initialize__select__1___byte equ _trisc
7501 00000005 = uart_initialize__select__1___bit equ 5
7502 0596 1683          bsf     __rp0___byte, __rp0___bit
7503 0597 1687          bsf     uart_initialize__select__1___byte, uart_initialize__select__1___bit
7504                    ; line_number = 1212
7505                    ;  _trisc@4 := _true
7506                    ;info   1212, 1432
7507 00000087 = uart_initialize__select__2___byte equ _trisc
7508 00000004 = uart_initialize__select__2___bit equ 4
7509 0598 1607          bsf     uart_initialize__select__2___byte, uart_initialize__select__2___bit
7510            
7511                    ; # Initialize the {_txsta} register:
7512                    ; line_number = 1215
7513                    ;  _txsta := 0
7514                    ;info   1215, 1433
7515 0599 1283          bcf     __rp0___byte, __rp0___bit
7516 059a 0196          clrf    _txsta
7517                    ; line_number = 1216
7518                    ;  _tx9 := _true
7519                    ;info   1216, 1435
7520 059b 1716          bsf     _tx9___byte, _tx9___bit
7521                    ; line_number = 1217
7522                    ;  _txen := _true
7523                    ;info   1217, 1436
7524 059c 1696          bsf     _txen___byte, _txen___bit
7525                    ; line_number = 1218
7526                    ;  _brgh := _true
7527                    ;info   1218, 1437
7528 059d 1516          bsf     _brgh___byte, _brgh___bit
7529            
7530                    ; # Initialize the {_rcsta} register:
7531                    ; line_number = 1221
7532                    ;  _rcsta := 0
7533                    ;info   1221, 1438
7534 059e 0197          clrf    _rcsta
7535                    ; line_number = 1222
7536                    ;  _spen := _true
7537                    ;info   1222, 1439
7538 059f 1797          bsf     _spen___byte, _spen___bit
7539                    ; line_number = 1223
7540                    ;  _rx9 := _true
7541                    ;info   1223, 1440
7542 05a0 1717          bsf     _rx9___byte, _rx9___bit
7543                    ; line_number = 1224
7544                    ;  _cren := _true
7545                    ;info   1224, 1441
7546 05a1 1617          bsf     _cren___byte, _cren___bit
7547                    ; line_number = 1225
7548                    ;  _adden := _true
7549                    ;info   1225, 1442
7550 05a2 1597          bsf     _adden___byte, _adden___bit
7551            
7552                    ; # Set up the baud rate generator:
7553                    ; line_number = 1228
7554                    ;  _baudctl := 0
7555                    ;info   1228, 1443
7556 05a3 0191          clrf    _baudctl
7557                    ; line_number = 1229
7558                    ;  _brg16 := _true
7559                    ;info   1229, 1444
7560 05a4 1591          bsf     _brg16___byte, _brg16___bit
7561                    ; line_number = 1230
7562                    ;  _spbrg := _eusart_500000_low
7563                    ;info   1230, 1445
7564 05a5 3009          movlw   9
7565 05a6 0093          movwf   _spbrg
7566                    ; line_number = 1231
7567                    ;  _spbrgh := _eusart_500000_high
7568                    ;info   1231, 1447
7569 05a7 0192          clrf    _spbrgh
7570            
7571                    ; line_number = 1233
7572                    ;  state := state_select_wait
7573                    ;info   1233, 1448
7574 05a8 01b0          clrf    state
7575                    ; line_number = 1234
7576                    ;  id_index := 0
7577                    ;info   1234, 1449
7578 05a9 01b1          clrf    id_index
7579                    ; line_number = 1235
7580                    ;  uart_input_in_index := 0
7581                    ;info   1235, 1450
7582 05aa 01b6          clrf    uart_input_in_index
7583                    ; line_number = 1236
7584                    ;  uart_input_out_index := 0
7585                    ;info   1236, 1451
7586 05ab 01b7          clrf    uart_input_out_index
7587                    ; line_number = 1237
7588                    ;  uart_input_count := 0
7589                    ;info   1237, 1452
7590 05ac 01b8          clrf    uart_input_count
7591                    ; line_number = 1238
7592                    ;  uart_input_pending := _false
7593                    ;info   1238, 1453
7594 05ad 106f          bcf     uart_input_pending___byte, uart_input_pending___bit
7595            
7596                    ; # Turn on the interrupts:
7597                    ; line_number = 1241
7598                    ;  _txie := _false
7599                    ;info   1241, 1454
7600 05ae 1683          bsf     __rp0___byte, __rp0___bit
7601 05af 108c          bcf     _txie___byte, _txie___bit
7602                    ; line_number = 1242
7603                    ;  _rcie := _true
7604                    ;info   1242, 1456
7605 05b0 168c          bsf     _rcie___byte, _rcie___bit
7606            
7607            
7608                    ; delay after procedure statements=non-uniform
7609 05b1 1283          bcf     __rp0___byte, __rp0___bit
7610                    ; Implied return
7611 05b2 3400          retlw   0
7612            
7613            
7614            
7615            
7616                    ; line_number = 1245
7617                    ;info   1245, 1459
7618                    ; procedure speed_set
7619   05b3 :   speed_set:
7620                    ; Last argument is sitting in W; save into argument variable
7621 05b3 00d1          movwf   speed_set__speed
7622                    ; delay=4294967295
7623                    ; line_number = 1246
7624                    ; argument speed byte
7625 00000051 = speed_set__speed equ globals___0+49
7626                    ; line_number = 1247
7627                    ;  returns_nothing
7628            
7629                    ; # This procedure will set {motor1_speed}, {motor1_on_mask}, and
7630                    ; # {motor1_pulse_width} from {speed}.
7631            
7632                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7633                    ; line_number = 1252
7634                    ;  motor1_speed := speed
7635                    ;info   1252, 1460
7636 05b4 0851          movf    speed_set__speed,w
7637 05b5 00ad          movwf   motor1_speed
7638                    ; line_number = 1253
7639                    ;  if motor1_speed@7 start
7640                    ;info   1253, 1462
7641 0000002d = speed_set__select__4___byte equ motor1_speed
7642 00000007 = speed_set__select__4___bit equ 7
7643                    ; =>bit_code_emit@symbol(): sym=speed_set__select__4
7644                    ; No 1TEST: true.size=8 false.size=14
7645                    ; No 2TEST: true.size=8 false.size=14
7646                    ; 2GOTO: Single test with two GOTO's
7647 05b6 1fad          btfss   speed_set__select__4___byte, speed_set__select__4___bit
7648 05b7 2dc1          goto    speed_set__5
7649                    ; # Reverse direction:
7650                    ; line_number = 1255
7651                    ;  if motor_reverse start
7652                    ;info   1255, 1464
7653                    ; =>bit_code_emit@symbol(): sym=motor_reverse
7654                    ; No 1TEST: true.size=1 false.size=1
7655                    ; 2TEST: two tests with code in both delay slots
7656 05b8 1825          btfsc   motor_reverse___byte, motor_reverse___bit
7657                    ; line_number = 1256
7658                    ; motor1_on_mask := 1
7659                    ;info   1256, 1465
7660 05b9 3001          movlw   1
7661 05ba 1c25          btfss   motor_reverse___byte, motor_reverse___bit
7662                    ; line_number = 1258
7663                    ; motor1_on_mask := 2
7664                    ;info   1258, 1467
7665 05bb 3002          movlw   2
7666 05bc 00ae          movwf   motor1_on_mask
7667                    ; line_number = 1255
7668                    ;  if motor_reverse done
7669                    ; line_number = 1259
7670                    ; motor1_pulse_width := speed << 1
7671                    ;info   1259, 1469
7672 05bd 0d51          rlf     speed_set__speed,w
7673 05be 00af          movwf   motor1_pulse_width
7674 05bf 102f          bcf     motor1_pulse_width, 0
7675                    ; Recombine code1_bit_states != code2_bit_states
7676 05c0 2dcf          goto    speed_set__6
7677                    ; 2GOTO: Starting code 2
7678   05c1 :   speed_set__5:
7679                    ; line_number = 1261
7680                    ; if speed = 0 start
7681                    ;info   1261, 1473
7682                    ; Left minus Right
7683 05c1 0851          movf    speed_set__speed,w
7684                    ; =>bit_code_emit@symbol(): sym=__z
7685                    ; No 1TEST: true.size=1 false.size=5
7686                    ; No 2TEST: true.size=1 false.size=5
7687                    ; 2GOTO: Single test with two GOTO's
7688 05c2 1d03          btfss   __z___byte, __z___bit
7689 05c3 2dc6          goto    speed_set__1
7690                    ; # Stopped
7691                    ; line_number = 1263
7692                    ;  motor1_on_mask := 0
7693                    ;info   1263, 1476
7694 05c4 01ae          clrf    motor1_on_mask
7695 05c5 2dcb          goto    speed_set__2
7696                    ; 2GOTO: Starting code 2
7697   05c6 :   speed_set__1:
7698                    ; # Forward direction:
7699                    ; line_number = 1266
7700                    ;  if motor_reverse start
7701                    ;info   1266, 1478
7702                    ; =>bit_code_emit@symbol(): sym=motor_reverse
7703                    ; No 1TEST: true.size=1 false.size=1
7704                    ; 2TEST: two tests with code in both delay slots
7705 05c6 1825          btfsc   motor_reverse___byte, motor_reverse___bit
7706                    ; line_number = 1267
7707                    ; motor1_on_mask := 2
7708                    ;info   1267, 1479
7709 05c7 3002          movlw   2
7710 05c8 1c25          btfss   motor_reverse___byte, motor_reverse___bit
7711                    ; line_number = 1269
7712                    ; motor1_on_mask := 1
7713                    ;info   1269, 1481
7714 05c9 3001          movlw   1
7715 05ca 00ae          movwf   motor1_on_mask
7716                    ; line_number = 1266
7717                    ;  if motor_reverse done
7718   05cb :   speed_set__2:
7719                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
7720                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
7721                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7722                    ; line_number = 1261
7723                    ; if speed = 0 done
7724                    ; line_number = 1270
7725                    ; motor1_pulse_width := 0xff - (speed << 1)
7726                    ;info   1270, 1483
7727 0000006a = speed_set__3 equ globals___0+74
7728 05cb 0d51          rlf     speed_set__speed,w
7729 05cc 39fe          andlw   254
7730 05cd 3cff          sublw   255
7731 05ce 00af          movwf   motor1_pulse_width
7732            
7733            
7734   05cf :   speed_set__6:
7735                    ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
7736                    ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7737                    ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
7738                    ; line_number = 1253
7739                    ;  if motor1_speed@7 done
7740                    ; delay after procedure statements=non-uniform
7741                    ; Implied return
7742 05cf 3400          retlw   0
7743            
7744            
7745            
7746            
7747                    ; # FIXME: These two routines are directly copied from rb2_pic16f688.ucl
7748                    ; # and should be included via a library command.   Alas, the rb2_pic16f688.ucl
7749                    ; # library also include rb2bus.ucl, which we do not want!!!
7750            
7751                    ; line_number = 1277
7752                    ; constant rb2bus_eedata_address = 0xfe
7753 000000fe = rb2bus_eedata_address equ 254
7754            
7755                    ; line_number = 1279
7756                    ;info   1279, 1488
7757                    ; procedure rb2bus_eedata_read
7758   05d0 :   rb2bus_eedata_read:
7759                    ; arguments_none
7760                    ; line_number = 1281
7761                    ;  returns byte
7762            
7763                    ; # This procedure will return the address stored in EEData.  If
7764                    ; # there is no data, 0 is returned.
7765            
7766                    ; line_number = 1286
7767                    ;  local temp1 byte
7768 00000052 = rb2bus_eedata_read__temp1 equ globals___0+50
7769                    ; line_number = 1287
7770                    ;  local temp2 byte
7771 00000053 = rb2bus_eedata_read__temp2 equ globals___0+51
7772            
7773                    ; # Read the first byte (the address):
7774                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7775                    ; line_number = 1290
7776                    ;  _eecon1 := 0
7777                    ;info   1290, 1488
7778 05d0 1683          bsf     __rp0___byte, __rp0___bit
7779 05d1 019c          clrf    _eecon1
7780                    ; line_number = 1291
7781                    ;  _eeadr := rb2bus_eedata_address
7782                    ;info   1291, 1490
7783 05d2 30fe          movlw   254
7784 05d3 009b          movwf   _eeadr
7785                    ; line_number = 1292
7786                    ;  _rd := _true
7787                    ;info   1292, 1492
7788 05d4 141c          bsf     _rd___byte, _rd___bit
7789                    ; line_number = 1293
7790                    ;  temp1 := _eedat
7791                    ;info   1293, 1493
7792 05d5 081a          movf    _eedat,w
7793 05d6 1283          bcf     __rp0___byte, __rp0___bit
7794 05d7 00d2          movwf   rb2bus_eedata_read__temp1
7795            
7796                    ; # Read the second byte (the 1'z complement)
7797                    ; line_number = 1296
7798                    ;  _eeadr := _eeadr + 1
7799                    ;info   1296, 1496
7800 05d8 1683          bsf     __rp0___byte, __rp0___bit
7801 05d9 0a9b          incf    _eeadr,f
7802                    ; line_number = 1297
7803                    ;  _rd := _true
7804                    ;info   1297, 1498
7805 05da 141c          bsf     _rd___byte, _rd___bit
7806                    ; line_number = 1298
7807                    ;  temp2 := _eedat
7808                    ;info   1298, 1499
7809 05db 081a          movf    _eedat,w
7810 05dc 1283          bcf     __rp0___byte, __rp0___bit
7811 05dd 00d3          movwf   rb2bus_eedata_read__temp2
7812            
7813                    ; # If they are 1's complement of one another, they are valid:
7814                    ; line_number = 1301
7815                    ;  if temp1 = (0xff ^ temp2) start
7816                    ;info   1301, 1502
7817                    ; Left minus Right
7818 05de 0953          comf    rb2bus_eedata_read__temp2,w
7819 05df 0252          subwf   rb2bus_eedata_read__temp1,w
7820                    ; =>bit_code_emit@symbol(): sym=__z
7821                    ; No 1TEST: true.size=2 false.size=0
7822                    ; No 2TEST: true.size=2 false.size=0
7823                    ; 1GOTO: Single test with GOTO
7824 05e0 1d03          btfss   __z___byte, __z___bit
7825 05e1 2de4          goto    rb2bus_eedata_read__1
7826                    ; # Return the valid address:
7827                    ; line_number = 1303
7828                    ;  return temp1 start
7829                    ; line_number = 1303
7830                    ;info   1303, 1506
7831 05e2 0852          movf    rb2bus_eedata_read__temp1,w
7832 05e3 0008          return  
7833                    ; line_number = 1303
7834                    ;  return temp1 done
7835            
7836                    ; Recombine size1 = 0 || size2 = 0
7837   05e4 :   rb2bus_eedata_read__1:
7838                    ; line_number = 1301
7839                    ;  if temp1 = (0xff ^ temp2) done
7840                    ; # They are not 1's complement, so return 0 as an error:
7841                    ; line_number = 1306
7842                    ;  return 0 start
7843                    ; line_number = 1306
7844                    ;info   1306, 1508
7845 05e4 3400          retlw   0
7846                    ; line_number = 1306
7847                    ;  return 0 done
7848            
7849            
7850                    ; delay after procedure statements=non-uniform
7851            
7852            
7853            
7854            
7855                    ; line_number = 1309
7856                    ;info   1309, 1509
7857                    ; procedure rb2bus_eedata_write
7858   05e5 :   rb2bus_eedata_write:
7859                    ; Last argument is sitting in W; save into argument variable
7860 05e5 00d4          movwf   rb2bus_eedata_write__address
7861                    ; delay=4294967295
7862                    ; line_number = 1310
7863                    ; argument address byte
7864 00000054 = rb2bus_eedata_write__address equ globals___0+52
7865                    ; line_number = 1311
7866                    ;  returns_nothing
7867            
7868                    ; # This procedure will write {address} into the EEData.  The
7869                    ; # microcontroller pauses while the EEData is written.
7870            
7871                    ; # Clear out the {_eecon1} register
7872                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
7873                    ; line_number = 1317
7874                    ;  _eecon1 := 0
7875                    ;info   1317, 1510
7876 05e6 1683          bsf     __rp0___byte, __rp0___bit
7877 05e7 019c          clrf    _eecon1
7878                    ; line_number = 1318
7879                    ;  _eeadr := rb2bus_eedata_address
7880                    ;info   1318, 1512
7881 05e8 30fe          movlw   254
7882 05e9 009b          movwf   _eeadr
7883                    ; line_number = 1319
7884                    ;  _eedat := address
7885                    ;info   1319, 1514
7886 05ea 1283          bcf     __rp0___byte, __rp0___bit
7887 05eb 0854          movf    rb2bus_eedata_write__address,w
7888 05ec 1683          bsf     __rp0___byte, __rp0___bit
7889 05ed 009a          movwf   _eedat
7890            
7891                    ; # Write 2 bytes ({address} followed by {address}^0xff):
7892                    ; line_number = 1322
7893                    ;  loop_exactly 2 start
7894                    ;info   1322, 1518
7895 0000006b = rb2bus_eedata_write__1 equ globals___0+75
7896 05ee 3002          movlw   2
7897 05ef 1283          bcf     __rp0___byte, __rp0___bit
7898 05f0 00eb          movwf   rb2bus_eedata_write__1
7899   05f1 :   rb2bus_eedata_write__2:
7900                    ; # Set the data to write:
7901            
7902                    ; # Set up the for the write:
7903                    ; line_number = 1326
7904                    ;  _wren := _true
7905                    ;info   1326, 1521
7906 05f1 1683          bsf     __rp0___byte, __rp0___bit
7907 05f2 151c          bsf     _wren___byte, _wren___bit
7908                    ; line_number = 1327
7909                    ;  _gie := _false
7910                    ;info   1327, 1523
7911 05f3 138b          bcf     _gie___byte, _gie___bit
7912                    ; line_number = 1328
7913                    ;  _eecon2 := 0x55
7914                    ;info   1328, 1524
7915 05f4 3055          movlw   85
7916 05f5 009d          movwf   _eecon2
7917                    ; line_number = 1329
7918                    ;  _eecon2 := 0xaa
7919                    ;info   1329, 1526
7920 05f6 30aa          movlw   170
7921 05f7 009d          movwf   _eecon2
7922                    ; # Start the write:
7923                    ; line_number = 1331
7924                    ;  _wr := _true
7925                    ;info   1331, 1528
7926 05f8 149c          bsf     _wr___byte, _wr___bit
7927            
7928                    ; # Wait for write to complete:
7929                    ; line_number = 1334
7930                    ;  while _wr start
7931   05f9 :   rb2bus_eedata_write__3:
7932                    ;info   1334, 1529
7933                    ; =>bit_code_emit@symbol(): sym=_wr
7934                    ; 1TEST: Single test with code in skip slot
7935 05f9 189c          btfsc   _wr___byte, _wr___bit
7936                    ; line_number = 1335
7937                    ; do_nothing
7938                    ;info   1335, 1530
7939            
7940 05fa 2df9          goto    rb2bus_eedata_write__3
7941                    ; Recombine size1 = 0 || size2 = 0
7942                    ; line_number = 1334
7943                    ;  while _wr done
7944                    ; # Disable writing:
7945                    ; line_number = 1338
7946                    ;  _wren := _false
7947                    ;info   1338, 1531
7948 05fb 111c          bcf     _wren___byte, _wren___bit
7949            
7950                    ; # Prepare the second byte of data:
7951                    ; line_number = 1341
7952                    ;  _eeadr := _eeadr + 1
7953                    ;info   1341, 1532
7954 05fc 0a9b          incf    _eeadr,f
7955                    ; line_number = 1342
7956                    ;  _eedat := address ^ 0xff
7957                    ;info   1342, 1533
7958 05fd 1283          bcf     __rp0___byte, __rp0___bit
7959 05fe 0954          comf    rb2bus_eedata_write__address,w
7960 05ff 1683          bsf     __rp0___byte, __rp0___bit
7961 0600 009a          movwf   _eedat
7962            
7963            
7964 0601 1283          bcf     __rp0___byte, __rp0___bit
7965                    ; line_number = 1322
7966                    ;  loop_exactly 2 wrap-up
7967 0602 0beb          decfsz  rb2bus_eedata_write__1,f
7968 0603 2df1          goto    rb2bus_eedata_write__2
7969                    ; line_number = 1322
7970                    ;  loop_exactly 2 done
7971                    ; delay after procedure statements=non-uniform
7972                    ; Implied return
7973 0604 3400          retlw   0
7974            
7975            
7976            
7977            
7978                    ; # 24-bit convert to from float code:
7979 00000058 = xyz__0return equ globals___0+56
7980                    ; line_number = 1346
7981                    ;info   1346, 1541
7982                    ; procedure xyz
7983   0605 :   xyz:
7984                    ; Last argument is sitting in W; save into argument variable
7985 0605 00d7          movwf   xyz__low
7986                    ; delay=4294967295
7987                    ; line_number = 1347
7988                    ; argument high byte
7989 00000055 = xyz__high equ globals___0+53
7990                    ; line_number = 1348
7991                    ; argument middle byte
7992 00000056 = xyz__middle equ globals___0+54
7993                    ; line_number = 1349
7994                    ; argument low byte
7995 00000057 = xyz__low equ globals___0+55
7996                    ; line_number = 1350
7997                    ;  returns float32
7998                    ; line_number = 1351
7999                    ;  return_suppress
8000            
8001                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
8002                    ; line_number = 1353
8003                    ;  assemble
8004                    ;info   1353, 1542
8005                    ; # Grab the high byte:
8006                    ; line_number = 1355
8007                    ;info   1355, 1542
8008 0606 0855          movf    xyz__high,w
8009                    ; line_number = 1356
8010                    ;info   1356, 1543
8011                    ; databank xyz, _float32_aargb0
8012 0607 1683          bsf     __rp0___byte, __rp0___bit
8013                    ; line_number = 1357
8014                    ;info   1357, 1544
8015 0608 00a7          movwf   _float32_aargb0
8016            
8017                    ; # Grab the middle byte:
8018                    ; line_number = 1360
8019                    ;info   1360, 1545
8020                    ; databank _float32_aargb0, xyz
8021 0609 1283          bcf     __rp0___byte, __rp0___bit
8022                    ; line_number = 1361
8023                    ;info   1361, 1546
8024 060a 0856          movf    xyz__middle,w
8025                    ; line_number = 1362
8026                    ;info   1362, 1547
8027                    ; databank xyz, _float32_aargb1
8028 060b 1683          bsf     __rp0___byte, __rp0___bit
8029                    ; line_number = 1363
8030                    ;info   1363, 1548
8031 060c 00a6          movwf   _float32_aargb1
8032            
8033                    ; # Grab the low byte:
8034                    ; line_number = 1366
8035                    ;info   1366, 1549
8036                    ; databank _float32_aargb1, xyz
8037 060d 1283          bcf     __rp0___byte, __rp0___bit
8038                    ; line_number = 1367
8039                    ;info   1367, 1550
8040 060e 0857          movf    xyz__low,w
8041                    ; line_number = 1368
8042                    ;info   1368, 1551
8043                    ; databank xyz, _float32_aargb2
8044 060f 1683          bsf     __rp0___byte, __rp0___bit
8045                    ; line_number = 1369
8046                    ;info   1369, 1552
8047 0610 00a5          movwf   _float32_aargb2
8048            
8049                    ; # Do the conversion to float32:
8050                    ; line_number = 1372
8051                    ;info   1372, 1553
8052                    ; databank _float32_aargb2, _float32_from_integer24
8053                    ; line_number = 1373
8054                    ;info   1373, 1553
8055                    ; codebank xyz, _float32_from_integer24
8056 0611 158a          bsf     __cb0___byte, __cb0___bit
8057                    ; line_number = 1374
8058                    ;info   1374, 1554
8059 0612 2000          call    _float32_from_integer24
8060            
8061                    ; # Result is in the float32 A "register"l not move to 0return:
8062                    ; line_number = 1377
8063                    ;info   1377, 1555
8064 0613 302c          movlw   xyz__0return>>1
8065                    ; line_number = 1378
8066                    ;info   1378, 1556
8067                    ; databank _float32_from_integer24, _float32_pointer_store
8068                    ; line_number = 1379
8069                    ;info   1379, 1556
8070                    ; codebank _float32_from_integer24, _float32_pointer_store
8071                    ; line_number = 1380
8072                    ;info   1380, 1556
8073 0614 2337          call    _float32_pointer_store
8074            
8075                    ; # Get out code and data banks back home:
8076                    ; line_number = 1383
8077                    ;info   1383, 1557
8078                    ; databank _float32_pointer_store, xyz
8079 0615 1283          bcf     __rp0___byte, __rp0___bit
8080                    ; line_number = 1384
8081                    ;info   1384, 1558
8082                    ; codebank _float32_pointer_store, xyz
8083 0616 118a          bcf     __cb0___byte, __cb0___bit
8084                    ; line_number = 1385
8085                    ;info   1385, 1559
8086 0617 0008          return  
8087            
8088                    ; delay after procedure statements=non-uniform
8089                    ; Return instruction suppressed by 'return_suppress'
8090            
8091            
8092            
8093            
8094                    ; # 24-bit convert to from float code:
8095                    ; line_number = 1388
8096                    ;info   1388, 1560
8097                    ; procedure zyx
8098   0618 :   zyx:
8099                    ; line_number = 1389
8100                    ; argument value float32
8101 0000005c = zyx__value equ globals___0+60
8102                    ; line_number = 1390
8103                    ;  returns byte
8104                    ; line_number = 1391
8105                    ;  return_suppress
8106            
8107                    ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
8108                    ; line_number = 1393
8109                    ;  assemble
8110                    ;info   1393, 1560
8111                    ; line_number = 1394
8112                    ;info   1394, 1560
8113 0618 302e          movlw   zyx__value>>1
8114                    ; line_number = 1395
8115                    ;info   1395, 1561
8116                    ; databank zyx, _float32_pointer_load
8117 0619 1683          bsf     __rp0___byte, __rp0___bit
8118                    ; line_number = 1396
8119                    ;info   1396, 1562
8120                    ; codebank zyx, _float32_pointer_load
8121 061a 158a          bsf     __cb0___byte, __cb0___bit
8122                    ; line_number = 1397
8123                    ;info   1397, 1563
8124 061b 22d8          call    _float32_pointer_load
8125            
8126                    ; line_number = 1399
8127                    ;info   1399, 1564
8128                    ; databank _float32_pointer_load, _float32_integer24_convert
8129                    ; line_number = 1400
8130                    ;info   1400, 1564
8131                    ; codebank _float32_pointer_load, _float32_integer24_convert
8132                    ; line_number = 1401
8133                    ;info   1401, 1564
8134 061c 208d          call    _float32_integer24_convert
8135                    ; line_number = 1402
8136                    ;info   1402, 1565
8137                    ; codebank _float32_integer24_convert, zyx
8138 061d 118a          bcf     __cb0___byte, __cb0___bit
8139            
8140                    ; line_number = 1404
8141                    ;info   1404, 1566
8142                    ; databank _float32_integer24_convert, _float32_aargb0
8143                    ; line_number = 1405
8144                    ;info   1405, 1566
8145 061e 0827          movf    _float32_aargb0,w
8146                    ; line_number = 1406
8147                    ;info   1406, 1567
8148                    ; databank _float32_aargb0, high
8149 061f 1283          bcf     __rp0___byte, __rp0___bit
8150                    ; line_number = 1407
8151                    ;info   1407, 1568
8152 0620 00a2          movwf   high
8153            
8154                    ; line_number = 1409
8155                    ;info   1409, 1569
8156                    ; databank high, _float32_aargb1
8157 0621 1683          bsf     __rp0___byte, __rp0___bit
8158                    ; line_number = 1410
8159                    ;info   1410, 1570
8160 0622 0826          movf    _float32_aargb1,w
8161                    ; line_number = 1411
8162                    ;info   1411, 1571
8163                    ; databank _float32_aargb0, middle
8164 0623 1283          bcf     __rp0___byte, __rp0___bit
8165                    ; line_number = 1412
8166                    ;info   1412, 1572
8167 0624 00a3          movwf   middle
8168            
8169                    ; line_number = 1414
8170                    ;info   1414, 1573
8171                    ; databank middle, _float32_aargb2
8172 0625 1683          bsf     __rp0___byte, __rp0___bit
8173                    ; line_number = 1415
8174                    ;info   1415, 1574
8175 0626 0825          movf    _float32_aargb2,w
8176                    ; line_number = 1416
8177                    ;info   1416, 1575
8178                    ; databank _float32_aargb0, low
8179 0627 1283          bcf     __rp0___byte, __rp0___bit
8180                    ; line_number = 1417
8181                    ;info   1417, 1576
8182 0628 00a4          movwf   low
8183            
8184                    ; line_number = 1419
8185                    ;info   1419, 1577
8186                    ; databank low, zyx
8187            
8188                    ; line_number = 1421
8189                    ;info   1421, 1577
8190 0629 0008          return  
8191            
8192            
8193            
8194                    ; delay after procedure statements=non-uniform
8195                    ; Return instruction suppressed by 'return_suppress'
8196            
8197            
8198            
8199            
8200                    ; line_number = 1425
8201                    ; string index2mask = "\1,2,4,8,16,32,64,128\" start
8202                    ; index2mask = '\1,2,4,8,16\ @\128\'
8203   062a :   index2mask:
8204                    ; Temporarily save index into FSR
8205 062a 0084          movwf   __fsr
8206                    ; Initialize PCLATH to point to this code page
8207 062b 3006          movlw   index2mask___base>>8
8208 062c 008a          movwf   __pclath
8209                    ; Restore index from FSR
8210 062d 0804          movf    __fsr,w
8211 062e 3e30          addlw   index2mask___base
8212                    ; Index to the correct return value
8213 062f 0082          movwf   __pcl
8214                    ; page_group 8
8215   0630 :   index2mask___base:
8216 0630 3401          retlw   1
8217 0631 3402          retlw   2
8218 0632 3404          retlw   4
8219 0633 3408          retlw   8
8220 0634 3410          retlw   16
8221 0635 3420          retlw   32
8222 0636 3440          retlw   64
8223 0637 3480          retlw   128
8224                    ; line_number = 1425
8225                    ; string index2mask = "\1,2,4,8,16,32,64,128\" start
8226                    ; line_number = 1426
8227                    ; string id = "\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson" start
8228                    ; id = '\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson'
8229   0638 :   id:
8230                    ; Temporarily save index into FSR
8231 0638 0084          movwf   __fsr
8232                    ; Initialize PCLATH to point to this code page
8233 0639 3006          movlw   id___base>>8
8234 063a 008a          movwf   __pclath
8235                    ; Restore index from FSR
8236 063b 0804          movf    __fsr,w
8237 063c 3e3e          addlw   id___base
8238                    ; Index to the correct return value
8239 063d 0082          movwf   __pcl
8240                    ; page_group 28
8241   063e :   id___base:
8242 063e 3410          retlw   16
8243 063f 3400          retlw   0
8244 0640 3415          retlw   21
8245 0641 3402          retlw   2
8246 0642 3403          retlw   3
8247 0643 340e          retlw   14
8248 0644 344d          retlw   77
8249 0645 3469          retlw   105
8250 0646 3464          retlw   100
8251 0647 3469          retlw   105
8252 0648 344d          retlw   77
8253 0649 346f          retlw   111
8254 064a 3474          retlw   116
8255 064b 346f          retlw   111
8256 064c 3472          retlw   114
8257 064d 3431          retlw   49
8258 064e 3445          retlw   69
8259 064f 342d          retlw   45
8260 0650 3442          retlw   66
8261 0651 3434          retlw   52
8262 0652 3407          retlw   7
8263 0653 3447          retlw   71
8264 0654 3472          retlw   114
8265 0655 3461          retlw   97
8266 0656 346d          retlw   109
8267 0657 3473          retlw   115
8268 0658 346f          retlw   111
8269 0659 346e          retlw   110
8270                    ; line_number = 1426
8271                    ; string id = "\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson" start
8272            
8273                    ; # {state} is defined by another file:
8274                    ; line_number = 1429
8275                    ; library states entered
8276            
8277                    ; # Copyright (c) 2009 by Wayne C. Gramlich
8278                    ; # All rights reserved
8279            
8280                    ; # A quadrature encoder is a state machine that cycles through
8281                    ; # 4 states in the following possible cycle:
8282                    ; #
8283                    ; #     00 <=> 01
8284                    ; #     ^      ^
8285                    ; #     |      |
8286                    ; #     v      v
8287                    ; #     10 <=> 11
8288                    ; #
8289                    ; # This is also known as a 2-bit Gray code.  The bit on the left
8290                    ; # is called the A channel and the bit on the right is called the
8291                    ; # B channel.  Typically, a counter is incremented for each
8292                    ; # clockwise state transistion and decremented for each counter
8293                    ; # clockwise transistion.  The following state transistions show the
8294                    ; # counter increments and decrements:
8295                    ; #
8296                    ; #  00 => 01 => 11 => 10 => 00 => 01 => 00 => 10 => 00
8297                    ; #     +1    +1    +1    +1    +1    -1    -1    +1
8298                    ; #   0     1     2     3     4     5     4     3     4 
8299                    ; #
8300                    ; # Quadrature encoding does not allow two state transitions:
8301                    ; #
8302                    ; #     00 <=> 11   and    01 <=> 10
8303                    ; #
8304                    ; # because it is ambigous whether or not to increment or decrement
8305                    ; # the counter.  None-the-less, sometimes such a state transition
8306                    ; # occurs by accident.  The solution is to double the number of states
8307                    ; # from 4 to 8 and remember whether or not the last operation was an
8308                    ; # increment or a decrement.  Thus, the 8 new states are {+00},
8309                    ; # {+01}, {+11}, {+10}, {-00}, {-01}, {-11}, and {-11}.  If the
8310                    ; # Current state is {+01} and the new inputs are 11, then the new
8311                    ; # state is {+11} and the counter is incremented.  If the current
8312                    ; # state is {+01} and the new inputs are 00, the next state is {-00}
8313                    ; # and the counter is decremented; we changed from {+} to {-}.
8314                    ; # Lastly, if we are in the state {+01} and the new inputs are 10,
8315                    ; # we have an illegal/ambiguous transition that is resolved by
8316                    ; # transitioning to {+10} and incrementing the counter by 2.
8317                    ; # 
8318                    ; # This file contains the state transition table between all 8 of
8319                    ; # these states along with the operations to perform.  It a table
8320                    ; # that is 32 bytes long.   The current 8-bit state is concatenated
8321                    ; # with two bits of input (for a total of 5 bits).  This 5 bit
8322                    ; # quantity indexes into a 32 byte table (2^5=32) to determine the
8323                    ; # new state and whether to incement or decrement the counter by 1
8324                    ; # or 2.  The index is constructed as follows:
8325                    ; # 
8326                    ; #     ABmab
8327                    ; # 
8328                    ; # where {A} and {B} are the new inputs, and {m}, {a] and {b}
8329                    ; # are the current 8-bit state, where m=0 for + and m=1 for -.
8330                    ; # where {A} and {B} are the new inputs, and {m}, {a] and {b}
8331                    ; # Each entry in the table looks as follows:
8332                    ; # 
8333                    ; #     iIdD 0mab
8334                    ; # 
8335                    ; # where {i} means increment by 1, and {I} means increment by 2,
8336                    ; # where {d} means decrement by 1, and {D} means decrement by 2,
8337                    ; # and {mab} is the new state.
8338                    ; # 
8339                    ; # Here is the {state vector}:
8340            
8341                    ; # [0= 00 000]: 0=0000 0000 0=>0
8342                    ; # [1= 00 001]: 32=0010 0000 1=>0
8343                    ; # [2= 00 010]: 128=1000 0000 3=>0
8344                    ; # [3= 00 011]: 192=1100 0000 2=>0
8345                    ; # [4= 00 100]: 4=0000 0100 0=>0
8346                    ; # [5= 00 101]: 36=0010 0100 1=>0
8347                    ; # [6= 00 110]: 132=1000 0100 3=>0
8348                    ; # [7= 00 111]: 52=0011 0100 2=>0
8349                    ; # [8= 01 000]: 129=1000 0001 0=>1
8350                    ; # [9= 01 001]: 1=0000 0001 1=>1
8351                    ; # [10= 01 010]: 193=1100 0001 3=>1
8352                    ; # [11= 01 011]: 33=0010 0001 2=>1
8353                    ; # [12= 01 100]: 133=1000 0101 0=>1
8354                    ; # [13= 01 101]: 5=0000 0101 1=>1
8355                    ; # [14= 01 110]: 53=0011 0101 3=>1
8356                    ; # [15= 01 111]: 37=0010 0101 2=>1
8357                    ; # [16= 10 000]: 34=0010 0010 0=>3
8358                    ; # [17= 10 001]: 194=1100 0010 1=>3
8359                    ; # [18= 10 010]: 2=0000 0010 3=>3
8360                    ; # [19= 10 011]: 130=1000 0010 2=>3
8361                    ; # [20= 10 100]: 38=0010 0110 0=>3
8362                    ; # [21= 10 101]: 54=0011 0110 1=>3
8363                    ; # [22= 10 110]: 6=0000 0110 3=>3
8364                    ; # [23= 10 111]: 134=1000 0110 2=>3
8365                    ; # [24= 11 000]: 195=1100 0011 0=>2
8366                    ; # [25= 11 001]: 131=1000 0011 1=>2
8367                    ; # [26= 11 010]: 35=0010 0011 3=>2
8368                    ; # [27= 11 011]: 3=0000 0011 2=>2
8369                    ; # [28= 11 100]: 55=0011 0111 0=>2
8370                    ; # [29= 11 101]: 135=1000 0111 1=>2
8371                    ; # [30= 11 110]: 39=0010 0111 3=>2
8372                    ; # [31= 11 111]: 7=0000 0111 2=>2
8373                    ; buffer = 'states'
8374                    ; line_number = 99
8375                    ; string states = "\0,32,128,192,4,36,132,52,129,1,193,33,133,5,53,37,34,194,2,130,38,54,6,134,195,131,35,3,55,135,39,7\" start
8376                    ; states = '\0\ \128,192,4\_\132\4\129,1,193\!\133,5\5%"\194,2,130\&6\6,134,195,131\#\3\7\135,39,7\'
8377   065a :   states:
8378                    ; Temporarily save index into FSR
8379 065a 0084          movwf   __fsr
8380                    ; Initialize PCLATH to point to this code page
8381 065b 3006          movlw   states___base>>8
8382 065c 008a          movwf   __pclath
8383                    ; Restore index from FSR
8384 065d 0804          movf    __fsr,w
8385 065e 3e60          addlw   states___base
8386                    ; Index to the correct return value
8387 065f 0082          movwf   __pcl
8388                    ; page_group 32
8389   0660 :   states___base:
8390 0660 3400          retlw   0
8391 0661 3420          retlw   32
8392 0662 3480          retlw   128
8393 0663 34c0          retlw   192
8394 0664 3404          retlw   4
8395 0665 3424          retlw   36
8396 0666 3484          retlw   132
8397 0667 3434          retlw   52
8398 0668 3481          retlw   129
8399 0669 3401          retlw   1
8400 066a 34c1          retlw   193
8401 066b 3421          retlw   33
8402 066c 3485          retlw   133
8403 066d 3405          retlw   5
8404 066e 3435          retlw   53
8405 066f 3425          retlw   37
8406 0670 3422          retlw   34
8407 0671 34c2          retlw   194
8408 0672 3402          retlw   2
8409 0673 3482          retlw   130
8410 0674 3426          retlw   38
8411 0675 3436          retlw   54
8412 0676 3406          retlw   6
8413 0677 3486          retlw   134
8414 0678 34c3          retlw   195
8415 0679 3483          retlw   131
8416 067a 3423          retlw   35
8417 067b 3403          retlw   3
8418 067c 3437          retlw   55
8419 067d 3487          retlw   135
8420 067e 3427          retlw   39
8421 067f 3407          retlw   7
8422                    ; line_number = 99
8423                    ; string states = "\0,32,128,192,4,36,132,52,129,1,193,33,133,5,53,37,34,194,2,130,38,54,6,134,195,131,35,3,55,135,39,7\" start
8424            
8425                    ; buffer = 'midimotor1e'
8426                    ; line_number = 1429
8427                    ; library states exited
8428            
8429            
8430            
8431                    ; Code bank 1; Start address: 2048; End address: 4095
8432   0800 :           org     2048
8433                    ; Appending 27 delayed procedures to code bank 1
8434                    ; buffer = '_float32_base'
8435                    ; line_number = 374
8436                    ;info   374, 2048
8437                    ; procedure _float32_from_integer24
8438   0800 :   _float32_from_integer24:
8439                    ; arguments_none
8440                    ; line_number = 376
8441                    ;  returns_nothing
8442                    ; line_number = 377
8443                    ;  return_suppress
8444            
8445                    ; # Integer to float conversion
8446                    ; # Input: 24 bit 2's complement integer right justified in
8447                    ; #        _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
8448                    ; # Use: call flo2432()
8449                    ; # Output: 32 bit floating point number in _float32_aexp, _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
8450                    ; # Result: _FLOAT32_AARG  <--  FLOAT( _FLOAT32_AARG )
8451                    ; # Max Timing:	14+90 = 104 clks	SAT = 0
8452                    ; #			14+96 = 110 clks	SAT = 1
8453                    ; # Min Timing:	6+28 = 34 clks		_FLOAT32_AARG = 0
8454                    ; #			6+18 = 24 clks
8455                    ; # PM: 14+38 = 52	DM: 7
8456            
8457                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
8458                    ; line_number = 391
8459                    ;  assemble
8460                    ;info   391, 2048
8461                    ; line_number = 392
8462   0800 :   _float32_flo32:
8463                    ; # initialize exponent and add bias
8464                    ; line_number = 394
8465                    ;info   394, 2048
8466 0800 3096          movlw   _float32_expbias_23
8467                    ; line_number = 395
8468                    ;info   395, 2049
8469 0801 00a8          movwf   _float32_exp
8470                    ; line_number = 396
8471                    ;info   396, 2050
8472 0802 01a9          clrf    _float32_sign
8473                    ; # test sign
8474                    ; line_number = 398
8475                    ;info   398, 2051
8476 0803 1fa7          btfss   _float32_aargb0, _float32_msb
8477                    ; line_number = 399
8478                    ;info   399, 2052
8479 0804 280e          goto    _float32_normalize
8480                    ; # if < 0, negate and set MSB in _float32_sign
8481                    ; line_number = 401
8482                    ;info   401, 2053
8483 0805 09a5          comf    _float32_aargb2,f
8484                    ; line_number = 402
8485                    ;info   402, 2054
8486 0806 09a6          comf    _float32_aargb1,f
8487                    ; line_number = 403
8488                    ;info   403, 2055
8489 0807 09a7          comf    _float32_aargb0,f
8490                    ; line_number = 404
8491                    ;info   404, 2056
8492 0808 0aa5          incf    _float32_aargb2,f
8493                    ; line_number = 405
8494                    ;info   405, 2057
8495 0809 1903          btfsc   _float32_status, _float32_z
8496                    ; line_number = 406
8497                    ;info   406, 2058
8498 080a 0aa6          incf    _float32_aargb1,f
8499                    ; line_number = 407
8500                    ;info   407, 2059
8501 080b 1903          btfsc   _float32_status, _float32_z
8502                    ; line_number = 408
8503                    ;info   408, 2060
8504 080c 0aa7          incf    _float32_aargb0,f
8505                    ; line_number = 409
8506                    ;info   409, 2061
8507 080d 17a9          bsf     _float32_sign, _float32_msb
8508                    ; # Note that this procedure runs into _float_normalize
8509                    ; #goto _float_normalize
8510            
8511            
8512                    ; delay after procedure statements=non-uniform
8513                    ; Return instruction suppressed by 'return_suppress'
8514            
8515            
8516            
8517            
8518                    ; line_number = 414
8519                    ;info   414, 2062
8520                    ; procedure _float32_normalize
8521   080e :   _float32_normalize:
8522                    ; arguments_none
8523                    ; line_number = 416
8524                    ;  returns_nothing
8525                    ; line_number = 417
8526                    ;  return_suppress
8527            
8528                    ; # Normalization routine
8529                    ; # Input:  32 bit unnormalized floating point number in
8530                    ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, with sign in _float32_sign msb
8531                    ; # Use: call _float32_normalize()
8532                    ; # Output: 32 bit normalized floating point number in
8533                    ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
8534                    ; # Result: _FLOAT32_AARG  <--  NORMALIZE( _FLOAT32_AARG )
8535                    ; # Max Timing:	21+6+7*8+7 = 90 clks	SAT = 0
8536                    ; #			21+6+7*8+1+12 = 96 clks	SAT = 1
8537                    ; # Min Timing:	22+6 = 28 clks		_FLOAT32_AARG = 0
8538                    ; #			5+9+4 = 18 clks
8539                    ; # PM: 38	DM: 7
8540            
8541                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
8542                    ; line_number = 432
8543                    ;  assemble
8544                    ;info   432, 2062
8545                    ; #:nrm3232
8546                    ; line_number = 434
8547   080e :   _float32_nrm32:
8548                    ; # lear exponent decrement
8549                    ; line_number = 436
8550                    ;info   436, 2062
8551 080e 01b3          clrf    _float32_temp
8552                    ; # test if highbyte=0
8553                    ; line_number = 438
8554                    ;info   438, 2063
8555 080f 0827          movf    _float32_aargb0,w
8556                    ; line_number = 439
8557                    ;info   439, 2064
8558 0810 1d03          btfss   _float32_status, _float32_z
8559                    ; line_number = 440
8560                    ;info   440, 2065
8561 0811 2823          goto    _float32_norm3232
8562                    ; # if so, shift 8 bits by move
8563                    ; line_number = 442
8564                    ;info   442, 2066
8565 0812 0826          movf    _float32_aargb1,w
8566                    ; line_number = 443
8567                    ;info   443, 2067
8568 0813 00a7          movwf   _float32_aargb0
8569                    ; line_number = 444
8570                    ;info   444, 2068
8571 0814 0825          movf    _float32_aargb2,w
8572                    ; line_number = 445
8573                    ;info   445, 2069
8574 0815 00a6          movwf   _float32_aargb1
8575                    ; line_number = 446
8576                    ;info   446, 2070
8577 0816 01a5          clrf    _float32_aargb2
8578                    ; # increase decrement by 8
8579                    ; line_number = 448
8580                    ;info   448, 2071
8581 0817 15b3          bsf     _float32_temp, 3
8582            
8583                    ; # test if highbyte=0
8584                    ; line_number = 451
8585                    ;info   451, 2072
8586 0818 0827          movf    _float32_aargb0,w
8587                    ; line_number = 452
8588                    ;info   452, 2073
8589 0819 1d03          btfss   _float32_status, _float32_z
8590                    ; line_number = 453
8591                    ;info   453, 2074
8592 081a 2823          goto    _float32_norm3232
8593                    ; # if so, shift 8 bits by move
8594                    ; line_number = 455
8595                    ;info   455, 2075
8596 081b 0826          movf    _float32_aargb1,w
8597                    ; line_number = 456
8598                    ;info   456, 2076
8599 081c 00a7          movwf   _float32_aargb0
8600                    ; line_number = 457
8601                    ;info   457, 2077
8602 081d 01a6          clrf    _float32_aargb1
8603                    ; # increase decrement by 8
8604                    ; line_number = 459
8605                    ;info   459, 2078
8606 081e 11b3          bcf     _float32_temp, 3
8607                    ; line_number = 460
8608                    ;info   460, 2079
8609 081f 1633          bsf     _float32_temp, 4
8610            
8611                    ; # if highbyte=0, result=0
8612                    ; line_number = 463
8613                    ;info   463, 2080
8614 0820 0827          movf    _float32_aargb0,w
8615                    ; line_number = 464
8616                    ;info   464, 2081
8617 0821 1903          btfsc   _float32_status, _float32_z
8618                    ; line_number = 465
8619                    ;info   465, 2082
8620 0822 2834          goto    _float32_res032
8621            
8622                    ; line_number = 467
8623   0823 :   _float32_norm3232:
8624                    ; line_number = 468
8625                    ;info   468, 2083
8626 0823 0833          movf    _float32_temp,w
8627                    ; line_number = 469
8628                    ;info   469, 2084
8629 0824 02a8          subwf   _float32_exp,f
8630                    ; line_number = 470
8631                    ;info   470, 2085
8632 0825 1d03          btfss   _float32_status, _float32_z
8633                    ; line_number = 471
8634                    ;info   471, 2086
8635 0826 1c03          btfss   _float32_status, _float32_c
8636                    ; line_number = 472
8637                    ;info   472, 2087
8638 0827 2a3f          goto    _float32_setfun32
8639            
8640                    ; # clear carry bit
8641                    ; line_number = 475
8642                    ;info   475, 2088
8643 0828 1003          bcf     _float32_status, _float32_c
8644            
8645                    ; line_number = 477
8646   0829 :   _float32_norm3232a:
8647                    ; # if MSB=1, normalization done
8648                    ; line_number = 479
8649                    ;info   479, 2089
8650 0829 1ba7          btfsc   _float32_aargb0, _float32_msb
8651                    ; line_number = 480
8652                    ;info   480, 2090
8653 082a 2831          goto    _float32_fixsign32
8654                    ; # otherwise, shift left and
8655                    ; line_number = 482
8656                    ;info   482, 2091
8657 082b 0da5          rlf     _float32_aargb2,f
8658                    ; # decrement exp
8659                    ; line_number = 484
8660                    ;info   484, 2092
8661 082c 0da6          rlf     _float32_aargb1,f
8662                    ; line_number = 485
8663                    ;info   485, 2093
8664 082d 0da7          rlf     _float32_aargb0,f
8665                    ; line_number = 486
8666                    ;info   486, 2094
8667 082e 0ba8          decfsz  _float32_exp,f
8668                    ; line_number = 487
8669                    ;info   487, 2095
8670 082f 2829          goto    _float32_norm3232a
8671            
8672                    ; # underflow if exp=0
8673                    ; line_number = 490
8674                    ;info   490, 2096
8675 0830 2a3f          goto    _float32_setfun32
8676            
8677                    ; line_number = 492
8678   0831 :   _float32_fixsign32:
8679                    ; line_number = 493
8680                    ;info   493, 2097
8681 0831 1fa9          btfss   _float32_sign, _float32_msb
8682                    ; # clear explicit MSB if positive
8683                    ; line_number = 495
8684                    ;info   495, 2098
8685 0832 13a7          bcf     _float32_aargb0, _float32_msb
8686                    ; line_number = 496
8687                    ;info   496, 2099
8688 0833 3400          retlw   0
8689            
8690                    ; # result equals zero
8691                    ; line_number = 499
8692   0834 :   _float32_res032:
8693                    ; line_number = 500
8694                    ;info   500, 2100
8695 0834 01a7          clrf    _float32_aargb0
8696                    ; line_number = 501
8697                    ;info   501, 2101
8698 0835 01a6          clrf    _float32_aargb1
8699                    ; line_number = 502
8700                    ;info   502, 2102
8701 0836 01a5          clrf    _float32_aargb2
8702                    ; line_number = 503
8703                    ;info   503, 2103
8704 0837 01a4          clrf    _float32_aargb3
8705                    ; line_number = 504
8706                    ;info   504, 2104
8707 0838 01a8          clrf    _float32_exp
8708                    ; line_number = 505
8709                    ;info   505, 2105
8710 0839 3400          retlw   0
8711            
8712            
8713                    ; delay after procedure statements=non-uniform
8714                    ; Return instruction suppressed by 'return_suppress'
8715            
8716            
8717            
8718            
8719                    ; line_number = 508
8720                    ;info   508, 2106
8721                    ; procedure _float32_from_integer32
8722   083a :   _float32_from_integer32:
8723                    ; arguments_none
8724                    ; line_number = 510
8725                    ;  returns_nothing
8726                    ; line_number = 511
8727                    ;  return_suppress
8728            
8729                    ; # Integer to float conversion
8730                    ; # Input:  32 bit 2's complement integer right justified in
8731                    ; #          _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
8732                    ; # Use: call flo3232()
8733                    ; # Output: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
8734                    ; # Result: _FLOAT32_AARG  <--  FLOAT( _FLOAT32_AARG )
8735                    ; # Max Timing:	17+112 = 129 clks	RND = 0
8736                    ; #			17+128 = 145 clks	RND = 1, SAT = 0
8737                    ; #			17+135 = 152 clks	RND = 1, SAT = 1
8738                    ; # Min Timing:	6+39 = 45 clks		_FLOAT32_AARG = 0
8739                    ; #			6+22 = 28 clks
8740                    ; # PM: 17+66 = 83	DM: 8
8741            
8742                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
8743                    ; line_number = 526
8744                    ;  assemble
8745                    ;info   526, 2106
8746                    ; # initialize exponent and add bias
8747                    ; line_number = 528
8748                    ;info   528, 2106
8749 083a 309e          movlw   _float32_expbias_31
8750                    ; line_number = 529
8751                    ;info   529, 2107
8752 083b 00a8          movwf   _float32_exp
8753                    ; line_number = 530
8754                    ;info   530, 2108
8755 083c 01a9          clrf    _float32_sign
8756                    ; # test sign
8757                    ; line_number = 532
8758                    ;info   532, 2109
8759 083d 1fa7          btfss   _float32_aargb0, _float32_msb
8760                    ; line_number = 533
8761                    ;info   533, 2110
8762 083e 284b          goto    _float32_normalize40
8763                    ; # if < 0, negate and set MSB in _float32_sign
8764                    ; line_number = 535
8765                    ;info   535, 2111
8766 083f 09a4          comf    _float32_aargb3,f
8767                    ; line_number = 536
8768                    ;info   536, 2112
8769 0840 09a5          comf    _float32_aargb2,f
8770                    ; line_number = 537
8771                    ;info   537, 2113
8772 0841 09a6          comf    _float32_aargb1,f
8773                    ; line_number = 538
8774                    ;info   538, 2114
8775 0842 09a7          comf    _float32_aargb0,f
8776                    ; line_number = 539
8777                    ;info   539, 2115
8778 0843 0aa4          incf    _float32_aargb3,f
8779                    ; line_number = 540
8780                    ;info   540, 2116
8781 0844 1903          btfsc   _float32_status, _float32_z
8782                    ; line_number = 541
8783                    ;info   541, 2117
8784 0845 0aa5          incf    _float32_aargb2,f
8785                    ; line_number = 542
8786                    ;info   542, 2118
8787 0846 1903          btfsc   _float32_status, _float32_z
8788                    ; line_number = 543
8789                    ;info   543, 2119
8790 0847 0aa6          incf    _float32_aargb1,f
8791                    ; line_number = 544
8792                    ;info   544, 2120
8793 0848 1903          btfsc   _float32_status, _float32_z
8794                    ; line_number = 545
8795                    ;info   545, 2121
8796 0849 0aa7          incf    _float32_aargb0,f
8797                    ; line_number = 546
8798                    ;info   546, 2122
8799 084a 17a9          bsf     _float32_sign, _float32_msb
8800                    ; # This procedure falls through to nrm4032
8801                    ; #goto nrm4032
8802            
8803            
8804                    ; delay after procedure statements=non-uniform
8805                    ; Return instruction suppressed by 'return_suppress'
8806            
8807            
8808            
8809            
8810                    ; line_number = 551
8811                    ;info   551, 2123
8812                    ; procedure _float32_normalize40
8813   084b :   _float32_normalize40:
8814                    ; arguments_none
8815                    ; line_number = 553
8816                    ;  returns_nothing
8817                    ; line_number = 554
8818                    ;  return_suppress
8819            
8820                    ; # Normalization routine
8821                    ; # Input: 40 bit unnormalized floating point number in
8822                    ; #        _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3 with sign in _float32_sign, MSB
8823                    ; # Use: call nrm4032()
8824                    ; # Output: 32 bit normalized floating point number in
8825                    ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
8826                    ; # Result: _FLOAT32_AARG  <--  NORMALIZE( _FLOAT32_AARG )
8827                    ; # Max Timing:	38+6*9+12+8 = 112 clks	RND = 0
8828                    ; #			38+6*9+12+24 = 128 clks	RND = 1, SAT = 0
8829                    ; #			38+6*9+12+31 = 135 clks	RND = 1, SAT = 1
8830                    ; # Min Timing:	33+6 = 39 clks		_FLOAT32_AARG = 0
8831                    ; #			5+9+8 = 22 clks
8832                    ; # PM: 66	DM: 8
8833            
8834                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
8835                    ; line_number = 570
8836                    ;  assemble
8837                    ;info   570, 2123
8838                    ; #:nrm4032
8839                    ; # clear exponent decrement
8840                    ; line_number = 573
8841                    ;info   573, 2123
8842 084b 01b3          clrf    _float32_temp
8843                    ; # test if highbyte=0
8844                    ; line_number = 575
8845                    ;info   575, 2124
8846 084c 0827          movf    _float32_aargb0,w
8847                    ; line_number = 576
8848                    ;info   576, 2125
8849 084d 1d03          btfss   _float32_status, _float32_z
8850                    ; line_number = 577
8851                    ;info   577, 2126
8852 084e 286b          goto    _float32_norm4032
8853                    ; # if so, shift 8 bits by move
8854                    ; line_number = 579
8855                    ;info   579, 2127
8856 084f 0826          movf    _float32_aargb1,w
8857                    ; line_number = 580
8858                    ;info   580, 2128
8859 0850 00a7          movwf   _float32_aargb0
8860                    ; line_number = 581
8861                    ;info   581, 2129
8862 0851 0825          movf    _float32_aargb2,w
8863                    ; line_number = 582
8864                    ;info   582, 2130
8865 0852 00a6          movwf   _float32_aargb1
8866                    ; line_number = 583
8867                    ;info   583, 2131
8868 0853 0824          movf    _float32_aargb3,w
8869                    ; line_number = 584
8870                    ;info   584, 2132
8871 0854 00a5          movwf   _float32_aargb2
8872                    ; line_number = 585
8873                    ;info   585, 2133
8874 0855 01a4          clrf    _float32_aargb3
8875                    ; # increase decrement by 8
8876                    ; line_number = 587
8877                    ;info   587, 2134
8878 0856 15b3          bsf     _float32_temp, 3
8879            
8880                    ; # test if highbyte=0
8881                    ; line_number = 590
8882                    ;info   590, 2135
8883 0857 0827          movf    _float32_aargb0,w
8884                    ; line_number = 591
8885                    ;info   591, 2136
8886 0858 1d03          btfss   _float32_status, _float32_z
8887                    ; line_number = 592
8888                    ;info   592, 2137
8889 0859 286b          goto    _float32_norm4032
8890                    ; # if so, shift 8 bits by move
8891                    ; line_number = 594
8892                    ;info   594, 2138
8893 085a 0826          movf    _float32_aargb1,w
8894                    ; line_number = 595
8895                    ;info   595, 2139
8896 085b 00a7          movwf   _float32_aargb0
8897                    ; line_number = 596
8898                    ;info   596, 2140
8899 085c 0825          movf    _float32_aargb2,w
8900                    ; line_number = 597
8901                    ;info   597, 2141
8902 085d 00a6          movwf   _float32_aargb1
8903                    ; line_number = 598
8904                    ;info   598, 2142
8905 085e 01a5          clrf    _float32_aargb2
8906                    ; # increase decrement by 8
8907                    ; line_number = 600
8908                    ;info   600, 2143
8909 085f 11b3          bcf     _float32_temp, 3
8910                    ; line_number = 601
8911                    ;info   601, 2144
8912 0860 1633          bsf     _float32_temp, 4
8913            
8914                    ; # test if highbyte=0
8915                    ; line_number = 604
8916                    ;info   604, 2145
8917 0861 0827          movf    _float32_aargb0,w
8918                    ; line_number = 605
8919                    ;info   605, 2146
8920 0862 1d03          btfss   _float32_status, _float32_z
8921                    ; line_number = 606
8922                    ;info   606, 2147
8923 0863 286b          goto    _float32_norm4032
8924                    ; # if so, shift 8 bits by move
8925                    ; line_number = 608
8926                    ;info   608, 2148
8927 0864 0826          movf    _float32_aargb1,w
8928                    ; line_number = 609
8929                    ;info   609, 2149
8930 0865 00a7          movwf   _float32_aargb0
8931                    ; line_number = 610
8932                    ;info   610, 2150
8933 0866 01a6          clrf    _float32_aargb1
8934                    ; # increase decrement by 8
8935                    ; line_number = 612
8936                    ;info   612, 2151
8937 0867 15b3          bsf     _float32_temp, 3
8938            
8939                    ; # if highbyte=0, result=0
8940                    ; line_number = 615
8941                    ;info   615, 2152
8942 0868 0827          movf    _float32_aargb0,w
8943                    ; line_number = 616
8944                    ;info   616, 2153
8945 0869 1903          btfsc   _float32_status, _float32_z
8946                    ; line_number = 617
8947                    ;info   617, 2154
8948 086a 2834          goto    _float32_res032
8949            
8950                    ; line_number = 619
8951   086b :   _float32_norm4032:
8952                    ; line_number = 620
8953                    ;info   620, 2155
8954 086b 0833          movf    _float32_temp,w
8955                    ; line_number = 621
8956                    ;info   621, 2156
8957 086c 02a8          subwf   _float32_exp,f
8958                    ; line_number = 622
8959                    ;info   622, 2157
8960 086d 1d03          btfss   _float32_status, _float32_z
8961                    ; line_number = 623
8962                    ;info   623, 2158
8963 086e 1c03          btfss   _float32_status, _float32_c
8964                    ; line_number = 624
8965                    ;info   624, 2159
8966 086f 2a3f          goto    _float32_setfun32
8967            
8968                    ; # clear carry bit
8969                    ; line_number = 627
8970                    ;info   627, 2160
8971 0870 1003          bcf     _float32_status, _float32_c
8972            
8973                    ; line_number = 629
8974   0871 :   _float32_norm4032a:
8975                    ; # if MSB=1, normalization done
8976                    ; line_number = 631
8977                    ;info   631, 2161
8978 0871 1ba7          btfsc   _float32_aargb0, _float32_msb
8979                    ; line_number = 632
8980                    ;info   632, 2162
8981 0872 287a          goto    _float32_nrmrnd4032
8982                    ; # otherwise, shift left and
8983                    ; line_number = 634
8984                    ;info   634, 2163
8985 0873 0da4          rlf     _float32_aargb3,f
8986                    ; # decrement exp
8987                    ; line_number = 636
8988                    ;info   636, 2164
8989 0874 0da5          rlf     _float32_aargb2,f
8990                    ; line_number = 637
8991                    ;info   637, 2165
8992 0875 0da6          rlf     _float32_aargb1,f
8993                    ; line_number = 638
8994                    ;info   638, 2166
8995 0876 0da7          rlf     _float32_aargb0,f
8996                    ; line_number = 639
8997                    ;info   639, 2167
8998 0877 0ba8          decfsz  _float32_exp,f
8999                    ; line_number = 640
9000                    ;info   640, 2168
9001 0878 2871          goto    _float32_norm4032a
9002            
9003                    ; # underflow if exp=0
9004                    ; line_number = 643
9005                    ;info   643, 2169
9006 0879 2a3f          goto    _float32_setfun32
9007            
9008                    ; line_number = 645
9009   087a :   _float32_nrmrnd4032:
9010                    ; line_number = 646
9011                    ;info   646, 2170
9012 087a 1b2a          btfsc   _float32_fpflags, _float32_rnd
9013                    ; line_number = 647
9014                    ;info   647, 2171
9015 087b 1c25          btfss   _float32_aargb2, _float32_lsb
9016                    ; line_number = 648
9017                    ;info   648, 2172
9018 087c 2831          goto    _float32_fixsign32
9019                    ; # round if next bit is set
9020                    ; line_number = 650
9021                    ;info   650, 2173
9022 087d 1fa4          btfss   _float32_aargb3, _float32_msb
9023                    ; line_number = 651
9024                    ;info   651, 2174
9025 087e 2831          goto    _float32_fixsign32
9026                    ; line_number = 652
9027                    ;info   652, 2175
9028 087f 0aa5          incf    _float32_aargb2,f
9029                    ; line_number = 653
9030                    ;info   653, 2176
9031 0880 1903          btfsc   _float32_status, _float32_z
9032                    ; line_number = 654
9033                    ;info   654, 2177
9034 0881 0aa6          incf    _float32_aargb1,f
9035                    ; line_number = 655
9036                    ;info   655, 2178
9037 0882 1903          btfsc   _float32_status, _float32_z
9038                    ; line_number = 656
9039                    ;info   656, 2179
9040 0883 0aa7          incf    _float32_aargb0,f
9041            
9042                    ; # has rounding caused carryout
9043                    ; line_number = 659
9044                    ;info   659, 2180
9045 0884 1d03          btfss   _float32_status, _float32_z
9046                    ; line_number = 660
9047                    ;info   660, 2181
9048 0885 2831          goto    _float32_fixsign32
9049                    ; # if so, right shift
9050                    ; line_number = 662
9051                    ;info   662, 2182
9052 0886 0ca7          rrf     _float32_aargb0,f
9053                    ; line_number = 663
9054                    ;info   663, 2183
9055 0887 0ca6          rrf     _float32_aargb1,f
9056                    ; line_number = 664
9057                    ;info   664, 2184
9058 0888 0ca5          rrf     _float32_aargb2,f
9059                    ; line_number = 665
9060                    ;info   665, 2185
9061 0889 0aa8          incf    _float32_exp,f
9062                    ; # check for overflow
9063                    ; line_number = 667
9064                    ;info   667, 2186
9065 088a 1903          btfsc   _float32_status, _float32_z
9066                    ; line_number = 668
9067                    ;info   668, 2187
9068 088b 29ac          goto    _float32_setfov32
9069                    ; line_number = 669
9070                    ;info   669, 2188
9071 088c 2831          goto    _float32_fixsign32
9072            
9073            
9074                    ; delay after procedure statements=non-uniform
9075                    ; Return instruction suppressed by 'return_suppress'
9076            
9077            
9078            
9079            
9080                    ; line_number = 672
9081                    ;info   672, 2189
9082                    ; procedure _float32_integer24_convert
9083   088d :   _float32_integer24_convert:
9084                    ; arguments_none
9085                    ; line_number = 674
9086                    ;  returns_nothing
9087                    ; line_number = 675
9088                    ;  return_suppress
9089            
9090                    ; # Float to integer conversion
9091                    ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
9092                    ; # Use: call int3224()
9093                    ; # Output: 24 bit 2's complement integer right justified in
9094                    ; #         _float32_aargb0, _float32_aargb1, _float32_aargb2
9095                    ; # Result: _FLOAT32_AARG  <--  INT( _FLOAT32_AARG )
9096                    ; # Max Timing:	40+6*7+6+16 = 104 clks	RND = 0
9097                    ; #			40+6*7+6+24 = 112 clks	RND = 1, SAT = 0
9098                    ; #			40+6*7+6+26 = 114 clks	RND = 1, SAT = 1
9099                    ; # Min Timing:	4 clks
9100                    ; # PM: 82	DM: 6
9101            
9102                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
9103                    ; line_number = 689
9104                    ;  assemble
9105                    ;info   689, 2189
9106                    ; line_number = 690
9107   088d :   _float32_int32:
9108                    ; # test for zero argument
9109                    ; line_number = 692
9110                    ;info   692, 2189
9111 088d 0828          movf    _float32_exp,w
9112                    ; line_number = 693
9113                    ;info   693, 2190
9114 088e 1903          btfsc   _float32_status, _float32_z
9115                    ; line_number = 694
9116                    ;info   694, 2191
9117 088f 3400          retlw   0
9118            
9119                    ; # save sign in _float32_sign
9120                    ; line_number = 697
9121                    ;info   697, 2192
9122 0890 0827          movf    _float32_aargb0,w
9123                    ; line_number = 698
9124                    ;info   698, 2193
9125 0891 00a9          movwf   _float32_sign
9126                    ; # make MSB explicit
9127                    ; line_number = 700
9128                    ;info   700, 2194
9129 0892 17a7          bsf     _float32_aargb0, _float32_msb
9130            
9131                    ; # remove bias from exp
9132                    ; line_number = 703
9133                    ;info   703, 2195
9134 0893 3096          movlw   _float32_expbias_23
9135                    ; line_number = 704
9136                    ;info   704, 2196
9137 0894 02a8          subwf   _float32_exp,f
9138                    ; line_number = 705
9139                    ;info   705, 2197
9140 0895 1fa8          btfss   _float32_exp, _float32_msb
9141                    ; line_number = 706
9142                    ;info   706, 2198
9143 0896 28dc          goto    _float32_setiov3224
9144                    ; line_number = 707
9145                    ;info   707, 2199
9146 0897 09a8          comf    _float32_exp,f
9147                    ; line_number = 708
9148                    ;info   708, 2200
9149 0898 0aa8          incf    _float32_exp,f
9150            
9151                    ; # do byte shift if exp >= 8
9152                    ; line_number = 711
9153                    ;info   711, 2201
9154 0899 3008          movlw   8
9155                    ; line_number = 712
9156                    ;info   712, 2202
9157 089a 0228          subwf   _float32_exp,w
9158                    ; line_number = 713
9159                    ;info   713, 2203
9160 089b 1c03          btfss   _float32_status, _float32_c
9161                    ; line_number = 714
9162                    ;info   714, 2204
9163 089c 28b8          goto    _float32_tshift3224
9164                    ; line_number = 715
9165                    ;info   715, 2205
9166 089d 00a8          movwf   _float32_exp
9167                    ; # rotate next bit for rounding
9168                    ; line_number = 717
9169                    ;info   717, 2206
9170 089e 0da5          rlf     _float32_aargb2,f
9171                    ; line_number = 718
9172                    ;info   718, 2207
9173 089f 0826          movf    _float32_aargb1,w
9174                    ; line_number = 719
9175                    ;info   719, 2208
9176 08a0 00a5          movwf   _float32_aargb2
9177                    ; line_number = 720
9178                    ;info   720, 2209
9179 08a1 0827          movf    _float32_aargb0,w
9180                    ; line_number = 721
9181                    ;info   721, 2210
9182 08a2 00a6          movwf   _float32_aargb1
9183                    ; line_number = 722
9184                    ;info   722, 2211
9185 08a3 01a7          clrf    _float32_aargb0
9186            
9187                    ; # do another byte shift if exp >= 8
9188                    ; line_number = 725
9189                    ;info   725, 2212
9190 08a4 3008          movlw   8
9191                    ; line_number = 726
9192                    ;info   726, 2213
9193 08a5 0228          subwf   _float32_exp,w
9194                    ; line_number = 727
9195                    ;info   727, 2214
9196 08a6 1c03          btfss   _float32_status, _float32_c
9197                    ; line_number = 728
9198                    ;info   728, 2215
9199 08a7 28b8          goto    _float32_tshift3224
9200                    ; line_number = 729
9201                    ;info   729, 2216
9202 08a8 00a8          movwf   _float32_exp
9203                    ; # rotate next bit for rounding
9204                    ; line_number = 731
9205                    ;info   731, 2217
9206 08a9 0da5          rlf     _float32_aargb2,f
9207                    ; line_number = 732
9208                    ;info   732, 2218
9209 08aa 0826          movf    _float32_aargb1,w
9210                    ; line_number = 733
9211                    ;info   733, 2219
9212 08ab 00a5          movwf   _float32_aargb2
9213                    ; line_number = 734
9214                    ;info   734, 2220
9215 08ac 01a6          clrf    _float32_aargb1
9216            
9217                    ; # do another byte shift if exp >= 8
9218                    ; line_number = 737
9219                    ;info   737, 2221
9220 08ad 3008          movlw   8
9221                    ; line_number = 738
9222                    ;info   738, 2222
9223 08ae 0228          subwf   _float32_exp,w
9224                    ; line_number = 739
9225                    ;info   739, 2223
9226 08af 1c03          btfss   _float32_status, _float32_c
9227                    ; line_number = 740
9228                    ;info   740, 2224
9229 08b0 28b8          goto    _float32_tshift3224
9230                    ; line_number = 741
9231                    ;info   741, 2225
9232 08b1 00a8          movwf   _float32_exp
9233                    ; # rotate next bit for rounding
9234                    ; line_number = 743
9235                    ;info   743, 2226
9236 08b2 0da5          rlf     _float32_aargb2,f
9237                    ; line_number = 744
9238                    ;info   744, 2227
9239 08b3 01a5          clrf    _float32_aargb2
9240                    ; line_number = 745
9241                    ;info   745, 2228
9242 08b4 0828          movf    _float32_exp,w
9243                    ; line_number = 746
9244                    ;info   746, 2229
9245 08b5 1d03          btfss   _float32_status, _float32_z
9246                    ; line_number = 747
9247                    ;info   747, 2230
9248 08b6 1003          bcf     _float32_status, _float32_c
9249                    ; line_number = 748
9250                    ;info   748, 2231
9251 08b7 28c1          goto    _float32_shift3224ok
9252            
9253                    ; line_number = 750
9254   08b8 :   _float32_tshift3224:
9255                    ; # shift completed if exp = 0
9256                    ; line_number = 752
9257                    ;info   752, 2232
9258 08b8 0828          movf    _float32_exp,w
9259                    ; line_number = 753
9260                    ;info   753, 2233
9261 08b9 1903          btfsc   _float32_status, _float32_z
9262                    ; line_number = 754
9263                    ;info   754, 2234
9264 08ba 28c1          goto    _float32_shift3224ok
9265            
9266                    ; line_number = 756
9267   08bb :   _float32_shift3224:
9268                    ; line_number = 757
9269                    ;info   757, 2235
9270 08bb 1003          bcf     _float32_status, _float32_c
9271                    ; # right shift by exp
9272                    ; line_number = 759
9273                    ;info   759, 2236
9274 08bc 0ca7          rrf     _float32_aargb0,f
9275                    ; line_number = 760
9276                    ;info   760, 2237
9277 08bd 0ca6          rrf     _float32_aargb1,f
9278                    ; line_number = 761
9279                    ;info   761, 2238
9280 08be 0ca5          rrf     _float32_aargb2,f
9281                    ; line_number = 762
9282                    ;info   762, 2239
9283 08bf 0ba8          decfsz  _float32_exp,f
9284                    ; line_number = 763
9285                    ;info   763, 2240
9286 08c0 28bb          goto    _float32_shift3224
9287            
9288                    ; line_number = 765
9289   08c1 :   _float32_shift3224ok:
9290                    ; line_number = 766
9291                    ;info   766, 2241
9292 08c1 1b2a          btfsc   _float32_fpflags, _float32_rnd
9293                    ; line_number = 767
9294                    ;info   767, 2242
9295 08c2 1c25          btfss   _float32_aargb2, _float32_lsb
9296                    ; line_number = 768
9297                    ;info   768, 2243
9298 08c3 28cd          goto    _float32_int3224ok
9299                    ; line_number = 769
9300                    ;info   769, 2244
9301 08c4 1c03          btfss   _float32_status, _float32_c
9302                    ; line_number = 770
9303                    ;info   770, 2245
9304 08c5 28cd          goto    _float32_int3224ok
9305                    ; line_number = 771
9306                    ;info   771, 2246
9307 08c6 0aa5          incf    _float32_aargb2,f
9308                    ; line_number = 772
9309                    ;info   772, 2247
9310 08c7 1903          btfsc   _float32_status, _float32_z
9311                    ; line_number = 773
9312                    ;info   773, 2248
9313 08c8 0aa6          incf    _float32_aargb1,f
9314                    ; line_number = 774
9315                    ;info   774, 2249
9316 08c9 1903          btfsc   _float32_status, _float32_z
9317                    ; line_number = 775
9318                    ;info   775, 2250
9319 08ca 0aa7          incf    _float32_aargb0,f
9320                    ; # test for overflow
9321                    ; line_number = 777
9322                    ;info   777, 2251
9323 08cb 1ba7          btfsc   _float32_aargb0, _float32_msb
9324                    ; line_number = 778
9325                    ;info   778, 2252
9326 08cc 28dc          goto    _float32_setiov3224
9327            
9328                    ; line_number = 780
9329   08cd :   _float32_int3224ok:
9330                    ; # if sign bit set, negate
9331                    ; line_number = 782
9332                    ;info   782, 2253
9333 08cd 1fa9          btfss   _float32_sign, _float32_msb
9334                    ; line_number = 783
9335                    ;info   783, 2254
9336 08ce 3400          retlw   0
9337                    ; line_number = 784
9338                    ;info   784, 2255
9339 08cf 09a7          comf    _float32_aargb0,f
9340                    ; line_number = 785
9341                    ;info   785, 2256
9342 08d0 09a6          comf    _float32_aargb1,f
9343                    ; line_number = 786
9344                    ;info   786, 2257
9345 08d1 09a5          comf    _float32_aargb2,f
9346                    ; line_number = 787
9347                    ;info   787, 2258
9348 08d2 0aa5          incf    _float32_aargb2,f
9349                    ; line_number = 788
9350                    ;info   788, 2259
9351 08d3 1903          btfsc   _float32_status, _float32_z
9352                    ; line_number = 789
9353                    ;info   789, 2260
9354 08d4 0aa6          incf    _float32_aargb1,f
9355                    ; line_number = 790
9356                    ;info   790, 2261
9357 08d5 1903          btfsc   _float32_status, _float32_z
9358                    ; line_number = 791
9359                    ;info   791, 2262
9360 08d6 0aa7          incf    _float32_aargb0,f
9361                    ; line_number = 792
9362                    ;info   792, 2263
9363 08d7 3400          retlw   0
9364            
9365                    ; line_number = 794
9366   08d8 :   _float32_ires03224:
9367                    ; # integer result equals zero
9368                    ; line_number = 796
9369                    ;info   796, 2264
9370 08d8 01a7          clrf    _float32_aargb0
9371                    ; line_number = 797
9372                    ;info   797, 2265
9373 08d9 01a6          clrf    _float32_aargb1
9374                    ; line_number = 798
9375                    ;info   798, 2266
9376 08da 01a5          clrf    _float32_aargb2
9377                    ; line_number = 799
9378                    ;info   799, 2267
9379 08db 3400          retlw   0
9380            
9381                    ; # set integer overflow flag
9382                    ; line_number = 802
9383   08dc :   _float32_setiov3224:
9384                    ; line_number = 803
9385                    ;info   803, 2268
9386 08dc 142a          bsf     _float32_fpflags, _float32_iov
9387                    ; # test for saturation
9388                    ; line_number = 805
9389                    ;info   805, 2269
9390 08dd 1faa          btfss   _float32_fpflags, _float32_sat
9391                    ; # return error code in WREG
9392                    ; line_number = 807
9393                    ;info   807, 2270
9394 08de 34ff          retlw   255
9395            
9396                    ; # saturate to largest two's
9397                    ; line_number = 810
9398                    ;info   810, 2271
9399 08df 01a7          clrf    _float32_aargb0
9400                    ; # complement 24 bit integer
9401                    ; line_number = 812
9402                    ;info   812, 2272
9403 08e0 1fa9          btfss   _float32_sign, _float32_msb
9404                    ; line_number = 813
9405                    ;info   813, 2273
9406 08e1 30ff          movlw   255
9407                    ; # sign = 0, 0x 7F FF FF
9408                    ; line_number = 815
9409                    ;info   815, 2274
9410 08e2 00a7          movwf   _float32_aargb0
9411                    ; # sign = 1, 0x 80 00 00
9412                    ; line_number = 817
9413                    ;info   817, 2275
9414 08e3 00a6          movwf   _float32_aargb1
9415                    ; line_number = 818
9416                    ;info   818, 2276
9417 08e4 00a5          movwf   _float32_aargb2
9418                    ; line_number = 819
9419                    ;info   819, 2277
9420 08e5 0da9          rlf     _float32_sign,f
9421                    ; line_number = 820
9422                    ;info   820, 2278
9423 08e6 0ca7          rrf     _float32_aargb0,f
9424                    ; # return error code in WREG
9425                    ; line_number = 822
9426                    ;info   822, 2279
9427 08e7 34ff          retlw   255
9428            
9429            
9430                    ; delay after procedure statements=non-uniform
9431                    ; Return instruction suppressed by 'return_suppress'
9432            
9433            
9434            
9435            
9436                    ; line_number = 825
9437                    ;info   825, 2280
9438                    ; procedure float32_integer32_convert
9439   08e8 :   float32_integer32_convert:
9440                    ; arguments_none
9441                    ; line_number = 827
9442                    ;  returns_nothing
9443                    ; line_number = 828
9444                    ;  return_suppress
9445            
9446                    ; # Float to integer conversion
9447                    ; # Input:  32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
9448                    ; # Use: call int3232()
9449                    ; # Output: 32 bit 2's complement integer right justified in
9450                    ; #         _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
9451                    ; # Result: _FLOAT32_AARG  <--  INT( _FLOAT32_AARG )
9452                    ; # Max Timing:	54+6*8+7+21 = 130 clks	RND = 0
9453                    ; #			54+6*8+7+29 = 137 clks	RND = 1, SAT = 0
9454                    ; #			54+6*8+7+29 = 137 clks	RND = 1, SAT = 1
9455                    ; # Min Timing:	5 clks
9456                    ; # PM: 102	DM: 7
9457            
9458                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
9459                    ; line_number = 842
9460                    ;  assemble
9461                    ;info   842, 2280
9462                    ; #:int3232
9463                    ; line_number = 844
9464                    ;info   844, 2280
9465 08e8 01a4          clrf    _float32_aargb3
9466                    ; # test for zero argument
9467                    ; line_number = 846
9468                    ;info   846, 2281
9469 08e9 0828          movf    _float32_exp,w
9470                    ; line_number = 847
9471                    ;info   847, 2282
9472 08ea 1903          btfsc   _float32_status, _float32_z
9473                    ; line_number = 848
9474                    ;info   848, 2283
9475 08eb 3400          retlw   0
9476            
9477                    ; # save sign in _float32_sign
9478                    ; line_number = 851
9479                    ;info   851, 2284
9480 08ec 0827          movf    _float32_aargb0,w
9481                    ; line_number = 852
9482                    ;info   852, 2285
9483 08ed 00a9          movwf   _float32_sign
9484                    ; # make MSB explicit
9485                    ; line_number = 854
9486                    ;info   854, 2286
9487 08ee 17a7          bsf     _float32_aargb0, _float32_msb
9488            
9489                    ; # remove bias from exp
9490                    ; line_number = 857
9491                    ;info   857, 2287
9492 08ef 309e          movlw   _float32_expbias_31
9493                    ; line_number = 858
9494                    ;info   858, 2288
9495 08f0 02a8          subwf   _float32_exp,f
9496                    ; line_number = 859
9497                    ;info   859, 2289
9498 08f1 1fa8          btfss   _float32_exp, _float32_msb
9499                    ; line_number = 860
9500                    ;info   860, 2290
9501 08f2 294c          goto    _float32_setiov32
9502                    ; line_number = 861
9503                    ;info   861, 2291
9504 08f3 09a8          comf    _float32_exp,f
9505                    ; line_number = 862
9506                    ;info   862, 2292
9507 08f4 0aa8          incf    _float32_exp,f
9508            
9509                    ; # do byte shift if exp >= 8
9510                    ; line_number = 865
9511                    ;info   865, 2293
9512 08f5 3008          movlw   8
9513                    ; line_number = 866
9514                    ;info   866, 2294
9515 08f6 0228          subwf   _float32_exp,w
9516                    ; line_number = 867
9517                    ;info   867, 2295
9518 08f7 1c03          btfss   _float32_status, _float32_c
9519                    ; line_number = 868
9520                    ;info   868, 2296
9521 08f8 2921          goto    _float32_tshift3232
9522                    ; line_number = 869
9523                    ;info   869, 2297
9524 08f9 00a8          movwf   _float32_exp
9525                    ; # rotate next bit for rounding
9526                    ; line_number = 871
9527                    ;info   871, 2298
9528 08fa 0da4          rlf     _float32_aargb3,f
9529                    ; line_number = 872
9530                    ;info   872, 2299
9531 08fb 0825          movf    _float32_aargb2,w
9532                    ; line_number = 873
9533                    ;info   873, 2300
9534 08fc 00a4          movwf   _float32_aargb3
9535                    ; line_number = 874
9536                    ;info   874, 2301
9537 08fd 0826          movf    _float32_aargb1,w
9538                    ; line_number = 875
9539                    ;info   875, 2302
9540 08fe 00a5          movwf   _float32_aargb2
9541                    ; line_number = 876
9542                    ;info   876, 2303
9543 08ff 0827          movf    _float32_aargb0,w
9544                    ; line_number = 877
9545                    ;info   877, 2304
9546 0900 00a6          movwf   _float32_aargb1
9547                    ; line_number = 878
9548                    ;info   878, 2305
9549 0901 01a7          clrf    _float32_aargb0
9550            
9551                    ; # do another byte shift if exp >= 8
9552                    ; line_number = 881
9553                    ;info   881, 2306
9554 0902 3008          movlw   8
9555                    ; line_number = 882
9556                    ;info   882, 2307
9557 0903 0228          subwf   _float32_exp,w
9558                    ; line_number = 883
9559                    ;info   883, 2308
9560 0904 1c03          btfss   _float32_status, _float32_c
9561                    ; line_number = 884
9562                    ;info   884, 2309
9563 0905 2921          goto    _float32_tshift3232
9564                    ; line_number = 885
9565                    ;info   885, 2310
9566 0906 00a8          movwf   _float32_exp
9567                    ; # rotate next bit for rounding
9568                    ; line_number = 887
9569                    ;info   887, 2311
9570 0907 0da4          rlf     _float32_aargb3,f
9571                    ; line_number = 888
9572                    ;info   888, 2312
9573 0908 0825          movf    _float32_aargb2,w
9574                    ; line_number = 889
9575                    ;info   889, 2313
9576 0909 00a4          movwf   _float32_aargb3
9577                    ; line_number = 890
9578                    ;info   890, 2314
9579 090a 0826          movf    _float32_aargb1,w
9580                    ; line_number = 891
9581                    ;info   891, 2315
9582 090b 00a5          movwf   _float32_aargb2
9583                    ; line_number = 892
9584                    ;info   892, 2316
9585 090c 01a6          clrf    _float32_aargb1
9586            
9587                    ; # do another byte shift if exp >= 8
9588                    ; line_number = 895
9589                    ;info   895, 2317
9590 090d 3008          movlw   8
9591                    ; line_number = 896
9592                    ;info   896, 2318
9593 090e 0228          subwf   _float32_exp,w
9594                    ; line_number = 897
9595                    ;info   897, 2319
9596 090f 1c03          btfss   _float32_status, _float32_c
9597                    ; line_number = 898
9598                    ;info   898, 2320
9599 0910 2921          goto    _float32_tshift3232
9600                    ; line_number = 899
9601                    ;info   899, 2321
9602 0911 00a8          movwf   _float32_exp
9603                    ; # rotate next bit for rounding
9604                    ; line_number = 901
9605                    ;info   901, 2322
9606 0912 0da4          rlf     _float32_aargb3,f
9607                    ; line_number = 902
9608                    ;info   902, 2323
9609 0913 0825          movf    _float32_aargb2,w
9610                    ; line_number = 903
9611                    ;info   903, 2324
9612 0914 00a4          movwf   _float32_aargb3
9613                    ; line_number = 904
9614                    ;info   904, 2325
9615 0915 01a5          clrf    _float32_aargb2
9616            
9617                    ; # do another byte shift if exp >= 8
9618                    ; line_number = 907
9619                    ;info   907, 2326
9620 0916 3008          movlw   8
9621                    ; line_number = 908
9622                    ;info   908, 2327
9623 0917 0228          subwf   _float32_exp,w
9624                    ; line_number = 909
9625                    ;info   909, 2328
9626 0918 1c03          btfss   _float32_status, _float32_c
9627                    ; line_number = 910
9628                    ;info   910, 2329
9629 0919 2921          goto    _float32_tshift3232
9630                    ; line_number = 911
9631                    ;info   911, 2330
9632 091a 00a8          movwf   _float32_exp
9633                    ; # rotate next bit for rounding
9634                    ; line_number = 913
9635                    ;info   913, 2331
9636 091b 0da4          rlf     _float32_aargb3,f
9637                    ; line_number = 914
9638                    ;info   914, 2332
9639 091c 01a4          clrf    _float32_aargb3
9640                    ; line_number = 915
9641                    ;info   915, 2333
9642 091d 0828          movf    _float32_exp,w
9643                    ; line_number = 916
9644                    ;info   916, 2334
9645 091e 1d03          btfss   _float32_status, _float32_z
9646                    ; line_number = 917
9647                    ;info   917, 2335
9648 091f 1003          bcf     _float32_status, _float32_c
9649                    ; line_number = 918
9650                    ;info   918, 2336
9651 0920 292b          goto    _float32_shift3232ok
9652            
9653                    ; line_number = 920
9654   0921 :   _float32_tshift3232:
9655                    ; # shift completed if exp = 0
9656                    ; line_number = 922
9657                    ;info   922, 2337
9658 0921 0828          movf    _float32_exp,w
9659                    ; line_number = 923
9660                    ;info   923, 2338
9661 0922 1903          btfsc   _float32_status, _float32_z
9662                    ; line_number = 924
9663                    ;info   924, 2339
9664 0923 292b          goto    _float32_shift3232ok
9665            
9666                    ; line_number = 926
9667   0924 :   _float32_shift3232:
9668                    ; line_number = 927
9669                    ;info   927, 2340
9670 0924 1003          bcf     _float32_status, _float32_c
9671                    ; # right shift by exp
9672                    ; line_number = 929
9673                    ;info   929, 2341
9674 0925 0ca7          rrf     _float32_aargb0,f
9675                    ; line_number = 930
9676                    ;info   930, 2342
9677 0926 0ca6          rrf     _float32_aargb1,f
9678                    ; line_number = 931
9679                    ;info   931, 2343
9680 0927 0ca5          rrf     _float32_aargb2,f
9681                    ; line_number = 932
9682                    ;info   932, 2344
9683 0928 0ca4          rrf     _float32_aargb3,f
9684                    ; line_number = 933
9685                    ;info   933, 2345
9686 0929 0ba8          decfsz  _float32_exp,f
9687                    ; line_number = 934
9688                    ;info   934, 2346
9689 092a 2924          goto    _float32_shift3232
9690            
9691                    ; line_number = 936
9692   092b :   _float32_shift3232ok:
9693                    ; line_number = 937
9694                    ;info   937, 2347
9695 092b 1b2a          btfsc   _float32_fpflags, _float32_rnd
9696                    ; line_number = 938
9697                    ;info   938, 2348
9698 092c 1c24          btfss   _float32_aargb3, _float32_lsb
9699                    ; line_number = 939
9700                    ;info   939, 2349
9701 092d 2939          goto    _float32_int3232ok
9702                    ; line_number = 940
9703                    ;info   940, 2350
9704 092e 1c03          btfss   _float32_status, _float32_c
9705                    ; line_number = 941
9706                    ;info   941, 2351
9707 092f 2939          goto    _float32_int3232ok
9708                    ; line_number = 942
9709                    ;info   942, 2352
9710 0930 0aa4          incf    _float32_aargb3,f
9711                    ; line_number = 943
9712                    ;info   943, 2353
9713 0931 1903          btfsc   _float32_status, _float32_z
9714                    ; line_number = 944
9715                    ;info   944, 2354
9716 0932 0aa5          incf    _float32_aargb2,f
9717                    ; line_number = 945
9718                    ;info   945, 2355
9719 0933 1903          btfsc   _float32_status, _float32_z
9720                    ; line_number = 946
9721                    ;info   946, 2356
9722 0934 0aa6          incf    _float32_aargb1,f
9723                    ; line_number = 947
9724                    ;info   947, 2357
9725 0935 1903          btfsc   _float32_status, _float32_z
9726                    ; line_number = 948
9727                    ;info   948, 2358
9728 0936 0aa7          incf    _float32_aargb0,f
9729                    ; # test for overflow
9730                    ; line_number = 950
9731                    ;info   950, 2359
9732 0937 1ba7          btfsc   _float32_aargb0, _float32_msb
9733                    ; line_number = 951
9734                    ;info   951, 2360
9735 0938 28dc          goto    _float32_setiov3224
9736            
9737                    ; line_number = 953
9738   0939 :   _float32_int3232ok:
9739                    ; # if sign bit set, negate
9740                    ; line_number = 955
9741                    ;info   955, 2361
9742 0939 1fa9          btfss   _float32_sign, _float32_msb
9743                    ; line_number = 956
9744                    ;info   956, 2362
9745 093a 3400          retlw   0
9746                    ; line_number = 957
9747                    ;info   957, 2363
9748 093b 09a7          comf    _float32_aargb0,f
9749                    ; line_number = 958
9750                    ;info   958, 2364
9751 093c 09a6          comf    _float32_aargb1,f
9752                    ; line_number = 959
9753                    ;info   959, 2365
9754 093d 09a5          comf    _float32_aargb2,f
9755                    ; line_number = 960
9756                    ;info   960, 2366
9757 093e 09a4          comf    _float32_aargb3,f
9758                    ; line_number = 961
9759                    ;info   961, 2367
9760 093f 0aa4          incf    _float32_aargb3,f
9761                    ; line_number = 962
9762                    ;info   962, 2368
9763 0940 1903          btfsc   _float32_status, _float32_z
9764                    ; line_number = 963
9765                    ;info   963, 2369
9766 0941 0aa5          incf    _float32_aargb2,f
9767                    ; line_number = 964
9768                    ;info   964, 2370
9769 0942 1903          btfsc   _float32_status, _float32_z
9770                    ; line_number = 965
9771                    ;info   965, 2371
9772 0943 0aa6          incf    _float32_aargb1,f
9773                    ; line_number = 966
9774                    ;info   966, 2372
9775 0944 1903          btfsc   _float32_status, _float32_z
9776                    ; line_number = 967
9777                    ;info   967, 2373
9778 0945 0aa7          incf    _float32_aargb0,f
9779                    ; line_number = 968
9780                    ;info   968, 2374
9781 0946 3400          retlw   0
9782            
9783                    ; line_number = 970
9784   0947 :   _float32_ires032:
9785                    ; # integer result equals zero
9786                    ; line_number = 972
9787                    ;info   972, 2375
9788 0947 01a7          clrf    _float32_aargb0
9789                    ; line_number = 973
9790                    ;info   973, 2376
9791 0948 01a6          clrf    _float32_aargb1
9792                    ; line_number = 974
9793                    ;info   974, 2377
9794 0949 01a5          clrf    _float32_aargb2
9795                    ; line_number = 975
9796                    ;info   975, 2378
9797 094a 01a4          clrf    _float32_aargb3
9798                    ; line_number = 976
9799                    ;info   976, 2379
9800 094b 3400          retlw   0
9801            
9802                    ; line_number = 978
9803   094c :   _float32_setiov32:
9804                    ; # set integer overflow flag
9805                    ; line_number = 980
9806                    ;info   980, 2380
9807 094c 142a          bsf     _float32_fpflags, _float32_iov
9808                    ; # test for saturation
9809                    ; line_number = 982
9810                    ;info   982, 2381
9811 094d 1faa          btfss   _float32_fpflags, _float32_sat
9812                    ; # return error code in WREG
9813                    ; line_number = 984
9814                    ;info   984, 2382
9815 094e 34ff          retlw   255
9816            
9817                    ; #saturate to largest two's
9818                    ; line_number = 987
9819                    ;info   987, 2383
9820 094f 01a7          clrf    _float32_aargb0
9821                    ; # complement 32 bit integer
9822                    ; line_number = 989
9823                    ;info   989, 2384
9824 0950 1fa9          btfss   _float32_sign, _float32_msb
9825                    ; line_number = 990
9826                    ;info   990, 2385
9827 0951 30ff          movlw   255
9828                    ; # sign = 0, 0x 7F FF FF FF
9829                    ; line_number = 992
9830                    ;info   992, 2386
9831 0952 00a7          movwf   _float32_aargb0
9832                    ; # sign = 1, 0x 80 00 00 00
9833                    ; line_number = 994
9834                    ;info   994, 2387
9835 0953 00a6          movwf   _float32_aargb1
9836                    ; line_number = 995
9837                    ;info   995, 2388
9838 0954 00a5          movwf   _float32_aargb2
9839                    ; line_number = 996
9840                    ;info   996, 2389
9841 0955 00a4          movwf   _float32_aargb3
9842                    ; line_number = 997
9843                    ;info   997, 2390
9844 0956 0da9          rlf     _float32_sign,f
9845                    ; line_number = 998
9846                    ;info   998, 2391
9847 0957 0ca7          rrf     _float32_aargb0,f
9848                    ; # return error code in WREG
9849                    ; line_number = 1000
9850                    ;info   1000, 2392
9851 0958 34ff          retlw   255
9852            
9853            
9854                    ; delay after procedure statements=non-uniform
9855                    ; Return instruction suppressed by 'return_suppress'
9856            
9857            
9858            
9859            
9860                    ; line_number = 1003
9861                    ;info   1003, 2393
9862                    ; procedure _float32_multiply
9863   0959 :   _float32_multiply:
9864                    ; arguments_none
9865                    ; line_number = 1005
9866                    ;  returns_nothing
9867                    ; line_number = 1006
9868                    ;  return_suppress
9869            
9870                    ; # Floating Point Multiply
9871                    ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
9872                    ; #        32 bit floating point number in _float32_bexp, _FLOAT32_BARGB0, _FLOAT32_BARGB1, _FLOAT32_BARGB2
9873                    ; # Use: call fpm32()
9874                    ; # Output: 32 bit floating point product in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
9875                    ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG * _FLOAT32_BARG
9876                    ; # Max Timing:	26+23*22+21+21 = 574 clks	RND = 0
9877                    ; #			26+23*22+21+35 = 588 clks	RND = 1, SAT = 0
9878                    ; #			26+23*22+21+38 = 591 clks	RND = 1, SAT = 1
9879                    ; # Min Timing:	6+6 = 12 clks			_FLOAT32_AARG * _FLOAT32_BARG = 0
9880                    ; #			24+23*11+21+17 = 315 clks
9881                    ; # PM: 94		DM: 14
9882            
9883                    ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
9884                    ; line_number = 1021
9885                    ;  assemble
9886                    ;info   1021, 2393
9887                    ; # test for zero arguments
9888                    ; line_number = 1023
9889                    ;info   1023, 2393
9890 0959 0828          movf    _float32_aexp,w
9891                    ; line_number = 1024
9892                    ;info   1024, 2394
9893 095a 1d03          btfss   _float32_status, _float32_z
9894                    ; line_number = 1025
9895                    ;info   1025, 2395
9896 095b 082f          movf    _float32_bexp,w
9897                    ; line_number = 1026
9898                    ;info   1026, 2396
9899 095c 1903          btfsc   _float32_status, _float32_z
9900                    ; line_number = 1027
9901                    ;info   1027, 2397
9902 095d 2834          goto    _float32_res032
9903            
9904                    ; line_number = 1029
9905   095e :   _float32_m32bne0:
9906                    ; line_number = 1030
9907                    ;info   1030, 2398
9908 095e 0827          movf    _float32_aargb0,w
9909                    ; line_number = 1031
9910                    ;info   1031, 2399
9911 095f 062e          xorwf   _float32_bargb0,w
9912                    ; # save sign in _float32_sign
9913                    ; line_number = 1033
9914                    ;info   1033, 2400
9915 0960 00a9          movwf   _float32_sign
9916            
9917                    ; line_number = 1035
9918                    ;info   1035, 2401
9919 0961 082f          movf    _float32_bexp,w
9920                    ; line_number = 1036
9921                    ;info   1036, 2402
9922 0962 07a8          addwf   _float32_exp,f
9923                    ; line_number = 1037
9924                    ;info   1037, 2403
9925 0963 307e          movlw   _float32_expbias_1
9926                    ; line_number = 1038
9927                    ;info   1038, 2404
9928 0964 1c03          btfss   _float32_status, _float32_c
9929                    ; line_number = 1039
9930                    ;info   1039, 2405
9931 0965 296a          goto    _float32_mtun32
9932            
9933                    ; line_number = 1041
9934                    ;info   1041, 2406
9935 0966 02a8          subwf   _float32_exp,f
9936                    ; line_number = 1042
9937                    ;info   1042, 2407
9938 0967 1803          btfsc   _float32_status, _float32_c
9939                    ; # set multiply overflow flag
9940                    ; line_number = 1044
9941                    ;info   1044, 2408
9942 0968 29ac          goto    _float32_setfov32
9943                    ; line_number = 1045
9944                    ;info   1045, 2409
9945 0969 296d          goto    _float32_mok32
9946            
9947                    ; line_number = 1047
9948   096a :   _float32_mtun32:
9949                    ; line_number = 1048
9950                    ;info   1048, 2410
9951 096a 02a8          subwf   _float32_exp,f
9952                    ; line_number = 1049
9953                    ;info   1049, 2411
9954 096b 1c03          btfss   _float32_status, _float32_c
9955                    ; line_number = 1050
9956                    ;info   1050, 2412
9957 096c 2a3f          goto    _float32_setfun32
9958            
9959                    ; line_number = 1052
9960   096d :   _float32_mok32:
9961                    ; line_number = 1053
9962                    ;info   1053, 2413
9963 096d 0827          movf    _float32_aargb0,w
9964                    ; line_number = 1054
9965                    ;info   1054, 2414
9966 096e 00a4          movwf   _float32_aargb3
9967                    ; line_number = 1055
9968                    ;info   1055, 2415
9969 096f 0826          movf    _float32_aargb1,w
9970                    ; line_number = 1056
9971                    ;info   1056, 2416
9972 0970 00a3          movwf   _float32_aargb4
9973                    ; line_number = 1057
9974                    ;info   1057, 2417
9975 0971 0825          movf    _float32_aargb2,w
9976                    ; line_number = 1058
9977                    ;info   1058, 2418
9978 0972 00a2          movwf   _float32_aargb5
9979                    ; # make argument MSB's explicit
9980                    ; line_number = 1060
9981                    ;info   1060, 2419
9982 0973 17a4          bsf     _float32_aargb3, _float32_msb
9983                    ; line_number = 1061
9984                    ;info   1061, 2420
9985 0974 17ae          bsf     _float32_bargb0, _float32_msb
9986                    ; line_number = 1062
9987                    ;info   1062, 2421
9988 0975 1003          bcf     _float32_status, _float32_c
9989                    ; # clear initial partial product
9990                    ; line_number = 1064
9991                    ;info   1064, 2422
9992 0976 01a7          clrf    _float32_aargb0
9993                    ; line_number = 1065
9994                    ;info   1065, 2423
9995 0977 01a6          clrf    _float32_aargb1
9996                    ; line_number = 1066
9997                    ;info   1066, 2424
9998 0978 01a5          clrf    _float32_aargb2
9999                    ; line_number = 1067
10000                   ;info   1067, 2425
100010979 3018          movlw   24
10002                   ; # initialize counter
10003                   ; line_number = 1069
10004                   ;info   1069, 2426
10005097a 00b3          movwf   _float32_temp
10006           
10007                   ; # test next bit
10008                   ; line_number = 1072
10009  097b :   _float32_mloop32:
10010                   ; line_number = 1073
10011                   ;info   1073, 2427
10012097b 1c22          btfss   _float32_aargb5, _float32_lsb
10013                   ; line_number = 1074
10014                   ;info   1074, 2428
10015097c 2987          goto    _float32_mnoadd32
10016           
10017                   ; line_number = 1076
10018  097d :   _float32_madd32:
10019                   ; line_number = 1077
10020                   ;info   1077, 2429
10021097d 082c          movf    _float32_bargb2,w
10022                   ; line_number = 1078
10023                   ;info   1078, 2430
10024097e 07a5          addwf   _float32_aargb2,f
10025                   ; line_number = 1079
10026                   ;info   1079, 2431
10027097f 082d          movf    _float32_bargb1,w
10028                   ; line_number = 1080
10029                   ;info   1080, 2432
100300980 1803          btfsc   _float32_status, _float32_c
10031                   ; line_number = 1081
10032                   ;info   1081, 2433
100330981 0f2d          incfsz  _float32_bargb1,w
10034                   ; line_number = 1082
10035                   ;info   1082, 2434
100360982 07a6          addwf   _float32_aargb1,f
10037           
10038                   ; line_number = 1084
10039                   ;info   1084, 2435
100400983 082e          movf    _float32_bargb0,w
10041                   ; line_number = 1085
10042                   ;info   1085, 2436
100430984 1803          btfsc   _float32_status, _float32_c
10044                   ; line_number = 1086
10045                   ;info   1086, 2437
100460985 0f2e          incfsz  _float32_bargb0,w
10047                   ; line_number = 1087
10048                   ;info   1087, 2438
100490986 07a7          addwf   _float32_aargb0,f
10050           
10051                   ; line_number = 1089
10052  0987 :   _float32_mnoadd32:
10053                   ; line_number = 1090
10054                   ;info   1090, 2439
100550987 0ca7          rrf     _float32_aargb0,f
10056                   ; line_number = 1091
10057                   ;info   1091, 2440
100580988 0ca6          rrf     _float32_aargb1,f
10059                   ; line_number = 1092
10060                   ;info   1092, 2441
100610989 0ca5          rrf     _float32_aargb2,f
10062                   ; line_number = 1093
10063                   ;info   1093, 2442
10064098a 0ca4          rrf     _float32_aargb3,f
10065                   ; line_number = 1094
10066                   ;info   1094, 2443
10067098b 0ca3          rrf     _float32_aargb4,f
10068                   ; line_number = 1095
10069                   ;info   1095, 2444
10070098c 0ca2          rrf     _float32_aargb5,f
10071                   ; line_number = 1096
10072                   ;info   1096, 2445
10073098d 1003          bcf     _float32_status, _float32_c
10074                   ; line_number = 1097
10075                   ;info   1097, 2446
10076098e 0bb3          decfsz  _float32_temp,f
10077                   ; line_number = 1098
10078                   ;info   1098, 2447
10079098f 297b          goto    _float32_mloop32
10080           
10081                   ; # check for postnormalization
10082                   ; line_number = 1101
10083                   ;info   1101, 2448
100840990 1ba7          btfsc   _float32_aargb0, _float32_msb
10085                   ; line_number = 1102
10086                   ;info   1102, 2449
100870991 2997          goto    _float32_mround32
10088                   ; line_number = 1103
10089                   ;info   1103, 2450
100900992 0da4          rlf     _float32_aargb3,f
10091                   ; line_number = 1104
10092                   ;info   1104, 2451
100930993 0da5          rlf     _float32_aargb2,f
10094                   ; line_number = 1105
10095                   ;info   1105, 2452
100960994 0da6          rlf     _float32_aargb1,f
10097                   ; line_number = 1106
10098                   ;info   1106, 2453
100990995 0da7          rlf     _float32_aargb0,f
10100                   ; line_number = 1107
10101                   ;info   1107, 2454
101020996 03a8          decf    _float32_exp,f
10103           
10104                   ; line_number = 1109
10105  0997 :   _float32_mround32:
10106                   ; line_number = 1110
10107                   ;info   1110, 2455
101080997 1b2a          btfsc   _float32_fpflags, _float32_rnd
10109                   ; line_number = 1111
10110                   ;info   1111, 2456
101110998 1c25          btfss   _float32_aargb2, _float32_lsb
10112                   ; line_number = 1112
10113                   ;info   1112, 2457
101140999 29a9          goto    _float32_mul32ok
10115                   ; line_number = 1113
10116                   ;info   1113, 2458
10117099a 1fa4          btfss   _float32_aargb3, _float32_msb
10118                   ; line_number = 1114
10119                   ;info   1114, 2459
10120099b 29a9          goto    _float32_mul32ok
10121                   ; line_number = 1115
10122                   ;info   1115, 2460
10123099c 0aa5          incf    _float32_aargb2,f
10124                   ; line_number = 1116
10125                   ;info   1116, 2461
10126099d 1903          btfsc   _float32_status, _float32_z
10127                   ; line_number = 1117
10128                   ;info   1117, 2462
10129099e 0aa6          incf    _float32_aargb1,f
10130                   ; line_number = 1118
10131                   ;info   1118, 2463
10132099f 1903          btfsc   _float32_status, _float32_z
10133                   ; line_number = 1119
10134                   ;info   1119, 2464
1013509a0 0aa7          incf    _float32_aargb0,f
10136           
10137                   ; # has rounding caused carryout?
10138                   ; line_number = 1122
10139                   ;info   1122, 2465
1014009a1 1d03          btfss   _float32_status, _float32_z
10141                   ; line_number = 1123
10142                   ;info   1123, 2466
1014309a2 29a9          goto    _float32_mul32ok
10144                   ; # if so, right shift
10145                   ; line_number = 1125
10146                   ;info   1125, 2467
1014709a3 0ca7          rrf     _float32_aargb0,f
10148                   ; line_number = 1126
10149                   ;info   1126, 2468
1015009a4 0ca6          rrf     _float32_aargb1,f
10151                   ; line_number = 1127
10152                   ;info   1127, 2469
1015309a5 0ca5          rrf     _float32_aargb2,f
10154                   ; line_number = 1128
10155                   ;info   1128, 2470
1015609a6 0aa8          incf    _float32_exp,f
10157                   ; # check for overflow
10158                   ; line_number = 1130
10159                   ;info   1130, 2471
1016009a7 1903          btfsc   _float32_status, _float32_z
10161                   ; line_number = 1131
10162                   ;info   1131, 2472
1016309a8 29ac          goto    _float32_setfov32
10164           
10165                   ; line_number = 1133
10166  09a9 :   _float32_mul32ok:
10167                   ; line_number = 1134
10168                   ;info   1134, 2473
1016909a9 1fa9          btfss   _float32_sign, _float32_msb
10170                   ; # clear explicit MSB if positive
10171                   ; line_number = 1136
10172                   ;info   1136, 2474
1017309aa 13a7          bcf     _float32_aargb0, _float32_msb
10174           
10175                   ; line_number = 1138
10176                   ;info   1138, 2475
1017709ab 3400          retlw   0
10178           
10179                   ; # set floating point underflag
10180                   ; line_number = 1141
10181  09ac :   _float32_setfov32:
10182                   ; line_number = 1142
10183                   ;info   1142, 2476
1018409ac 14aa          bsf     _float32_fpflags, _float32_fov
10185                   ; # test for saturation
10186                   ; line_number = 1144
10187                   ;info   1144, 2477
1018809ad 1faa          btfss   _float32_fpflags, _float32_sat
10189                   ; # return error code in WREG
10190                   ; line_number = 1146
10191                   ;info   1146, 2478
1019209ae 34ff          retlw   255
10193           
10194                   ; line_number = 1148
10195                   ;info   1148, 2479
1019609af 30ff          movlw   255
10197                   ; # saturate to largest floating
10198                   ; line_number = 1150
10199                   ;info   1150, 2480
1020009b0 00a8          movwf   _float32_aexp
10201                   ; # point number = 0x FF 7F FF FF
10202                   ; line_number = 1152
10203                   ;info   1152, 2481
1020409b1 00a7          movwf   _float32_aargb0
10205                   ; # modulo the appropriate sign bit
10206                   ; line_number = 1154
10207                   ;info   1154, 2482
1020809b2 00a6          movwf   _float32_aargb1
10209                   ; line_number = 1155
10210                   ;info   1155, 2483
1021109b3 00a5          movwf   _float32_aargb2
10212                   ; line_number = 1156
10213                   ;info   1156, 2484
1021409b4 0da9          rlf     _float32_sign,f
10215                   ; line_number = 1157
10216                   ;info   1157, 2485
1021709b5 0ca7          rrf     _float32_aargb0,f
10218                   ; # return error code in WREG
10219                   ; line_number = 1159
10220                   ;info   1159, 2486
1022109b6 34ff          retlw   255
10222           
10223           
10224                   ; delay after procedure statements=non-uniform
10225                   ; Return instruction suppressed by 'return_suppress'
10226           
10227           
10228           
10229           
10230                   ; line_number = 1162
10231                   ;info   1162, 2487
10232                   ; procedure _float32_divide
10233  09b7 :   _float32_divide:
10234                   ; arguments_none
10235                   ; line_number = 1164
10236                   ;  returns_nothing
10237                   ; line_number = 1165
10238                   ;  return_suppress
10239           
10240                   ; # Floating Point Divide
10241                   ; # Input:  32 bit floating point dividend in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10242                   ; #         32 bit floating point divisor in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
10243                   ; # Use: call fpd32()
10244                   ; # Output: 32 bit floating point quotient in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10245                   ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG / _FLOAT32_BARG
10246                   ; # Max Timing:	43+12+23*36+35+14 = 932 clks	RND = 0
10247                   ; #			43+12+23*36+35+50 = 968 clks	RND = 1, SAT = 0
10248                   ; #			43+12+23*36+35+53 = 971 clks    RND = 1, SAT = 1
10249                   ; # Min Timing:	7+6 = 13 clks
10250                   ; # PM: 155		DM: 14
10251           
10252                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
10253                   ; line_number = 1179
10254                   ;  assemble
10255                   ;info   1179, 2487
10256                   ; # test for divide by zero
10257                   ; line_number = 1181
10258                   ;info   1181, 2487
1025909b7 082f          movf    _float32_bexp,w
10260                   ; line_number = 1182
10261                   ;info   1182, 2488
1026209b8 1903          btfsc   _float32_status, _float32_z
10263                   ; line_number = 1183
10264                   ;info   1183, 2489
1026509b9 2a4a          goto    _float32_setfdz32
10266           
10267                   ; line_number = 1185
10268                   ;info   1185, 2490
1026909ba 0828          movf    _float32_aexp,w
10270                   ; line_number = 1186
10271                   ;info   1186, 2491
1027209bb 1903          btfsc   _float32_status, _float32_z
10273                   ; line_number = 1187
10274                   ;info   1187, 2492
1027509bc 2834          goto    _float32_res032
10276           
10277                   ; line_number = 1189
10278  09bd :   _float32_d32bne0:
10279                   ; line_number = 1190
10280                   ;info   1190, 2493
1028109bd 0827          movf    _float32_aargb0,w
10282                   ; line_number = 1191
10283                   ;info   1191, 2494
1028409be 062e          xorwf   _float32_bargb0,w
10285                   ; # save sign in _float32_sign
10286                   ; line_number = 1193
10287                   ;info   1193, 2495
1028809bf 00a9          movwf   _float32_sign
10289                   ; # make argument MSB's explicit
10290                   ; line_number = 1195
10291                   ;info   1195, 2496
1029209c0 17a7          bsf     _float32_aargb0, _float32_msb
10293                   ; line_number = 1196
10294                   ;info   1196, 2497
1029509c1 17ae          bsf     _float32_bargb0, _float32_msb
10296           
10297                   ; line_number = 1198
10298  09c2 :   _float32_talign32:
10299                   ; # clear align increment
10300                   ; line_number = 1200
10301                   ;info   1200, 2498
1030209c2 01b3          clrf    _float32_temp
10303                   ; line_number = 1201
10304                   ;info   1201, 2499
1030509c3 0827          movf    _float32_aargb0,w
10306                   ; # test for alignment
10307                   ; line_number = 1203
10308                   ;info   1203, 2500
1030909c4 00a4          movwf   _float32_aargb3
10310                   ; line_number = 1204
10311                   ;info   1204, 2501
1031209c5 0826          movf    _float32_aargb1,w
10313                   ; line_number = 1205
10314                   ;info   1205, 2502
1031509c6 00a3          movwf   _float32_aargb4
10316                   ; line_number = 1206
10317                   ;info   1206, 2503
1031809c7 0825          movf    _float32_aargb2,w
10319                   ; line_number = 1207
10320                   ;info   1207, 2504
1032109c8 00a2          movwf   _float32_aargb5
10322           
10323                   ; line_number = 1209
10324                   ;info   1209, 2505
1032509c9 082c          movf    _float32_bargb2,w
10326                   ; line_number = 1210
10327                   ;info   1210, 2506
1032809ca 02a2          subwf   _float32_aargb5,f
10329                   ; line_number = 1211
10330                   ;info   1211, 2507
1033109cb 082d          movf    _float32_bargb1,w
10332                   ; line_number = 1212
10333                   ;info   1212, 2508
1033409cc 1c03          btfss   _float32_status, _float32_c
10335                   ; line_number = 1213
10336                   ;info   1213, 2509
1033709cd 0f2d          incfsz  _float32_bargb1,w
10338           
10339                   ; line_number = 1215
10340  09ce :   _float32_ts1align32:
10341                   ; line_number = 1216
10342                   ;info   1216, 2510
1034309ce 02a3          subwf   _float32_aargb4,f
10344                   ; line_number = 1217
10345                   ;info   1217, 2511
1034609cf 082e          movf    _float32_bargb0,w
10347                   ; line_number = 1218
10348                   ;info   1218, 2512
1034909d0 1c03          btfss   _float32_status, _float32_c
10350                   ; line_number = 1219
10351                   ;info   1219, 2513
1035209d1 0f2e          incfsz  _float32_bargb0,w
10353           
10354                   ; line_number = 1221
10355  09d2 :   _float32_ts2align32:
10356                   ; line_number = 1222
10357                   ;info   1222, 2514
1035809d2 02a4          subwf   _float32_aargb3,f
10359           
10360                   ; line_number = 1224
10361                   ;info   1224, 2515
1036209d3 01a4          clrf    _float32_aargb3
10363                   ; line_number = 1225
10364                   ;info   1225, 2516
1036509d4 01a3          clrf    _float32_aargb4
10366                   ; line_number = 1226
10367                   ;info   1226, 2517
1036809d5 01a2          clrf    _float32_aargb5
10369           
10370                   ; line_number = 1228
10371                   ;info   1228, 2518
1037209d6 1c03          btfss   _float32_status, _float32_c
10373                   ; line_number = 1229
10374                   ;info   1229, 2519
1037509d7 29df          goto    _float32_dalign32ok
10376           
10377                   ; # align if necessary
10378                   ; line_number = 1232
10379                   ;info   1232, 2520
1038009d8 1003          bcf     _float32_status, _float32_c
10381                   ; line_number = 1233
10382                   ;info   1233, 2521
1038309d9 0ca7          rrf     _float32_aargb0,f
10384                   ; line_number = 1234
10385                   ;info   1234, 2522
1038609da 0ca6          rrf     _float32_aargb1,f
10387                   ; line_number = 1235
10388                   ;info   1235, 2523
1038909db 0ca5          rrf     _float32_aargb2,f
10390                   ; line_number = 1236
10391                   ;info   1236, 2524
1039209dc 0ca4          rrf     _float32_aargb3,f
10393                   ; line_number = 1237
10394                   ;info   1237, 2525
1039509dd 3001          movlw   1
10396                   ; # save align increment
10397                   ; line_number = 1239
10398                   ;info   1239, 2526
1039909de 00b3          movwf   _float32_temp
10400           
10401                   ; line_number = 1241
10402  09df :   _float32_dalign32ok:
10403                   ; # compare _float32_aexp and _float32_bexp
10404                   ; line_number = 1243
10405                   ;info   1243, 2527
1040609df 082f          movf    _float32_bexp,w
10407                   ; line_number = 1244
10408                   ;info   1244, 2528
1040909e0 02a8          subwf   _float32_exp,f
10410                   ; line_number = 1245
10411                   ;info   1245, 2529
1041209e1 1c03          btfss   _float32_status, _float32_c
10413                   ; line_number = 1246
10414                   ;info   1246, 2530
1041509e2 29e9          goto    _float32_altb32
10416           
10417                   ; line_number = 1248
10418  09e3 :   _float32_ageb32:
10419                   ; line_number = 1249
10420                   ;info   1249, 2531
1042109e3 307e          movlw   _float32_expbias_1
10422                   ; line_number = 1250
10423                   ;info   1250, 2532
1042409e4 0733          addwf   _float32_temp,w
10425                   ; line_number = 1251
10426                   ;info   1251, 2533
1042709e5 07a8          addwf   _float32_exp,f
10428                   ; line_number = 1252
10429                   ;info   1252, 2534
1043009e6 1803          btfsc   _float32_status, _float32_c
10431                   ; line_number = 1253
10432                   ;info   1253, 2535
1043309e7 29ac          goto    _float32_setfov32
10434                   ; # set overflow flag
10435                   ; line_number = 1255
10436                   ;info   1255, 2536
1043709e8 29ee          goto    _float32_dargok32
10438           
10439                   ; line_number = 1257
10440  09e9 :   _float32_altb32:
10441                   ; line_number = 1258
10442                   ;info   1258, 2537
1044309e9 307e          movlw   _float32_expbias_1
10444                   ; line_number = 1259
10445                   ;info   1259, 2538
1044609ea 0733          addwf   _float32_temp,w
10447                   ; line_number = 1260
10448                   ;info   1260, 2539
1044909eb 07a8          addwf   _float32_exp,f
10450                   ; line_number = 1261
10451                   ;info   1261, 2540
1045209ec 1c03          btfss   _float32_status, _float32_c
10453                   ; # set underflow flag
10454                   ; line_number = 1263
10455                   ;info   1263, 2541
1045609ed 2a3f          goto    _float32_setfun32
10457           
10458                   ; line_number = 1265
10459  09ee :   _float32_dargok32:
10460                   ; # initialize counter
10461                   ; line_number = 1267
10462                   ;info   1267, 2542
1046309ee 3018          movlw   24
10464                   ; line_number = 1268
10465                   ;info   1268, 2543
1046609ef 00b2          movwf   _float32_tempb1
10467           
10468                   ; line_number = 1270
10469  09f0 :   _float32_dloop32:
10470                   ; # left shift
10471                   ; line_number = 1272
10472                   ;info   1272, 2544
1047309f0 0da2          rlf     _float32_aargb5,f
10474                   ; line_number = 1273
10475                   ;info   1273, 2545
1047609f1 0da3          rlf     _float32_aargb4,f
10477                   ; line_number = 1274
10478                   ;info   1274, 2546
1047909f2 0da4          rlf     _float32_aargb3,f
10480                   ; line_number = 1275
10481                   ;info   1275, 2547
1048209f3 0da5          rlf     _float32_aargb2,f
10483                   ; line_number = 1276
10484                   ;info   1276, 2548
1048509f4 0da6          rlf     _float32_aargb1,f
10486                   ; line_number = 1277
10487                   ;info   1277, 2549
1048809f5 0da7          rlf     _float32_aargb0,f
10489                   ; line_number = 1278
10490                   ;info   1278, 2550
1049109f6 0db3          rlf     _float32_temp,f
10492           
10493                   ; # subtract
10494                   ; line_number = 1281
10495                   ;info   1281, 2551
1049609f7 082c          movf    _float32_bargb2,w
10497                   ; line_number = 1282
10498                   ;info   1282, 2552
1049909f8 02a5          subwf   _float32_aargb2,f
10500                   ; line_number = 1283
10501                   ;info   1283, 2553
1050209f9 082d          movf    _float32_bargb1,w
10503                   ; line_number = 1284
10504                   ;info   1284, 2554
1050509fa 1c03          btfss   _float32_status, _float32_c
10506                   ; line_number = 1285
10507                   ;info   1285, 2555
1050809fb 0f2d          incfsz  _float32_bargb1,w
10509                   ; line_number = 1286
10510  09fc :   _float32_ds132:
10511                   ; line_number = 1287
10512                   ;info   1287, 2556
1051309fc 02a6          subwf   _float32_aargb1,f
10514           
10515                   ; line_number = 1289
10516                   ;info   1289, 2557
1051709fd 082e          movf    _float32_bargb0,w
10518                   ; line_number = 1290
10519                   ;info   1290, 2558
1052009fe 1c03          btfss   _float32_status, _float32_c
10521                   ; line_number = 1291
10522                   ;info   1291, 2559
1052309ff 0f2e          incfsz  _float32_bargb0,w
10524                   ; line_number = 1292
10525  0a00 :   _float32_DS232:
10526                   ; line_number = 1293
10527                   ;info   1293, 2560
105280a00 02a7          subwf   _float32_aargb0,f
10529           
10530                   ; line_number = 1295
10531                   ;info   1295, 2561
105320a01 0d2e          rlf     _float32_bargb0,w
10533                   ; line_number = 1296
10534                   ;info   1296, 2562
105350a02 04b3          iorwf   _float32_temp,f
10536           
10537                   ; # test for restore
10538                   ; line_number = 1299
10539                   ;info   1299, 2563
105400a03 1c33          btfss   _float32_temp, _float32_lsb
10541                   ; line_number = 1300
10542                   ;info   1300, 2564
105430a04 2a07          goto    _float32_drest32
10544           
10545                   ; line_number = 1302
10546                   ;info   1302, 2565
105470a05 1422          bsf     _float32_aargb5, _float32_lsb
10548                   ; line_number = 1303
10549                   ;info   1303, 2566
105500a06 2a12          goto    _float32_dok32
10551           
10552                   ; line_number = 1305
10553  0a07 :   _float32_drest32:
10554                   ; # restore if necessary
10555                   ; line_number = 1307
10556                   ;info   1307, 2567
105570a07 082c          movf    _float32_bargb2,w
10558                   ; line_number = 1308
10559                   ;info   1308, 2568
105600a08 07a5          addwf   _float32_aargb2,f
10561                   ; line_number = 1309
10562                   ;info   1309, 2569
105630a09 082d          movf    _float32_bargb1,w
10564                   ; line_number = 1310
10565                   ;info   1310, 2570
105660a0a 1803          btfsc   _float32_status, _float32_c
10567                   ; line_number = 1311
10568                   ;info   1311, 2571
105690a0b 0f2d          incfsz  _float32_bargb1,w
10570                   ; line_number = 1312
10571  0a0c :   _float32_darest32:
10572                   ; line_number = 1313
10573                   ;info   1313, 2572
105740a0c 07a6          addwf   _float32_aargb1,f
10575           
10576                   ; line_number = 1315
10577                   ;info   1315, 2573
105780a0d 082e          movf    _float32_bargb0,w
10579                   ; line_number = 1316
10580                   ;info   1316, 2574
105810a0e 1803          btfsc   _float32_status, _float32_c
10582                   ; line_number = 1317
10583                   ;info   1317, 2575
105840a0f 0a2e          incf    _float32_bargb0,w
10585                   ; line_number = 1318
10586                   ;info   1318, 2576
105870a10 07a7          addwf   _float32_aargb0,f
10588           
10589                   ; line_number = 1320
10590                   ;info   1320, 2577
105910a11 1022          bcf     _float32_aargb5, _float32_lsb
10592           
10593                   ; line_number = 1322
10594  0a12 :   _float32_dok32:
10595                   ; line_number = 1323
10596                   ;info   1323, 2578
105970a12 0bb2          decfsz  _float32_tempb1,f
10598                   ; line_number = 1324
10599                   ;info   1324, 2579
106000a13 29f0          goto    _float32_dloop32
10601           
10602                   ; line_number = 1326
10603  0a14 :   _float32_dround32:
10604                   ; line_number = 1327
10605                   ;info   1327, 2580
106060a14 1b2a          btfsc   _float32_fpflags, _float32_rnd
10607                   ; line_number = 1328
10608                   ;info   1328, 2581
106090a15 1c22          btfss   _float32_aargb5, _float32_lsb
10610                   ; line_number = 1329
10611                   ;info   1329, 2582
106120a16 2a36          goto    _float32_div32ok
10613                   ; line_number = 1330
10614                   ;info   1330, 2583
106150a17 1003          bcf     _float32_status, _float32_c
10616                   ; # compute next significant bit
10617                   ; line_number = 1332
10618                   ;info   1332, 2584
106190a18 0da5          rlf     _float32_aargb2,f
10620                   ; # for rounding
10621                   ; line_number = 1334
10622                   ;info   1334, 2585
106230a19 0da6          rlf     _float32_aargb1,f
10624                   ; line_number = 1335
10625                   ;info   1335, 2586
106260a1a 0da7          rlf     _float32_aargb0,f
10627                   ; line_number = 1336
10628                   ;info   1336, 2587
106290a1b 0db3          rlf     _float32_temp,f
10630           
10631                   ; # subtract
10632                   ; line_number = 1339
10633                   ;info   1339, 2588
106340a1c 082c          movf    _float32_bargb2,w
10635                   ; line_number = 1340
10636                   ;info   1340, 2589
106370a1d 02a5          subwf   _float32_aargb2,f
10638                   ; line_number = 1341
10639                   ;info   1341, 2590
106400a1e 082d          movf    _float32_bargb1,w
10641                   ; line_number = 1342
10642                   ;info   1342, 2591
106430a1f 1c03          btfss   _float32_status, _float32_c
10644                   ; line_number = 1343
10645                   ;info   1343, 2592
106460a20 0f2d          incfsz  _float32_bargb1,w
10647                   ; line_number = 1344
10648                   ;info   1344, 2593
106490a21 02a6          subwf   _float32_aargb1,f
10650           
10651                   ; line_number = 1346
10652                   ;info   1346, 2594
106530a22 082e          movf    _float32_bargb0,w
10654                   ; line_number = 1347
10655                   ;info   1347, 2595
106560a23 1c03          btfss   _float32_status, _float32_c
10657                   ; line_number = 1348
10658                   ;info   1348, 2596
106590a24 0f2e          incfsz  _float32_bargb0,w
10660                   ; line_number = 1349
10661                   ;info   1349, 2597
106620a25 02a7          subwf   _float32_aargb0,f
10663           
10664                   ; line_number = 1351
10665                   ;info   1351, 2598
106660a26 0d2e          rlf     _float32_bargb0,w
10667                   ; line_number = 1352
10668                   ;info   1352, 2599
106690a27 0433          iorwf   _float32_temp,w
10670                   ; line_number = 1353
10671                   ;info   1353, 2600
106720a28 3901          andlw   1
10673           
10674                   ; line_number = 1355
10675                   ;info   1355, 2601
106760a29 07a2          addwf   _float32_aargb5,f
10677                   ; line_number = 1356
10678                   ;info   1356, 2602
106790a2a 1803          btfsc   _float32_status, _float32_c
10680                   ; line_number = 1357
10681                   ;info   1357, 2603
106820a2b 0aa3          incf    _float32_aargb4,f
10683                   ; line_number = 1358
10684                   ;info   1358, 2604
106850a2c 1903          btfsc   _float32_status, _float32_z
10686                   ; line_number = 1359
10687                   ;info   1359, 2605
106880a2d 0aa4          incf    _float32_aargb3,f
10689           
10690                   ; # test if rounding caused carryout
10691                   ; line_number = 1362
10692                   ;info   1362, 2606
106930a2e 1d03          btfss   _float32_status, _float32_z
10694                   ; line_number = 1363
10695                   ;info   1363, 2607
106960a2f 2a36          goto    _float32_div32ok
10697                   ; line_number = 1364
10698                   ;info   1364, 2608
106990a30 0ca4          rrf     _float32_aargb3,f
10700                   ; line_number = 1365
10701                   ;info   1365, 2609
107020a31 0ca3          rrf     _float32_aargb4,f
10703                   ; line_number = 1366
10704                   ;info   1366, 2610
107050a32 0ca2          rrf     _float32_aargb5,f
10706                   ; line_number = 1367
10707                   ;info   1367, 2611
107080a33 0aa8          incf    _float32_exp,f
10709                   ; # test for overflow#
10710                   ; line_number = 1369
10711                   ;info   1369, 2612
107120a34 1903          btfsc   _float32_status, _float32_z
10713                   ; line_number = 1370
10714                   ;info   1370, 2613
107150a35 29ac          goto    _float32_setfov32
10716           
10717                   ; line_number = 1372
10718  0a36 :   _float32_div32ok:
10719                   ; line_number = 1373
10720                   ;info   1373, 2614
107210a36 1fa9          btfss   _float32_sign, _float32_msb
10722                   ; # clear explicit MSB if positive
10723                   ; line_number = 1375
10724                   ;info   1375, 2615
107250a37 13a4          bcf     _float32_aargb3, _float32_msb
10726           
10727                   ; line_number = 1377
10728                   ;info   1377, 2616
107290a38 0824          movf    _float32_aargb3,w
10730                   ; # move result to _FLOAT32_AARG
10731                   ; line_number = 1379
10732                   ;info   1379, 2617
107330a39 00a7          movwf   _float32_aargb0
10734                   ; line_number = 1380
10735                   ;info   1380, 2618
107360a3a 0823          movf    _float32_aargb4,w
10737                   ; line_number = 1381
10738                   ;info   1381, 2619
107390a3b 00a6          movwf   _float32_aargb1
10740                   ; line_number = 1382
10741                   ;info   1382, 2620
107420a3c 0822          movf    _float32_aargb5,w
10743                   ; line_number = 1383
10744                   ;info   1383, 2621
107450a3d 00a5          movwf   _float32_aargb2
10746           
10747                   ; line_number = 1385
10748                   ;info   1385, 2622
107490a3e 3400          retlw   0
10750           
10751                   ; line_number = 1387
10752  0a3f :   _float32_setfun32:
10753                   ; # set floating point underflag
10754                   ; line_number = 1389
10755                   ;info   1389, 2623
107560a3f 152a          bsf     _float32_fpflags, _float32_fun
10757                   ; # test for saturation
10758                   ; line_number = 1391
10759                   ;info   1391, 2624
107600a40 1faa          btfss   _float32_fpflags, _float32_sat
10761                   ; # return error code in WREG
10762                   ; line_number = 1393
10763                   ;info   1393, 2625
107640a41 34ff          retlw   255
10765           
10766                   ; # saturate to smallest floating
10767                   ; line_number = 1396
10768                   ;info   1396, 2626
107690a42 3001          movlw   1
10770                   ; # point number = 0x 01 00 00 00
10771                   ; line_number = 1398
10772                   ;info   1398, 2627
107730a43 00a8          movwf   _float32_aexp
10774                   ; # modulo the appropriate sign bit
10775                   ; line_number = 1400
10776                   ;info   1400, 2628
107770a44 01a7          clrf    _float32_aargb0
10778                   ; line_number = 1401
10779                   ;info   1401, 2629
107800a45 01a6          clrf    _float32_aargb1
10781                   ; line_number = 1402
10782                   ;info   1402, 2630
107830a46 01a5          clrf    _float32_aargb2
10784                   ; line_number = 1403
10785                   ;info   1403, 2631
107860a47 0da9          rlf     _float32_sign,f
10787                   ; line_number = 1404
10788                   ;info   1404, 2632
107890a48 0ca7          rrf     _float32_aargb0,f
10790                   ; # return error code in WREG
10791                   ; line_number = 1406
10792                   ;info   1406, 2633
107930a49 34ff          retlw   255
10794           
10795                   ; # set divide by zero flag
10796                   ; line_number = 1409
10797  0a4a :   _float32_setfdz32:
10798                   ; line_number = 1410
10799                   ;info   1410, 2634
108000a4a 15aa          bsf     _float32_fpflags, _float32_fdz
10801                   ; line_number = 1411
10802                   ;info   1411, 2635
108030a4b 34ff          retlw   255
10804           
10805           
10806                   ; delay after procedure statements=non-uniform
10807                   ; Return instruction suppressed by 'return_suppress'
10808           
10809           
10810           
10811           
10812                   ; line_number = 1414
10813                   ;info   1414, 2636
10814                   ; procedure _float32_subtract
10815  0a4c :   _float32_subtract:
10816                   ; arguments_none
10817                   ; line_number = 1416
10818                   ;  returns_nothing
10819                   ; line_number = 1417
10820                   ;  return_suppress
10821           
10822                   ; # Floating Point Subtract
10823                   ; # Input:  32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10824                   ; #         32 bit floating point number in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
10825                   ; # Use: call fps32()
10826                   ; # Output: 32 bit floating point sum in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10827                   ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG - _FLOAT32_BARG
10828                   ; # Max Timing:	2+251 = 253 clks	RND = 0
10829                   ; #			2+265 = 267 clks	RND = 1, SAT = 0
10830                   ; #			2+271 = 273 clks	RND = 1, SAT = 1
10831                   ; # Min Timing:	2+12 = 14 clks
10832                   ; # PM: 2+146 = 148	DM: 14
10833           
10834                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
10835                   ; line_number = 1431
10836                   ;  assemble
10837                   ;info   1431, 2636
10838                   ; line_number = 1432
10839                   ;info   1432, 2636
108400a4c 3080          movlw   128
10841                   ; line_number = 1433
10842                   ;info   1433, 2637
108430a4d 06ae          xorwf   _float32_bargb0,f
10844                   ; # This procedure runs into FPA32
10845                   ; #goto fpa32
10846           
10847           
10848                   ; delay after procedure statements=non-uniform
10849                   ; Return instruction suppressed by 'return_suppress'
10850           
10851           
10852           
10853           
10854                   ; line_number = 1438
10855                   ;info   1438, 2638
10856                   ; procedure _float32_add
10857  0a4e :   _float32_add:
10858                   ; arguments_none
10859                   ; line_number = 1440
10860                   ;  returns_nothing
10861                   ; line_number = 1441
10862                   ;  return_suppress
10863           
10864                   ; # Floating Point Add
10865                   ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10866                   ; #        32 bit floating point number in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
10867                   ; # Use: call fpa32()
10868                   ; # Output: 32 bit floating point sum in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
10869                   ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG - _FLOAT32_BARG
10870                   ; # Max Timing:	31+41+6*7+6+41+90 = 251 clks	RND = 0
10871                   ; #			31+41+6*7+6+55+90 = 265 clks	RND = 1, SAT = 0
10872                   ; #			31+41+6*7+6+55+96 = 271 clks	RND = 1, SAT = 1
10873                   ; # Min Timing:	8+4 = 12 clks
10874                   ; # PM: 146		DM: 14
10875           
10876                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
10877                   ; line_number = 1455
10878                   ;  assemble
10879                   ;info   1455, 2638
10880                   ; # exclusive or of signs in temp
10881                   ; line_number = 1457
10882                   ;info   1457, 2638
108830a4e 0827          movf    _float32_aargb0,w
10884                   ; line_number = 1458
10885                   ;info   1458, 2639
108860a4f 062e          xorwf   _float32_bargb0,w
10887                   ; line_number = 1459
10888                   ;info   1459, 2640
108890a50 00b3          movwf   _float32_temp
10890           
10891                   ; # clear extended byte
10892                   ; line_number = 1462
10893                   ;info   1462, 2641
108940a51 01a4          clrf    _float32_aargb3
10895                   ; line_number = 1463
10896                   ;info   1463, 2642
108970a52 01ab          clrf    _float32_bargb3
10898           
10899                   ; # use _FLOAT32_AARG if _float32_aexp >= _float32_bexp
10900                   ; line_number = 1466
10901                   ;info   1466, 2643
109020a53 0828          movf    _float32_aexp,w
10903                   ; line_number = 1467
10904                   ;info   1467, 2644
109050a54 022f          subwf   _float32_bexp,w
10906                   ; line_number = 1468
10907                   ;info   1468, 2645
109080a55 1c03          btfss   _float32_status, _float32_c
10909                   ; line_number = 1469
10910                   ;info   1469, 2646
109110a56 2a6f          goto    _float32_usea32
10912           
10913                   ; # use _FLOAT32_BARG if _float32_aexp < _float32_bexp
10914                   ; line_number = 1472
10915                   ;info   1472, 2647
109160a57 082f          movf    _float32_bexp,w
10917                   ; # therefore, swap _FLOAT32_AARG and _FLOAT32_BARG
10918                   ; line_number = 1474
10919                   ;info   1474, 2648
109200a58 00a2          movwf   _float32_aargb5
10921                   ; line_number = 1475
10922                   ;info   1475, 2649
109230a59 0828          movf    _float32_aexp,w
10924                   ; line_number = 1476
10925                   ;info   1476, 2650
109260a5a 00af          movwf   _float32_bexp
10927                   ; line_number = 1477
10928                   ;info   1477, 2651
109290a5b 0822          movf    _float32_aargb5,w
10930                   ; line_number = 1478
10931                   ;info   1478, 2652
109320a5c 00a8          movwf   _float32_aexp
10933           
10934                   ; line_number = 1480
10935                   ;info   1480, 2653
109360a5d 082e          movf    _float32_bargb0,w
10937                   ; line_number = 1481
10938                   ;info   1481, 2654
109390a5e 00a2          movwf   _float32_aargb5
10940                   ; line_number = 1482
10941                   ;info   1482, 2655
109420a5f 0827          movf    _float32_aargb0,w
10943                   ; line_number = 1483
10944                   ;info   1483, 2656
109450a60 00ae          movwf   _float32_bargb0
10946                   ; line_number = 1484
10947                   ;info   1484, 2657
109480a61 0822          movf    _float32_aargb5,w
10949                   ; line_number = 1485
10950                   ;info   1485, 2658
109510a62 00a7          movwf   _float32_aargb0
10952           
10953                   ; line_number = 1487
10954                   ;info   1487, 2659
109550a63 082d          movf    _float32_bargb1,w
10956                   ; line_number = 1488
10957                   ;info   1488, 2660
109580a64 00a2          movwf   _float32_aargb5
10959                   ; line_number = 1489
10960                   ;info   1489, 2661
109610a65 0826          movf    _float32_aargb1,w
10962                   ; line_number = 1490
10963                   ;info   1490, 2662
109640a66 00ad          movwf   _float32_bargb1
10965                   ; line_number = 1491
10966                   ;info   1491, 2663
109670a67 0822          movf    _float32_aargb5,w
10968                   ; line_number = 1492
10969                   ;info   1492, 2664
109700a68 00a6          movwf   _float32_aargb1
10971           
10972                   ; line_number = 1494
10973                   ;info   1494, 2665
109740a69 082c          movf    _float32_bargb2,w
10975                   ; line_number = 1495
10976                   ;info   1495, 2666
109770a6a 00a2          movwf   _float32_aargb5
10978                   ; line_number = 1496
10979                   ;info   1496, 2667
109800a6b 0825          movf    _float32_aargb2,w
10981                   ; line_number = 1497
10982                   ;info   1497, 2668
109830a6c 00ac          movwf   _float32_bargb2
10984                   ; line_number = 1498
10985                   ;info   1498, 2669
109860a6d 0822          movf    _float32_aargb5,w
10987                   ; line_number = 1499
10988                   ;info   1499, 2670
109890a6e 00a5          movwf   _float32_aargb2
10990           
10991                   ; line_number = 1501
10992  0a6f :   _float32_usea32:
10993                   ; # return _FLOAT32_AARG if _FLOAT32_BARG = 0
10994                   ; line_number = 1503
10995                   ;info   1503, 2671
109960a6f 082f          movf    _float32_bexp,w
10997                   ; line_number = 1504
10998                   ;info   1504, 2672
109990a70 1903          btfsc   _float32_status, _float32_z
11000                   ; line_number = 1505
11001                   ;info   1505, 2673
110020a71 3400          retlw   0
11003           
11004                   ; line_number = 1507
11005                   ;info   1507, 2674
110060a72 0827          movf    _float32_aargb0,w
11007                   ; # save sign in _float32_sign
11008                   ; line_number = 1509
11009                   ;info   1509, 2675
110100a73 00a9          movwf   _float32_sign
11011                   ; # make MSB's explicit
11012                   ; line_number = 1511
11013                   ;info   1511, 2676
110140a74 17a7          bsf     _float32_aargb0, _float32_msb
11015                   ; line_number = 1512
11016                   ;info   1512, 2677
110170a75 17ae          bsf     _float32_bargb0, _float32_msb
11018           
11019                   ; # compute shift count in _float32_bexp
11020                   ; line_number = 1515
11021                   ;info   1515, 2678
110220a76 082f          movf    _float32_bexp,w
11023                   ; line_number = 1516
11024                   ;info   1516, 2679
110250a77 0228          subwf   _float32_aexp,w
11026                   ; line_number = 1517
11027                   ;info   1517, 2680
110280a78 00af          movwf   _float32_bexp
11029                   ; line_number = 1518
11030                   ;info   1518, 2681
110310a79 1903          btfsc   _float32_status, _float32_z
11032                   ; line_number = 1519
11033                   ;info   1519, 2682
110340a7a 2aa2          goto    _float32_aligned32
11035           
11036                   ; line_number = 1521
11037                   ;info   1521, 2683
110380a7b 3008          movlw   8
11039                   ; line_number = 1522
11040                   ;info   1522, 2684
110410a7c 022f          subwf   _float32_bexp,w
11042                   ; # if _float32_bexp >= 8, do byte shift
11043                   ; line_number = 1524
11044                   ;info   1524, 2685
110450a7d 1c03          btfss   _float32_status, _float32_c
11046                   ; line_number = 1525
11047                   ;info   1525, 2686
110480a7e 2a98          goto    _float32_alignb32
11049                   ; line_number = 1526
11050                   ;info   1526, 2687
110510a7f 00af          movwf   _float32_bexp
11052                   ; # keep for postnormalization
11053                   ; line_number = 1528
11054                   ;info   1528, 2688
110550a80 082c          movf    _float32_bargb2,w
11056                   ; line_number = 1529
11057                   ;info   1529, 2689
110580a81 00ab          movwf   _float32_bargb3
11059                   ; line_number = 1530
11060                   ;info   1530, 2690
110610a82 082d          movf    _float32_bargb1,w
11062                   ; line_number = 1531
11063                   ;info   1531, 2691
110640a83 00ac          movwf   _float32_bargb2
11065                   ; line_number = 1532
11066                   ;info   1532, 2692
110670a84 082e          movf    _float32_bargb0,w
11068                   ; line_number = 1533
11069                   ;info   1533, 2693
110700a85 00ad          movwf   _float32_bargb1
11071                   ; line_number = 1534
11072                   ;info   1534, 2694
110730a86 01ae          clrf    _float32_bargb0
11074           
11075                   ; line_number = 1536
11076                   ;info   1536, 2695
110770a87 3008          movlw   8
11078                   ; line_number = 1537
11079                   ;info   1537, 2696
110800a88 022f          subwf   _float32_bexp,w
11081                   ; # if _float32_bexp >= 8, do byte shift
11082                   ; line_number = 1539
11083                   ;info   1539, 2697
110840a89 1c03          btfss   _float32_status, _float32_c
11085                   ; line_number = 1540
11086                   ;info   1540, 2698
110870a8a 2a98          goto    _float32_alignb32
11088                   ; line_number = 1541
11089                   ;info   1541, 2699
110900a8b 00af          movwf   _float32_bexp
11091                   ; # keep for postnormalization
11092                   ; line_number = 1543
11093                   ;info   1543, 2700
110940a8c 082c          movf    _float32_bargb2,w
11095                   ; line_number = 1544
11096                   ;info   1544, 2701
110970a8d 00ab          movwf   _float32_bargb3
11098                   ; line_number = 1545
11099                   ;info   1545, 2702
111000a8e 082d          movf    _float32_bargb1,w
11101                   ; line_number = 1546
11102                   ;info   1546, 2703
111030a8f 00ac          movwf   _float32_bargb2
11104                   ; line_number = 1547
11105                   ;info   1547, 2704
111060a90 01ad          clrf    _float32_bargb1
11107           
11108                   ; line_number = 1549
11109                   ;info   1549, 2705
111100a91 3008          movlw   8
11111                   ; line_number = 1550
11112                   ;info   1550, 2706
111130a92 022f          subwf   _float32_bexp,w
11114                   ; # if _float32_bexp >= 8, _FLOAT32_BARG = 0 relative to _FLOAT32_AARG
11115                   ; line_number = 1552
11116                   ;info   1552, 2707
111170a93 1c03          btfss   _float32_status, _float32_c
11118                   ; line_number = 1553
11119                   ;info   1553, 2708
111200a94 2a98          goto    _float32_alignb32
11121                   ; line_number = 1554
11122                   ;info   1554, 2709
111230a95 0829          movf    _float32_sign,w
11124                   ; line_number = 1555
11125                   ;info   1555, 2710
111260a96 00a7          movwf   _float32_aargb0
11127                   ; line_number = 1556
11128                   ;info   1556, 2711
111290a97 3400          retlw   0
11130           
11131                   ; line_number = 1558
11132  0a98 :   _float32_alignb32:
11133                   ; # already aligned if _float32_bexp = 0
11134                   ; line_number = 1560
11135                   ;info   1560, 2712
111360a98 082f          movf    _float32_bexp,w
11137                   ; line_number = 1561
11138                   ;info   1561, 2713
111390a99 1903          btfsc   _float32_status, _float32_z
11140                   ; line_number = 1562
11141                   ;info   1562, 2714
111420a9a 2aa2          goto    _float32_aligned32
11143           
11144                   ; line_number = 1564
11145  0a9b :   _float32_aloopb32:
11146                   ; # right shift by _float32_bexp
11147                   ; line_number = 1566
11148                   ;info   1566, 2715
111490a9b 1003          bcf     _float32_status, _float32_c
11150                   ; line_number = 1567
11151                   ;info   1567, 2716
111520a9c 0cae          rrf     _float32_bargb0,f
11153                   ; line_number = 1568
11154                   ;info   1568, 2717
111550a9d 0cad          rrf     _float32_bargb1,f
11156                   ; line_number = 1569
11157                   ;info   1569, 2718
111580a9e 0cac          rrf     _float32_bargb2,f
11159                   ; line_number = 1570
11160                   ;info   1570, 2719
111610a9f 0cab          rrf     _float32_bargb3,f
11162                   ; line_number = 1571
11163                   ;info   1571, 2720
111640aa0 0baf          decfsz  _float32_bexp,f
11165                   ; line_number = 1572
11166                   ;info   1572, 2721
111670aa1 2a9b          goto    _float32_aloopb32
11168           
11169                   ; line_number = 1574
11170  0aa2 :   _float32_aligned32:
11171                   ; # negate if signs opposite
11172                   ; line_number = 1576
11173                   ;info   1576, 2722
111740aa2 1fb3          btfss   _float32_temp, _float32_msb
11175                   ; line_number = 1577
11176                   ;info   1577, 2723
111770aa3 2aaf          goto    _float32_aok32
11178           
11179                   ; line_number = 1579
11180                   ;info   1579, 2724
111810aa4 09ab          comf    _float32_bargb3,f
11182                   ; line_number = 1580
11183                   ;info   1580, 2725
111840aa5 09ac          comf    _float32_bargb2,f
11185                   ; line_number = 1581
11186                   ;info   1581, 2726
111870aa6 09ad          comf    _float32_bargb1,f
11188                   ; line_number = 1582
11189                   ;info   1582, 2727
111900aa7 09ae          comf    _float32_bargb0,f
11191                   ; line_number = 1583
11192                   ;info   1583, 2728
111930aa8 0aab          incf    _float32_bargb3,f
11194                   ; line_number = 1584
11195                   ;info   1584, 2729
111960aa9 1903          btfsc   _float32_status, _float32_z
11197                   ; line_number = 1585
11198                   ;info   1585, 2730
111990aaa 0aac          incf    _float32_bargb2,f
11200                   ; line_number = 1586
11201                   ;info   1586, 2731
112020aab 1903          btfsc   _float32_status, _float32_z
11203                   ; line_number = 1587
11204                   ;info   1587, 2732
112050aac 0aad          incf    _float32_bargb1,f
11206                   ; line_number = 1588
11207                   ;info   1588, 2733
112080aad 1903          btfsc   _float32_status, _float32_z
11209                   ; line_number = 1589
11210                   ;info   1589, 2734
112110aae 0aae          incf    _float32_bargb0,f
11212           
11213                   ; line_number = 1591
11214  0aaf :   _float32_aok32:
11215                   ; line_number = 1592
11216                   ;info   1592, 2735
112170aaf 082b          movf    _float32_bargb3,w
11218                   ; line_number = 1593
11219                   ;info   1593, 2736
112200ab0 07a4          addwf   _float32_aargb3,f
11221                   ; line_number = 1594
11222                   ;info   1594, 2737
112230ab1 082c          movf    _float32_bargb2,w
11224                   ; line_number = 1595
11225                   ;info   1595, 2738
112260ab2 1803          btfsc   _float32_status, _float32_c
11227                   ; line_number = 1596
11228                   ;info   1596, 2739
112290ab3 0f2c          incfsz  _float32_bargb2,w
11230                   ; line_number = 1597
11231                   ;info   1597, 2740
112320ab4 07a5          addwf   _float32_aargb2,f
11233                   ; line_number = 1598
11234                   ;info   1598, 2741
112350ab5 082d          movf    _float32_bargb1,w
11236                   ; line_number = 1599
11237                   ;info   1599, 2742
112380ab6 1803          btfsc   _float32_status, _float32_c
11239                   ; line_number = 1600
11240                   ;info   1600, 2743
112410ab7 0f2d          incfsz  _float32_bargb1,w
11242                   ; line_number = 1601
11243                   ;info   1601, 2744
112440ab8 07a6          addwf   _float32_aargb1,f
11245                   ; line_number = 1602
11246                   ;info   1602, 2745
112470ab9 082e          movf    _float32_bargb0,w
11248                   ; line_number = 1603
11249                   ;info   1603, 2746
112500aba 1803          btfsc   _float32_status, _float32_c
11251                   ; line_number = 1604
11252                   ;info   1604, 2747
112530abb 0f2e          incfsz  _float32_bargb0,w
11254                   ; line_number = 1605
11255                   ;info   1605, 2748
112560abc 07a7          addwf   _float32_aargb0,f
11257           
11258                   ; line_number = 1607
11259                   ;info   1607, 2749
112600abd 1bb3          btfsc   _float32_temp, _float32_msb
11261                   ; line_number = 1608
11262                   ;info   1608, 2750
112630abe 2ac8          goto    _float32_acomp32
11264                   ; line_number = 1609
11265                   ;info   1609, 2751
112660abf 1c03          btfss   _float32_status, _float32_c
11267                   ; line_number = 1610
11268                   ;info   1610, 2752
112690ac0 287a          goto    _float32_nrmrnd4032
11270           
11271                   ; # shift right and increment exp
11272                   ; line_number = 1613
11273                   ;info   1613, 2753
112740ac1 0ca7          rrf     _float32_aargb0,f
11275                   ; line_number = 1614
11276                   ;info   1614, 2754
112770ac2 0ca6          rrf     _float32_aargb1,f
11278                   ; line_number = 1615
11279                   ;info   1615, 2755
112800ac3 0ca5          rrf     _float32_aargb2,f
11281                   ; line_number = 1616
11282                   ;info   1616, 2756
112830ac4 0ca4          rrf     _float32_aargb3,f
11284                   ; line_number = 1617
11285                   ;info   1617, 2757
112860ac5 0fa8          incfsz  _float32_aexp,f
11287                   ; line_number = 1618
11288                   ;info   1618, 2758
112890ac6 287a          goto    _float32_nrmrnd4032
11290                   ; line_number = 1619
11291                   ;info   1619, 2759
112920ac7 29ac          goto    _float32_setfov32
11293           
11294                   ; line_number = 1621
11295  0ac8 :   _float32_acomp32:
11296                   ; line_number = 1622
11297                   ;info   1622, 2760
112980ac8 1803          btfsc   _float32_status, _float32_c
11299                   ; # normalize and fix sign
11300                   ; line_number = 1624
11301                   ;info   1624, 2761
113020ac9 284b          goto    _float32_normalize40
11303           
11304                   ; line_number = 1626
11305                   ;info   1626, 2762
113060aca 09a4          comf    _float32_aargb3,f
11307                   ; # negate, toggle sign bit and
11308                   ; line_number = 1628
11309                   ;info   1628, 2763
113100acb 09a5          comf    _float32_aargb2,f
11311                   ; # then normalize
11312                   ; line_number = 1630
11313                   ;info   1630, 2764
113140acc 09a6          comf    _float32_aargb1,f
11315                   ; line_number = 1631
11316                   ;info   1631, 2765
113170acd 09a7          comf    _float32_aargb0,f
11318                   ; line_number = 1632
11319                   ;info   1632, 2766
113200ace 0aa4          incf    _float32_aargb3,f
11321                   ; line_number = 1633
11322                   ;info   1633, 2767
113230acf 1903          btfsc   _float32_status, _float32_z
11324                   ; line_number = 1634
11325                   ;info   1634, 2768
113260ad0 0aa5          incf    _float32_aargb2,f
11327                   ; line_number = 1635
11328                   ;info   1635, 2769
113290ad1 1903          btfsc   _float32_status, _float32_z
11330                   ; line_number = 1636
11331                   ;info   1636, 2770
113320ad2 0aa6          incf    _float32_aargb1,f
11333                   ; line_number = 1637
11334                   ;info   1637, 2771
113350ad3 1903          btfsc   _float32_status, _float32_z
11336                   ; line_number = 1638
11337                   ;info   1638, 2772
113380ad4 0aa7          incf    _float32_aargb0,f
11339           
11340                   ; line_number = 1640
11341                   ;info   1640, 2773
113420ad5 3080          movlw   128
11343                   ; line_number = 1641
11344                   ;info   1641, 2774
113450ad6 06a9          xorwf   _float32_sign,f
11346                   ; line_number = 1642
11347                   ;info   1642, 2775
113480ad7 280e          goto    _float32_nrm32
11349           
11350           
11351                   ; delay after procedure statements=non-uniform
11352                   ; Return instruction suppressed by 'return_suppress'
11353           
11354           
11355           
11356           
11357                   ; buffer = '_float32'
11358                   ; line_number = 50
11359                   ;info   50, 2776
11360                   ; procedure _float32_pointer_load
11361  0ad8 :   _float32_pointer_load:
11362                   ; Last argument is sitting in W; save into argument variable
113630ad8 00c4          movwf   _float32_pointer_load__pointer
11364                   ; delay=4294967295
11365                   ; line_number = 51
11366                   ; argument pointer byte
11367000000c4 = _float32_pointer_load__pointer equ globals___1+36
11368                   ; line_number = 52
11369                   ;  returns_nothing
11370           
11371                   ; # This procedure will load the float32 "A" register with {pointer}.
11372           
11373                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11374                   ; line_number = 56
11375                   ;  assemble
11376                   ;info   56, 2777
11377                   ; # Pointer is in W; move it to {_fsr}:
11378                   ; line_number = 58
11379                   ;info   58, 2777
113800ad9 0084          movwf   _fsr
11381                   ; # Set up {_irp} and _{fsr}:
11382                   ; line_number = 60
11383                   ;info   60, 2778
113840ada 1383          bcf     _irp___byte, _irp___bit
11385                   ; line_number = 61
11386                   ;info   61, 2779
113870adb 0d84          rlf     _fsr,f
11388                   ; line_number = 62
11389                   ;info   62, 2780
113900adc 1803          btfsc   _c___byte, _c___bit
11391                   ; line_number = 63
11392                   ;info   63, 2781
113930add 1783          bsf     _irp___byte, _irp___bit
11394                   ; line_number = 64
11395                   ;info   64, 2782
113960ade 1004          bcf     _fsr, 0
11397                   ; # Grab the value and store into {_float32_aexp},...,{_float32_aargb2}
11398                   ; line_number = 66
11399                   ;info   66, 2783
114000adf 0800          movf    _indf,w
11401                   ; line_number = 67
11402                   ;info   67, 2784
114030ae0 00a8          movwf   _float32_aexp
11404                   ; line_number = 68
11405                   ;info   68, 2785
114060ae1 0a84          incf    _fsr,f
11407                   ; line_number = 69
11408                   ;info   69, 2786
114090ae2 0800          movf    _indf,w
11410                   ; line_number = 70
11411                   ;info   70, 2787
114120ae3 00a7          movwf   _float32_aargb0
11413                   ; line_number = 71
11414                   ;info   71, 2788
114150ae4 0a84          incf    _fsr,f
11416                   ; line_number = 72
11417                   ;info   72, 2789
114180ae5 0800          movf    _indf,w
11419                   ; line_number = 73
11420                   ;info   73, 2790
114210ae6 00a6          movwf   _float32_aargb1
11422                   ; line_number = 74
11423                   ;info   74, 2791
114240ae7 0a84          incf    _fsr,f
11425                   ; line_number = 75
11426                   ;info   75, 2792
114270ae8 0800          movf    _indf,w
11428                   ; line_number = 76
11429                   ;info   76, 2793
114300ae9 00a5          movwf   _float32_aargb2
11431           
11432           
11433                   ; delay after procedure statements=non-uniform
11434                   ; Implied return
114350aea 3400          retlw   0
11436           
11437           
11438           
11439           
11440                   ; line_number = 79
11441                   ;info   79, 2795
11442                   ; procedure _float32_pointer_add
11443  0aeb :   _float32_pointer_add:
11444                   ; Last argument is sitting in W; save into argument variable
114450aeb 00c5          movwf   _float32_pointer_add__pointer
11446                   ; delay=4294967295
11447                   ; line_number = 80
11448                   ; argument pointer byte
11449000000c5 = _float32_pointer_add__pointer equ globals___1+37
11450                   ; line_number = 81
11451                   ;  returns_nothing
11452                   ; line_number = 82
11453                   ;  return_suppress
11454           
11455                   ; # This procedure will add the float32 "A" register with {pointer}
11456                   ; # and store the result back into the "A" register.
11457           
11458                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11459                   ; line_number = 87
11460                   ;  assemble
11461                   ;info   87, 2796
11462                   ; # Pointer is in W; move it to {_fsr}:
11463                   ; line_number = 89
11464                   ;info   89, 2796
114650aec 0084          movwf   _fsr
11466                   ; # Set up {_irp} and _{fsr}:
11467                   ; line_number = 91
11468                   ;info   91, 2797
114690aed 1383          bcf     _irp___byte, _irp___bit
11470                   ; line_number = 92
11471                   ;info   92, 2798
114720aee 0d84          rlf     _fsr,f
11473                   ; line_number = 93
11474                   ;info   93, 2799
114750aef 1803          btfsc   _c___byte, _c___bit
11476                   ; line_number = 94
11477                   ;info   94, 2800
114780af0 1783          bsf     _irp___byte, _irp___bit
11479                   ; line_number = 95
11480                   ;info   95, 2801
114810af1 1004          bcf     _fsr, 0
11482                   ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
11483                   ; line_number = 97
11484                   ;info   97, 2802
114850af2 0800          movf    _indf,w
11486                   ; line_number = 98
11487                   ;info   98, 2803
114880af3 00af          movwf   _float32_bexp
11489                   ; line_number = 99
11490                   ;info   99, 2804
114910af4 0a84          incf    _fsr,f
11492                   ; line_number = 100
11493                   ;info   100, 2805
114940af5 0800          movf    _indf,w
11495                   ; line_number = 101
11496                   ;info   101, 2806
114970af6 00ae          movwf   _float32_bargb0
11498                   ; line_number = 102
11499                   ;info   102, 2807
115000af7 0a84          incf    _fsr,f
11501                   ; line_number = 103
11502                   ;info   103, 2808
115030af8 0800          movf    _indf,w
11504                   ; line_number = 104
11505                   ;info   104, 2809
115060af9 00ad          movwf   _float32_bargb1
11507                   ; line_number = 105
11508                   ;info   105, 2810
115090afa 0a84          incf    _fsr,f
11510                   ; line_number = 106
11511                   ;info   106, 2811
115120afb 0800          movf    _indf,w
11513                   ; line_number = 107
11514                   ;info   107, 2812
115150afc 00ac          movwf   _float32_bargb2
11516                   ; line_number = 108
11517                   ;info   108, 2813
115180afd 2a4e          goto    _float32_add
11519           
11520           
11521                   ; delay after procedure statements=non-uniform
11522                   ; Return instruction suppressed by 'return_suppress'
11523           
11524           
11525           
11526           
11527                   ; line_number = 111
11528                   ;info   111, 2814
11529                   ; procedure _float32_pointer_divide
11530  0afe :   _float32_pointer_divide:
11531                   ; Last argument is sitting in W; save into argument variable
115320afe 00c6          movwf   _float32_pointer_divide__pointer
11533                   ; delay=4294967295
11534                   ; line_number = 112
11535                   ; argument pointer byte
11536000000c6 = _float32_pointer_divide__pointer equ globals___1+38
11537                   ; line_number = 113
11538                   ;  returns_nothing
11539                   ; line_number = 114
11540                   ;  return_suppress
11541           
11542                   ; # This procedure will divide the float32 A register by {pointer} and
11543                   ; # store the result back into the A "register".
11544           
11545                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11546                   ; line_number = 119
11547                   ;  assemble
11548                   ;info   119, 2815
11549                   ; # Pointer is in W; move it to {_fsr}:
11550                   ; line_number = 121
11551                   ;info   121, 2815
115520aff 0084          movwf   _fsr
11553                   ; # Set up {_irp} and _{fsr}:
11554                   ; line_number = 123
11555                   ;info   123, 2816
115560b00 1383          bcf     _irp___byte, _irp___bit
11557                   ; line_number = 124
11558                   ;info   124, 2817
115590b01 0d84          rlf     _fsr,f
11560                   ; line_number = 125
11561                   ;info   125, 2818
115620b02 1803          btfsc   _c___byte, _c___bit
11563                   ; line_number = 126
11564                   ;info   126, 2819
115650b03 1783          bsf     _irp___byte, _irp___bit
11566                   ; line_number = 127
11567                   ;info   127, 2820
115680b04 1004          bcf     _fsr, 0
11569                   ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
11570                   ; line_number = 129
11571                   ;info   129, 2821
115720b05 0800          movf    _indf,w
11573                   ; line_number = 130
11574                   ;info   130, 2822
115750b06 00af          movwf   _float32_bexp
11576                   ; line_number = 131
11577                   ;info   131, 2823
115780b07 0a84          incf    _fsr,f
11579                   ; line_number = 132
11580                   ;info   132, 2824
115810b08 0800          movf    _indf,w
11582                   ; line_number = 133
11583                   ;info   133, 2825
115840b09 00ae          movwf   _float32_bargb0
11585                   ; line_number = 134
11586                   ;info   134, 2826
115870b0a 0a84          incf    _fsr,f
11588                   ; line_number = 135
11589                   ;info   135, 2827
115900b0b 0800          movf    _indf,w
11591                   ; line_number = 136
11592                   ;info   136, 2828
115930b0c 00ad          movwf   _float32_bargb1
11594                   ; line_number = 137
11595                   ;info   137, 2829
115960b0d 0a84          incf    _fsr,f
11597                   ; line_number = 138
11598                   ;info   138, 2830
115990b0e 0800          movf    _indf,w
11600                   ; line_number = 139
11601                   ;info   139, 2831
116020b0f 00ac          movwf   _float32_bargb2
11603                   ; line_number = 140
11604                   ;info   140, 2832
116050b10 29b7          goto    _float32_divide
11606           
11607           
11608                   ; delay after procedure statements=non-uniform
11609                   ; Return instruction suppressed by 'return_suppress'
11610           
11611           
11612           
11613           
11614                   ; line_number = 143
11615                   ;info   143, 2833
11616                   ; procedure _float32_pointer_multiply
11617  0b11 :   _float32_pointer_multiply:
11618                   ; Last argument is sitting in W; save into argument variable
116190b11 00c7          movwf   _float32_pointer_multiply__pointer
11620                   ; delay=4294967295
11621                   ; line_number = 144
11622                   ; argument pointer byte
11623000000c7 = _float32_pointer_multiply__pointer equ globals___1+39
11624                   ; line_number = 145
11625                   ;  returns_nothing
11626                   ; line_number = 146
11627                   ;  return_suppress
11628           
11629                   ; # This procedure will multiply {pointer} with the float32 A "register"
11630                   ; # and store the result back into the A "register".
11631           
11632                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11633                   ; line_number = 151
11634                   ;  assemble
11635                   ;info   151, 2834
11636                   ; # Pointer is in W; move it to {_fsr}:
11637                   ; line_number = 153
11638                   ;info   153, 2834
116390b12 0084          movwf   _fsr
11640                   ; # Set up {_irp} and _{fsr}:
11641                   ; line_number = 155
11642                   ;info   155, 2835
116430b13 1383          bcf     _irp___byte, _irp___bit
11644                   ; line_number = 156
11645                   ;info   156, 2836
116460b14 0d84          rlf     _fsr,f
11647                   ; line_number = 157
11648                   ;info   157, 2837
116490b15 1803          btfsc   _c___byte, _c___bit
11650                   ; line_number = 158
11651                   ;info   158, 2838
116520b16 1783          bsf     _irp___byte, _irp___bit
11653                   ; line_number = 159
11654                   ;info   159, 2839
116550b17 1004          bcf     _fsr, 0
11656                   ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
11657                   ; line_number = 161
11658                   ;info   161, 2840
116590b18 0800          movf    _indf,w
11660                   ; line_number = 162
11661                   ;info   162, 2841
116620b19 00af          movwf   _float32_bexp
11663                   ; line_number = 163
11664                   ;info   163, 2842
116650b1a 0a84          incf    _fsr,f
11666                   ; line_number = 164
11667                   ;info   164, 2843
116680b1b 0800          movf    _indf,w
11669                   ; line_number = 165
11670                   ;info   165, 2844
116710b1c 00ae          movwf   _float32_bargb0
11672                   ; line_number = 166
11673                   ;info   166, 2845
116740b1d 0a84          incf    _fsr,f
11675                   ; line_number = 167
11676                   ;info   167, 2846
116770b1e 0800          movf    _indf,w
11678                   ; line_number = 168
11679                   ;info   168, 2847
116800b1f 00ad          movwf   _float32_bargb1
11681                   ; line_number = 169
11682                   ;info   169, 2848
116830b20 0a84          incf    _fsr,f
11684                   ; line_number = 170
11685                   ;info   170, 2849
116860b21 0800          movf    _indf,w
11687                   ; line_number = 171
11688                   ;info   171, 2850
116890b22 00ac          movwf   _float32_bargb2
11690                   ; line_number = 172
11691                   ;info   172, 2851
116920b23 2959          goto    _float32_multiply
11693           
11694           
11695                   ; delay after procedure statements=non-uniform
11696                   ; Return instruction suppressed by 'return_suppress'
11697           
11698           
11699           
11700           
11701                   ; line_number = 175
11702                   ;info   175, 2852
11703                   ; procedure _float32_pointer_subtract
11704  0b24 :   _float32_pointer_subtract:
11705                   ; Last argument is sitting in W; save into argument variable
117060b24 00c8          movwf   _float32_pointer_subtract__pointer
11707                   ; delay=4294967295
11708                   ; line_number = 176
11709                   ; argument pointer byte
11710000000c8 = _float32_pointer_subtract__pointer equ globals___1+40
11711                   ; line_number = 177
11712                   ;  returns_nothing
11713                   ; line_number = 178
11714                   ;  return_suppress
11715           
11716                   ; # This procedure will subtract {pointer} from the float32 A "register"
11717                   ; # and store the result back into the A "register".
11718           
11719                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11720                   ; line_number = 183
11721                   ;  assemble
11722                   ;info   183, 2853
11723                   ; # Pointer is in W; move it to {_fsr}:
11724                   ; line_number = 185
11725                   ;info   185, 2853
117260b25 0084          movwf   _fsr
11727                   ; # Set up {_irp} and _{fsr}:
11728                   ; line_number = 187
11729                   ;info   187, 2854
117300b26 1383          bcf     _irp___byte, _irp___bit
11731                   ; line_number = 188
11732                   ;info   188, 2855
117330b27 0d84          rlf     _fsr,f
11734                   ; line_number = 189
11735                   ;info   189, 2856
117360b28 1803          btfsc   _c___byte, _c___bit
11737                   ; line_number = 190
11738                   ;info   190, 2857
117390b29 1783          bsf     _irp___byte, _irp___bit
11740                   ; line_number = 191
11741                   ;info   191, 2858
117420b2a 1004          bcf     _fsr, 0
11743                   ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
11744                   ; line_number = 193
11745                   ;info   193, 2859
117460b2b 0800          movf    _indf,w
11747                   ; line_number = 194
11748                   ;info   194, 2860
117490b2c 00af          movwf   _float32_bexp
11750                   ; line_number = 195
11751                   ;info   195, 2861
117520b2d 0a84          incf    _fsr,f
11753                   ; line_number = 196
11754                   ;info   196, 2862
117550b2e 0800          movf    _indf,w
11756                   ; line_number = 197
11757                   ;info   197, 2863
117580b2f 00ae          movwf   _float32_bargb0
11759                   ; line_number = 198
11760                   ;info   198, 2864
117610b30 0a84          incf    _fsr,f
11762                   ; line_number = 199
11763                   ;info   199, 2865
117640b31 0800          movf    _indf,w
11765                   ; line_number = 200
11766                   ;info   200, 2866
117670b32 00ad          movwf   _float32_bargb1
11768                   ; line_number = 201
11769                   ;info   201, 2867
117700b33 0a84          incf    _fsr,f
11771                   ; line_number = 202
11772                   ;info   202, 2868
117730b34 0800          movf    _indf,w
11774                   ; line_number = 203
11775                   ;info   203, 2869
117760b35 00ac          movwf   _float32_bargb2
11777                   ; line_number = 204
11778                   ;info   204, 2870
117790b36 2a4c          goto    _float32_subtract
11780           
11781           
11782                   ; delay after procedure statements=non-uniform
11783                   ; Return instruction suppressed by 'return_suppress'
11784           
11785           
11786           
11787           
11788                   ; line_number = 207
11789                   ;info   207, 2871
11790                   ; procedure _float32_pointer_store
11791  0b37 :   _float32_pointer_store:
11792                   ; Last argument is sitting in W; save into argument variable
117930b37 00c9          movwf   _float32_pointer_store__pointer
11794                   ; delay=4294967295
11795                   ; line_number = 208
11796                   ; argument pointer byte
11797000000c9 = _float32_pointer_store__pointer equ globals___1+41
11798                   ; line_number = 209
11799                   ;  returns_nothing
11800           
11801                   ; # This procedure will store the float32 A "register" into {pointer}.
11802           
11803                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11804                   ; line_number = 213
11805                   ;  assemble
11806                   ;info   213, 2872
11807                   ; # Pointer is in W; move it to {_fsr}:
11808                   ; line_number = 215
11809                   ;info   215, 2872
118100b38 0084          movwf   _fsr
11811                   ; # Set up {_irp} and _{fsr}:
11812                   ; line_number = 217
11813                   ;info   217, 2873
118140b39 1383          bcf     _irp___byte, _irp___bit
11815                   ; line_number = 218
11816                   ;info   218, 2874
118170b3a 0d84          rlf     _fsr,f
11818                   ; line_number = 219
11819                   ;info   219, 2875
118200b3b 1803          btfsc   _c___byte, _c___bit
11821                   ; line_number = 220
11822                   ;info   220, 2876
118230b3c 1783          bsf     _irp___byte, _irp___bit
11824                   ; line_number = 221
11825                   ;info   221, 2877
118260b3d 1004          bcf     _fsr, 0
11827                   ; # Grab the value and store into {_float32_aexp},...,{_float32_aargb2}
11828                   ; line_number = 223
11829                   ;info   223, 2878
118300b3e 0828          movf    _float32_aexp,w
11831                   ; line_number = 224
11832                   ;info   224, 2879
118330b3f 0080          movwf   _indf
11834                   ; line_number = 225
11835                   ;info   225, 2880
118360b40 0a84          incf    _fsr,f
11837                   ; line_number = 226
11838                   ;info   226, 2881
118390b41 0827          movf    _float32_aargb0,w
11840                   ; line_number = 227
11841                   ;info   227, 2882
118420b42 0080          movwf   _indf
11843                   ; line_number = 228
11844                   ;info   228, 2883
118450b43 0a84          incf    _fsr,f
11846                   ; line_number = 229
11847                   ;info   229, 2884
118480b44 0826          movf    _float32_aargb1,w
11849                   ; line_number = 230
11850                   ;info   230, 2885
118510b45 0080          movwf   _indf
11852                   ; line_number = 231
11853                   ;info   231, 2886
118540b46 0a84          incf    _fsr,f
11855                   ; line_number = 232
11856                   ;info   232, 2887
118570b47 0825          movf    _float32_aargb2,w
11858                   ; line_number = 233
11859                   ;info   233, 2888
118600b48 0080          movwf   _indf
11861           
11862           
11863                   ; delay after procedure statements=non-uniform
11864                   ; Implied return
118650b49 3400          retlw   0
11866           
11867           
11868           
11869           
11870                   ; line_number = 236
11871                   ;info   236, 2890
11872                   ; procedure _float32_negate
11873  0b4a :   _float32_negate:
11874                   ; arguments_none
11875                   ; line_number = 238
11876                   ;  returns_nothing
11877           
11878                   ; # This procedure will negate the float32 A registers.
11879           
11880                   ; # Flip the sign bit:
11881                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11882                   ; line_number = 243
11883                   ;  assemble
11884                   ;info   243, 2890
11885                   ; line_number = 244
11886                   ;info   244, 2890
118870b4a 3080          movlw   128
11888                   ; line_number = 245
11889                   ;info   245, 2891
118900b4b 06a7          xorwf   _float32_aargb0,f
11891           
11892           
11893                   ; delay after procedure statements=non-uniform
11894                   ; Implied return
118950b4c 3400          retlw   0
11896           
11897           
11898           
11899           
11900                   ; line_number = 248
11901                   ;info   248, 2893
11902                   ; procedure _float32_reciprocal
11903  0b4d :   _float32_reciprocal:
11904                   ; arguments_none
11905                   ; line_number = 250
11906                   ;  returns_nothing
11907           
11908                   ; # This procedure will compute the reciprocal of the float32 A "register"
11909                   ; # an store the result back into the float32 A "register".
11910           
11911                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11912                   ; line_number = 255
11913                   ;  assemble
11914                   ;info   255, 2893
11915                   ; # Move A register to B register:
11916                   ; line_number = 257
11917                   ;info   257, 2893
119180b4d 0828          movf    _float32_aexp,w
11919                   ; line_number = 258
11920                   ;info   258, 2894
119210b4e 00af          movwf   _float32_bexp
11922                   ; line_number = 259
11923                   ;info   259, 2895
119240b4f 0827          movf    _float32_aargb0,w
11925                   ; line_number = 260
11926                   ;info   260, 2896
119270b50 00ae          movwf   _float32_bargb0
11928                   ; line_number = 261
11929                   ;info   261, 2897
119300b51 0826          movf    _float32_aargb1,w
11931                   ; line_number = 262
11932                   ;info   262, 2898
119330b52 00ad          movwf   _float32_bargb1
11934                   ; line_number = 263
11935                   ;info   263, 2899
119360b53 0825          movf    _float32_aargb2,w
11937                   ; line_number = 264
11938                   ;info   264, 2900
119390b54 00ac          movwf   _float32_bargb2
11940           
11941                   ; # Now store 1 into A:
11942                   ; line_number = 267
11943                   ;info   267, 2901
119440b55 307f          movlw   127
11945                   ; line_number = 268
11946                   ;info   268, 2902
119470b56 00a8          movwf   _float32_aexp
11948                   ; line_number = 269
11949                   ;info   269, 2903
119500b57 01a7          clrf    _float32_aargb0
11951                   ; line_number = 270
11952                   ;info   270, 2904
119530b58 01a6          clrf    _float32_aargb1
11954                   ; line_number = 271
11955                   ;info   271, 2905
119560b59 01a5          clrf    _float32_aargb2
11957           
11958                   ; # Now perform the division:
11959                   ; line_number = 274
11960                   ;info   274, 2906
119610b5a 29b7          goto    _float32_divide
11962           
11963           
11964                   ; delay after procedure statements=non-uniform
11965                   ; Implied return
119660b5b 3400          retlw   0
11967           
11968           
11969           
11970           
11971                   ; line_number = 277
11972                   ;info   277, 2908
11973                   ; procedure _float32_pointer_swap
11974  0b5c :   _float32_pointer_swap:
11975                   ; Last argument is sitting in W; save into argument variable
119760b5c 00ca          movwf   _float32_pointer_swap__pointer
11977                   ; delay=4294967295
11978                   ; line_number = 278
11979                   ; argument pointer byte
11980000000ca = _float32_pointer_swap__pointer equ globals___1+42
11981                   ; line_number = 279
11982                   ;  returns_nothing
11983           
11984                   ; # This procedure will swap the float32 A "register" with {pointer}:
11985           
11986                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
11987                   ; line_number = 283
11988                   ;  assemble
11989                   ;info   283, 2909
11990                   ; # Pointer is in W; move it to {_fsr}:
11991                   ; line_number = 285
11992                   ;info   285, 2909
119930b5d 0084          movwf   _fsr
11994                   ; # Set up {_irp} and _{fsr}:
11995                   ; line_number = 287
11996                   ;info   287, 2910
119970b5e 1383          bcf     _irp___byte, _irp___bit
11998                   ; line_number = 288
11999                   ;info   288, 2911
120000b5f 0d84          rlf     _fsr,f
12001                   ; line_number = 289
12002                   ;info   289, 2912
120030b60 1803          btfsc   _c___byte, _c___bit
12004                   ; line_number = 290
12005                   ;info   290, 2913
120060b61 1783          bsf     _irp___byte, _irp___bit
12007                   ; line_number = 291
12008                   ;info   291, 2914
120090b62 1004          bcf     _fsr, 0
12010           
12011                   ; # Swap {pointer} with {_float32_aexp}:
12012                   ; line_number = 294
12013                   ;info   294, 2915
120140b63 0800          movf    _indf,w
12015                   ; line_number = 295
12016                   ;info   295, 2916
120170b64 06a8          xorwf   _float32_aexp,f
12018                   ; line_number = 296
12019                   ;info   296, 2917
120200b65 0628          xorwf   _float32_aexp,w
12021                   ; line_number = 297
12022                   ;info   297, 2918
120230b66 06a8          xorwf   _float32_aexp,f
12024                   ; line_number = 298
12025                   ;info   298, 2919
120260b67 0080          movwf   _indf
12027           
12028                   ; # Swap {pointer}+1 with {_float32_aargb0}:
12029                   ; line_number = 301
12030                   ;info   301, 2920
120310b68 0a84          incf    _fsr,f
12032                   ; line_number = 302
12033                   ;info   302, 2921
120340b69 0800          movf    _indf,w
12035                   ; line_number = 303
12036                   ;info   303, 2922
120370b6a 06a7          xorwf   _float32_aargb0,f
12038                   ; line_number = 304
12039                   ;info   304, 2923
120400b6b 0627          xorwf   _float32_aargb0,w
12041                   ; line_number = 305
12042                   ;info   305, 2924
120430b6c 06a7          xorwf   _float32_aargb0,f
12044                   ; line_number = 306
12045                   ;info   306, 2925
120460b6d 0080          movwf   _indf
12047           
12048                   ; # Swap {pointer}+2 with {_float32_aargb1}:
12049                   ; line_number = 309
12050                   ;info   309, 2926
120510b6e 0a84          incf    _fsr,f
12052                   ; line_number = 310
12053                   ;info   310, 2927
120540b6f 0800          movf    _indf,w
12055                   ; line_number = 311
12056                   ;info   311, 2928
120570b70 06a6          xorwf   _float32_aargb1,f
12058                   ; line_number = 312
12059                   ;info   312, 2929
120600b71 0626          xorwf   _float32_aargb1,w
12061                   ; line_number = 313
12062                   ;info   313, 2930
120630b72 06a6          xorwf   _float32_aargb1,f
12064                   ; line_number = 314
12065                   ;info   314, 2931
120660b73 0080          movwf   _indf
12067           
12068                   ; # Swap {pointer}+3 with {_float32_aargb2}:
12069                   ; line_number = 317
12070                   ;info   317, 2932
120710b74 0a84          incf    _fsr,f
12072                   ; line_number = 318
12073                   ;info   318, 2933
120740b75 0800          movf    _indf,w
12075                   ; line_number = 319
12076                   ;info   319, 2934
120770b76 06a5          xorwf   _float32_aargb2,f
12078                   ; line_number = 320
12079                   ;info   320, 2935
120800b77 0625          xorwf   _float32_aargb2,w
12081                   ; line_number = 321
12082                   ;info   321, 2936
120830b78 06a5          xorwf   _float32_aargb2,f
12084                   ; line_number = 322
12085                   ;info   322, 2937
120860b79 0080          movwf   _indf
12087           
12088           
12089                   ; delay after procedure statements=non-uniform
12090                   ; Implied return
120910b7a 3400          retlw   0
12092           
12093           
12094           
12095           
12096000000cc = _float32_from_byte__0return equ globals___1+44
12097                   ; line_number = 325
12098                   ;info   325, 2939
12099                   ; procedure _float32_from_byte
12100  0b7b :   _float32_from_byte:
12101                   ; Last argument is sitting in W; save into argument variable
121020b7b 00cb          movwf   _float32_from_byte__number
12103                   ; delay=4294967295
12104                   ; line_number = 326
12105                   ; argument number byte
12106000000cb = _float32_from_byte__number equ globals___1+43
12107                   ; line_number = 327
12108                   ;  returns float32
12109           
12110                   ; # This procedure will convert {number} into a float32 and return it.
12111           
12112                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12113                   ; line_number = 331
12114                   ;  _float32_aargb0 := 0
12115                   ;info   331, 2940
121160b7c 01a7          clrf    _float32_aargb0
12117                   ; line_number = 332
12118                   ;  _float32_aargb1 := 0
12119                   ;info   332, 2941
121200b7d 01a6          clrf    _float32_aargb1
12121                   ; line_number = 333
12122                   ;  _float32_aargb2 := number
12123                   ;info   333, 2942
121240b7e 084b          movf    _float32_from_byte__number,w
121250b7f 00a5          movwf   _float32_aargb2
12126                   ; line_number = 334
12127                   ;  assemble
12128                   ;info   334, 2944
12129                   ; line_number = 335
12130                   ;info   335, 2944
121310b80 2000          call    _float32_from_integer24
12132                   ; line_number = 336
12133                   ;info   336, 2945
121340b81 3066          movlw   _float32_from_byte__0return>>1
12135                   ; line_number = 337
12136                   ;info   337, 2946
121370b82 2337          call    _float32_pointer_store
12138                   ; line_number = 338
12139                   ;info   338, 2947
121400b83 3400          retlw   0
12141           
12142           
12143                   ; delay after procedure statements=non-uniform
12144                   ; Exiting procedure with no return(s); infinite loop fail
12145  0b84 :   _float32_from_byte__1:
121460b84 2b84          goto    _float32_from_byte__1
12147           
12148           
12149           
12150           
12151                   ; line_number = 341
12152                   ;info   341, 2949
12153                   ; procedure _float32_to_byte
12154  0b85 :   _float32_to_byte:
12155                   ; line_number = 342
12156                   ; argument number float32
12157000000d0 = _float32_to_byte__number equ globals___1+48
12158                   ; line_number = 343
12159                   ;  returns byte
12160           
12161                   ; # This procedure will convert {number} into a 8-bit integer and return it.
12162           
12163                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12164                   ; line_number = 347
12165                   ;  assemble
12166                   ;info   347, 2949
12167                   ; # Get the argument stored into the float32 "A" register:
12168                   ; line_number = 349
12169                   ;info   349, 2949
121700b85 3068          movlw   _float32_to_byte__number>>1
12171                   ; line_number = 350
12172                   ;info   350, 2950
121730b86 2337          call    _float32_pointer_store
12174                   ; line_number = 351
12175                   ;info   351, 2951
121760b87 208d          call    _float32_integer24_convert
12177                   ; line_number = 352
12178                   ; return _float32_aargb2 start
12179                   ; line_number = 352
12180                   ;info   352, 2952
121810b88 0825          movf    _float32_aargb2,w
121820b89 0008          return  
12183                   ; line_number = 352
12184                   ; return _float32_aargb2 done
12185           
12186           
12187                   ; delay after procedure statements=non-uniform
12188           
12189           
12190           
12191           
12192                   ; line_number = 355
12193                   ;info   355, 2954
12194                   ; procedure _float32_equals
12195  0b8a :   _float32_equals:
12196                   ; arguments_none
12197                   ; line_number = 357
12198                   ;  returns_nothing
12199           
12200                   ; # This procedure will set the Z bit if register "A" is zero.
12201           
12202                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12203                   ; line_number = 361
12204                   ;  assemble
12205                   ;info   361, 2954
12206                   ; line_number = 362
12207                   ;info   362, 2954
122080b8a 0828          movf    _float32_aexp,w
12209                   ; # Return is implicit
12210           
12211           
12212                   ; delay after procedure statements=non-uniform
12213                   ; Implied return
122140b8b 3400          retlw   0
12215           
12216           
12217           
12218           
12219                   ; line_number = 366
12220                   ;info   366, 2956
12221                   ; procedure _float32_not_equal
12222  0b8c :   _float32_not_equal:
12223                   ; arguments_none
12224                   ; line_number = 368
12225                   ;  returns_nothing
12226           
12227                   ; # This procedure will set the Z bit if register "A" is non-zero.
12228           
12229                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12230                   ; line_number = 372
12231                   ;  assemble
12232                   ;info   372, 2956
12233                   ; line_number = 373
12234                   ;info   373, 2956
122350b8c 0828          movf    _float32_aexp,w
12236                   ; line_number = 374
12237                   ;info   374, 2957
122380b8d 1d03          btfss   _float32_status, _float32_z
12239                   ; line_number = 375
12240                   ;info   375, 2958
122410b8e 2b91          goto    _float32_not_equal1
12242                   ; # AEXP is zero; thus not_equal is false:
12243                   ; line_number = 377
12244                   ;info   377, 2959
122450b8f 1103          bcf     _float32_status, _float32_z
12246                   ; line_number = 378
12247                   ;info   378, 2960
122480b90 3400          retlw   0
12249                   ; line_number = 379
12250  0b91 :   _float32_not_equal1:
12251                   ; # AEXP is non-zero, the not_equal is true:
12252                   ; line_number = 381
12253                   ;info   381, 2961
122540b91 1503          bsf     _float32_status, _float32_z
12255                   ; # Return is implicit
12256           
12257           
12258                   ; delay after procedure statements=non-uniform
12259                   ; Implied return
122600b92 3400          retlw   0
12261           
12262           
12263           
12264           
12265                   ; line_number = 385
12266                   ;info   385, 2963
12267                   ; procedure _float32_less_than
12268  0b93 :   _float32_less_than:
12269                   ; arguments_none
12270                   ; line_number = 387
12271                   ;  returns_nothing
12272           
12273                   ; # This procedure will set the Z bit if register "A" is non-zero and
12274                   ; # positive.
12275           
12276                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12277                   ; line_number = 392
12278                   ;  assemble
12279                   ;info   392, 2963
12280                   ; # Test AEXP for 0:
12281                   ; line_number = 394
12282                   ;info   394, 2963
122830b93 0827          movf    _float32_aargb0,w
12284                   ; line_number = 395
12285                   ;info   395, 2964
122860b94 1903          btfsc   _float32_status, _float32_z
12287                   ; # AEXP=0; Z=1; clear Z:
12288                   ; line_number = 397
12289                   ;info   397, 2965
122900b95 2b99          goto    _float32_less_than1
12291                   ; # AEXP!=0; Z=0; Test sign
12292                   ; line_number = 399
12293                   ;info   399, 2966
122940b96 1ba7          btfsc   _float32_aargb0, 7
12295                   ; # Sign=1; Set Z
12296                   ; line_number = 401
12297                   ;info   401, 2967
122980b97 1503          bsf     _float32_status, _float32_z
12299                   ; line_number = 402
12300                   ;info   402, 2968
123010b98 3400          retlw   0
12302                   ; line_number = 403
12303  0b99 :   _float32_less_than1:
12304                   ; # AXP=0; Z=1; clear Z:
12305                   ; line_number = 405
12306                   ;info   405, 2969
123070b99 1103          bcf     _float32_status, _float32_z
12308                   ; # Return is implicit
12309           
12310           
12311                   ; delay after procedure statements=non-uniform
12312                   ; Implied return
123130b9a 3400          retlw   0
12314           
12315           
12316           
12317           
12318                   ; line_number = 409
12319                   ;info   409, 2971
12320                   ; procedure _float32_less_than_or_equal
12321  0b9b :   _float32_less_than_or_equal:
12322                   ; arguments_none
12323                   ; line_number = 411
12324                   ;  returns_nothing
12325           
12326                   ; # This procedure will set the Z bit if register "A" is zero or positive.
12327           
12328                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12329                   ; line_number = 415
12330                   ;  assemble
12331                   ;info   415, 2971
12332                   ; # Test AEXP for 0:
12333                   ; line_number = 417
12334                   ;info   417, 2971
123350b9b 0828          movf    _float32_aexp,w
12336                   ; line_number = 418
12337                   ;info   418, 2972
123380b9c 1903          btfsc   _float32_status, _float32_z
12339                   ; # AEXP=0; Z=1; Return
12340                   ; line_number = 420
12341                   ;info   420, 2973
123420b9d 3400          retlw   0
12343                   ; # AEXP!=0; Z=0; Test sign:
12344                   ; line_number = 422
12345                   ;info   422, 2974
123460b9e 1ba7          btfsc   _float32_aargb0, 7
12347                   ; # Sign=1; Set Z
12348                   ; line_number = 424
12349                   ;info   424, 2975
123500b9f 1503          bsf     _float32_status, _float32_z
12351                   ; # Return is implicit
12352           
12353           
12354                   ; delay after procedure statements=non-uniform
12355                   ; Implied return
123560ba0 3400          retlw   0
12357           
12358           
12359           
12360           
12361                   ; line_number = 428
12362                   ;info   428, 2977
12363                   ; procedure _float32_greater_than
12364  0ba1 :   _float32_greater_than:
12365                   ; arguments_none
12366                   ; line_number = 430
12367                   ;  returns_nothing
12368           
12369                   ; # This procedure will set the Z bit if register "A" is non-zero and
12370                   ; # positive.
12371           
12372                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12373                   ; line_number = 435
12374                   ;  assemble
12375                   ;info   435, 2977
12376                   ; # Test AEXP for 0:
12377                   ; line_number = 437
12378                   ;info   437, 2977
123790ba1 0828          movf    _float32_aexp,w
12380                   ; line_number = 438
12381                   ;info   438, 2978
123820ba2 1903          btfsc   _float32_status, _float32_z
12383                   ; # AEXP=0 Z=1; Clear Z and return:
12384                   ; line_number = 440
12385                   ;info   440, 2979
123860ba3 2ba7          goto    _float32_greater_than1
12387                   ; # AEXP!=0 Z=0; Test sign bit
12388                   ; line_number = 442
12389                   ;info   442, 2980
123900ba4 1fa7          btfss   _float32_aargb0, 7
12391                   ; # Sign bit=0; Set Z
12392                   ; line_number = 444
12393                   ;info   444, 2981
123940ba5 1503          bsf     _float32_status, _float32_z
12395                   ; line_number = 445
12396                   ;info   445, 2982
123970ba6 3400          retlw   0
12398                   ; line_number = 446
12399  0ba7 :   _float32_greater_than1:
12400                   ; # AEXP=0 Z=1; Clear Z and return:
12401                   ; line_number = 448
12402                   ;info   448, 2983
124030ba7 1103          bcf     _float32_status, _float32_z
12404                   ; # Return is implicit
12405           
12406           
12407                   ; delay after procedure statements=non-uniform
12408                   ; Implied return
124090ba8 3400          retlw   0
12410           
12411           
12412           
12413           
12414                   ; line_number = 452
12415                   ;info   452, 2985
12416                   ; procedure _float32_greater_than_or_equal
12417  0ba9 :   _float32_greater_than_or_equal:
12418                   ; arguments_none
12419                   ; line_number = 454
12420                   ;  returns_nothing
12421           
12422                   ; # This procedure will set the Z bit if register "A" is zero or positive.
12423           
12424                   ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
12425                   ; line_number = 458
12426                   ;  assemble
12427                   ;info   458, 2985
12428                   ; # Test AEXP for 0:
12429                   ; line_number = 460
12430                   ;info   460, 2985
124310ba9 0828          movf    _float32_aexp,w
12432                   ; line_number = 461
12433                   ;info   461, 2986
124340baa 1903          btfsc   _float32_status, _float32_z
12435                   ; # AEXP=0; Z=1; We can return
12436                   ; line_number = 463
12437                   ;info   463, 2987
124380bab 3400          retlw   0
12439                   ; # AEXP!=0; Z=0; now check sign
12440                   ; line_number = 465
12441                   ;info   465, 2988
124420bac 1fa7          btfss   _float32_aargb0, 7
12443                   ; # Sign=0; Set Z
12444                   ; line_number = 467
12445                   ;info   467, 2989
124460bad 1503          bsf     _float32_status, _float32_z
12447                   ; # Return is implicit
12448           
12449           
12450                   ; delay after procedure statements=non-uniform
12451                   ; Implied return
124520bae 3400          retlw   0
12453           
12454           
12455           
12456           
12457                   ; Configuration bits
12458                   ; address = 0x2007, fill = 0x3000
12459                   ; fcmen = off (0x0)
12460                   ; ieso = off (0x0)
12461                   ; boden = off (0x0)
12462                   ; cpd = off (0x80)
12463                   ; cp = off (0x40)
12464                   ; mclre = off (0x0)
12465                   ; pwrte = off (0x10)
12466                   ; wdte = off (0x0)
12467                   ; fosc = hs (0x2)
12468                   ; 12498 = 0x30d2
12469  30d2 =           __config 12498
12470                   ; Define start addresses for data regions
12471                   ; Region="shared___globals" Address=112" Size=16 Bytes=2 Bits=0 Available=14
12472                   ; Region="globals___0" Address=32" Size=80 Bytes=76 Bits=6 Available=3
12473                   ; Region="globals___1" Address=160" Size=80 Bytes=76 Bits=0 Available=4
12474                   ; Region="globals___2" Address=288" Size=80 Bytes=52 Bits=0 Available=28
12475                   ; Region="shared___globals" Address=112" Size=16 Bytes=2 Bits=0 Available=14
12476                   end
