1                       radix   dec
2                       ; Code bank 0; Start address: 0; End address: 1023
3      0000 :           org     0
4               
5                       ; Define start addresses for data regions
6    00000020 = shared___globals equ 32
7    00000000 = __indf equ 0
8    00000002 = __pcl equ 2
9    00000003 = __status equ 3
10   00000004 = __fsr equ 4
11   00000003 = __c___byte equ 3
12   00000000 = __c___bit equ 0
13   00000003 = __z___byte equ 3
14   00000002 = __z___bit equ 2
15   00000003 = __rp0___byte equ 3
16   00000005 = __rp0___bit equ 5
17   00000003 = __rp1___byte equ 3
18   00000006 = __rp1___bit equ 6
19   00000003 = __irp___byte equ 3
20   00000007 = __irp___bit equ 7
21   0000000a = __pclath equ 10
22   0000000a = __cb0___byte equ 10
23   00000003 = __cb0___bit equ 3
24   0000000a = __cb1___byte equ 10
25   00000004 = __cb1___bit equ 4
26              
27                      ; # #############################################################################
28                      ; #
29                      ; # Copyright (c) 2002-2004 by Wayne C. Gramlich
30                      ; # All rights reserved.
31                      ; #
32                      ; # See:
33                      ; #
34                      ; #   http://gramlich.net/projects/robobricks/irproximity2/index.html
35                      ; #
36                      ; # for more details.
37                      ; #
38                      ; # #############################################################################
39              
40                      ; buffer = 'irproximity2'
41                      ; line_number = 16
42                      ; library _pic16f630 entered
43                      ; # Copyright (c) 2004 by Wayne C. Gramlich
44                      ; # All rights reserved.
45              
46                      ; buffer = '_pic16f630'
47                      ; line_number = 5
48                      ; processor pic16f630
49                      ; line_number = 6
50                      ; configure_address 0x2007
51                      ; line_number = 7
52                      ;  configure_fill 0x0000
53                      ; line_number = 8
54                      ;  configure_option bg: bg11 = 0x3000
55                      ; line_number = 9
56                      ;  configure_option bg: bg10 = 0x2000
57                      ; line_number = 10
58                      ;  configure_option bg: bg01 = 0x1000
59                      ; line_number = 11
60                      ;  configure_option bg: bg00 = 0x0000
61                      ; line_number = 12
62                      ;  configure_option cpd: on = 0x000
63                      ; line_number = 13
64                      ;  configure_option cpd: off = 0x100
65                      ; line_number = 14
66                      ;  configure_option cp: on = 0x00
67                      ; line_number = 15
68                      ;  configure_option cp: off = 0x80
69                      ; line_number = 16
70                      ;  configure_option boden: on = 0x40
71                      ; line_number = 17
72                      ;  configure_option boden: off = 0x00
73                      ; line_number = 18
74                      ;  configure_option mclre: on = 0x20
75                      ; line_number = 19
76                      ;  configure_option mclre: off = 0x00
77                      ; line_number = 20
78                      ;  configure_option pwrte: on = 0x00
79                      ; line_number = 21
80                      ;  configure_option pwrte: off = 0x10
81                      ; line_number = 22
82                      ;  configure_option wdte: on = 8
83                      ; line_number = 23
84                      ;  configure_option wdte: off = 0
85                      ; line_number = 24
86                      ;  configure_option fosc: rc_clk = 7
87                      ; line_number = 25
88                      ;  configure_option fosc: rc_no_clk = 6
89                      ; line_number = 26
90                      ;  configure_option fosc: int_clk = 5
91                      ; line_number = 27
92                      ;  configure_option fosc: int_no_clk = 4
93                      ; line_number = 28
94                      ;  configure_option fosc: ec = 3
95                      ; line_number = 29
96                      ;  configure_option fosc: hs = 2
97                      ; line_number = 30
98                      ;  configure_option fosc: xt = 1
99                      ; line_number = 31
100                     ;  configure_option fosc: lp = 0
101                     ; line_number = 32
102                     ;  code_bank 0x0 : 0x3ff
103                     ; line_number = 33
104                     ;  data_bank 0x0 : 0x7f
105                     ; line_number = 34
106                     ;  data_bank 0x80 : 0xff
107                     ; line_number = 35
108                     ;  shared_region 0x20 : 0x5f
109                     ; line_number = 36
110                     ;  interrupts_possible
111                     ; line_number = 37
112                     ;  osccal_register_symbol _osccal
113                     ; line_number = 38
114                     ;  osccal_at_address 0x3ff
115                     ; line_number = 39
116                     ;  packages pdip=14, soic=14, tssop=14
117                     ; line_number = 40
118                     ;  pin vdd, power_supply
119                     ; line_number = 41
120                     ; pin_bindings pdip=1, soic=1, tssop=1
121                     ; line_number = 42
122                     ; pin ra5_in, ra5_out, t1cki, osc1, clkin, ra5_unused
123                     ; line_number = 43
124                     ; pin_bindings pdip=2, soic=2, tssop=2
125                     ; line_number = 44
126                     ;  bind_to _porta@5
127                     ; line_number = 45
128                     ;  or_if ra5_in _trisa 16
129                     ; line_number = 46
130                     ;  or_if ra5_out _trisa 0
131                     ; line_number = 47
132                     ; pin ra4_in, ra4_out, t1g, osc2, clkout, ra4_unused
133                     ; line_number = 48
134                     ; pin_bindings pdip=3, soic=3, tssop=3
135                     ; line_number = 49
136                     ;  bind_to _porta@4
137                     ; line_number = 50
138                     ;  or_if ra4_in _trisa 8
139                     ; line_number = 51
140                     ;  or_if ra4_out _trisa 0
141                     ; line_number = 52
142                     ; pin ra3_in, mclr, vpp, ra3_unused
143                     ; line_number = 53
144                     ; pin_bindings pdip=4, soic=4, tssop=4
145                     ; line_number = 54
146                     ;  bind_to _porta@3
147                     ; line_number = 55
148                     ;  or_if ra3_in _trisa 4
149                     ; line_number = 56
150                     ; pin rc5_in, rc5_out, rc5_unused
151                     ; line_number = 57
152                     ; pin_bindings pdip=5, soic=5, tssop=5
153                     ; line_number = 58
154                     ;  bind_to _portc@5
155                     ; line_number = 59
156                     ;  or_if rc5_in _trisc 32
157                     ; line_number = 60
158                     ;  or_if rc5_out _trisc 0
159                     ; line_number = 61
160                     ; pin rc4_in, rc4_out, rc4_unused
161                     ; line_number = 62
162                     ; pin_bindings pdip=6, soic=6, tssop=6
163                     ; line_number = 63
164                     ;  bind_to _portc@4
165                     ; line_number = 64
166                     ;  or_if rc4_in _trisc 16
167                     ; line_number = 65
168                     ;  or_if rc4_out _trisc 0
169                     ; line_number = 66
170                     ; pin rc3_in, rc3_out, r3_unused
171                     ; line_number = 67
172                     ; pin_bindings pdip=7, soic=7, tssop=7
173                     ; line_number = 68
174                     ;  bind_to _portc@3
175                     ; line_number = 69
176                     ;  or_if rc3_in _trisc 8
177                     ; line_number = 70
178                     ;  or_if rc3_out _trisc 0
179                     ; line_number = 71
180                     ; pin rc2_in, rc2_out, rc2_unused
181                     ; line_number = 72
182                     ; pin_bindings pdip=8, soic=8, tssop=8
183                     ; line_number = 73
184                     ;  bind_to _portc@2
185                     ; line_number = 74
186                     ;  or_if rc2_in _trisc 4
187                     ; line_number = 75
188                     ;  or_if rc2_out _trisc 0
189                     ; line_number = 76
190                     ; pin rc1_in, rc1_out, rc1_unused
191                     ; line_number = 77
192                     ; pin_bindings pdip=9, soic=9, tssop=9
193                     ; line_number = 78
194                     ;  bind_to _portc@1
195                     ; line_number = 79
196                     ;  or_if rc1_in _trisc 2
197                     ; line_number = 80
198                     ;  or_if rc1_out _trisc 0
199                     ; line_number = 81
200                     ; pin rc0_in, rc0_out, rc0_unused
201                     ; line_number = 82
202                     ; pin_bindings pdip=10, soic=10, tssop=10
203                     ; line_number = 83
204                     ;  bind_to _portc@0
205                     ; line_number = 84
206                     ;  or_if rc0_in _trisc 1
207                     ; line_number = 85
208                     ;  or_if rc0_out _trisc 0
209                     ; line_number = 86
210                     ; pin ra2_in, ra2_out, cout, t0cki, int, ra2_unused
211                     ; line_number = 87
212                     ; pin_bindings pdip=11, soic=11, tssop=11
213                     ; line_number = 88
214                     ;  bind_to _porta@2
215                     ; line_number = 89
216                     ;  or_if ra2_in _trisa 4
217                     ; line_number = 90
218                     ;  or_if ra2_out _trisa 0
219                     ; line_number = 91
220                     ; pin ra1_in, ra1_out, cin_minus, vref, icspclk, ra1_unused
221                     ; line_number = 92
222                     ; pin_bindings pdip=12, soic=12, tssop=12
223                     ; line_number = 93
224                     ;  bind_to _porta@1
225                     ; line_number = 94
226                     ;  or_if ra1_in _trisa 2
227                     ; line_number = 95
228                     ;  or_if ra1_out _trisa 0
229                     ; line_number = 96
230                     ; pin ra0_in, ra0_out, cin_plus, icspdat, ra0_unused
231                     ; line_number = 97
232                     ; pin_bindings pdip=13, soic=13, tssop=13
233                     ; line_number = 98
234                     ;  bind_to _porta@0
235                     ; line_number = 99
236                     ;  or_if ra0_in _trisa 1
237                     ; line_number = 100
238                     ;  or_if ra0_out _trisa 0
239                     ; line_number = 101
240                     ; pin vss, ground
241                     ; line_number = 102
242                     ; pin_bindings pdip=14, soic=14, tssop=14
243             
244             
245                     ; line_number = 107
246                     ; library _pic16f630_676 entered
247                     ; # Copyright (c) 2004 by Wayne C. Gramlich
248                     ; # All rights reserved.
249             
250                     ; # Shared register definitions for the PIC16F630 and PIC16F676.
251             
252                     ; buffer = '_pic16f630_676'
253                     ; line_number = 7
254                     ; register _indf = 
255  00000000 = _indf equ 0
256             
257                     ; line_number = 9
258                     ; register _tmr0 = 
259  00000001 = _tmr0 equ 1
260             
261                     ; line_number = 11
262                     ; register _pcl = 
263  00000002 = _pcl equ 2
264             
265                     ; line_number = 13
266                     ; register _status = 
267  00000003 = _status equ 3
268                     ; line_number = 14
269                     ; bind _rp0 = _status@5
270  00000003 = _rp0___byte equ _status
271  00000005 = _rp0___bit equ 5
272                     ; line_number = 15
273                     ; bind _to = _status@4
274  00000003 = _to___byte equ _status
275  00000004 = _to___bit equ 4
276                     ; line_number = 16
277                     ; bind _pd = _status@3
278  00000003 = _pd___byte equ _status
279  00000003 = _pd___bit equ 3
280                     ; line_number = 17
281                     ; bind _z = _status@2
282  00000003 = _z___byte equ _status
283  00000002 = _z___bit equ 2
284                     ; line_number = 18
285                     ; bind _dc = _status@1
286  00000003 = _dc___byte equ _status
287  00000001 = _dc___bit equ 1
288                     ; line_number = 19
289                     ; bind _c = _status@0
290  00000003 = _c___byte equ _status
291  00000000 = _c___bit equ 0
292             
293                     ; line_number = 21
294                     ; register _fsr = 
295  00000004 = _fsr equ 4
296             
297                     ; line_number = 23
298                     ; register _porta = 
299  00000005 = _porta equ 5
300                     ; line_number = 24
301                     ; register _ra = 
302  00000005 = _ra equ 5
303                     ; line_number = 25
304                     ; bind _ra5 = _porta@5
305  00000005 = _ra5___byte equ _porta
306  00000005 = _ra5___bit equ 5
307                     ; line_number = 26
308                     ; bind _ra4 = _porta@4
309  00000005 = _ra4___byte equ _porta
310  00000004 = _ra4___bit equ 4
311                     ; line_number = 27
312                     ; bind _ra3 = _porta@3
313  00000005 = _ra3___byte equ _porta
314  00000003 = _ra3___bit equ 3
315                     ; line_number = 28
316                     ; bind _ra2 = _porta@2
317  00000005 = _ra2___byte equ _porta
318  00000002 = _ra2___bit equ 2
319                     ; line_number = 29
320                     ; bind _ra1 = _porta@1
321  00000005 = _ra1___byte equ _porta
322  00000001 = _ra1___bit equ 1
323                     ; line_number = 30
324                     ; bind _ra0 = _porta@0
325  00000005 = _ra0___byte equ _porta
326  00000000 = _ra0___bit equ 0
327             
328                     ; line_number = 32
329                     ; register _portc = 
330  00000007 = _portc equ 7
331                     ; line_number = 33
332                     ; register _rc = 
333  00000007 = _rc equ 7
334                     ; line_number = 34
335                     ; bind _rc5 = _portc@5
336  00000007 = _rc5___byte equ _portc
337  00000005 = _rc5___bit equ 5
338                     ; line_number = 35
339                     ; bind _rc4 = _portc@4
340  00000007 = _rc4___byte equ _portc
341  00000004 = _rc4___bit equ 4
342                     ; line_number = 36
343                     ; bind _rc3 = _portc@3
344  00000007 = _rc3___byte equ _portc
345  00000003 = _rc3___bit equ 3
346                     ; line_number = 37
347                     ; bind _rc2 = _portc@2
348  00000007 = _rc2___byte equ _portc
349  00000002 = _rc2___bit equ 2
350                     ; line_number = 38
351                     ; bind _rc1 = _portc@1
352  00000007 = _rc1___byte equ _portc
353  00000001 = _rc1___bit equ 1
354                     ; line_number = 39
355                     ; bind _rc0 = _portc@0
356  00000007 = _rc0___byte equ _portc
357  00000000 = _rc0___bit equ 0
358             
359                     ; line_number = 41
360                     ; register _pclath = 
361  0000000a = _pclath equ 10
362             
363                     ; line_number = 43
364                     ; register _intcon = 
365  0000000b = _intcon equ 11
366                     ; line_number = 44
367                     ; bind _gie = _intcon@7
368  0000000b = _gie___byte equ _intcon
369  00000007 = _gie___bit equ 7
370                     ; line_number = 45
371                     ; bind _peie = _intcon@6
372  0000000b = _peie___byte equ _intcon
373  00000006 = _peie___bit equ 6
374                     ; line_number = 46
375                     ; bind _t0ie = _intcon@5
376  0000000b = _t0ie___byte equ _intcon
377  00000005 = _t0ie___bit equ 5
378                     ; line_number = 47
379                     ; bind _inte = _intcon@4
380  0000000b = _inte___byte equ _intcon
381  00000004 = _inte___bit equ 4
382                     ; line_number = 48
383                     ; bind _raie = _intcon@3
384  0000000b = _raie___byte equ _intcon
385  00000003 = _raie___bit equ 3
386                     ; line_number = 49
387                     ; bind _t0if = _intcon@2
388  0000000b = _t0if___byte equ _intcon
389  00000002 = _t0if___bit equ 2
390                     ; line_number = 50
391                     ; bind _intf = _intcon@1
392  0000000b = _intf___byte equ _intcon
393  00000001 = _intf___bit equ 1
394                     ; line_number = 51
395                     ; bind _raif = _intcon@0
396  0000000b = _raif___byte equ _intcon
397  00000000 = _raif___bit equ 0
398             
399                     ; line_number = 53
400                     ; register _pir1 = 
401  0000000c = _pir1 equ 12
402                     ; line_number = 54
403                     ; bind _eeif = _pir1@7
404  0000000c = _eeif___byte equ _pir1
405  00000007 = _eeif___bit equ 7
406                     ; line_number = 55
407                     ; bind _cmif = _pir1@3
408  0000000c = _cmif___byte equ _pir1
409  00000003 = _cmif___bit equ 3
410                     ; line_number = 56
411                     ; bind _tmr1if = _pir1@0
412  0000000c = _tmr1if___byte equ _pir1
413  00000000 = _tmr1if___bit equ 0
414             
415                     ; line_number = 58
416                     ; register _tmr1l = 
417  0000000e = _tmr1l equ 14
418             
419                     ; line_number = 60
420                     ; register _tmr1h = 
421  0000000f = _tmr1h equ 15
422             
423                     ; line_number = 62
424                     ; register _t1con = 
425  00000010 = _t1con equ 16
426                     ; line_number = 63
427                     ; bind _t1ge = _t1con@6
428  00000010 = _t1ge___byte equ _t1con
429  00000006 = _t1ge___bit equ 6
430                     ; line_number = 64
431                     ; bind _t1ckps1 = _t1con@5
432  00000010 = _t1ckps1___byte equ _t1con
433  00000005 = _t1ckps1___bit equ 5
434                     ; line_number = 65
435                     ; bind _t1ckps0 = _t1con@4
436  00000010 = _t1ckps0___byte equ _t1con
437  00000004 = _t1ckps0___bit equ 4
438                     ; line_number = 66
439                     ; bind _t1oscen = _t1con@3
440  00000010 = _t1oscen___byte equ _t1con
441  00000003 = _t1oscen___bit equ 3
442                     ; line_number = 67
443                     ; bind _t1sync = _t1con@2
444  00000010 = _t1sync___byte equ _t1con
445  00000002 = _t1sync___bit equ 2
446                     ; line_number = 68
447                     ; bind _tmr1cs = _t1con@1
448  00000010 = _tmr1cs___byte equ _t1con
449  00000001 = _tmr1cs___bit equ 1
450                     ; line_number = 69
451                     ; bind _tmr1on = _t1con@0
452  00000010 = _tmr1on___byte equ _t1con
453  00000000 = _tmr1on___bit equ 0
454             
455                     ; line_number = 71
456                     ; register _cmcon = 
457  00000019 = _cmcon equ 25
458                     ; line_number = 72
459                     ; bind _cout = _cmcon@6
460  00000019 = _cout___byte equ _cmcon
461  00000006 = _cout___bit equ 6
462                     ; line_number = 73
463                     ; bind _cinv = _cmcon@4
464  00000019 = _cinv___byte equ _cmcon
465  00000004 = _cinv___bit equ 4
466                     ; line_number = 74
467                     ; bind _cis = _cmcon@3
468  00000019 = _cis___byte equ _cmcon
469  00000003 = _cis___bit equ 3
470                     ; line_number = 75
471                     ; bind _cm2 = _cmcon@2
472  00000019 = _cm2___byte equ _cmcon
473  00000002 = _cm2___bit equ 2
474                     ; line_number = 76
475                     ; bind _cm1 = _cmcon@1
476  00000019 = _cm1___byte equ _cmcon
477  00000001 = _cm1___bit equ 1
478                     ; line_number = 77
479                     ; bind _cm0 = _cmcon@0
480  00000019 = _cm0___byte equ _cmcon
481  00000000 = _cm0___bit equ 0
482             
483                     ; # Data bank 1 (0x80-0xff):
484             
485                     ; line_number = 81
486                     ; register _option_reg = 
487  00000080 = _option_reg equ 128
488                     ; line_number = 82
489                     ; bind _rapu = _option_reg@7
490  00000080 = _rapu___byte equ _option_reg
491  00000007 = _rapu___bit equ 7
492                     ; line_number = 83
493                     ; bind _intedg = _option_reg@6
494  00000080 = _intedg___byte equ _option_reg
495  00000006 = _intedg___bit equ 6
496                     ; line_number = 84
497                     ; bind _t0cs = _option_reg@5
498  00000080 = _t0cs___byte equ _option_reg
499  00000005 = _t0cs___bit equ 5
500                     ; line_number = 85
501                     ; bind _t0se = _option_reg@4
502  00000080 = _t0se___byte equ _option_reg
503  00000004 = _t0se___bit equ 4
504                     ; line_number = 86
505                     ; bind _psa = _option_reg@3
506  00000080 = _psa___byte equ _option_reg
507  00000003 = _psa___bit equ 3
508                     ; line_number = 87
509                     ; bind _ps2 = _option_reg@2
510  00000080 = _ps2___byte equ _option_reg
511  00000002 = _ps2___bit equ 2
512                     ; line_number = 88
513                     ; bind _ps1 = _option_reg@1
514  00000080 = _ps1___byte equ _option_reg
515  00000001 = _ps1___bit equ 1
516                     ; line_number = 89
517                     ; bind _ps0 = _option_reg@0
518  00000080 = _ps0___byte equ _option_reg
519  00000000 = _ps0___bit equ 0
520             
521                     ; line_number = 91
522                     ; register _trisa = 
523  00000085 = _trisa equ 133
524                     ; line_number = 92
525                     ; bind _trisa5 = _trisa@5
526  00000085 = _trisa5___byte equ _trisa
527  00000005 = _trisa5___bit equ 5
528                     ; line_number = 93
529                     ; bind _trisa4 = _trisa@4
530  00000085 = _trisa4___byte equ _trisa
531  00000004 = _trisa4___bit equ 4
532                     ; line_number = 94
533                     ; bind _trisa3 = _trisa@3
534  00000085 = _trisa3___byte equ _trisa
535  00000003 = _trisa3___bit equ 3
536                     ; line_number = 95
537                     ; bind _trisa2 = _trisa@2
538  00000085 = _trisa2___byte equ _trisa
539  00000002 = _trisa2___bit equ 2
540                     ; line_number = 96
541                     ; bind _trisa1 = _trisa@1
542  00000085 = _trisa1___byte equ _trisa
543  00000001 = _trisa1___bit equ 1
544                     ; line_number = 97
545                     ; bind _trisa0 = _trisa@0
546  00000085 = _trisa0___byte equ _trisa
547  00000000 = _trisa0___bit equ 0
548             
549                     ; line_number = 99
550                     ; register _trisc = 
551  00000087 = _trisc equ 135
552                     ; line_number = 100
553                     ; bind _trisc5 = _trisc@5
554  00000087 = _trisc5___byte equ _trisc
555  00000005 = _trisc5___bit equ 5
556                     ; line_number = 101
557                     ; bind _trisc4 = _trisc@4
558  00000087 = _trisc4___byte equ _trisc
559  00000004 = _trisc4___bit equ 4
560                     ; line_number = 102
561                     ; bind _trisc3 = _trisc@3
562  00000087 = _trisc3___byte equ _trisc
563  00000003 = _trisc3___bit equ 3
564                     ; line_number = 103
565                     ; bind _trisc2 = _trisc@2
566  00000087 = _trisc2___byte equ _trisc
567  00000002 = _trisc2___bit equ 2
568                     ; line_number = 104
569                     ; bind _trisc1 = _trisc@1
570  00000087 = _trisc1___byte equ _trisc
571  00000001 = _trisc1___bit equ 1
572                     ; line_number = 105
573                     ; bind _trisc0 = _trisc@0
574  00000087 = _trisc0___byte equ _trisc
575  00000000 = _trisc0___bit equ 0
576             
577                     ; line_number = 107
578                     ; register _pie1 = 
579  0000008c = _pie1 equ 140
580                     ; line_number = 108
581                     ; bind _eeie = _pie1@7
582  0000008c = _eeie___byte equ _pie1
583  00000007 = _eeie___bit equ 7
584                     ; line_number = 109
585                     ; bind _adie = _pie1@6
586  0000008c = _adie___byte equ _pie1
587  00000006 = _adie___bit equ 6
588                     ; line_number = 110
589                     ; bind _cmie = _pie1@3
590  0000008c = _cmie___byte equ _pie1
591  00000003 = _cmie___bit equ 3
592                     ; line_number = 111
593                     ; bind _tmr1ie = _pie1@0
594  0000008c = _tmr1ie___byte equ _pie1
595  00000000 = _tmr1ie___bit equ 0
596             
597                     ; line_number = 113
598                     ; register _pcon = 
599  0000008e = _pcon equ 142
600                     ; line_number = 114
601                     ; bind _por = _pcon@1
602  0000008e = _por___byte equ _pcon
603  00000001 = _por___bit equ 1
604                     ; line_number = 115
605                     ; bind _bor = _pcon@0
606  0000008e = _bor___byte equ _pcon
607  00000000 = _bor___bit equ 0
608             
609                     ; line_number = 117
610                     ; register _osccal = 
611  00000090 = _osccal equ 144
612                     ; line_number = 118
613                     ; bind _cal5 = _osccal@7
614  00000090 = _cal5___byte equ _osccal
615  00000007 = _cal5___bit equ 7
616                     ; line_number = 119
617                     ; bind _cal4 = _osccal@6
618  00000090 = _cal4___byte equ _osccal
619  00000006 = _cal4___bit equ 6
620                     ; line_number = 120
621                     ; bind _cal3 = _osccal@5
622  00000090 = _cal3___byte equ _osccal
623  00000005 = _cal3___bit equ 5
624                     ; line_number = 121
625                     ; bind _cal2 = _osccal@4
626  00000090 = _cal2___byte equ _osccal
627  00000004 = _cal2___bit equ 4
628                     ; line_number = 122
629                     ; bind _cal1 = _osccal@3
630  00000090 = _cal1___byte equ _osccal
631  00000003 = _cal1___bit equ 3
632                     ; line_number = 123
633                     ; bind _cal0 = _osccal@2
634  00000090 = _cal0___byte equ _osccal
635  00000002 = _cal0___bit equ 2
636                     ; line_number = 124
637                     ; constant _osccal_lsb = 4
638  00000004 = _osccal_lsb equ 4
639             
640                     ; line_number = 126
641                     ; register _wpua = 
642  00000095 = _wpua equ 149
643                     ; line_number = 127
644                     ; bind _wpua5 = _wpua@5
645  00000095 = _wpua5___byte equ _wpua
646  00000005 = _wpua5___bit equ 5
647                     ; line_number = 128
648                     ; bind _wpua4 = _wpua@4
649  00000095 = _wpua4___byte equ _wpua
650  00000004 = _wpua4___bit equ 4
651                     ; line_number = 129
652                     ; bind _wpua2 = _wpua@2
653  00000095 = _wpua2___byte equ _wpua
654  00000002 = _wpua2___bit equ 2
655                     ; line_number = 130
656                     ; bind _wpua1 = _wpua@1
657  00000095 = _wpua1___byte equ _wpua
658  00000001 = _wpua1___bit equ 1
659                     ; line_number = 131
660                     ; bind _wpua0 = _wpua@0
661  00000095 = _wpua0___byte equ _wpua
662  00000000 = _wpua0___bit equ 0
663             
664                     ; line_number = 133
665                     ; register _ioca = 
666  00000096 = _ioca equ 150
667                     ; line_number = 134
668                     ; bind _ioca5 = _ioca@5
669  00000096 = _ioca5___byte equ _ioca
670  00000005 = _ioca5___bit equ 5
671                     ; line_number = 135
672                     ; bind _ioca4 = _ioca@4
673  00000096 = _ioca4___byte equ _ioca
674  00000004 = _ioca4___bit equ 4
675                     ; line_number = 136
676                     ; bind _ioca3 = _ioca@3
677  00000096 = _ioca3___byte equ _ioca
678  00000003 = _ioca3___bit equ 3
679                     ; line_number = 137
680                     ; bind _ioca2 = _ioca@2
681  00000096 = _ioca2___byte equ _ioca
682  00000002 = _ioca2___bit equ 2
683                     ; line_number = 138
684                     ; bind _ioca1 = _ioca@1
685  00000096 = _ioca1___byte equ _ioca
686  00000001 = _ioca1___bit equ 1
687                     ; line_number = 139
688                     ; bind _ioca0 = _ioca@0
689  00000096 = _ioca0___byte equ _ioca
690  00000000 = _ioca0___bit equ 0
691             
692                     ; line_number = 141
693                     ; register _vrcon = 
694  00000099 = _vrcon equ 153
695                     ; line_number = 142
696                     ; bind _vren = _vrcon@7
697  00000099 = _vren___byte equ _vrcon
698  00000007 = _vren___bit equ 7
699                     ; line_number = 143
700                     ; bind _vrr = _vrcon@5
701  00000099 = _vrr___byte equ _vrcon
702  00000005 = _vrr___bit equ 5
703                     ; line_number = 144
704                     ; bind _vr3 = _vrcon@3
705  00000099 = _vr3___byte equ _vrcon
706  00000003 = _vr3___bit equ 3
707                     ; line_number = 145
708                     ; bind _vr2 = _vrcon@2
709  00000099 = _vr2___byte equ _vrcon
710  00000002 = _vr2___bit equ 2
711                     ; line_number = 146
712                     ; bind _vr1 = _vrcon@1
713  00000099 = _vr1___byte equ _vrcon
714  00000001 = _vr1___bit equ 1
715                     ; line_number = 147
716                     ; bind _vr0 = _vrcon@0
717  00000099 = _vr0___byte equ _vrcon
718  00000000 = _vr0___bit equ 0
719             
720                     ; line_number = 149
721                     ; register _eedata = 
722  0000009a = _eedata equ 154
723             
724                     ; line_number = 151
725                     ; register _eeadr = 
726  0000009b = _eeadr equ 155
727             
728                     ; line_number = 153
729                     ; register _eecon1 = 
730  0000009c = _eecon1 equ 156
731                     ; line_number = 154
732                     ; bind _wrerr = _eecon1@3
733  0000009c = _wrerr___byte equ _eecon1
734  00000003 = _wrerr___bit equ 3
735                     ; line_number = 155
736                     ; bind _wren = _eecon1@2
737  0000009c = _wren___byte equ _eecon1
738  00000002 = _wren___bit equ 2
739                     ; line_number = 156
740                     ; bind _wr = _eecon1@1
741  0000009c = _wr___byte equ _eecon1
742  00000001 = _wr___bit equ 1
743                     ; line_number = 157
744                     ; bind _rd = _eecon1@0
745  0000009c = _rd___byte equ _eecon1
746  00000000 = _rd___bit equ 0
747             
748                     ; line_number = 159
749                     ; register _eecon2 = 
750  0000009d = _eecon2 equ 157
751             
752             
753                     ; buffer = '_pic16f630'
754                     ; line_number = 107
755                     ; library _pic16f630_676 exited
756             
757             
758                     ; buffer = 'irproximity2'
759                     ; line_number = 16
760                     ; library _pic16f630 exited
761                     ; line_number = 17
762                     ; library clock4mhz entered
763                     ; # Copyright (c) 2004 by Wayne C. Gramlich
764                     ; # All rights reserved.
765             
766                     ; # This library defines the contstants {clock_rate}, {instruction_rate},
767                     ; # and {clocks_per_instruction}.
768             
769                     ; # Define processor constants:
770                     ; buffer = 'clock4mhz'
771                     ; line_number = 9
772                     ; constant clock_rate = 4000000
773  003d0900 = clock_rate equ 4000000
774                     ; line_number = 10
775                     ; constant clocks_per_instruction = 4
776  00000004 = clocks_per_instruction equ 4
777                     ; line_number = 11
778                     ; constant instruction_rate = clock_rate / clocks_per_instruction
779  000f4240 = instruction_rate equ 1000000
780             
781             
782                     ; buffer = 'irproximity2'
783                     ; line_number = 17
784                     ; library clock4mhz exited
785                     ; line_number = 18
786                     ; library bit_bang entered
787                     ; # Copyright (c) 2004 by Wayne C. Gramlich
788                     ; # All rights reserved.
789             
790                     ; # This library provides bit bang routines for sending and receiving
791                     ; # serial data at 2400 baud in 8N1 format (1 start bit, 8 data bits,
792                     ; # No parity bit, 1 stop stop bit.)
793                     ; #
794                     ; # This library requires that the pins {serial_in} and {serial_out}
795                     ; # be defined.  In addition, the variable {instruction_rate} needs
796                     ; # to be defined.  Lastly, there needs to be a {delay} procedure
797                     ; # with an "exact_delay delay_instructions" clause in it.  The {delay}
798                     ; # routine should invoke "watch_dog_reset" so that the watch dog time
799                     ; # can be set.
800             
801                     ; # Define some constants that we will be needing:
802                     ; buffer = 'bit_bang'
803                     ; line_number = 17
804                     ; constant baud_rate = 2400
805  00000960 = baud_rate equ 2400
806                     ; line_number = 18
807                     ; constant instructions_per_bit = instruction_rate / baud_rate
808  000001a0 = instructions_per_bit equ 416
809                     ; line_number = 19
810                     ; constant delays_per_bit = 3
811  00000003 = delays_per_bit equ 3
812                     ; line_number = 20
813                     ; constant instructions_per_delay = instructions_per_bit / delays_per_bit
814  0000008a = instructions_per_delay equ 138
815                     ; line_number = 21
816                     ; constant extra_instructions = 5
817  00000005 = extra_instructions equ 5
818                     ; line_number = 22
819                     ; constant delay_instructions = instructions_per_delay - extra_instructions
820  00000085 = delay_instructions equ 133
821             
822                     ; # The {receiving} bit is sent when data is being received.
823                     ; # It gets cleared whenever data gets sent.  It is used to
824                     ; # determine whether additional delay is needed to turn a
825                     ; # line around for slow interpretted chips like the Basic
826                     ; # Stamp 2 and the OOPIC.
827             
828                     ; line_number = 30
829                     ; global receiving bit
830  0000005f = receiving___byte equ shared___globals+63
831  00000000 = receiving___bit equ 0
832                     ; line_number = 31
833                     ; global waiting bit
834  0000005f = waiting___byte equ shared___globals+63
835  00000001 = waiting___bit equ 1
836             
837                     ; Delaying code generation for procedure  byte_get
838                     ; Delaying code generation for procedure  byte_put
839             
840                     ; buffer = 'irproximity2'
841                     ; line_number = 18
842                     ; library bit_bang exited
843             
844                     ; line_number = 20
845                     ; package pdip
846                     ; line_number = 21
847                     ; pin 1 = power_supply
848                     ; line_number = 22
849                     ;  pin 2 = ra5_out, name = serial_out
850  00000005 = serial_out___byte equ _porta
851  00000005 = serial_out___bit equ 5
852                     ; line_number = 23
853                     ;  pin 3 = ra4_in, name = ir_sense
854  00000005 = ir_sense___byte equ _porta
855  00000004 = ir_sense___bit equ 4
856                     ; line_number = 24
857                     ;  pin 4 = ra3_in, name = serial_in
858  00000005 = serial_in___byte equ _porta
859  00000003 = serial_in___bit equ 3
860                     ; line_number = 25
861                     ;  pin 5 = rc5_unused
862                     ; line_number = 26
863                     ;  pin 6 = rc4_out, name = front_led1
864  00000007 = front_led1___byte equ _portc
865  00000004 = front_led1___bit equ 4
866                     ; line_number = 27
867                     ;  pin 7 = rc3_out, name = back_led0
868  00000007 = back_led0___byte equ _portc
869  00000003 = back_led0___bit equ 3
870                     ; line_number = 28
871                     ;  pin 8 = rc2_out, name = back_led1
872  00000007 = back_led1___byte equ _portc
873  00000002 = back_led1___bit equ 2
874                     ; line_number = 29
875                     ;  pin 9 = rc1_out, name = front_led0
876  00000007 = front_led0___byte equ _portc
877  00000001 = front_led0___bit equ 1
878                     ; line_number = 30
879                     ;  pin 10 = rc0_unused
880                     ; line_number = 31
881                     ;  pin 11 = ra2_out, name = front_ir
882  00000005 = front_ir___byte equ _porta
883  00000002 = front_ir___bit equ 2
884                     ; line_number = 32
885                     ;  pin 12 = ra1_out, name = back_ir
886  00000005 = back_ir___byte equ _porta
887  00000001 = back_ir___bit equ 1
888                     ; line_number = 33
889                     ;  pin 13 = ra0_out, name = debug_out
890  00000005 = debug_out___byte equ _porta
891  00000000 = debug_out___bit equ 0
892                     ; line_number = 34
893                     ;  pin 14 = ground
894             
895                     ; line_number = 36
896                     ; constant max_bit = 5
897  00000005 = max_bit equ 5
898                     ; line_number = 37
899                     ; constant max_count = (1 << (max_bit + 1)) - 1
900  0000003f = max_count equ 63
901             
902                     ; line_number = 39
903                     ; constant buffer_power = 3
904  00000003 = buffer_power equ 3
905                     ; line_number = 40
906                     ; constant buffer_size = 1 << buffer_power
907  00000008 = buffer_size equ 8
908                     ; line_number = 41
909                     ; constant f1 = 13
910  0000000d = f1 equ 13
911                     ; line_number = 42
912                     ; constant f2 = 13
913  0000000d = f2 equ 13
914                     ; line_number = 43
915                     ; constant f = f1 + f2
916  0000001a = f equ 26
917                     ; line_number = 44
918                     ; constant near_default = 40 << 2
919  000000a0 = near_default equ 160
920             
921                     ; line_number = 46
922                     ; constant interrupt_front_near = 5
923  00000005 = interrupt_front_near equ 5
924                     ; line_number = 47
925                     ; constant interrupt_front_far = 4
926  00000004 = interrupt_front_far equ 4
927                     ; line_number = 48
928                     ; constant interrupt_front_none = 3
929  00000003 = interrupt_front_none equ 3
930                     ; line_number = 49
931                     ; constant interrupt_back_near = 2
932  00000002 = interrupt_back_near equ 2
933                     ; line_number = 50
934                     ; constant interrupt_back_far = 1
935  00000001 = interrupt_back_far equ 1
936                     ; line_number = 51
937                     ; constant interrupt_back_none = 0
938  00000000 = interrupt_back_none equ 0
939             
940                     ; # Globals:
941                     ; line_number = 54
942                     ; global interrupt_enable bit
943  0000005f = interrupt_enable___byte equ shared___globals+63
944  00000002 = interrupt_enable___bit equ 2
945                     ; line_number = 55
946                     ; global interrupt_pending bit
947  0000005f = interrupt_pending___byte equ shared___globals+63
948  00000003 = interrupt_pending___bit equ 3
949                     ; line_number = 56
950                     ; global interrupt_mask byte
951  00000024 = interrupt_mask equ shared___globals+4
952             
953                     ; line_number = 58
954                     ; global backs[buffer_size] array[byte]
955  00000025 = backs equ shared___globals+5
956                     ; line_number = 59
957                     ; global back_average byte
958  0000002d = back_average equ shared___globals+13
959                     ; line_number = 60
960                     ; global back_count byte
961  0000002e = back_count equ shared___globals+14
962                     ; line_number = 61
963                     ; global back_delay byte
964  0000002f = back_delay equ shared___globals+15
965                     ; line_number = 62
966                     ; global back_enable bit
967  0000005f = back_enable___byte equ shared___globals+63
968  00000004 = back_enable___bit equ 4
969                     ; line_number = 63
970                     ; global back_far byte
971  00000030 = back_far equ shared___globals+16
972                     ; line_number = 64
973                     ; global back_detect byte
974  00000031 = back_detect equ shared___globals+17
975                     ; line_number = 65
976                     ; global back_index byte
977  00000032 = back_index equ shared___globals+18
978                     ; line_number = 66
979                     ; global back_last byte
980  00000033 = back_last equ shared___globals+19
981                     ; line_number = 67
982                     ; global back_near byte
983  00000034 = back_near equ shared___globals+20
984             
985                     ; line_number = 69
986                     ; global fronts[buffer_size] array[byte]
987  00000035 = fronts equ shared___globals+21
988                     ; line_number = 70
989                     ; global front_average byte
990  0000003d = front_average equ shared___globals+29
991                     ; line_number = 71
992                     ; global front_count byte
993  0000003e = front_count equ shared___globals+30
994                     ; line_number = 72
995                     ; global front_delay byte
996  0000003f = front_delay equ shared___globals+31
997                     ; line_number = 73
998                     ; global front_enable bit
999  0000005f = front_enable___byte equ shared___globals+63
1000 00000005 = front_enable___bit equ 5
1001                    ; line_number = 74
1002                    ; global front_far byte
1003 00000040 = front_far equ shared___globals+32
1004                    ; line_number = 75
1005                    ; global front_index byte
1006 00000041 = front_index equ shared___globals+33
1007                    ; line_number = 76
1008                    ; global front_last byte
1009 00000042 = front_last equ shared___globals+34
1010                    ; line_number = 77
1011                    ; global front_near byte
1012 00000043 = front_near equ shared___globals+35
1013            
1014                    ; line_number = 79
1015                    ; global command_previous byte
1016 00000044 = command_previous equ shared___globals+36
1017                    ; line_number = 80
1018                    ; global command_last byte
1019 00000045 = command_last equ shared___globals+37
1020                    ; line_number = 81
1021                    ; global sent_previous byte
1022 00000046 = sent_previous equ shared___globals+38
1023                    ; line_number = 82
1024                    ; global sent_last byte
1025 00000047 = sent_last equ shared___globals+39
1026            
1027                    ; line_number = 84
1028                    ; procedure main
1029   0000 :   main:
1030                    ; Need to calibrate the oscillator
1031 0000 23ff          call    1023
1032 0001 1683          bsf     __rp0___byte, __rp0___bit
1033 0002 0090          movwf   _osccal
1034                    ; Initialize some registers
1035 0003 300c          movlw   12
1036 0004 0085          movwf   _trisa
1037 0005 0187          clrf    _trisc
1038                    ; arguments_none
1039                    ; line_number = 86
1040                    ;  returns_nothing
1041            
1042                    ; line_number = 88
1043                    ;  local temp byte
1044 00000048 = main__temp equ shared___globals+40
1045            
1046                    ; line_number = 90
1047                    ;  local bit byte
1048 00000049 = main__bit equ shared___globals+41
1049                    ; line_number = 91
1050                    ;  local command byte
1051 0000004a = main__command equ shared___globals+42
1052                    ; line_number = 92
1053                    ;  local temporary byte
1054 0000004b = main__temporary equ shared___globals+43
1055                    ; line_number = 93
1056                    ;  local id_index byte
1057 0000004c = main__id_index equ shared___globals+44
1058                    ; line_number = 94
1059                    ;  local glitch byte
1060 0000004d = main__glitch equ shared___globals+45
1061                    ; line_number = 95
1062                    ;  local counter byte
1063 0000004e = main__counter equ shared___globals+46
1064            
1065                    ; before procedure statements delay=non-uniform, bit states=(data:X0=>X1 code:XX=>XX)
1066                    ; line_number = 97
1067                    ;  id_index := 0
1068 0006 3000          movlw   0
1069 0007 1283          bcf     __rp0___byte, __rp0___bit
1070 0008 00cc          movwf   main__id_index
1071                    ; line_number = 98
1072                    ;  glitch := 0
1073 0009 3000          movlw   0
1074 000a 00cd          movwf   main__glitch
1075            
1076                    ; line_number = 100
1077                    ;  interrupt_enable := 0
1078 000b 115f          bcf     interrupt_enable___byte, interrupt_enable___bit
1079                    ; line_number = 101
1080                    ;  interrupt_pending := 0
1081 000c 11df          bcf     interrupt_pending___byte, interrupt_pending___bit
1082                    ; line_number = 102
1083                    ;  interrupt_mask := 0
1084 000d 3000          movlw   0
1085 000e 00a4          movwf   interrupt_mask
1086                    ; line_number = 103
1087                    ;  receiving := 0
1088 000f 105f          bcf     receiving___byte, receiving___bit
1089            
1090                    ; line_number = 105
1091                    ;  back_count := 0
1092 0010 3000          movlw   0
1093 0011 00ae          movwf   back_count
1094                    ; line_number = 106
1095                    ;  back_delay := 0
1096 0012 3000          movlw   0
1097 0013 00af          movwf   back_delay
1098                    ; line_number = 107
1099                    ;  back_enable := 1
1100 0014 165f          bsf     back_enable___byte, back_enable___bit
1101                    ; line_number = 108
1102                    ;  back_far := 0
1103 0015 3000          movlw   0
1104 0016 00b0          movwf   back_far
1105                    ; line_number = 109
1106                    ;  back_index := 0
1107 0017 3000          movlw   0
1108 0018 00b2          movwf   back_index
1109                    ; line_number = 110
1110                    ;  back_led0 := 1
1111 0019 1587          bsf     back_led0___byte, back_led0___bit
1112                    ; line_number = 111
1113                    ;  back_led1 := 1
1114 001a 1507          bsf     back_led1___byte, back_led1___bit
1115                    ; line_number = 112
1116                    ;  back_near := near_default
1117 001b 30a0          movlw   160
1118 001c 00b4          movwf   back_near
1119            
1120                    ; line_number = 114
1121                    ;  front_count := 0
1122 001d 3000          movlw   0
1123 001e 00be          movwf   front_count
1124                    ; line_number = 115
1125                    ;  front_delay := 0
1126 001f 3000          movlw   0
1127 0020 00bf          movwf   front_delay
1128                    ; line_number = 116
1129                    ;  front_enable := 1
1130 0021 16df          bsf     front_enable___byte, front_enable___bit
1131                    ; line_number = 117
1132                    ;  front_far := 0
1133 0022 3000          movlw   0
1134 0023 00c0          movwf   front_far
1135                    ; line_number = 118
1136                    ;  front_index := 0
1137 0024 3000          movlw   0
1138 0025 00c1          movwf   front_index
1139                    ; line_number = 119
1140                    ;  front_led0 := 1
1141 0026 1487          bsf     front_led0___byte, front_led0___bit
1142                    ; line_number = 120
1143                    ;  front_led1 := 1
1144 0027 1607          bsf     front_led1___byte, front_led1___bit
1145                    ; line_number = 121
1146                    ;  front_near := near_default
1147 0028 30a0          movlw   160
1148 0029 00c3          movwf   front_near
1149            
1150                    ; # Set the direction:
1151                    ; line_number = 124
1152                    ;  loop_forever start
1153   002a :   main__1:
1154                    ; # Wait for a command:
1155                    ; line_number = 126
1156                    ;  command := xbyte_get()
1157 002a 217f          call    xbyte_get
1158 002b 00ca          movwf   main__command
1159            
1160                    ; # Dispatch on command:
1161                    ; line_number = 129
1162                    ;  switch command >> 6 start
1163 002c 3000          movlw   main__89>>8
1164 002d 008a          movwf   __pclath
1165 00000055 = main__90 equ shared___globals+53
1166 002e 0e4a          swapf   main__command,w
1167 002f 00d5          movwf   main__90
1168 0030 0cd5          rrf     main__90,f
1169 0031 0c55          rrf     main__90,w
1170 0032 3903          andlw   3
1171 0033 3e35          addlw   main__89
1172 0034 0082          movwf   __pcl
1173                    ; page_group 4
1174   0035 :   main__89:
1175 0035 2839          goto    main__85
1176 0036 2901          goto    main__86
1177 0037 2902          goto    main__87
1178 0038 2903          goto    main__88
1179                    ; line_number = 130
1180                    ; case 0
1181   0039 :   main__85:
1182                    ; # Command = 00xx xxxx:
1183                    ; line_number = 132
1184                    ;  switch (command >> 3) & 7 start
1185 0039 3000          movlw   main__52>>8
1186 003a 008a          movwf   __pclath
1187 00000055 = main__53 equ shared___globals+53
1188 003b 0c4a          rrf     main__command,w
1189 003c 00d5          movwf   main__53
1190 003d 0cd5          rrf     main__53,f
1191 003e 0c55          rrf     main__53,w
1192 003f 3907          andlw   7
1193 0040 3e42          addlw   main__52
1194 0041 0082          movwf   __pcl
1195                    ; page_group 8
1196   0042 :   main__52:
1197 0042 284a          goto    main__47
1198 0043 2895          goto    main__48
1199 0044 28b6          goto    main__49
1200 0045 28df          goto    main__50
1201 0046 2900          goto    main__51
1202 0047 2900          goto    main__51
1203 0048 2900          goto    main__51
1204 0049 2900          goto    main__51
1205                    ; line_number = 133
1206                    ; case 0
1207   004a :   main__47:
1208                    ; # Command = 0000 0xxx:
1209                    ; line_number = 135
1210                    ;  switch command & 7 start
1211 004a 3000          movlw   main__18>>8
1212 004b 008a          movwf   __pclath
1213 004c 3007          movlw   7
1214 004d 054a          andwf   main__command,w
1215 004e 3e50          addlw   main__18
1216 004f 0082          movwf   __pcl
1217                    ; page_group 8
1218   0050 :   main__18:
1219 0050 2858          goto    main__10
1220 0051 2875          goto    main__11
1221 0052 287d          goto    main__12
1222 0053 2886          goto    main__13
1223 0054 2889          goto    main__14
1224 0055 288c          goto    main__15
1225 0056 288f          goto    main__16
1226 0057 2892          goto    main__17
1227                    ; line_number = 136
1228                    ; case 0
1229   0058 :   main__10:
1230                    ; # Command = 0000 0000; Read LED's:
1231                    ; line_number = 138
1232                    ;  temporary := 0
1233 0058 3000          movlw   0
1234 0059 00cb          movwf   main__temporary
1235                    ; line_number = 139
1236                    ;  if front_average > front_far start
1237 005a 0840          movf    front_far,w
1238 005b 023d          subwf   front_average,w
1239 005c 1903          btfsc   __z___byte, __z___bit
1240 005d 1003          bcf     __c___byte, __c___bit
1241                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1242                    ; CASE: True.size=1 False.size=0
1243 005e 1803          btfsc   __c___byte, __c___bit
1244                    ; line_number = 140
1245                    ; temporary@3 := 1
1246 0000004b = main__select__2___byte equ main__temporary
1247 00000003 = main__select__2___bit equ 3
1248 005f 15cb          bsf     main__select__2___byte, main__select__2___bit
1249                    ; Recombine size1 = 0 || size2 = 0
1250                    ; code.delay=4294967295 back_code.delay=4294967295
1251                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
1252                    ; line_number = 139
1253                    ;  if front_average > front_far done
1254                    ; line_number = 141
1255                    ; if front_average > front_near start
1256 0060 0843          movf    front_near,w
1257 0061 023d          subwf   front_average,w
1258 0062 1903          btfsc   __z___byte, __z___bit
1259 0063 1003          bcf     __c___byte, __c___bit
1260                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1261                    ; CASE: True.size=1 False.size=0
1262 0064 1803          btfsc   __c___byte, __c___bit
1263                    ; line_number = 142
1264                    ; temporary@2 := 1
1265 0000004b = main__select__3___byte equ main__temporary
1266 00000002 = main__select__3___bit equ 2
1267 0065 154b          bsf     main__select__3___byte, main__select__3___bit
1268                    ; Recombine size1 = 0 || size2 = 0
1269                    ; code.delay=4294967295 back_code.delay=4294967295
1270                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
1271                    ; line_number = 141
1272                    ; if front_average > front_near done
1273                    ; line_number = 143
1274                    ; if back_average > back_far start
1275 0066 0830          movf    back_far,w
1276 0067 022d          subwf   back_average,w
1277 0068 1903          btfsc   __z___byte, __z___bit
1278 0069 1003          bcf     __c___byte, __c___bit
1279                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1280                    ; CASE: True.size=1 False.size=0
1281 006a 1803          btfsc   __c___byte, __c___bit
1282                    ; line_number = 144
1283                    ; temporary@1 := 1
1284 0000004b = main__select__4___byte equ main__temporary
1285 00000001 = main__select__4___bit equ 1
1286 006b 14cb          bsf     main__select__4___byte, main__select__4___bit
1287                    ; Recombine size1 = 0 || size2 = 0
1288                    ; code.delay=4294967295 back_code.delay=4294967295
1289                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
1290                    ; line_number = 143
1291                    ; if back_average > back_far done
1292                    ; line_number = 145
1293                    ; if back_average > back_near start
1294 006c 0834          movf    back_near,w
1295 006d 022d          subwf   back_average,w
1296 006e 1903          btfsc   __z___byte, __z___bit
1297 006f 1003          bcf     __c___byte, __c___bit
1298                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1299                    ; CASE: True.size=1 False.size=0
1300 0070 1803          btfsc   __c___byte, __c___bit
1301                    ; line_number = 146
1302                    ; temporary@0 := 1
1303 0000004b = main__select__5___byte equ main__temporary
1304 00000000 = main__select__5___bit equ 0
1305 0071 144b          bsf     main__select__5___byte, main__select__5___bit
1306                    ; Recombine size1 = 0 || size2 = 0
1307                    ; code.delay=4294967295 back_code.delay=4294967295
1308                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
1309                    ; line_number = 145
1310                    ; if back_average > back_near done
1311                    ; line_number = 147
1312                    ; call byte_put(temporary)
1313 0072 084b          movf    main__temporary,w
1314 0073 235d          call    byte_put
1315 0074 2894          goto    main__19
1316                    ; line_number = 148
1317                    ; case 1
1318   0075 :   main__11:
1319                    ; # Command = 0000 0001; Read Front/Back Average High:
1320                    ; line_number = 150
1321                    ;  call byte_put((front_average & 0xf0) | (back_average >> 4))
1322 00000055 = main__6 equ shared___globals+53
1323 0075 30f0          movlw   240
1324 0076 053d          andwf   front_average,w
1325 0077 00d5          movwf   main__6
1326 00000056 = main__7 equ shared___globals+54
1327 0078 0e2d          swapf   back_average,w
1328 0079 390f          andlw   15
1329 007a 0455          iorwf   main__6,w
1330 007b 235d          call    byte_put
1331 007c 2894          goto    main__19
1332                    ; line_number = 151
1333                    ; case 2
1334   007d :   main__12:
1335                    ; # Command = 0000 0010; Read Enables:
1336                    ; line_number = 153
1337                    ;  temporary := 0
1338 007d 3000          movlw   0
1339 007e 00cb          movwf   main__temporary
1340                    ; line_number = 154
1341                    ;  if front_enable start
1342                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1343                    ; CASE: True.size=1 False.size=0
1344 007f 1adf          btfsc   front_enable___byte, front_enable___bit
1345                    ; line_number = 155
1346                    ; temporary@2 := 1
1347 0000004b = main__select__8___byte equ main__temporary
1348 00000002 = main__select__8___bit equ 2
1349 0080 154b          bsf     main__select__8___byte, main__select__8___bit
1350                    ; Recombine size1 = 0 || size2 = 0
1351                    ; code.delay=4294967295 back_code.delay=4294967295
1352                    ; <=bit_code_emit@symbol; sym=front_enable (data:X0=>X0 code:XX=>XX)
1353                    ; line_number = 154
1354                    ;  if front_enable done
1355                    ; line_number = 156
1356                    ; if back_enable start
1357                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1358                    ; CASE: True.size=1 False.size=0
1359 0081 1a5f          btfsc   back_enable___byte, back_enable___bit
1360                    ; line_number = 157
1361                    ; temporary@1 := 1
1362 0000004b = main__select__9___byte equ main__temporary
1363 00000001 = main__select__9___bit equ 1
1364 0082 14cb          bsf     main__select__9___byte, main__select__9___bit
1365                    ; Recombine size1 = 0 || size2 = 0
1366                    ; code.delay=4294967295 back_code.delay=4294967295
1367                    ; <=bit_code_emit@symbol; sym=back_enable (data:X0=>X0 code:XX=>XX)
1368                    ; line_number = 156
1369                    ; if back_enable done
1370                    ; line_number = 158
1371                    ; call byte_put(temporary)
1372 0083 084b          movf    main__temporary,w
1373 0084 235d          call    byte_put
1374 0085 2894          goto    main__19
1375                    ; line_number = 159
1376                    ; case 3
1377   0086 :   main__13:
1378                    ; # Command = 0000 0011; Read Interrupt Mask:
1379                    ; line_number = 161
1380                    ;  call byte_put(interrupt_mask)
1381 0086 0824          movf    interrupt_mask,w
1382 0087 235d          call    byte_put
1383 0088 2894          goto    main__19
1384                    ; line_number = 162
1385                    ; case 4
1386   0089 :   main__14:
1387                    ; # Command = 0000 0100; Read Front Average:
1388                    ; line_number = 164
1389                    ;  call byte_put(front_average)
1390 0089 083d          movf    front_average,w
1391 008a 235d          call    byte_put
1392 008b 2894          goto    main__19
1393                    ; line_number = 165
1394                    ; case 5
1395   008c :   main__15:
1396                    ; # Command = 0000 0101; Read Back Average:
1397                    ; line_number = 167
1398                    ;  call byte_put(back_average)
1399 008c 082d          movf    back_average,w
1400 008d 235d          call    byte_put
1401 008e 2894          goto    main__19
1402                    ; line_number = 168
1403                    ; case 6
1404   008f :   main__16:
1405                    ; # Command = 0000 0110; Read Front Latest:
1406                    ; line_number = 170
1407                    ;  call byte_put(front_last)
1408 008f 0842          movf    front_last,w
1409 0090 235d          call    byte_put
1410 0091 2894          goto    main__19
1411                    ; line_number = 171
1412                    ; case 7
1413   0092 :   main__17:
1414                    ; # Command = 0000 0111; Read Back Latest:
1415                    ; line_number = 173
1416                    ;  call byte_put(back_last)
1417 0092 0833          movf    back_last,w
1418 0093 235d          call    byte_put
1419   0094 :   main__19:
1420                    ; switch end:(data:X0=>X0 code:XX=>XX)
1421                    ; line_number = 135
1422                    ;  switch command & 7 done
1423 0094 2900          goto    main__54
1424                    ; line_number = 174
1425                    ; case 1
1426   0095 :   main__48:
1427                    ; # Command = 0000 1xxx:
1428                    ; line_number = 176
1429                    ;  switch command & 7 start
1430 0095 3000          movlw   main__27>>8
1431 0096 008a          movwf   __pclath
1432 0097 3007          movlw   7
1433 0098 054a          andwf   main__command,w
1434 0099 3e9b          addlw   main__27
1435 009a 0082          movwf   __pcl
1436                    ; page_group 8
1437   009b :   main__27:
1438 009b 28a3          goto    main__20
1439 009c 28a6          goto    main__21
1440 009d 28a9          goto    main__22
1441 009e 28ac          goto    main__23
1442 009f 28af          goto    main__24
1443 00a0 28b2          goto    main__25
1444 00a1 28b5          goto    main__26
1445 00a2 28b5          goto    main__26
1446                    ; line_number = 177
1447                    ; case 0
1448   00a3 :   main__20:
1449                    ; # Command = 0000 1000; Read Front Near:
1450                    ; line_number = 179
1451                    ;  call byte_put(front_near)
1452 00a3 0843          movf    front_near,w
1453 00a4 235d          call    byte_put
1454 00a5 28b5          goto    main__28
1455                    ; line_number = 180
1456                    ; case 1
1457   00a6 :   main__21:
1458                    ; # Command = 0000 1001; Read Back Near:
1459                    ; line_number = 182
1460                    ;  call byte_put(back_near)
1461 00a6 0834          movf    back_near,w
1462 00a7 235d          call    byte_put
1463 00a8 28b5          goto    main__28
1464                    ; line_number = 183
1465                    ; case 2
1466   00a9 :   main__22:
1467                    ; # Command = 0000 1010; Read Front Far:
1468                    ; line_number = 185
1469                    ;  call byte_put(front_far)
1470 00a9 0840          movf    front_far,w
1471 00aa 235d          call    byte_put
1472 00ab 28b5          goto    main__28
1473                    ; line_number = 186
1474                    ; case 3
1475   00ac :   main__23:
1476                    ; # Command = 0000 1011; Read Back Far:
1477                    ; line_number = 188
1478                    ;  call byte_put(back_far)
1479 00ac 0830          movf    back_far,w
1480 00ad 235d          call    byte_put
1481 00ae 28b5          goto    main__28
1482                    ; line_number = 189
1483                    ; case 4
1484   00af :   main__24:
1485                    ; # Command = 0000 1100; Read Front Delay:
1486                    ; line_number = 191
1487                    ;  call byte_put(front_delay)
1488 00af 083f          movf    front_delay,w
1489 00b0 235d          call    byte_put
1490 00b1 28b5          goto    main__28
1491                    ; line_number = 192
1492                    ; case 5
1493   00b2 :   main__25:
1494                    ; # Command = 0000 1101; Read Back Delay:
1495                    ; line_number = 194
1496                    ;  call byte_put(back_delay)
1497 00b2 082f          movf    back_delay,w
1498 00b3 235d          call    byte_put
1499 00b4 28b5          goto    main__28
1500                    ; line_number = 195
1501                    ; case 6, 7
1502   00b5 :   main__26:
1503                    ; # Command = 0000 111x:
1504                    ; line_number = 197
1505                    ;  do_nothing
1506   00b5 :   main__28:
1507                    ; switch end:(data:X0=>X? code:XX=>XX)
1508                    ; line_number = 176
1509                    ;  switch command & 7 done
1510 00b5 2900          goto    main__54
1511                    ; line_number = 198
1512                    ; case 2
1513   00b6 :   main__49:
1514                    ; line_number = 199
1515                    ; switch command & 7 start
1516 00b6 3000          movlw   main__36>>8
1517 00b7 008a          movwf   __pclath
1518 00b8 3007          movlw   7
1519 00b9 054a          andwf   main__command,w
1520 00ba 3ebc          addlw   main__36
1521 00bb 0082          movwf   __pcl
1522                    ; page_group 8
1523   00bc :   main__36:
1524 00bc 28c4          goto    main__33
1525 00bd 28c4          goto    main__33
1526 00be 28c4          goto    main__33
1527 00bf 28c4          goto    main__33
1528 00c0 28db          goto    main__34
1529 00c1 28de          goto    main__35
1530 00c2 28de          goto    main__35
1531 00c3 28de          goto    main__35
1532                    ; line_number = 200
1533                    ; case 0, 1, 2, 3
1534   00c4 :   main__33:
1535                    ; # Command = 0001 00fb: Set Enables:
1536                    ; line_number = 202
1537                    ;  front_enable := command@1
1538 00c4 12df          bcf     front_enable___byte, front_enable___bit
1539 0000004a = main__select__29___byte equ main__command
1540 00000001 = main__select__29___bit equ 1
1541                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1542                    ; CASE: True.size=1 False.size=0
1543 00c5 18ca          btfsc   main__select__29___byte, main__select__29___bit
1544 00c6 16df          bsf     front_enable___byte, front_enable___bit
1545                    ; Recombine size1 = 0 || size2 = 0
1546                    ; code.delay=4294967295 back_code.delay=4294967295
1547                    ; <=bit_code_emit@symbol; sym=main__select__29 (data:X0=>X0 code:XX=>XX)
1548                    ; line_number = 203
1549                    ;  back_enable := command@0
1550 00c7 125f          bcf     back_enable___byte, back_enable___bit
1551 0000004a = main__select__30___byte equ main__command
1552 00000000 = main__select__30___bit equ 0
1553                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1554                    ; CASE: True.size=1 False.size=0
1555 00c8 184a          btfsc   main__select__30___byte, main__select__30___bit
1556 00c9 165f          bsf     back_enable___byte, back_enable___bit
1557                    ; Recombine size1 = 0 || size2 = 0
1558                    ; code.delay=4294967295 back_code.delay=4294967295
1559                    ; <=bit_code_emit@symbol; sym=main__select__30 (data:X0=>X0 code:XX=>XX)
1560                    ; line_number = 204
1561                    ;  if !front_enable start
1562                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1563                    ; CASE: true.size=0 && false.size>1
1564                    ; bit_code_emit_helper1: body_code.size=6 true_test=false body_code.delay=0 (non-uniform delay)
1565 00ca 1adf          btfsc   front_enable___byte, front_enable___bit
1566 00cb 28d2          goto    main__31
1567                    ; line_number = 205
1568                    ; front_average := 0
1569 00cc 3000          movlw   0
1570 00cd 00bd          movwf   front_average
1571                    ; line_number = 206
1572                    ;  front_last := 0
1573 00ce 3000          movlw   0
1574 00cf 00c2          movwf   front_last
1575                    ; line_number = 207
1576                    ;  front_led0 := 1
1577 00d0 1487          bsf     front_led0___byte, front_led0___bit
1578                    ; line_number = 208
1579                    ;  front_led1 := 1
1580 00d1 1607          bsf     front_led1___byte, front_led1___bit
1581   00d2 :   main__31:
1582                    ; Recombine size1 = 0 || size2 = 0
1583                    ; code.delay=4294967295 back_code.delay=4294967295
1584                    ; <=bit_code_emit@symbol; sym=front_enable (data:X0=>X0 code:XX=>XX)
1585                    ; line_number = 204
1586                    ;  if !front_enable done
1587                    ; line_number = 209
1588                    ; if !back_enable start
1589                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1590                    ; CASE: true.size=0 && false.size>1
1591                    ; bit_code_emit_helper1: body_code.size=6 true_test=false body_code.delay=0 (non-uniform delay)
1592 00d2 1a5f          btfsc   back_enable___byte, back_enable___bit
1593 00d3 28da          goto    main__32
1594                    ; line_number = 210
1595                    ; back_average := 0
1596 00d4 3000          movlw   0
1597 00d5 00ad          movwf   back_average
1598                    ; line_number = 211
1599                    ;  back_last := 0
1600 00d6 3000          movlw   0
1601 00d7 00b3          movwf   back_last
1602                    ; line_number = 212
1603                    ;  back_led0 := 1
1604 00d8 1587          bsf     back_led0___byte, back_led0___bit
1605                    ; line_number = 213
1606                    ;  back_led1 := 1
1607 00d9 1507          bsf     back_led1___byte, back_led1___bit
1608   00da :   main__32:
1609                    ; Recombine size1 = 0 || size2 = 0
1610                    ; code.delay=4294967295 back_code.delay=4294967295
1611                    ; <=bit_code_emit@symbol; sym=back_enable (data:X0=>X0 code:XX=>XX)
1612                    ; line_number = 209
1613                    ; if !back_enable done
1614 00da 28de          goto    main__37
1615                    ; line_number = 214
1616                    ; case 4
1617   00db :   main__34:
1618                    ; # Command = 0001 0100: Set Interrupt Mask:
1619                    ; line_number = 216
1620                    ;  interrupt_mask := xbyte_get()
1621 00db 217f          call    xbyte_get
1622 00dc 00a4          movwf   interrupt_mask
1623 00dd 28de          goto    main__37
1624                    ; line_number = 217
1625                    ; case 5, 6, 7
1626   00de :   main__35:
1627                    ; line_number = 218
1628                    ; do_nothing
1629   00de :   main__37:
1630                    ; switch end:(data:X0=>X? code:XX=>XX)
1631                    ; line_number = 199
1632                    ; switch command & 7 done
1633 00de 2900          goto    main__54
1634                    ; line_number = 219
1635                    ; case 3
1636   00df :   main__50:
1637                    ; line_number = 220
1638                    ; switch command & 7 start
1639 00df 3000          movlw   main__45>>8
1640 00e0 008a          movwf   __pclath
1641 00e1 3007          movlw   7
1642 00e2 054a          andwf   main__command,w
1643 00e3 3ee5          addlw   main__45
1644 00e4 0082          movwf   __pcl
1645                    ; page_group 8
1646   00e5 :   main__45:
1647 00e5 28ed          goto    main__38
1648 00e6 28f0          goto    main__39
1649 00e7 28f3          goto    main__40
1650 00e8 28f6          goto    main__41
1651 00e9 28f9          goto    main__42
1652 00ea 28fc          goto    main__43
1653 00eb 28ff          goto    main__44
1654 00ec 28ff          goto    main__44
1655                    ; line_number = 221
1656                    ; case 0
1657   00ed :   main__38:
1658                    ; # Command = 0001 1000: Set Front Near:
1659                    ; line_number = 223
1660                    ;  front_near := xbyte_get()
1661 00ed 217f          call    xbyte_get
1662 00ee 00c3          movwf   front_near
1663 00ef 28ff          goto    main__46
1664                    ; line_number = 224
1665                    ; case 1
1666   00f0 :   main__39:
1667                    ; # Command = 0001 1001: Set Back Near:
1668                    ; line_number = 226
1669                    ;  back_near := xbyte_get()
1670 00f0 217f          call    xbyte_get
1671 00f1 00b4          movwf   back_near
1672 00f2 28ff          goto    main__46
1673                    ; line_number = 227
1674                    ; case 2
1675   00f3 :   main__40:
1676                    ; # Command = 0001 1010: Set Front Far:
1677                    ; line_number = 229
1678                    ;  front_far := xbyte_get()
1679 00f3 217f          call    xbyte_get
1680 00f4 00c0          movwf   front_far
1681 00f5 28ff          goto    main__46
1682                    ; line_number = 230
1683                    ; case 3
1684   00f6 :   main__41:
1685                    ; # Command = 0001 1011: Set Back Far:
1686                    ; line_number = 232
1687                    ;  back_far := xbyte_get()
1688 00f6 217f          call    xbyte_get
1689 00f7 00b0          movwf   back_far
1690 00f8 28ff          goto    main__46
1691                    ; line_number = 233
1692                    ; case 4
1693   00f9 :   main__42:
1694                    ; # Command = 0001 1100: Set Front Delay:
1695                    ; line_number = 235
1696                    ;  front_delay := xbyte_get()
1697 00f9 217f          call    xbyte_get
1698 00fa 00bf          movwf   front_delay
1699 00fb 28ff          goto    main__46
1700                    ; line_number = 236
1701                    ; case 5
1702   00fc :   main__43:
1703                    ; # Command = 0001 1101: Set Back Delay:
1704                    ; line_number = 238
1705                    ;  back_delay := xbyte_get()
1706 00fc 217f          call    xbyte_get
1707 00fd 00af          movwf   back_delay
1708 00fe 28ff          goto    main__46
1709                    ; line_number = 239
1710                    ; case 6, 7
1711   00ff :   main__44:
1712                    ; line_number = 240
1713                    ; do_nothing
1714   00ff :   main__46:
1715                    ; switch end:(data:X0=>X? code:XX=>XX)
1716                    ; line_number = 220
1717                    ; switch command & 7 done
1718 00ff 2900          goto    main__54
1719                    ; line_number = 241
1720                    ; case 4, 5, 6, 7
1721   0100 :   main__51:
1722                    ; line_number = 242
1723                    ; do_nothing
1724            
1725   0100 :   main__54:
1726                    ; switch end:(data:X0=>X? code:XX=>XX)
1727                    ; line_number = 132
1728                    ;  switch (command >> 3) & 7 done
1729 0100 2976          goto    main__91
1730                    ; line_number = 244
1731                    ; case 1
1732   0101 :   main__86:
1733                    ; # Command = 01xx xxxx:
1734                    ; line_number = 246
1735                    ;  do_nothing
1736 0101 2976          goto    main__91
1737                    ; line_number = 247
1738                    ; case 2
1739   0102 :   main__87:
1740                    ; # Do nothing (Command = 10xx xxxx):
1741                    ; line_number = 249
1742                    ;  do_nothing
1743 0102 2976          goto    main__91
1744                    ; line_number = 250
1745                    ; case 3
1746   0103 :   main__88:
1747                    ; # Command = 11xx xxxx:
1748                    ; line_number = 252
1749                    ;  switch (command >> 3) & 7 start
1750 0103 3001          movlw   main__82>>8
1751 0104 008a          movwf   __pclath
1752 00000055 = main__83 equ shared___globals+53
1753 0105 0c4a          rrf     main__command,w
1754 0106 00d5          movwf   main__83
1755 0107 0cd5          rrf     main__83,f
1756 0108 0c55          rrf     main__83,w
1757 0109 3907          andlw   7
1758 010a 3e0c          addlw   main__82
1759 010b 0082          movwf   __pcl
1760                    ; page_group 8
1761   010c :   main__82:
1762 010c 2914          goto    main__78
1763 010d 2914          goto    main__78
1764 010e 2914          goto    main__78
1765 010f 2914          goto    main__78
1766 0110 2914          goto    main__78
1767 0111 2915          goto    main__79
1768 0112 2923          goto    main__80
1769 0113 2940          goto    main__81
1770                    ; line_number = 253
1771                    ; case 0, 1, 2, 3, 4
1772   0114 :   main__78:
1773                    ; # Command = 1100 xxxx or 1110 0xxx:
1774                    ; line_number = 255
1775                    ;  do_nothing
1776 0114 2976          goto    main__84
1777                    ; line_number = 256
1778                    ; case 5
1779   0115 :   main__79:
1780                    ; # Read Interrupt Bits (Command = 1110 1111):
1781                    ; line_number = 258
1782                    ;  if (command & 7) = 7 start
1783                    ; Left minus Right
1784 0115 3007          movlw   7
1785 0116 054a          andwf   main__command,w
1786 0117 3ef9          addlw   249
1787                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1788                    ; CASE: true_code.size = 0 && false_code.size > 1
1789                    ; bit_code_emit_helper1: body_code.size=8 true_test=true body_code.delay=0 (non-uniform delay)
1790 0118 1d03          btfss   __z___byte, __z___bit
1791 0119 2922          goto    main__57
1792                    ; # Return Interrupt Bits:
1793                    ; line_number = 260
1794                    ;  temporary := 0
1795 011a 3000          movlw   0
1796 011b 00cb          movwf   main__temporary
1797                    ; line_number = 261
1798                    ;  if interrupt_enable start
1799                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1800                    ; CASE: True.size=1 False.size=0
1801 011c 195f          btfsc   interrupt_enable___byte, interrupt_enable___bit
1802                    ; line_number = 262
1803                    ; temporary@1 := 1
1804 0000004b = main__select__55___byte equ main__temporary
1805 00000001 = main__select__55___bit equ 1
1806 011d 14cb          bsf     main__select__55___byte, main__select__55___bit
1807                    ; Recombine size1 = 0 || size2 = 0
1808                    ; code.delay=4294967295 back_code.delay=4294967295
1809                    ; <=bit_code_emit@symbol; sym=interrupt_enable (data:X0=>X0 code:XX=>XX)
1810                    ; line_number = 261
1811                    ;  if interrupt_enable done
1812                    ; line_number = 263
1813                    ; if interrupt_pending start
1814                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1815                    ; CASE: True.size=1 False.size=0
1816 011e 19df          btfsc   interrupt_pending___byte, interrupt_pending___bit
1817                    ; line_number = 264
1818                    ; temporary@0 := 1
1819 0000004b = main__select__56___byte equ main__temporary
1820 00000000 = main__select__56___bit equ 0
1821 011f 144b          bsf     main__select__56___byte, main__select__56___bit
1822                    ; Recombine size1 = 0 || size2 = 0
1823                    ; code.delay=4294967295 back_code.delay=4294967295
1824                    ; <=bit_code_emit@symbol; sym=interrupt_pending (data:X0=>X0 code:XX=>XX)
1825                    ; line_number = 263
1826                    ; if interrupt_pending done
1827                    ; line_number = 265
1828                    ; call byte_put(temporary)
1829 0120 084b          movf    main__temporary,w
1830 0121 235d          call    byte_put
1831                    ; Recombine size1 = 0 || size2 = 0
1832   0122 :   main__57:
1833                    ; code.delay=4294967295 back_code.delay=4294967295
1834                    ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
1835                    ; line_number = 258
1836                    ;  if (command & 7) = 7 done
1837 0122 2976          goto    main__84
1838                    ; line_number = 266
1839                    ; case 6
1840   0123 :   main__80:
1841                    ; # Shared Interrupt commands (Command = 1111 0xxx):
1842                    ; line_number = 268
1843                    ;  switch command & 7 start
1844 0123 3001          movlw   main__65>>8
1845 0124 008a          movwf   __pclath
1846 0125 3007          movlw   7
1847 0126 054a          andwf   main__command,w
1848 0127 3e29          addlw   main__65
1849 0128 0082          movwf   __pcl
1850                    ; page_group 8
1851   0129 :   main__65:
1852 0129 2931          goto    main__62
1853 012a 2931          goto    main__62
1854 012b 2931          goto    main__62
1855 012c 2931          goto    main__62
1856 012d 2938          goto    main__63
1857 012e 2938          goto    main__63
1858 012f 293c          goto    main__64
1859 0130 293c          goto    main__64
1860                    ; line_number = 269
1861                    ; case 0, 1, 2, 3
1862   0131 :   main__62:
1863                    ; # Set interrupt bits (Command = 1111 10ep):
1864                    ; line_number = 271
1865                    ;  interrupt_enable := command@1
1866 0131 115f          bcf     interrupt_enable___byte, interrupt_enable___bit
1867 0000004a = main__select__58___byte equ main__command
1868 00000001 = main__select__58___bit equ 1
1869                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1870                    ; CASE: True.size=1 False.size=0
1871 0132 18ca          btfsc   main__select__58___byte, main__select__58___bit
1872 0133 155f          bsf     interrupt_enable___byte, interrupt_enable___bit
1873                    ; Recombine size1 = 0 || size2 = 0
1874                    ; code.delay=4294967295 back_code.delay=4294967295
1875                    ; <=bit_code_emit@symbol; sym=main__select__58 (data:X0=>X0 code:XX=>XX)
1876                    ; line_number = 272
1877                    ;  interrupt_pending := command@0
1878 0134 11df          bcf     interrupt_pending___byte, interrupt_pending___bit
1879 0000004a = main__select__59___byte equ main__command
1880 00000000 = main__select__59___bit equ 0
1881                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1882                    ; CASE: True.size=1 False.size=0
1883 0135 184a          btfsc   main__select__59___byte, main__select__59___bit
1884 0136 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
1885                    ; Recombine size1 = 0 || size2 = 0
1886                    ; code.delay=4294967295 back_code.delay=4294967295
1887                    ; <=bit_code_emit@symbol; sym=main__select__59 (data:X0=>X0 code:XX=>XX)
1888 0137 293f          goto    main__66
1889                    ; line_number = 273
1890                    ; case 4, 5
1891   0138 :   main__63:
1892                    ; # Set Interrupt Pending (Command = 1111 110p):
1893                    ; line_number = 275
1894                    ;  interrupt_pending := command@0
1895 0138 11df          bcf     interrupt_pending___byte, interrupt_pending___bit
1896 0000004a = main__select__60___byte equ main__command
1897 00000000 = main__select__60___bit equ 0
1898                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1899                    ; CASE: True.size=1 False.size=0
1900 0139 184a          btfsc   main__select__60___byte, main__select__60___bit
1901 013a 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
1902                    ; Recombine size1 = 0 || size2 = 0
1903                    ; code.delay=4294967295 back_code.delay=4294967295
1904                    ; <=bit_code_emit@symbol; sym=main__select__60 (data:X0=>X0 code:XX=>XX)
1905 013b 293f          goto    main__66
1906                    ; line_number = 276
1907                    ; case 6, 7
1908   013c :   main__64:
1909                    ; # Set Interrupt Enable (Command = 1110 111e):
1910                    ; line_number = 278
1911                    ;  interrupt_enable := command@0
1912 013c 115f          bcf     interrupt_enable___byte, interrupt_enable___bit
1913 0000004a = main__select__61___byte equ main__command
1914 00000000 = main__select__61___bit equ 0
1915                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1916                    ; CASE: True.size=1 False.size=0
1917 013d 184a          btfsc   main__select__61___byte, main__select__61___bit
1918 013e 155f          bsf     interrupt_enable___byte, interrupt_enable___bit
1919                    ; Recombine size1 = 0 || size2 = 0
1920                    ; code.delay=4294967295 back_code.delay=4294967295
1921                    ; <=bit_code_emit@symbol; sym=main__select__61 (data:X0=>X0 code:XX=>XX)
1922   013f :   main__66:
1923                    ; switch end:(data:X0=>X0 code:XX=>XX)
1924                    ; line_number = 268
1925                    ;  switch command & 7 done
1926 013f 2976          goto    main__84
1927                    ; line_number = 279
1928                    ; case 7
1929   0140 :   main__81:
1930                    ; # Shared commands (Command = 1111 1xxx):
1931                    ; line_number = 281
1932                    ;  switch command & 7 start
1933 0140 3001          movlw   main__76>>8
1934 0141 008a          movwf   __pclath
1935 0142 3007          movlw   7
1936 0143 054a          andwf   main__command,w
1937 0144 3e46          addlw   main__76
1938 0145 0082          movwf   __pcl
1939                    ; page_group 8
1940   0146 :   main__76:
1941 0146 294e          goto    main__68
1942 0147 2952          goto    main__69
1943 0148 2956          goto    main__70
1944 0149 295b          goto    main__71
1945 014a 295e          goto    main__72
1946 014b 296b          goto    main__73
1947 014c 296e          goto    main__74
1948 014d 2973          goto    main__75
1949                    ; line_number = 282
1950                    ; case 0
1951   014e :   main__68:
1952                    ; This case body wants this bit set
1953 014e 1683          bsf     __rp0___byte, __rp0___bit
1954                    ; # Clock Decrement (Command = 1111 1000):
1955                    ; line_number = 284
1956                    ;  _osccal := _osccal - _osccal_lsb
1957 014f 30fc          movlw   252
1958 0150 0790          addwf   _osccal,f
1959 0151 2976          goto    main__77
1960                    ; line_number = 285
1961                    ; case 1
1962   0152 :   main__69:
1963                    ; This case body wants this bit set
1964 0152 1683          bsf     __rp0___byte, __rp0___bit
1965                    ; # Clock Increment (Command = 1111 1001):
1966                    ; line_number = 287
1967                    ;  _osccal := _osccal + _osccal_lsb
1968 0153 3004          movlw   4
1969 0154 0790          addwf   _osccal,f
1970 0155 2976          goto    main__77
1971                    ; line_number = 288
1972                    ; case 2
1973   0156 :   main__70:
1974                    ; This case body wants this bit set
1975 0156 1683          bsf     __rp0___byte, __rp0___bit
1976                    ; # Clock Read (Command = 1111 1010):
1977                    ; line_number = 290
1978                    ;  call byte_put(_osccal)
1979 0157 0810          movf    _osccal,w
1980 0158 1283          bcf     __rp0___byte, __rp0___bit
1981 0159 235d          call    byte_put
1982 015a 2976          goto    main__77
1983                    ; line_number = 291
1984                    ; case 3
1985   015b :   main__71:
1986                    ; # Clock Pulse (Command = 1111 1011):
1987                    ; line_number = 293
1988                    ;  call byte_put(0)
1989 015b 3000          movlw   0
1990 015c 235d          call    byte_put
1991 015d 2976          goto    main__77
1992                    ; line_number = 294
1993                    ; case 4
1994   015e :   main__72:
1995                    ; # ID Next (Command = 1111 1100):
1996                    ; line_number = 296
1997                    ;  temp := 0
1998 015e 3000          movlw   0
1999 015f 00c8          movwf   main__temp
2000                    ; line_number = 297
2001                    ;  if id_index < id.size start
2002 0160 3034          movlw   52
2003 0161 024c          subwf   main__id_index,w
2004                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2005                    ; CASE: true.size=0 && false.size>1
2006                    ; bit_code_emit_helper1: body_code.size=4 true_test=false body_code.delay=0 (non-uniform delay)
2007 0162 1803          btfsc   __c___byte, __c___bit
2008 0163 2968          goto    main__67
2009                    ; line_number = 298
2010                    ; temp := id[id_index]
2011 0164 084c          movf    main__id_index,w
2012 0165 22e6          call    id
2013 0166 00c8          movwf   main__temp
2014                    ; line_number = 299
2015                    ;  id_index := id_index + 1
2016 0167 0acc          incf    main__id_index,f
2017   0168 :   main__67:
2018                    ; Recombine size1 = 0 || size2 = 0
2019                    ; code.delay=4294967295 back_code.delay=4294967295
2020                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
2021                    ; line_number = 297
2022                    ;  if id_index < id.size done
2023                    ; line_number = 300
2024                    ; call byte_put(temp)
2025 0168 0848          movf    main__temp,w
2026 0169 235d          call    byte_put
2027 016a 2976          goto    main__77
2028                    ; line_number = 301
2029                    ; case 5
2030   016b :   main__73:
2031                    ; # ID Reset (Command = 1111 1101):
2032                    ; line_number = 303
2033                    ;  id_index := 0
2034 016b 3000          movlw   0
2035 016c 00cc          movwf   main__id_index
2036 016d 2976          goto    main__77
2037                    ; line_number = 304
2038                    ; case 6
2039   016e :   main__74:
2040                    ; # Glitch Read (Command = 1111 1110):
2041                    ; line_number = 306
2042                    ;  call byte_put(glitch)
2043 016e 084d          movf    main__glitch,w
2044 016f 235d          call    byte_put
2045                    ; line_number = 307
2046                    ;  glitch := 0
2047 0170 3000          movlw   0
2048 0171 00cd          movwf   main__glitch
2049 0172 2976          goto    main__77
2050                    ; line_number = 308
2051                    ; case 7
2052   0173 :   main__75:
2053                    ; # Glitch (Command = 1111 1111):
2054                    ; line_number = 310
2055                    ;  if (glitch != 0xff) start
2056                    ; Left minus Right
2057 0173 0a4d          incf    main__glitch,w
2058                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2059                    ; CASE: true_code.size=0 && false_code.size=1
2060 0174 1d03          btfss   __z___byte, __z___bit
2061                    ; line_number = 311
2062                    ; glitch := glitch + 1
2063 0175 0acd          incf    main__glitch,f
2064            
2065            
2066                    ; Recombine size1 = 0 || size2 = 0
2067                    ; code.delay=4294967295 back_code.delay=4294967295
2068                    ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
2069                    ; line_number = 310
2070                    ;  if (glitch != 0xff) done
2071   0176 :   main__77:
2072                    ; switch end:(data:X0=>X? code:XX=>XX)
2073                    ; line_number = 281
2074                    ;  switch command & 7 done
2075   0176 :   main__84:
2076                    ; switch end:(data:X0=>X? code:XX=>XX)
2077                    ; line_number = 252
2078                    ;  switch (command >> 3) & 7 done
2079   0176 :   main__91:
2080                    ; switch end:(data:X0=>X? code:XX=>XX)
2081                    ; line_number = 129
2082                    ;  switch command >> 6 done
2083                    ; line_number = 124
2084                    ;  loop_forever wrap-up
2085                    ; Need to adjust code banks to match front of loop
2086 0176 1283          bcf     __rp0___byte, __rp0___bit
2087 0177 282a          goto    main__1
2088                    ; line_number = 124
2089                    ;  loop_forever done
2090                    ; delay after procedure statements=non-uniform
2091            
2092            
2093            
2094            
2095                    ; line_number = 314
2096                    ; procedure delay
2097   0178 :   delay:
2098                    ; arguments_none
2099                    ; line_number = 316
2100                    ;  returns_nothing
2101                    ; line_number = 317
2102                    ;  exact_delay delay_instructions
2103            
2104                    ; # Kick the dog:
2105                    ; before procedure statements delay=0, bit states=(data:X0=>X0 code:XX=>XX)
2106                    ; line_number = 320
2107                    ;  watch_dog_reset done
2108                    ; Delay at watch_dog_reset is 0
2109 0178 0064          clrwdt  
2110            
2111            
2112                    ; delay after procedure statements=1
2113                    ; Delay 130 cycles
2114                    ; Delay loop takes 32 * 4 = 128 cycles
2115 0179 3020          movlw   32
2116   017a :   delay__1:
2117 017a 3eff          addlw   255
2118 017b 1d03          btfss   __z___byte, __z___bit
2119 017c 297a          goto    delay__1
2120 017d 297e          goto    delay__2
2121   017e :   delay__2:
2122                    ; Implied return
2123 017e 3400          retlw   0
2124                    ; Final delay = 133
2125            
2126            
2127            
2128            
2129                    ; line_number = 323
2130                    ; procedure xbyte_get
2131   017f :   xbyte_get:
2132                    ; arguments_none
2133                    ; line_number = 325
2134                    ;  returns byte
2135            
2136                    ; # This procedure will wait for a byte to be received from
2137                    ; # serial_in_bit.  It calls the delay procedure for all delays.
2138                    ; # This procedure will keep calling the {delay} routine until
2139                    ; # data is received.  It differs from byte_get() in that it
2140                    ; # calls strobe() instead of delay in the 'wait for start bit'
2141                    ; # loop.
2142            
2143                    ; line_number = 334
2144                    ;  local count byte
2145 0000004f = xbyte_get__count equ shared___globals+47
2146                    ; line_number = 335
2147                    ;  local byte byte
2148 00000050 = xbyte_get__byte equ shared___globals+48
2149            
2150                    ; # Why does the delay procedure wait for a third of bit?  Well, it
2151                    ; # has to do with the loop immediately below.  If we catch the
2152                    ; # start bit at the beginning of a 1/3 bit time, we will be
2153                    ; # sampling data at approximately 1/3 of the way into each bit.
2154                    ; # Conversely, if we catch the start near the end of a 1/3 bit
2155                    ; # bit time, we will be sampling data at approximately 2/3 of the
2156                    ; # way into each bit.  So, what this means is that our bit sample
2157                    ; # times will be somewhere between 1/3 and 2/3 of bit (i.e. in
2158                    ; # the middle of the bit.
2159            
2160                    ; # It would be nice to tweak the code to shorter delay times
2161                    ; # (1/4 bit, 1/5 bit, etc.) but then it gets too hard to get
2162                    ; # the bookeeping done in the delay routine.  A PIC running at
2163                    ; # 4MHz (=1MIPS), only has 138 instructions available for the
2164                    ; # delay routine when at 1/3 of bit.
2165            
2166                    ; # Wait for a start bit:
2167                    ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
2168                    ; line_number = 354
2169                    ;  receiving := 1
2170 017f 145f          bsf     receiving___byte, receiving___bit
2171                    ; line_number = 355
2172                    ;  serial_out := 1
2173 0180 1685          bsf     serial_out___byte, serial_out___bit
2174                    ; line_number = 356
2175                    ;  while serial_in start
2176   0181 :   xbyte_get__1:
2177                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2178                    ; CASE: true_code.size = 0 && false_code.size > 1
2179                    ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
2180 0181 1d85          btfss   serial_in___byte, serial_in___bit
2181 0182 2987          goto    xbyte_get__2
2182                    ; line_number = 357
2183                    ; call strobe()
2184 0183 21a7          call    strobe
2185                    ; # Make sure the IR LED's are turned off:
2186                    ; line_number = 359
2187                    ;  front_ir := 0
2188 0184 1105          bcf     front_ir___byte, front_ir___bit
2189                    ; line_number = 360
2190                    ;  back_ir := 0
2191 0185 1085          bcf     back_ir___byte, back_ir___bit
2192            
2193 0186 2981          goto    xbyte_get__1
2194                    ; Recombine size1 = 0 || size2 = 0
2195   0187 :   xbyte_get__2:
2196                    ; code.delay=4294967295 back_code.delay=4294967295
2197                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2198                    ; line_number = 356
2199                    ;  while serial_in done
2200                    ; # Skip over start bit:
2201                    ; line_number = 363
2202                    ;  delay instructions_per_bit - 2 start
2203                    ; Delay expression evaluates to 414
2204                    ; # There are two instructions of set-up for following loop_exactly:
2205                    ; line_number = 365
2206                    ;  call delay()
2207                    ; Delay at call is 0
2208 0187 2178          call    delay
2209                    ; line_number = 366
2210                    ;  call delay()
2211                    ; Delay at call is 135
2212 0188 2178          call    delay
2213                    ; line_number = 367
2214                    ;  call delay()
2215                    ; Delay at call is 270
2216 0189 2178          call    delay
2217                    ; line_number = 368
2218                    ;  byte := 0
2219                    ; Delay at assignment is 405
2220 018a 3000          movlw   0
2221 018b 00d0          movwf   xbyte_get__byte
2222            
2223                    ; Delay 7 cycles
2224 018c 298d          goto    xbyte_get__3
2225   018d :   xbyte_get__3:
2226 018d 298e          goto    xbyte_get__4
2227   018e :   xbyte_get__4:
2228 018e 298f          goto    xbyte_get__5
2229   018f :   xbyte_get__5:
2230 018f 0000          nop     
2231                    ; line_number = 363
2232                    ;  delay instructions_per_bit - 2 done
2233                    ; # Read in 8 bits of data:
2234                    ; line_number = 371
2235                    ;  loop_exactly 8 start
2236 00000057 = xbyte_get__6 equ shared___globals+55
2237 0190 3008          movlw   8
2238 0191 00d7          movwf   xbyte_get__6
2239   0192 :   xbyte_get__7:
2240                    ; # There are 3 instrucitons of loop_exactly overhead:
2241                    ; line_number = 373
2242                    ;  delay instructions_per_bit - 3 start
2243                    ; Delay expression evaluates to 413
2244                    ; line_number = 374
2245                    ; call delay()
2246                    ; Delay at call is 0
2247 0192 2178          call    delay
2248                    ; line_number = 375
2249                    ;  byte := byte >> 1
2250                    ; Delay at assignment is 135
2251                    ; Assignment of variable to self (no code needed)
2252 0193 0cd0          rrf     xbyte_get__byte,f
2253 0194 13d0          bcf     xbyte_get__byte, 7
2254                    ; line_number = 376
2255                    ;  if serial_in start
2256                    ; Delay at if is 137
2257                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
2258                    ; CASE: True.size=1 False.size=0
2259 0195 1985          btfsc   serial_in___byte, serial_in___bit
2260                    ; line_number = 377
2261                    ; byte@7 := 1
2262                    ; Delay at assignment is 0
2263 00000050 = xbyte_get__select__8___byte equ xbyte_get__byte
2264 00000007 = xbyte_get__select__8___bit equ 7
2265 0196 17d0          bsf     xbyte_get__select__8___byte, xbyte_get__select__8___bit
2266                    ; code.delay=139 back_code.delay=0
2267                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2268                    ; if final true delay=1 false delay=0 code delay=139
2269                    ; line_number = 376
2270                    ;  if serial_in done
2271                    ; line_number = 378
2272                    ; call delay()
2273                    ; Delay at call is 139
2274 0197 2178          call    delay
2275                    ; line_number = 379
2276                    ;  call delay()
2277                    ; Delay at call is 274
2278 0198 2178          call    delay
2279            
2280                    ; Delay 4 cycles
2281 0199 299a          goto    xbyte_get__9
2282   019a :   xbyte_get__9:
2283 019a 299b          goto    xbyte_get__10
2284   019b :   xbyte_get__10:
2285                    ; line_number = 373
2286                    ;  delay instructions_per_bit - 3 done
2287                    ; line_number = 371
2288                    ;  loop_exactly 8 wrap-up
2289 019b 0bd7          decfsz  xbyte_get__6,f
2290 019c 2992          goto    xbyte_get__7
2291                    ; line_number = 371
2292                    ;  loop_exactly 8 done
2293                    ; # Skip over 2/3's of stop bit; 3 cycles for return:
2294                    ; line_number = 382
2295                    ;  delay instructions_per_delay*2 - 3 start
2296                    ; Delay expression evaluates to 273
2297                    ; line_number = 383
2298                    ; call delay()
2299                    ; Delay at call is 0
2300 019d 2178          call    delay
2301                    ; line_number = 384
2302                    ;  call delay()
2303                    ; Delay at call is 135
2304 019e 2178          call    delay
2305                    ; Delay 3 cycles
2306 019f 29a0          goto    xbyte_get__11
2307   01a0 :   xbyte_get__11:
2308 01a0 0000          nop     
2309                    ; line_number = 382
2310                    ;  delay instructions_per_delay*2 - 3 done
2311                    ; line_number = 385
2312                    ; command_previous := command_last
2313 01a1 0845          movf    command_last,w
2314 01a2 00c4          movwf   command_previous
2315                    ; line_number = 386
2316                    ;  command_last := byte
2317 01a3 0850          movf    xbyte_get__byte,w
2318 01a4 00c5          movwf   command_last
2319                    ; line_number = 387
2320                    ;  return byte start
2321                    ; line_number = 387
2322 01a5 0850          movf    xbyte_get__byte,w
2323 01a6 0008          return  
2324                    ; line_number = 387
2325                    ;  return byte done
2326            
2327            
2328                    ; delay after procedure statements=non-uniform
2329            
2330            
2331            
2332            
2333                    ; line_number = 390
2334                    ; procedure strobe
2335   01a7 :   strobe:
2336                    ; arguments_none
2337                    ; line_number = 392
2338                    ;  returns_nothing
2339            
2340                    ; # This procedure is responsible for alternatively strobing the
2341                    ; # two illumination IR LED's.  It first fires one and then the
2342                    ; # other; it never fires both at the same time.
2343            
2344                    ; # This routine is called exclusively from the xbyte_get() routine
2345                    ; # in the "wait for a start bit" routine.  Since this routine
2346                    ; # can take over 4 bit times to perform an entire strobe cycle,
2347                    ; # it is constantly checking serial_in to see if a start bit
2348                    ; # has started.  If so, it immediately stops all activity and
2349                    ; # returns.   Thus, proximity information is only being collected
2350                    ; # when the IRProximity2 brick is waiting for a command *and* no
2351                    ; # command is forthcoming.
2352            
2353                    ; line_number = 407
2354                    ;  local average byte
2355 00000051 = strobe__average equ shared___globals+49
2356                    ; line_number = 408
2357                    ;  local count byte
2358 00000052 = strobe__count equ shared___globals+50
2359                    ; line_number = 409
2360                    ;  local detect byte
2361 00000053 = strobe__detect equ shared___globals+51
2362                    ; line_number = 410
2363                    ;  local front_back bit
2364 0000005f = strobe__front_back___byte equ shared___globals+63
2365 00000006 = strobe__front_back___bit equ 6
2366                    ; line_number = 411
2367                    ;  local illuminate bit
2368 0000005f = strobe__illuminate___byte equ shared___globals+63
2369 00000007 = strobe__illuminate___bit equ 7
2370                    ; line_number = 412
2371                    ;  local index byte
2372 00000054 = strobe__index equ shared___globals+52
2373            
2374                    ; # Kick the dog:
2375                    ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
2376                    ; line_number = 415
2377                    ;  watch_dog_reset done
2378 01a7 0064          clrwdt  
2379            
2380                    ; line_number = 417
2381                    ;  detect := 0
2382 01a8 3000          movlw   0
2383 01a9 00d3          movwf   strobe__detect
2384                    ; line_number = 418
2385                    ;  if front_back start
2386                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2387                    ; CASE: true_code_size > 1 && false_code_size > 1
2388                    ; true_code_size=111 false_code_size=113
2389 01aa 1f5f          btfss   strobe__front_back___byte, strobe__front_back___bit
2390 01ab 2a22          goto    strobe__49
2391                    ; # Next time do the back:
2392                    ; line_number = 420
2393                    ;  front_back := 0
2394 01ac 135f          bcf     strobe__front_back___byte, strobe__front_back___bit
2395            
2396                    ; # Figure out whether or not we turn the IR LED's on
2397                    ; # this time.
2398                    ; line_number = 424
2399                    ;  delay f1 start
2400                    ; Delay expression evaluates to 13
2401                    ; line_number = 425
2402                    ; if !serial_in start
2403                    ; Delay at if is 0
2404                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2405                    ; CASE: true_code.size=0 && false_code.size=1
2406 01ad 1d85          btfss   serial_in___byte, serial_in___bit
2407                    ; line_number = 426
2408                    ; delay_set 1 start
2409                    ; Delay at delay_set is 0
2410                    ; line_number = 427
2411                    ; return start
2412                    ; line_number = 427
2413 01ae 3400          retlw   0
2414                    ; line_number = 427
2415                    ; return done
2416                    ; line_number = 426
2417                    ; delay_set 1 done
2418                    ; code.delay=2 back_code.delay=0
2419                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2420                    ; if final true delay=1 false delay=0 code delay=2
2421                    ; line_number = 425
2422                    ; if !serial_in done
2423                    ; line_number = 428
2424                    ; illuminate := 1
2425                    ; Delay at assignment is 2
2426 01af 17df          bsf     strobe__illuminate___byte, strobe__illuminate___bit
2427                    ; line_number = 429
2428                    ;  if front_count = 0 start
2429                    ; Delay at if is 3
2430                    ; Left minus Right
2431 01b0 083e          movf    front_count,w
2432                    ; (after recombine) true_delay=3, false_delay=2 uniform_delay=true
2433                    ; CASE: true_code_size > 1 && false_code_size > 1
2434                    ; true_code_size=3 false_code_size=2
2435 01b1 1903          btfsc   __z___byte, __z___bit
2436 01b2 29b6          goto    strobe__24
2437                    ; Delay 0 cycles
2438                    ; line_number = 433
2439                    ; front_count := front_count - 1
2440                    ; Delay at assignment is 0
2441 01b3 03be          decf    front_count,f
2442                    ; line_number = 434
2443                    ;  illuminate := 0
2444                    ; Delay at assignment is 1
2445 01b4 13df          bcf     strobe__illuminate___byte, strobe__illuminate___bit
2446 01b5 29b9          goto    strobe__25
2447   01b6 :   strobe__24:
2448                    ; line_number = 430
2449                    ; front_count := front_delay
2450                    ; Delay at assignment is 0
2451 01b6 083f          movf    front_delay,w
2452 01b7 00be          movwf   front_count
2453                    ; line_number = 431
2454                    ;  illuminate := 1
2455                    ; Delay at assignment is 2
2456 01b8 17df          bsf     strobe__illuminate___byte, strobe__illuminate___bit
2457   01b9 :   strobe__25:
2458                    ; code.delay=9 back_code.delay=0
2459                    ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
2460                    ; Uniform delay broke in relation_code_emit
2461                    ; if final true delay=3 false delay=2 code delay=9
2462                    ; line_number = 429
2463                    ;  if front_count = 0 done
2464                    ; line_number = 435
2465                    ; if !front_enable start
2466                    ; Delay at if is 9
2467                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2468                    ; CASE: true_code.size=0 && false_code.size=1
2469 01b9 1edf          btfss   front_enable___byte, front_enable___bit
2470                    ; line_number = 436
2471                    ; illuminate := 0
2472                    ; Delay at assignment is 0
2473 01ba 13df          bcf     strobe__illuminate___byte, strobe__illuminate___bit
2474            
2475                    ; code.delay=11 back_code.delay=0
2476                    ; <=bit_code_emit@symbol; sym=front_enable (data:X0=>X0 code:XX=>XX)
2477                    ; if final true delay=1 false delay=0 code delay=11
2478                    ; line_number = 435
2479                    ; if !front_enable done
2480                    ; Delay 2 cycles
2481 01bb 29bc          goto    strobe__26
2482   01bc :   strobe__26:
2483                    ; line_number = 424
2484                    ;  delay f1 done
2485                    ; line_number = 438
2486                    ; if illuminate start
2487                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2488                    ; CASE: true_code.size = 0 && false_code.size > 1
2489                    ; bit_code_emit_helper1: body_code.size=93 true_test=true body_code.delay=0 (non-uniform delay)
2490 01bc 1fdf          btfss   strobe__illuminate___byte, strobe__illuminate___bit
2491 01bd 2a21          goto    strobe__48
2492                    ; # We've decided to illuminate.  Generate 22 pulses of
2493                    ; # IR light on the front IR LED at 38kHz.
2494                    ; line_number = 441
2495                    ;  loop_exactly 22 start
2496 00000058 = strobe__27 equ shared___globals+56
2497 01be 3016          movlw   22
2498 01bf 00d8          movwf   strobe__27
2499   01c0 :   strobe__28:
2500                    ; line_number = 442
2501                    ; delay f1 start
2502                    ; Delay expression evaluates to 13
2503                    ; line_number = 443
2504                    ; front_ir := 1
2505                    ; Delay at assignment is 0
2506 01c0 1505          bsf     front_ir___byte, front_ir___bit
2507                    ; line_number = 444
2508                    ;  if !serial_in start
2509                    ; Delay at if is 1
2510                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2511                    ; CASE: true_code.size=0 && false_code.size=1
2512 01c1 1d85          btfss   serial_in___byte, serial_in___bit
2513                    ; line_number = 445
2514                    ; delay_set 1 start
2515                    ; Delay at delay_set is 0
2516                    ; line_number = 446
2517                    ; return start
2518                    ; line_number = 446
2519 01c2 3400          retlw   0
2520                    ; line_number = 446
2521                    ; return done
2522                    ; line_number = 445
2523                    ; delay_set 1 done
2524                    ; code.delay=3 back_code.delay=0
2525                    ; <=bit_code_emit@symbol; sym=serial_in (data:XX=>X0 code:XX=>XX)
2526                    ; if final true delay=1 false delay=0 code delay=3
2527                    ; line_number = 444
2528                    ;  if !serial_in done
2529                    ; line_number = 447
2530                    ; if !ir_sense start
2531                    ; Delay at if is 3
2532                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2533                    ; CASE: true_code.size=0 && false_code.size=1
2534 01c3 1e05          btfss   ir_sense___byte, ir_sense___bit
2535                    ; line_number = 448
2536                    ; detect := detect + 1
2537                    ; Delay at assignment is 0
2538 01c4 0ad3          incf    strobe__detect,f
2539                    ; code.delay=5 back_code.delay=0
2540                    ; <=bit_code_emit@symbol; sym=ir_sense (data:XX=>X0 code:XX=>XX)
2541                    ; if final true delay=1 false delay=0 code delay=5
2542                    ; line_number = 447
2543                    ; if !ir_sense done
2544                    ; Delay 8 cycles
2545                    ; Delay loop takes 2 * 4 = 8 cycles
2546 01c5 3002          movlw   2
2547   01c6 :   strobe__29:
2548 01c6 3eff          addlw   255
2549 01c7 1d03          btfss   __z___byte, __z___bit
2550 01c8 29c6          goto    strobe__29
2551                    ; line_number = 442
2552                    ; delay f1 done
2553                    ; line_number = 449
2554                    ; delay f2 - 3 start
2555                    ; Delay expression evaluates to 10
2556                    ; line_number = 450
2557                    ; front_ir := 0
2558                    ; Delay at assignment is 0
2559 01c9 1105          bcf     front_ir___byte, front_ir___bit
2560                    ; line_number = 451
2561                    ;  if !serial_in start
2562                    ; Delay at if is 1
2563                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2564                    ; CASE: true_code.size=0 && false_code.size=1
2565 01ca 1d85          btfss   serial_in___byte, serial_in___bit
2566                    ; line_number = 452
2567                    ; delay_set 1 start
2568                    ; Delay at delay_set is 0
2569                    ; line_number = 453
2570                    ; return start
2571                    ; line_number = 453
2572 01cb 3400          retlw   0
2573                    ; line_number = 453
2574                    ; return done
2575                    ; line_number = 452
2576                    ; delay_set 1 done
2577                    ; code.delay=3 back_code.delay=0
2578                    ; <=bit_code_emit@symbol; sym=serial_in (data:XX=>X0 code:XX=>XX)
2579                    ; if final true delay=1 false delay=0 code delay=3
2580                    ; line_number = 451
2581                    ;  if !serial_in done
2582                    ; line_number = 454
2583                    ; if !ir_sense start
2584                    ; Delay at if is 3
2585                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2586                    ; CASE: true_code.size=0 && false_code.size=1
2587 01cc 1e05          btfss   ir_sense___byte, ir_sense___bit
2588                    ; line_number = 455
2589                    ; detect := detect + 1
2590                    ; Delay at assignment is 0
2591 01cd 0ad3          incf    strobe__detect,f
2592            
2593                    ; code.delay=5 back_code.delay=0
2594                    ; <=bit_code_emit@symbol; sym=ir_sense (data:XX=>X0 code:XX=>XX)
2595                    ; if final true delay=1 false delay=0 code delay=5
2596                    ; line_number = 454
2597                    ; if !ir_sense done
2598                    ; Delay 5 cycles
2599 01ce 29cf          goto    strobe__30
2600   01cf :   strobe__30:
2601 01cf 29d0          goto    strobe__31
2602   01d0 :   strobe__31:
2603 01d0 0000          nop     
2604                    ; line_number = 449
2605                    ; delay f2 - 3 done
2606                    ; line_number = 441
2607                    ;  loop_exactly 22 wrap-up
2608 01d1 0bd8          decfsz  strobe__27,f
2609 01d2 29c0          goto    strobe__28
2610                    ; line_number = 441
2611                    ;  loop_exactly 22 done
2612                    ; # Now wait for twice that amount of time for the
2613                    ; # the sensor to calm down.  Test every half wave
2614                    ; # length though:
2615                    ; line_number = 460
2616                    ;  front_ir := 0
2617 01d3 1105          bcf     front_ir___byte, front_ir___bit
2618                    ; line_number = 461
2619                    ;  loop_exactly 44 start
2620 00000058 = strobe__32 equ shared___globals+56
2621 01d4 302c          movlw   44
2622 01d5 00d8          movwf   strobe__32
2623   01d6 :   strobe__33:
2624                    ; line_number = 462
2625                    ; delay f1 start
2626                    ; Delay expression evaluates to 13
2627                    ; line_number = 463
2628                    ; if !serial_in start
2629                    ; Delay at if is 0
2630                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2631                    ; CASE: true_code.size=0 && false_code.size=1
2632 01d6 1d85          btfss   serial_in___byte, serial_in___bit
2633                    ; line_number = 464
2634                    ; delay_set 1 start
2635                    ; Delay at delay_set is 0
2636                    ; line_number = 465
2637                    ; return start
2638                    ; line_number = 465
2639 01d7 3400          retlw   0
2640                    ; line_number = 465
2641                    ; return done
2642                    ; line_number = 464
2643                    ; delay_set 1 done
2644                    ; code.delay=2 back_code.delay=0
2645                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2646                    ; if final true delay=1 false delay=0 code delay=2
2647                    ; line_number = 463
2648                    ; if !serial_in done
2649                    ; line_number = 466
2650                    ; if !ir_sense start
2651                    ; Delay at if is 2
2652                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2653                    ; CASE: true_code.size=0 && false_code.size=1
2654 01d8 1e05          btfss   ir_sense___byte, ir_sense___bit
2655                    ; line_number = 467
2656                    ; detect := detect + 1
2657                    ; Delay at assignment is 0
2658 01d9 0ad3          incf    strobe__detect,f
2659                    ; code.delay=4 back_code.delay=0
2660                    ; <=bit_code_emit@symbol; sym=ir_sense (data:X0=>X0 code:XX=>XX)
2661                    ; if final true delay=1 false delay=0 code delay=4
2662                    ; line_number = 466
2663                    ; if !ir_sense done
2664                    ; Delay 9 cycles
2665                    ; Delay loop takes 2 * 4 = 8 cycles
2666 01da 3002          movlw   2
2667   01db :   strobe__34:
2668 01db 3eff          addlw   255
2669 01dc 1d03          btfss   __z___byte, __z___bit
2670 01dd 29db          goto    strobe__34
2671 01de 0000          nop     
2672                    ; line_number = 462
2673                    ; delay f1 done
2674                    ; line_number = 468
2675                    ; delay f2 - 3 start
2676                    ; Delay expression evaluates to 10
2677                    ; line_number = 469
2678                    ; if !serial_in start
2679                    ; Delay at if is 0
2680                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2681                    ; CASE: true_code.size=0 && false_code.size=1
2682 01df 1d85          btfss   serial_in___byte, serial_in___bit
2683                    ; line_number = 470
2684                    ; delay_set 1 start
2685                    ; Delay at delay_set is 0
2686                    ; line_number = 471
2687                    ; return start
2688                    ; line_number = 471
2689 01e0 3400          retlw   0
2690                    ; line_number = 471
2691                    ; return done
2692                    ; line_number = 470
2693                    ; delay_set 1 done
2694                    ; code.delay=2 back_code.delay=0
2695                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2696                    ; if final true delay=1 false delay=0 code delay=2
2697                    ; line_number = 469
2698                    ; if !serial_in done
2699                    ; line_number = 472
2700                    ; if !ir_sense start
2701                    ; Delay at if is 2
2702                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2703                    ; CASE: true_code.size=0 && false_code.size=1
2704 01e1 1e05          btfss   ir_sense___byte, ir_sense___bit
2705                    ; line_number = 473
2706                    ; detect := detect + 1
2707                    ; Delay at assignment is 0
2708 01e2 0ad3          incf    strobe__detect,f
2709            
2710                    ; code.delay=4 back_code.delay=0
2711                    ; <=bit_code_emit@symbol; sym=ir_sense (data:X0=>X0 code:XX=>XX)
2712                    ; if final true delay=1 false delay=0 code delay=4
2713                    ; line_number = 472
2714                    ; if !ir_sense done
2715                    ; Delay 6 cycles
2716 01e3 29e4          goto    strobe__35
2717   01e4 :   strobe__35:
2718 01e4 29e5          goto    strobe__36
2719   01e5 :   strobe__36:
2720 01e5 29e6          goto    strobe__37
2721   01e6 :   strobe__37:
2722                    ; line_number = 468
2723                    ; delay f2 - 3 done
2724                    ; line_number = 461
2725                    ;  loop_exactly 44 wrap-up
2726 01e6 0bd8          decfsz  strobe__32,f
2727 01e7 29d6          goto    strobe__33
2728                    ; line_number = 461
2729                    ;  loop_exactly 44 done
2730                    ; # Now do follow on processing of the signal.
2731                    ; line_number = 476
2732                    ;  delay f1 start
2733                    ; Delay expression evaluates to 13
2734                    ; # First, clip the signal to 0x3f:
2735                    ; line_number = 478
2736                    ;  if !serial_in start
2737                    ; Delay at if is 0
2738                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2739                    ; CASE: true_code.size=0 && false_code.size=1
2740 01e8 1d85          btfss   serial_in___byte, serial_in___bit
2741                    ; line_number = 479
2742                    ; delay_set 1 start
2743                    ; Delay at delay_set is 0
2744                    ; line_number = 480
2745                    ; return start
2746                    ; line_number = 480
2747 01e9 3400          retlw   0
2748                    ; line_number = 480
2749                    ; return done
2750            
2751                    ; line_number = 479
2752                    ; delay_set 1 done
2753                    ; code.delay=2 back_code.delay=0
2754                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2755                    ; if final true delay=1 false delay=0 code delay=2
2756                    ; line_number = 478
2757                    ;  if !serial_in done
2758                    ; # The largest possible value is 22 + 44 = 66.
2759                    ; # Any values over 63 need to be truncated to 63:
2760                    ; line_number = 484
2761                    ;  if detect@6 start
2762                    ; Delay at if is 2
2763 00000053 = strobe__select__38___byte equ strobe__detect
2764 00000006 = strobe__select__38___bit equ 6
2765                    ; (after recombine) true_delay=2, false_delay=0 uniform_delay=true
2766                    ; CASE: true_code.size = 0 && false_code.size > 1
2767                    ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=2 (uniform delay)
2768 01ea 1b53          btfsc   strobe__select__38___byte, strobe__select__38___bit
2769 01eb 29ee          goto    strobe__39
2770                    ; Delay 1 cycles
2771 01ec 0000          nop     
2772 01ed 29f0          goto    strobe__40
2773   01ee :   strobe__39:
2774                    ; line_number = 485
2775                    ; detect := 0x3f
2776                    ; Delay at assignment is 0
2777 01ee 303f          movlw   63
2778 01ef 00d3          movwf   strobe__detect
2779   01f0 :   strobe__40:
2780                    ; code.delay=7 back_code.delay=0
2781                    ; <=bit_code_emit@symbol; sym=strobe__select__38 (data:X0=>X0 code:XX=>XX)
2782                    ; if final true delay=2 false delay=0 code delay=7
2783                    ; line_number = 484
2784                    ;  if detect@6 done
2785                    ; line_number = 486
2786                    ; front_last := detect
2787                    ; Delay at assignment is 7
2788 01f0 0853          movf    strobe__detect,w
2789 01f1 00c2          movwf   front_last
2790                    ; Delay 4 cycles
2791 01f2 29f3          goto    strobe__41
2792   01f3 :   strobe__41:
2793 01f3 29f4          goto    strobe__42
2794   01f4 :   strobe__42:
2795                    ; line_number = 476
2796                    ;  delay f1 done
2797                    ; line_number = 487
2798                    ; delay f1 start
2799                    ; Delay expression evaluates to 13
2800                    ; # Drop the detected value into the averaging buffer:	
2801                    ; line_number = 489
2802                    ;  if !serial_in start
2803                    ; Delay at if is 0
2804                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2805                    ; CASE: true_code.size=0 && false_code.size=1
2806 01f4 1d85          btfss   serial_in___byte, serial_in___bit
2807                    ; line_number = 490
2808                    ; delay_set 1 start
2809                    ; Delay at delay_set is 0
2810                    ; line_number = 491
2811                    ; return start
2812                    ; line_number = 491
2813 01f5 3400          retlw   0
2814                    ; line_number = 491
2815                    ; return done
2816                    ; line_number = 490
2817                    ; delay_set 1 done
2818                    ; code.delay=2 back_code.delay=0
2819                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2820                    ; if final true delay=1 false delay=0 code delay=2
2821                    ; line_number = 489
2822                    ;  if !serial_in done
2823                    ; line_number = 492
2824                    ; front_index := front_index + 1
2825                    ; Delay at assignment is 2
2826 01f6 0ac1          incf    front_index,f
2827                    ; line_number = 493
2828                    ;  front_index@buffer_power := 0
2829                    ; Delay at assignment is 3
2830 00000041 = strobe__select__43___byte equ front_index
2831 00000003 = strobe__select__43___bit equ 3
2832 01f7 11c1          bcf     strobe__select__43___byte, strobe__select__43___bit
2833                    ; line_number = 494
2834                    ;  fronts[front_index] := detect >> 1
2835                    ; Delay at assignment is 4
2836                    ; index_fsr_first
2837 01f8 0841          movf    front_index,w
2838 01f9 3e35          addlw   fronts
2839 01fa 0084          movwf   __fsr
2840 01fb 0c53          rrf     strobe__detect,w
2841 01fc 0080          movwf   __indf
2842 01fd 1380          bcf     __indf, 7
2843                    ; Delay 3 cycles
2844 01fe 29ff          goto    strobe__44
2845   01ff :   strobe__44:
2846 01ff 0000          nop     
2847                    ; line_number = 487
2848                    ; delay f1 done
2849                    ; line_number = 495
2850                    ; average := 0
2851 0200 3000          movlw   0
2852 0201 00d1          movwf   strobe__average
2853                    ; line_number = 496
2854                    ;  index := 0
2855 0202 3000          movlw   0
2856 0203 00d4          movwf   strobe__index
2857                    ; line_number = 497
2858                    ;  loop_exactly buffer_size start
2859 00000058 = strobe__45 equ shared___globals+56
2860 0204 3008          movlw   8
2861 0205 00d8          movwf   strobe__45
2862   0206 :   strobe__46:
2863                    ; line_number = 498
2864                    ; delay f2 - 3 start
2865                    ; Delay expression evaluates to 10
2866                    ; line_number = 499
2867                    ; if !serial_in start
2868                    ; Delay at if is 0
2869                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2870                    ; CASE: true_code.size=0 && false_code.size=1
2871 0206 1d85          btfss   serial_in___byte, serial_in___bit
2872                    ; line_number = 500
2873                    ; delay_set 1 start
2874                    ; Delay at delay_set is 0
2875                    ; line_number = 501
2876                    ; return start
2877                    ; line_number = 501
2878 0207 3400          retlw   0
2879                    ; line_number = 501
2880                    ; return done
2881                    ; line_number = 500
2882                    ; delay_set 1 done
2883                    ; code.delay=2 back_code.delay=0
2884                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2885                    ; if final true delay=1 false delay=0 code delay=2
2886                    ; line_number = 499
2887                    ; if !serial_in done
2888                    ; line_number = 502
2889                    ; average := average + fronts[index]
2890                    ; Delay at assignment is 2
2891 0208 0854          movf    strobe__index,w
2892 0209 3e35          addlw   fronts
2893 020a 0084          movwf   __fsr
2894 020b 0800          movf    __indf,w
2895 020c 07d1          addwf   strobe__average,f
2896                    ; Delay 3 cycles
2897 020d 2a0e          goto    strobe__47
2898   020e :   strobe__47:
2899 020e 0000          nop     
2900                    ; line_number = 498
2901                    ; delay f2 - 3 done
2902                    ; line_number = 497
2903                    ;  loop_exactly buffer_size wrap-up
2904 020f 0bd8          decfsz  strobe__45,f
2905 0210 2a06          goto    strobe__46
2906                    ; line_number = 497
2907                    ;  loop_exactly buffer_size done
2908                    ; line_number = 503
2909                    ; front_average := average
2910 0211 0851          movf    strobe__average,w
2911 0212 00bd          movwf   front_average
2912                    ; line_number = 504
2913                    ;  delay f1 + 1 start
2914                    ; Delay expression evaluates to 14
2915                    ; line_number = 505
2916                    ; if !serial_in start
2917                    ; Delay at if is 0
2918                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
2919                    ; CASE: true_code.size=0 && false_code.size=1
2920 0213 1d85          btfss   serial_in___byte, serial_in___bit
2921                    ; line_number = 506
2922                    ; delay_set 1 start
2923                    ; Delay at delay_set is 0
2924                    ; line_number = 507
2925                    ; return start
2926                    ; line_number = 507
2927 0214 3400          retlw   0
2928                    ; line_number = 507
2929                    ; return done
2930                    ; line_number = 506
2931                    ; delay_set 1 done
2932                    ; code.delay=2 back_code.delay=0
2933                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
2934                    ; if final true delay=1 false delay=0 code delay=2
2935                    ; line_number = 505
2936                    ; if !serial_in done
2937                    ; line_number = 508
2938                    ; if front_average >= front_far start
2939                    ; Delay at if is 2
2940 0215 0840          movf    front_far,w
2941 0216 023d          subwf   front_average,w
2942                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
2943                    ; CASE: true_size=1 && false_size=1
2944                    ; SUBCASE: Double test; true, then false
2945 0217 1803          btfsc   __c___byte, __c___bit
2946                    ; line_number = 509
2947                    ; front_led0 := 0
2948                    ; Delay at assignment is 0
2949 0218 1087          bcf     front_led0___byte, front_led0___bit
2950 0219 1c03          btfss   __c___byte, __c___bit
2951                    ; line_number = 511
2952                    ; front_led0 := 1
2953                    ; Delay at assignment is 0
2954 021a 1487          bsf     front_led0___byte, front_led0___bit
2955                    ; code.delay=8 back_code.delay=0
2956                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
2957                    ; Uniform delay broke in relation_code_emit
2958                    ; if final true delay=1 false delay=1 code delay=8
2959                    ; line_number = 508
2960                    ; if front_average >= front_far done
2961                    ; line_number = 512
2962                    ; if front_average >= front_near start
2963                    ; Delay at if is 8
2964 021b 0843          movf    front_near,w
2965 021c 023d          subwf   front_average,w
2966                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
2967                    ; CASE: true_size=1 && false_size=1
2968                    ; SUBCASE: Double test; true, then false
2969 021d 1803          btfsc   __c___byte, __c___bit
2970                    ; line_number = 513
2971                    ; front_led1 := 0
2972                    ; Delay at assignment is 0
2973 021e 1207          bcf     front_led1___byte, front_led1___bit
2974 021f 1c03          btfss   __c___byte, __c___bit
2975                    ; line_number = 515
2976                    ; front_led1 := 1
2977                    ; Delay at assignment is 0
2978 0220 1607          bsf     front_led1___byte, front_led1___bit
2979                    ; code.delay=14 back_code.delay=0
2980                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
2981                    ; Uniform delay broke in relation_code_emit
2982                    ; if final true delay=1 false delay=1 code delay=14
2983                    ; line_number = 512
2984                    ; if front_average >= front_near done
2985                    ; line_number = 504
2986                    ;  delay f1 + 1 done
2987                    ; Recombine size1 = 0 || size2 = 0
2988   0221 :   strobe__48:
2989                    ; code.delay=4294967295 back_code.delay=4294967295
2990                    ; <=bit_code_emit@symbol; sym=strobe__illuminate (data:XX=>X0 code:XX=>XX)
2991                    ; line_number = 438
2992                    ; if illuminate done
2993 0221 2a99          goto    strobe__50
2994   0222 :   strobe__49:
2995                    ; # This time do the back sensor; next time do front:
2996                    ; line_number = 518
2997                    ;  front_back := 1
2998 0222 175f          bsf     strobe__front_back___byte, strobe__front_back___bit
2999            
3000                    ; # Figure out whether or not we turn the IR LED's on
3001                    ; # this time.
3002                    ; line_number = 522
3003                    ;  delay f1 start
3004                    ; Delay expression evaluates to 13
3005                    ; line_number = 523
3006                    ; if !serial_in start
3007                    ; Delay at if is 0
3008                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3009                    ; CASE: true_code.size=0 && false_code.size=1
3010 0223 1d85          btfss   serial_in___byte, serial_in___bit
3011                    ; line_number = 524
3012                    ; delay_set 1 start
3013                    ; Delay at delay_set is 0
3014                    ; line_number = 525
3015                    ; return start
3016                    ; line_number = 525
3017 0224 3400          retlw   0
3018                    ; line_number = 525
3019                    ; return done
3020                    ; line_number = 524
3021                    ; delay_set 1 done
3022                    ; code.delay=2 back_code.delay=0
3023                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3024                    ; if final true delay=1 false delay=0 code delay=2
3025                    ; line_number = 523
3026                    ; if !serial_in done
3027                    ; line_number = 526
3028                    ; illuminate := 1
3029                    ; Delay at assignment is 2
3030 0225 17df          bsf     strobe__illuminate___byte, strobe__illuminate___bit
3031                    ; line_number = 527
3032                    ;  if back_count = 0 start
3033                    ; Delay at if is 3
3034                    ; Left minus Right
3035 0226 082e          movf    back_count,w
3036                    ; (after recombine) true_delay=3, false_delay=2 uniform_delay=true
3037                    ; CASE: true_code_size > 1 && false_code_size > 1
3038                    ; true_code_size=3 false_code_size=2
3039 0227 1903          btfsc   __z___byte, __z___bit
3040 0228 2a2c          goto    strobe__1
3041                    ; Delay 0 cycles
3042                    ; line_number = 531
3043                    ; back_count := back_count - 1
3044                    ; Delay at assignment is 0
3045 0229 03ae          decf    back_count,f
3046                    ; line_number = 532
3047                    ;  illuminate := 0
3048                    ; Delay at assignment is 1
3049 022a 13df          bcf     strobe__illuminate___byte, strobe__illuminate___bit
3050 022b 2a2f          goto    strobe__2
3051   022c :   strobe__1:
3052                    ; line_number = 528
3053                    ; back_count := back_delay
3054                    ; Delay at assignment is 0
3055 022c 082f          movf    back_delay,w
3056 022d 00ae          movwf   back_count
3057                    ; line_number = 529
3058                    ;  illuminate := 1
3059                    ; Delay at assignment is 2
3060 022e 17df          bsf     strobe__illuminate___byte, strobe__illuminate___bit
3061   022f :   strobe__2:
3062                    ; code.delay=9 back_code.delay=0
3063                    ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
3064                    ; Uniform delay broke in relation_code_emit
3065                    ; if final true delay=3 false delay=2 code delay=9
3066                    ; line_number = 527
3067                    ;  if back_count = 0 done
3068                    ; line_number = 533
3069                    ; if !back_enable start
3070                    ; Delay at if is 9
3071                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3072                    ; CASE: true_code.size=0 && false_code.size=1
3073 022f 1e5f          btfss   back_enable___byte, back_enable___bit
3074                    ; line_number = 534
3075                    ; illuminate := 0
3076                    ; Delay at assignment is 0
3077 0230 13df          bcf     strobe__illuminate___byte, strobe__illuminate___bit
3078            
3079                    ; code.delay=11 back_code.delay=0
3080                    ; <=bit_code_emit@symbol; sym=back_enable (data:X0=>X0 code:XX=>XX)
3081                    ; if final true delay=1 false delay=0 code delay=11
3082                    ; line_number = 533
3083                    ; if !back_enable done
3084                    ; Delay 2 cycles
3085 0231 2a32          goto    strobe__3
3086   0232 :   strobe__3:
3087                    ; line_number = 522
3088                    ;  delay f1 done
3089                    ; line_number = 536
3090                    ; if illuminate start
3091                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
3092                    ; CASE: true_code.size = 0 && false_code.size > 1
3093                    ; bit_code_emit_helper1: body_code.size=95 true_test=true body_code.delay=0 (non-uniform delay)
3094 0232 1fdf          btfss   strobe__illuminate___byte, strobe__illuminate___bit
3095 0233 2a99          goto    strobe__23
3096                    ; # We've decided to illuminate.  Generate 22 pulses of
3097                    ; # IR light on the back IR LED at 38kHz.
3098                    ; line_number = 539
3099                    ;  loop_exactly 22 start
3100 00000058 = strobe__4 equ shared___globals+56
3101 0234 3016          movlw   22
3102 0235 00d8          movwf   strobe__4
3103   0236 :   strobe__5:
3104                    ; line_number = 540
3105                    ; delay f1 start
3106                    ; Delay expression evaluates to 13
3107                    ; line_number = 541
3108                    ; back_ir := 1
3109                    ; Delay at assignment is 0
3110 0236 1485          bsf     back_ir___byte, back_ir___bit
3111                    ; line_number = 542
3112                    ;  if !serial_in start
3113                    ; Delay at if is 1
3114                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3115                    ; CASE: true_code.size=0 && false_code.size=1
3116 0237 1d85          btfss   serial_in___byte, serial_in___bit
3117                    ; line_number = 543
3118                    ; delay_set 1 start
3119                    ; Delay at delay_set is 0
3120                    ; line_number = 544
3121                    ; return start
3122                    ; line_number = 544
3123 0238 3400          retlw   0
3124                    ; line_number = 544
3125                    ; return done
3126                    ; line_number = 543
3127                    ; delay_set 1 done
3128                    ; code.delay=3 back_code.delay=0
3129                    ; <=bit_code_emit@symbol; sym=serial_in (data:XX=>X0 code:XX=>XX)
3130                    ; if final true delay=1 false delay=0 code delay=3
3131                    ; line_number = 542
3132                    ;  if !serial_in done
3133                    ; line_number = 545
3134                    ; if !ir_sense start
3135                    ; Delay at if is 3
3136                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3137                    ; CASE: true_code.size=0 && false_code.size=1
3138 0239 1e05          btfss   ir_sense___byte, ir_sense___bit
3139                    ; line_number = 546
3140                    ; detect := detect + 1
3141                    ; Delay at assignment is 0
3142 023a 0ad3          incf    strobe__detect,f
3143                    ; code.delay=5 back_code.delay=0
3144                    ; <=bit_code_emit@symbol; sym=ir_sense (data:XX=>X0 code:XX=>XX)
3145                    ; if final true delay=1 false delay=0 code delay=5
3146                    ; line_number = 545
3147                    ; if !ir_sense done
3148                    ; Delay 8 cycles
3149                    ; Delay loop takes 2 * 4 = 8 cycles
3150 023b 3002          movlw   2
3151   023c :   strobe__6:
3152 023c 3eff          addlw   255
3153 023d 1d03          btfss   __z___byte, __z___bit
3154 023e 2a3c          goto    strobe__6
3155                    ; line_number = 540
3156                    ; delay f1 done
3157                    ; line_number = 547
3158                    ; delay f2 - 3 start
3159                    ; Delay expression evaluates to 10
3160                    ; line_number = 548
3161                    ; back_ir := 0
3162                    ; Delay at assignment is 0
3163 023f 1085          bcf     back_ir___byte, back_ir___bit
3164                    ; line_number = 549
3165                    ;  if !serial_in start
3166                    ; Delay at if is 1
3167                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3168                    ; CASE: true_code.size=0 && false_code.size=1
3169 0240 1d85          btfss   serial_in___byte, serial_in___bit
3170                    ; line_number = 550
3171                    ; delay_set 1 start
3172                    ; Delay at delay_set is 0
3173                    ; line_number = 551
3174                    ; return start
3175                    ; line_number = 551
3176 0241 3400          retlw   0
3177                    ; line_number = 551
3178                    ; return done
3179                    ; line_number = 550
3180                    ; delay_set 1 done
3181                    ; code.delay=3 back_code.delay=0
3182                    ; <=bit_code_emit@symbol; sym=serial_in (data:XX=>X0 code:XX=>XX)
3183                    ; if final true delay=1 false delay=0 code delay=3
3184                    ; line_number = 549
3185                    ;  if !serial_in done
3186                    ; line_number = 552
3187                    ; if !ir_sense start
3188                    ; Delay at if is 3
3189                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3190                    ; CASE: true_code.size=0 && false_code.size=1
3191 0242 1e05          btfss   ir_sense___byte, ir_sense___bit
3192                    ; line_number = 553
3193                    ; detect := detect + 1
3194                    ; Delay at assignment is 0
3195 0243 0ad3          incf    strobe__detect,f
3196            
3197                    ; code.delay=5 back_code.delay=0
3198                    ; <=bit_code_emit@symbol; sym=ir_sense (data:XX=>X0 code:XX=>XX)
3199                    ; if final true delay=1 false delay=0 code delay=5
3200                    ; line_number = 552
3201                    ; if !ir_sense done
3202                    ; Delay 5 cycles
3203 0244 2a45          goto    strobe__7
3204   0245 :   strobe__7:
3205 0245 2a46          goto    strobe__8
3206   0246 :   strobe__8:
3207 0246 0000          nop     
3208                    ; line_number = 547
3209                    ; delay f2 - 3 done
3210                    ; line_number = 539
3211                    ;  loop_exactly 22 wrap-up
3212 0247 0bd8          decfsz  strobe__4,f
3213 0248 2a36          goto    strobe__5
3214                    ; line_number = 539
3215                    ;  loop_exactly 22 done
3216                    ; # Now wait for twice that amount of time for the
3217                    ; # the sensor to calm down.  Test every half wave
3218                    ; # length though:
3219                    ; line_number = 558
3220                    ;  back_ir := 0
3221 0249 1085          bcf     back_ir___byte, back_ir___bit
3222                    ; line_number = 559
3223                    ;  loop_exactly 44 start
3224 00000058 = strobe__9 equ shared___globals+56
3225 024a 302c          movlw   44
3226 024b 00d8          movwf   strobe__9
3227   024c :   strobe__10:
3228                    ; line_number = 560
3229                    ; delay f1 start
3230                    ; Delay expression evaluates to 13
3231                    ; line_number = 561
3232                    ; if !serial_in start
3233                    ; Delay at if is 0
3234                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3235                    ; CASE: true_code.size=0 && false_code.size=1
3236 024c 1d85          btfss   serial_in___byte, serial_in___bit
3237                    ; line_number = 562
3238                    ; delay_set 1 start
3239                    ; Delay at delay_set is 0
3240                    ; line_number = 563
3241                    ; return start
3242                    ; line_number = 563
3243 024d 3400          retlw   0
3244                    ; line_number = 563
3245                    ; return done
3246                    ; line_number = 562
3247                    ; delay_set 1 done
3248                    ; code.delay=2 back_code.delay=0
3249                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3250                    ; if final true delay=1 false delay=0 code delay=2
3251                    ; line_number = 561
3252                    ; if !serial_in done
3253                    ; line_number = 564
3254                    ; if !ir_sense start
3255                    ; Delay at if is 2
3256                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3257                    ; CASE: true_code.size=0 && false_code.size=1
3258 024e 1e05          btfss   ir_sense___byte, ir_sense___bit
3259                    ; line_number = 565
3260                    ; detect := detect + 1
3261                    ; Delay at assignment is 0
3262 024f 0ad3          incf    strobe__detect,f
3263                    ; code.delay=4 back_code.delay=0
3264                    ; <=bit_code_emit@symbol; sym=ir_sense (data:X0=>X0 code:XX=>XX)
3265                    ; if final true delay=1 false delay=0 code delay=4
3266                    ; line_number = 564
3267                    ; if !ir_sense done
3268                    ; Delay 9 cycles
3269                    ; Delay loop takes 2 * 4 = 8 cycles
3270 0250 3002          movlw   2
3271   0251 :   strobe__11:
3272 0251 3eff          addlw   255
3273 0252 1d03          btfss   __z___byte, __z___bit
3274 0253 2a51          goto    strobe__11
3275 0254 0000          nop     
3276                    ; line_number = 560
3277                    ; delay f1 done
3278                    ; line_number = 566
3279                    ; delay f2 - 3 start
3280                    ; Delay expression evaluates to 10
3281                    ; line_number = 567
3282                    ; if !serial_in start
3283                    ; Delay at if is 0
3284                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3285                    ; CASE: true_code.size=0 && false_code.size=1
3286 0255 1d85          btfss   serial_in___byte, serial_in___bit
3287                    ; line_number = 568
3288                    ; delay_set 1 start
3289                    ; Delay at delay_set is 0
3290                    ; line_number = 569
3291                    ; return start
3292                    ; line_number = 569
3293 0256 3400          retlw   0
3294                    ; line_number = 569
3295                    ; return done
3296                    ; line_number = 568
3297                    ; delay_set 1 done
3298                    ; code.delay=2 back_code.delay=0
3299                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3300                    ; if final true delay=1 false delay=0 code delay=2
3301                    ; line_number = 567
3302                    ; if !serial_in done
3303                    ; line_number = 570
3304                    ; if !ir_sense start
3305                    ; Delay at if is 2
3306                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3307                    ; CASE: true_code.size=0 && false_code.size=1
3308 0257 1e05          btfss   ir_sense___byte, ir_sense___bit
3309                    ; line_number = 571
3310                    ; detect := detect + 1
3311                    ; Delay at assignment is 0
3312 0258 0ad3          incf    strobe__detect,f
3313            
3314                    ; code.delay=4 back_code.delay=0
3315                    ; <=bit_code_emit@symbol; sym=ir_sense (data:X0=>X0 code:XX=>XX)
3316                    ; if final true delay=1 false delay=0 code delay=4
3317                    ; line_number = 570
3318                    ; if !ir_sense done
3319                    ; Delay 6 cycles
3320 0259 2a5a          goto    strobe__12
3321   025a :   strobe__12:
3322 025a 2a5b          goto    strobe__13
3323   025b :   strobe__13:
3324 025b 2a5c          goto    strobe__14
3325   025c :   strobe__14:
3326                    ; line_number = 566
3327                    ; delay f2 - 3 done
3328                    ; line_number = 559
3329                    ;  loop_exactly 44 wrap-up
3330 025c 0bd8          decfsz  strobe__9,f
3331 025d 2a4c          goto    strobe__10
3332                    ; line_number = 559
3333                    ;  loop_exactly 44 done
3334                    ; # Now do follow on processing of the signal.
3335                    ; line_number = 574
3336                    ;  delay f1 start
3337                    ; Delay expression evaluates to 13
3338                    ; # First, clip the signal to 0x3f:
3339                    ; line_number = 576
3340                    ;  if !serial_in start
3341                    ; Delay at if is 0
3342                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3343                    ; CASE: true_code.size=0 && false_code.size=1
3344 025e 1d85          btfss   serial_in___byte, serial_in___bit
3345                    ; line_number = 577
3346                    ; delay_set 1 start
3347                    ; Delay at delay_set is 0
3348                    ; line_number = 578
3349                    ; return start
3350                    ; line_number = 578
3351 025f 3400          retlw   0
3352                    ; line_number = 578
3353                    ; return done
3354                    ; line_number = 577
3355                    ; delay_set 1 done
3356                    ; code.delay=2 back_code.delay=0
3357                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3358                    ; if final true delay=1 false delay=0 code delay=2
3359                    ; line_number = 576
3360                    ;  if !serial_in done
3361                    ; # Any values over 63 need to be truncated:
3362                    ; line_number = 580
3363                    ;  if detect@6 start
3364                    ; Delay at if is 2
3365 00000053 = strobe__select__15___byte equ strobe__detect
3366 00000006 = strobe__select__15___bit equ 6
3367                    ; (after recombine) true_delay=2, false_delay=0 uniform_delay=true
3368                    ; CASE: true_code.size = 0 && false_code.size > 1
3369                    ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=2 (uniform delay)
3370 0260 1b53          btfsc   strobe__select__15___byte, strobe__select__15___bit
3371 0261 2a64          goto    strobe__16
3372                    ; Delay 1 cycles
3373 0262 0000          nop     
3374 0263 2a66          goto    strobe__17
3375   0264 :   strobe__16:
3376                    ; line_number = 581
3377                    ; detect := 0x3f
3378                    ; Delay at assignment is 0
3379 0264 303f          movlw   63
3380 0265 00d3          movwf   strobe__detect
3381   0266 :   strobe__17:
3382                    ; code.delay=7 back_code.delay=0
3383                    ; <=bit_code_emit@symbol; sym=strobe__select__15 (data:X0=>X0 code:XX=>XX)
3384                    ; if final true delay=2 false delay=0 code delay=7
3385                    ; line_number = 580
3386                    ;  if detect@6 done
3387                    ; line_number = 582
3388                    ; back_last := detect << 2
3389                    ; Delay at assignment is 7
3390 0266 0d53          rlf     strobe__detect,w
3391 0267 00b3          movwf   back_last
3392 0268 0db3          rlf     back_last,f
3393 0269 30fc          movlw   252
3394 026a 05b3          andwf   back_last,f
3395                    ; Delay 1 cycles
3396 026b 0000          nop     
3397                    ; line_number = 574
3398                    ;  delay f1 done
3399                    ; line_number = 583
3400                    ; delay f1 start
3401                    ; Delay expression evaluates to 13
3402                    ; # Drop the detected value into the averaging buffer:
3403                    ; line_number = 585
3404                    ;  if !serial_in start
3405                    ; Delay at if is 0
3406                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3407                    ; CASE: true_code.size=0 && false_code.size=1
3408 026c 1d85          btfss   serial_in___byte, serial_in___bit
3409                    ; line_number = 586
3410                    ; delay_set 1 start
3411                    ; Delay at delay_set is 0
3412                    ; line_number = 587
3413                    ; return start
3414                    ; line_number = 587
3415 026d 3400          retlw   0
3416                    ; line_number = 587
3417                    ; return done
3418                    ; line_number = 586
3419                    ; delay_set 1 done
3420                    ; code.delay=2 back_code.delay=0
3421                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3422                    ; if final true delay=1 false delay=0 code delay=2
3423                    ; line_number = 585
3424                    ;  if !serial_in done
3425                    ; line_number = 588
3426                    ; back_index := back_index + 1
3427                    ; Delay at assignment is 2
3428 026e 0ab2          incf    back_index,f
3429                    ; line_number = 589
3430                    ;  back_index@buffer_power := 0
3431                    ; Delay at assignment is 3
3432 00000032 = strobe__select__18___byte equ back_index
3433 00000003 = strobe__select__18___bit equ 3
3434 026f 11b2          bcf     strobe__select__18___byte, strobe__select__18___bit
3435                    ; line_number = 590
3436                    ;  backs[back_index] := detect >> 1
3437                    ; Delay at assignment is 4
3438                    ; index_fsr_first
3439 0270 0832          movf    back_index,w
3440 0271 3e25          addlw   backs
3441 0272 0084          movwf   __fsr
3442 0273 0c53          rrf     strobe__detect,w
3443 0274 0080          movwf   __indf
3444 0275 1380          bcf     __indf, 7
3445            
3446                    ; Delay 3 cycles
3447 0276 2a77          goto    strobe__19
3448   0277 :   strobe__19:
3449 0277 0000          nop     
3450                    ; line_number = 583
3451                    ; delay f1 done
3452                    ; # Compute the average:
3453                    ; line_number = 593
3454                    ;  average := 0
3455 0278 3000          movlw   0
3456 0279 00d1          movwf   strobe__average
3457                    ; line_number = 594
3458                    ;  index := 0
3459 027a 3000          movlw   0
3460 027b 00d4          movwf   strobe__index
3461                    ; line_number = 595
3462                    ;  loop_exactly buffer_size start
3463 00000058 = strobe__20 equ shared___globals+56
3464 027c 3008          movlw   8
3465 027d 00d8          movwf   strobe__20
3466   027e :   strobe__21:
3467                    ; line_number = 596
3468                    ; delay f2 - 3 start
3469                    ; Delay expression evaluates to 10
3470                    ; line_number = 597
3471                    ; if !serial_in start
3472                    ; Delay at if is 0
3473                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3474                    ; CASE: true_code.size=0 && false_code.size=1
3475 027e 1d85          btfss   serial_in___byte, serial_in___bit
3476                    ; line_number = 598
3477                    ; delay_set 1 start
3478                    ; Delay at delay_set is 0
3479                    ; line_number = 599
3480                    ; return start
3481                    ; line_number = 599
3482 027f 3400          retlw   0
3483                    ; line_number = 599
3484                    ; return done
3485                    ; line_number = 598
3486                    ; delay_set 1 done
3487                    ; code.delay=2 back_code.delay=0
3488                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3489                    ; if final true delay=1 false delay=0 code delay=2
3490                    ; line_number = 597
3491                    ; if !serial_in done
3492                    ; line_number = 600
3493                    ; average := average + backs[index]
3494                    ; Delay at assignment is 2
3495 0280 0854          movf    strobe__index,w
3496 0281 3e25          addlw   backs
3497 0282 0084          movwf   __fsr
3498 0283 0800          movf    __indf,w
3499 0284 07d1          addwf   strobe__average,f
3500                    ; line_number = 601
3501                    ;  index := index + 1
3502                    ; Delay at assignment is 7
3503 0285 0ad4          incf    strobe__index,f
3504            
3505                    ; Delay 2 cycles
3506 0286 2a87          goto    strobe__22
3507   0287 :   strobe__22:
3508                    ; line_number = 596
3509                    ; delay f2 - 3 done
3510                    ; line_number = 595
3511                    ;  loop_exactly buffer_size wrap-up
3512 0287 0bd8          decfsz  strobe__20,f
3513 0288 2a7e          goto    strobe__21
3514                    ; line_number = 595
3515                    ;  loop_exactly buffer_size done
3516                    ; # Light the LED's as appropriate:	
3517                    ; line_number = 604
3518                    ;  back_average := average
3519 0289 0851          movf    strobe__average,w
3520 028a 00ad          movwf   back_average
3521                    ; line_number = 605
3522                    ;  delay f1 + 1 start
3523                    ; Delay expression evaluates to 14
3524                    ; line_number = 606
3525                    ; if !serial_in start
3526                    ; Delay at if is 0
3527                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3528                    ; CASE: true_code.size=0 && false_code.size=1
3529 028b 1d85          btfss   serial_in___byte, serial_in___bit
3530                    ; line_number = 607
3531                    ; delay_set 1 start
3532                    ; Delay at delay_set is 0
3533                    ; line_number = 608
3534                    ; return start
3535                    ; line_number = 608
3536 028c 3400          retlw   0
3537                    ; line_number = 608
3538                    ; return done
3539                    ; line_number = 607
3540                    ; delay_set 1 done
3541                    ; code.delay=2 back_code.delay=0
3542                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3543                    ; if final true delay=1 false delay=0 code delay=2
3544                    ; line_number = 606
3545                    ; if !serial_in done
3546                    ; line_number = 609
3547                    ; if back_average >= back_far start
3548                    ; Delay at if is 2
3549 028d 0830          movf    back_far,w
3550 028e 022d          subwf   back_average,w
3551                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
3552                    ; CASE: true_size=1 && false_size=1
3553                    ; SUBCASE: Double test; true, then false
3554 028f 1803          btfsc   __c___byte, __c___bit
3555                    ; line_number = 610
3556                    ; back_led0 := 0
3557                    ; Delay at assignment is 0
3558 0290 1187          bcf     back_led0___byte, back_led0___bit
3559 0291 1c03          btfss   __c___byte, __c___bit
3560                    ; line_number = 612
3561                    ; back_led0 := 1
3562                    ; Delay at assignment is 0
3563 0292 1587          bsf     back_led0___byte, back_led0___bit
3564                    ; code.delay=8 back_code.delay=0
3565                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3566                    ; Uniform delay broke in relation_code_emit
3567                    ; if final true delay=1 false delay=1 code delay=8
3568                    ; line_number = 609
3569                    ; if back_average >= back_far done
3570                    ; line_number = 613
3571                    ; if back_average >= back_near start
3572                    ; Delay at if is 8
3573 0293 0834          movf    back_near,w
3574 0294 022d          subwf   back_average,w
3575                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
3576                    ; CASE: true_size=1 && false_size=1
3577                    ; SUBCASE: Double test; true, then false
3578 0295 1803          btfsc   __c___byte, __c___bit
3579                    ; line_number = 614
3580                    ; back_led1 := 0
3581                    ; Delay at assignment is 0
3582 0296 1107          bcf     back_led1___byte, back_led1___bit
3583 0297 1c03          btfss   __c___byte, __c___bit
3584                    ; line_number = 616
3585                    ; back_led1 := 1
3586                    ; Delay at assignment is 0
3587 0298 1507          bsf     back_led1___byte, back_led1___bit
3588            
3589                    ; code.delay=14 back_code.delay=0
3590                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3591                    ; Uniform delay broke in relation_code_emit
3592                    ; if final true delay=1 false delay=1 code delay=14
3593                    ; line_number = 613
3594                    ; if back_average >= back_near done
3595                    ; line_number = 605
3596                    ;  delay f1 + 1 done
3597                    ; Recombine size1 = 0 || size2 = 0
3598   0299 :   strobe__23:
3599                    ; code.delay=4294967295 back_code.delay=4294967295
3600                    ; <=bit_code_emit@symbol; sym=strobe__illuminate (data:XX=>X0 code:XX=>XX)
3601                    ; line_number = 536
3602                    ; if illuminate done
3603   0299 :   strobe__50:
3604                    ; code.delay=4294967295 back_code.delay=4294967295
3605                    ; <=bit_code_emit@symbol; sym=strobe__front_back (data:XX=>XX code:XX=>XX)
3606                    ; line_number = 418
3607                    ;  if front_back done
3608                    ; line_number = 618
3609                    ; if illuminate start
3610                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
3611                    ; CASE: true_code_size > 1 && false_code_size > 1
3612                    ; true_code_size=55 false_code_size=16
3613 0299 1fdf          btfss   strobe__illuminate___byte, strobe__illuminate___bit
3614 029a 2ad3          goto    strobe__77
3615                    ; # Do interrupt processing:
3616                    ; line_number = 620
3617                    ;  delay f1 + 3 start
3618                    ; Delay expression evaluates to 16
3619                    ; line_number = 621
3620                    ; if !serial_in start
3621                    ; Delay at if is 0
3622                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3623                    ; CASE: true_code.size=0 && false_code.size=1
3624 029b 1d85          btfss   serial_in___byte, serial_in___bit
3625                    ; line_number = 622
3626                    ; delay_set 1 start
3627                    ; Delay at delay_set is 0
3628                    ; line_number = 623
3629                    ; return start
3630                    ; line_number = 623
3631 029c 3400          retlw   0
3632                    ; line_number = 623
3633                    ; return done
3634                    ; line_number = 622
3635                    ; delay_set 1 done
3636                    ; code.delay=2 back_code.delay=0
3637                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3638                    ; if final true delay=1 false delay=0 code delay=2
3639                    ; line_number = 621
3640                    ; if !serial_in done
3641                    ; line_number = 624
3642                    ; interrupt_pending := 0
3643                    ; Delay at assignment is 2
3644 029d 11df          bcf     interrupt_pending___byte, interrupt_pending___bit
3645                    ; line_number = 625
3646                    ;  if front_average >= front_near start
3647                    ; Delay at if is 3
3648 029e 0843          movf    front_near,w
3649 029f 023d          subwf   front_average,w
3650                    ; (after recombine) true_delay=2, false_delay=8 uniform_delay=true
3651                    ; CASE: true_code_size > 1 && false_code_size > 1
3652                    ; true_code_size=2 false_code_size=10
3653 02a0 1c03          btfss   __c___byte, __c___bit
3654 02a1 2aa8          goto    strobe__61
3655                    ; line_number = 626
3656                    ; if interrupt_mask@interrupt_front_near start
3657                    ; Delay at if is 0
3658 00000024 = strobe__select__60___byte equ interrupt_mask
3659 00000005 = strobe__select__60___bit equ 5
3660                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3661                    ; CASE: True.size=1 False.size=0
3662 02a2 1aa4          btfsc   strobe__select__60___byte, strobe__select__60___bit
3663                    ; line_number = 627
3664                    ; interrupt_pending := 1
3665                    ; Delay at assignment is 0
3666 02a3 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3667                    ; code.delay=2 back_code.delay=0
3668                    ; <=bit_code_emit@symbol; sym=strobe__select__60 (data:X0=>X0 code:XX=>XX)
3669                    ; if final true delay=1 false delay=0 code delay=2
3670                    ; line_number = 626
3671                    ; if interrupt_mask@interrupt_front_near done
3672                    ; Delay 5 cycles
3673 02a4 2aa5          goto    strobe__63
3674   02a5 :   strobe__63:
3675 02a5 2aa6          goto    strobe__64
3676   02a6 :   strobe__64:
3677 02a6 0000          nop     
3678 02a7 2ab2          goto    strobe__62
3679   02a8 :   strobe__61:
3680                    ; line_number = 628
3681 02a8 0840          movf    front_far,w
3682 02a9 023d          subwf   front_average,w
3683                    ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
3684                    ; CASE: true_code_size > 1 && false_code_size > 1
3685                    ; true_code_size=2 false_code_size=2
3686 02aa 1c03          btfss   __c___byte, __c___bit
3687 02ab 2aaf          goto    strobe__58
3688                    ; line_number = 629
3689                    ; if interrupt_mask@interrupt_front_far start
3690                    ; Delay at if is 0
3691 00000024 = strobe__select__57___byte equ interrupt_mask
3692 00000004 = strobe__select__57___bit equ 4
3693                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3694                    ; CASE: True.size=1 False.size=0
3695 02ac 1a24          btfsc   strobe__select__57___byte, strobe__select__57___bit
3696                    ; line_number = 630
3697                    ; interrupt_pending := 1
3698                    ; Delay at assignment is 0
3699 02ad 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3700                    ; code.delay=2 back_code.delay=0
3701                    ; <=bit_code_emit@symbol; sym=strobe__select__57 (data:X0=>X0 code:XX=>XX)
3702                    ; if final true delay=1 false delay=0 code delay=2
3703                    ; line_number = 629
3704                    ; if interrupt_mask@interrupt_front_far done
3705 02ae 2ab2          goto    strobe__59
3706   02af :   strobe__58:
3707                    ; line_number = 632
3708                    ; if interrupt_mask@interrupt_front_none start
3709                    ; Delay at if is 0
3710 00000024 = strobe__select__56___byte equ interrupt_mask
3711 00000003 = strobe__select__56___bit equ 3
3712                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3713                    ; CASE: True.size=1 False.size=0
3714 02af 19a4          btfsc   strobe__select__56___byte, strobe__select__56___bit
3715                    ; line_number = 633
3716                    ; interrupt_pending := 1
3717                    ; Delay at assignment is 0
3718 02b0 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3719                    ; code.delay=2 back_code.delay=0
3720                    ; <=bit_code_emit@symbol; sym=strobe__select__56 (data:X0=>X0 code:XX=>XX)
3721                    ; if final true delay=1 false delay=0 code delay=2
3722                    ; line_number = 632
3723                    ; if interrupt_mask@interrupt_front_none done
3724 02b1 0000          nop     
3725   02b2 :   strobe__59:
3726                    ; code.delay=8 back_code.delay=0
3727                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3728                    ; Uniform delay broke in relation_code_emit
3729   02b2 :   strobe__62:
3730                    ; code.delay=16 back_code.delay=0
3731                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3732                    ; Uniform delay broke in relation_code_emit
3733                    ; if final true delay=2 false delay=8 code delay=16
3734                    ; line_number = 625
3735                    ;  if front_average >= front_near done
3736                    ; line_number = 620
3737                    ;  delay f1 + 3 done
3738                    ; line_number = 634
3739                    ; delay f1 + 2 start
3740                    ; Delay expression evaluates to 15
3741                    ; line_number = 635
3742                    ; if !serial_in start
3743                    ; Delay at if is 0
3744                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3745                    ; CASE: true_code.size=0 && false_code.size=1
3746 02b2 1d85          btfss   serial_in___byte, serial_in___bit
3747                    ; line_number = 636
3748                    ; delay_set 1 start
3749                    ; Delay at delay_set is 0
3750                    ; line_number = 637
3751                    ; return start
3752                    ; line_number = 637
3753 02b3 3400          retlw   0
3754                    ; line_number = 637
3755                    ; return done
3756                    ; line_number = 636
3757                    ; delay_set 1 done
3758                    ; code.delay=2 back_code.delay=0
3759                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3760                    ; if final true delay=1 false delay=0 code delay=2
3761                    ; line_number = 635
3762                    ; if !serial_in done
3763                    ; line_number = 638
3764                    ; if back_average >= back_near start
3765                    ; Delay at if is 2
3766 02b4 0834          movf    back_near,w
3767 02b5 022d          subwf   back_average,w
3768                    ; (after recombine) true_delay=2, false_delay=8 uniform_delay=true
3769                    ; CASE: true_code_size > 1 && false_code_size > 1
3770                    ; true_code_size=2 false_code_size=10
3771 02b6 1c03          btfss   __c___byte, __c___bit
3772 02b7 2abe          goto    strobe__70
3773                    ; line_number = 639
3774                    ; if interrupt_mask@interrupt_back_near start
3775                    ; Delay at if is 0
3776 00000024 = strobe__select__69___byte equ interrupt_mask
3777 00000002 = strobe__select__69___bit equ 2
3778                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3779                    ; CASE: True.size=1 False.size=0
3780 02b8 1924          btfsc   strobe__select__69___byte, strobe__select__69___bit
3781                    ; line_number = 640
3782                    ; interrupt_pending := 1
3783                    ; Delay at assignment is 0
3784 02b9 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3785                    ; code.delay=2 back_code.delay=0
3786                    ; <=bit_code_emit@symbol; sym=strobe__select__69 (data:X0=>X0 code:XX=>XX)
3787                    ; if final true delay=1 false delay=0 code delay=2
3788                    ; line_number = 639
3789                    ; if interrupt_mask@interrupt_back_near done
3790                    ; Delay 5 cycles
3791 02ba 2abb          goto    strobe__72
3792   02bb :   strobe__72:
3793 02bb 2abc          goto    strobe__73
3794   02bc :   strobe__73:
3795 02bc 0000          nop     
3796 02bd 2ac8          goto    strobe__71
3797   02be :   strobe__70:
3798                    ; line_number = 641
3799 02be 0830          movf    back_far,w
3800 02bf 022d          subwf   back_average,w
3801                    ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
3802                    ; CASE: true_code_size > 1 && false_code_size > 1
3803                    ; true_code_size=2 false_code_size=2
3804 02c0 1c03          btfss   __c___byte, __c___bit
3805 02c1 2ac5          goto    strobe__67
3806                    ; line_number = 642
3807                    ; if interrupt_mask@interrupt_back_far start
3808                    ; Delay at if is 0
3809 00000024 = strobe__select__66___byte equ interrupt_mask
3810 00000001 = strobe__select__66___bit equ 1
3811                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3812                    ; CASE: True.size=1 False.size=0
3813 02c2 18a4          btfsc   strobe__select__66___byte, strobe__select__66___bit
3814                    ; line_number = 643
3815                    ; interrupt_pending := 1
3816                    ; Delay at assignment is 0
3817 02c3 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3818                    ; code.delay=2 back_code.delay=0
3819                    ; <=bit_code_emit@symbol; sym=strobe__select__66 (data:X0=>X0 code:XX=>XX)
3820                    ; if final true delay=1 false delay=0 code delay=2
3821                    ; line_number = 642
3822                    ; if interrupt_mask@interrupt_back_far done
3823 02c4 2ac8          goto    strobe__68
3824   02c5 :   strobe__67:
3825                    ; line_number = 645
3826                    ; if interrupt_mask@interrupt_back_none start
3827                    ; Delay at if is 0
3828 00000024 = strobe__select__65___byte equ interrupt_mask
3829 00000000 = strobe__select__65___bit equ 0
3830                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3831                    ; CASE: True.size=1 False.size=0
3832 02c5 1824          btfsc   strobe__select__65___byte, strobe__select__65___bit
3833                    ; line_number = 646
3834                    ; interrupt_pending := 1
3835                    ; Delay at assignment is 0
3836 02c6 15df          bsf     interrupt_pending___byte, interrupt_pending___bit
3837                    ; code.delay=2 back_code.delay=0
3838                    ; <=bit_code_emit@symbol; sym=strobe__select__65 (data:X0=>X0 code:XX=>XX)
3839                    ; if final true delay=1 false delay=0 code delay=2
3840                    ; line_number = 645
3841                    ; if interrupt_mask@interrupt_back_none done
3842 02c7 0000          nop     
3843   02c8 :   strobe__68:
3844                    ; code.delay=8 back_code.delay=0
3845                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3846                    ; Uniform delay broke in relation_code_emit
3847   02c8 :   strobe__71:
3848                    ; code.delay=15 back_code.delay=0
3849                    ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
3850                    ; Uniform delay broke in relation_code_emit
3851                    ; if final true delay=2 false delay=8 code delay=15
3852                    ; line_number = 638
3853                    ; if back_average >= back_near done
3854                    ; line_number = 634
3855                    ; delay f1 + 2 done
3856                    ; line_number = 647
3857                    ; delay f1 start
3858                    ; Delay expression evaluates to 13
3859                    ; line_number = 648
3860                    ; if interrupt_enable start
3861                    ; Delay at if is 0
3862                    ; (after recombine) true_delay=2, false_delay=0 uniform_delay=true
3863                    ; CASE: true_code.size = 0 && false_code.size > 1
3864                    ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=2 (uniform delay)
3865 02c8 195f          btfsc   interrupt_enable___byte, interrupt_enable___bit
3866 02c9 2acc          goto    strobe__74
3867                    ; Delay 1 cycles
3868 02ca 0000          nop     
3869 02cb 2ace          goto    strobe__75
3870   02cc :   strobe__74:
3871                    ; line_number = 649
3872                    ; if interrupt_pending start
3873                    ; Delay at if is 0
3874                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
3875                    ; CASE: True.size=1 False.size=0
3876 02cc 19df          btfsc   interrupt_pending___byte, interrupt_pending___bit
3877                    ; # Assert the interrupt signal:
3878                    ; line_number = 651
3879                    ;  serial_out := 0
3880                    ; Delay at assignment is 0
3881 02cd 1285          bcf     serial_out___byte, serial_out___bit
3882                    ; code.delay=2 back_code.delay=0
3883                    ; <=bit_code_emit@symbol; sym=interrupt_pending (data:X0=>X0 code:XX=>XX)
3884                    ; if final true delay=1 false delay=0 code delay=2
3885                    ; line_number = 649
3886                    ; if interrupt_pending done
3887   02ce :   strobe__75:
3888                    ; code.delay=5 back_code.delay=0
3889                    ; <=bit_code_emit@symbol; sym=interrupt_enable (data:X0=>X0 code:XX=>XX)
3890                    ; if final true delay=2 false delay=0 code delay=5
3891                    ; line_number = 648
3892                    ; if interrupt_enable done
3893                    ; Delay 8 cycles
3894                    ; Delay loop takes 2 * 4 = 8 cycles
3895 02ce 3002          movlw   2
3896   02cf :   strobe__76:
3897 02cf 3eff          addlw   255
3898 02d0 1d03          btfss   __z___byte, __z___bit
3899 02d1 2acf          goto    strobe__76
3900                    ; line_number = 647
3901                    ; delay f1 done
3902 02d2 2ae5          goto    strobe__78
3903   02d3 :   strobe__77:
3904                    ; # Kill some time just as if we were illuminating an IR LED:
3905                    ; line_number = 654
3906                    ;  loop_exactly 22 + 44 + 10 start
3907 00000058 = strobe__51 equ shared___globals+56
3908                    ; Expression is strictly a constant
3909 02d3 304c          movlw   76
3910 02d4 00d8          movwf   strobe__51
3911   02d5 :   strobe__52:
3912                    ; line_number = 655
3913                    ; delay f1 start
3914                    ; Delay expression evaluates to 13
3915                    ; line_number = 656
3916                    ; if !serial_in start
3917                    ; Delay at if is 0
3918                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3919                    ; CASE: true_code.size=0 && false_code.size=1
3920 02d5 1d85          btfss   serial_in___byte, serial_in___bit
3921                    ; line_number = 657
3922                    ; delay_set 1 start
3923                    ; Delay at delay_set is 0
3924                    ; line_number = 658
3925                    ; return start
3926                    ; line_number = 658
3927 02d6 3400          retlw   0
3928                    ; line_number = 658
3929                    ; return done
3930                    ; line_number = 657
3931                    ; delay_set 1 done
3932                    ; code.delay=2 back_code.delay=0
3933                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3934                    ; if final true delay=1 false delay=0 code delay=2
3935                    ; line_number = 656
3936                    ; if !serial_in done
3937                    ; Delay 11 cycles
3938                    ; Delay loop takes 2 * 4 = 8 cycles
3939 02d7 3002          movlw   2
3940   02d8 :   strobe__53:
3941 02d8 3eff          addlw   255
3942 02d9 1d03          btfss   __z___byte, __z___bit
3943 02da 2ad8          goto    strobe__53
3944 02db 2adc          goto    strobe__54
3945   02dc :   strobe__54:
3946 02dc 0000          nop     
3947                    ; line_number = 655
3948                    ; delay f1 done
3949                    ; line_number = 659
3950                    ; delay f2 - 3 start
3951                    ; Delay expression evaluates to 10
3952                    ; line_number = 660
3953                    ; if !serial_in start
3954                    ; Delay at if is 0
3955                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
3956                    ; CASE: true_code.size=0 && false_code.size=1
3957 02dd 1d85          btfss   serial_in___byte, serial_in___bit
3958                    ; line_number = 661
3959                    ; delay_set 1 start
3960                    ; Delay at delay_set is 0
3961                    ; line_number = 662
3962                    ; return start
3963                    ; line_number = 662
3964 02de 3400          retlw   0
3965                    ; line_number = 662
3966                    ; return done
3967            
3968                    ; line_number = 661
3969                    ; delay_set 1 done
3970                    ; code.delay=2 back_code.delay=0
3971                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
3972                    ; if final true delay=1 false delay=0 code delay=2
3973                    ; line_number = 660
3974                    ; if !serial_in done
3975                    ; Delay 8 cycles
3976                    ; Delay loop takes 2 * 4 = 8 cycles
3977 02df 3002          movlw   2
3978   02e0 :   strobe__55:
3979 02e0 3eff          addlw   255
3980 02e1 1d03          btfss   __z___byte, __z___bit
3981 02e2 2ae0          goto    strobe__55
3982                    ; line_number = 659
3983                    ; delay f2 - 3 done
3984                    ; line_number = 654
3985                    ;  loop_exactly 22 + 44 + 10 wrap-up
3986 02e3 0bd8          decfsz  strobe__51,f
3987 02e4 2ad5          goto    strobe__52
3988                    ; line_number = 654
3989                    ;  loop_exactly 22 + 44 + 10 done
3990   02e5 :   strobe__78:
3991                    ; code.delay=4294967295 back_code.delay=4294967295
3992                    ; <=bit_code_emit@symbol; sym=strobe__illuminate (data:XX=>XX code:XX=>XX)
3993                    ; line_number = 618
3994                    ; if illuminate done
3995                    ; delay after procedure statements=non-uniform
3996                    ; Implied return
3997 02e5 3400          retlw   0
3998            
3999            
4000            
4001            
4002                    ; line_number = 664
4003                    ; constant zero8 = "\0,0,0,0,0,0,0,0\"
4004                    ; zero8 = '\0,0,0,0,0,0,0,0\'
4005                    ; line_number = 665
4006                    ; constant module_name = "\13\IRProximity2C"
4007                    ; module_name = '\13\IRProximity2C'
4008                    ; line_number = 666
4009                    ; constant vendor_name = "\13\Mondo-tronics"
4010                    ; vendor_name = '\13\Mondo-tronics'
4011                    ; line_number = 667
4012                    ; string id = "\1,0,29,0,0,0,0,0\" ~ zero8 ~ zero8 ~ module_name ~ vendor_name start
4013                    ; id = '\1,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13\IRProximity2C\13\Mondo-tronics'
4014   02e6 :   id:
4015                    ; Temporarily save index into FSR
4016 02e6 0084          movwf   __fsr
4017                    ; Initialize PCLATH to point to this code page
4018 02e7 3003          movlw   id___base>>8
4019 02e8 008a          movwf   __pclath
4020                    ; Restore index from FSR
4021 02e9 0804          movf    __fsr,w
4022 02ea 3e00          addlw   id___base
4023                    ; Index to the correct return value
4024 02eb 0082          movwf   __pcl
4025                    ; page_group 52
4026                    ; Add 20 NOP's until start of new page 
4027 02ec 0000          nop     
4028 02ed 0000          nop     
4029 02ee 0000          nop     
4030 02ef 0000          nop     
4031 02f0 0000          nop     
4032 02f1 0000          nop     
4033 02f2 0000          nop     
4034 02f3 0000          nop     
4035 02f4 0000          nop     
4036 02f5 0000          nop     
4037 02f6 0000          nop     
4038 02f7 0000          nop     
4039 02f8 0000          nop     
4040 02f9 0000          nop     
4041 02fa 0000          nop     
4042 02fb 0000          nop     
4043 02fc 0000          nop     
4044 02fd 0000          nop     
4045 02fe 0000          nop     
4046 02ff 0000          nop     
4047   0300 :   id___base:
4048 0300 3401          retlw   1
4049 0301 3400          retlw   0
4050 0302 341d          retlw   29
4051 0303 3400          retlw   0
4052 0304 3400          retlw   0
4053 0305 3400          retlw   0
4054 0306 3400          retlw   0
4055 0307 3400          retlw   0
4056 0308 3400          retlw   0
4057 0309 3400          retlw   0
4058 030a 3400          retlw   0
4059 030b 3400          retlw   0
4060 030c 3400          retlw   0
4061 030d 3400          retlw   0
4062 030e 3400          retlw   0
4063 030f 3400          retlw   0
4064 0310 3400          retlw   0
4065 0311 3400          retlw   0
4066 0312 3400          retlw   0
4067 0313 3400          retlw   0
4068 0314 3400          retlw   0
4069 0315 3400          retlw   0
4070 0316 3400          retlw   0
4071 0317 3400          retlw   0
4072 0318 340d          retlw   13
4073 0319 3449          retlw   73
4074 031a 3452          retlw   82
4075 031b 3450          retlw   80
4076 031c 3472          retlw   114
4077 031d 346f          retlw   111
4078 031e 3478          retlw   120
4079 031f 3469          retlw   105
4080 0320 346d          retlw   109
4081 0321 3469          retlw   105
4082 0322 3474          retlw   116
4083 0323 3479          retlw   121
4084 0324 3432          retlw   50
4085 0325 3443          retlw   67
4086 0326 340d          retlw   13
4087 0327 344d          retlw   77
4088 0328 346f          retlw   111
4089 0329 346e          retlw   110
4090 032a 3464          retlw   100
4091 032b 346f          retlw   111
4092 032c 342d          retlw   45
4093 032d 3474          retlw   116
4094 032e 3472          retlw   114
4095 032f 346f          retlw   111
4096 0330 346e          retlw   110
4097 0331 3469          retlw   105
4098 0332 3463          retlw   99
4099 0333 3473          retlw   115
4100                    ; line_number = 667
4101                    ; string id = "\1,0,29,0,0,0,0,0\" ~ zero8 ~ zero8 ~ module_name ~ vendor_name start
4102            
4103                    ; Appending 2 delayed procedures to code bank 0
4104                    ; buffer = 'bit_bang'
4105                    ; line_number = 33
4106                    ; procedure byte_get
4107   0334 :   byte_get:
4108                    ; arguments_none
4109                    ; line_number = 35
4110                    ;  returns byte
4111            
4112                    ; # This procedure will wait for a byte to be received from
4113                    ; # serial_in_bit.  It calls the delay procedure for all delays.
4114                    ; # This procedure will keep calling the {delay} routine until
4115                    ; # data is received.
4116            
4117                    ; line_number = 42
4118                    ;  local count byte
4119 00000020 = byte_get__count equ shared___globals
4120                    ; line_number = 43
4121                    ;  local byte byte
4122 00000021 = byte_get__byte equ shared___globals+1
4123            
4124                    ; # Why does the delay procedure wait for a third of bit?  Well, it
4125                    ; # has to do with the loop immediately below.  If we catch the
4126                    ; # start bit at the beginning of a 1/3 bit time, we will be
4127                    ; # sampling data at approximately 1/3 of the way into each bit.
4128                    ; # Conversely, if we catch the start near the end of a 1/3 bit
4129                    ; # bit time, we will be sampling data at approximately 2/3 of the
4130                    ; # way into each bit.  So, what this means is that our bit sample
4131                    ; # times will be somewhere between 1/3 and 2/3 of bit (i.e. in
4132                    ; # the middle of the bit.
4133            
4134                    ; # It would be nice to tweak the code to shorter delay times
4135                    ; # (1/4 bit, 1/5 bit, etc.) but then it gets too hard to get
4136                    ; # the bookeeping done in the delay routine.  A PIC running at
4137                    ; # 4MHz (=1MIPS), only has 138 instructions available for the
4138                    ; # delay routine when at 1/3 of bit.
4139            
4140                    ; # Wait for a start bit:
4141                    ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
4142                    ; line_number = 62
4143                    ;  waiting := 1
4144 0334 14df          bsf     waiting___byte, waiting___bit
4145                    ; line_number = 63
4146                    ;  receiving := 1
4147 0335 145f          bsf     receiving___byte, receiving___bit
4148                    ; line_number = 64
4149                    ;  while serial_in start
4150   0336 :   byte_get__1:
4151                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
4152                    ; CASE: true_code.size = 0 && false_code.size > 1
4153                    ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=0 (non-uniform delay)
4154 0336 1d85          btfss   serial_in___byte, serial_in___bit
4155 0337 2b3a          goto    byte_get__2
4156                    ; line_number = 65
4157                    ; delay instructions_per_delay - 3 start
4158                    ; Delay expression evaluates to 135
4159                    ; line_number = 66
4160                    ; call delay()
4161                    ; Delay at call is 0
4162 0338 2178          call    delay
4163                    ; line_number = 65
4164                    ; delay instructions_per_delay - 3 done
4165 0339 2b36          goto    byte_get__1
4166                    ; Recombine size1 = 0 || size2 = 0
4167   033a :   byte_get__2:
4168                    ; code.delay=4294967295 back_code.delay=4294967295
4169                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
4170                    ; line_number = 64
4171                    ;  while serial_in done
4172                    ; line_number = 67
4173                    ; waiting := 0
4174 033a 10df          bcf     waiting___byte, waiting___bit
4175            
4176                    ; # Clear out any preceeding interrupt condition:
4177                    ; line_number = 70
4178                    ;  serial_out := 1
4179 033b 1685          bsf     serial_out___byte, serial_out___bit
4180            
4181                    ; # Skip over start bit:
4182                    ; line_number = 73
4183                    ;  delay instructions_per_bit - 2 start
4184                    ; Delay expression evaluates to 414
4185                    ; # There are two instructions of set-up for following loop_exactly:
4186                    ; line_number = 75
4187                    ;  call delay()
4188                    ; Delay at call is 0
4189 033c 2178          call    delay
4190                    ; line_number = 76
4191                    ;  call delay()
4192                    ; Delay at call is 135
4193 033d 2178          call    delay
4194                    ; line_number = 77
4195                    ;  call delay()
4196                    ; Delay at call is 270
4197 033e 2178          call    delay
4198                    ; line_number = 78
4199                    ;  byte := 0
4200                    ; Delay at assignment is 405
4201 033f 3000          movlw   0
4202 0340 00a1          movwf   byte_get__byte
4203            
4204                    ; Delay 7 cycles
4205 0341 2b42          goto    byte_get__3
4206   0342 :   byte_get__3:
4207 0342 2b43          goto    byte_get__4
4208   0343 :   byte_get__4:
4209 0343 2b44          goto    byte_get__5
4210   0344 :   byte_get__5:
4211 0344 0000          nop     
4212                    ; line_number = 73
4213                    ;  delay instructions_per_bit - 2 done
4214                    ; # Read in 8 bits of data:
4215                    ; line_number = 81
4216                    ;  loop_exactly 8 start
4217 00000059 = byte_get__6 equ shared___globals+57
4218 0345 3008          movlw   8
4219 0346 00d9          movwf   byte_get__6
4220   0347 :   byte_get__7:
4221                    ; # There are 3 instrucitons of loop_exactly overhead:
4222                    ; line_number = 83
4223                    ;  delay instructions_per_bit - 3 start
4224                    ; Delay expression evaluates to 413
4225                    ; line_number = 84
4226                    ; call delay()
4227                    ; Delay at call is 0
4228 0347 2178          call    delay
4229                    ; line_number = 85
4230                    ;  byte := byte >> 1
4231                    ; Delay at assignment is 135
4232                    ; Assignment of variable to self (no code needed)
4233 0348 0ca1          rrf     byte_get__byte,f
4234 0349 13a1          bcf     byte_get__byte, 7
4235                    ; line_number = 86
4236                    ;  if serial_in start
4237                    ; Delay at if is 137
4238                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
4239                    ; CASE: True.size=1 False.size=0
4240 034a 1985          btfsc   serial_in___byte, serial_in___bit
4241                    ; line_number = 87
4242                    ; byte@7 := 1
4243                    ; Delay at assignment is 0
4244 00000021 = byte_get__select__8___byte equ byte_get__byte
4245 00000007 = byte_get__select__8___bit equ 7
4246 034b 17a1          bsf     byte_get__select__8___byte, byte_get__select__8___bit
4247                    ; code.delay=139 back_code.delay=0
4248                    ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
4249                    ; if final true delay=1 false delay=0 code delay=139
4250                    ; line_number = 86
4251                    ;  if serial_in done
4252                    ; line_number = 88
4253                    ; call delay()
4254                    ; Delay at call is 139
4255 034c 2178          call    delay
4256                    ; line_number = 89
4257                    ;  call delay()
4258                    ; Delay at call is 274
4259 034d 2178          call    delay
4260            
4261                    ; Delay 4 cycles
4262 034e 2b4f          goto    byte_get__9
4263   034f :   byte_get__9:
4264 034f 2b50          goto    byte_get__10
4265   0350 :   byte_get__10:
4266                    ; line_number = 83
4267                    ;  delay instructions_per_bit - 3 done
4268                    ; line_number = 81
4269                    ;  loop_exactly 8 wrap-up
4270 0350 0bd9          decfsz  byte_get__6,f
4271 0351 2b47          goto    byte_get__7
4272                    ; line_number = 81
4273                    ;  loop_exactly 8 done
4274                    ; # Skip over 2/3's of stop bit; 3 cycles for return:
4275                    ; line_number = 92
4276                    ;  delay instructions_per_delay*2 - 3 start
4277                    ; Delay expression evaluates to 273
4278                    ; line_number = 93
4279                    ; call delay()
4280                    ; Delay at call is 0
4281 0352 2178          call    delay
4282                    ; line_number = 94
4283                    ;  call delay()
4284                    ; Delay at call is 135
4285 0353 2178          call    delay
4286                    ; Delay 3 cycles
4287 0354 2b55          goto    byte_get__11
4288   0355 :   byte_get__11:
4289 0355 0000          nop     
4290                    ; line_number = 92
4291                    ;  delay instructions_per_delay*2 - 3 done
4292                    ; line_number = 95
4293                    ; command_previous := command_last
4294 0356 0845          movf    command_last,w
4295 0357 00c4          movwf   command_previous
4296                    ; line_number = 96
4297                    ;  command_last := byte
4298 0358 0821          movf    byte_get__byte,w
4299 0359 00c5          movwf   command_last
4300                    ; line_number = 97
4301                    ;  serial_out := 1
4302 035a 1685          bsf     serial_out___byte, serial_out___bit
4303                    ; line_number = 98
4304                    ;  return byte start
4305                    ; line_number = 98
4306 035b 0821          movf    byte_get__byte,w
4307 035c 0008          return  
4308                    ; line_number = 98
4309                    ;  return byte done
4310            
4311            
4312                    ; delay after procedure statements=non-uniform
4313            
4314            
4315            
4316            
4317                    ; line_number = 101
4318                    ; procedure byte_put
4319   035d :   byte_put:
4320                    ; Last argument is sitting in W; save into argument variable
4321 035d 00a3          movwf   byte_put__byte
4322                    ; delay=4294967295
4323                    ; line_number = 102
4324                    ; argument byte byte
4325 00000023 = byte_put__byte equ shared___globals+3
4326                    ; line_number = 103
4327                    ;  returns_nothing
4328            
4329                    ; # This procedure will send {byte} to {serial_out} pin.  The {delay}
4330                    ; # procedure is called to provide the appropriate bit timing.
4331            
4332                    ; line_number = 108
4333                    ;  local count byte
4334 00000022 = byte_put__count equ shared___globals+2
4335            
4336                    ; # {receiving} will be 1 if the last get/put routine was a get.
4337                    ; # Before we start transmitting a response back, we want to ensure
4338                    ; # that there has been enough time to turn the line around.
4339                    ; # We delay the first 1/3 of a bit to pad out the 9-2/3 bits
4340                    ; # from get_byte to 10 bits.  We delay another 3 bits just to
4341                    ; # ensure that slow interpreters do not get overrun.
4342                    ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
4343                    ; line_number = 116
4344                    ;  sent_previous := sent_last
4345 035e 0847          movf    sent_last,w
4346 035f 00c6          movwf   sent_previous
4347                    ; line_number = 117
4348                    ;  sent_last := byte
4349 0360 0823          movf    byte_put__byte,w
4350 0361 00c7          movwf   sent_last
4351                    ; line_number = 118
4352                    ;  if receiving start
4353                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
4354                    ; CASE: true_code.size = 0 && false_code.size > 1
4355                    ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
4356 0362 1c5f          btfss   receiving___byte, receiving___bit
4357 0363 2b6a          goto    byte_put__3
4358                    ; line_number = 119
4359                    ; receiving := 0
4360 0364 105f          bcf     receiving___byte, receiving___bit
4361                    ; # 10 = 1 + 3*3 = 3-1/3 extra bits of delay:
4362                    ; line_number = 121
4363                    ;  loop_exactly 10 start
4364 0000005a = byte_put__1 equ shared___globals+58
4365 0365 300a          movlw   10
4366 0366 00da          movwf   byte_put__1
4367   0367 :   byte_put__2:
4368                    ; line_number = 122
4369                    ; call delay()
4370 0367 2178          call    delay
4371            
4372                    ; line_number = 121
4373                    ;  loop_exactly 10 wrap-up
4374 0368 0bda          decfsz  byte_put__1,f
4375 0369 2b67          goto    byte_put__2
4376                    ; line_number = 121
4377                    ;  loop_exactly 10 done
4378                    ; Recombine size1 = 0 || size2 = 0
4379   036a :   byte_put__3:
4380                    ; code.delay=4294967295 back_code.delay=4294967295
4381                    ; <=bit_code_emit@symbol; sym=receiving (data:X0=>X0 code:XX=>XX)
4382                    ; line_number = 118
4383                    ;  if receiving done
4384                    ; # Send the start bit:
4385                    ; line_number = 125
4386                    ;  delay instructions_per_bit - 2 start
4387                    ; Delay expression evaluates to 414
4388                    ; # The loop_exactly setup after this is 2 instructions:
4389                    ; line_number = 127
4390                    ;  serial_out := 0
4391                    ; Delay at assignment is 0
4392 036a 1285          bcf     serial_out___byte, serial_out___bit
4393                    ; line_number = 128
4394                    ;  call delay()
4395                    ; Delay at call is 1
4396 036b 2178          call    delay
4397                    ; line_number = 129
4398                    ;  call delay()
4399                    ; Delay at call is 136
4400 036c 2178          call    delay
4401                    ; line_number = 130
4402                    ;  call delay()
4403                    ; Delay at call is 271
4404 036d 2178          call    delay
4405            
4406                    ; Delay 8 cycles
4407                    ; Delay loop takes 2 * 4 = 8 cycles
4408 036e 3002          movlw   2
4409   036f :   byte_put__4:
4410 036f 3eff          addlw   255
4411 0370 1d03          btfss   __z___byte, __z___bit
4412 0371 2b6f          goto    byte_put__4
4413                    ; line_number = 125
4414                    ;  delay instructions_per_bit - 2 done
4415                    ; # Send the data:
4416                    ; line_number = 133
4417                    ;  loop_exactly 8 start
4418 0000005a = byte_put__5 equ shared___globals+58
4419 0372 3008          movlw   8
4420 0373 00da          movwf   byte_put__5
4421   0374 :   byte_put__6:
4422                    ; # Loop_exactly overhead is 3 instructions:
4423                    ; line_number = 135
4424                    ;  delay instructions_per_bit - 3 start
4425                    ; Delay expression evaluates to 413
4426                    ; line_number = 136
4427                    ; if byte@0 start
4428                    ; Delay at if is 0
4429 00000023 = byte_put__select__7___byte equ byte_put__byte
4430 00000000 = byte_put__select__7___bit equ 0
4431                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
4432                    ; CASE: true_size=1 && false_size=1
4433                    ; SUBCASE: Double test; true, then false
4434 0374 1823          btfsc   byte_put__select__7___byte, byte_put__select__7___bit
4435                    ; line_number = 137
4436                    ; serial_out := 1
4437                    ; Delay at assignment is 0
4438 0375 1685          bsf     serial_out___byte, serial_out___bit
4439 0376 1c23          btfss   byte_put__select__7___byte, byte_put__select__7___bit
4440                    ; line_number = 139
4441                    ; serial_out := 0
4442                    ; Delay at assignment is 0
4443 0377 1285          bcf     serial_out___byte, serial_out___bit
4444                    ; code.delay=4 back_code.delay=0
4445                    ; <=bit_code_emit@symbol; sym=byte_put__select__7 (data:X0=>X0 code:XX=>XX)
4446                    ; if final true delay=1 false delay=1 code delay=4
4447                    ; line_number = 136
4448                    ; if byte@0 done
4449                    ; line_number = 140
4450                    ; byte := byte >> 1
4451                    ; Delay at assignment is 4
4452                    ; Assignment of variable to self (no code needed)
4453 0378 0ca3          rrf     byte_put__byte,f
4454 0379 13a3          bcf     byte_put__byte, 7
4455                    ; line_number = 141
4456                    ;  call delay()
4457                    ; Delay at call is 6
4458 037a 2178          call    delay
4459                    ; line_number = 142
4460                    ;  call delay()
4461                    ; Delay at call is 141
4462 037b 2178          call    delay
4463                    ; line_number = 143
4464                    ;  call delay()
4465                    ; Delay at call is 276
4466 037c 2178          call    delay
4467            
4468                    ; Delay 2 cycles
4469 037d 2b7e          goto    byte_put__8
4470   037e :   byte_put__8:
4471                    ; line_number = 135
4472                    ;  delay instructions_per_bit - 3 done
4473                    ; line_number = 133
4474                    ;  loop_exactly 8 wrap-up
4475 037e 0bda          decfsz  byte_put__5,f
4476 037f 2b74          goto    byte_put__6
4477                    ; line_number = 133
4478                    ;  loop_exactly 8 done
4479                    ; # Send the stop bit:
4480                    ; line_number = 146
4481                    ;  delay instructions_per_bit start
4482                    ; Delay expression evaluates to 416
4483                    ; line_number = 147
4484                    ; serial_out := 1
4485                    ; Delay at assignment is 0
4486 0380 1685          bsf     serial_out___byte, serial_out___bit
4487                    ; line_number = 148
4488                    ;  call delay()
4489                    ; Delay at call is 1
4490 0381 2178          call    delay
4491                    ; line_number = 149
4492                    ;  call delay()
4493                    ; Delay at call is 136
4494 0382 2178          call    delay
4495                    ; line_number = 150
4496                    ;  call delay()
4497                    ; Delay at call is 271
4498 0383 2178          call    delay
4499            
4500            
4501                    ; Delay 10 cycles
4502                    ; Delay loop takes 2 * 4 = 8 cycles
4503 0384 3002          movlw   2
4504   0385 :   byte_put__9:
4505 0385 3eff          addlw   255
4506 0386 1d03          btfss   __z___byte, __z___bit
4507 0387 2b85          goto    byte_put__9
4508 0388 2b89          goto    byte_put__10
4509   0389 :   byte_put__10:
4510                    ; line_number = 146
4511                    ;  delay instructions_per_bit done
4512                    ; delay after procedure statements=non-uniform
4513                    ; Implied return
4514 0389 3400          retlw   0
4515            
4516            
4517            
4518            
4519                    ; Configuration bits
4520                    ; fill = 0x0
4521                    ; bg = bg11 (0x3000)
4522                    ; cpd = off (0x100)
4523                    ; cp = off (0x80)
4524                    ; boden = off (0x0)
4525                    ; mclre = off (0x0)
4526                    ; pwrte = off (0x10)
4527                    ; wdte = off (0x0)
4528                    ; fosc = int_no_clk (0x4)
4529                    ; 12692 = 0x3194
4530   3194 =           __config 12692
4531                    ; Define start addresses for data regions
4532                    ; Region="shared___globals" Address=32" Size=64 Bytes=59 Bits=8 Available=4
4533                    ; Region="shared___globals" Address=32" Size=64 Bytes=59 Bits=8 Available=4
4534                    ; Region="shared___globals" Address=32" Size=64 Bytes=59 Bits=8 Available=4
4535                    end
