1                       radix   dec
2                       ; Code bank 0; Start address: 0; End address: 4095
3      0000 :           org     0
4               
5                       ; Define start addresses for data regions
6    00000070 = shared___globals equ 112
7    00000020 = globals___0 equ 32
8    000000a0 = globals___1 equ 160
9    00000120 = globals___2 equ 288
10   000001a0 = globals___3 equ 416
11   00000000 = __indf equ 0
12   00000002 = __pcl equ 2
13   00000003 = __status equ 3
14   00000004 = __fsr equ 4
15   00000003 = __c___byte equ 3
16   00000000 = __c___bit equ 0
17   00000003 = __z___byte equ 3
18   00000002 = __z___bit equ 2
19   00000003 = __rp0___byte equ 3
20   00000005 = __rp0___bit equ 5
21   00000003 = __rp1___byte equ 3
22   00000006 = __rp1___bit equ 6
23   00000003 = __irp___byte equ 3
24   00000007 = __irp___bit equ 7
25   0000000a = __pclath equ 10
26   0000000a = __cb0___byte equ 10
27   00000003 = __cb0___bit equ 3
28   0000000a = __cb1___byte equ 10
29   00000004 = __cb1___bit equ 4
30              
31                      ; # Copyright (c) 2002-2005 by Wayne C. Gramlich.
32                      ; # All rights reserved.
33              
34                      ; # This code started out as some assembly code that was written by
35                      ; # Chuck McManis.  It has been modified basically beyond recognition.
36                      ; # None-the-less, I would like to thank Chuck for his contribution
37                      ; # to the effort.
38              
39                      ; # The Lumix(r) LCM-S01602DTR/M 2 line by 16 character LCD panel uses the
40                      ; # Samsung(r) S6A0069 LCD controller.  The S6A0069 LCD controller has
41                      ; # 80 bytes of internal memory available for displaying characters.
42                      ; # The byte addresses for these data bytes are 0x00 through 0x4f(=79).
43                      ; # The controller will display the 16 characters of data starting at
44                      ; # 0x00 + N on the first line, and 0x20 + N on the second line, where
45                      ; # N is a number between 0 and 0x18(=24).
46              
47                      ; # The LCD32 module provides the user with 4 lines of 16 characters
48                      ; # each.  These are arranged as follows:
49                      ; #
50                      ; #   Line  Addresses Shift(N)
51                      ; #     0    00 - 0f    00
52                      ; #     1    20 - 2f    00
53                      ; #     2    10 - 1f    10
54                      ; #     3    30 - 3f    10
55                      ; #
56                      ; # In order to display lines 0 and 1, the shift amount (N) is set to 0.
57                      ; # In order to display lines 2 and 3, the shift amount is set to 0x10(=16).
58                      ; # The Samsung chip can only change the shift amount in increments of
59                      ; # +/- 1 per shift command.  However, since the command only requires
60                      ; # ~40uS, 16 shifts can take place so fast that it appears to be
61                      ; # instantenous to the end user.
62              
63                      ; buffer = 'lcd32'
64                      ; line_number = 35
65                      ; library _pic16f688 entered
66                      ; # Copyright (c) 2004 by Wayne C. Gramlich
67                      ; # All rights reserved.
68              
69                      ; buffer = '_pic16f688'
70                      ; line_number = 5
71                      ; processor pic16f688
72                      ; line_number = 6
73                      ; configure_address 0x2007
74                      ; line_number = 7
75                      ;  configure_fill 0x3000
76                      ; line_number = 8
77                      ;  configure_option fcmen: on = 0x800
78                      ; line_number = 9
79                      ;  configure_option fcmen: off = 0x000
80                      ; line_number = 10
81                      ;  configure_option ieso: on = 0x400
82                      ; line_number = 11
83                      ;  configure_option ieso: off = 0x000
84                      ; line_number = 12
85                      ;  configure_option boden: on = 0x300
86                      ; line_number = 13
87                      ;  configure_option boden: partial = 0x200
88                      ; line_number = 14
89                      ;  configure_option boden: sboden = 0x100
90                      ; line_number = 15
91                      ;  configure_option boden: off = 0x000
92                      ; line_number = 16
93                      ;  configure_option cpd: on = 0x00
94                      ; line_number = 17
95                      ;  configure_option cpd: off = 0x80
96                      ; line_number = 18
97                      ;  configure_option cp: on = 0x00
98                      ; line_number = 19
99                      ;  configure_option cp: off = 0x40
100                     ; line_number = 20
101                     ;  configure_option mclre: on = 0x20
102                     ; line_number = 21
103                     ;  configure_option mclre: off = 0x20
104                     ; line_number = 22
105                     ;  configure_option pwrte: on = 0x00
106                     ; line_number = 23
107                     ;  configure_option pwrte: off = 0x10
108                     ; line_number = 24
109                     ;  configure_option wdte: on = 8
110                     ; line_number = 25
111                     ;  configure_option wdte: off = 0
112                     ; line_number = 26
113                     ;  configure_option fosc: rc_clk = 7
114                     ; line_number = 27
115                     ;  configure_option fosc: rc_no_clk = 6
116                     ; line_number = 28
117                     ;  configure_option fosc: int_clk = 5
118                     ; line_number = 29
119                     ;  configure_option fosc: int_no_clk = 4
120                     ; line_number = 30
121                     ;  configure_option fosc: ec = 3
122                     ; line_number = 31
123                     ;  configure_option fosc: hs = 2
124                     ; line_number = 32
125                     ;  configure_option fosc: xt = 1
126                     ; line_number = 33
127                     ;  configure_option fosc: lp = 0
128             
129                     ; line_number = 35
130                     ;  code_bank 0x0 : 0xfff
131                     ; line_number = 36
132                     ;  data_bank 0x0 : 0x7f
133                     ; line_number = 37
134                     ;  data_bank 0x80 : 0xff
135                     ; line_number = 38
136                     ;  data_bank 0x100 : 0x17f
137                     ; line_number = 39
138                     ;  data_bank 0x180 : 0x1ff
139                     ; line_number = 40
140                     ;  global_region 0x20 : 0x6f
141                     ; line_number = 41
142                     ;  global_region 0xa0 : 0xef
143                     ; line_number = 42
144                     ;  global_region 0x120 : 0x16f
145                     ; line_number = 43
146                     ;  global_region 0x1a0 : 0x1ef
147                     ; line_number = 44
148                     ;  shared_region 0x70 : 0x7f
149                     ; line_number = 45
150                     ;  interrupts_possible
151                     ; line_number = 46
152                     ;  packages pdip=14, soic=14, tssop=14
153                     ; line_number = 47
154                     ;  pin vdd, power_supply
155                     ; line_number = 48
156                     ; pin_bindings pdip=1, soic=1, tssop=1
157                     ; line_number = 49
158                     ; pin ra5_in, ra5_nc, ra5_out, t1cki, osc1, clkin
159                     ; line_number = 50
160                     ; pin_bindings pdip=2, soic=2, tssop=2
161                     ; line_number = 51
162                     ;  bind_to _porta@5
163                     ; line_number = 52
164                     ;  or_if ra5_in _trisa 32
165                     ; line_number = 53
166                     ;  or_if ra5_nc _trisa 32
167                     ; line_number = 54
168                     ;  or_if ra5_out _trisa 0
169                     ; line_number = 55
170                     ; pin ra4_in, ra4_nc, ra4_out, t1g, osc2, an3, clkout
171                     ; line_number = 56
172                     ; pin_bindings pdip=3, soic=3, tssop=3
173                     ; line_number = 57
174                     ;  bind_to _porta@4
175                     ; line_number = 58
176                     ;  or_if ra4_in _trisa 16
177                     ; line_number = 59
178                     ;  or_if ra4_nc _trisa 16
179                     ; line_number = 60
180                     ;  or_if ra4_out _trisa 0
181                     ; line_number = 61
182                     ;  or_if an3 _trisa 8
183                     ; line_number = 62
184                     ;  or_if ra4_in _ansel 0
185                     ; line_number = 63
186                     ;  or_if ra4_out _ansel 0
187                     ; line_number = 64
188                     ;  or_if an3 _ansel 8
189                     ; line_number = 65
190                     ;  or_if ra4_in _adcon0 0
191                     ; line_number = 66
192                     ;  or_if ra4_out _adcon0 0
193                     ; line_number = 67
194                     ;  or_if an3 _adcon0 1
195                     ; line_number = 68
196                     ; pin ra3_in, ra3_nc, mclr, vpp
197                     ; line_number = 69
198                     ; pin_bindings pdip=4, soic=4, tssop=4
199                     ; line_number = 70
200                     ;  bind_to _porta@4
201                     ; line_number = 71
202                     ;  or_if ra3_in _trisa 8
203                     ; line_number = 72
204                     ;  or_if ra3_nc _trisa 8
205                     ; line_number = 73
206                     ; pin rc5_in, rc5_nc, rc5_out, rx, dt
207                     ; line_number = 74
208                     ; pin_bindings pdip=5, soic=5, tssop=5
209                     ; line_number = 75
210                     ;  bind_to _portc@5
211                     ; line_number = 76
212                     ;  or_if rc5_in _trisc 32
213                     ; line_number = 77
214                     ;  or_if rc5_nc _trisc 32
215                     ; line_number = 78
216                     ;  or_if rc5_out _trisc 0
217                     ; line_number = 79
218                     ;  or_if rx _trisc 32
219                     ; line_number = 80
220                     ; pin rc4_in, rc4_nc, rc4_out, c2out, tx, ck
221                     ; line_number = 81
222                     ; pin_bindings pdip=6, soic=6, tssop=6
223                     ; line_number = 82
224                     ;  bind_to _portc@4
225                     ; line_number = 83
226                     ;  or_if rc4_in _trisc 16
227                     ; line_number = 84
228                     ;  or_if rc4_nc _trisc 16
229                     ; line_number = 85
230                     ;  or_if rc4_out _trisc 0
231                     ; # The UART documentation says TX must be marked as in input:
232                     ; line_number = 87
233                     ;  or_if tx _trisc 16
234                     ; line_number = 88
235                     ; pin rc3_in, rc3_nc, rc3_out, an7
236                     ; line_number = 89
237                     ; pin_bindings pdip=7, soic=7, tssop=7
238                     ; line_number = 90
239                     ;  bind_to _portc@3
240                     ; line_number = 91
241                     ;  or_if rc3_in _trisc 8
242                     ; line_number = 92
243                     ;  or_if rc3_nc _trisc 8
244                     ; line_number = 93
245                     ;  or_if rc3_out _trisc 0
246                     ; line_number = 94
247                     ;  or_if an7 _trisc 8
248                     ; line_number = 95
249                     ;  or_if rc3_in _ansel 0
250                     ; line_number = 96
251                     ;  or_if rc3_out _ansel 0
252                     ; line_number = 97
253                     ;  or_if an7 _ansel 128
254                     ; line_number = 98
255                     ;  or_if rc3_in _adcon0 0
256                     ; line_number = 99
257                     ;  or_if rc3_out _adcon0 0
258                     ; line_number = 100
259                     ;  or_if an7 _adcon0 1
260                     ; line_number = 101
261                     ; pin rc2_in, rc2_nc, rc2_out, an6
262                     ; line_number = 102
263                     ; pin_bindings pdip=8, soic=8, tssop=8
264                     ; line_number = 103
265                     ;  bind_to _portc@2
266                     ; line_number = 104
267                     ;  or_if rc2_in _trisc 4
268                     ; line_number = 105
269                     ;  or_if rc2_nc _trisc 4
270                     ; line_number = 106
271                     ;  or_if rc2_out _trisc 0
272                     ; line_number = 107
273                     ;  or_if an6 _trisc 4
274                     ; line_number = 108
275                     ;  or_if rc2_in _ansel 0
276                     ; line_number = 109
277                     ;  or_if rc2_out _ansel 0
278                     ; line_number = 110
279                     ;  or_if an6 _ansel 64
280                     ; line_number = 111
281                     ;  or_if rc2_in _adcon0 0
282                     ; line_number = 112
283                     ;  or_if rc2_out _adcon0 0
284                     ; line_number = 113
285                     ;  or_if an6 _adcon0 1
286                     ; line_number = 114
287                     ; pin rc1_in, rc1_nc, rc1_out, an5, c2in_minus
288                     ; line_number = 115
289                     ; pin_bindings pdip=9, soic=9, tssop=9
290                     ; line_number = 116
291                     ;  bind_to _portc@1
292                     ; line_number = 117
293                     ;  or_if rc1_in _trisc 2
294                     ; line_number = 118
295                     ;  or_if rc1_nc _trisc 2
296                     ; line_number = 119
297                     ;  or_if rc1_out _trisc 0
298                     ; line_number = 120
299                     ;  or_if rc1_in _cmcon0 7
300                     ; line_number = 121
301                     ;  or_if rc1_out _cmcon0 7
302                     ; line_number = 122
303                     ;  or_if an5 _trisc 2
304                     ; line_number = 123
305                     ;  or_if rc1_in _ansel 0
306                     ; line_number = 124
307                     ;  or_if rc1_out _ansel 0
308                     ; line_number = 125
309                     ;  or_if an5 _ansel 32
310                     ; line_number = 126
311                     ;  or_if rc1_in _adcon0 0
312                     ; line_number = 127
313                     ;  or_if rc1_out _adcon0 0
314                     ; line_number = 128
315                     ;  or_if an5 _adcon0 1
316                     ; line_number = 129
317                     ; pin rc0_in, rc0_nc, rc0_out, an4, c2in_plus
318                     ; line_number = 130
319                     ; pin_bindings pdip=10, soic=10, tssop=10
320                     ; line_number = 131
321                     ;  bind_to _portc@0
322                     ; line_number = 132
323                     ;  or_if rc0_in _trisc 1
324                     ; line_number = 133
325                     ;  or_if rc0_nc _trisc 1
326                     ; line_number = 134
327                     ;  or_if rc0_out _trisc 0
328                     ; line_number = 135
329                     ;  or_if rc0_in _cmcon0 7
330                     ; line_number = 136
331                     ;  or_if rc0_out _cmcon0 7
332                     ; line_number = 137
333                     ;  or_if an4 _trisc 1
334                     ; line_number = 138
335                     ;  or_if rc0_in _ansel 0
336                     ; line_number = 139
337                     ;  or_if rc0_out _ansel 0
338                     ; line_number = 140
339                     ;  or_if an4 _ansel 16
340                     ; line_number = 141
341                     ;  or_if rc0_in _adcon0 0
342                     ; line_number = 142
343                     ;  or_if rc0_out _adcon0 0
344                     ; line_number = 143
345                     ;  or_if an4 _adcon0 1
346                     ; line_number = 144
347                     ; pin ra2_in, ra2_nc, ra2_out, an2, c1out, t0cki, int
348                     ; line_number = 145
349                     ; pin_bindings pdip=11, soic=11, tssop=11
350                     ; line_number = 146
351                     ;  bind_to _porta@2
352                     ; line_number = 147
353                     ;  or_if ra2_in _trisa 4
354                     ; line_number = 148
355                     ;  or_if ra2_nc _trisa 4
356                     ; line_number = 149
357                     ;  or_if ra2_out _trisa 0
358                     ; line_number = 150
359                     ;  or_if an2 _trisa 4
360                     ; line_number = 151
361                     ;  or_if ra2_in _ansel 0
362                     ; line_number = 152
363                     ;  or_if ra2_out _ansel 0
364                     ; line_number = 153
365                     ;  or_if an2 _ansel 4
366                     ; line_number = 154
367                     ;  or_if ra2_in _adcon0 0
368                     ; line_number = 155
369                     ;  or_if ra2_out _adcon0 0
370                     ; line_number = 156
371                     ;  or_if an2 _adcon0 1
372                     ; line_number = 157
373                     ; pin ra1_in, ra1_nc, ra1_out, an1, c1in_minus, vref, icspclk
374                     ; line_number = 158
375                     ; pin_bindings pdip=12, soic=12, tssop=12
376                     ; line_number = 159
377                     ;  bind_to _porta@1
378                     ; line_number = 160
379                     ;  or_if ra1_in _trisa 2
380                     ; line_number = 161
381                     ;  or_if ra1_nc _trisa 2
382                     ; line_number = 162
383                     ;  or_if ra1_out _trisa 0
384                     ; line_number = 163
385                     ;  or_if ra1_in _cmcon0 7
386                     ; line_number = 164
387                     ;  or_if ra1_out _cmcon0 7
388                     ; line_number = 165
389                     ;  or_if an1 _trisa 2
390                     ; line_number = 166
391                     ;  or_if ra1_in _ansel 0
392                     ; line_number = 167
393                     ;  or_if ra1_out _ansel 0
394                     ; line_number = 168
395                     ;  or_if an1 _ansel 2
396                     ; line_number = 169
397                     ;  or_if ra1_in _adcon0 0
398                     ; line_number = 170
399                     ;  or_if ra1_out _adcon0 0
400                     ; line_number = 171
401                     ;  or_if an1 _adcon0 1
402                     ; line_number = 172
403                     ; pin ra0_in, ra0_nc, ra0_out, an0, c1in_plus, icspdat, ulpwu
404                     ; line_number = 173
405                     ; pin_bindings pdip=13, soic=13, tssop=13
406                     ; line_number = 174
407                     ;  bind_to _porta@0
408                     ; line_number = 175
409                     ;  or_if ra0_in _trisa 1
410                     ; line_number = 176
411                     ;  or_if ra0_nc _trisa 1
412                     ; line_number = 177
413                     ;  or_if ra0_out _trisa 0
414                     ; line_number = 178
415                     ;  or_if ra0_in _cmcon0 7
416                     ; line_number = 179
417                     ;  or_if ra0_out _cmcon0 7
418                     ; line_number = 180
419                     ;  or_if an0 _trisa 1
420                     ; line_number = 181
421                     ;  or_if ra0_in _ansel 0
422                     ; line_number = 182
423                     ;  or_if ra0_out _ansel 0
424                     ; line_number = 183
425                     ;  or_if an0 _ansel 1
426                     ; line_number = 184
427                     ;  or_if ra0_in _adcon0 0
428                     ; line_number = 185
429                     ;  or_if ra0_out _adcon0 0
430                     ; line_number = 186
431                     ;  or_if an0 _adcon0 1
432                     ; line_number = 187
433                     ; pin vss, ground
434                     ; line_number = 188
435                     ; pin_bindings pdip=14, soic=14, tssop=14
436             
437             
438                     ; # Register/bit bindings:
439             
440                     ; # Databank 0 (0x0 - 0x7f):
441             
442                     ; line_number = 197
443                     ; register _indf = 
444  00000000 = _indf equ 0
445             
446                     ; line_number = 199
447                     ; register _tmr0 = 
448  00000001 = _tmr0 equ 1
449             
450                     ; line_number = 201
451                     ; register _pcl = 
452  00000002 = _pcl equ 2
453             
454                     ; line_number = 203
455                     ; register _status = 
456  00000003 = _status equ 3
457                     ; line_number = 204
458                     ; bind _irp = _status@7
459  00000003 = _irp___byte equ _status
460  00000007 = _irp___bit equ 7
461                     ; line_number = 205
462                     ; bind _rp1 = _status@5
463  00000003 = _rp1___byte equ _status
464  00000005 = _rp1___bit equ 5
465                     ; line_number = 206
466                     ; bind _rp0 = _status@5
467  00000003 = _rp0___byte equ _status
468  00000005 = _rp0___bit equ 5
469                     ; line_number = 207
470                     ; bind _to = _status@4
471  00000003 = _to___byte equ _status
472  00000004 = _to___bit equ 4
473                     ; line_number = 208
474                     ; bind _pd = _status@3
475  00000003 = _pd___byte equ _status
476  00000003 = _pd___bit equ 3
477                     ; line_number = 209
478                     ; bind _z = _status@2
479  00000003 = _z___byte equ _status
480  00000002 = _z___bit equ 2
481                     ; line_number = 210
482                     ; bind _dc = _status@1
483  00000003 = _dc___byte equ _status
484  00000001 = _dc___bit equ 1
485                     ; line_number = 211
486                     ; bind _c = _status@0
487  00000003 = _c___byte equ _status
488  00000000 = _c___bit equ 0
489             
490                     ; line_number = 213
491                     ; register _fsr = 
492  00000004 = _fsr equ 4
493             
494                     ; line_number = 215
495                     ; register _porta = 
496  00000005 = _porta equ 5
497                     ; line_number = 216
498                     ; register _ra = 
499  00000005 = _ra equ 5
500                     ; line_number = 217
501                     ; bind _ra5 = _porta@5
502  00000005 = _ra5___byte equ _porta
503  00000005 = _ra5___bit equ 5
504                     ; line_number = 218
505                     ; bind _ra4 = _porta@4
506  00000005 = _ra4___byte equ _porta
507  00000004 = _ra4___bit equ 4
508                     ; line_number = 219
509                     ; bind _ra3 = _porta@3
510  00000005 = _ra3___byte equ _porta
511  00000003 = _ra3___bit equ 3
512                     ; line_number = 220
513                     ; bind _ra2 = _porta@2
514  00000005 = _ra2___byte equ _porta
515  00000002 = _ra2___bit equ 2
516                     ; line_number = 221
517                     ; bind _ra1 = _porta@1
518  00000005 = _ra1___byte equ _porta
519  00000001 = _ra1___bit equ 1
520                     ; line_number = 222
521                     ; bind _ra0 = _porta@0
522  00000005 = _ra0___byte equ _porta
523  00000000 = _ra0___bit equ 0
524             
525                     ; line_number = 224
526                     ; register _portc = 
527  00000007 = _portc equ 7
528                     ; line_number = 225
529                     ; register _rc = 
530  00000007 = _rc equ 7
531                     ; line_number = 226
532                     ; bind _rc5 = _portc@5
533  00000007 = _rc5___byte equ _portc
534  00000005 = _rc5___bit equ 5
535                     ; line_number = 227
536                     ; bind _rc4 = _portc@4
537  00000007 = _rc4___byte equ _portc
538  00000004 = _rc4___bit equ 4
539                     ; line_number = 228
540                     ; bind _rc3 = _portc@3
541  00000007 = _rc3___byte equ _portc
542  00000003 = _rc3___bit equ 3
543                     ; line_number = 229
544                     ; bind _rc2 = _portc@2
545  00000007 = _rc2___byte equ _portc
546  00000002 = _rc2___bit equ 2
547                     ; line_number = 230
548                     ; bind _rc1 = _portc@1
549  00000007 = _rc1___byte equ _portc
550  00000001 = _rc1___bit equ 1
551                     ; line_number = 231
552                     ; bind _rc0 = _portc@0
553  00000007 = _rc0___byte equ _portc
554  00000000 = _rc0___bit equ 0
555             
556                     ; line_number = 233
557                     ; register _pclath = 
558  0000000a = _pclath equ 10
559             
560                     ; line_number = 235
561                     ; register _intcon = 
562  0000000b = _intcon equ 11
563                     ; line_number = 236
564                     ; bind _gie = _intcon@7
565  0000000b = _gie___byte equ _intcon
566  00000007 = _gie___bit equ 7
567                     ; line_number = 237
568                     ; bind _peie = _intcon@6
569  0000000b = _peie___byte equ _intcon
570  00000006 = _peie___bit equ 6
571                     ; line_number = 238
572                     ; bind _t0ie = _intcon@5
573  0000000b = _t0ie___byte equ _intcon
574  00000005 = _t0ie___bit equ 5
575                     ; line_number = 239
576                     ; bind _inte = _intcon@4
577  0000000b = _inte___byte equ _intcon
578  00000004 = _inte___bit equ 4
579                     ; line_number = 240
580                     ; bind _raie = _intcon@3
581  0000000b = _raie___byte equ _intcon
582  00000003 = _raie___bit equ 3
583                     ; line_number = 241
584                     ; bind _t0if = _intcon@2
585  0000000b = _t0if___byte equ _intcon
586  00000002 = _t0if___bit equ 2
587                     ; line_number = 242
588                     ; bind _intf = _intcon@1
589  0000000b = _intf___byte equ _intcon
590  00000001 = _intf___bit equ 1
591                     ; line_number = 243
592                     ; bind _raif = _intcon@0
593  0000000b = _raif___byte equ _intcon
594  00000000 = _raif___bit equ 0
595             
596                     ; line_number = 245
597                     ; register _pir1 = 
598  0000000c = _pir1 equ 12
599                     ; line_number = 246
600                     ; bind _eeif = _pir1@7
601  0000000c = _eeif___byte equ _pir1
602  00000007 = _eeif___bit equ 7
603                     ; line_number = 247
604                     ; bind _adif = _pir1@6
605  0000000c = _adif___byte equ _pir1
606  00000006 = _adif___bit equ 6
607                     ; line_number = 248
608                     ; bind _rcif = _pir1@5
609  0000000c = _rcif___byte equ _pir1
610  00000005 = _rcif___bit equ 5
611                     ; line_number = 249
612                     ; bind _c2if = _pir1@4
613  0000000c = _c2if___byte equ _pir1
614  00000004 = _c2if___bit equ 4
615                     ; line_number = 250
616                     ; bind _c1if = _pir1@3
617  0000000c = _c1if___byte equ _pir1
618  00000003 = _c1if___bit equ 3
619                     ; line_number = 251
620                     ; bind _osfif = _pir1@2
621  0000000c = _osfif___byte equ _pir1
622  00000002 = _osfif___bit equ 2
623                     ; line_number = 252
624                     ; bind _txif = _pir1@1
625  0000000c = _txif___byte equ _pir1
626  00000001 = _txif___bit equ 1
627                     ; line_number = 253
628                     ; bind _tmr1if = _pir1@0
629  0000000c = _tmr1if___byte equ _pir1
630  00000000 = _tmr1if___bit equ 0
631             
632                     ; line_number = 255
633                     ; register _tmr1l = 
634  0000000e = _tmr1l equ 14
635             
636                     ; line_number = 257
637                     ; register _tmr1h = 
638  0000000f = _tmr1h equ 15
639             
640                     ; line_number = 259
641                     ; register _t1con = 
642  00000010 = _t1con equ 16
643                     ; line_number = 260
644                     ; bind t1ginv = _t1con@7
645  00000010 = t1ginv___byte equ _t1con
646  00000007 = t1ginv___bit equ 7
647                     ; line_number = 261
648                     ; bind _tmr1ge = _t1con@6
649  00000010 = _tmr1ge___byte equ _t1con
650  00000006 = _tmr1ge___bit equ 6
651                     ; line_number = 262
652                     ; bind _t1ckps1 = _t1con@5
653  00000010 = _t1ckps1___byte equ _t1con
654  00000005 = _t1ckps1___bit equ 5
655                     ; line_number = 263
656                     ; bind _t1ckps0 = _t1con@4
657  00000010 = _t1ckps0___byte equ _t1con
658  00000004 = _t1ckps0___bit equ 4
659                     ; line_number = 264
660                     ; bind _t1oscen = _t1con@3
661  00000010 = _t1oscen___byte equ _t1con
662  00000003 = _t1oscen___bit equ 3
663                     ; line_number = 265
664                     ; bind _t1sync = _t1con@2
665  00000010 = _t1sync___byte equ _t1con
666  00000002 = _t1sync___bit equ 2
667                     ; line_number = 266
668                     ; bind _tmr1cs = _t1con@1
669  00000010 = _tmr1cs___byte equ _t1con
670  00000001 = _tmr1cs___bit equ 1
671                     ; line_number = 267
672                     ; bind _tmr1on = _t1con@0
673  00000010 = _tmr1on___byte equ _t1con
674  00000000 = _tmr1on___bit equ 0
675             
676                     ; line_number = 269
677                     ; register _baudctl = 
678  00000011 = _baudctl equ 17
679                     ; line_number = 270
680                     ; bind _abdovf = _baudctl@7
681  00000011 = _abdovf___byte equ _baudctl
682  00000007 = _abdovf___bit equ 7
683                     ; line_number = 271
684                     ; bind _rcidl = _baudctl@6
685  00000011 = _rcidl___byte equ _baudctl
686  00000006 = _rcidl___bit equ 6
687                     ; line_number = 272
688                     ; bind _sckp = _baudctl@4
689  00000011 = _sckp___byte equ _baudctl
690  00000004 = _sckp___bit equ 4
691                     ; line_number = 273
692                     ; bind _brg16 = _baudctl@3
693  00000011 = _brg16___byte equ _baudctl
694  00000003 = _brg16___bit equ 3
695                     ; line_number = 274
696                     ; bind _wue = _baudctl@1
697  00000011 = _wue___byte equ _baudctl
698  00000001 = _wue___bit equ 1
699                     ; line_number = 275
700                     ; bind _abden = _baudctl@0
701  00000011 = _abden___byte equ _baudctl
702  00000000 = _abden___bit equ 0
703             
704                     ; line_number = 277
705                     ; register _spbrgh = 
706  00000012 = _spbrgh equ 18
707             
708                     ; line_number = 279
709                     ; register _spbrg = 
710  00000013 = _spbrg equ 19
711             
712                     ; line_number = 281
713                     ; register _rcreg = 
714  00000014 = _rcreg equ 20
715             
716                     ; line_number = 283
717                     ; register _txreg = 
718  00000015 = _txreg equ 21
719             
720                     ; line_number = 285
721                     ; register _txsta = 
722  00000016 = _txsta equ 22
723                     ; line_number = 286
724                     ; bind _csrc = _txsta@7
725  00000016 = _csrc___byte equ _txsta
726  00000007 = _csrc___bit equ 7
727                     ; line_number = 287
728                     ; bind _tx9 = _txsta@6
729  00000016 = _tx9___byte equ _txsta
730  00000006 = _tx9___bit equ 6
731                     ; line_number = 288
732                     ; bind _txen = _txsta@5
733  00000016 = _txen___byte equ _txsta
734  00000005 = _txen___bit equ 5
735                     ; line_number = 289
736                     ; bind _sync = _txsta@4
737  00000016 = _sync___byte equ _txsta
738  00000004 = _sync___bit equ 4
739                     ; line_number = 290
740                     ; bind _sendb = _txsta@3
741  00000016 = _sendb___byte equ _txsta
742  00000003 = _sendb___bit equ 3
743                     ; line_number = 291
744                     ; bind _brgh = _txsta@2
745  00000016 = _brgh___byte equ _txsta
746  00000002 = _brgh___bit equ 2
747                     ; line_number = 292
748                     ; bind _trmt = _txsta@1
749  00000016 = _trmt___byte equ _txsta
750  00000001 = _trmt___bit equ 1
751                     ; line_number = 293
752                     ; bind _tx9d = _txsta@7
753  00000016 = _tx9d___byte equ _txsta
754  00000007 = _tx9d___bit equ 7
755             
756                     ; line_number = 295
757                     ; register _rcsta = 
758  00000017 = _rcsta equ 23
759                     ; line_number = 296
760                     ; bind _spen = _rcsta@7
761  00000017 = _spen___byte equ _rcsta
762  00000007 = _spen___bit equ 7
763                     ; line_number = 297
764                     ; bind _rx9 = _rcsta@6
765  00000017 = _rx9___byte equ _rcsta
766  00000006 = _rx9___bit equ 6
767                     ; line_number = 298
768                     ; bind _sren = _rcsta@5
769  00000017 = _sren___byte equ _rcsta
770  00000005 = _sren___bit equ 5
771                     ; line_number = 299
772                     ; bind _cren = _rcsta@4
773  00000017 = _cren___byte equ _rcsta
774  00000004 = _cren___bit equ 4
775                     ; line_number = 300
776                     ; bind _adden = _rcsta@3
777  00000017 = _adden___byte equ _rcsta
778  00000003 = _adden___bit equ 3
779                     ; line_number = 301
780                     ; bind _ferr = _rcsta@2
781  00000017 = _ferr___byte equ _rcsta
782  00000002 = _ferr___bit equ 2
783                     ; line_number = 302
784                     ; bind _oerr = _rcsta@1
785  00000017 = _oerr___byte equ _rcsta
786  00000001 = _oerr___bit equ 1
787                     ; line_number = 303
788                     ; bind _rx9d = _rcsta@0
789  00000017 = _rx9d___byte equ _rcsta
790  00000000 = _rx9d___bit equ 0
791             
792                     ; line_number = 305
793                     ; register _wdtcon = 
794  00000018 = _wdtcon equ 24
795                     ; line_number = 306
796                     ; bind _wdtps3 = _wdtcon@4
797  00000018 = _wdtps3___byte equ _wdtcon
798  00000004 = _wdtps3___bit equ 4
799                     ; line_number = 307
800                     ; bind _wdtps2 = _wdtcon@3
801  00000018 = _wdtps2___byte equ _wdtcon
802  00000003 = _wdtps2___bit equ 3
803                     ; line_number = 308
804                     ; bind _wdtps1 = _wdtcon@2
805  00000018 = _wdtps1___byte equ _wdtcon
806  00000002 = _wdtps1___bit equ 2
807                     ; line_number = 309
808                     ; bind _wdtps0 = _wdtcon@1
809  00000018 = _wdtps0___byte equ _wdtcon
810  00000001 = _wdtps0___bit equ 1
811                     ; line_number = 310
812                     ; bind _swdten = _wdtcon@0
813  00000018 = _swdten___byte equ _wdtcon
814  00000000 = _swdten___bit equ 0
815             
816                     ; line_number = 312
817                     ; register _cmcon0 = 
818  00000019 = _cmcon0 equ 25
819                     ; line_number = 313
820                     ; bind _c1out = _cmcon0@7
821  00000019 = _c1out___byte equ _cmcon0
822  00000007 = _c1out___bit equ 7
823                     ; line_number = 314
824                     ; bind _c2out = _cmcon0@6
825  00000019 = _c2out___byte equ _cmcon0
826  00000006 = _c2out___bit equ 6
827                     ; line_number = 315
828                     ; bind _c1inv = _cmcon0@5
829  00000019 = _c1inv___byte equ _cmcon0
830  00000005 = _c1inv___bit equ 5
831                     ; line_number = 316
832                     ; bind _c2inv = _cmcon0@4
833  00000019 = _c2inv___byte equ _cmcon0
834  00000004 = _c2inv___bit equ 4
835                     ; line_number = 317
836                     ; bind _cis = _cmcon0@3
837  00000019 = _cis___byte equ _cmcon0
838  00000003 = _cis___bit equ 3
839                     ; line_number = 318
840                     ; bind _cm2 = _cmcon0@2
841  00000019 = _cm2___byte equ _cmcon0
842  00000002 = _cm2___bit equ 2
843                     ; line_number = 319
844                     ; bind _cm1 = _cmcon0@1
845  00000019 = _cm1___byte equ _cmcon0
846  00000001 = _cm1___bit equ 1
847                     ; line_number = 320
848                     ; bind _cm0 = _cmcon0@0
849  00000019 = _cm0___byte equ _cmcon0
850  00000000 = _cm0___bit equ 0
851             
852                     ; line_number = 322
853                     ; register _cmcon1 = 
854  0000001a = _cmcon1 equ 26
855                     ; line_number = 323
856                     ; bind _t1gss = _cmcon1@0
857  0000001a = _t1gss___byte equ _cmcon1
858  00000000 = _t1gss___bit equ 0
859                     ; line_number = 324
860                     ; bind _c2sync = _cmcon1@1
861  0000001a = _c2sync___byte equ _cmcon1
862  00000001 = _c2sync___bit equ 1
863             
864                     ; line_number = 326
865                     ; register _adresh = 
866  0000001e = _adresh equ 30
867             
868                     ; line_number = 328
869                     ; register _adcon0 = 
870  0000001f = _adcon0 equ 31
871                     ; line_number = 329
872                     ; bind _adfm = _adcon0@7
873  0000001f = _adfm___byte equ _adcon0
874  00000007 = _adfm___bit equ 7
875                     ; line_number = 330
876                     ; bind _vcfg = _adcon0@6
877  0000001f = _vcfg___byte equ _adcon0
878  00000006 = _vcfg___bit equ 6
879                     ; line_number = 331
880                     ; bind _chs2 = _adcon0@4
881  0000001f = _chs2___byte equ _adcon0
882  00000004 = _chs2___bit equ 4
883                     ; line_number = 332
884                     ; bind _chs1 = _adcon0@3
885  0000001f = _chs1___byte equ _adcon0
886  00000003 = _chs1___bit equ 3
887                     ; line_number = 333
888                     ; bind _chs0 = _adcon0@2
889  0000001f = _chs0___byte equ _adcon0
890  00000002 = _chs0___bit equ 2
891                     ; line_number = 334
892                     ; bind _go = _adcon0@1
893  0000001f = _go___byte equ _adcon0
894  00000001 = _go___bit equ 1
895                     ; line_number = 335
896                     ; bind _adon = _adcon0@0
897  0000001f = _adon___byte equ _adcon0
898  00000000 = _adon___bit equ 0
899             
900                     ; # Data bank 1 (0x80-0xff):
901             
902                     ; line_number = 339
903                     ; register _option_reg = 
904  00000081 = _option_reg equ 129
905                     ; line_number = 340
906                     ; bind _rapu = _option_reg@7
907  00000081 = _rapu___byte equ _option_reg
908  00000007 = _rapu___bit equ 7
909                     ; line_number = 341
910                     ; bind _intedg = _option_reg@6
911  00000081 = _intedg___byte equ _option_reg
912  00000006 = _intedg___bit equ 6
913                     ; line_number = 342
914                     ; bind _t0cs = _option_reg@5
915  00000081 = _t0cs___byte equ _option_reg
916  00000005 = _t0cs___bit equ 5
917                     ; line_number = 343
918                     ; bind _t0se = _option_reg@4
919  00000081 = _t0se___byte equ _option_reg
920  00000004 = _t0se___bit equ 4
921                     ; line_number = 344
922                     ; bind _psa = _option_reg@3
923  00000081 = _psa___byte equ _option_reg
924  00000003 = _psa___bit equ 3
925                     ; line_number = 345
926                     ; bind _ps2 = _option_reg@2
927  00000081 = _ps2___byte equ _option_reg
928  00000002 = _ps2___bit equ 2
929                     ; line_number = 346
930                     ; bind _ps1 = _option_reg@1
931  00000081 = _ps1___byte equ _option_reg
932  00000001 = _ps1___bit equ 1
933                     ; line_number = 347
934                     ; bind _ps0 = _option_reg@0
935  00000081 = _ps0___byte equ _option_reg
936  00000000 = _ps0___bit equ 0
937             
938                     ; line_number = 349
939                     ; register _trisa = 
940  00000085 = _trisa equ 133
941                     ; line_number = 350
942                     ; bind _trisa5 = _trisa@5
943  00000085 = _trisa5___byte equ _trisa
944  00000005 = _trisa5___bit equ 5
945                     ; line_number = 351
946                     ; bind _trisa4 = _trisa@4
947  00000085 = _trisa4___byte equ _trisa
948  00000004 = _trisa4___bit equ 4
949                     ; line_number = 352
950                     ; bind _trisa3 = _trisa@3
951  00000085 = _trisa3___byte equ _trisa
952  00000003 = _trisa3___bit equ 3
953                     ; line_number = 353
954                     ; bind _trisa2 = _trisa@2
955  00000085 = _trisa2___byte equ _trisa
956  00000002 = _trisa2___bit equ 2
957                     ; line_number = 354
958                     ; bind _trisa1 = _trisa@1
959  00000085 = _trisa1___byte equ _trisa
960  00000001 = _trisa1___bit equ 1
961                     ; line_number = 355
962                     ; bind _trisa0 = _trisa@0
963  00000085 = _trisa0___byte equ _trisa
964  00000000 = _trisa0___bit equ 0
965             
966                     ; line_number = 357
967                     ; register _trisc = 
968  00000087 = _trisc equ 135
969                     ; line_number = 358
970                     ; bind _trisc5 = _trisc@5
971  00000087 = _trisc5___byte equ _trisc
972  00000005 = _trisc5___bit equ 5
973                     ; line_number = 359
974                     ; bind _trisc4 = _trisc@4
975  00000087 = _trisc4___byte equ _trisc
976  00000004 = _trisc4___bit equ 4
977                     ; line_number = 360
978                     ; bind _trisc3 = _trisc@3
979  00000087 = _trisc3___byte equ _trisc
980  00000003 = _trisc3___bit equ 3
981                     ; line_number = 361
982                     ; bind _trisc2 = _trisc@2
983  00000087 = _trisc2___byte equ _trisc
984  00000002 = _trisc2___bit equ 2
985                     ; line_number = 362
986                     ; bind _trisc1 = _trisc@1
987  00000087 = _trisc1___byte equ _trisc
988  00000001 = _trisc1___bit equ 1
989                     ; line_number = 363
990                     ; bind _trisc0 = _trisc@0
991  00000087 = _trisc0___byte equ _trisc
992  00000000 = _trisc0___bit equ 0
993             
994                     ; line_number = 365
995                     ; register _pie1 = 
996  0000008c = _pie1 equ 140
997                     ; line_number = 366
998                     ; bind _eeie = _pie1@7
999  0000008c = _eeie___byte equ _pie1
1000 00000007 = _eeie___bit equ 7
1001                    ; line_number = 367
1002                    ; bind _adie = _pie1@6
1003 0000008c = _adie___byte equ _pie1
1004 00000006 = _adie___bit equ 6
1005                    ; line_number = 368
1006                    ; bind _rcie = _pie1@5
1007 0000008c = _rcie___byte equ _pie1
1008 00000005 = _rcie___bit equ 5
1009                    ; line_number = 369
1010                    ; bind _c2ie = _pie1@4
1011 0000008c = _c2ie___byte equ _pie1
1012 00000004 = _c2ie___bit equ 4
1013                    ; line_number = 370
1014                    ; bind _c1ie = _pie1@3
1015 0000008c = _c1ie___byte equ _pie1
1016 00000003 = _c1ie___bit equ 3
1017                    ; line_number = 371
1018                    ; bind _osfie = _pie1@2
1019 0000008c = _osfie___byte equ _pie1
1020 00000002 = _osfie___bit equ 2
1021                    ; line_number = 372
1022                    ; bind _txie = _pie1@1
1023 0000008c = _txie___byte equ _pie1
1024 00000001 = _txie___bit equ 1
1025                    ; line_number = 373
1026                    ; bind _tmr1ie = _pie1@0
1027 0000008c = _tmr1ie___byte equ _pie1
1028 00000000 = _tmr1ie___bit equ 0
1029            
1030                    ; line_number = 375
1031                    ; register _pcon = 
1032 0000008e = _pcon equ 142
1033                    ; line_number = 376
1034                    ; bind _ulpwue = _pcon@5
1035 0000008e = _ulpwue___byte equ _pcon
1036 00000005 = _ulpwue___bit equ 5
1037                    ; line_number = 377
1038                    ; bind _sboden = _pcon@4
1039 0000008e = _sboden___byte equ _pcon
1040 00000004 = _sboden___bit equ 4
1041                    ; line_number = 378
1042                    ; bind _por = _pcon@1
1043 0000008e = _por___byte equ _pcon
1044 00000001 = _por___bit equ 1
1045                    ; line_number = 379
1046                    ; bind _bod = _pcon@0
1047 0000008e = _bod___byte equ _pcon
1048 00000000 = _bod___bit equ 0
1049            
1050                    ; line_number = 381
1051                    ; register _osccon = 
1052 0000008f = _osccon equ 143
1053                    ; line_number = 382
1054                    ; bind _ircf2 = _osccon@6
1055 0000008f = _ircf2___byte equ _osccon
1056 00000006 = _ircf2___bit equ 6
1057                    ; line_number = 383
1058                    ; bind _ircf1 = _osccon@5
1059 0000008f = _ircf1___byte equ _osccon
1060 00000005 = _ircf1___bit equ 5
1061                    ; line_number = 384
1062                    ; bind _ircf0 = _osccon@4
1063 0000008f = _ircf0___byte equ _osccon
1064 00000004 = _ircf0___bit equ 4
1065                    ; line_number = 385
1066                    ; bind _osts = _osccon@3
1067 0000008f = _osts___byte equ _osccon
1068 00000003 = _osts___bit equ 3
1069                    ; line_number = 386
1070                    ; bind _hts = _osccon@2
1071 0000008f = _hts___byte equ _osccon
1072 00000002 = _hts___bit equ 2
1073                    ; line_number = 387
1074                    ; bind _lts = _osccon@3
1075 0000008f = _lts___byte equ _osccon
1076 00000003 = _lts___bit equ 3
1077                    ; line_number = 388
1078                    ; bind _scs = _osccon@2
1079 0000008f = _scs___byte equ _osccon
1080 00000002 = _scs___bit equ 2
1081            
1082                    ; line_number = 390
1083                    ; register _osctune = 
1084 00000090 = _osctune equ 144
1085                    ; line_number = 391
1086                    ; bind _tun4 = _osctune@4
1087 00000090 = _tun4___byte equ _osctune
1088 00000004 = _tun4___bit equ 4
1089                    ; line_number = 392
1090                    ; bind _tun3 = _osctune@3
1091 00000090 = _tun3___byte equ _osctune
1092 00000003 = _tun3___bit equ 3
1093                    ; line_number = 393
1094                    ; bind _tun2 = _osctune@2
1095 00000090 = _tun2___byte equ _osctune
1096 00000002 = _tun2___bit equ 2
1097                    ; line_number = 394
1098                    ; bind _tun1 = _osctune@1
1099 00000090 = _tun1___byte equ _osctune
1100 00000001 = _tun1___bit equ 1
1101                    ; line_number = 395
1102                    ; bind _tun0 = _osctune@0
1103 00000090 = _tun0___byte equ _osctune
1104 00000000 = _tun0___bit equ 0
1105                    ; line_number = 396
1106                    ; constant _osccal_lsb = 1
1107 00000001 = _osccal_lsb equ 1
1108            
1109                    ; line_number = 398
1110                    ; register _ansel = 
1111 00000091 = _ansel equ 145
1112                    ; line_number = 399
1113                    ; bind _ans7 = _ansel@7
1114 00000091 = _ans7___byte equ _ansel
1115 00000007 = _ans7___bit equ 7
1116                    ; line_number = 400
1117                    ; bind _ans6 = _ansel@6
1118 00000091 = _ans6___byte equ _ansel
1119 00000006 = _ans6___bit equ 6
1120                    ; line_number = 401
1121                    ; bind _ans5 = _ansel@5
1122 00000091 = _ans5___byte equ _ansel
1123 00000005 = _ans5___bit equ 5
1124                    ; line_number = 402
1125                    ; bind _ans4 = _ansel@4
1126 00000091 = _ans4___byte equ _ansel
1127 00000004 = _ans4___bit equ 4
1128                    ; line_number = 403
1129                    ; bind _ans3 = _ansel@3
1130 00000091 = _ans3___byte equ _ansel
1131 00000003 = _ans3___bit equ 3
1132                    ; line_number = 404
1133                    ; bind _ans2 = _ansel@2
1134 00000091 = _ans2___byte equ _ansel
1135 00000002 = _ans2___bit equ 2
1136                    ; line_number = 405
1137                    ; bind _ans1 = _ansel@1
1138 00000091 = _ans1___byte equ _ansel
1139 00000001 = _ans1___bit equ 1
1140                    ; line_number = 406
1141                    ; bind _ans0 = _ansel@0
1142 00000091 = _ans0___byte equ _ansel
1143 00000000 = _ans0___bit equ 0
1144            
1145                    ; line_number = 408
1146                    ; register _wpua = 
1147 00000095 = _wpua equ 149
1148                    ; line_number = 409
1149                    ; bind _wpua5 = _wpua@5
1150 00000095 = _wpua5___byte equ _wpua
1151 00000005 = _wpua5___bit equ 5
1152                    ; line_number = 410
1153                    ; bind _wpua4 = _wpua@4
1154 00000095 = _wpua4___byte equ _wpua
1155 00000004 = _wpua4___bit equ 4
1156                    ; line_number = 411
1157                    ; bind _wpua2 = _wpua@2
1158 00000095 = _wpua2___byte equ _wpua
1159 00000002 = _wpua2___bit equ 2
1160                    ; line_number = 412
1161                    ; bind _wpua1 = _wpua@1
1162 00000095 = _wpua1___byte equ _wpua
1163 00000001 = _wpua1___bit equ 1
1164                    ; line_number = 413
1165                    ; bind _wpua0 = _wpua@0
1166 00000095 = _wpua0___byte equ _wpua
1167 00000000 = _wpua0___bit equ 0
1168            
1169                    ; line_number = 415
1170                    ; register _ioca = 
1171 00000096 = _ioca equ 150
1172                    ; line_number = 416
1173                    ; bind _ioca5 = _ioca@5
1174 00000096 = _ioca5___byte equ _ioca
1175 00000005 = _ioca5___bit equ 5
1176                    ; line_number = 417
1177                    ; bind _ioca4 = _ioca@4
1178 00000096 = _ioca4___byte equ _ioca
1179 00000004 = _ioca4___bit equ 4
1180                    ; line_number = 418
1181                    ; bind _ioca3 = _ioca@3
1182 00000096 = _ioca3___byte equ _ioca
1183 00000003 = _ioca3___bit equ 3
1184                    ; line_number = 419
1185                    ; bind _ioca2 = _ioca@2
1186 00000096 = _ioca2___byte equ _ioca
1187 00000002 = _ioca2___bit equ 2
1188                    ; line_number = 420
1189                    ; bind _ioca1 = _ioca@1
1190 00000096 = _ioca1___byte equ _ioca
1191 00000001 = _ioca1___bit equ 1
1192                    ; line_number = 421
1193                    ; bind _ioca0 = _ioca@0
1194 00000096 = _ioca0___byte equ _ioca
1195 00000000 = _ioca0___bit equ 0
1196            
1197                    ; line_number = 423
1198                    ; register _eedath = 
1199 00000097 = _eedath equ 151
1200            
1201                    ; line_number = 425
1202                    ; register _eeadrh = 
1203 00000098 = _eeadrh equ 152
1204            
1205                    ; line_number = 427
1206                    ; register _vrcon = 
1207 00000099 = _vrcon equ 153
1208                    ; line_number = 428
1209                    ; bind _vren = _vrcon@7
1210 00000099 = _vren___byte equ _vrcon
1211 00000007 = _vren___bit equ 7
1212                    ; line_number = 429
1213                    ; bind _vrr = _vrcon@5
1214 00000099 = _vrr___byte equ _vrcon
1215 00000005 = _vrr___bit equ 5
1216                    ; line_number = 430
1217                    ; bind _vr3 = _vrcon@3
1218 00000099 = _vr3___byte equ _vrcon
1219 00000003 = _vr3___bit equ 3
1220                    ; line_number = 431
1221                    ; bind _vr2 = _vrcon@2
1222 00000099 = _vr2___byte equ _vrcon
1223 00000002 = _vr2___bit equ 2
1224                    ; line_number = 432
1225                    ; bind _vr1 = _vrcon@1
1226 00000099 = _vr1___byte equ _vrcon
1227 00000001 = _vr1___bit equ 1
1228                    ; line_number = 433
1229                    ; bind _vr0 = _vrcon@0
1230 00000099 = _vr0___byte equ _vrcon
1231 00000000 = _vr0___bit equ 0
1232            
1233                    ; line_number = 435
1234                    ; register _eedata = 
1235 0000009a = _eedata equ 154
1236                    ; line_number = 436
1237                    ; bind _eedat7 = _eedata@7
1238 0000009a = _eedat7___byte equ _eedata
1239 00000007 = _eedat7___bit equ 7
1240                    ; line_number = 437
1241                    ; bind _eedat6 = _eedata@6
1242 0000009a = _eedat6___byte equ _eedata
1243 00000006 = _eedat6___bit equ 6
1244                    ; line_number = 438
1245                    ; bind _eedat5 = _eedata@5
1246 0000009a = _eedat5___byte equ _eedata
1247 00000005 = _eedat5___bit equ 5
1248                    ; line_number = 439
1249                    ; bind _eedat4 = _eedata@4
1250 0000009a = _eedat4___byte equ _eedata
1251 00000004 = _eedat4___bit equ 4
1252                    ; line_number = 440
1253                    ; bind _eedat3 = _eedata@3
1254 0000009a = _eedat3___byte equ _eedata
1255 00000003 = _eedat3___bit equ 3
1256                    ; line_number = 441
1257                    ; bind _eedat2 = _eedata@2
1258 0000009a = _eedat2___byte equ _eedata
1259 00000002 = _eedat2___bit equ 2
1260                    ; line_number = 442
1261                    ; bind _eedat1 = _eedata@1
1262 0000009a = _eedat1___byte equ _eedata
1263 00000001 = _eedat1___bit equ 1
1264                    ; line_number = 443
1265                    ; bind _eedat0 = _eedata@0
1266 0000009a = _eedat0___byte equ _eedata
1267 00000000 = _eedat0___bit equ 0
1268            
1269                    ; line_number = 445
1270                    ; register _eeadr = 
1271 0000009b = _eeadr equ 155
1272                    ; line_number = 446
1273                    ; bind _eeadr7 = _eeadr@7
1274 0000009b = _eeadr7___byte equ _eeadr
1275 00000007 = _eeadr7___bit equ 7
1276                    ; line_number = 447
1277                    ; bind _eeadr6 = _eeadr@6
1278 0000009b = _eeadr6___byte equ _eeadr
1279 00000006 = _eeadr6___bit equ 6
1280                    ; line_number = 448
1281                    ; bind _eeadr5 = _eeadr@5
1282 0000009b = _eeadr5___byte equ _eeadr
1283 00000005 = _eeadr5___bit equ 5
1284                    ; line_number = 449
1285                    ; bind _eeadr4 = _eeadr@4
1286 0000009b = _eeadr4___byte equ _eeadr
1287 00000004 = _eeadr4___bit equ 4
1288                    ; line_number = 450
1289                    ; bind _eeadr3 = _eeadr@3
1290 0000009b = _eeadr3___byte equ _eeadr
1291 00000003 = _eeadr3___bit equ 3
1292                    ; line_number = 451
1293                    ; bind _eeadr2 = _eeadr@2
1294 0000009b = _eeadr2___byte equ _eeadr
1295 00000002 = _eeadr2___bit equ 2
1296                    ; line_number = 452
1297                    ; bind _eeadr1 = _eeadr@1
1298 0000009b = _eeadr1___byte equ _eeadr
1299 00000001 = _eeadr1___bit equ 1
1300                    ; line_number = 453
1301                    ; bind _eeadr0 = _eeadr@0
1302 0000009b = _eeadr0___byte equ _eeadr
1303 00000000 = _eeadr0___bit equ 0
1304            
1305                    ; line_number = 455
1306                    ; register _eecon1 = 
1307 0000009c = _eecon1 equ 156
1308                    ; line_number = 456
1309                    ; bind _eepgd = _eecon1@7
1310 0000009c = _eepgd___byte equ _eecon1
1311 00000007 = _eepgd___bit equ 7
1312                    ; line_number = 457
1313                    ; bind _wrerr = _eecon1@3
1314 0000009c = _wrerr___byte equ _eecon1
1315 00000003 = _wrerr___bit equ 3
1316                    ; line_number = 458
1317                    ; bind _wren = _eecon1@2
1318 0000009c = _wren___byte equ _eecon1
1319 00000002 = _wren___bit equ 2
1320                    ; line_number = 459
1321                    ; bind _wr = _eecon1@1
1322 0000009c = _wr___byte equ _eecon1
1323 00000001 = _wr___bit equ 1
1324                    ; line_number = 460
1325                    ; bind _rd = _eecon1@0
1326 0000009c = _rd___byte equ _eecon1
1327 00000000 = _rd___bit equ 0
1328            
1329                    ; line_number = 462
1330                    ; register _eecon2 = 
1331 0000009d = _eecon2 equ 157
1332            
1333                    ; line_number = 464
1334                    ; register _adresl = 
1335 0000009e = _adresl equ 158
1336            
1337                    ; line_number = 466
1338                    ; register _adcon1 = 
1339 0000009f = _adcon1 equ 159
1340                    ; line_number = 467
1341                    ; bind _adcs2 = _adcon1@6
1342 0000009f = _adcs2___byte equ _adcon1
1343 00000006 = _adcs2___bit equ 6
1344                    ; line_number = 468
1345                    ; bind _adcs1 = _adcon1@5
1346 0000009f = _adcs1___byte equ _adcon1
1347 00000005 = _adcs1___bit equ 5
1348                    ; line_number = 469
1349                    ; bind _adcs0 = _adcon1@4
1350 0000009f = _adcs0___byte equ _adcon1
1351 00000004 = _adcs0___bit equ 4
1352            
1353                    ; # Data Bank 2 (0x100 - 0x17f):
1354            
1355                    ; buffer = 'lcd32'
1356                    ; line_number = 35
1357                    ; library _pic16f688 exited
1358                    ; line_number = 36
1359                    ; library clock8mhz entered
1360                    ; # Copyright (c) 2004-2005 by Wayne C. Gramlich
1361                    ; # All rights reserved.
1362            
1363                    ; # This library defines the contstants {clock_rate}, {instruction_rate},
1364                    ; # and {clocks_per_instruction}.
1365            
1366                    ; # Define processor constants:
1367                    ; buffer = 'clock8mhz'
1368                    ; line_number = 9
1369                    ; constant clock_rate = 8000000
1370 007a1200 = clock_rate equ 8000000
1371                    ; line_number = 10
1372                    ; constant clocks_per_instruction = 4
1373 00000004 = clocks_per_instruction equ 4
1374                    ; line_number = 11
1375                    ; constant instruction_rate = clock_rate / clocks_per_instruction
1376 001e8480 = instruction_rate equ 2000000
1377            
1378            
1379                    ; buffer = 'lcd32'
1380                    ; line_number = 36
1381                    ; library clock8mhz exited
1382                    ; line_number = 37
1383                    ; library bit_bang entered
1384                    ; # Copyright (c) 2004 by Wayne C. Gramlich
1385                    ; # All rights reserved.
1386            
1387                    ; # This library provides bit bang routines for sending and receiving
1388                    ; # serial data at 2400 baud in 8N1 format (1 start bit, 8 data bits,
1389                    ; # No parity bit, 1 stop stop bit.)
1390                    ; #
1391                    ; # This library requires that the pins {serial_in} and {serial_out}
1392                    ; # be defined.  In addition, the variable {instruction_rate} needs
1393                    ; # to be defined.  Lastly, there needs to be a {delay} procedure
1394                    ; # with an "exact_delay delay_instructions" clause in it.  The {delay}
1395                    ; # routine should invoke "watch_dog_reset" so that the watch dog time
1396                    ; # can be set.
1397            
1398                    ; # Define some constants that we will be needing:
1399                    ; buffer = 'bit_bang'
1400                    ; line_number = 17
1401                    ; constant baud_rate = 2400
1402 00000960 = baud_rate equ 2400
1403                    ; line_number = 18
1404                    ; constant instructions_per_bit = instruction_rate / baud_rate
1405 00000341 = instructions_per_bit equ 833
1406                    ; line_number = 19
1407                    ; constant delays_per_bit = 3
1408 00000003 = delays_per_bit equ 3
1409                    ; line_number = 20
1410                    ; constant instructions_per_delay = instructions_per_bit / delays_per_bit
1411 00000115 = instructions_per_delay equ 277
1412                    ; line_number = 21
1413                    ; constant extra_instructions = 5
1414 00000005 = extra_instructions equ 5
1415                    ; line_number = 22
1416                    ; constant delay_instructions = instructions_per_delay - extra_instructions
1417 00000110 = delay_instructions equ 272
1418            
1419                    ; # The {receiving} bit is sent when data is being received.
1420                    ; # It gets cleared whenever data gets sent.  It is used to
1421                    ; # determine whether additional delay is needed to turn a
1422                    ; # line around for slow interpretted chips like the Basic
1423                    ; # Stamp 2 and the OOPIC.
1424            
1425                    ; line_number = 30
1426                    ; global receiving bit
1427 0000006f = receiving___byte equ globals___0+79
1428 00000000 = receiving___bit equ 0
1429                    ; line_number = 31
1430                    ; global waiting bit
1431 0000006f = waiting___byte equ globals___0+79
1432 00000001 = waiting___bit equ 1
1433            
1434                    ; Delaying code generation for procedure  byte_get
1435                    ; Delaying code generation for procedure  byte_put
1436            
1437                    ; buffer = 'lcd32'
1438                    ; line_number = 37
1439                    ; library bit_bang exited
1440            
1441                    ; # Number of instructions required to delay a microsecond:
1442                    ; line_number = 40
1443                    ; constant microsecond = instruction_rate / 1000000
1444 00000002 = microsecond equ 2
1445            
1446            
1447                    ; # Port stuff:
1448            
1449                    ; ## Bit positions:
1450                    ; ## Port A:
1451                    ; #constant e_bit = 0
1452                    ; #constant db3_bit = 1
1453                    ; #constant serial_out_bit = 2
1454                    ; #constant serial_in_bit = 3
1455                    ; #constant debug_mode_bit = 4
1456                    ; #constant lines34_bit = 5
1457                    ; ## Port C:
1458                    ; #constant db4_bit = 0
1459                    ; #constant db5_bit = 1
1460                    ; #constant db6_bit = 2
1461                    ; #constant db7_bit = 3
1462                    ; #constant rs_bit = 4
1463                    ; #constant rw_bit = 5
1464                    ; #
1465                    ; ## Bit masks:
1466                    ; ## Port A:
1467                    ; #constant e_mask = 1 << e_bit
1468                    ; #constant db3_mask = 1 << db3_bit
1469                    ; #constant serial_out_mask = 1 << serial_out_bit
1470                    ; #constant serial_in_mask = 1 << serial_in_bit
1471                    ; #constant debug_mode_mask = 1 << debug_mode_bit
1472                    ; #constant lines34_mask = 1 << lines34_bit
1473                    ; ## Port C:
1474                    ; #constant db4_mask = 1 << db4_bit
1475                    ; #constant db5_mask = 1 << db5_bit
1476                    ; #constant db6_mask = 1 << db6_bit
1477                    ; #constant db7_mask = 1 << db7_bit
1478                    ; #constant rs_mask = 1 << rs_bit
1479                    ; #constant rw_mask = 1 << rw_bit
1480            
1481                    ; line_number = 78
1482                    ; constant trisc_mask = 0
1483 00000000 = trisc_mask equ 0
1484                    ; #constant trisc_mask = 0x30
1485                    ; line_number = 80
1486                    ; constant db47_mask = 0xf
1487 0000000f = db47_mask equ 15
1488            
1489                    ; ## Bit bindings:
1490                    ; ## Port A:
1491                    ; #bind e = _porta@e_bit
1492                    ; #bind db3 = _porta@db3_bit
1493                    ; #bind serial_out = _porta@serial_out_bit
1494                    ; #bind serial_in = _porta@serial_in_bit
1495                    ; #bind debug_mode = _porta@debug_mode_bit
1496                    ; #bind lines34 = _porta@lines34_bit
1497                    ; ## Port C:
1498                    ; #bind db4 = _portc@db4_bit
1499                    ; #bind db5 = _portc@db5_bit
1500                    ; #bind db6 = _portc@db6_bit
1501                    ; #bind db7 = _portc@db7_bit
1502                    ; #bind rs = _portc@rs_bit
1503                    ; #bind rw = _portc@rw_bit
1504            
1505                    ; #package pdip
1506                    ; #    pin 1 = power_supply
1507                    ; #    pin 2 = ra5_in, name = lines34
1508                    ; #    pin 3 = ra4_in, name = debug_mode
1509                    ; #    pin 4 = ra3_in, name = serial_in
1510                    ; #    pin 5 = rc5_out, name = rw
1511                    ; #    pin 6 = rc4_out, name = rs
1512                    ; #    pin 7 = rc3_out, name = db7
1513                    ; #    pin 8 = rc2_out, name = db6
1514                    ; #    pin 9 = rc1_out, name = db5
1515                    ; #    pin 10 = rc0_out, name = db4
1516                    ; #    pin 11 = ra2_out, name = serial_out
1517                    ; #    pin 12 = ra1_out, name = db3
1518                    ; #    pin 13 = ra0_out, name = e
1519                    ; #    pin 14 = ground
1520            
1521                    ; line_number = 114
1522                    ; package pdip
1523                    ; line_number = 115
1524                    ; pin 1 = power_supply
1525                    ; line_number = 116
1526                    ;  pin 2 = ra5_out, name = rs
1527 00000005 = rs___byte equ _porta
1528 00000005 = rs___bit equ 5
1529                    ; line_number = 117
1530                    ;  pin 3 = ra4_in, name = lines34
1531 00000005 = lines34___byte equ _porta
1532 00000004 = lines34___bit equ 4
1533                    ; line_number = 118
1534                    ;  pin 4 = ra3_in, name = debug_mode
1535 00000005 = debug_mode___byte equ _porta
1536 00000004 = debug_mode___bit equ 4
1537                    ; line_number = 119
1538                    ;  pin 5 = rc5_in, name = serial_in
1539 00000007 = serial_in___byte equ _portc
1540 00000005 = serial_in___bit equ 5
1541                    ; line_number = 120
1542                    ;  pin 6 = rc4_out, name = serial_out
1543 00000007 = serial_out___byte equ _portc
1544 00000004 = serial_out___bit equ 4
1545                    ; line_number = 121
1546                    ;  pin 7 = rc3_out, name = db7
1547 00000007 = db7___byte equ _portc
1548 00000003 = db7___bit equ 3
1549                    ; line_number = 122
1550                    ;  pin 8 = rc2_out, name = db6
1551 00000007 = db6___byte equ _portc
1552 00000002 = db6___bit equ 2
1553                    ; line_number = 123
1554                    ;  pin 9 = rc1_out, name = db5
1555 00000007 = db5___byte equ _portc
1556 00000001 = db5___bit equ 1
1557                    ; line_number = 124
1558                    ;  pin 10 = rc0_out, name = db4
1559 00000007 = db4___byte equ _portc
1560 00000000 = db4___bit equ 0
1561                    ; line_number = 125
1562                    ;  pin 11 = ra2_out, name = rw
1563 00000005 = rw___byte equ _porta
1564 00000002 = rw___bit equ 2
1565                    ; line_number = 126
1566                    ;  pin 12 = ra1_out, name = db3
1567 00000005 = db3___byte equ _porta
1568 00000001 = db3___bit equ 1
1569                    ; line_number = 127
1570                    ;  pin 13 = ra0_out, name = e
1571 00000005 = e___byte equ _porta
1572 00000000 = e___bit equ 0
1573                    ; line_number = 128
1574                    ;  pin 14 = ground
1575            
1576                    ; line_number = 130
1577                    ; constant line_mask = 3
1578 00000003 = line_mask equ 3
1579                    ; line_number = 131
1580                    ; constant column_mask = 0xf
1581 0000000f = column_mask equ 15
1582                    ; line_number = 132
1583                    ; constant cursor_mode_mask = 3
1584 00000003 = cursor_mode_mask equ 3
1585            
1586                    ; line_number = 134
1587                    ; global shift byte
1588 00000024 = shift equ globals___0+4
1589                    ; line_number = 135
1590                    ; global column byte
1591 00000025 = column equ globals___0+5
1592                    ; line_number = 136
1593                    ; global line byte
1594 00000026 = line equ globals___0+6
1595                    ; line_number = 137
1596                    ; global cursor_mode byte
1597 00000027 = cursor_mode equ globals___0+7
1598                    ; line_number = 138
1599                    ; global font_address byte
1600 00000028 = font_address equ globals___0+8
1601            
1602                    ; line_number = 140
1603                    ; global command_previous byte
1604 00000029 = command_previous equ globals___0+9
1605                    ; line_number = 141
1606                    ; global command_last byte
1607 0000002a = command_last equ globals___0+10
1608                    ; line_number = 142
1609                    ; global sent_previous byte
1610 0000002b = sent_previous equ globals___0+11
1611                    ; line_number = 143
1612                    ; global sent_last byte
1613 0000002c = sent_last equ globals___0+12
1614            
1615                    ; line_number = 145
1616                    ; constant queue_size = 4
1617 00000004 = queue_size equ 4
1618                    ; line_number = 146
1619                    ; global data_queue[queue_size] array[byte]
1620 0000002d = data_queue equ globals___0+13
1621                    ; line_number = 147
1622                    ; global control_queue[queue_size] array[byte]
1623 00000031 = control_queue equ globals___0+17
1624                    ; line_number = 148
1625                    ; global processed byte
1626 00000035 = processed equ globals___0+21
1627                    ; line_number = 149
1628                    ; global available byte
1629 00000036 = available equ globals___0+22
1630            
1631                    ; # The field layout of a control mask byte is:
1632                    ; #
1633                    ; #  Bits   Name        Description
1634                    ; #  0-3    Count       Execute command count - 1 times (i.e. 0 => execute once)
1635                    ; #  4      Data Write  0 => Command Write(RS=0); 1=> Data Write(RS=1)
1636                    ; #  5      NOP         No Operation 1=>ignore command; 0=>do command
1637            
1638                    ; line_number = 158
1639                    ; constant count_mask = 0x0f
1640 0000000f = count_mask equ 15
1641                    ; # Note that RS_MASK is 0x10
1642                    ; #constant data_write = rs_mask
1643                    ; line_number = 161
1644                    ; constant data_write = 0x10
1645 00000010 = data_write equ 16
1646                    ; line_number = 162
1647                    ; constant command_write = 0
1648 00000000 = command_write equ 0
1649                    ; line_number = 163
1650                    ; constant nop_mask = 0x20
1651 00000020 = nop_mask equ 32
1652            
1653                    ; line_number = 165
1654                    ; procedure main
1655   0000 :   main:
1656                    ; Initialize some registers
1657 0000 019f          clrf    _adcon0
1658 0001 1683          bsf     __rp0___byte, __rp0___bit
1659 0002 0191          clrf    _ansel
1660 0003 3007          movlw   7
1661 0004 1283          bcf     __rp0___byte, __rp0___bit
1662 0005 0099          movwf   _cmcon0
1663 0006 3018          movlw   24
1664 0007 1683          bsf     __rp0___byte, __rp0___bit
1665 0008 0085          movwf   _trisa
1666 0009 3020          movlw   32
1667 000a 0087          movwf   _trisc
1668                    ; arguments_none
1669                    ; line_number = 167
1670                    ;  returns_nothing
1671            
1672                    ; line_number = 169
1673                    ;  local command byte
1674 00000037 = main__command equ globals___0+23
1675                    ; line_number = 170
1676                    ;  local temporary byte
1677 00000038 = main__temporary equ globals___0+24
1678                    ; line_number = 171
1679                    ;  local id_index byte
1680 00000039 = main__id_index equ globals___0+25
1681                    ; line_number = 172
1682                    ;  local glitch byte
1683 0000003a = main__glitch equ globals___0+26
1684            
1685                    ; # Switch over to 8MHz:
1686                    ; before procedure statements delay=non-uniform, bit states=(data:00=>01 code:XX=>XX)
1687                    ; line_number = 175
1688                    ;  _osccon := 0x71
1689 000b 3071          movlw   113
1690 000c 008f          movwf   _osccon
1691            
1692                    ; line_number = 177
1693                    ;  column := 0
1694 000d 3000          movlw   0
1695 000e 1283          bcf     __rp0___byte, __rp0___bit
1696 000f 00a5          movwf   column
1697                    ; line_number = 178
1698                    ;  line := 0
1699 0010 3000          movlw   0
1700 0011 00a6          movwf   line
1701                    ; line_number = 179
1702                    ;  cursor_mode := 3
1703 0012 3003          movlw   3
1704 0013 00a7          movwf   cursor_mode
1705                    ; line_number = 180
1706                    ;  shift := 0
1707 0014 3000          movlw   0
1708 0015 00a4          movwf   shift
1709                    ; line_number = 181
1710                    ;  processed := 0
1711 0016 3000          movlw   0
1712 0017 00b5          movwf   processed
1713                    ; line_number = 182
1714                    ;  available := 0
1715 0018 3000          movlw   0
1716 0019 00b6          movwf   available
1717                    ; line_number = 183
1718                    ;  font_address := 0
1719 001a 3000          movlw   0
1720 001b 00a8          movwf   font_address
1721            
1722                    ; line_number = 185
1723                    ;  glitch := 0
1724 001c 3000          movlw   0
1725 001d 00ba          movwf   main__glitch
1726                    ; line_number = 186
1727                    ;  id_index := 0
1728 001e 3000          movlw   0
1729 001f 00b9          movwf   main__id_index
1730            
1731                    ; # Initialize the LCD:
1732                    ; line_number = 189
1733                    ;  call lcd_init()
1734 0020 21fd          call    lcd_init
1735            
1736                    ; # Output the message:
1737                    ; line_number = 192
1738                    ;  call line_put(0, '1')
1739 0021 3000          movlw   0
1740 0022 00bb          movwf   line_put__new_line
1741 0023 3031          movlw   49
1742 0024 2164          call    line_put
1743                    ; line_number = 193
1744                    ;  call line_put(1, '2')
1745 0025 3001          movlw   1
1746 0026 00bb          movwf   line_put__new_line
1747 0027 3032          movlw   50
1748 0028 2164          call    line_put
1749                    ; line_number = 194
1750                    ;  call line_put(2, '3')
1751 0029 3002          movlw   2
1752 002a 00bb          movwf   line_put__new_line
1753 002b 3033          movlw   51
1754 002c 2164          call    line_put
1755                    ; line_number = 195
1756                    ;  call line_put(3, '4')
1757 002d 3003          movlw   3
1758 002e 00bb          movwf   line_put__new_line
1759 002f 3034          movlw   52
1760 0030 2164          call    line_put
1761                    ; line_number = 196
1762                    ;  line := 0
1763 0031 3000          movlw   0
1764 0032 00a6          movwf   line
1765            
1766                    ; line_number = 198
1767                    ;  call lcd_command(0x80)
1768 0033 3080          movlw   128
1769 0034 219c          call    lcd_command
1770            
1771                    ; line_number = 200
1772                    ;  loop_forever start
1773   0035 :   main__1:
1774                    ; # Get a command byte:
1775                    ; line_number = 202
1776                    ;  command := byte_get()
1777 0035 22e4          call    byte_get
1778 0036 00b7          movwf   main__command
1779            
1780                    ; # The byte_get() procedure returns after 10-2/3 bits have
1781                    ; # been processed.  That means that the serial input bit
1782                    ; # should be processing the stop bit.  After all commands
1783                    ; # that do not return a byte, we must call back into byte_get()
1784                    ; # within about 1/3 of a bit time (138uS).  Anything longer,
1785                    ; # and we might miss the beginning of the start bit for the
1786                    ; # next command byte.
1787                    ; #
1788                    ; # The operations to access the LCD controller take 39uS
1789                    ; # to write a command or data and 43uS to read some data.
1790                    ; # What this means is that for commands that do not return
1791                    ; # any data, we only have time to perform two LCD access
1792                    ; # commands.   There is one command, clear display, that
1793                    ; # that takes 1.53mS.  In addition, some commands, like
1794                    ; # line feed, that needs to clear the entire contents
1795                    ; # of the next line.  This takes 16+ commands.
1796                    ; #
1797                    ; # The solution to all of these problems is to have all of
1798                    ; # the LCD access commands take place from the delay()
1799                    ; # procedure.  As long as everything important is performed
1800                    ; # there and in the right sequence, we won't violate the
1801                    ; # "do everything in 1/3 of a bit time" rule in this procedure.
1802                    ; #
1803                    ; # For more details on the architecture of the delay procedure,
1804                    ; # see the delay procedure comments further below.
1805            
1806                    ; # Zero the command queue:
1807                    ; line_number = 231
1808                    ;  available := 0
1809 0037 3000          movlw   0
1810 0038 00b6          movwf   available
1811                    ; line_number = 232
1812                    ;  processed := 0
1813 0039 3000          movlw   0
1814 003a 00b5          movwf   processed
1815            
1816                    ; # Dispatch on the command:
1817                    ; line_number = 235
1818                    ;  switch command >> 6 start
1819 003b 3000          movlw   main__59>>8
1820 003c 008a          movwf   __pclath
1821 0000004b = main__60 equ globals___0+43
1822 003d 0e37          swapf   main__command,w
1823 003e 00cb          movwf   main__60
1824 003f 0ccb          rrf     main__60,f
1825 0040 0c4b          rrf     main__60,w
1826 0041 3903          andlw   3
1827 0042 3e44          addlw   main__59
1828 0043 0082          movwf   __pcl
1829                    ; page_group 4
1830   0044 :   main__59:
1831 0044 2848          goto    main__55
1832 0045 288f          goto    main__56
1833 0046 2892          goto    main__57
1834 0047 2919          goto    main__58
1835                    ; line_number = 236
1836                    ; case 0
1837   0048 :   main__55:
1838                    ; # 00xx xxxx
1839                    ; line_number = 238
1840                    ;  switch (command >> 3) & 7 start
1841 0048 3000          movlw   main__11>>8
1842 0049 008a          movwf   __pclath
1843 0000004b = main__12 equ globals___0+43
1844 004a 0c37          rrf     main__command,w
1845 004b 00cb          movwf   main__12
1846 004c 0ccb          rrf     main__12,f
1847 004d 0c4b          rrf     main__12,w
1848 004e 3907          andlw   7
1849 004f 3e51          addlw   main__11
1850 0050 0082          movwf   __pcl
1851                    ; page_group 8
1852   0051 :   main__11:
1853 0051 288c          goto    main__10
1854 0052 2859          goto    main__9
1855 0053 288e          goto    main__13
1856 0054 288e          goto    main__13
1857 0055 288c          goto    main__10
1858 0056 288c          goto    main__10
1859 0057 288c          goto    main__10
1860 0058 288c          goto    main__10
1861                    ; line_number = 239
1862                    ; case 1
1863   0059 :   main__9:
1864                    ; # 0000 1xxx
1865                    ; line_number = 241
1866                    ;  switch command & 7 start
1867                    ; line_number = 242
1868                    ; case_maximum 7
1869 0059 3000          movlw   main__7>>8
1870 005a 008a          movwf   __pclath
1871 005b 3007          movlw   7
1872 005c 0537          andwf   main__command,w
1873 005d 3e5f          addlw   main__7
1874 005e 0082          movwf   __pcl
1875                    ; page_group 8
1876   005f :   main__7:
1877 005f 2867          goto    main__3
1878 0060 288a          goto    main__8
1879 0061 286b          goto    main__4
1880 0062 288a          goto    main__8
1881 0063 2876          goto    main__5
1882 0064 2884          goto    main__6
1883 0065 288a          goto    main__8
1884 0066 288a          goto    main__8
1885                    ; line_number = 243
1886                    ; case 0
1887   0067 :   main__3:
1888                    ; # 0000 1000 (Back Space):
1889                    ; line_number = 245
1890                    ;  if column != 0 start
1891                    ; Left minus Right
1892 0067 0825          movf    column,w
1893                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1894                    ; CASE: true_code.size=0 && false_code.size=1
1895 0068 1d03          btfss   __z___byte, __z___bit
1896                    ; line_number = 246
1897                    ; column := column - 1
1898 0069 03a5          decf    column,f
1899                    ; Recombine size1 = 0 || size2 = 0
1900                    ; code.delay=4294967295 back_code.delay=4294967295
1901                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
1902                    ; line_number = 245
1903                    ;  if column != 0 done
1904 006a 288a          goto    main__8
1905                    ; line_number = 247
1906                    ; case 2
1907   006b :   main__4:
1908                    ; # 0000 1010 (Line Feed):
1909                    ; line_number = 249
1910                    ;  line := (line + 1) & line_mask
1911 006b 0a26          incf    line,w
1912 006c 3903          andlw   3
1913 006d 00a6          movwf   line
1914                    ; line_number = 250
1915                    ;  column := 0
1916 006e 3000          movlw   0
1917 006f 00a5          movwf   column
1918                    ; # Force cursor to correct location:
1919                    ; line_number = 252
1920                    ;  call cursor_enqueue()
1921 0070 2186          call    cursor_enqueue
1922            
1923                    ; # Write out 16 spaces:
1924                    ; line_number = 255
1925                    ;  call enqueue(data_write | (16 - 1), ' ')
1926                    ; Expression is strictly a constant
1927 0071 301f          movlw   31
1928 0072 00c3          movwf   enqueue__control
1929 0073 3020          movlw   32
1930 0074 21e5          call    enqueue
1931                    ; # There are now 2 commands in queue:
1932 0075 288a          goto    main__8
1933                    ; line_number = 257
1934                    ; case 4
1935   0076 :   main__5:
1936                    ; # 0000 1100 (Form Feed):
1937            
1938                    ; # Clear the display:
1939                    ; line_number = 261
1940                    ;  call enqueue(command_write, 0)
1941 0076 01c3          clrf    enqueue__control
1942 0077 3000          movlw   0
1943 0078 21e5          call    enqueue
1944                    ; # The clear display command takes 1.53mS;
1945                    ; # 12 * .138 = 1.656mS.
1946                    ; line_number = 264
1947                    ;  call enqueue(nop_mask | (12 - 1), 0)
1948                    ; Expression is strictly a constant
1949 0079 302b          movlw   43
1950 007a 00c3          movwf   enqueue__control
1951 007b 3000          movlw   0
1952 007c 21e5          call    enqueue
1953                    ; line_number = 265
1954                    ;  line := 0
1955 007d 3000          movlw   0
1956 007e 00a6          movwf   line
1957                    ; line_number = 266
1958                    ;  column := 0
1959 007f 3000          movlw   0
1960 0080 00a5          movwf   column
1961                    ; line_number = 267
1962                    ;  shift := 0
1963 0081 3000          movlw   0
1964 0082 00a4          movwf   shift
1965 0083 288a          goto    main__8
1966                    ; line_number = 268
1967                    ; case 5
1968   0084 :   main__6:
1969                    ; # 0000 1101 (Carriage Return):
1970                    ; line_number = 270
1971                    ;  column := 0
1972 0084 3000          movlw   0
1973 0085 00a5          movwf   column
1974                    ; line_number = 271
1975                    ;  if !debug_mode start
1976                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
1977                    ; CASE: true.size=0 && false.size>1
1978                    ; bit_code_emit_helper1: body_code.size=2 true_test=false body_code.delay=0 (non-uniform delay)
1979 0086 1a05          btfsc   debug_mode___byte, debug_mode___bit
1980 0087 288a          goto    main__2
1981                    ; line_number = 272
1982                    ; line := 0
1983 0088 3000          movlw   0
1984 0089 00a6          movwf   line
1985   008a :   main__2:
1986                    ; Recombine size1 = 0 || size2 = 0
1987                    ; code.delay=4294967295 back_code.delay=4294967295
1988                    ; <=bit_code_emit@symbol; sym=debug_mode (data:00=>00 code:XX=>XX)
1989                    ; line_number = 271
1990                    ;  if !debug_mode done
1991   008a :   main__8:
1992                    ; switch end:(data:00=>00 code:XX=>XX)
1993                    ; line_number = 241
1994                    ;  switch command & 7 done
1995                    ; line_number = 273
1996                    ; call cursor_enqueue()
1997 008a 2186          call    cursor_enqueue
1998 008b 288e          goto    main__13
1999                    ; line_number = 274
2000                    ; case 0, 4, 5, 6, 7
2001   008c :   main__10:
2002                    ; # 0000 0xxx or 001x xxxx:
2003                    ; line_number = 276
2004                    ;  call character_put(command)
2005 008c 0837          movf    main__command,w
2006 008d 2171          call    character_put
2007   008e :   main__13:
2008                    ; switch end:(data:00=>00 code:XX=>XX)
2009                    ; line_number = 238
2010                    ;  switch (command >> 3) & 7 done
2011 008e 2962          goto    main__61
2012                    ; line_number = 277
2013                    ; case 1
2014   008f :   main__56:
2015                    ; # 01xx xxxx:
2016                    ; line_number = 279
2017                    ;  call character_put(command)
2018 008f 0837          movf    main__command,w
2019 0090 2171          call    character_put
2020 0091 2962          goto    main__61
2021                    ; line_number = 280
2022                    ; case 2
2023   0092 :   main__57:
2024                    ; # 10xx xxxx:
2025                    ; line_number = 282
2026                    ;  switch (command >> 3) & 7 start
2027                    ; line_number = 283
2028                    ; case_maximum 7
2029 0092 3000          movlw   main__37>>8
2030 0093 008a          movwf   __pclath
2031 0000004b = main__38 equ globals___0+43
2032 0094 0c37          rrf     main__command,w
2033 0095 00cb          movwf   main__38
2034 0096 0ccb          rrf     main__38,f
2035 0097 0c4b          rrf     main__38,w
2036 0098 3907          andlw   7
2037 0099 3e9b          addlw   main__37
2038 009a 0082          movwf   __pcl
2039                    ; page_group 8
2040   009b :   main__37:
2041 009b 28a3          goto    main__32
2042 009c 28b1          goto    main__33
2043 009d 28e7          goto    main__34
2044 009e 28e7          goto    main__34
2045 009f 28ec          goto    main__35
2046 00a0 28ec          goto    main__35
2047 00a1 28f7          goto    main__36
2048 00a2 2918          goto    main__39
2049                    ; line_number = 284
2050                    ; case 0
2051   00a3 :   main__32:
2052                    ; # 1000 0xxx:
2053                    ; line_number = 286
2054                    ;  line := command & line_mask
2055 00a3 3003          movlw   3
2056 00a4 0537          andwf   main__command,w
2057 00a5 00a6          movwf   line
2058                    ; line_number = 287
2059                    ;  column := 0
2060 00a6 3000          movlw   0
2061 00a7 00a5          movwf   column
2062                    ; line_number = 288
2063                    ;  if command@2 start
2064 00000037 = main__select__14___byte equ main__command
2065 00000002 = main__select__14___bit equ 2
2066                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2067                    ; CASE: true_code.size = 0 && false_code.size > 1
2068                    ; bit_code_emit_helper1: body_code.size=5 true_test=true body_code.delay=0 (non-uniform delay)
2069 00a8 1d37          btfss   main__select__14___byte, main__select__14___bit
2070 00a9 28af          goto    main__15
2071                    ; # Clear the line:
2072                    ; line_number = 290
2073                    ;  call cursor_enqueue()
2074 00aa 2186          call    cursor_enqueue
2075                    ; line_number = 291
2076                    ;  call enqueue(data_write | (16 - 1), ' ')
2077                    ; Expression is strictly a constant
2078 00ab 301f          movlw   31
2079 00ac 00c3          movwf   enqueue__control
2080 00ad 3020          movlw   32
2081 00ae 21e5          call    enqueue
2082                    ; line_number = 292
2083                    ;  do_nothing
2084                    ; Recombine size1 = 0 || size2 = 0
2085   00af :   main__15:
2086                    ; code.delay=4294967295 back_code.delay=4294967295
2087                    ; <=bit_code_emit@symbol; sym=main__select__14 (data:00=>00 code:XX=>XX)
2088                    ; line_number = 288
2089                    ;  if command@2 done
2090                    ; line_number = 293
2091                    ; call cursor_enqueue()
2092 00af 2186          call    cursor_enqueue
2093 00b0 2918          goto    main__39
2094                    ; line_number = 294
2095                    ; case 1
2096   00b1 :   main__33:
2097                    ; # 1000 1xxx:
2098                    ; line_number = 296
2099                    ;  switch command & 7 start
2100 00b1 3000          movlw   main__25>>8
2101 00b2 008a          movwf   __pclath
2102 00b3 3007          movlw   7
2103 00b4 0537          andwf   main__command,w
2104 00b5 3eb7          addlw   main__25
2105 00b6 0082          movwf   __pcl
2106                    ; page_group 8
2107   00b7 :   main__25:
2108 00b7 28bf          goto    main__20
2109 00b8 28bf          goto    main__20
2110 00b9 28bf          goto    main__20
2111 00ba 28bf          goto    main__20
2112 00bb 28c7          goto    main__21
2113 00bc 28d0          goto    main__22
2114 00bd 28e1          goto    main__23
2115 00be 28e4          goto    main__24
2116                    ; line_number = 297
2117                    ; case 0, 1, 2, 3
2118   00bf :   main__20:
2119                    ; # 1000 10vb (Cursor Mode Set):
2120                    ; line_number = 299
2121                    ;  cursor_mode := command & cursor_mode_mask
2122 00bf 3003          movlw   3
2123 00c0 0537          andwf   main__command,w
2124 00c1 00a7          movwf   cursor_mode
2125                    ; line_number = 300
2126                    ;  call enqueue(command_write, 0xc | cursor_mode)
2127 00c2 01c3          clrf    enqueue__control
2128 00c3 300c          movlw   12
2129 00c4 0427          iorwf   cursor_mode,w
2130 00c5 21e5          call    enqueue
2131 00c6 28e6          goto    main__26
2132                    ; line_number = 301
2133                    ; case 4
2134   00c7 :   main__21:
2135                    ; # 1000 1100 (Cursor Mode Read):
2136                    ; line_number = 303
2137                    ;  temporary := cursor_mode
2138 00c7 0827          movf    cursor_mode,w
2139 00c8 00b8          movwf   main__temporary
2140                    ; line_number = 304
2141                    ;  if debug_mode start
2142                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2143                    ; CASE: True.size=1 False.size=0
2144 00c9 1a05          btfsc   debug_mode___byte, debug_mode___bit
2145                    ; line_number = 305
2146                    ; temporary@2 := 1
2147 00000038 = main__select__16___byte equ main__temporary
2148 00000002 = main__select__16___bit equ 2
2149 00ca 1538          bsf     main__select__16___byte, main__select__16___bit
2150                    ; Recombine size1 = 0 || size2 = 0
2151                    ; code.delay=4294967295 back_code.delay=4294967295
2152                    ; <=bit_code_emit@symbol; sym=debug_mode (data:00=>00 code:XX=>XX)
2153                    ; line_number = 304
2154                    ;  if debug_mode done
2155                    ; line_number = 306
2156                    ; if lines34 start
2157                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2158                    ; CASE: True.size=1 False.size=0
2159 00cb 1a05          btfsc   lines34___byte, lines34___bit
2160                    ; line_number = 307
2161                    ; temporary@3 := 1
2162 00000038 = main__select__17___byte equ main__temporary
2163 00000003 = main__select__17___bit equ 3
2164 00cc 15b8          bsf     main__select__17___byte, main__select__17___bit
2165                    ; Recombine size1 = 0 || size2 = 0
2166                    ; code.delay=4294967295 back_code.delay=4294967295
2167                    ; <=bit_code_emit@symbol; sym=lines34 (data:00=>00 code:XX=>XX)
2168                    ; line_number = 306
2169                    ; if lines34 done
2170                    ; line_number = 308
2171                    ; call byte_put(temporary)
2172 00cd 0838          movf    main__temporary,w
2173 00ce 230d          call    byte_put
2174 00cf 28e6          goto    main__26
2175                    ; line_number = 309
2176                    ; case 5
2177   00d0 :   main__22:
2178                    ; # 1000 1101 (Character Read):
2179                    ; line_number = 311
2180                    ;  temporary := lcd_read()
2181 00d0 21c8          call    lcd_read
2182 00d1 00b8          movwf   main__temporary
2183                    ; line_number = 312
2184                    ;  call byte_put(temporary)
2185 00d2 0838          movf    main__temporary,w
2186 00d3 230d          call    byte_put
2187                    ; line_number = 313
2188                    ;  if column = 15 start
2189                    ; Left minus Right
2190 00d4 30f1          movlw   241
2191 00d5 0725          addwf   column,w
2192                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2193                    ; CASE: true.size>1 false.size=1; no GOTO's
2194 00d6 1d03          btfss   __z___byte, __z___bit
2195 00d7 28de          goto    main__18
2196                    ; line_number = 314
2197                    ; line := (line + 1) & line_mask
2198 00d8 0a26          incf    line,w
2199 00d9 3903          andlw   3
2200 00da 00a6          movwf   line
2201                    ; line_number = 315
2202                    ;  column := 0
2203 00db 3000          movlw   0
2204 00dc 00a5          movwf   column
2205 00dd 28df          goto    main__19
2206   00de :   main__18:
2207                    ; line_number = 317
2208                    ; column := column + 1
2209 00de 0aa5          incf    column,f
2210   00df :   main__19:
2211                    ; code.delay=4294967295 back_code.delay=4294967295
2212                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
2213                    ; line_number = 313
2214                    ;  if column = 15 done
2215                    ; line_number = 318
2216                    ; call cursor_enqueue()
2217 00df 2186          call    cursor_enqueue
2218 00e0 28e6          goto    main__26
2219                    ; line_number = 319
2220                    ; case 6
2221   00e1 :   main__23:
2222                    ; # 1000 1110 (Line Read):
2223                    ; line_number = 321
2224                    ;  call byte_put(line)
2225 00e1 0826          movf    line,w
2226 00e2 230d          call    byte_put
2227 00e3 28e6          goto    main__26
2228                    ; line_number = 322
2229                    ; case 7
2230   00e4 :   main__24:
2231                    ; # 1000 1111 (Column Read):
2232                    ; line_number = 324
2233                    ;  call byte_put(column)
2234 00e4 0825          movf    column,w
2235 00e5 230d          call    byte_put
2236   00e6 :   main__26:
2237                    ; switch end:(data:00=>00 code:XX=>XX)
2238                    ; line_number = 296
2239                    ;  switch command & 7 done
2240 00e6 2918          goto    main__39
2241                    ; line_number = 325
2242                    ; case 2, 3
2243   00e7 :   main__34:
2244                    ; # 1001 xxxx (Column Set):
2245                    ; line_number = 327
2246                    ;  column := command & column_mask
2247 00e7 300f          movlw   15
2248 00e8 0537          andwf   main__command,w
2249 00e9 00a5          movwf   column
2250                    ; line_number = 328
2251                    ;  call cursor_enqueue()
2252 00ea 2186          call    cursor_enqueue
2253 00eb 2918          goto    main__39
2254                    ; line_number = 329
2255                    ; case 4, 5
2256   00ec :   main__35:
2257                    ; # 1010 xxxx (Column Set and Clear):
2258                    ; line_number = 331
2259                    ;  column := column & column_mask
2260 00ec 300f          movlw   15
2261 00ed 05a5          andwf   column,f
2262                    ; line_number = 332
2263                    ;  call cursor_enqueue()
2264 00ee 2186          call    cursor_enqueue
2265                    ; line_number = 333
2266                    ;  call enqueue(data_write | (16 - column), ' ')
2267 00ef 0925          comf    column,w
2268 00f0 3e11          addlw   17
2269 00f1 3810          iorlw   16
2270 00f2 00c3          movwf   enqueue__control
2271 00f3 3020          movlw   32
2272 00f4 21e5          call    enqueue
2273                    ; line_number = 334
2274                    ;  call cursor_enqueue()
2275 00f5 2186          call    cursor_enqueue
2276 00f6 2918          goto    main__39
2277                    ; line_number = 335
2278                    ; case 6
2279   00f7 :   main__36:
2280                    ; # 1011 0xxx:
2281                    ; line_number = 337
2282                    ;  switch command & 7 start
2283                    ; line_number = 338
2284                    ; case_maximum 7
2285 00f7 3001          movlw   main__30>>8
2286 00f8 008a          movwf   __pclath
2287 00f9 3007          movlw   7
2288 00fa 0537          andwf   main__command,w
2289 00fb 3e00          addlw   main__30
2290 00fc 0082          movwf   __pcl
2291                    ; page_group 8
2292                    ; Add 3 NOP's until start of new page 
2293 00fd 0000          nop     
2294 00fe 0000          nop     
2295 00ff 0000          nop     
2296   0100 :   main__30:
2297 0100 2908          goto    main__27
2298 0101 290c          goto    main__28
2299 0102 290f          goto    main__29
2300 0103 2918          goto    main__31
2301 0104 2918          goto    main__31
2302 0105 2918          goto    main__31
2303 0106 2918          goto    main__31
2304 0107 2918          goto    main__31
2305                    ; line_number = 339
2306                    ; case 0
2307   0108 :   main__27:
2308                    ; # 1011 0000 (Set Font Address):
2309                    ; line_number = 341
2310                    ;  font_address := byte_get() & 0x1f
2311 0108 22e4          call    byte_get
2312 0109 391f          andlw   31
2313 010a 00a8          movwf   font_address
2314 010b 2918          goto    main__31
2315                    ; line_number = 342
2316                    ; case 1
2317   010c :   main__28:
2318                    ; # 1011 0001 (Read Font Address):
2319                    ; line_number = 344
2320                    ;  call byte_put(font_address)
2321 010c 0828          movf    font_address,w
2322 010d 230d          call    byte_put
2323 010e 2918          goto    main__31
2324                    ; line_number = 345
2325                    ; case 2
2326   010f :   main__29:
2327                    ; # 1011 0010 (Read Font Line):
2328                    ; # Set the font address, and access font memory:
2329                    ; line_number = 348
2330                    ;  call lcd_command(0x40 | font_address)
2331 010f 3040          movlw   64
2332 0110 0428          iorwf   font_address,w
2333 0111 219c          call    lcd_command
2334                    ; # Read the data:
2335                    ; line_number = 350
2336                    ;  temporary := lcd_read()
2337 0112 21c8          call    lcd_read
2338 0113 00b8          movwf   main__temporary
2339                    ; # Force back to display memory:
2340                    ; line_number = 352
2341                    ;  call cursor_position()
2342 0114 2191          call    cursor_position
2343                    ; line_number = 353
2344                    ;  font_address := font_address + 1
2345 0115 0aa8          incf    font_address,f
2346                    ; # Ship the data back:
2347                    ; line_number = 355
2348                    ;  call byte_put(temporary)
2349 0116 0838          movf    main__temporary,w
2350 0117 230d          call    byte_put
2351   0118 :   main__31:
2352                    ; switch end:(data:00=>00 code:XX=>XX)
2353                    ; line_number = 337
2354                    ;  switch command & 7 done
2355   0118 :   main__39:
2356                    ; switch end:(data:00=>00 code:XX=>XX)
2357                    ; line_number = 282
2358                    ;  switch (command >> 3) & 7 done
2359 0118 2962          goto    main__61
2360                    ; line_number = 356
2361                    ; case 3
2362   0119 :   main__58:
2363                    ; # 11xx xxxx:
2364                    ; line_number = 358
2365                    ;  switch (command >> 3) & 7 start
2366 0119 3001          movlw   main__52>>8
2367 011a 008a          movwf   __pclath
2368 0000004b = main__53 equ globals___0+43
2369 011b 0c37          rrf     main__command,w
2370 011c 00cb          movwf   main__53
2371 011d 0ccb          rrf     main__53,f
2372 011e 0c4b          rrf     main__53,w
2373 011f 3907          andlw   7
2374 0120 3e22          addlw   main__52
2375 0121 0082          movwf   __pcl
2376                    ; page_group 8
2377   0122 :   main__52:
2378 0122 292a          goto    main__50
2379 0123 292a          goto    main__50
2380 0124 292a          goto    main__50
2381 0125 292a          goto    main__50
2382 0126 2962          goto    main__54
2383 0127 2962          goto    main__54
2384 0128 2962          goto    main__54
2385 0129 2936          goto    main__51
2386                    ; line_number = 359
2387                    ; case 0, 1, 2, 3
2388   012a :   main__50:
2389                    ; # 110p pppp (Write Font Line):
2390                    ; # Set font address and access font memory:
2391                    ; line_number = 362
2392                    ;  call enqueue(command_write, 0x40 | font_address)
2393 012a 01c3          clrf    enqueue__control
2394 012b 3040          movlw   64
2395 012c 0428          iorwf   font_address,w
2396 012d 21e5          call    enqueue
2397                    ; # Write one line of font memory:
2398                    ; line_number = 364
2399                    ;  call enqueue(data_write, command & 0x1f)
2400 012e 3010          movlw   16
2401 012f 00c3          movwf   enqueue__control
2402 0130 301f          movlw   31
2403 0131 0537          andwf   main__command,w
2404 0132 21e5          call    enqueue
2405                    ; # Force back to display memory:
2406                    ; line_number = 366
2407                    ;  call cursor_enqueue()
2408 0133 2186          call    cursor_enqueue
2409                    ; line_number = 367
2410                    ;  font_address := font_address + 1
2411 0134 0aa8          incf    font_address,f
2412 0135 2962          goto    main__54
2413                    ; line_number = 368
2414                    ; case 7
2415   0136 :   main__51:
2416                    ; # 1111 1xxx:
2417                    ; line_number = 370
2418                    ;  switch command & 7 start
2419 0136 3001          movlw   main__48>>8
2420 0137 008a          movwf   __pclath
2421 0138 3007          movlw   7
2422 0139 0537          andwf   main__command,w
2423 013a 3e3c          addlw   main__48
2424 013b 0082          movwf   __pcl
2425                    ; page_group 8
2426   013c :   main__48:
2427 013c 2944          goto    main__40
2428 013d 2947          goto    main__41
2429 013e 294a          goto    main__42
2430 013f 294f          goto    main__43
2431 0140 2952          goto    main__44
2432 0141 2957          goto    main__45
2433 0142 295a          goto    main__46
2434 0143 295f          goto    main__47
2435                    ; line_number = 371
2436                    ; case 0
2437   0144 :   main__40:
2438                    ; This case body wants this bit set
2439 0144 1683          bsf     __rp0___byte, __rp0___bit
2440                    ; # 1111 1000 (Clock Decrement):
2441                    ; #_osccal := _osccal - _osccal_lsb
2442                    ; line_number = 374
2443                    ;  _osctune := _osctune - _osccal_lsb
2444 0145 0390          decf    _osctune,f
2445 0146 2962          goto    main__49
2446                    ; line_number = 375
2447                    ; case 1
2448   0147 :   main__41:
2449                    ; This case body wants this bit set
2450 0147 1683          bsf     __rp0___byte, __rp0___bit
2451                    ; # 1111 1001 (Clock Increment):
2452                    ; #_osccal := _osccal + _osccal_lsb
2453                    ; line_number = 378
2454                    ;  _osctune := _osctune + _osccal_lsb
2455 0148 0a90          incf    _osctune,f
2456 0149 2962          goto    main__49
2457                    ; line_number = 379
2458                    ; case 2
2459   014a :   main__42:
2460                    ; This case body wants this bit set
2461 014a 1683          bsf     __rp0___byte, __rp0___bit
2462                    ; # 1111 1010 (Clock Read):
2463                    ; #call byte_put(_osccal)
2464                    ; line_number = 382
2465                    ;  call byte_put(_osctune)
2466 014b 0810          movf    _osctune,w
2467 014c 1283          bcf     __rp0___byte, __rp0___bit
2468 014d 230d          call    byte_put
2469 014e 2962          goto    main__49
2470                    ; line_number = 383
2471                    ; case 3
2472   014f :   main__43:
2473                    ; # 1111 1011 (Clock Pulse):
2474                    ; line_number = 385
2475                    ;  call byte_put(0)
2476 014f 3000          movlw   0
2477 0150 230d          call    byte_put
2478 0151 2962          goto    main__49
2479                    ; line_number = 386
2480                    ; case 4
2481   0152 :   main__44:
2482                    ; # 1111 1100 (ID Next):
2483                    ; line_number = 388
2484                    ;  call byte_put(id_get(id_index))
2485 0152 0839          movf    main__id_index,w
2486 0153 2242          call    id_get
2487 0154 230d          call    byte_put
2488                    ; line_number = 389
2489                    ;  id_index := id_index + 1
2490 0155 0ab9          incf    main__id_index,f
2491 0156 2962          goto    main__49
2492                    ; line_number = 390
2493                    ; case 5
2494   0157 :   main__45:
2495                    ; # 1111 1101 (ID Reset):
2496                    ; line_number = 392
2497                    ;  id_index := 0
2498 0157 3000          movlw   0
2499 0158 00b9          movwf   main__id_index
2500 0159 2962          goto    main__49
2501                    ; line_number = 393
2502                    ; case 6
2503   015a :   main__46:
2504                    ; # 1111 1110 (Glitch Read):
2505                    ; line_number = 395
2506                    ;  call byte_put(glitch)
2507 015a 083a          movf    main__glitch,w
2508 015b 230d          call    byte_put
2509                    ; line_number = 396
2510                    ;  glitch := 0
2511 015c 3000          movlw   0
2512 015d 00ba          movwf   main__glitch
2513 015e 2962          goto    main__49
2514                    ; line_number = 397
2515                    ; case 7
2516   015f :   main__47:
2517                    ; # 1111 1111 (Glitch):
2518                    ; line_number = 399
2519                    ;  if glitch != 0xff start
2520                    ; Left minus Right
2521 015f 0a3a          incf    main__glitch,w
2522                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2523                    ; CASE: true_code.size=0 && false_code.size=1
2524 0160 1d03          btfss   __z___byte, __z___bit
2525                    ; line_number = 400
2526                    ; glitch := glitch + 1
2527 0161 0aba          incf    main__glitch,f
2528            
2529            
2530                    ; Recombine size1 = 0 || size2 = 0
2531                    ; code.delay=4294967295 back_code.delay=4294967295
2532                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
2533                    ; line_number = 399
2534                    ;  if glitch != 0xff done
2535   0162 :   main__49:
2536                    ; switch end:(data:00=>0? code:XX=>XX)
2537                    ; line_number = 370
2538                    ;  switch command & 7 done
2539   0162 :   main__54:
2540                    ; switch end:(data:00=>0? code:XX=>XX)
2541                    ; line_number = 358
2542                    ;  switch (command >> 3) & 7 done
2543   0162 :   main__61:
2544                    ; switch end:(data:00=>0? code:XX=>XX)
2545                    ; line_number = 235
2546                    ;  switch command >> 6 done
2547                    ; line_number = 200
2548                    ;  loop_forever wrap-up
2549                    ; Need to adjust code banks to match front of loop
2550 0162 1283          bcf     __rp0___byte, __rp0___bit
2551 0163 2835          goto    main__1
2552                    ; line_number = 200
2553                    ;  loop_forever done
2554                    ; delay after procedure statements=non-uniform
2555            
2556            
2557            
2558            
2559                    ; line_number = 403
2560                    ; procedure line_put
2561   0164 :   line_put:
2562                    ; Last argument is sitting in W; save into argument variable
2563 0164 00bc          movwf   line_put__character
2564                    ; delay=4294967295
2565                    ; line_number = 404
2566                    ; argument new_line byte
2567 0000003b = line_put__new_line equ globals___0+27
2568                    ; line_number = 405
2569                    ; argument character byte
2570 0000003c = line_put__character equ globals___0+28
2571                    ; line_number = 406
2572                    ;  returns_nothing
2573            
2574                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
2575                    ; line_number = 408
2576                    ;  line := new_line
2577 0165 083b          movf    line_put__new_line,w
2578 0166 00a6          movwf   line
2579                    ; line_number = 409
2580                    ;  column := 0
2581 0167 3000          movlw   0
2582 0168 00a5          movwf   column
2583                    ; line_number = 410
2584                    ;  call cursor_position()
2585 0169 2191          call    cursor_position
2586                    ; line_number = 411
2587                    ;  loop_exactly 16 start
2588 0000004c = line_put__1 equ globals___0+44
2589 016a 3010          movlw   16
2590 016b 00cc          movwf   line_put__1
2591   016c :   line_put__2:
2592                    ; line_number = 412
2593                    ; call lcd_character_put(character)
2594 016c 083c          movf    line_put__character,w
2595 016d 21b2          call    lcd_character_put
2596            
2597            
2598                    ; line_number = 411
2599                    ;  loop_exactly 16 wrap-up
2600 016e 0bcc          decfsz  line_put__1,f
2601 016f 296c          goto    line_put__2
2602                    ; line_number = 411
2603                    ;  loop_exactly 16 done
2604                    ; delay after procedure statements=non-uniform
2605                    ; Implied return
2606 0170 3400          retlw   0
2607            
2608            
2609            
2610            
2611                    ; line_number = 415
2612                    ; procedure character_put
2613   0171 :   character_put:
2614                    ; Last argument is sitting in W; save into argument variable
2615 0171 00bd          movwf   character_put__character
2616                    ; delay=4294967295
2617                    ; line_number = 416
2618                    ; argument character byte
2619 0000003d = character_put__character equ globals___0+29
2620                    ; line_number = 417
2621                    ;  returns_nothing
2622            
2623                    ; # This procedure will output {character} to the display
2624                    ; # and update the {line} and {position} global variables.
2625                    ; # If the cursor is in the column 15, it is either kept
2626                    ; # there (normal mode) or advanced to the next line in column
2627                    ; # 0 (debug mode).  This procedure enqueues a total of three
2628                    ; # commands onto the command queue.
2629            
2630                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
2631                    ; line_number = 426
2632                    ;  call cursor_enqueue()
2633 0172 2186          call    cursor_enqueue
2634                    ; line_number = 427
2635                    ;  call enqueue(data_write, character)
2636 0173 3010          movlw   16
2637 0174 00c3          movwf   enqueue__control
2638 0175 083d          movf    character_put__character,w
2639 0176 21e5          call    enqueue
2640                    ; line_number = 428
2641                    ;  if column = column_mask start
2642                    ; Left minus Right
2643 0177 30f1          movlw   241
2644 0178 0725          addwf   column,w
2645                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2646                    ; CASE: true.size>1 false.size=1; no GOTO's
2647 0179 1d03          btfss   __z___byte, __z___bit
2648 017a 2983          goto    character_put__2
2649                    ; line_number = 429
2650                    ; if !debug_mode start
2651                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2652                    ; CASE: true.size=0 && false.size>1
2653                    ; bit_code_emit_helper1: body_code.size=5 true_test=false body_code.delay=0 (non-uniform delay)
2654 017b 1a05          btfsc   debug_mode___byte, debug_mode___bit
2655 017c 2982          goto    character_put__1
2656                    ; # Advance to next line:
2657                    ; line_number = 431
2658                    ;  column := 0
2659 017d 3000          movlw   0
2660 017e 00a5          movwf   column
2661                    ; line_number = 432
2662                    ;  line := (line + 1) & line_mask
2663 017f 0a26          incf    line,w
2664 0180 3903          andlw   3
2665 0181 00a6          movwf   line
2666   0182 :   character_put__1:
2667                    ; Recombine size1 = 0 || size2 = 0
2668                    ; code.delay=4294967295 back_code.delay=4294967295
2669                    ; <=bit_code_emit@symbol; sym=debug_mode (data:00=>00 code:XX=>XX)
2670                    ; line_number = 429
2671                    ; if !debug_mode done
2672                    ; # else stay put:
2673 0182 2984          goto    character_put__3
2674   0183 :   character_put__2:
2675                    ; # Advance to next column:
2676                    ; line_number = 436
2677                    ;  column := column + 1
2678 0183 0aa5          incf    column,f
2679   0184 :   character_put__3:
2680                    ; code.delay=4294967295 back_code.delay=4294967295
2681                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
2682                    ; line_number = 428
2683                    ;  if column = column_mask done
2684                    ; line_number = 437
2685                    ; call cursor_enqueue()
2686 0184 2186          call    cursor_enqueue
2687                    ; # A total of 3 commands are enqueued:
2688            
2689            
2690                    ; delay after procedure statements=non-uniform
2691                    ; Implied return
2692 0185 3400          retlw   0
2693            
2694            
2695            
2696            
2697                    ; line_number = 441
2698                    ; procedure cursor_enqueue
2699   0186 :   cursor_enqueue:
2700                    ; arguments_none
2701                    ; line_number = 443
2702                    ;  returns_nothing
2703            
2704                    ; # This procedure will ensure that a command that forces the cursor
2705                    ; # to the correct location specified by the global variables {line}
2706                    ; # and {column}.
2707            
2708                    ; line_number = 449
2709                    ;  local command byte
2710 0000003e = cursor_enqueue__command equ globals___0+30
2711            
2712                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
2713                    ; line_number = 451
2714                    ;  command := 0x80
2715 0186 3080          movlw   128
2716 0187 00be          movwf   cursor_enqueue__command
2717                    ; line_number = 452
2718                    ;  if line@0 start
2719 00000026 = cursor_enqueue__select__1___byte equ line
2720 00000000 = cursor_enqueue__select__1___bit equ 0
2721                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2722                    ; CASE: True.size=1 False.size=0
2723 0188 1826          btfsc   cursor_enqueue__select__1___byte, cursor_enqueue__select__1___bit
2724                    ; line_number = 453
2725                    ; command := command | 0x40
2726 0189 173e          bsf     cursor_enqueue__command, 6
2727                    ; Recombine size1 = 0 || size2 = 0
2728                    ; code.delay=4294967295 back_code.delay=4294967295
2729                    ; <=bit_code_emit@symbol; sym=cursor_enqueue__select__1 (data:00=>00 code:XX=>XX)
2730                    ; line_number = 452
2731                    ;  if line@0 done
2732                    ; line_number = 454
2733                    ; if line@1 start
2734 00000026 = cursor_enqueue__select__2___byte equ line
2735 00000001 = cursor_enqueue__select__2___bit equ 1
2736                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2737                    ; CASE: True.size=1 False.size=0
2738 018a 18a6          btfsc   cursor_enqueue__select__2___byte, cursor_enqueue__select__2___bit
2739                    ; line_number = 455
2740                    ; command := command | 0x10
2741 018b 163e          bsf     cursor_enqueue__command, 4
2742                    ; Recombine size1 = 0 || size2 = 0
2743                    ; code.delay=4294967295 back_code.delay=4294967295
2744                    ; <=bit_code_emit@symbol; sym=cursor_enqueue__select__2 (data:00=>00 code:XX=>XX)
2745                    ; line_number = 454
2746                    ; if line@1 done
2747                    ; line_number = 456
2748                    ; call enqueue(command_write, command | column)
2749 018c 01c3          clrf    enqueue__control
2750 018d 083e          movf    cursor_enqueue__command,w
2751 018e 0425          iorwf   column,w
2752 018f 21e5          call    enqueue
2753            
2754            
2755                    ; delay after procedure statements=non-uniform
2756                    ; Implied return
2757 0190 3400          retlw   0
2758            
2759            
2760            
2761            
2762                    ; line_number = 459
2763                    ; procedure cursor_position
2764   0191 :   cursor_position:
2765                    ; arguments_none
2766                    ; line_number = 461
2767                    ;  returns_nothing
2768            
2769                    ; # This prodedure will force the cursor to the location specified
2770                    ; # by the globals variables {line} and {position}.
2771            
2772                    ; line_number = 466
2773                    ;  local command byte
2774 0000003f = cursor_position__command equ globals___0+31
2775            
2776                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
2777                    ; line_number = 468
2778                    ;  command := 0x80
2779 0191 3080          movlw   128
2780 0192 00bf          movwf   cursor_position__command
2781                    ; line_number = 469
2782                    ;  if line@0 start
2783 00000026 = cursor_position__select__1___byte equ line
2784 00000000 = cursor_position__select__1___bit equ 0
2785                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2786                    ; CASE: True.size=1 False.size=0
2787 0193 1826          btfsc   cursor_position__select__1___byte, cursor_position__select__1___bit
2788                    ; line_number = 470
2789                    ; command := command | 0x40
2790 0194 173f          bsf     cursor_position__command, 6
2791                    ; Recombine size1 = 0 || size2 = 0
2792                    ; code.delay=4294967295 back_code.delay=4294967295
2793                    ; <=bit_code_emit@symbol; sym=cursor_position__select__1 (data:00=>00 code:XX=>XX)
2794                    ; line_number = 469
2795                    ;  if line@0 done
2796                    ; line_number = 471
2797                    ; if line@1 start
2798 00000026 = cursor_position__select__2___byte equ line
2799 00000001 = cursor_position__select__2___bit equ 1
2800                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
2801                    ; CASE: True.size=1 False.size=0
2802 0195 18a6          btfsc   cursor_position__select__2___byte, cursor_position__select__2___bit
2803                    ; line_number = 472
2804                    ; command := command | 0x10
2805 0196 163f          bsf     cursor_position__command, 4
2806                    ; Recombine size1 = 0 || size2 = 0
2807                    ; code.delay=4294967295 back_code.delay=4294967295
2808                    ; <=bit_code_emit@symbol; sym=cursor_position__select__2 (data:00=>00 code:XX=>XX)
2809                    ; line_number = 471
2810                    ; if line@1 done
2811                    ; line_number = 473
2812                    ; command := command | column
2813 0197 0825          movf    column,w
2814 0198 04bf          iorwf   cursor_position__command,f
2815                    ; line_number = 474
2816                    ;  call lcd_command(command)
2817 0199 083f          movf    cursor_position__command,w
2818 019a 219c          call    lcd_command
2819            
2820            
2821                    ; delay after procedure statements=non-uniform
2822                    ; Implied return
2823 019b 3400          retlw   0
2824            
2825            
2826            
2827            
2828                    ; line_number = 477
2829                    ; procedure lcd_command
2830   019c :   lcd_command:
2831                    ; Last argument is sitting in W; save into argument variable
2832 019c 00c0          movwf   lcd_command__command
2833                    ; delay=1
2834                    ; line_number = 478
2835                    ; argument command byte
2836 00000040 = lcd_command__command equ globals___0+32
2837                    ; line_number = 479
2838                    ;  returns_nothing
2839                    ; line_number = 480
2840                    ;  exact_delay 52 * microsecond
2841            
2842                    ; # This procedure will strobe {command} into the LCD controller
2843                    ; # as two 4-bit nibbles.  The procedure delays by 39uS to ensure
2844                    ; # the command has time to be digested by the LCD controller.
2845            
2846                    ; # Send high nibble (RW=0 & RS=0):
2847                    ; #FIXME: Shouldn't need "& 0xf" because ">> 4" should do it!!!
2848                    ; before procedure statements delay=1, bit states=(data:00=>00 code:XX=>XX)
2849                    ; line_number = 488
2850                    ;  _portc := (command >> 4) & 0xf
2851                    ; Delay at assignment is 1
2852 0000004d = lcd_command__1 equ globals___0+45
2853 019d 0e40          swapf   lcd_command__command,w
2854 019e 390f          andlw   15
2855 019f 0087          movwf   _portc
2856                    ; line_number = 489
2857                    ;  rw := 0
2858                    ; Delay at assignment is 4
2859 01a0 1105          bcf     rw___byte, rw___bit
2860                    ; line_number = 490
2861                    ;  rs := 0
2862                    ; Delay at assignment is 5
2863 01a1 1285          bcf     rs___byte, rs___bit
2864                    ; line_number = 491
2865                    ;  e := 1
2866                    ; Delay at assignment is 6
2867 01a2 1405          bsf     e___byte, e___bit
2868                    ; line_number = 492
2869                    ;  e := 0
2870                    ; Delay at assignment is 7
2871 01a3 1005          bcf     e___byte, e___bit
2872            
2873                    ; # Send low nibble (RW=0 & RS=0):
2874                    ; line_number = 495
2875                    ;  _portc := command & 0xf
2876                    ; Delay at assignment is 8
2877 01a4 300f          movlw   15
2878 01a5 0540          andwf   lcd_command__command,w
2879 01a6 0087          movwf   _portc
2880                    ; line_number = 496
2881                    ;  rw := 0
2882                    ; Delay at assignment is 11
2883 01a7 1105          bcf     rw___byte, rw___bit
2884                    ; line_number = 497
2885                    ;  rs := 0
2886                    ; Delay at assignment is 12
2887 01a8 1285          bcf     rs___byte, rs___bit
2888                    ; line_number = 498
2889                    ;  e := 1
2890                    ; Delay at assignment is 13
2891 01a9 1405          bsf     e___byte, e___bit
2892                    ; line_number = 499
2893                    ;  e := 0
2894                    ; Delay at assignment is 14
2895 01aa 1005          bcf     e___byte, e___bit
2896            
2897                    ; # Wait for the command to be digested:
2898                    ; # (RETURN instruction takes two cycles):
2899                    ; #delay 39 - 2
2900                    ; #	do_nothing
2901            
2902            
2903                    ; delay after procedure statements=15
2904                    ; Delay 87 cycles
2905                    ; Delay loop takes 21 * 4 = 84 cycles
2906 01ab 3015          movlw   21
2907   01ac :   lcd_command__2:
2908 01ac 3eff          addlw   255
2909 01ad 1d03          btfss   __z___byte, __z___bit
2910 01ae 29ac          goto    lcd_command__2
2911 01af 29b0          goto    lcd_command__3
2912   01b0 :   lcd_command__3:
2913 01b0 0000          nop     
2914                    ; Implied return
2915 01b1 3400          retlw   0
2916                    ; Final delay = 104
2917            
2918            
2919            
2920            
2921                    ; line_number = 507
2922                    ; procedure lcd_character_put
2923   01b2 :   lcd_character_put:
2924                    ; Last argument is sitting in W; save into argument variable
2925 01b2 00c1          movwf   lcd_character_put__character
2926                    ; delay=1
2927                    ; line_number = 508
2928                    ; argument character byte
2929 00000041 = lcd_character_put__character equ globals___0+33
2930                    ; line_number = 509
2931                    ;  returns_nothing
2932                    ; line_number = 510
2933                    ;  exact_delay 52 * microsecond
2934            
2935                    ; # This procedure will output {character} to the LCD display
2936                    ; # and move the cursor right by one.
2937            
2938                    ; # Send high nibble (RW=0 & RS=1):
2939                    ; #_portc := (character >> 4) | rs_mask
2940                    ; before procedure statements delay=1, bit states=(data:00=>00 code:XX=>XX)
2941                    ; line_number = 517
2942                    ;  _portc := character >> 4
2943                    ; Delay at assignment is 1
2944 01b3 0e41          swapf   lcd_character_put__character,w
2945 01b4 0087          movwf   _portc
2946 01b5 300f          movlw   15
2947 01b6 0587          andwf   _portc,f
2948                    ; line_number = 518
2949                    ;  rw := 0
2950                    ; Delay at assignment is 5
2951 01b7 1105          bcf     rw___byte, rw___bit
2952                    ; line_number = 519
2953                    ;  rs := 1
2954                    ; Delay at assignment is 6
2955 01b8 1685          bsf     rs___byte, rs___bit
2956                    ; line_number = 520
2957                    ;  e := 1
2958                    ; Delay at assignment is 7
2959 01b9 1405          bsf     e___byte, e___bit
2960                    ; line_number = 521
2961                    ;  e := 0
2962                    ; Delay at assignment is 8
2963 01ba 1005          bcf     e___byte, e___bit
2964            
2965                    ; # Send low nibble (RW=0 & RS=1):
2966                    ; #_portc := (character & 0xf) | rs_mask
2967                    ; line_number = 525
2968                    ;  _portc := character & 0xf
2969                    ; Delay at assignment is 9
2970 01bb 300f          movlw   15
2971 01bc 0541          andwf   lcd_character_put__character,w
2972 01bd 0087          movwf   _portc
2973                    ; line_number = 526
2974                    ;  rw := 0
2975                    ; Delay at assignment is 12
2976 01be 1105          bcf     rw___byte, rw___bit
2977                    ; line_number = 527
2978                    ;  rs := 1
2979                    ; Delay at assignment is 13
2980 01bf 1685          bsf     rs___byte, rs___bit
2981                    ; line_number = 528
2982                    ;  e := 1
2983                    ; Delay at assignment is 14
2984 01c0 1405          bsf     e___byte, e___bit
2985                    ; line_number = 529
2986                    ;  e := 0
2987                    ; Delay at assignment is 15
2988 01c1 1005          bcf     e___byte, e___bit
2989            
2990                    ; # Wait 39uS for the command to finish:
2991                    ; # (RETURN instruction takes two cycles):
2992                    ; #delay 39 - 2
2993                    ; #	do_nothing
2994            
2995            
2996                    ; delay after procedure statements=16
2997                    ; Delay 86 cycles
2998                    ; Delay loop takes 21 * 4 = 84 cycles
2999 01c2 3015          movlw   21
3000   01c3 :   lcd_character_put__1:
3001 01c3 3eff          addlw   255
3002 01c4 1d03          btfss   __z___byte, __z___bit
3003 01c5 29c3          goto    lcd_character_put__1
3004 01c6 29c7          goto    lcd_character_put__2
3005   01c7 :   lcd_character_put__2:
3006                    ; Implied return
3007 01c7 3400          retlw   0
3008                    ; Final delay = 104
3009            
3010            
3011            
3012            
3013                    ; line_number = 537
3014                    ; procedure lcd_read
3015   01c8 :   lcd_read:
3016                    ; arguments_none
3017                    ; line_number = 539
3018                    ;  returns byte
3019            
3020                    ; # Generic routine to read a byte from the LCD controller.
3021            
3022                    ; line_number = 543
3023                    ;  local result byte
3024 00000042 = lcd_read__result equ globals___0+34
3025            
3026                    ; # First, turn DB4-7 into inputs:
3027                    ; #_trisc := db4_mask | db5_mask | db6_mask | db7_mask
3028                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3029                    ; line_number = 547
3030                    ;  _trisc := trisc_mask | db47_mask
3031                    ; Expression is strictly a constant
3032 01c8 300f          movlw   15
3033 01c9 1683          bsf     __rp0___byte, __rp0___bit
3034 01ca 0087          movwf   _trisc
3035            
3036                    ; # Read high nibble:
3037                    ; #_portc := rs_mask | rw_mask
3038                    ; line_number = 551
3039                    ;  rs := 1
3040 01cb 1283          bcf     __rp0___byte, __rp0___bit
3041 01cc 1685          bsf     rs___byte, rs___bit
3042                    ; line_number = 552
3043                    ;  rw := 1
3044 01cd 1505          bsf     rw___byte, rw___bit
3045                    ; line_number = 553
3046                    ;  e := 1
3047 01ce 1405          bsf     e___byte, e___bit
3048                    ; line_number = 554
3049                    ;  delay 43 * microsecond start
3050                    ; Delay expression evaluates to 86
3051                    ; line_number = 555
3052                    ; do_nothing
3053                    ; Delay 86 cycles
3054                    ; Delay loop takes 21 * 4 = 84 cycles
3055 01cf 3015          movlw   21
3056   01d0 :   lcd_read__1:
3057 01d0 3eff          addlw   255
3058 01d1 1d03          btfss   __z___byte, __z___bit
3059 01d2 29d0          goto    lcd_read__1
3060 01d3 29d4          goto    lcd_read__2
3061   01d4 :   lcd_read__2:
3062                    ; line_number = 554
3063                    ;  delay 43 * microsecond done
3064                    ; line_number = 556
3065                    ; result := _portc << 4
3066 01d4 0e07          swapf   _portc,w
3067 01d5 00c2          movwf   lcd_read__result
3068 01d6 30f0          movlw   240
3069 01d7 05c2          andwf   lcd_read__result,f
3070                    ; line_number = 557
3071                    ;  e := 0
3072 01d8 1005          bcf     e___byte, e___bit
3073            
3074                    ; # Read low nibble:
3075                    ; #_portc := rs_mask | rw_mask
3076                    ; line_number = 561
3077                    ;  rs := 1
3078 01d9 1685          bsf     rs___byte, rs___bit
3079                    ; line_number = 562
3080                    ;  rw := 1
3081 01da 1505          bsf     rw___byte, rw___bit
3082                    ; line_number = 563
3083                    ;  e := 1
3084 01db 1405          bsf     e___byte, e___bit
3085                    ; line_number = 564
3086                    ;  result := result | (_portc & 0xf)
3087 01dc 300f          movlw   15
3088 01dd 0507          andwf   _portc,w
3089 01de 04c2          iorwf   lcd_read__result,f
3090                    ; line_number = 565
3091                    ;  e := 0
3092 01df 1005          bcf     e___byte, e___bit
3093            
3094                    ; # Return DB4-7 to outputs:
3095                    ; #_trisc := 0
3096                    ; line_number = 569
3097                    ;  _trisc := trisc_mask
3098 01e0 1683          bsf     __rp0___byte, __rp0___bit
3099 01e1 0187          clrf    _trisc
3100            
3101                    ; line_number = 571
3102                    ;  return result start
3103                    ; line_number = 571
3104 01e2 1283          bcf     __rp0___byte, __rp0___bit
3105 01e3 0842          movf    lcd_read__result,w
3106 01e4 0008          return  
3107                    ; line_number = 571
3108                    ;  return result done
3109            
3110            
3111                    ; delay after procedure statements=non-uniform
3112            
3113            
3114            
3115            
3116                    ; line_number = 574
3117                    ; procedure enqueue
3118   01e5 :   enqueue:
3119                    ; Last argument is sitting in W; save into argument variable
3120 01e5 00c4          movwf   enqueue__data
3121                    ; delay=4294967295
3122                    ; line_number = 575
3123                    ; argument control byte
3124 00000043 = enqueue__control equ globals___0+35
3125                    ; line_number = 576
3126                    ; argument data byte
3127 00000044 = enqueue__data equ globals___0+36
3128                    ; line_number = 577
3129                    ;  returns_nothing
3130            
3131                    ; #: This procedure will enqueue {control} and {data} onto the
3132                    ; #, command queue.  It is your responsibility to ensure that
3133                    ; #, the there is enough space in the queue.
3134            
3135                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3136                    ; line_number = 583
3137                    ;  data_queue[available] := data
3138                    ; index_fsr_first
3139 01e6 0836          movf    available,w
3140 01e7 3e2d          addlw   data_queue
3141 01e8 0084          movwf   __fsr
3142 01e9 0844          movf    enqueue__data,w
3143 01ea 0080          movwf   __indf
3144                    ; line_number = 584
3145                    ;  control_queue[available] := control
3146                    ; index_fsr_first
3147 01eb 0836          movf    available,w
3148 01ec 3e31          addlw   control_queue
3149 01ed 0084          movwf   __fsr
3150 01ee 0843          movf    enqueue__control,w
3151 01ef 0080          movwf   __indf
3152                    ; line_number = 585
3153                    ;  available := available + 1
3154 01f0 0ab6          incf    available,f
3155            
3156            
3157                    ; delay after procedure statements=non-uniform
3158                    ; Implied return
3159 01f1 3400          retlw   0
3160            
3161            
3162            
3163            
3164                    ; line_number = 588
3165                    ; procedure lcd_delay
3166   01f2 :   lcd_delay:
3167                    ; Last argument is sitting in W; save into argument variable
3168 01f2 00c5          movwf   lcd_delay__amount
3169                    ; delay=4294967295
3170                    ; line_number = 589
3171                    ; argument amount byte
3172 00000045 = lcd_delay__amount equ globals___0+37
3173                    ; line_number = 590
3174                    ;  returns_nothing
3175            
3176                    ; # This procedure is designed to delay for 100uS times {amount}.
3177            
3178                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3179                    ; line_number = 594
3180                    ;  loop_exactly amount start
3181 0000004e = lcd_delay__1 equ globals___0+46
3182 01f3 0845          movf    lcd_delay__amount,w
3183 01f4 00ce          movwf   lcd_delay__1
3184   01f5 :   lcd_delay__2:
3185                    ; line_number = 595
3186                    ; delay (100 * microsecond) - 3 start
3187                    ; Delay expression evaluates to 197
3188                    ; line_number = 596
3189                    ; do_nothing
3190            
3191            
3192                    ; Delay 197 cycles
3193                    ; Delay loop takes 49 * 4 = 196 cycles
3194 01f5 3031          movlw   49
3195   01f6 :   lcd_delay__3:
3196 01f6 3eff          addlw   255
3197 01f7 1d03          btfss   __z___byte, __z___bit
3198 01f8 29f6          goto    lcd_delay__3
3199 01f9 0000          nop     
3200                    ; line_number = 595
3201                    ; delay (100 * microsecond) - 3 done
3202                    ; line_number = 594
3203                    ;  loop_exactly amount wrap-up
3204 01fa 0bce          decfsz  lcd_delay__1,f
3205 01fb 29f5          goto    lcd_delay__2
3206                    ; line_number = 594
3207                    ;  loop_exactly amount done
3208                    ; delay after procedure statements=non-uniform
3209                    ; Implied return
3210 01fc 3400          retlw   0
3211            
3212            
3213            
3214            
3215                    ; line_number = 599
3216                    ; procedure lcd_init
3217   01fd :   lcd_init:
3218                    ; arguments_none
3219                    ; line_number = 601
3220                    ;  returns_nothing
3221            
3222                    ; # The LCD needs to be initialized into 4 bit mode and then
3223                    ; # we can write letters to it. Note that the LCD is ALWAYS 
3224                    ; # in write mode, no need to check to see if its busy, I just
3225                    ; # wait and assume it isn't.
3226                    ; #
3227                    ; # According to the SAMSUNG data sheet, you first have to
3228                    ; # wait 30+ mS to insure the display is "stable" after Vcc is
3229                    ; # applied. Then the follow a specific sequence puts it into
3230                    ; # "4 bit" mode.  However, I've noticed they assume that the
3231                    ; # LCD is already in 8 bit mode, which it won't be following
3232                    ; # a warm restart (resetting the PIC).  Further, if you ever
3233                    ; # get "out of sync" and start sending the low nibble and then
3234                    ; # the high nibble all heck breaks loose. So the INIT function
3235                    ; # actually does three things:
3236                    ; #	1) It waits 40mS for the display to initialize just
3237                    ; #	   in case this was a power up event.
3238                    ; #	2) Next it programs the display into 8 bit mode on
3239                    ; #	   purpose. Even if it was in 4 bit mode already we
3240                    ; #	   put the display in a "known" state.
3241                    ; #	3) Finally, now that it knows what state the display
3242                    ; #	   is in, it configures it for two line, 4 bit operation.
3243                    ; #
3244                    ; # This is a routine that clocks out two nibbles using the E clock and
3245                    ; # then waits 100 uS.  The first commands we send it are 0x33 hex. We send
3246                    ; # 0x33 followed by 0x32.  This has the effect of clocking out 0x3 to the
3247                    ; # port at least 3 times, with the command bit (R/S) set.  This will ALWAYS
3248                    ; # set us to 8 bit mode eventually.
3249                    ; #
3250                    ; # *  On power up we're already in 8 bit mode and 0x3 doesn't change that.
3251                    ; # *  In 4 bit mode the first two nibbles will put you into 8 bit mode
3252                    ; # *  Out of sync 4-bit mode, the first nibble finishes the low nybble of
3253                    ; #    the previous command, and the next two put us into 8 bit mode.
3254                    ; #
3255                    ; # Once we are SURE we're in 4 bit mode, we can send commands through
3256                    ; # the 4 bit interface, to finish initialization we send:
3257                    ; # 	0x28 - Four bit mode, two line display, 5 x 8 font.
3258                    ; #	0x08 - Turn off the display
3259                    ; #	0x01 - Clear the display, reset the DDRAM pointer
3260                    ; #	0x0E - Turn on the display, cursor, blink it, and don't shift.
3261            
3262                    ; # Step 1: Wait for the LCD to initialize from Power on:
3263                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3264                    ; line_number = 644
3265                    ;  loop_exactly 5 start
3266 0000004f = lcd_init__1 equ globals___0+47
3267 01fd 3005          movlw   5
3268 01fe 00cf          movwf   lcd_init__1
3269   01ff :   lcd_init__2:
3270                    ; line_number = 645
3271                    ; call lcd_delay(100)
3272 01ff 3064          movlw   100
3273 0200 21f2          call    lcd_delay
3274            
3275                    ; line_number = 644
3276                    ;  loop_exactly 5 wrap-up
3277 0201 0bcf          decfsz  lcd_init__1,f
3278 0202 29ff          goto    lcd_init__2
3279                    ; line_number = 644
3280                    ;  loop_exactly 5 done
3281                    ; # Step 2: Put the LCD in a "known" mode.
3282            
3283                    ; # "8-bit mode"; R/W = 0, RS = 0, DB7 - DB4 = 0x03:
3284                    ; line_number = 650
3285                    ;  _portc := 0x03
3286 0203 3003          movlw   3
3287 0204 0087          movwf   _portc
3288                    ; line_number = 651
3289                    ;  rw := 0
3290 0205 1105          bcf     rw___byte, rw___bit
3291                    ; line_number = 652
3292                    ;  rs := 0
3293 0206 1285          bcf     rs___byte, rs___bit
3294                    ; line_number = 653
3295                    ;  e := 1
3296 0207 1405          bsf     e___byte, e___bit
3297                    ; line_number = 654
3298                    ;  e := 0
3299 0208 1005          bcf     e___byte, e___bit
3300                    ; line_number = 655
3301                    ;  call lcd_delay(1)
3302 0209 3001          movlw   1
3303 020a 21f2          call    lcd_delay
3304            
3305                    ; # If in 4 bit mode this is the "low nibble":
3306                    ; line_number = 658
3307                    ;  e := 1
3308 020b 1405          bsf     e___byte, e___bit
3309                    ; line_number = 659
3310                    ;  e := 0
3311 020c 1005          bcf     e___byte, e___bit
3312                    ; line_number = 660
3313                    ;  call lcd_delay(1)
3314 020d 3001          movlw   1
3315 020e 21f2          call    lcd_delay
3316            
3317            
3318                    ; # If out of sync this is the low nybble in 4 bit mode:
3319                    ; line_number = 664
3320                    ;  e := 1
3321 020f 1405          bsf     e___byte, e___bit
3322                    ; line_number = 665
3323                    ;  e := 0
3324 0210 1005          bcf     e___byte, e___bit
3325                    ; line_number = 666
3326                    ;  call lcd_delay(1)
3327 0211 3001          movlw   1
3328 0212 21f2          call    lcd_delay
3329            
3330                    ; # Finally we can ask for 4 bit mode:
3331                    ; line_number = 669
3332                    ;  _portc := 0x02
3333 0213 3002          movlw   2
3334 0214 0087          movwf   _portc
3335                    ; line_number = 670
3336                    ;  rw := 0
3337 0215 1105          bcf     rw___byte, rw___bit
3338                    ; line_number = 671
3339                    ;  rs := 0
3340 0216 1285          bcf     rs___byte, rs___bit
3341                    ; line_number = 672
3342                    ;  e := 1
3343 0217 1405          bsf     e___byte, e___bit
3344                    ; line_number = 673
3345                    ;  e := 0
3346 0218 1005          bcf     e___byte, e___bit
3347                    ; # Changing this delay didn't work (#2)
3348                    ; line_number = 675
3349                    ;  call lcd_delay(1)
3350 0219 3001          movlw   1
3351 021a 21f2          call    lcd_delay
3352            
3353                    ; # Now its in 4 bit mode and we have to send double nybbles each
3354                    ; # time. Fortunately we can use a subroutine for this.
3355            
3356                    ; # FUNCTION SET - 4-bit, 2 lines, 5x8 font:
3357                    ; line_number = 681
3358                    ;  call lcd_command(0x28)
3359 021b 3028          movlw   40
3360 021c 219c          call    lcd_command
3361            
3362                    ; # AGAIN : FUNCTION SET - 4-bit, 2 lines, 5x8 font:
3363                    ; # Sending this command twice, *does* work.
3364                    ; line_number = 685
3365                    ;  call lcd_command(0x28)
3366 021d 3028          movlw   40
3367 021e 219c          call    lcd_command
3368            
3369                    ; # Turn off the display temporarily:
3370                    ; line_number = 688
3371                    ;  call lcd_command(0x08)
3372 021f 3008          movlw   8
3373 0220 219c          call    lcd_command
3374            
3375                    ; # Clear the display:
3376                    ; line_number = 691
3377                    ;  call lcd_command(0x01)
3378 0221 3001          movlw   1
3379 0222 219c          call    lcd_command
3380                    ; line_number = 692
3381                    ;  call lcd_delay(20)
3382 0223 3014          movlw   20
3383 0224 21f2          call    lcd_delay
3384            
3385                    ; # Turn the display back on with Cursor:
3386                    ; line_number = 695
3387                    ;  call lcd_command(0x0f)
3388 0225 300f          movlw   15
3389 0226 219c          call    lcd_command
3390            
3391                    ; # Set shift mode:
3392                    ; line_number = 698
3393                    ;  call lcd_command(0x06)
3394 0227 3006          movlw   6
3395 0228 219c          call    lcd_command
3396            
3397            
3398                    ; delay after procedure statements=non-uniform
3399                    ; Implied return
3400 0229 3400          retlw   0
3401            
3402            
3403            
3404            
3405                    ; line_number = 701
3406                    ; procedure message_get
3407   022a :   message_get:
3408                    ; Last argument is sitting in W; save into argument variable
3409 022a 00c6          movwf   message_get__index
3410                    ; delay=4294967295
3411                    ; line_number = 702
3412                    ; argument index byte
3413 00000046 = message_get__index equ globals___0+38
3414                    ; line_number = 703
3415                    ;  returns byte
3416            
3417                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3418                    ; line_number = 705
3419                    ;  switch index & 0xf start
3420 022b 3002          movlw   message_get__17>>8
3421 022c 008a          movwf   __pclath
3422 022d 300f          movlw   15
3423 022e 0546          andwf   message_get__index,w
3424 022f 3e31          addlw   message_get__17
3425 0230 0082          movwf   __pcl
3426                    ; page_group 16
3427   0231 :   message_get__17:
3428                    ; line_number = 707
3429                    ; return 'L' start
3430                    ; line_number = 707
3431 0231 344c          retlw   76
3432                    ; line_number = 707
3433                    ; return 'L' done
3434                    ; line_number = 709
3435                    ; return 'C' start
3436                    ; line_number = 709
3437 0232 3443          retlw   67
3438                    ; line_number = 709
3439                    ; return 'C' done
3440                    ; line_number = 711
3441                    ; return 'D' start
3442                    ; line_number = 711
3443 0233 3444          retlw   68
3444                    ; line_number = 711
3445                    ; return 'D' done
3446                    ; line_number = 713
3447                    ; return '3' start
3448                    ; line_number = 713
3449 0234 3433          retlw   51
3450                    ; line_number = 713
3451                    ; return '3' done
3452                    ; line_number = 715
3453                    ; return '2' start
3454                    ; line_number = 715
3455 0235 3432          retlw   50
3456                    ; line_number = 715
3457                    ; return '2' done
3458                    ; line_number = 717
3459                    ; return 'C' start
3460                    ; line_number = 717
3461 0236 3443          retlw   67
3462                    ; line_number = 717
3463                    ; return 'C' done
3464                    ; line_number = 719
3465                    ; return ' ' start
3466                    ; line_number = 719
3467 0237 3420          retlw   32
3468                    ; line_number = 719
3469                    ; return ' ' done
3470                    ; line_number = 721
3471                    ; return 'R' start
3472                    ; line_number = 721
3473 0238 3452          retlw   82
3474                    ; line_number = 721
3475                    ; return 'R' done
3476                    ; line_number = 723
3477                    ; return 'o' start
3478                    ; line_number = 723
3479 0239 346f          retlw   111
3480                    ; line_number = 723
3481                    ; return 'o' done
3482                    ; line_number = 725
3483                    ; return 'b' start
3484                    ; line_number = 725
3485 023a 3462          retlw   98
3486                    ; line_number = 725
3487                    ; return 'b' done
3488                    ; line_number = 727
3489                    ; return 'o' start
3490                    ; line_number = 727
3491 023b 346f          retlw   111
3492                    ; line_number = 727
3493                    ; return 'o' done
3494                    ; line_number = 729
3495                    ; return 'B' start
3496                    ; line_number = 729
3497 023c 3442          retlw   66
3498                    ; line_number = 729
3499                    ; return 'B' done
3500                    ; line_number = 731
3501                    ; return 'R' start
3502                    ; line_number = 731
3503 023d 3452          retlw   82
3504                    ; line_number = 731
3505                    ; return 'R' done
3506                    ; line_number = 733
3507                    ; return 'i' start
3508                    ; line_number = 733
3509 023e 3469          retlw   105
3510                    ; line_number = 733
3511                    ; return 'i' done
3512                    ; line_number = 735
3513                    ; return 'X' start
3514                    ; line_number = 735
3515 023f 3458          retlw   88
3516                    ; line_number = 735
3517                    ; return 'X' done
3518                    ; line_number = 737
3519                    ; return ' ' start
3520                    ; line_number = 737
3521 0240 3420          retlw   32
3522                    ; line_number = 737
3523                    ; return ' ' done
3524            
3525            
3526   0241 :   message_get__18:
3527                    ; switch end:(data:00=>00 code:XX=>XX)
3528                    ; line_number = 705
3529                    ;  switch index & 0xf done
3530                    ; delay after procedure statements=non-uniform
3531                    ; Exiting procedure with no return(s); fail with infinite loop
3532   0241 :   message_get__19:
3533 0241 2a41          goto    message_get__19
3534            
3535            
3536            
3537            
3538                    ; line_number = 740
3539                    ; procedure id_get
3540   0242 :   id_get:
3541                    ; Last argument is sitting in W; save into argument variable
3542 0242 00c7          movwf   id_get__index
3543                    ; delay=4294967295
3544                    ; line_number = 741
3545                    ; argument index byte
3546 00000047 = id_get__index equ globals___0+39
3547                    ; line_number = 742
3548                    ;  returns byte
3549            
3550                    ; #: This procedure returns the {index}'th byte of the id string.
3551            
3552                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
3553                    ; line_number = 746
3554                    ;  if index <= 44 start
3555 0243 302c          movlw   44
3556 0244 0247          subwf   id_get__index,w
3557 0245 1903          btfsc   __z___byte, __z___bit
3558 0246 1003          bcf     __c___byte, __c___bit
3559                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
3560                    ; CASE: true.size=0 && false.size>1
3561                    ; bit_code_emit_helper1: body_code.size=50 true_test=false body_code.delay=0 (non-uniform delay)
3562 0247 1803          btfsc   __c___byte, __c___bit
3563 0248 2a7b          goto    id_get__32
3564                    ; line_number = 747
3565                    ; switch index start
3566 0249 3002          movlw   id_get__30>>8
3567 024a 008a          movwf   __pclath
3568 024b 0847          movf    id_get__index,w
3569 024c 3e4e          addlw   id_get__30
3570 024d 0082          movwf   __pcl
3571                    ; page_group 45
3572   024e :   id_get__30:
3573                    ; line_number = 749
3574                    ; return 1 start
3575                    ; line_number = 749
3576 024e 3401          retlw   1
3577                    ; line_number = 749
3578                    ; return 1 done
3579                    ; line_number = 751
3580                    ; return 0 start
3581                    ; line_number = 751
3582 024f 3400          retlw   0
3583                    ; line_number = 751
3584                    ; return 0 done
3585                    ; line_number = 753
3586                    ; return 255 start
3587                    ; line_number = 753
3588 0250 34ff          retlw   255
3589                    ; line_number = 753
3590                    ; return 255 done
3591                    ; line_number = 755
3592                    ; return 0 start
3593                    ; line_number = 755
3594 0251 3400          retlw   0
3595                    ; line_number = 755
3596                    ; return 0 done
3597                    ; line_number = 757
3598                    ; return 1 start
3599                    ; line_number = 757
3600 0252 3401          retlw   1
3601                    ; line_number = 757
3602                    ; return 1 done
3603                    ; line_number = 759
3604                    ; return 0 start
3605                    ; line_number = 759
3606 0253 3400          retlw   0
3607                    ; line_number = 759
3608                    ; return 0 done
3609                    ; line_number = 759
3610                    ; return 0 start
3611                    ; line_number = 759
3612 0254 3400          retlw   0
3613                    ; line_number = 759
3614                    ; return 0 done
3615                    ; line_number = 759
3616                    ; return 0 start
3617                    ; line_number = 759
3618 0255 3400          retlw   0
3619                    ; line_number = 759
3620                    ; return 0 done
3621                    ; line_number = 761
3622                    ; return 0 start
3623                    ; line_number = 761
3624 0256 3400          retlw   0
3625                    ; line_number = 761
3626                    ; return 0 done
3627                    ; line_number = 761
3628                    ; return 0 start
3629                    ; line_number = 761
3630 0257 3400          retlw   0
3631                    ; line_number = 761
3632                    ; return 0 done
3633                    ; line_number = 761
3634                    ; return 0 start
3635                    ; line_number = 761
3636 0258 3400          retlw   0
3637                    ; line_number = 761
3638                    ; return 0 done
3639                    ; line_number = 761
3640                    ; return 0 start
3641                    ; line_number = 761
3642 0259 3400          retlw   0
3643                    ; line_number = 761
3644                    ; return 0 done
3645                    ; line_number = 761
3646                    ; return 0 start
3647                    ; line_number = 761
3648 025a 3400          retlw   0
3649                    ; line_number = 761
3650                    ; return 0 done
3651                    ; line_number = 761
3652                    ; return 0 start
3653                    ; line_number = 761
3654 025b 3400          retlw   0
3655                    ; line_number = 761
3656                    ; return 0 done
3657                    ; line_number = 761
3658                    ; return 0 start
3659                    ; line_number = 761
3660 025c 3400          retlw   0
3661                    ; line_number = 761
3662                    ; return 0 done
3663                    ; line_number = 761
3664                    ; return 0 start
3665                    ; line_number = 761
3666 025d 3400          retlw   0
3667                    ; line_number = 761
3668                    ; return 0 done
3669                    ; line_number = 763
3670                    ; return 0 start
3671                    ; line_number = 763
3672 025e 3400          retlw   0
3673                    ; line_number = 763
3674                    ; return 0 done
3675                    ; line_number = 763
3676                    ; return 0 start
3677                    ; line_number = 763
3678 025f 3400          retlw   0
3679                    ; line_number = 763
3680                    ; return 0 done
3681                    ; line_number = 763
3682                    ; return 0 start
3683                    ; line_number = 763
3684 0260 3400          retlw   0
3685                    ; line_number = 763
3686                    ; return 0 done
3687                    ; line_number = 763
3688                    ; return 0 start
3689                    ; line_number = 763
3690 0261 3400          retlw   0
3691                    ; line_number = 763
3692                    ; return 0 done
3693                    ; line_number = 763
3694                    ; return 0 start
3695                    ; line_number = 763
3696 0262 3400          retlw   0
3697                    ; line_number = 763
3698                    ; return 0 done
3699                    ; line_number = 763
3700                    ; return 0 start
3701                    ; line_number = 763
3702 0263 3400          retlw   0
3703                    ; line_number = 763
3704                    ; return 0 done
3705                    ; line_number = 763
3706                    ; return 0 start
3707                    ; line_number = 763
3708 0264 3400          retlw   0
3709                    ; line_number = 763
3710                    ; return 0 done
3711                    ; line_number = 763
3712                    ; return 0 start
3713                    ; line_number = 763
3714 0265 3400          retlw   0
3715                    ; line_number = 763
3716                    ; return 0 done
3717                    ; line_number = 765
3718                    ; return 6 start
3719                    ; line_number = 765
3720 0266 3406          retlw   6
3721                    ; line_number = 765
3722                    ; return 6 done
3723                    ; line_number = 767
3724                    ; return 'L' start
3725                    ; line_number = 767
3726 0267 344c          retlw   76
3727                    ; line_number = 767
3728                    ; return 'L' done
3729                    ; line_number = 769
3730                    ; return 'C' start
3731                    ; line_number = 769
3732 0268 3443          retlw   67
3733                    ; line_number = 769
3734                    ; return 'C' done
3735                    ; line_number = 771
3736                    ; return 'D' start
3737                    ; line_number = 771
3738 0269 3444          retlw   68
3739                    ; line_number = 771
3740                    ; return 'D' done
3741                    ; line_number = 773
3742                    ; return '3' start
3743                    ; line_number = 773
3744 026a 3433          retlw   51
3745                    ; line_number = 773
3746                    ; return '3' done
3747                    ; line_number = 775
3748                    ; return '2' start
3749                    ; line_number = 775
3750 026b 3432          retlw   50
3751                    ; line_number = 775
3752                    ; return '2' done
3753                    ; line_number = 777
3754                    ; return 'C' start
3755                    ; line_number = 777
3756 026c 3443          retlw   67
3757                    ; line_number = 777
3758                    ; return 'C' done
3759                    ; line_number = 779
3760                    ; return 13 start
3761                    ; line_number = 779
3762 026d 340d          retlw   13
3763                    ; line_number = 779
3764                    ; return 13 done
3765                    ; line_number = 781
3766                    ; return 'M' start
3767                    ; line_number = 781
3768 026e 344d          retlw   77
3769                    ; line_number = 781
3770                    ; return 'M' done
3771                    ; line_number = 783
3772                    ; return 'o' start
3773                    ; line_number = 783
3774 026f 346f          retlw   111
3775                    ; line_number = 783
3776                    ; return 'o' done
3777                    ; line_number = 785
3778                    ; return 'n' start
3779                    ; line_number = 785
3780 0270 346e          retlw   110
3781                    ; line_number = 785
3782                    ; return 'n' done
3783                    ; line_number = 787
3784                    ; return 'd' start
3785                    ; line_number = 787
3786 0271 3464          retlw   100
3787                    ; line_number = 787
3788                    ; return 'd' done
3789                    ; line_number = 789
3790                    ; return 'o' start
3791                    ; line_number = 789
3792 0272 346f          retlw   111
3793                    ; line_number = 789
3794                    ; return 'o' done
3795                    ; line_number = 791
3796                    ; return '-' start
3797                    ; line_number = 791
3798 0273 342d          retlw   45
3799                    ; line_number = 791
3800                    ; return '-' done
3801                    ; line_number = 793
3802                    ; return 't' start
3803                    ; line_number = 793
3804 0274 3474          retlw   116
3805                    ; line_number = 793
3806                    ; return 't' done
3807                    ; line_number = 795
3808                    ; return 'r' start
3809                    ; line_number = 795
3810 0275 3472          retlw   114
3811                    ; line_number = 795
3812                    ; return 'r' done
3813                    ; line_number = 797
3814                    ; return 'o' start
3815                    ; line_number = 797
3816 0276 346f          retlw   111
3817                    ; line_number = 797
3818                    ; return 'o' done
3819                    ; line_number = 799
3820                    ; return 'n' start
3821                    ; line_number = 799
3822 0277 346e          retlw   110
3823                    ; line_number = 799
3824                    ; return 'n' done
3825                    ; line_number = 801
3826                    ; return 'i' start
3827                    ; line_number = 801
3828 0278 3469          retlw   105
3829                    ; line_number = 801
3830                    ; return 'i' done
3831                    ; line_number = 803
3832                    ; return 'c' start
3833                    ; line_number = 803
3834 0279 3463          retlw   99
3835                    ; line_number = 803
3836                    ; return 'c' done
3837                    ; line_number = 805
3838                    ; return 's' start
3839                    ; line_number = 805
3840 027a 3473          retlw   115
3841                    ; line_number = 805
3842                    ; return 's' done
3843   027b :   id_get__31:
3844                    ; switch end:(data:00=>00 code:XX=>XX)
3845                    ; line_number = 747
3846                    ; switch index done
3847   027b :   id_get__32:
3848                    ; Recombine size1 = 0 || size2 = 0
3849                    ; code.delay=4294967295 back_code.delay=4294967295
3850                    ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:XX=>XX)
3851                    ; line_number = 746
3852                    ;  if index <= 44 done
3853                    ; line_number = 806
3854                    ; return 0 start
3855                    ; line_number = 806
3856 027b 3400          retlw   0
3857                    ; line_number = 806
3858                    ; return 0 done
3859            
3860            
3861                    ; delay after procedure statements=non-uniform
3862            
3863            
3864            
3865            
3866                    ; line_number = 809
3867                    ; procedure delay
3868   027c :   delay:
3869                    ; arguments_none
3870                    ; line_number = 811
3871                    ;  returns_nothing
3872                    ; line_number = 812
3873                    ;  exact_delay delay_instructions
3874            
3875                    ; # This procedure delays by 1/3 of a bit time.
3876            
3877                    ; # This procedure processes the command queue commands that have
3878                    ; # been set up by the main() procedure.  If there are no more
3879                    ; # commands in the queue, we figure out whether or not the
3880                    ; # line switch requires any display shifting.
3881                    ; #
3882                    ; # The entire command queue from main() will be emptied before
3883                    ; # the next command comes in.  The reasoning for this is because
3884                    ; # most top level commands only take two or three LCD commands.
3885                    ; # A clear display command takes 1.53mS, a total of 12 calls to
3886                    ; #  delay() (12 * 138uS = 1.56mS).  A line clear takes a few
3887                    ; # overhead commands followed by 16 data writes.  Since a command
3888                    ; # byte requites 9-2/3 bits, 29 calls to delay will occur.  Thus,
3889                    ; # we are safe.  The display shifting stuff can take place last,
3890                    ; # since it has no time criticalities.
3891                    ; #
3892                    ; # What this all means is we can set up a simple queue of
3893                    ; # instructions to be executed by the delay() procedure.
3894                    ; # The main() procedure fills the queue and the delay()
3895                    ; # procedure empties it.  We do not have to be very sophisticated,
3896                    ; # the queue will be empty before the next time main()
3897                    ; # gets around to filling it.
3898            
3899                    ; line_number = 838
3900                    ;  local control byte
3901 00000048 = delay__control equ globals___0+40
3902                    ; line_number = 839
3903                    ;  local data byte
3904 00000049 = delay__data equ globals___0+41
3905                    ; line_number = 840
3906                    ;  local do_it bit
3907 0000006f = delay__do_it___byte equ globals___0+79
3908 00000002 = delay__do_it___bit equ 2
3909                    ; line_number = 841
3910                    ;  local count byte
3911 0000004a = delay__count equ globals___0+42
3912            
3913                    ; # Kick the dog:
3914                    ; before procedure statements delay=0, bit states=(data:00=>00 code:XX=>XX)
3915                    ; line_number = 844
3916                    ;  watch_dog_reset done
3917                    ; Delay at watch_dog_reset is 0
3918 027c 0064          clrwdt  
3919            
3920                    ; line_number = 846
3921                    ;  do_it := 0
3922                    ; Delay at assignment is 1
3923 027d 116f          bcf     delay__do_it___byte, delay__do_it___bit
3924                    ; line_number = 847
3925                    ;  if processed < available start
3926                    ; Delay at if is 2
3927 027e 0836          movf    available,w
3928 027f 0235          subwf   processed,w
3929                    ; (after recombine) true_delay=12, false_delay=29 uniform_delay=true
3930                    ; CASE: true_code_size > 1 && false_code_size > 1
3931                    ; true_code_size=26 false_code_size=29
3932 0280 1c03          btfss   __c___byte, __c___bit
3933 0281 2aa1          goto    delay__12
3934                    ; # Make sure that the proper lines are visible:
3935                    ; line_number = 864
3936                    ;  if lines34 start
3937                    ; Delay at if is 0
3938                    ; (after recombine) true_delay=10, false_delay=9 uniform_delay=true
3939                    ; CASE: true_code_size > 1 && false_code_size > 1
3940                    ; true_code_size=12 false_code_size=11
3941 0282 1a05          btfsc   lines34___byte, lines34___bit
3942 0283 2a90          goto    delay__9
3943                    ; Delay 0 cycles
3944                    ; # Make sure that lines 1-2 are displayed:
3945                    ; line_number = 874
3946                    ;  if shift != 0 start
3947                    ; Delay at if is 0
3948                    ; Left minus Right
3949 0284 0824          movf    shift,w
3950                    ; (after recombine) true_delay=0, false_delay=5 uniform_delay=true
3951                    ; CASE: true.size=0 && false.size>1
3952                    ; bit_code_emit_helper1: body_code.size=5 true_test=false body_code.delay=5 (uniform delay)
3953 0285 1d03          btfss   __z___byte, __z___bit
3954 0286 2a8a          goto    delay__1
3955                    ; Delay 4 cycles
3956 0287 2a88          goto    delay__3
3957   0288 :   delay__3:
3958 0288 2a89          goto    delay__4
3959   0289 :   delay__4:
3960 0289 2a8f          goto    delay__2
3961   028a :   delay__1:
3962                    ; # Lines 1-2 are not completely visible yet; shift right by 1:
3963                    ; line_number = 876
3964                    ;  data := 0x1c
3965                    ; Delay at assignment is 0
3966 028a 301c          movlw   28
3967 028b 00c9          movwf   delay__data
3968                    ; line_number = 877
3969                    ;  control := command_write
3970                    ; Delay at assignment is 2
3971 028c 01c8          clrf    delay__control
3972                    ; line_number = 878
3973                    ;  shift := shift - 1
3974                    ; Delay at assignment is 3
3975 028d 03a4          decf    shift,f
3976                    ; line_number = 879
3977                    ;  do_it := 1
3978                    ; Delay at assignment is 4
3979 028e 156f          bsf     delay__do_it___byte, delay__do_it___bit
3980            
3981   028f :   delay__2:
3982                    ; code.delay=9 back_code.delay=0
3983                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
3984                    ; Uniform delay broke in relation_code_emit
3985                    ; if final true delay=5 false delay=0 code delay=9
3986                    ; line_number = 874
3987                    ;  if shift != 0 done
3988 028f 2a9c          goto    delay__10
3989   0290 :   delay__9:
3990                    ; # Make sure that lines 3-4 are displayed:
3991                    ; line_number = 866
3992                    ;  if shift < 16 start
3993                    ; Delay at if is 0
3994 0290 3010          movlw   16
3995 0291 0224          subwf   shift,w
3996                    ; (after recombine) true_delay=0, false_delay=5 uniform_delay=true
3997                    ; CASE: true.size=0 && false.size>1
3998                    ; bit_code_emit_helper1: body_code.size=5 true_test=false body_code.delay=5 (uniform delay)
3999 0292 1c03          btfss   __c___byte, __c___bit
4000 0293 2a97          goto    delay__5
4001                    ; Delay 4 cycles
4002 0294 2a95          goto    delay__7
4003   0295 :   delay__7:
4004 0295 2a96          goto    delay__8
4005   0296 :   delay__8:
4006 0296 2a9c          goto    delay__6
4007   0297 :   delay__5:
4008                    ; # Lines 3-4 are not completely visible yet; shift left by 1:
4009                    ; line_number = 868
4010                    ;  data := 0x18
4011                    ; Delay at assignment is 0
4012 0297 3018          movlw   24
4013 0298 00c9          movwf   delay__data
4014                    ; line_number = 869
4015                    ;  control := command_write
4016                    ; Delay at assignment is 2
4017 0299 01c8          clrf    delay__control
4018                    ; line_number = 870
4019                    ;  shift := shift + 1
4020                    ; Delay at assignment is 3
4021 029a 0aa4          incf    shift,f
4022                    ; line_number = 871
4023                    ;  do_it := 1
4024                    ; Delay at assignment is 4
4025 029b 156f          bsf     delay__do_it___byte, delay__do_it___bit
4026   029c :   delay__6:
4027                    ; code.delay=10 back_code.delay=0
4028                    ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:XX=>XX)
4029                    ; Uniform delay broke in relation_code_emit
4030                    ; if final true delay=5 false delay=0 code delay=10
4031                    ; line_number = 866
4032                    ;  if shift < 16 done
4033   029c :   delay__10:
4034                    ; code.delay=12 back_code.delay=0
4035                    ; <=bit_code_emit@symbol; sym=lines34 (data:00=>00 code:XX=>XX)
4036                    ; if final true delay=10 false delay=9 code delay=12
4037                    ; line_number = 864
4038                    ;  if lines34 done
4039                    ; Delay 16 cycles
4040                    ; Delay loop takes 4 * 4 = 16 cycles
4041 029c 3004          movlw   4
4042   029d :   delay__14:
4043 029d 3eff          addlw   255
4044 029e 1d03          btfss   __z___byte, __z___bit
4045 029f 2a9d          goto    delay__14
4046 02a0 2abe          goto    delay__13
4047   02a1 :   delay__12:
4048                    ; # We have commands in queue to execute:
4049                    ; line_number = 849
4050                    ;  control := control_queue[processed]
4051                    ; Delay at assignment is 0
4052 02a1 0835          movf    processed,w
4053 02a2 3e31          addlw   control_queue
4054 02a3 0084          movwf   __fsr
4055 02a4 0800          movf    __indf,w
4056 02a5 00c8          movwf   delay__control
4057                    ; line_number = 850
4058                    ;  data := data_queue[processed]
4059                    ; Delay at assignment is 5
4060 02a6 0835          movf    processed,w
4061 02a7 3e2d          addlw   data_queue
4062 02a8 0084          movwf   __fsr
4063 02a9 0800          movf    __indf,w
4064 02aa 00c9          movwf   delay__data
4065            
4066                    ; # Figure out whether to actually process this command:
4067                    ; line_number = 853
4068                    ;  if control & nop_mask = 0 start
4069                    ; Delay at if is 10
4070                    ; Left minus Right
4071 02ab 3020          movlw   32
4072 02ac 0548          andwf   delay__control,w
4073                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
4074                    ; CASE: True.size=1 False.size=0
4075 02ad 1903          btfsc   __z___byte, __z___bit
4076                    ; line_number = 854
4077                    ; do_it := 1
4078                    ; Delay at assignment is 0
4079 02ae 156f          bsf     delay__do_it___byte, delay__do_it___bit
4080            
4081                    ; code.delay=14 back_code.delay=0
4082                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
4083                    ; Uniform delay broke in relation_code_emit
4084                    ; if final true delay=1 false delay=0 code delay=14
4085                    ; line_number = 853
4086                    ;  if control & nop_mask = 0 done
4087                    ; # Process count:
4088                    ; line_number = 857
4089                    ;  count := control & count_mask
4090                    ; Delay at assignment is 14
4091 02af 300f          movlw   15
4092 02b0 0548          andwf   delay__control,w
4093 02b1 00ca          movwf   delay__count
4094                    ; line_number = 858
4095                    ;  control_queue[processed] := control & 0xf0 | (count - 1)
4096                    ; Delay at assignment is 17
4097                    ; index_fsr_first
4098 02b2 0835          movf    processed,w
4099 02b3 3e31          addlw   control_queue
4100 02b4 0084          movwf   __fsr
4101 00000050 = delay__11 equ globals___0+48
4102 02b5 30f0          movlw   240
4103 02b6 0548          andwf   delay__control,w
4104 02b7 00d0          movwf   delay__11
4105 02b8 034a          decf    delay__count,w
4106 02b9 0450          iorwf   delay__11,w
4107 02ba 0080          movwf   __indf
4108                    ; line_number = 859
4109                    ;  if count = 0 start
4110                    ; Delay at if is 26
4111                    ; Left minus Right
4112 02bb 084a          movf    delay__count,w
4113                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
4114                    ; CASE: True.size=1 False.size=0
4115 02bc 1903          btfsc   __z___byte, __z___bit
4116                    ; # Advance to next command:
4117                    ; line_number = 861
4118                    ;  processed := processed + 1
4119                    ; Delay at assignment is 0
4120 02bd 0ab5          incf    processed,f
4121                    ; code.delay=29 back_code.delay=0
4122                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
4123                    ; Uniform delay broke in relation_code_emit
4124                    ; if final true delay=1 false delay=0 code delay=29
4125                    ; line_number = 859
4126                    ;  if count = 0 done
4127   02be :   delay__13:
4128                    ; code.delay=36 back_code.delay=0
4129                    ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:XX=>XX)
4130                    ; Uniform delay broke in relation_code_emit
4131                    ; if final true delay=29 false delay=12 code delay=36
4132                    ; line_number = 847
4133                    ;  if processed < available done
4134                    ; line_number = 881
4135                    ; if do_it start
4136                    ; Delay at if is 36
4137                    ; (after recombine) true_delay=25, false_delay=0 uniform_delay=true
4138                    ; CASE: true_code.size = 0 && false_code.size > 1
4139                    ; bit_code_emit_helper1: body_code.size=25 true_test=true body_code.delay=25 (uniform delay)
4140 02be 196f          btfsc   delay__do_it___byte, delay__do_it___bit
4141 02bf 2ac5          goto    delay__15
4142                    ; Delay 24 cycles
4143                    ; Delay loop takes 6 * 4 = 24 cycles
4144 02c0 3006          movlw   6
4145   02c1 :   delay__17:
4146 02c1 3eff          addlw   255
4147 02c2 1d03          btfss   __z___byte, __z___bit
4148 02c3 2ac1          goto    delay__17
4149 02c4 2ade          goto    delay__16
4150   02c5 :   delay__15:
4151                    ; # Note that {data_write} = {rs_mask}:
4152            
4153                    ; # Send high nibble (RW=0):
4154                    ; #_portc := control & rs_mask | data >> 4
4155                    ; line_number = 886
4156                    ;  _portc := data >> 4
4157                    ; Delay at assignment is 0
4158 02c5 0e49          swapf   delay__data,w
4159 02c6 0087          movwf   _portc
4160 02c7 300f          movlw   15
4161 02c8 0587          andwf   _portc,f
4162                    ; line_number = 887
4163                    ;  rw := 0
4164                    ; Delay at assignment is 4
4165 02c9 1105          bcf     rw___byte, rw___bit
4166                    ; line_number = 888
4167                    ;  rs := 0
4168                    ; Delay at assignment is 5
4169 02ca 1285          bcf     rs___byte, rs___bit
4170                    ; line_number = 889
4171                    ;  if control & data_write != 0 start
4172                    ; Delay at if is 6
4173                    ; Left minus Right
4174 02cb 3010          movlw   16
4175 02cc 0548          andwf   delay__control,w
4176                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
4177                    ; CASE: true_code.size=0 && false_code.size=1
4178 02cd 1d03          btfss   __z___byte, __z___bit
4179                    ; line_number = 890
4180                    ; rs := 1
4181                    ; Delay at assignment is 0
4182 02ce 1685          bsf     rs___byte, rs___bit
4183                    ; code.delay=10 back_code.delay=0
4184                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
4185                    ; Uniform delay broke in relation_code_emit
4186                    ; if final true delay=1 false delay=0 code delay=10
4187                    ; line_number = 889
4188                    ;  if control & data_write != 0 done
4189                    ; line_number = 891
4190                    ; rs := 1
4191                    ; Delay at assignment is 10
4192 02cf 1685          bsf     rs___byte, rs___bit
4193                    ; line_number = 892
4194                    ;  e := 1
4195                    ; Delay at assignment is 11
4196 02d0 1405          bsf     e___byte, e___bit
4197                    ; line_number = 893
4198                    ;  e := 0
4199                    ; Delay at assignment is 12
4200 02d1 1005          bcf     e___byte, e___bit
4201            
4202                    ; # Send low nibble (RW=0):
4203                    ; #_portc := control & rs_mask | data & 0xf
4204                    ; line_number = 897
4205                    ;  _portc := control | (data & 0xf)
4206                    ; Delay at assignment is 13
4207 02d2 300f          movlw   15
4208 02d3 0549          andwf   delay__data,w
4209 02d4 0448          iorwf   delay__control,w
4210 02d5 0087          movwf   _portc
4211                    ; line_number = 898
4212                    ;  rw := 0
4213                    ; Delay at assignment is 17
4214 02d6 1105          bcf     rw___byte, rw___bit
4215                    ; line_number = 899
4216                    ;  rs := 0
4217                    ; Delay at assignment is 18
4218 02d7 1285          bcf     rs___byte, rs___bit
4219                    ; line_number = 900
4220                    ;  if control & data_write != 0 start
4221                    ; Delay at if is 19
4222                    ; Left minus Right
4223 02d8 3010          movlw   16
4224 02d9 0548          andwf   delay__control,w
4225                    ; (after recombine) true_delay=0, false_delay=1 uniform_delay=true
4226                    ; CASE: true_code.size=0 && false_code.size=1
4227 02da 1d03          btfss   __z___byte, __z___bit
4228                    ; line_number = 901
4229                    ; rs := 1
4230                    ; Delay at assignment is 0
4231 02db 1685          bsf     rs___byte, rs___bit
4232                    ; code.delay=23 back_code.delay=0
4233                    ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:XX=>XX)
4234                    ; Uniform delay broke in relation_code_emit
4235                    ; if final true delay=1 false delay=0 code delay=23
4236                    ; line_number = 900
4237                    ;  if control & data_write != 0 done
4238                    ; line_number = 902
4239                    ; e := 1
4240                    ; Delay at assignment is 23
4241 02dc 1405          bsf     e___byte, e___bit
4242                    ; line_number = 903
4243                    ;  e := 0
4244                    ; Delay at assignment is 24
4245 02dd 1005          bcf     e___byte, e___bit
4246            
4247                    ; # The delay() procedure is 138uS which is much greater than
4248                    ; # 39uS - 43uS that commands take.  We do not have to do any
4249                    ; # further action for command delay.
4250            
4251   02de :   delay__16:
4252                    ; code.delay=64 back_code.delay=0
4253                    ; <=bit_code_emit@symbol; sym=delay__do_it (data:00=>00 code:XX=>XX)
4254                    ; if final true delay=25 false delay=0 code delay=64
4255                    ; line_number = 881
4256                    ; if do_it done
4257                    ; # We are all done:
4258            
4259            
4260                    ; delay after procedure statements=64
4261                    ; Delay 206 cycles
4262                    ; Delay loop takes 51 * 4 = 204 cycles
4263 02de 3033          movlw   51
4264   02df :   delay__18:
4265 02df 3eff          addlw   255
4266 02e0 1d03          btfss   __z___byte, __z___bit
4267 02e1 2adf          goto    delay__18
4268 02e2 2ae3          goto    delay__19
4269   02e3 :   delay__19:
4270                    ; Implied return
4271 02e3 3400          retlw   0
4272                    ; Final delay = 272
4273            
4274            
4275            
4276            
4277            
4278                    ; Appending 2 delayed procedures to code bank 0
4279                    ; buffer = 'bit_bang'
4280                    ; line_number = 33
4281                    ; procedure byte_get
4282   02e4 :   byte_get:
4283                    ; arguments_none
4284                    ; line_number = 35
4285                    ;  returns byte
4286            
4287                    ; # This procedure will wait for a byte to be received from
4288                    ; # serial_in_bit.  It calls the delay procedure for all delays.
4289                    ; # This procedure will keep calling the {delay} routine until
4290                    ; # data is received.
4291            
4292                    ; line_number = 42
4293                    ;  local count byte
4294 00000020 = byte_get__count equ globals___0
4295                    ; line_number = 43
4296                    ;  local byte byte
4297 00000021 = byte_get__byte equ globals___0+1
4298            
4299                    ; # Why does the delay procedure wait for a third of bit?  Well, it
4300                    ; # has to do with the loop immediately below.  If we catch the
4301                    ; # start bit at the beginning of a 1/3 bit time, we will be
4302                    ; # sampling data at approximately 1/3 of the way into each bit.
4303                    ; # Conversely, if we catch the start near the end of a 1/3 bit
4304                    ; # bit time, we will be sampling data at approximately 2/3 of the
4305                    ; # way into each bit.  So, what this means is that our bit sample
4306                    ; # times will be somewhere between 1/3 and 2/3 of bit (i.e. in
4307                    ; # the middle of the bit.
4308            
4309                    ; # It would be nice to tweak the code to shorter delay times
4310                    ; # (1/4 bit, 1/5 bit, etc.) but then it gets too hard to get
4311                    ; # the bookeeping done in the delay routine.  A PIC running at
4312                    ; # 4MHz (=1MIPS), only has 138 instructions available for the
4313                    ; # delay routine when at 1/3 of bit.
4314            
4315                    ; # Wait for a start bit:
4316                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
4317                    ; line_number = 62
4318                    ;  waiting := 1
4319 02e4 14ef          bsf     waiting___byte, waiting___bit
4320                    ; line_number = 63
4321                    ;  receiving := 1
4322 02e5 146f          bsf     receiving___byte, receiving___bit
4323                    ; line_number = 64
4324                    ;  while serial_in start
4325   02e6 :   byte_get__1:
4326                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
4327                    ; CASE: true_code.size = 0 && false_code.size > 1
4328                    ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=0 (non-uniform delay)
4329 02e6 1e87          btfss   serial_in___byte, serial_in___bit
4330 02e7 2aea          goto    byte_get__2
4331                    ; line_number = 65
4332                    ; delay instructions_per_delay - 3 start
4333                    ; Delay expression evaluates to 274
4334                    ; line_number = 66
4335                    ; call delay()
4336                    ; Delay at call is 0
4337 02e8 227c          call    delay
4338                    ; line_number = 65
4339                    ; delay instructions_per_delay - 3 done
4340 02e9 2ae6          goto    byte_get__1
4341                    ; Recombine size1 = 0 || size2 = 0
4342   02ea :   byte_get__2:
4343                    ; code.delay=4294967295 back_code.delay=4294967295
4344                    ; <=bit_code_emit@symbol; sym=serial_in (data:00=>00 code:XX=>XX)
4345                    ; line_number = 64
4346                    ;  while serial_in done
4347                    ; line_number = 67
4348                    ; waiting := 0
4349 02ea 10ef          bcf     waiting___byte, waiting___bit
4350            
4351                    ; # Clear out any preceeding interrupt condition:
4352                    ; line_number = 70
4353                    ;  serial_out := 1
4354 02eb 1607          bsf     serial_out___byte, serial_out___bit
4355            
4356                    ; # Skip over start bit:
4357                    ; line_number = 73
4358                    ;  delay instructions_per_bit - 2 start
4359                    ; Delay expression evaluates to 831
4360                    ; # There are two instructions of set-up for following loop_exactly:
4361                    ; line_number = 75
4362                    ;  call delay()
4363                    ; Delay at call is 0
4364 02ec 227c          call    delay
4365                    ; line_number = 76
4366                    ;  call delay()
4367                    ; Delay at call is 274
4368 02ed 227c          call    delay
4369                    ; line_number = 77
4370                    ;  call delay()
4371                    ; Delay at call is 548
4372 02ee 227c          call    delay
4373                    ; line_number = 78
4374                    ;  byte := 0
4375                    ; Delay at assignment is 822
4376 02ef 3000          movlw   0
4377 02f0 00a1          movwf   byte_get__byte
4378            
4379                    ; Delay 7 cycles
4380 02f1 2af2          goto    byte_get__3
4381   02f2 :   byte_get__3:
4382 02f2 2af3          goto    byte_get__4
4383   02f3 :   byte_get__4:
4384 02f3 2af4          goto    byte_get__5
4385   02f4 :   byte_get__5:
4386 02f4 0000          nop     
4387                    ; line_number = 73
4388                    ;  delay instructions_per_bit - 2 done
4389                    ; # Read in 8 bits of data:
4390                    ; line_number = 81
4391                    ;  loop_exactly 8 start
4392 00000051 = byte_get__6 equ globals___0+49
4393 02f5 3008          movlw   8
4394 02f6 00d1          movwf   byte_get__6
4395   02f7 :   byte_get__7:
4396                    ; # There are 3 instrucitons of loop_exactly overhead:
4397                    ; line_number = 83
4398                    ;  delay instructions_per_bit - 3 start
4399                    ; Delay expression evaluates to 830
4400                    ; line_number = 84
4401                    ; call delay()
4402                    ; Delay at call is 0
4403 02f7 227c          call    delay
4404                    ; line_number = 85
4405                    ;  byte := byte >> 1
4406                    ; Delay at assignment is 274
4407                    ; Assignment of variable to self (no code needed)
4408 02f8 0ca1          rrf     byte_get__byte,f
4409 02f9 13a1          bcf     byte_get__byte, 7
4410                    ; line_number = 86
4411                    ;  if serial_in start
4412                    ; Delay at if is 276
4413                    ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
4414                    ; CASE: True.size=1 False.size=0
4415 02fa 1a87          btfsc   serial_in___byte, serial_in___bit
4416                    ; line_number = 87
4417                    ; byte@7 := 1
4418                    ; Delay at assignment is 0
4419 00000021 = byte_get__select__8___byte equ byte_get__byte
4420 00000007 = byte_get__select__8___bit equ 7
4421 02fb 17a1          bsf     byte_get__select__8___byte, byte_get__select__8___bit
4422                    ; code.delay=278 back_code.delay=0
4423                    ; <=bit_code_emit@symbol; sym=serial_in (data:00=>00 code:XX=>XX)
4424                    ; if final true delay=1 false delay=0 code delay=278
4425                    ; line_number = 86
4426                    ;  if serial_in done
4427                    ; line_number = 88
4428                    ; call delay()
4429                    ; Delay at call is 278
4430 02fc 227c          call    delay
4431                    ; line_number = 89
4432                    ;  call delay()
4433                    ; Delay at call is 552
4434 02fd 227c          call    delay
4435            
4436                    ; Delay 4 cycles
4437 02fe 2aff          goto    byte_get__9
4438   02ff :   byte_get__9:
4439 02ff 2b00          goto    byte_get__10
4440   0300 :   byte_get__10:
4441                    ; line_number = 83
4442                    ;  delay instructions_per_bit - 3 done
4443                    ; line_number = 81
4444                    ;  loop_exactly 8 wrap-up
4445 0300 0bd1          decfsz  byte_get__6,f
4446 0301 2af7          goto    byte_get__7
4447                    ; line_number = 81
4448                    ;  loop_exactly 8 done
4449                    ; # Skip over 2/3's of stop bit; 3 cycles for return:
4450                    ; line_number = 92
4451                    ;  delay instructions_per_delay*2 - 3 start
4452                    ; Delay expression evaluates to 551
4453                    ; line_number = 93
4454                    ; call delay()
4455                    ; Delay at call is 0
4456 0302 227c          call    delay
4457                    ; line_number = 94
4458                    ;  call delay()
4459                    ; Delay at call is 274
4460 0303 227c          call    delay
4461                    ; Delay 3 cycles
4462 0304 2b05          goto    byte_get__11
4463   0305 :   byte_get__11:
4464 0305 0000          nop     
4465                    ; line_number = 92
4466                    ;  delay instructions_per_delay*2 - 3 done
4467                    ; line_number = 95
4468                    ; command_previous := command_last
4469 0306 082a          movf    command_last,w
4470 0307 00a9          movwf   command_previous
4471                    ; line_number = 96
4472                    ;  command_last := byte
4473 0308 0821          movf    byte_get__byte,w
4474 0309 00aa          movwf   command_last
4475                    ; line_number = 97
4476                    ;  serial_out := 1
4477 030a 1607          bsf     serial_out___byte, serial_out___bit
4478                    ; line_number = 98
4479                    ;  return byte start
4480                    ; line_number = 98
4481 030b 0821          movf    byte_get__byte,w
4482 030c 0008          return  
4483                    ; line_number = 98
4484                    ;  return byte done
4485            
4486            
4487                    ; delay after procedure statements=non-uniform
4488            
4489            
4490            
4491            
4492                    ; line_number = 101
4493                    ; procedure byte_put
4494   030d :   byte_put:
4495                    ; Last argument is sitting in W; save into argument variable
4496 030d 00a3          movwf   byte_put__byte
4497                    ; delay=4294967295
4498                    ; line_number = 102
4499                    ; argument byte byte
4500 00000023 = byte_put__byte equ globals___0+3
4501                    ; line_number = 103
4502                    ;  returns_nothing
4503            
4504                    ; # This procedure will send {byte} to {serial_out} pin.  The {delay}
4505                    ; # procedure is called to provide the appropriate bit timing.
4506            
4507                    ; line_number = 108
4508                    ;  local count byte
4509 00000022 = byte_put__count equ globals___0+2
4510            
4511                    ; # {receiving} will be 1 if the last get/put routine was a get.
4512                    ; # Before we start transmitting a response back, we want to ensure
4513                    ; # that there has been enough time to turn the line around.
4514                    ; # We delay the first 1/3 of a bit to pad out the 9-2/3 bits
4515                    ; # from get_byte to 10 bits.  We delay another 3 bits just to
4516                    ; # ensure that slow interpreters do not get overrun.
4517                    ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:XX=>XX)
4518                    ; line_number = 116
4519                    ;  sent_previous := sent_last
4520 030e 082c          movf    sent_last,w
4521 030f 00ab          movwf   sent_previous
4522                    ; line_number = 117
4523                    ;  sent_last := byte
4524 0310 0823          movf    byte_put__byte,w
4525 0311 00ac          movwf   sent_last
4526                    ; line_number = 118
4527                    ;  if receiving start
4528                    ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
4529                    ; CASE: true_code.size = 0 && false_code.size > 1
4530                    ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
4531 0312 1c6f          btfss   receiving___byte, receiving___bit
4532 0313 2b1a          goto    byte_put__3
4533                    ; line_number = 119
4534                    ; receiving := 0
4535 0314 106f          bcf     receiving___byte, receiving___bit
4536                    ; # 10 = 1 + 3*3 = 3-1/3 extra bits of delay:
4537                    ; line_number = 121
4538                    ;  loop_exactly 10 start
4539 00000052 = byte_put__1 equ globals___0+50
4540 0315 300a          movlw   10
4541 0316 00d2          movwf   byte_put__1
4542   0317 :   byte_put__2:
4543                    ; line_number = 122
4544                    ; call delay()
4545 0317 227c          call    delay
4546            
4547                    ; line_number = 121
4548                    ;  loop_exactly 10 wrap-up
4549 0318 0bd2          decfsz  byte_put__1,f
4550 0319 2b17          goto    byte_put__2
4551                    ; line_number = 121
4552                    ;  loop_exactly 10 done
4553                    ; Recombine size1 = 0 || size2 = 0
4554   031a :   byte_put__3:
4555                    ; code.delay=4294967295 back_code.delay=4294967295
4556                    ; <=bit_code_emit@symbol; sym=receiving (data:00=>00 code:XX=>XX)
4557                    ; line_number = 118
4558                    ;  if receiving done
4559                    ; # Send the start bit:
4560                    ; line_number = 125
4561                    ;  delay instructions_per_bit - 2 start
4562                    ; Delay expression evaluates to 831
4563                    ; # The loop_exactly setup after this is 2 instructions:
4564                    ; line_number = 127
4565                    ;  serial_out := 0
4566                    ; Delay at assignment is 0
4567 031a 1207          bcf     serial_out___byte, serial_out___bit
4568                    ; line_number = 128
4569                    ;  call delay()
4570                    ; Delay at call is 1
4571 031b 227c          call    delay
4572                    ; line_number = 129
4573                    ;  call delay()
4574                    ; Delay at call is 275
4575 031c 227c          call    delay
4576                    ; line_number = 130
4577                    ;  call delay()
4578                    ; Delay at call is 549
4579 031d 227c          call    delay
4580            
4581                    ; Delay 8 cycles
4582                    ; Delay loop takes 2 * 4 = 8 cycles
4583 031e 3002          movlw   2
4584   031f :   byte_put__4:
4585 031f 3eff          addlw   255
4586 0320 1d03          btfss   __z___byte, __z___bit
4587 0321 2b1f          goto    byte_put__4
4588                    ; line_number = 125
4589                    ;  delay instructions_per_bit - 2 done
4590                    ; # Send the data:
4591                    ; line_number = 133
4592                    ;  loop_exactly 8 start
4593 00000052 = byte_put__5 equ globals___0+50
4594 0322 3008          movlw   8
4595 0323 00d2          movwf   byte_put__5
4596   0324 :   byte_put__6:
4597                    ; # Loop_exactly overhead is 3 instructions:
4598                    ; line_number = 135
4599                    ;  delay instructions_per_bit - 3 start
4600                    ; Delay expression evaluates to 830
4601                    ; line_number = 136
4602                    ; if byte@0 start
4603                    ; Delay at if is 0
4604 00000023 = byte_put__select__7___byte equ byte_put__byte
4605 00000000 = byte_put__select__7___bit equ 0
4606                    ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
4607                    ; CASE: true_size=1 && false_size=1
4608                    ; SUBCASE: Double test; true, then false
4609 0324 1823          btfsc   byte_put__select__7___byte, byte_put__select__7___bit
4610                    ; line_number = 137
4611                    ; serial_out := 1
4612                    ; Delay at assignment is 0
4613 0325 1607          bsf     serial_out___byte, serial_out___bit
4614 0326 1c23          btfss   byte_put__select__7___byte, byte_put__select__7___bit
4615                    ; line_number = 139
4616                    ; serial_out := 0
4617                    ; Delay at assignment is 0
4618 0327 1207          bcf     serial_out___byte, serial_out___bit
4619                    ; code.delay=4 back_code.delay=0
4620                    ; <=bit_code_emit@symbol; sym=byte_put__select__7 (data:00=>00 code:XX=>XX)
4621                    ; if final true delay=1 false delay=1 code delay=4
4622                    ; line_number = 136
4623                    ; if byte@0 done
4624                    ; line_number = 140
4625                    ; byte := byte >> 1
4626                    ; Delay at assignment is 4
4627                    ; Assignment of variable to self (no code needed)
4628 0328 0ca3          rrf     byte_put__byte,f
4629 0329 13a3          bcf     byte_put__byte, 7
4630                    ; line_number = 141
4631                    ;  call delay()
4632                    ; Delay at call is 6
4633 032a 227c          call    delay
4634                    ; line_number = 142
4635                    ;  call delay()
4636                    ; Delay at call is 280
4637 032b 227c          call    delay
4638                    ; line_number = 143
4639                    ;  call delay()
4640                    ; Delay at call is 554
4641 032c 227c          call    delay
4642            
4643                    ; Delay 2 cycles
4644 032d 2b2e          goto    byte_put__8
4645   032e :   byte_put__8:
4646                    ; line_number = 135
4647                    ;  delay instructions_per_bit - 3 done
4648                    ; line_number = 133
4649                    ;  loop_exactly 8 wrap-up
4650 032e 0bd2          decfsz  byte_put__5,f
4651 032f 2b24          goto    byte_put__6
4652                    ; line_number = 133
4653                    ;  loop_exactly 8 done
4654                    ; # Send the stop bit:
4655                    ; line_number = 146
4656                    ;  delay instructions_per_bit start
4657                    ; Delay expression evaluates to 833
4658                    ; line_number = 147
4659                    ; serial_out := 1
4660                    ; Delay at assignment is 0
4661 0330 1607          bsf     serial_out___byte, serial_out___bit
4662                    ; line_number = 148
4663                    ;  call delay()
4664                    ; Delay at call is 1
4665 0331 227c          call    delay
4666                    ; line_number = 149
4667                    ;  call delay()
4668                    ; Delay at call is 275
4669 0332 227c          call    delay
4670                    ; line_number = 150
4671                    ;  call delay()
4672                    ; Delay at call is 549
4673 0333 227c          call    delay
4674            
4675            
4676                    ; Delay 10 cycles
4677                    ; Delay loop takes 2 * 4 = 8 cycles
4678 0334 3002          movlw   2
4679   0335 :   byte_put__9:
4680 0335 3eff          addlw   255
4681 0336 1d03          btfss   __z___byte, __z___bit
4682 0337 2b35          goto    byte_put__9
4683 0338 2b39          goto    byte_put__10
4684   0339 :   byte_put__10:
4685                    ; line_number = 146
4686                    ;  delay instructions_per_bit done
4687                    ; delay after procedure statements=non-uniform
4688                    ; Implied return
4689 0339 3400          retlw   0
4690            
4691            
4692            
4693            
4694                    ; Configuration bits
4695                    ; fill = 0x3000
4696                    ; fcmen = off (0x0)
4697                    ; ieso = off (0x0)
4698                    ; boden = off (0x0)
4699                    ; cpd = off (0x80)
4700                    ; cp = off (0x40)
4701                    ; mclre = off (0x20)
4702                    ; pwrte = off (0x10)
4703                    ; wdte = off (0x0)
4704                    ; fosc = int_no_clk (0x4)
4705                    ; 12532 = 0x30f4
4706   30f4 =           __config 12532
4707                    ; Define start addresses for data regions
4708                    ; Region="shared___globals" Address=112" Size=16 Bytes=0 Bits=0 Available=16
4709                    ; Region="globals___0" Address=32" Size=80 Bytes=51 Bits=3 Available=28
4710                    ; Region="globals___1" Address=160" Size=80 Bytes=0 Bits=0 Available=80
4711                    ; Region="globals___2" Address=288" Size=80 Bytes=0 Bits=0 Available=80
4712                    ; Region="globals___3" Address=416" Size=80 Bytes=0 Bits=0 Available=80
4713                    end
