radix dec ; Code bank 0; Start address: 0; End address: 4095 org 0 ; Define start addresses for data regions shared___globals equ 112 globals___0 equ 32 globals___1 equ 160 globals___2 equ 288 __indf equ 0 __pcl equ 2 __status equ 3 __fsr equ 4 __c___byte equ 3 __c___bit equ 0 __z___byte equ 3 __z___bit equ 2 __rp0___byte equ 3 __rp0___bit equ 5 __rp1___byte equ 3 __rp1___bit equ 6 __irp___byte equ 3 __irp___bit equ 7 __pclath equ 10 __cb0___byte equ 10 __cb0___bit equ 3 __cb1___byte equ 10 __cb1___bit equ 4 ; # Copyright (c) 2005-2006 by Wayne C. Gramlich ; # All rights reserved. ; buffer = 'host' ; line_number = 6 ; library _pic16f688 entered ; # Copyright (c) 2004-2006 by Wayne C. Gramlich ; # All rights reserved. ; buffer = '_pic16f688' ; line_number = 6 ; processor pic16f688 ; line_number = 7 ; configure_address 0x2007 ; line_number = 8 ; configure_fill 0x3000 ; line_number = 9 ; configure_option fcmen: on = 0x800 ; line_number = 10 ; configure_option fcmen: off = 0x000 ; line_number = 11 ; configure_option ieso: on = 0x400 ; line_number = 12 ; configure_option ieso: off = 0x000 ; line_number = 13 ; configure_option boden: on = 0x300 ; line_number = 14 ; configure_option boden: partial = 0x200 ; line_number = 15 ; configure_option boden: sboden = 0x100 ; line_number = 16 ; configure_option boden: off = 0x000 ; line_number = 17 ; configure_option cpd: on = 0x00 ; line_number = 18 ; configure_option cpd: off = 0x80 ; line_number = 19 ; configure_option cp: on = 0x00 ; line_number = 20 ; configure_option cp: off = 0x40 ; line_number = 21 ; configure_option mclre: on = 0x20 ; line_number = 22 ; configure_option mclre: off = 0x00 ; line_number = 23 ; configure_option pwrte: on = 0x00 ; line_number = 24 ; configure_option pwrte: off = 0x10 ; line_number = 25 ; configure_option wdte: on = 8 ; line_number = 26 ; configure_option wdte: off = 0 ; line_number = 27 ; configure_option fosc: rc_clk = 7 ; line_number = 28 ; configure_option fosc: rc_no_clk = 6 ; line_number = 29 ; configure_option fosc: int_clk = 5 ; line_number = 30 ; configure_option fosc: int_no_clk = 4 ; line_number = 31 ; configure_option fosc: ec = 3 ; line_number = 32 ; configure_option fosc: hs = 2 ; line_number = 33 ; configure_option fosc: xt = 1 ; line_number = 34 ; configure_option fosc: lp = 0 ; line_number = 36 ; code_bank 0x0 : 0xfff ; line_number = 37 ; data_bank 0x0 : 0x7f ; line_number = 38 ; data_bank 0x80 : 0xff ; line_number = 39 ; data_bank 0x100 : 0x17f ; line_number = 40 ; data_bank 0x180 : 0x1ff ; line_number = 42 ; global_region 0x20 : 0x6f ; line_number = 43 ; icd2_global_region 0x20 : 0x6f ; line_number = 45 ; global_region 0xa0 : 0xef ; line_number = 46 ; icd2_global_region 0xa0 : 0xef ; line_number = 48 ; global_region 0x120 : 0x16f ; line_number = 49 ; icd2_global_region 0x120 : 0x164 ; line_number = 51 ; shared_region 0x70 : 0x7f ; line_number = 52 ; icd2_shared_region 0x71 : 0x7f ; line_number = 54 ; interrupts_possible ; line_number = 55 ; packages pdip=14, soic=14, tssop=14 ; line_number = 56 ; pin vdd, power_supply ; line_number = 57 ; pin_bindings pdip=1, soic=1, tssop=1 ; line_number = 58 ; pin ra5_in, ra5_nc, ra5_out, t1cki, osc1, clkin ; line_number = 59 ; pin_bindings pdip=2, soic=2, tssop=2 ; line_number = 60 ; bind_to _porta@5 ; line_number = 61 ; or_if ra5_in _trisa 32 ; line_number = 62 ; or_if ra5_nc _trisa 32 ; line_number = 63 ; or_if ra5_out _trisa 0 ; line_number = 64 ; or_if osc1 _trisa 32 ; line_number = 65 ; pin ra4_in, ra4_nc, ra4_out, t1g, osc2, an3, clkout ; line_number = 66 ; pin_bindings pdip=3, soic=3, tssop=3 ; line_number = 67 ; bind_to _porta@4 ; line_number = 68 ; or_if ra4_in _trisa 16 ; line_number = 69 ; or_if ra4_nc _trisa 16 ; line_number = 70 ; or_if ra4_out _trisa 0 ; line_number = 71 ; or_if an3 _trisa 16 ; line_number = 72 ; or_if osc2 _trisa 16 ; line_number = 73 ; or_if ra4_in _ansel 0 ; line_number = 74 ; or_if ra4_out _ansel 0 ; line_number = 75 ; or_if an3 _ansel 8 ; line_number = 76 ; or_if ra4_in _adcon0 0 ; line_number = 77 ; or_if ra4_out _adcon0 0 ; line_number = 78 ; or_if an3 _adcon0 1 ; line_number = 79 ; pin ra3_in, ra3_nc, mclr, vpp ; line_number = 80 ; pin_bindings pdip=4, soic=4, tssop=4 ; line_number = 81 ; bind_to _porta@3 ; line_number = 82 ; or_if ra3_in _trisa 8 ; line_number = 83 ; or_if ra3_nc _trisa 8 ; line_number = 84 ; pin rc5_in, rc5_nc, rc5_out, rx, dt ; line_number = 85 ; pin_bindings pdip=5, soic=5, tssop=5 ; line_number = 86 ; bind_to _portc@5 ; line_number = 87 ; or_if rc5_in _trisc 32 ; line_number = 88 ; or_if rc5_nc _trisc 32 ; line_number = 89 ; or_if rc5_out _trisc 0 ; line_number = 90 ; or_if rx _trisc 32 ; line_number = 91 ; pin rc4_in, rc4_nc, rc4_out, c2out, tx, ck ; line_number = 92 ; pin_bindings pdip=6, soic=6, tssop=6 ; line_number = 93 ; bind_to _portc@4 ; line_number = 94 ; or_if rc4_in _trisc 16 ; line_number = 95 ; or_if rc4_nc _trisc 16 ; line_number = 96 ; or_if rc4_out _trisc 0 ; # The UART documentation says TX must be marked as in input: ; line_number = 98 ; or_if tx _trisc 16 ; line_number = 99 ; pin rc3_in, rc3_nc, rc3_out, an7 ; line_number = 100 ; pin_bindings pdip=7, soic=7, tssop=7 ; line_number = 101 ; bind_to _portc@3 ; line_number = 102 ; or_if rc3_in _trisc 8 ; line_number = 103 ; or_if rc3_nc _trisc 8 ; line_number = 104 ; or_if rc3_out _trisc 0 ; line_number = 105 ; or_if an7 _trisc 8 ; line_number = 106 ; or_if rc3_in _ansel 0 ; line_number = 107 ; or_if rc3_out _ansel 0 ; line_number = 108 ; or_if an7 _ansel 128 ; line_number = 109 ; or_if rc3_in _adcon0 0 ; line_number = 110 ; or_if rc3_out _adcon0 0 ; line_number = 111 ; or_if an7 _adcon0 1 ; line_number = 112 ; pin rc2_in, rc2_nc, rc2_out, an6 ; line_number = 113 ; pin_bindings pdip=8, soic=8, tssop=8 ; line_number = 114 ; bind_to _portc@2 ; line_number = 115 ; or_if rc2_in _trisc 4 ; line_number = 116 ; or_if rc2_nc _trisc 4 ; line_number = 117 ; or_if rc2_out _trisc 0 ; line_number = 118 ; or_if an6 _trisc 4 ; line_number = 119 ; or_if rc2_in _ansel 0 ; line_number = 120 ; or_if rc2_out _ansel 0 ; line_number = 121 ; or_if an6 _ansel 64 ; line_number = 122 ; or_if rc2_in _adcon0 0 ; line_number = 123 ; or_if rc2_out _adcon0 0 ; line_number = 124 ; or_if an6 _adcon0 1 ; line_number = 125 ; pin rc1_in, rc1_nc, rc1_out, an5, c2in_minus ; line_number = 126 ; pin_bindings pdip=9, soic=9, tssop=9 ; line_number = 127 ; bind_to _portc@1 ; line_number = 128 ; or_if rc1_in _trisc 2 ; line_number = 129 ; or_if rc1_nc _trisc 2 ; line_number = 130 ; or_if rc1_out _trisc 0 ; line_number = 131 ; or_if rc1_in _cmcon0 7 ; line_number = 132 ; or_if rc1_out _cmcon0 7 ; line_number = 133 ; or_if an5 _trisc 2 ; line_number = 134 ; or_if rc1_in _ansel 0 ; line_number = 135 ; or_if rc1_out _ansel 0 ; line_number = 136 ; or_if an5 _ansel 32 ; line_number = 137 ; or_if rc1_in _adcon0 0 ; line_number = 138 ; or_if rc1_out _adcon0 0 ; line_number = 139 ; or_if an5 _adcon0 1 ; line_number = 140 ; pin rc0_in, rc0_nc, rc0_out, an4, c2in_plus ; line_number = 141 ; pin_bindings pdip=10, soic=10, tssop=10 ; line_number = 142 ; bind_to _portc@0 ; line_number = 143 ; or_if rc0_in _trisc 1 ; line_number = 144 ; or_if rc0_nc _trisc 1 ; line_number = 145 ; or_if rc0_out _trisc 0 ; line_number = 146 ; or_if rc0_in _cmcon0 7 ; line_number = 147 ; or_if rc0_out _cmcon0 7 ; line_number = 148 ; or_if an4 _trisc 1 ; line_number = 149 ; or_if rc0_in _ansel 0 ; line_number = 150 ; or_if rc0_out _ansel 0 ; line_number = 151 ; or_if an4 _ansel 16 ; line_number = 152 ; or_if rc0_in _adcon0 0 ; line_number = 153 ; or_if rc0_out _adcon0 0 ; line_number = 154 ; or_if an4 _adcon0 1 ; line_number = 155 ; pin ra2_in, ra2_nc, ra2_out, an2, c1out, t0cki, int ; line_number = 156 ; pin_bindings pdip=11, soic=11, tssop=11 ; line_number = 157 ; bind_to _porta@2 ; line_number = 158 ; or_if ra2_in _trisa 4 ; line_number = 159 ; or_if ra2_nc _trisa 4 ; line_number = 160 ; or_if ra2_out _trisa 0 ; line_number = 161 ; or_if an2 _trisa 4 ; line_number = 162 ; or_if ra2_in _ansel 0 ; line_number = 163 ; or_if ra2_out _ansel 0 ; line_number = 164 ; or_if an2 _ansel 4 ; line_number = 165 ; or_if ra2_in _adcon0 0 ; line_number = 166 ; or_if ra2_out _adcon0 0 ; line_number = 167 ; or_if an2 _adcon0 1 ; line_number = 168 ; pin ra1_in, ra1_nc, ra1_out, an1, c1in_minus, vref, icspclk ; line_number = 169 ; pin_bindings pdip=12, soic=12, tssop=12 ; line_number = 170 ; bind_to _porta@1 ; line_number = 171 ; or_if ra1_in _trisa 2 ; line_number = 172 ; or_if ra1_nc _trisa 2 ; line_number = 173 ; or_if ra1_out _trisa 0 ; line_number = 174 ; or_if ra1_in _cmcon0 7 ; line_number = 175 ; or_if ra1_out _cmcon0 7 ; line_number = 176 ; or_if an1 _trisa 2 ; line_number = 177 ; or_if vref _trisa 2 ; line_number = 178 ; or_if ra1_in _ansel 0 ; line_number = 179 ; or_if ra1_out _ansel 0 ; line_number = 180 ; or_if an1 _ansel 2 ; line_number = 181 ; or_if vref _ansel 2 ; line_number = 182 ; or_if ra1_in _adcon0 0 ; line_number = 183 ; or_if ra1_out _adcon0 0 ; line_number = 184 ; or_if an1 _adcon0 1 # Turn on _addon ; line_number = 185 ; or_if vref _adcon0 1 # Turn on _addon ; line_number = 186 ; or_if vref _adcon0 64 # Turn of _vcfg ; line_number = 187 ; pin ra0_in, ra0_nc, ra0_out, an0, c1in_plus, icspdat, ulpwu ; line_number = 188 ; pin_bindings pdip=13, soic=13, tssop=13 ; line_number = 189 ; bind_to _porta@0 ; line_number = 190 ; or_if ra0_in _trisa 1 ; line_number = 191 ; or_if ra0_nc _trisa 1 ; line_number = 192 ; or_if ra0_out _trisa 0 ; line_number = 193 ; or_if ra0_in _cmcon0 7 ; line_number = 194 ; or_if ra0_out _cmcon0 7 ; line_number = 195 ; or_if an0 _trisa 1 ; line_number = 196 ; or_if ra0_in _ansel 0 ; line_number = 197 ; or_if ra0_out _ansel 0 ; line_number = 198 ; or_if an0 _ansel 1 ; line_number = 199 ; or_if ra0_in _adcon0 0 ; line_number = 200 ; or_if ra0_out _adcon0 0 ; line_number = 201 ; or_if an0 _adcon0 1 ; line_number = 202 ; pin vss, ground ; line_number = 203 ; pin_bindings pdip=14, soic=14, tssop=14 ; line_number = 205 ; library _standard entered ; # Copyright (c) 2006 by Wayne C. Gramlich ; # All rights reserved. ; # Standard definition for uCL: ; buffer = '_standard' ; line_number = 8 ; constant _true = (1 = 1) _true equ 1 ; line_number = 9 ; constant _false = (0 != 0) _false equ 0 ; buffer = '_pic16f688' ; line_number = 205 ; library _standard exited ; # Register/bit bindings: ; # Databank 0 (0x0 - 0x7f): ; line_number = 216 ; register _indf = _indf equ 0 ; line_number = 218 ; register _tmr0 = _tmr0 equ 1 ; line_number = 220 ; register _pcl = _pcl equ 2 ; line_number = 222 ; register _status = _status equ 3 ; line_number = 223 ; bind _irp = _status@7 _irp___byte equ _status _irp___bit equ 7 ; line_number = 224 ; bind _rp1 = _status@5 _rp1___byte equ _status _rp1___bit equ 5 ; line_number = 225 ; bind _rp0 = _status@5 _rp0___byte equ _status _rp0___bit equ 5 ; line_number = 226 ; bind _to = _status@4 _to___byte equ _status _to___bit equ 4 ; line_number = 227 ; bind _pd = _status@3 _pd___byte equ _status _pd___bit equ 3 ; line_number = 228 ; bind _z = _status@2 _z___byte equ _status _z___bit equ 2 ; line_number = 229 ; bind _dc = _status@1 _dc___byte equ _status _dc___bit equ 1 ; line_number = 230 ; bind _c = _status@0 _c___byte equ _status _c___bit equ 0 ; line_number = 232 ; register _fsr = _fsr equ 4 ; line_number = 234 ; register _porta = _porta equ 5 ; line_number = 235 ; register _ra = _ra equ 5 ; line_number = 236 ; bind _ra5 = _porta@5 _ra5___byte equ _porta _ra5___bit equ 5 ; line_number = 237 ; bind _ra4 = _porta@4 _ra4___byte equ _porta _ra4___bit equ 4 ; line_number = 238 ; bind _ra3 = _porta@3 _ra3___byte equ _porta _ra3___bit equ 3 ; line_number = 239 ; bind _ra2 = _porta@2 _ra2___byte equ _porta _ra2___bit equ 2 ; line_number = 240 ; bind _ra1 = _porta@1 _ra1___byte equ _porta _ra1___bit equ 1 ; line_number = 241 ; bind _ra0 = _porta@0 _ra0___byte equ _porta _ra0___bit equ 0 ; line_number = 243 ; register _portc = _portc equ 7 ; line_number = 244 ; register _rc = _rc equ 7 ; line_number = 245 ; bind _rc5 = _portc@5 _rc5___byte equ _portc _rc5___bit equ 5 ; line_number = 246 ; bind _rc4 = _portc@4 _rc4___byte equ _portc _rc4___bit equ 4 ; line_number = 247 ; bind _rc3 = _portc@3 _rc3___byte equ _portc _rc3___bit equ 3 ; line_number = 248 ; bind _rc2 = _portc@2 _rc2___byte equ _portc _rc2___bit equ 2 ; line_number = 249 ; bind _rc1 = _portc@1 _rc1___byte equ _portc _rc1___bit equ 1 ; line_number = 250 ; bind _rc0 = _portc@0 _rc0___byte equ _portc _rc0___bit equ 0 ; line_number = 252 ; register _pclath = _pclath equ 10 ; line_number = 254 ; register _intcon = _intcon equ 11 ; line_number = 255 ; bind _gie = _intcon@7 _gie___byte equ _intcon _gie___bit equ 7 ; line_number = 256 ; bind _peie = _intcon@6 _peie___byte equ _intcon _peie___bit equ 6 ; line_number = 257 ; bind _t0ie = _intcon@5 _t0ie___byte equ _intcon _t0ie___bit equ 5 ; line_number = 258 ; bind _inte = _intcon@4 _inte___byte equ _intcon _inte___bit equ 4 ; line_number = 259 ; bind _raie = _intcon@3 _raie___byte equ _intcon _raie___bit equ 3 ; line_number = 260 ; bind _t0if = _intcon@2 _t0if___byte equ _intcon _t0if___bit equ 2 ; line_number = 261 ; bind _intf = _intcon@1 _intf___byte equ _intcon _intf___bit equ 1 ; line_number = 262 ; bind _raif = _intcon@0 _raif___byte equ _intcon _raif___bit equ 0 ; line_number = 264 ; register _pir1 = _pir1 equ 12 ; line_number = 265 ; bind _eeif = _pir1@7 _eeif___byte equ _pir1 _eeif___bit equ 7 ; line_number = 266 ; bind _adif = _pir1@6 _adif___byte equ _pir1 _adif___bit equ 6 ; line_number = 267 ; bind _rcif = _pir1@5 _rcif___byte equ _pir1 _rcif___bit equ 5 ; line_number = 268 ; bind _c2if = _pir1@4 _c2if___byte equ _pir1 _c2if___bit equ 4 ; line_number = 269 ; bind _c1if = _pir1@3 _c1if___byte equ _pir1 _c1if___bit equ 3 ; line_number = 270 ; bind _osfif = _pir1@2 _osfif___byte equ _pir1 _osfif___bit equ 2 ; line_number = 271 ; bind _txif = _pir1@1 _txif___byte equ _pir1 _txif___bit equ 1 ; line_number = 272 ; bind _tmr1if = _pir1@0 _tmr1if___byte equ _pir1 _tmr1if___bit equ 0 ; line_number = 274 ; register _tmr1l = _tmr1l equ 14 ; line_number = 276 ; register _tmr1h = _tmr1h equ 15 ; line_number = 278 ; register _t1con = _t1con equ 16 ; line_number = 279 ; bind t1ginv = _t1con@7 t1ginv___byte equ _t1con t1ginv___bit equ 7 ; line_number = 280 ; bind _tmr1ge = _t1con@6 _tmr1ge___byte equ _t1con _tmr1ge___bit equ 6 ; line_number = 281 ; bind _t1ckps1 = _t1con@5 _t1ckps1___byte equ _t1con _t1ckps1___bit equ 5 ; line_number = 282 ; bind _t1ckps0 = _t1con@4 _t1ckps0___byte equ _t1con _t1ckps0___bit equ 4 ; line_number = 283 ; bind _t1oscen = _t1con@3 _t1oscen___byte equ _t1con _t1oscen___bit equ 3 ; line_number = 284 ; bind _t1sync = _t1con@2 _t1sync___byte equ _t1con _t1sync___bit equ 2 ; line_number = 285 ; bind _tmr1cs = _t1con@1 _tmr1cs___byte equ _t1con _tmr1cs___bit equ 1 ; line_number = 286 ; bind _tmr1on = _t1con@0 _tmr1on___byte equ _t1con _tmr1on___bit equ 0 ; line_number = 288 ; register _baudctl = _baudctl equ 17 ; line_number = 289 ; bind _abdovf = _baudctl@7 _abdovf___byte equ _baudctl _abdovf___bit equ 7 ; line_number = 290 ; bind _rcidl = _baudctl@6 _rcidl___byte equ _baudctl _rcidl___bit equ 6 ; line_number = 291 ; bind _sckp = _baudctl@4 _sckp___byte equ _baudctl _sckp___bit equ 4 ; line_number = 292 ; bind _brg16 = _baudctl@3 _brg16___byte equ _baudctl _brg16___bit equ 3 ; line_number = 293 ; bind _wue = _baudctl@1 _wue___byte equ _baudctl _wue___bit equ 1 ; line_number = 294 ; bind _abden = _baudctl@0 _abden___byte equ _baudctl _abden___bit equ 0 ; line_number = 296 ; register _spbrgh = _spbrgh equ 18 ; line_number = 298 ; register _spbrg = _spbrg equ 19 ; line_number = 300 ; register _rcreg = _rcreg equ 20 ; line_number = 302 ; register _txreg = _txreg equ 21 ; line_number = 304 ; register _txsta = _txsta equ 22 ; line_number = 305 ; bind _csrc = _txsta@7 _csrc___byte equ _txsta _csrc___bit equ 7 ; line_number = 306 ; bind _tx9 = _txsta@6 _tx9___byte equ _txsta _tx9___bit equ 6 ; line_number = 307 ; bind _txen = _txsta@5 _txen___byte equ _txsta _txen___bit equ 5 ; line_number = 308 ; bind _sync = _txsta@4 _sync___byte equ _txsta _sync___bit equ 4 ; line_number = 309 ; bind _sendb = _txsta@3 _sendb___byte equ _txsta _sendb___bit equ 3 ; line_number = 310 ; bind _brgh = _txsta@2 _brgh___byte equ _txsta _brgh___bit equ 2 ; line_number = 311 ; bind _trmt = _txsta@1 _trmt___byte equ _txsta _trmt___bit equ 1 ; line_number = 312 ; bind _tx9d = _txsta@0 _tx9d___byte equ _txsta _tx9d___bit equ 0 ; line_number = 314 ; register _rcsta = _rcsta equ 23 ; line_number = 315 ; bind _spen = _rcsta@7 _spen___byte equ _rcsta _spen___bit equ 7 ; line_number = 316 ; bind _rx9 = _rcsta@6 _rx9___byte equ _rcsta _rx9___bit equ 6 ; line_number = 317 ; bind _sren = _rcsta@5 _sren___byte equ _rcsta _sren___bit equ 5 ; line_number = 318 ; bind _cren = _rcsta@4 _cren___byte equ _rcsta _cren___bit equ 4 ; line_number = 319 ; bind _adden = _rcsta@3 _adden___byte equ _rcsta _adden___bit equ 3 ; line_number = 320 ; bind _ferr = _rcsta@2 _ferr___byte equ _rcsta _ferr___bit equ 2 ; line_number = 321 ; bind _oerr = _rcsta@1 _oerr___byte equ _rcsta _oerr___bit equ 1 ; line_number = 322 ; bind _rx9d = _rcsta@0 _rx9d___byte equ _rcsta _rx9d___bit equ 0 ; line_number = 324 ; register _wdtcon = _wdtcon equ 24 ; line_number = 325 ; bind _wdtps3 = _wdtcon@4 _wdtps3___byte equ _wdtcon _wdtps3___bit equ 4 ; line_number = 326 ; bind _wdtps2 = _wdtcon@3 _wdtps2___byte equ _wdtcon _wdtps2___bit equ 3 ; line_number = 327 ; bind _wdtps1 = _wdtcon@2 _wdtps1___byte equ _wdtcon _wdtps1___bit equ 2 ; line_number = 328 ; bind _wdtps0 = _wdtcon@1 _wdtps0___byte equ _wdtcon _wdtps0___bit equ 1 ; line_number = 329 ; bind _swdten = _wdtcon@0 _swdten___byte equ _wdtcon _swdten___bit equ 0 ; line_number = 331 ; register _cmcon0 = _cmcon0 equ 25 ; line_number = 332 ; bind _c1out = _cmcon0@7 _c1out___byte equ _cmcon0 _c1out___bit equ 7 ; line_number = 333 ; bind _c2out = _cmcon0@6 _c2out___byte equ _cmcon0 _c2out___bit equ 6 ; line_number = 334 ; bind _c1inv = _cmcon0@5 _c1inv___byte equ _cmcon0 _c1inv___bit equ 5 ; line_number = 335 ; bind _c2inv = _cmcon0@4 _c2inv___byte equ _cmcon0 _c2inv___bit equ 4 ; line_number = 336 ; bind _cis = _cmcon0@3 _cis___byte equ _cmcon0 _cis___bit equ 3 ; line_number = 337 ; bind _cm2 = _cmcon0@2 _cm2___byte equ _cmcon0 _cm2___bit equ 2 ; line_number = 338 ; bind _cm1 = _cmcon0@1 _cm1___byte equ _cmcon0 _cm1___bit equ 1 ; line_number = 339 ; bind _cm0 = _cmcon0@0 _cm0___byte equ _cmcon0 _cm0___bit equ 0 ; line_number = 341 ; register _cmcon1 = _cmcon1 equ 26 ; line_number = 342 ; bind _t1gss = _cmcon1@0 _t1gss___byte equ _cmcon1 _t1gss___bit equ 0 ; line_number = 343 ; bind _c2sync = _cmcon1@1 _c2sync___byte equ _cmcon1 _c2sync___bit equ 1 ; line_number = 345 ; register _adresh = _adresh equ 30 ; line_number = 347 ; register _adcon0 = _adcon0 equ 31 ; line_number = 348 ; bind _adfm = _adcon0@7 _adfm___byte equ _adcon0 _adfm___bit equ 7 ; line_number = 349 ; bind _vcfg = _adcon0@6 _vcfg___byte equ _adcon0 _vcfg___bit equ 6 ; line_number = 350 ; bind _chs2 = _adcon0@4 _chs2___byte equ _adcon0 _chs2___bit equ 4 ; line_number = 351 ; bind _chs1 = _adcon0@3 _chs1___byte equ _adcon0 _chs1___bit equ 3 ; line_number = 352 ; bind _chs0 = _adcon0@2 _chs0___byte equ _adcon0 _chs0___bit equ 2 ; line_number = 353 ; bind _go = _adcon0@1 _go___byte equ _adcon0 _go___bit equ 1 ; line_number = 354 ; bind _adon = _adcon0@0 _adon___byte equ _adcon0 _adon___bit equ 0 ; # Data bank 1 (0x80-0xff): ; line_number = 358 ; register _option_reg = _option_reg equ 129 ; line_number = 359 ; bind _rapu = _option_reg@7 _rapu___byte equ _option_reg _rapu___bit equ 7 ; line_number = 360 ; bind _intedg = _option_reg@6 _intedg___byte equ _option_reg _intedg___bit equ 6 ; line_number = 361 ; bind _t0cs = _option_reg@5 _t0cs___byte equ _option_reg _t0cs___bit equ 5 ; line_number = 362 ; bind _t0se = _option_reg@4 _t0se___byte equ _option_reg _t0se___bit equ 4 ; line_number = 363 ; bind _psa = _option_reg@3 _psa___byte equ _option_reg _psa___bit equ 3 ; line_number = 364 ; bind _ps2 = _option_reg@2 _ps2___byte equ _option_reg _ps2___bit equ 2 ; line_number = 365 ; bind _ps1 = _option_reg@1 _ps1___byte equ _option_reg _ps1___bit equ 1 ; line_number = 366 ; bind _ps0 = _option_reg@0 _ps0___byte equ _option_reg _ps0___bit equ 0 ; line_number = 368 ; register _trisa = _trisa equ 133 ; line_number = 369 ; bind _trisa5 = _trisa@5 _trisa5___byte equ _trisa _trisa5___bit equ 5 ; line_number = 370 ; bind _trisa4 = _trisa@4 _trisa4___byte equ _trisa _trisa4___bit equ 4 ; line_number = 371 ; bind _trisa3 = _trisa@3 _trisa3___byte equ _trisa _trisa3___bit equ 3 ; line_number = 372 ; bind _trisa2 = _trisa@2 _trisa2___byte equ _trisa _trisa2___bit equ 2 ; line_number = 373 ; bind _trisa1 = _trisa@1 _trisa1___byte equ _trisa _trisa1___bit equ 1 ; line_number = 374 ; bind _trisa0 = _trisa@0 _trisa0___byte equ _trisa _trisa0___bit equ 0 ; line_number = 376 ; register _trisc = _trisc equ 135 ; line_number = 377 ; bind _trisc5 = _trisc@5 _trisc5___byte equ _trisc _trisc5___bit equ 5 ; line_number = 378 ; bind _trisc4 = _trisc@4 _trisc4___byte equ _trisc _trisc4___bit equ 4 ; line_number = 379 ; bind _trisc3 = _trisc@3 _trisc3___byte equ _trisc _trisc3___bit equ 3 ; line_number = 380 ; bind _trisc2 = _trisc@2 _trisc2___byte equ _trisc _trisc2___bit equ 2 ; line_number = 381 ; bind _trisc1 = _trisc@1 _trisc1___byte equ _trisc _trisc1___bit equ 1 ; line_number = 382 ; bind _trisc0 = _trisc@0 _trisc0___byte equ _trisc _trisc0___bit equ 0 ; line_number = 384 ; register _pie1 = _pie1 equ 140 ; line_number = 385 ; bind _eeie = _pie1@7 _eeie___byte equ _pie1 _eeie___bit equ 7 ; line_number = 386 ; bind _adie = _pie1@6 _adie___byte equ _pie1 _adie___bit equ 6 ; line_number = 387 ; bind _rcie = _pie1@5 _rcie___byte equ _pie1 _rcie___bit equ 5 ; line_number = 388 ; bind _c2ie = _pie1@4 _c2ie___byte equ _pie1 _c2ie___bit equ 4 ; line_number = 389 ; bind _c1ie = _pie1@3 _c1ie___byte equ _pie1 _c1ie___bit equ 3 ; line_number = 390 ; bind _osfie = _pie1@2 _osfie___byte equ _pie1 _osfie___bit equ 2 ; line_number = 391 ; bind _txie = _pie1@1 _txie___byte equ _pie1 _txie___bit equ 1 ; line_number = 392 ; bind _tmr1ie = _pie1@0 _tmr1ie___byte equ _pie1 _tmr1ie___bit equ 0 ; line_number = 394 ; register _pcon = _pcon equ 142 ; line_number = 395 ; bind _ulpwue = _pcon@5 _ulpwue___byte equ _pcon _ulpwue___bit equ 5 ; line_number = 396 ; bind _sboden = _pcon@4 _sboden___byte equ _pcon _sboden___bit equ 4 ; line_number = 397 ; bind _por = _pcon@1 _por___byte equ _pcon _por___bit equ 1 ; line_number = 398 ; bind _bod = _pcon@0 _bod___byte equ _pcon _bod___bit equ 0 ; line_number = 400 ; register _osccon = _osccon equ 143 ; line_number = 401 ; bind _ircf2 = _osccon@6 _ircf2___byte equ _osccon _ircf2___bit equ 6 ; line_number = 402 ; bind _ircf1 = _osccon@5 _ircf1___byte equ _osccon _ircf1___bit equ 5 ; line_number = 403 ; bind _ircf0 = _osccon@4 _ircf0___byte equ _osccon _ircf0___bit equ 4 ; line_number = 404 ; bind _osts = _osccon@3 _osts___byte equ _osccon _osts___bit equ 3 ; line_number = 405 ; bind _hts = _osccon@2 _hts___byte equ _osccon _hts___bit equ 2 ; line_number = 406 ; bind _lts = _osccon@3 _lts___byte equ _osccon _lts___bit equ 3 ; line_number = 407 ; bind _scs = _osccon@2 _scs___byte equ _osccon _scs___bit equ 2 ; line_number = 409 ; register _osctune = _osctune equ 144 ; line_number = 410 ; bind _tun4 = _osctune@4 _tun4___byte equ _osctune _tun4___bit equ 4 ; line_number = 411 ; bind _tun3 = _osctune@3 _tun3___byte equ _osctune _tun3___bit equ 3 ; line_number = 412 ; bind _tun2 = _osctune@2 _tun2___byte equ _osctune _tun2___bit equ 2 ; line_number = 413 ; bind _tun1 = _osctune@1 _tun1___byte equ _osctune _tun1___bit equ 1 ; line_number = 414 ; bind _tun0 = _osctune@0 _tun0___byte equ _osctune _tun0___bit equ 0 ; line_number = 415 ; constant _osccal_lsb = 1 _osccal_lsb equ 1 ; line_number = 417 ; register _ansel = _ansel equ 145 ; line_number = 418 ; bind _ans7 = _ansel@7 _ans7___byte equ _ansel _ans7___bit equ 7 ; line_number = 419 ; bind _ans6 = _ansel@6 _ans6___byte equ _ansel _ans6___bit equ 6 ; line_number = 420 ; bind _ans5 = _ansel@5 _ans5___byte equ _ansel _ans5___bit equ 5 ; line_number = 421 ; bind _ans4 = _ansel@4 _ans4___byte equ _ansel _ans4___bit equ 4 ; line_number = 422 ; bind _ans3 = _ansel@3 _ans3___byte equ _ansel _ans3___bit equ 3 ; line_number = 423 ; bind _ans2 = _ansel@2 _ans2___byte equ _ansel _ans2___bit equ 2 ; line_number = 424 ; bind _ans1 = _ansel@1 _ans1___byte equ _ansel _ans1___bit equ 1 ; line_number = 425 ; bind _ans0 = _ansel@0 _ans0___byte equ _ansel _ans0___bit equ 0 ; line_number = 427 ; register _wpua = _wpua equ 149 ; line_number = 428 ; bind _wpua5 = _wpua@5 _wpua5___byte equ _wpua _wpua5___bit equ 5 ; line_number = 429 ; bind _wpua4 = _wpua@4 _wpua4___byte equ _wpua _wpua4___bit equ 4 ; line_number = 430 ; bind _wpua2 = _wpua@2 _wpua2___byte equ _wpua _wpua2___bit equ 2 ; line_number = 431 ; bind _wpua1 = _wpua@1 _wpua1___byte equ _wpua _wpua1___bit equ 1 ; line_number = 432 ; bind _wpua0 = _wpua@0 _wpua0___byte equ _wpua _wpua0___bit equ 0 ; line_number = 434 ; register _ioca = _ioca equ 150 ; line_number = 435 ; bind _ioca5 = _ioca@5 _ioca5___byte equ _ioca _ioca5___bit equ 5 ; line_number = 436 ; bind _ioca4 = _ioca@4 _ioca4___byte equ _ioca _ioca4___bit equ 4 ; line_number = 437 ; bind _ioca3 = _ioca@3 _ioca3___byte equ _ioca _ioca3___bit equ 3 ; line_number = 438 ; bind _ioca2 = _ioca@2 _ioca2___byte equ _ioca _ioca2___bit equ 2 ; line_number = 439 ; bind _ioca1 = _ioca@1 _ioca1___byte equ _ioca _ioca1___bit equ 1 ; line_number = 440 ; bind _ioca0 = _ioca@0 _ioca0___byte equ _ioca _ioca0___bit equ 0 ; line_number = 442 ; register _eedath = _eedath equ 151 ; line_number = 444 ; register _eeadrh = _eeadrh equ 152 ; line_number = 446 ; register _vrcon = _vrcon equ 153 ; line_number = 447 ; bind _vren = _vrcon@7 _vren___byte equ _vrcon _vren___bit equ 7 ; line_number = 448 ; bind _vrr = _vrcon@5 _vrr___byte equ _vrcon _vrr___bit equ 5 ; line_number = 449 ; bind _vr3 = _vrcon@3 _vr3___byte equ _vrcon _vr3___bit equ 3 ; line_number = 450 ; bind _vr2 = _vrcon@2 _vr2___byte equ _vrcon _vr2___bit equ 2 ; line_number = 451 ; bind _vr1 = _vrcon@1 _vr1___byte equ _vrcon _vr1___bit equ 1 ; line_number = 452 ; bind _vr0 = _vrcon@0 _vr0___byte equ _vrcon _vr0___bit equ 0 ; line_number = 454 ; register _eedat = _eedat equ 154 ; line_number = 455 ; bind _eedat7 = _eedat@7 _eedat7___byte equ _eedat _eedat7___bit equ 7 ; line_number = 456 ; bind _eedat6 = _eedat@6 _eedat6___byte equ _eedat _eedat6___bit equ 6 ; line_number = 457 ; bind _eedat5 = _eedat@5 _eedat5___byte equ _eedat _eedat5___bit equ 5 ; line_number = 458 ; bind _eedat4 = _eedat@4 _eedat4___byte equ _eedat _eedat4___bit equ 4 ; line_number = 459 ; bind _eedat3 = _eedat@3 _eedat3___byte equ _eedat _eedat3___bit equ 3 ; line_number = 460 ; bind _eedat2 = _eedat@2 _eedat2___byte equ _eedat _eedat2___bit equ 2 ; line_number = 461 ; bind _eedat1 = _eedat@1 _eedat1___byte equ _eedat _eedat1___bit equ 1 ; line_number = 462 ; bind _eedat0 = _eedat@0 _eedat0___byte equ _eedat _eedat0___bit equ 0 ; line_number = 464 ; register _eeadr = _eeadr equ 155 ; line_number = 465 ; bind _eeadr7 = _eeadr@7 _eeadr7___byte equ _eeadr _eeadr7___bit equ 7 ; line_number = 466 ; bind _eeadr6 = _eeadr@6 _eeadr6___byte equ _eeadr _eeadr6___bit equ 6 ; line_number = 467 ; bind _eeadr5 = _eeadr@5 _eeadr5___byte equ _eeadr _eeadr5___bit equ 5 ; line_number = 468 ; bind _eeadr4 = _eeadr@4 _eeadr4___byte equ _eeadr _eeadr4___bit equ 4 ; line_number = 469 ; bind _eeadr3 = _eeadr@3 _eeadr3___byte equ _eeadr _eeadr3___bit equ 3 ; line_number = 470 ; bind _eeadr2 = _eeadr@2 _eeadr2___byte equ _eeadr _eeadr2___bit equ 2 ; line_number = 471 ; bind _eeadr1 = _eeadr@1 _eeadr1___byte equ _eeadr _eeadr1___bit equ 1 ; line_number = 472 ; bind _eeadr0 = _eeadr@0 _eeadr0___byte equ _eeadr _eeadr0___bit equ 0 ; line_number = 474 ; register _eecon1 = _eecon1 equ 156 ; line_number = 475 ; bind _eepgd = _eecon1@7 _eepgd___byte equ _eecon1 _eepgd___bit equ 7 ; line_number = 476 ; bind _wrerr = _eecon1@3 _wrerr___byte equ _eecon1 _wrerr___bit equ 3 ; line_number = 477 ; bind _wren = _eecon1@2 _wren___byte equ _eecon1 _wren___bit equ 2 ; line_number = 478 ; bind _wr = _eecon1@1 _wr___byte equ _eecon1 _wr___bit equ 1 ; line_number = 479 ; bind _rd = _eecon1@0 _rd___byte equ _eecon1 _rd___bit equ 0 ; line_number = 481 ; register _eecon2 = _eecon2 equ 157 ; line_number = 483 ; register _adresl = _adresl equ 158 ; line_number = 485 ; register _adcon1 = _adcon1 equ 159 ; line_number = 486 ; bind _adcs2 = _adcon1@6 _adcs2___byte equ _adcon1 _adcs2___bit equ 6 ; line_number = 487 ; bind _adcs1 = _adcon1@5 _adcs1___byte equ _adcon1 _adcs1___bit equ 5 ; line_number = 488 ; bind _adcs0 = _adcon1@4 _adcs0___byte equ _adcon1 _adcs0___bit equ 4 ; # Data Bank 2 (0x100 - 0x17f): ; buffer = 'host' ; line_number = 6 ; library _pic16f688 exited ; line_number = 7 ; library clock20mhz entered ; # Copyright (c) 2004 by Wayne C. Gramlich ; # All rights reserved. ; # This library defines the contstants {clock_rate}, {instruction_rate}, ; # and {clocks_per_instruction}. ; # Define processor constants: ; buffer = 'clock20mhz' ; line_number = 9 ; constant clock_rate = 20000000 clock_rate equ 20000000 ; line_number = 10 ; constant clocks_per_instruction = 4 clocks_per_instruction equ 4 ; line_number = 11 ; constant instruction_rate = clock_rate / clocks_per_instruction instruction_rate equ 5000000 ; buffer = 'host' ; line_number = 7 ; library clock20mhz exited ; line_number = 8 ; library _uart entered ; # Copyright (c) 2004 by Wayne C. Gramlich. ; # All rights reserved. ; # This library contains some procedures for accessing the UART. ; Delaying code generation for procedure _uart_byte_safe_get ; Delaying code generation for procedure _uart_byte_get ; Delaying code generation for procedure _uart_hex_put ; Delaying code generation for procedure _uart_nibble_put ; Delaying code generation for procedure _uart_space_put ; Delaying code generation for procedure _uart_crlf_put ; Delaying code generation for procedure _uart_byte_put ; line_number = 8 ; library _uart exited ; line_number = 9 ; constant _eusart_clock = clock_rate _eusart_clock equ 20000000 ; line_number = 10 ; constant _eusart_factor = 4 _eusart_factor equ 4 ; line_number = 11 ; library _eusart entered ; # Copyright (c) 2005 by Wayne C. Gramlich ; # All rights reserved. ; # This library contains a bunch of definitions for the Enhanced Universal ; # Asynchronous Serial Receiver/Transmitter (EUSART) that is available ; # on many of the PIC microcontrollers. ; # In order to use this module you have to get two constants defined ; # BEFORE including this library -- {_eusart_factor} and {_eusart_clock}. ; # {_eusart_clock} should be set to the frequency oscillator for the chip. ; # {_eusart_factor} should be set to 4, 16, or 64 depending upon whether ; # the {_brg16} and {_brgh} bits are set. Use the table below to select: ; # ; # _{brg16} {_brgh} _{eusart_factor} ; # 0 0 64 ; # 0 1 16 ; # 1 0 16 ; # 1 1 4 ; # 2400 baud: ; buffer = '_eusart' ; line_number = 23 ; constant _eusart_2400 = (_eusart_clock / (2400 * _eusart_factor)) - 1 _eusart_2400 equ 2082 ; line_number = 24 ; constant _eusart_2400_low = _eusart_2400 & 0xff _eusart_2400_low equ 34 ; line_number = 25 ; constant _eusart_2400_high = _eusart_2400 >> 8 _eusart_2400_high equ 8 ; line_number = 26 ; constant _eusart_2400_index = 0 _eusart_2400_index equ 0 ; # 4800 baud: ; line_number = 28 ; constant _eusart_4800 = (_eusart_clock / (4800 * _eusart_factor)) - 1 _eusart_4800 equ 1040 ; line_number = 29 ; constant _eusart_4800_low = _eusart_4800 & 0xff _eusart_4800_low equ 16 ; line_number = 30 ; constant _eusart_4800_high = _eusart_4800 >> 8 _eusart_4800_high equ 4 ; line_number = 31 ; constant _eusart_4800_index = 1 _eusart_4800_index equ 1 ; # 9600 baud: ; line_number = 33 ; constant _eusart_9600 = (_eusart_clock / (9600 * _eusart_factor)) - 1 _eusart_9600 equ 519 ; line_number = 34 ; constant _eusart_9600_low = _eusart_9600 & 0xff _eusart_9600_low equ 7 ; line_number = 35 ; constant _eusart_9600_high = _eusart_9600 >> 8 _eusart_9600_high equ 2 ; line_number = 36 ; constant _eusart_9600_index = 2 _eusart_9600_index equ 2 ; # 19200 baud: ; line_number = 38 ; constant _eusart_19200 = (_eusart_clock / (19200 * _eusart_factor)) - 1 _eusart_19200 equ 259 ; line_number = 39 ; constant _eusart_19200_low = _eusart_19200 & 0xff _eusart_19200_low equ 3 ; line_number = 40 ; constant _eusart_19200_high = _eusart_19200 >> 8 _eusart_19200_high equ 1 ; line_number = 41 ; constant _eusart_19200_index = 3 _eusart_19200_index equ 3 ; # 38400 baud: ; line_number = 43 ; constant _eusart_38400 = (_eusart_clock / (38400 * _eusart_factor)) - 1 _eusart_38400 equ 129 ; line_number = 44 ; constant _eusart_38400_low = _eusart_38400 & 0xff _eusart_38400_low equ 129 ; line_number = 45 ; constant _eusart_38400_high = _eusart_38400 >> 8 _eusart_38400_high equ 0 ; line_number = 46 ; constant _eusart_38400_index = 4 _eusart_38400_index equ 4 ; # 57600 baud: ; line_number = 48 ; constant _eusart_57600 = (_eusart_clock / (57600 * _eusart_factor)) - 1 _eusart_57600 equ 85 ; line_number = 49 ; constant _eusart_57600_low = _eusart_57600 & 0xff _eusart_57600_low equ 85 ; line_number = 50 ; constant _eusart_57600_high = _eusart_57600 >> 8 _eusart_57600_high equ 0 ; line_number = 51 ; constant _eusart_57600_index = 5 _eusart_57600_index equ 5 ; # 115200 baud: ; line_number = 53 ; constant _eusart_115200 = (_eusart_clock / (115200 * _eusart_factor)) - 1 _eusart_115200 equ 42 ; line_number = 54 ; constant _eusart_115200_low = _eusart_115200 & 0xff _eusart_115200_low equ 42 ; line_number = 55 ; constant _eusart_115200_high = _eusart_115200 >> 8 _eusart_115200_high equ 0 ; line_number = 56 ; constant _eusart_115200_index = 6 _eusart_115200_index equ 6 ; # 203400 baud: ; line_number = 58 ; constant _eusart_230400 = (_eusart_clock / (230400 * _eusart_factor)) - 1 _eusart_230400 equ 20 ; line_number = 59 ; constant _eusart_230400_low = _eusart_230400 & 0xff _eusart_230400_low equ 20 ; line_number = 60 ; constant _eusart_230400_high = _eusart_230400 >> 8 _eusart_230400_high equ 0 ; line_number = 61 ; constant _eusart_230400_index = 7 _eusart_230400_index equ 7 ; # 406800 baud: ; line_number = 63 ; constant _eusart_406800 = (_eusart_clock / (406800 * _eusart_factor)) - 1 _eusart_406800 equ 11 ; line_number = 64 ; constant _eusart_406800_low = _eusart_406800 & 0xff _eusart_406800_low equ 11 ; line_number = 65 ; constant _eusart_406800_high = _eusart_406800 >> 8 _eusart_406800_high equ 0 ; line_number = 66 ; constant _eusart_406800_index = 8 _eusart_406800_index equ 8 ; # 500000 baud: ; line_number = 68 ; constant _eusart_500000 = (_eusart_clock / (500000 * _eusart_factor)) - 1 _eusart_500000 equ 9 ; line_number = 69 ; constant _eusart_500000_low = _eusart_500000 & 0xff _eusart_500000_low equ 9 ; line_number = 70 ; constant _eusart_500000_high = _eusart_500000 >> 8 _eusart_500000_high equ 0 ; line_number = 71 ; constant _eusart_500000_index = 8 _eusart_500000_index equ 8 ; # 62500 baud: ; line_number = 73 ; constant _eusart_625000 = (_eusart_clock / (625000 * _eusart_factor)) - 1 _eusart_625000 equ 7 ; line_number = 74 ; constant _eusart_625000_low = _eusart_625000 & 0xff _eusart_625000_low equ 7 ; line_number = 75 ; constant _eusart_625000_high = _eusart_625000 >> 8 _eusart_625000_high equ 0 ; line_number = 76 ; constant _eusart_625000_index = 9 _eusart_625000_index equ 9 ; # 833333 baud: ; line_number = 78 ; constant _eusart_833333 = (_eusart_clock / (833333 * _eusart_factor)) - 1 _eusart_833333 equ 5 ; line_number = 79 ; constant _eusart_833333_low = _eusart_833333 & 0xff _eusart_833333_low equ 5 ; line_number = 80 ; constant _eusart_833333_high = _eusart_833333 >> 8 _eusart_833333_high equ 0 ; line_number = 81 ; constant _eusart_833333_index = 10 _eusart_833333_index equ 10 ; # 1000000 baud (1MHz): ; line_number = 83 ; constant _eusart_1000000 = (_eusart_clock / (1000000 * _eusart_factor)) - 1 _eusart_1000000 equ 4 ; line_number = 84 ; constant _eusart_1000000_low = _eusart_1000000 & 0xff _eusart_1000000_low equ 4 ; line_number = 85 ; constant _eusart_1000000_high = _eusart_1000000 >> 8 _eusart_1000000_high equ 0 ; line_number = 86 ; constant _eusart_1000000_index = 11 _eusart_1000000_index equ 11 ; buffer = 'host' ; line_number = 11 ; library _eusart exited ; line_number = 15 ; package pdip ; line_number = 16 ; pin 1 = power_supply ; line_number = 17 ; pin 2 = osc1 ; line_number = 18 ; pin 3 = osc2 ; line_number = 19 ; pin 4 = ra3_in, name=dtr dtr___byte equ _porta dtr___bit equ 3 ; line_number = 20 ; pin 5 = rx, name=rx rx___byte equ _portc rx___bit equ 5 ; line_number = 21 ; pin 6 = tx, name=tx tx___byte equ _portc tx___bit equ 4 ; line_number = 22 ; pin 7 = rc3_out, name=p3 p3___byte equ _portc p3___bit equ 3 ; line_number = 23 ; pin 8 = rc2_out, name=p2 p2___byte equ _portc p2___bit equ 2 ; line_number = 24 ; pin 9 = rc1_in, name=p1 p1___byte equ _portc p1___bit equ 1 ; line_number = 25 ; pin 10 = rc0_in, name=p0 p0___byte equ _portc p0___bit equ 0 ; line_number = 26 ; pin 11 = ra2_out, name=p6 p6___byte equ _porta p6___bit equ 2 ; line_number = 27 ; pin 12 = ra1_in, name=p5 p5___byte equ _porta p5___bit equ 1 ; line_number = 28 ; pin 13 = ra0_out, name=p4 p4___byte equ _porta p4___bit equ 0 ; line_number = 29 ; pin 14 = ground ; line_number = 31 ; global error bit error___byte equ globals___0+79 error___bit equ 0 ; line_number = 32 ; global end_of_line bit end_of_line___byte equ globals___0+79 end_of_line___bit equ 1 ; line_number = 33 ; global hex_high byte hex_high equ globals___0+3 ; line_number = 34 ; global hex_low byte hex_low equ globals___0+4 ; line_number = 35 ; global bus_shift byte bus_shift equ globals___0+5 ; line_number = 36 ; global time_out bit time_out___byte equ globals___0+79 time_out___bit equ 2 ; line_number = 37 ; global bus_msb bit bus_msb___byte equ globals___0+79 bus_msb___bit equ 3 ; line_number = 39 ;info 39, 0 ; procedure main main: ; Initialize some registers clrf _adcon0 bsf __rp0___byte, __rp0___bit clrf _ansel movlw 7 bcf __rp0___byte, __rp0___bit movwf _cmcon0 movlw 58 bsf __rp0___byte, __rp0___bit movwf _trisa movlw 51 movwf _trisc ; arguments_none ; line_number = 41 ; returns_nothing ; # This is the main procdure that initializes the the microcontroller ; # and waits for commands from the host. ; line_number = 46 ; local bit9 bit main__bit9___byte equ globals___0+79 main__bit9___bit equ 4 ; line_number = 47 ; local command byte main__command equ globals___0+6 ; line_number = 48 ; local id byte main__id equ globals___0+7 ; #local index byte ; line_number = 50 ; local low byte main__low equ globals___0+8 ; line_number = 51 ; local node byte main__node equ globals___0+9 ; line_number = 52 ; local page byte main__page equ globals___0+10 ; line_number = 53 ; local receive byte main__receive equ globals___0+11 ; line_number = 54 ; local row byte main__row equ globals___0+12 ; line_number = 55 ; local send byte main__send equ globals___0+13 ; line_number = 56 ; local value byte main__value equ globals___0+14 ; #loop_forever ; # p2 := _true ; # p2 := _false ; # Warm up the EUSART: ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>01 code:XX=cc=>XX) ; line_number = 63 ; _trisc@5 := _true ;info 63, 11 main__select__1___byte equ _trisc main__select__1___bit equ 5 bsf main__select__1___byte, main__select__1___bit ; line_number = 64 ; _trisc@4 := _true ;info 64, 12 main__select__2___byte equ _trisc main__select__2___bit equ 4 bsf main__select__2___byte, main__select__2___bit ; line_number = 66 ; _txsta := 0 ;info 66, 13 bcf __rp0___byte, __rp0___bit clrf _txsta ; line_number = 67 ; _tx9 := _false ;info 67, 15 bcf _tx9___byte, _tx9___bit ; line_number = 68 ; _txen := _true ;info 68, 16 bsf _txen___byte, _txen___bit ; line_number = 69 ; _brgh := _true ;info 69, 17 bsf _brgh___byte, _brgh___bit ; line_number = 71 ; _rcsta := 0 ;info 71, 18 clrf _rcsta ; line_number = 72 ; _spen := _true ;info 72, 19 bsf _spen___byte, _spen___bit ; line_number = 73 ; _rx9 := _false ;info 73, 20 bcf _rx9___byte, _rx9___bit ; line_number = 74 ; _cren := _true ;info 74, 21 bsf _cren___byte, _cren___bit ; line_number = 75 ; _adden := _true ;info 75, 22 bsf _adden___byte, _adden___bit ; line_number = 77 ; _baudctl := 0 ;info 77, 23 clrf _baudctl ; line_number = 78 ; _brg16 := _true ;info 78, 24 bsf _brg16___byte, _brg16___bit ; line_number = 80 ; _spbrg := _eusart_19200_low ;info 80, 25 movlw 3 movwf _spbrg ; line_number = 81 ; _spbrgh := _eusart_19200_high ;info 81, 27 movlw 1 movwf _spbrgh ; #_spbrg := _eusart_115200_low ; #_spbrgh := _eusart_115200_high ; #_spbrg := _eusart_230400_low ; #_spbrgh := _eusart_230400_high ; # For debugging only -- just output a stream of 'U': ; #loop_forever ; # loop_exactly 255 ; # delay 600 ; # do_nothing ; # call _uart_byte_put('U') ; # For debugging only -- Double echo: ; #loop_forever ; # # Wait for command: ; # command := _uart_byte_get() ; # call _uart_byte_put(command) ; # call _uart_byte_put(command) ; # Process commands: ; line_number = 102 ; loop_forever start main__3: ; # Wait for command: ; line_number = 104 ; error := _false ;info 104, 29 bcf error___byte, error___bit ; line_number = 105 ; end_of_line := _false ;info 105, 30 bcf end_of_line___byte, end_of_line___bit ; # Fetch a command letter from the user: ; #command := character_get() ; line_number = 109 ; command := _uart_byte_get() ;info 109, 31 call _uart_byte_get movwf main__command ; line_number = 110 ; if command & 0x80 = 0 start ;info 110, 33 ; Left minus Right movlw 128 andwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=346 false.size=40 ; No 2TEST: true.size=346 false.size=40 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__86 ; # ASCII mode command: ; # Echo the character: ; line_number = 114 ; call _uart_byte_put(command) ;info 114, 37 movf main__command,w call _uart_byte_put ; # Convert it to upper case: ; line_number = 117 ; if 'a' <= command && command <= 'z' start ;info 117, 39 movlw 97 subwf main__command,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=8 false.size=1 ; No 2TEST: true.size=8 false.size=1 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto main__14 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 122 subwf main__command,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=0 false.size=2 ; No 2TEST: true.size=0 false.size=2 ; 1GOTO: Single test with GOTO btfsc __c___byte, __c___bit goto main__15 ; line_number = 118 ; command := command + ('A' - 'a') ;info 118, 49 movlw 224 addwf main__command,f main__15: main__14: ; Recombine code1_bit_states != code2_bit_states ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; Recombine code1_bit_states != code2_bit_states ; 2GOTO: No goto needed; true= false=main__14 true_size=8 false_size=1 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 117 ; if 'a' <= command && command <= 'z' done ; # Dispatch on command letter: ; line_number = 121 ; if command = 'A' start ;info 121, 51 ; Left minus Right movlw 191 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=13 false.size=312 ; No 2TEST: true.size=13 false.size=312 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__84 ; # Set address: ; line_number = 123 ; id := hex_byte_get() ;info 123, 55 call hex_byte_get movwf main__id ; line_number = 124 ; node := hex_byte_get() ;info 124, 57 call hex_byte_get movwf main__node ; line_number = 125 ; if end_of_line_get() start ;info 125, 59 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=6 false.size=0 ; No 2TEST: true.size=6 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__83 ; line_number = 126 ; call _uart_hex_put(id) ;info 126, 62 movf main__id,w call _uart_hex_put ; line_number = 127 ; call _uart_space_put() ;info 127, 64 call _uart_space_put ; line_number = 128 ; call _uart_hex_put(node) ;info 128, 65 movf main__node,w call _uart_hex_put ; line_number = 129 ; call _uart_crlf_put() ;info 129, 67 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__83: ; line_number = 125 ; if end_of_line_get() done goto main__85 ; 2GOTO: Starting code 2 main__84: ; line_number = 130 ;info 130, 69 ; Left minus Right movlw 190 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=8 false.size=299 ; No 2TEST: true.size=8 false.size=299 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__81 ; line_number = 131 ; value := hex_byte_get() ;info 131, 73 call hex_byte_get movwf main__value ; line_number = 132 ; if end_of_line_get() start ;info 132, 75 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=3 false.size=0 ; No 2TEST: true.size=3 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__80 ; line_number = 133 ; call _uart_hex_put(value) ;info 133, 78 movf main__value,w call _uart_hex_put ; line_number = 134 ; call _uart_crlf_put() ;info 134, 80 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__80: ; line_number = 132 ; if end_of_line_get() done goto main__82 ; 2GOTO: Starting code 2 main__81: ; line_number = 135 ;info 135, 82 ; Left minus Right movlw 189 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=3 false.size=291 ; No 2TEST: true.size=3 false.size=291 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__78 ; # Clear bus: ; line_number = 137 ; if end_of_line_get() start ;info 137, 86 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; 1TEST: Single test with code in skip slot btfsc end_of_line_get__0return___byte, end_of_line_get__0return___bit ; line_number = 138 ; call _uart_crlf_put() ;info 138, 88 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 ; line_number = 137 ; if end_of_line_get() done goto main__79 ; 2GOTO: Starting code 2 main__78: ; line_number = 139 ;info 139, 90 ; Left minus Right movlw 188 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=20 false.size=266 ; No 2TEST: true.size=20 false.size=266 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__76 ; # Deselect: ; line_number = 141 ; if end_of_line_get() start ;info 141, 94 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=17 false.size=0 ; No 2TEST: true.size=17 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__75 ; line_number = 142 ; call _uart_crlf_put() ;info 142, 97 call _uart_crlf_put ; line_number = 143 ; call bus_byte_send(0xff) ;info 143, 98 movlw 255 call bus_byte_send ; line_number = 144 ; value := bus_byte_receive() ;info 144, 100 call bus_byte_receive movwf main__value ; line_number = 145 ; if time_out start ;info 145, 102 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=6 ; No 2TEST: true.size=2 false.size=6 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__73 ; line_number = 146 ; call _uart_byte_put('@') ;info 146, 104 movlw 64 call _uart_byte_put goto main__74 ; 2GOTO: Starting code 2 main__73: ; line_number = 148 ; if bus_msb start ;info 148, 107 ; =>bit_code_emit@symbol(): sym=bus_msb ; No 1TEST: true.size=2 false.size=0 ; No 2TEST: true.size=2 false.size=0 ; 1GOTO: Single test with GOTO btfss bus_msb___byte, bus_msb___bit goto main__72 ; line_number = 149 ; call _uart_byte_put('1') ;info 149, 109 movlw 49 call _uart_byte_put ; Recombine size1 = 0 || size2 = 0 main__72: ; line_number = 148 ; if bus_msb done ; line_number = 150 ; call _uart_hex_put(value) ;info 150, 111 movf main__value,w call _uart_hex_put main__74: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 145 ; if time_out done ; line_number = 151 ; call _uart_crlf_put() ;info 151, 113 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__75: ; line_number = 141 ; if end_of_line_get() done goto main__77 ; 2GOTO: Starting code 2 main__76: ; line_number = 152 ;info 152, 115 ; Left minus Right movlw 186 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=18 false.size=243 ; No 2TEST: true.size=18 false.size=243 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__70 ; # Flush buffer ; line_number = 154 ; if end_of_line_get() start ;info 154, 119 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=15 false.size=0 ; No 2TEST: true.size=15 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__69 ; line_number = 155 ; time_out := _false ;info 155, 122 bcf time_out___byte, time_out___bit ; line_number = 156 ; while !time_out start main__65: ;info 156, 123 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=0 false.size=11 ; No 2TEST: true.size=0 false.size=11 ; 1GOTO: Single test with GOTO btfsc time_out___byte, time_out___bit goto main__68 ; line_number = 157 ; value := bus_byte_receive() ;info 157, 125 call bus_byte_receive movwf main__value ; line_number = 158 ; call _uart_space_put() ;info 158, 127 call _uart_space_put ; line_number = 159 ; if time_out start ;info 159, 128 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__66 ; line_number = 160 ; call _uart_byte_put('@') ;info 160, 130 movlw 64 call _uart_byte_put goto main__67 ; 2GOTO: Starting code 2 main__66: ; line_number = 162 ; call _uart_hex_put(value) ;info 162, 133 movf main__value,w call _uart_hex_put main__67: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 159 ; if time_out done goto main__65 main__68: ; Recombine size1 = 0 || size2 = 0 ; line_number = 156 ; while !time_out done ; line_number = 163 ; call _uart_crlf_put() ;info 163, 136 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__69: ; line_number = 154 ; if end_of_line_get() done goto main__71 ; 2GOTO: Starting code 2 main__70: ; line_number = 164 ;info 164, 138 ; Left minus Right movlw 183 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=3 false.size=235 ; No 2TEST: true.size=3 false.size=235 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__63 ; # Identify: ; line_number = 166 ; if end_of_line_get() start ;info 166, 142 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; 1TEST: Single test with code in skip slot btfsc end_of_line_get__0return___byte, end_of_line_get__0return___bit ; line_number = 167 ; call id_dump() ;info 167, 144 call id_dump ; Recombine size1 = 0 || size2 = 0 ; line_number = 166 ; if end_of_line_get() done goto main__64 ; 2GOTO: Starting code 2 main__63: ; line_number = 168 ;info 168, 146 ; Left minus Right movlw 182 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=9 false.size=221 ; No 2TEST: true.size=9 false.size=221 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__61 ; # Jump: ; line_number = 170 ; call hex_word_get() ;info 170, 150 call hex_word_get ; line_number = 171 ; if end_of_line_get() start ;info 171, 151 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=5 false.size=0 ; No 2TEST: true.size=5 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__60 ; line_number = 172 ; call _uart_hex_put(hex_high) ;info 172, 154 movf hex_high,w call _uart_hex_put ; line_number = 173 ; call _uart_hex_put(hex_low) ;info 173, 156 movf hex_low,w call _uart_hex_put ; line_number = 174 ; call _uart_crlf_put() ;info 174, 158 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__60: ; line_number = 171 ; if end_of_line_get() done goto main__62 ; 2GOTO: Starting code 2 main__61: ; line_number = 175 ;info 175, 160 ; Left minus Right movlw 176 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=60 false.size=156 ; No 2TEST: true.size=60 false.size=156 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__58 ; # Print a page of program memory: ; line_number = 177 ; page := hex_byte_get() ;info 177, 164 call hex_byte_get movwf main__page ; line_number = 178 ; if end_of_line_get() start ;info 178, 166 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=55 false.size=0 ; No 2TEST: true.size=55 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__57 ; line_number = 179 ; row := 0 ;info 179, 169 clrf main__row ; line_number = 180 ; low := 0 ;info 180, 170 clrf main__low ; line_number = 181 ; while row < 16 start main__49: ;info 181, 171 movlw 16 subwf main__row,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=0 false.size=49 ; No 2TEST: true.size=0 false.size=49 ; 1GOTO: Single test with GOTO btfsc __c___byte, __c___bit goto main__56 ; line_number = 182 ; call _uart_hex_put(page) ;info 182, 175 movf main__page,w call _uart_hex_put ; line_number = 183 ; call _uart_hex_put(low) ;info 183, 177 movf main__low,w call _uart_hex_put ; line_number = 184 ; call _uart_byte_put(':') ;info 184, 179 movlw 58 call _uart_byte_put ; # Set address: ; line_number = 187 ; call bus_byte_send(0) ;info 187, 181 movlw 0 call bus_byte_send ; line_number = 188 ; call bus_byte_receive() ;info 188, 183 call bus_byte_receive ; line_number = 190 ; call bus_byte_send(page) ;info 190, 184 movf main__page,w call bus_byte_send ; line_number = 191 ; call bus_byte_receive() ;info 191, 186 call bus_byte_receive ; line_number = 193 ; call bus_byte_send(low) ;info 193, 187 movf main__low,w call bus_byte_send ; line_number = 194 ; call bus_byte_receive() ;info 194, 189 call bus_byte_receive ; # Read the ack byte: ; line_number = 197 ; call bus_byte_receive() ;info 197, 190 call bus_byte_receive ; # Read out 8 words: ; line_number = 200 ; call bus_byte_send(1) ;info 200, 191 movlw 1 call bus_byte_send ; line_number = 201 ; call bus_byte_receive() ;info 201, 193 call bus_byte_receive ; line_number = 203 ; call bus_byte_send(8) ;info 203, 194 movlw 8 call bus_byte_send ; line_number = 204 ; call bus_byte_receive() ;info 204, 196 call bus_byte_receive ; line_number = 205 ; loop_exactly 8 start ;info 205, 197 main__50 equ globals___0+25 movlw 8 movwf main__50 main__51: ; line_number = 206 ; value := bus_byte_receive() ;info 206, 199 call bus_byte_receive movwf main__value ; line_number = 207 ; call _uart_space_put() ;info 207, 201 call _uart_space_put ; line_number = 208 ; if time_out start ;info 208, 202 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__52 ; line_number = 209 ; call _uart_byte_put('@') ;info 209, 204 movlw 64 call _uart_byte_put goto main__53 ; 2GOTO: Starting code 2 main__52: ; line_number = 211 ; call _uart_hex_put(value) ;info 211, 207 movf main__value,w call _uart_hex_put main__53: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 208 ; if time_out done ; line_number = 212 ; value := bus_byte_receive() ;info 212, 209 call bus_byte_receive movwf main__value ; line_number = 213 ; if time_out start ;info 213, 211 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__54 ; line_number = 214 ; call _uart_byte_put('@') ;info 214, 213 movlw 64 call _uart_byte_put goto main__55 ; 2GOTO: Starting code 2 main__54: ; line_number = 216 ; call _uart_hex_put(value) ;info 216, 216 movf main__value,w call _uart_hex_put main__55: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 213 ; if time_out done ; line_number = 205 ; loop_exactly 8 wrap-up decfsz main__50,f goto main__51 ; line_number = 205 ; loop_exactly 8 done ; # Read the ack byte: ; line_number = 219 ; call bus_byte_receive() ;info 219, 220 call bus_byte_receive ; line_number = 221 ; call _uart_crlf_put() ;info 221, 221 call _uart_crlf_put ; line_number = 222 ; row := row + 1 ;info 222, 222 incf main__row,f ; line_number = 223 ; low := low + 8 ;info 223, 223 movlw 8 addwf main__low,f goto main__49 main__56: ; Recombine size1 = 0 || size2 = 0 ; line_number = 181 ; while row < 16 done ; Recombine size1 = 0 || size2 = 0 main__57: ; line_number = 178 ; if end_of_line_get() done goto main__59 ; 2GOTO: Starting code 2 main__58: ; line_number = 224 ;info 224, 227 ; Left minus Right movlw 174 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=9 false.size=142 ; No 2TEST: true.size=9 false.size=142 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__47 ; # Read: ; line_number = 226 ; call hex_word_get() ;info 226, 231 call hex_word_get ; line_number = 227 ; if end_of_line_get() start ;info 227, 232 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=5 false.size=0 ; No 2TEST: true.size=5 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__46 ; line_number = 228 ; call _uart_hex_put(hex_high) ;info 228, 235 movf hex_high,w call _uart_hex_put ; line_number = 229 ; call _uart_hex_put(hex_low) ;info 229, 237 movf hex_low,w call _uart_hex_put ; line_number = 230 ; call _uart_crlf_put() ;info 230, 239 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__46: ; line_number = 227 ; if end_of_line_get() done goto main__48 ; 2GOTO: Starting code 2 main__47: ; line_number = 231 ;info 231, 241 ; Left minus Right movlw 173 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=36 false.size=101 ; No 2TEST: true.size=36 false.size=101 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__44 ; # Select: ; line_number = 233 ; node := hex_byte_get() ;info 233, 245 call hex_byte_get movwf main__node ; line_number = 234 ; if end_of_line_get() start ;info 234, 247 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=31 false.size=0 ; No 2TEST: true.size=31 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__43 ; line_number = 235 ; call _uart_crlf_put() ;info 235, 250 call _uart_crlf_put ; line_number = 236 ; call bus_select_send(node) ;info 236, 251 movf main__node,w call bus_select_send ; line_number = 237 ; value := bus_byte_receive() ;info 237, 253 call bus_byte_receive movwf main__value ; line_number = 238 ; if time_out start ;info 238, 255 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__37 ; line_number = 239 ; call _uart_byte_put('@') ;info 239, 257 movlw 64 call _uart_byte_put goto main__38 ; 2GOTO: Starting code 2 main__37: ; line_number = 241 ; call _uart_hex_put(value) ;info 241, 260 movf main__value,w call _uart_hex_put main__38: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 238 ; if time_out done ; line_number = 242 ; value := bus_byte_receive() ;info 242, 262 call bus_byte_receive movwf main__value ; line_number = 243 ; if time_out start ;info 243, 264 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__39 ; line_number = 244 ; call _uart_byte_put('@') ;info 244, 266 movlw 64 call _uart_byte_put goto main__40 ; 2GOTO: Starting code 2 main__39: ; line_number = 246 ; call _uart_hex_put(value) ;info 246, 269 movf main__value,w call _uart_hex_put main__40: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 243 ; if time_out done ; line_number = 247 ; value := bus_byte_receive() ;info 247, 271 call bus_byte_receive movwf main__value ; line_number = 248 ; if time_out start ;info 248, 273 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__41 ; line_number = 249 ; call _uart_byte_put('@') ;info 249, 275 movlw 64 call _uart_byte_put goto main__42 ; 2GOTO: Starting code 2 main__41: ; line_number = 251 ; call _uart_hex_put(value) ;info 251, 278 movf main__value,w call _uart_hex_put main__42: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 248 ; if time_out done ; line_number = 252 ; call _uart_crlf_put() ;info 252, 280 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__43: ; line_number = 234 ; if end_of_line_get() done goto main__45 ; 2GOTO: Starting code 2 main__44: ; line_number = 253 ;info 253, 282 ; Left minus Right movlw 169 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=13 false.size=83 ; No 2TEST: true.size=13 false.size=83 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__35 ; # Write: ; line_number = 255 ; call hex_word_get() ;info 255, 286 call hex_word_get ; line_number = 256 ; value := hex_byte_get() ;info 256, 287 call hex_byte_get movwf main__value ; line_number = 257 ; if end_of_line_get() start ;info 257, 289 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=7 false.size=0 ; No 2TEST: true.size=7 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__34 ; line_number = 258 ; call _uart_hex_put(hex_high) ;info 258, 292 movf hex_high,w call _uart_hex_put ; line_number = 259 ; call _uart_hex_put(hex_low) ;info 259, 294 movf hex_low,w call _uart_hex_put ; line_number = 260 ; call _uart_hex_put(value) ;info 260, 296 movf main__value,w call _uart_hex_put ; line_number = 261 ; call _uart_crlf_put() ;info 261, 298 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__34: ; line_number = 257 ; if end_of_line_get() done goto main__36 ; 2GOTO: Starting code 2 main__35: ; line_number = 262 ;info 262, 300 ; Left minus Right movlw 168 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=35 false.size=43 ; No 2TEST: true.size=35 false.size=43 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__32 ; # Transmit: ; line_number = 264 ; value := hex_byte_get() ;info 264, 304 call hex_byte_get movwf main__value ; line_number = 265 ; if end_of_line_get() start ;info 265, 306 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=30 false.size=0 ; No 2TEST: true.size=30 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__31 ; #call _uart_hex_put(value) ; #call _uart_crlf_put() ; line_number = 268 ; call bus_byte_send(value) ;info 268, 309 movf main__value,w call bus_byte_send ; line_number = 270 ; value := bus_byte_receive() ;info 270, 311 call bus_byte_receive movwf main__value ; line_number = 271 ; if time_out start ;info 271, 313 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__25 ; line_number = 272 ; call _uart_byte_put('@') ;info 272, 315 movlw 64 call _uart_byte_put goto main__26 ; 2GOTO: Starting code 2 main__25: ; line_number = 274 ; call _uart_hex_put(value) ;info 274, 318 movf main__value,w call _uart_hex_put main__26: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 271 ; if time_out done ; line_number = 276 ; value := bus_byte_receive() ;info 276, 320 call bus_byte_receive movwf main__value ; line_number = 277 ; if time_out start ;info 277, 322 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__27 ; line_number = 278 ; call _uart_byte_put('@') ;info 278, 324 movlw 64 call _uart_byte_put goto main__28 ; 2GOTO: Starting code 2 main__27: ; line_number = 280 ; call _uart_hex_put(value) ;info 280, 327 movf main__value,w call _uart_hex_put main__28: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 277 ; if time_out done ; line_number = 282 ; value := bus_byte_receive() ;info 282, 329 call bus_byte_receive movwf main__value ; line_number = 283 ; if time_out start ;info 283, 331 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=2 false.size=2 ; No 2TEST: true.size=2 false.size=2 ; 2GOTO: Single test with two GOTO's btfss time_out___byte, time_out___bit goto main__29 ; line_number = 284 ; call _uart_byte_put('@') ;info 284, 333 movlw 64 call _uart_byte_put goto main__30 ; 2GOTO: Starting code 2 main__29: ; line_number = 286 ; call _uart_hex_put(value) ;info 286, 336 movf main__value,w call _uart_hex_put main__30: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 283 ; if time_out done ; line_number = 288 ; call _uart_crlf_put() ;info 288, 338 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 main__31: ; line_number = 265 ; if end_of_line_get() done goto main__33 ; 2GOTO: Starting code 2 main__32: ; line_number = 289 ;info 289, 340 ; Left minus Right movlw 166 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=23 false.size=15 ; No 2TEST: true.size=23 false.size=15 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__23 ; # Sweep bus looking for modules: ; line_number = 291 ; if end_of_line_get() start ;info 291, 344 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; No 1TEST: true.size=20 false.size=0 ; No 2TEST: true.size=20 false.size=0 ; 1GOTO: Single test with GOTO btfss end_of_line_get__0return___byte, end_of_line_get__0return___bit goto main__22 ; line_number = 292 ; node := 1 ;info 292, 347 movlw 1 movwf main__node ; line_number = 293 ; while node != 0 start main__19: ;info 293, 349 ; Left minus Right movf main__node,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=0 false.size=15 ; No 2TEST: true.size=0 false.size=15 ; 1GOTO: Single test with GOTO btfsc __z___byte, __z___bit goto main__21 ; line_number = 294 ; call bus_select_send(node) ;info 294, 352 movf main__node,w call bus_select_send ; line_number = 295 ; value := bus_byte_receive() ;info 295, 354 call bus_byte_receive movwf main__value ; line_number = 296 ; value := bus_byte_receive() ;info 296, 356 call bus_byte_receive movwf main__value ; line_number = 297 ; if !time_out start ;info 297, 358 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=0 false.size=5 ; No 2TEST: true.size=0 false.size=5 ; 1GOTO: Single test with GOTO btfsc time_out___byte, time_out___bit goto main__20 ; line_number = 298 ; call _uart_hex_put(node) ;info 298, 360 movf main__node,w call _uart_hex_put ; line_number = 299 ; call _uart_byte_put(':') ;info 299, 362 movlw 58 call _uart_byte_put ; line_number = 300 ; call id_dump() ;info 300, 364 call id_dump main__20: ; Recombine size1 = 0 || size2 = 0 ; line_number = 297 ; if !time_out done ; line_number = 301 ; node := node + 1 ;info 301, 365 incf main__node,f goto main__19 main__21: ; Recombine size1 = 0 || size2 = 0 ; line_number = 293 ; while node != 0 done ; Recombine size1 = 0 || size2 = 0 main__22: ; line_number = 291 ; if end_of_line_get() done goto main__24 ; 2GOTO: Starting code 2 main__23: ; line_number = 302 ;info 302, 368 ; Left minus Right movlw 198 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=3 false.size=7 ; No 2TEST: true.size=3 false.size=7 ; 2GOTO: Single test with two GOTO's btfss __z___byte, __z___bit goto main__17 ; # Hex: ; line_number = 304 ; if end_of_line_get() start ;info 304, 372 call end_of_line_get ; =>bit_code_emit@symbol(): sym=end_of_line_get__0return ; 1TEST: Single test with code in skip slot btfsc end_of_line_get__0return___byte, end_of_line_get__0return___bit ; line_number = 305 ; call _uart_crlf_put() ;info 305, 374 call _uart_crlf_put ; Recombine size1 = 0 || size2 = 0 ; line_number = 304 ; if end_of_line_get() done goto main__18 ; 2GOTO: Starting code 2 main__17: ; line_number = 306 ;info 306, 376 ; Left minus Right movlw 243 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=0 false.size=3 ; No 2TEST: true.size=0 false.size=3 ; 1GOTO: Single test with GOTO btfsc __z___byte, __z___bit goto main__16 ; # Illegal command: ; line_number = 311 ; call _uart_byte_put('?') ;info 311, 380 movlw 63 call _uart_byte_put ; line_number = 312 ; call _uart_crlf_put() ;info 312, 382 call _uart_crlf_put main__16: ; # Blank line: ; line_number = 308 ; do_nothing ;info 308, 383 ; Recombine code1_bit_states != code2_bit_states main__18: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__24: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__33: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__36: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__45: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__48: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__59: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__62: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__64: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__71: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__77: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__79: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__82: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) main__85: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 121 ; if command = 'A' done ; # Provide a prompt: ; line_number = 315 ; call _uart_byte_put('>') ;info 315, 383 movlw 62 call _uart_byte_put goto main__87 ; 2GOTO: Starting code 2 main__86: ; # Binary mode command: ; line_number = 318 ; send := (command >> 3) & 7 ;info 318, 386 main__4 equ globals___0+25 rrf main__command,w movwf main__4 rrf main__4,f rrf main__4,w andlw 7 movwf main__send ; line_number = 319 ; receive := command & 7 ;info 319, 392 movlw 7 andwf main__command,w movwf main__receive ; line_number = 320 ; bit9 := _false ;info 320, 395 bcf main__bit9___byte, main__bit9___bit ; line_number = 321 ; if command@6 start ;info 321, 396 main__select__5___byte equ main__command main__select__5___bit equ 6 ; =>bit_code_emit@symbol(): sym=main__select__5 ; 1TEST: Single test with code in skip slot btfsc main__select__5___byte, main__select__5___bit ; line_number = 322 ; bit9 := _true ;info 322, 397 bsf main__bit9___byte, main__bit9___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 321 ; if command@6 done ; line_number = 323 ; if send != 0 start ;info 323, 398 ; Left minus Right movf main__send,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=0 false.size=13 ; No 2TEST: true.size=0 false.size=13 ; 1GOTO: Single test with GOTO btfsc __z___byte, __z___bit goto main__10 ; line_number = 324 ; loop_exactly send start ;info 324, 401 main__6 equ globals___0+25 movf main__send,w movwf main__6 main__7: ; line_number = 325 ; command := _uart_byte_get() ;info 325, 403 call _uart_byte_get movwf main__command ; line_number = 326 ; if bit9 start ;info 326, 405 ; =>bit_code_emit@symbol(): sym=main__bit9 ; No 1TEST: true.size=3 false.size=2 ; No 2TEST: true.size=3 false.size=2 ; 2GOTO: Single test with two GOTO's btfss main__bit9___byte, main__bit9___bit goto main__8 ; line_number = 327 ; bit9 := _false ;info 327, 407 bcf main__bit9___byte, main__bit9___bit ; line_number = 328 ; call bus_select_send(command) ;info 328, 408 movf main__command,w call bus_select_send goto main__9 ; 2GOTO: Starting code 2 main__8: ; line_number = 330 ; call bus_byte_send(command) ;info 330, 411 movf main__command,w call bus_byte_send main__9: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 326 ; if bit9 done ; line_number = 331 ; call bus_byte_receive() ;info 331, 413 call bus_byte_receive ; line_number = 324 ; loop_exactly send wrap-up decfsz main__6,f goto main__7 ; line_number = 324 ; loop_exactly send done main__10: ; Recombine size1 = 0 || size2 = 0 ; line_number = 323 ; if send != 0 done ; line_number = 332 ; if receive != 0 start ;info 332, 416 ; Left minus Right movf main__receive,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=0 false.size=9 ; No 2TEST: true.size=0 false.size=9 ; 1GOTO: Single test with GOTO btfsc __z___byte, __z___bit goto main__13 ; #index := 0 ; line_number = 334 ; loop_exactly receive start ;info 334, 419 main__11 equ globals___0+25 movf main__receive,w movwf main__11 main__12: ; line_number = 335 ; command := bus_byte_receive() ;info 335, 421 call bus_byte_receive movwf main__command ; line_number = 336 ; if time_out start ;info 336, 423 ; =>bit_code_emit@symbol(): sym=time_out ; No 1TEST: true.size=1 false.size=1 ; 2TEST: two tests with code in both delay slots btfsc time_out___byte, time_out___bit ; line_number = 337 ; call _uart_byte_put(0xfc) ;info 337, 424 movlw 252 btfss time_out___byte, time_out___bit ; line_number = 339 ; call _uart_byte_put(command) ;info 339, 426 movf main__command,w call _uart_byte_put ; line_number = 336 ; if time_out done ; #call _uart_byte_put(0x40 | index) ; #index := (index + 1) & 0x3f ; line_number = 334 ; loop_exactly receive wrap-up decfsz main__11,f goto main__12 ; line_number = 334 ; loop_exactly receive done main__13: ; Recombine size1 = 0 || size2 = 0 ; line_number = 332 ; if receive != 0 done main__87: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 110 ; if command & 0x80 = 0 done ; line_number = 102 ; loop_forever wrap-up goto main__3 ; line_number = 102 ; loop_forever done ; delay after procedure statements=non-uniform ; line_number = 344 ;info 344, 431 ; procedure id_dump id_dump: ; arguments_none ; line_number = 346 ; returns_nothing ; # This procedure will print out the id information for the ; # currently selected module. ; line_number = 351 ; local value byte id_dump__value equ globals___0+15 ; # Reset the id index: ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 354 ; value := bus_byte_send_receive(0xfe) ;info 354, 431 movlw 254 call bus_byte_send_receive movwf id_dump__value ; # Read the fixed part: ; line_number = 357 ; loop_exactly 5 start ;info 357, 434 id_dump__1 equ globals___0+26 movlw 5 movwf id_dump__1 id_dump__2: ; line_number = 358 ; value := bus_byte_send_receive(0xfd) ;info 358, 436 movlw 253 call bus_byte_send_receive movwf id_dump__value ; line_number = 359 ; call _uart_hex_put(value) ;info 359, 439 movf id_dump__value,w call _uart_hex_put ; line_number = 360 ; call _uart_space_put() ;info 360, 441 call _uart_space_put ; line_number = 357 ; loop_exactly 5 wrap-up decfsz id_dump__1,f goto id_dump__2 ; line_number = 357 ; loop_exactly 5 done ; # Dump the name string: ; line_number = 364 ; if value & 2 != 0 start ;info 364, 444 ; Left minus Right movlw 2 andwf id_dump__value,w ; =>bit_code_emit@symbol(): sym=__z ; 1TEST: Single test with code in skip slot btfss __z___byte, __z___bit ; line_number = 365 ; call string_dump() ;info 365, 447 call string_dump ; Recombine size1 = 0 || size2 = 0 ; line_number = 364 ; if value & 2 != 0 done ; # Dump the vendor string: ; line_number = 368 ; if value & 1 != 0 start ;info 368, 448 ; Left minus Right movlw 1 andwf id_dump__value,w ; =>bit_code_emit@symbol(): sym=__z ; 1TEST: Single test with code in skip slot btfss __z___byte, __z___bit ; line_number = 369 ; call string_dump() ;info 369, 451 call string_dump ; Recombine size1 = 0 || size2 = 0 ; line_number = 368 ; if value & 1 != 0 done ; line_number = 371 ; call _uart_crlf_put() ;info 371, 452 call _uart_crlf_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 374 ;info 374, 454 ; procedure string_dump string_dump: ; arguments_none ; line_number = 376 ; returns_nothing ; # This procedure will dump a string from the id information. ; line_number = 380 ; local length byte string_dump__length equ globals___0+16 ; # We have a vendor string; now read the length: ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 383 ; call _uart_space_put() ;info 383, 454 call _uart_space_put ; line_number = 384 ; length := bus_byte_send_receive(0xfd) ;info 384, 455 movlw 253 call bus_byte_send_receive movwf string_dump__length ; line_number = 385 ; call _uart_hex_put(length) ;info 385, 458 movf string_dump__length,w call _uart_hex_put ; line_number = 386 ; call _uart_byte_put(':') ;info 386, 460 movlw 58 call _uart_byte_put ; # Print out the vendor string: ; line_number = 389 ; call _uart_byte_put('"') ;info 389, 462 movlw 34 call _uart_byte_put ; line_number = 390 ; loop_exactly length start ;info 390, 464 string_dump__1 equ globals___0+27 movf string_dump__length,w movwf string_dump__1 string_dump__2: ; line_number = 391 ; call _uart_byte_put(bus_byte_send_receive(0xfd)) ;info 391, 466 movlw 253 call bus_byte_send_receive call _uart_byte_put ; line_number = 390 ; loop_exactly length wrap-up decfsz string_dump__1,f goto string_dump__2 ; line_number = 390 ; loop_exactly length done ; line_number = 392 ; call _uart_byte_put('"') ;info 392, 471 movlw 34 call _uart_byte_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 395 ;info 395, 474 ; procedure bus_byte_send_receive bus_byte_send_receive: ; Last argument is sitting in W; save into argument variable movwf bus_byte_send_receive__value ; delay=4294967295 ; line_number = 396 ; argument value byte bus_byte_send_receive__value equ globals___0+17 ; line_number = 397 ; returns byte ; # This procedure will send {value} to the currently selected module ; # and return the response. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 402 ; call bus_byte_send(value) ;info 402, 475 movf bus_byte_send_receive__value,w call bus_byte_send ; line_number = 403 ; call bus_byte_receive() ;info 403, 477 call bus_byte_receive ; line_number = 404 ; return bus_byte_receive() start ; line_number = 404 ;info 404, 478 call bus_byte_receive return ; line_number = 404 ; return bus_byte_receive() done ; delay after procedure statements=non-uniform ; line_number = 407 ;info 407, 480 ; procedure bus_byte_send bus_byte_send: ; Last argument is sitting in W; save into argument variable movwf bus_byte_send__value ; delay=4294967295 ; line_number = 408 ; argument value byte bus_byte_send__value equ globals___0+18 ; line_number = 409 ; returns_nothing ; # This procedure will cause a {value} byte to be sent to the bus. ; #call _uart_byte_put('{') ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 414 ; loop_exactly 4 start ;info 414, 481 bus_byte_send__1 equ globals___0+28 movlw 4 movwf bus_byte_send__1 bus_byte_send__2: ; line_number = 415 ; call shift2(value & 3) ;info 415, 483 movlw 3 andwf bus_byte_send__value,w call shift2 ; line_number = 416 ; value := value >> 2 ;info 416, 486 ; Assignment of variable to self (no code needed) rrf bus_byte_send__value,f rrf bus_byte_send__value,f movlw 63 andwf bus_byte_send__value,f ; line_number = 414 ; loop_exactly 4 wrap-up decfsz bus_byte_send__1,f goto bus_byte_send__2 ; line_number = 414 ; loop_exactly 4 done ; line_number = 417 ; call shift2(4) ;info 417, 492 movlw 4 call shift2 ; #call _uart_byte_put('}') ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 421 ;info 421, 495 ; procedure bus_select_send bus_select_send: ; Last argument is sitting in W; save into argument variable movwf bus_select_send__node ; delay=4294967295 ; line_number = 422 ; argument node byte bus_select_send__node equ globals___0+19 ; line_number = 423 ; returns_nothing ; # This procedure will cause a {node} select byte to be sent. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 427 ; loop_exactly 4 start ;info 427, 496 bus_select_send__1 equ globals___0+29 movlw 4 movwf bus_select_send__1 bus_select_send__2: ; line_number = 428 ; call shift2(node & 3) ;info 428, 498 movlw 3 andwf bus_select_send__node,w call shift2 ; line_number = 429 ; node := node >> 2 ;info 429, 501 ; Assignment of variable to self (no code needed) rrf bus_select_send__node,f rrf bus_select_send__node,f movlw 63 andwf bus_select_send__node,f ; line_number = 427 ; loop_exactly 4 wrap-up decfsz bus_select_send__1,f goto bus_select_send__2 ; line_number = 427 ; loop_exactly 4 done ; line_number = 430 ; call shift2(5) ;info 430, 507 movlw 5 call shift2 ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 433 ;info 433, 510 ; procedure bus_byte_receive bus_byte_receive: ; arguments_none ; line_number = 435 ; returns byte ; # This procedure receive a byte from the bus processor. ; # {time_out} is set if no byte is received in a reasonable ; # amount of time. ; #call _uart_byte_put('[') ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 442 ; time_out := _false ;info 442, 510 bcf time_out___byte, time_out___bit ; # Where does 15*20 come from? This seems to be the minimum ; # timeout that works with programming a PIC16F876. ; line_number = 445 ; loop_exactly 15 start ;info 445, 511 bus_byte_receive__1 equ globals___0+30 movlw 15 movwf bus_byte_receive__1 bus_byte_receive__2: ; line_number = 446 ; loop_exactly 20 start ;info 446, 513 bus_byte_receive__3 equ globals___0+31 movlw 20 movwf bus_byte_receive__3 bus_byte_receive__4: ; line_number = 447 ; call shift2(6) ;info 447, 515 movlw 6 call shift2 ; line_number = 448 ; if !(bus_shift@1) start ;info 448, 517 bus_byte_receive__select__8___byte equ bus_shift bus_byte_receive__select__8___bit equ 1 ; =>bit_code_emit@symbol(): sym=bus_byte_receive__select__8 ; No 1TEST: true.size=0 false.size=9 ; No 2TEST: true.size=0 false.size=9 ; 1GOTO: Single test with GOTO btfsc bus_byte_receive__select__8___byte, bus_byte_receive__select__8___bit goto bus_byte_receive__9 ; # We got one: ; line_number = 450 ; bus_msb := _false ;info 450, 519 bcf bus_msb___byte, bus_msb___bit ; line_number = 451 ; if bus_shift@0 start ;info 451, 520 bus_byte_receive__select__5___byte equ bus_shift bus_byte_receive__select__5___bit equ 0 ; =>bit_code_emit@symbol(): sym=bus_byte_receive__select__5 ; 1TEST: Single test with code in skip slot btfsc bus_byte_receive__select__5___byte, bus_byte_receive__select__5___bit ; line_number = 452 ; bus_msb := _true ;info 452, 521 bsf bus_msb___byte, bus_msb___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 451 ; if bus_shift@0 done ; line_number = 453 ; loop_exactly 4 start ;info 453, 522 bus_byte_receive__6 equ globals___0+32 movlw 4 movwf bus_byte_receive__6 bus_byte_receive__7: ; line_number = 454 ; call shift2(0) ;info 454, 524 movlw 0 call shift2 ; line_number = 453 ; loop_exactly 4 wrap-up decfsz bus_byte_receive__6,f goto bus_byte_receive__7 ; line_number = 453 ; loop_exactly 4 done ; #call _uart_byte_put(']') ; line_number = 456 ; return bus_shift start ; line_number = 456 ;info 456, 528 movf bus_shift,w return ; line_number = 456 ; return bus_shift done bus_byte_receive__9: ; Recombine size1 = 0 || size2 = 0 ; line_number = 448 ; if !(bus_shift@1) done ; line_number = 446 ; loop_exactly 20 wrap-up decfsz bus_byte_receive__3,f goto bus_byte_receive__4 ; line_number = 446 ; loop_exactly 20 done ; line_number = 445 ; loop_exactly 15 wrap-up decfsz bus_byte_receive__1,f goto bus_byte_receive__2 ; line_number = 445 ; loop_exactly 15 done ; line_number = 457 ; time_out := _true ;info 457, 534 bsf time_out___byte, time_out___bit ; #call _uart_byte_put(']') ; line_number = 459 ; return 0 start ; line_number = 459 ;info 459, 535 retlw 0 ; line_number = 459 ; return 0 done ; delay after procedure statements=non-uniform ; line_number = 462 ;info 462, 536 ; procedure shift2 shift2: ; Last argument is sitting in W; save into argument variable movwf shift2__value ; delay=4294967295 ; line_number = 463 ; argument value byte shift2__value equ globals___0+20 ; line_number = 464 ; returns_nothing ; # This procedure will cause 3 bits to be sent to the bus processor ; # and 2 bits returned from the bus processor into {bus_shift}. ; #call _uart_byte_put('<') ; # Set the 3 bits to send up. The two lower bits are data and ; # the 3rd bit is STROBE. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 473 ; p4 := _false ;info 473, 537 bcf p4___byte, p4___bit ; line_number = 474 ; p3 := _false ;info 474, 538 bcf p3___byte, p3___bit ; line_number = 475 ; p2 := _false ;info 475, 539 bcf p2___byte, p2___bit ; line_number = 477 ; if value@2 start ;info 477, 540 shift2__select__1___byte equ shift2__value shift2__select__1___bit equ 2 ; =>bit_code_emit@symbol(): sym=shift2__select__1 ; 1TEST: Single test with code in skip slot btfsc shift2__select__1___byte, shift2__select__1___bit ; line_number = 478 ; p4 := _true ;info 478, 541 bsf p4___byte, p4___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 477 ; if value@2 done ; # call _uart_byte_put('1') ; #else ; # call _uart_byte_put('0') ; line_number = 482 ; if value@1 start ;info 482, 542 shift2__select__2___byte equ shift2__value shift2__select__2___bit equ 1 ; =>bit_code_emit@symbol(): sym=shift2__select__2 ; 1TEST: Single test with code in skip slot btfsc shift2__select__2___byte, shift2__select__2___bit ; line_number = 483 ; p3 := _true ;info 483, 543 bsf p3___byte, p3___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 482 ; if value@1 done ; # call _uart_byte_put('1') ; #else ; # call _uart_byte_put('0') ; line_number = 487 ; if value@0 start ;info 487, 544 shift2__select__3___byte equ shift2__value shift2__select__3___bit equ 0 ; =>bit_code_emit@symbol(): sym=shift2__select__3 ; 1TEST: Single test with code in skip slot btfsc shift2__select__3___byte, shift2__select__3___bit ; line_number = 488 ; p2 := _true ;info 488, 545 bsf p2___byte, p2___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 487 ; if value@0 done ; # call _uart_byte_put('1') ; #else ; # call _uart_byte_put('0') ; # Let the bus processor know that we have some data: ; line_number = 494 ; if p6 start ;info 494, 546 ; =>bit_code_emit@symbol(): sym=p6 ; No 1TEST: true.size=3 false.size=3 ; No 2TEST: true.size=3 false.size=3 ; 2GOTO: Single test with two GOTO's btfss p6___byte, p6___bit goto shift2__6 ; #call _uart_byte_put('L') ; line_number = 496 ; p6 := _false ;info 496, 548 bcf p6___byte, p6___bit ; # Wait until the bus processor has a response. ; line_number = 498 ; while p5 start shift2__5: ;info 498, 549 ; =>bit_code_emit@symbol(): sym=p5 ; 1TEST: Single test with code in skip slot btfsc p5___byte, p5___bit ; line_number = 499 ; do_nothing ;info 499, 550 goto shift2__5 ; Recombine size1 = 0 || size2 = 0 ; line_number = 498 ; while p5 done goto shift2__7 ; 2GOTO: Starting code 2 shift2__6: ; #call _uart_byte_put('H') ; line_number = 502 ; p6 := _true ;info 502, 552 bsf p6___byte, p6___bit ; # Wait until the bus processor has a response. ; line_number = 504 ; while !p5 start shift2__4: ;info 504, 553 ; =>bit_code_emit@symbol(): sym=p5 ; 1TEST: Single test with code in skip slot btfss p5___byte, p5___bit ; line_number = 505 ; do_nothing ;info 505, 554 goto shift2__4 ; Recombine size1 = 0 || size2 = 0 ; line_number = 504 ; while !p5 done shift2__7: ; 2GOTO: code1 final bitstates:(data:X0=cu=>X0 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:X0=cu=>X0 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 494 ; if p6 done ; # The bus processor has a response. Now grab the data. ; line_number = 508 ; bus_shift := bus_shift << 2 ;info 508, 555 ; Assignment of variable to self (no code needed) rlf bus_shift,f rlf bus_shift,f movlw 252 andwf bus_shift,f ; line_number = 509 ; if p1 start ;info 509, 559 ; =>bit_code_emit@symbol(): sym=p1 ; 1TEST: Single test with code in skip slot btfsc p1___byte, p1___bit ; line_number = 510 ; bus_shift@1 := _true ;info 510, 560 shift2__select__8___byte equ bus_shift shift2__select__8___bit equ 1 bsf shift2__select__8___byte, shift2__select__8___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 509 ; if p1 done ; # call _uart_byte_put('1') ; #else ; # call _uart_byte_put('0') ; line_number = 514 ; if p0 start ;info 514, 561 ; =>bit_code_emit@symbol(): sym=p0 ; 1TEST: Single test with code in skip slot btfsc p0___byte, p0___bit ; line_number = 515 ; bus_shift@0 := _true ;info 515, 562 shift2__select__9___byte equ bus_shift shift2__select__9___bit equ 0 bsf shift2__select__9___byte, shift2__select__9___bit ; Recombine size1 = 0 || size2 = 0 ; line_number = 514 ; if p0 done ; # call _uart_byte_put('1') ; #else ; # call _uart_byte_put('0') ; #call _uart_byte_put('>') ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 523 ;info 523, 564 ; procedure character_get character_get: ; arguments_none ; line_number = 525 ; returns byte ; # This procedure will get a character from the user and echo it. ; # If the user types '\r\', an extra line feed is output and ; # the global {end_of_line} bit is set. ; line_number = 531 ; local character byte character_get__character equ globals___0+21 ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 533 ; character := _uart_byte_get() ;info 533, 564 call _uart_byte_get movwf character_get__character ; line_number = 534 ; call _uart_byte_put(character) ;info 534, 566 movf character_get__character,w call _uart_byte_put ; line_number = 535 ; if character = '\r\' start ;info 535, 568 ; Left minus Right movlw 243 addwf character_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=3 false.size=0 ; No 2TEST: true.size=3 false.size=0 ; 1GOTO: Single test with GOTO btfss __z___byte, __z___bit goto character_get__1 ; line_number = 536 ; end_of_line := _true ;info 536, 572 bsf end_of_line___byte, end_of_line___bit ; line_number = 537 ; call _uart_byte_put('\n\') ;info 537, 573 movlw 10 call _uart_byte_put ; Recombine size1 = 0 || size2 = 0 character_get__1: ; line_number = 535 ; if character = '\r\' done ; line_number = 538 ; return character start ; line_number = 538 ;info 538, 575 movf character_get__character,w return ; line_number = 538 ; return character done ; delay after procedure statements=non-uniform end_of_line_get__0return___byte equ globals___0+79 end_of_line_get__0return___bit equ 5 ; line_number = 541 ;info 541, 577 ; procedure end_of_line_get end_of_line_get: ; arguments_none ; line_number = 543 ; returns bit ; # This procedure will return 1 if end of line has been reached ; # without error; otherwise 0 is returned and an error exclamation ; # point ('!') is output. ; line_number = 549 ; local character byte end_of_line_get__character equ globals___0+22 ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 551 ; if error start ;info 551, 577 ; =>bit_code_emit@symbol(): sym=error ; No 1TEST: true.size=2 false.size=0 ; No 2TEST: true.size=2 false.size=0 ; 1GOTO: Single test with GOTO btfss error___byte, error___bit goto end_of_line_get__1 ; line_number = 552 ; return 0 start ; line_number = 552 ;info 552, 579 bcf end_of_line_get__0return___byte, end_of_line_get__0return___bit return ; line_number = 552 ; return 0 done ; Recombine size1 = 0 || size2 = 0 end_of_line_get__1: ; line_number = 551 ; if error done ; line_number = 553 ; while !end_of_line start end_of_line_get__2: ;info 553, 581 ; =>bit_code_emit@symbol(): sym=end_of_line ; No 1TEST: true.size=0 false.size=21 ; No 2TEST: true.size=0 false.size=21 ; 1GOTO: Single test with GOTO btfsc end_of_line___byte, end_of_line___bit goto end_of_line_get__5 ; line_number = 554 ; character := character_get() ;info 554, 583 call character_get movwf end_of_line_get__character ; line_number = 555 ; if character != '\r\' && character != '\t\' && character != ' ' start ;info 555, 585 ; Left minus Right movlw 243 addwf end_of_line_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=1 false.size=14 ; No 2TEST: true.size=1 false.size=14 ; 2GOTO: Single test with two GOTO's btfsc __z___byte, __z___bit goto end_of_line_get__3 ; Recombine code1_bit_states != code2_bit_states ; Recombine code1_bit_states != code2_bit_states ; Left minus Right movlw 247 addwf end_of_line_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=1 false.size=10 ; No 2TEST: true.size=1 false.size=10 ; 2GOTO: Single test with two GOTO's btfsc __z___byte, __z___bit goto end_of_line_get__3 ; Recombine code1_bit_states != code2_bit_states ; &&||: index=2 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; Left minus Right movlw 224 addwf end_of_line_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=0 false.size=6 ; No 2TEST: true.size=0 false.size=6 ; 1GOTO: Single test with GOTO btfsc __z___byte, __z___bit goto end_of_line_get__4 ; line_number = 556 ; error := _true ;info 556, 597 bsf error___byte, error___bit ; line_number = 557 ; call _uart_byte_put('!') ;info 557, 598 movlw 33 call _uart_byte_put ; line_number = 558 ; call _uart_crlf_put() ;info 558, 600 call _uart_crlf_put ; line_number = 559 ; return 0 start ; line_number = 559 ;info 559, 601 bcf end_of_line_get__0return___byte, end_of_line_get__0return___bit return ; line_number = 559 ; return 0 done end_of_line_get__4: end_of_line_get__3: ; Recombine code1_bit_states != code2_bit_states ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=1 new_delay=4294967295 goto_delay=4294967295 ; 2GOTO: No goto needed; true=end_of_line_get__3 false= true_size=1 false_size=10 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; 2GOTO: No goto needed; true=end_of_line_get__3 false= true_size=1 false_size=14 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 555 ; if character != '\r\' && character != '\t\' && character != ' ' done goto end_of_line_get__2 end_of_line_get__5: ; Recombine size1 = 0 || size2 = 0 ; line_number = 553 ; while !end_of_line done ; line_number = 560 ; return 1 start ; line_number = 560 ;info 560, 604 bsf end_of_line_get__0return___byte, end_of_line_get__0return___bit return ; line_number = 560 ; return 1 done ; delay after procedure statements=non-uniform ; line_number = 563 ;info 563, 606 ; procedure hex_byte_get hex_byte_get: ; arguments_none ; line_number = 565 ; returns byte ; # This procedure will get a hex byte from the user. Zero, one or ; # more spaces and tabs may preceed the hex byte. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 570 ; call hex_word_get() ;info 570, 606 call hex_word_get ; line_number = 571 ; return hex_low start ; line_number = 571 ;info 571, 607 movf hex_low,w return ; line_number = 571 ; return hex_low done ; delay after procedure statements=non-uniform ; line_number = 574 ;info 574, 609 ; procedure hex_word_get hex_word_get: ; arguments_none ; line_number = 576 ; returns_nothing ; # This procedure will get a 16-bit hexadecimal value and return ; # the result in {hex_high} and {hex_low}. ; line_number = 581 ; local character byte hex_word_get__character equ globals___0+23 ; line_number = 582 ; local digit byte hex_word_get__digit equ globals___0+24 ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 584 ; hex_high := 0 ;info 584, 609 clrf hex_high ; line_number = 585 ; hex_low := 0 ;info 585, 610 clrf hex_low ; line_number = 586 ; character := ' ' ;info 586, 611 movlw 32 movwf hex_word_get__character ; line_number = 587 ; if !end_of_line start ;info 587, 613 ; =>bit_code_emit@symbol(): sym=end_of_line ; No 1TEST: true.size=0 false.size=79 ; No 2TEST: true.size=0 false.size=79 ; 1GOTO: Single test with GOTO btfsc end_of_line___byte, end_of_line___bit goto hex_word_get__18 ; line_number = 588 ; while character = ' ' || character = '\t\' start hex_word_get__1: ;info 588, 615 ; Left minus Right movlw 224 addwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=1 false.size=7 ; No 2TEST: true.size=1 false.size=7 ; 2GOTO: Single test with two GOTO's btfsc __z___byte, __z___bit goto hex_word_get__2 ; Recombine code1_bit_states != code2_bit_states ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; Left minus Right movlw 247 addwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=3 false.size=0 ; No 2TEST: true.size=3 false.size=0 ; 1GOTO: Single test with GOTO btfss __z___byte, __z___bit goto hex_word_get__3 hex_word_get__2: ; line_number = 589 ; character := character_get() ;info 589, 623 call character_get movwf hex_word_get__character goto hex_word_get__1 ; Recombine size1 = 0 || size2 = 0 hex_word_get__3: ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; 2GOTO: No goto needed; true=hex_word_get__2 false= true_size=1 false_size=7 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 588 ; while character = ' ' || character = '\t\' done ; line_number = 591 ; loop_forever start hex_word_get__4: ; line_number = 592 ; if '0' <= character && character <= '9' start ;info 592, 626 movlw 48 subwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=49 false.size=1 ; No 2TEST: true.size=49 false.size=1 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__12 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 57 subwf hex_word_get__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=39 false.size=3 ; No 2TEST: true.size=39 false.size=3 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__13 hex_word_get__12: ; line_number = 594 ;info 594, 636 movlw 65 subwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=35 false.size=1 ; No 2TEST: true.size=35 false.size=1 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__9 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 70 subwf hex_word_get__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=25 false.size=3 ; No 2TEST: true.size=25 false.size=3 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__10 hex_word_get__9: ; line_number = 596 ;info 596, 646 movlw 97 subwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=21 false.size=1 ; No 2TEST: true.size=21 false.size=1 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__6 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 102 subwf hex_word_get__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=11 false.size=3 ; No 2TEST: true.size=11 false.size=3 ; 2GOTO: Single test with two GOTO's btfss __c___byte, __c___bit goto hex_word_get__7 hex_word_get__6: ; line_number = 598 ;info 598, 656 ; Left minus Right movlw 224 addwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=1 false.size=7 ; No 2TEST: true.size=1 false.size=7 ; 2GOTO: Single test with two GOTO's btfsc __z___byte, __z___bit goto hex_word_get__5 ; Recombine code1_bit_states != code2_bit_states ; Recombine code1_bit_states != code2_bit_states ; Left minus Right movlw 247 addwf hex_word_get__character,w ; =>bit_code_emit@symbol(): sym=__z ; No 1TEST: true.size=1 false.size=3 ; No 2TEST: true.size=1 false.size=3 ; 2GOTO: Single test with two GOTO's btfsc __z___byte, __z___bit goto hex_word_get__5 ; Recombine code1_bit_states != code2_bit_states ; &&||: index=2 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; =>bit_code_emit@symbol(): sym=end_of_line ; 1TEST: Single test with code in skip slot btfss end_of_line___byte, end_of_line___bit ; line_number = 601 ; error := _true ;info 601, 665 bsf error___byte, error___bit ; line_number = 602 ; return start ; line_number = 602 ;info 602, 666 hex_word_get__5: ; line_number = 599 ; return start ; line_number = 599 ;info 599, 666 retlw 0 ; line_number = 599 ; return done ; line_number = 602 ; return done ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=1 new_delay=4294967295 goto_delay=4294967295 ; 2GOTO: No goto needed; true=hex_word_get__5 false= true_size=1 false_size=3 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; 2GOTO: No goto needed; true=hex_word_get__5 false= true_size=1 false_size=7 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) goto hex_word_get__8 ; 2GOTO: Starting code 2 hex_word_get__7: ; line_number = 597 ; digit := character + (10 - 'a') ;info 597, 668 movlw 169 addwf hex_word_get__character,w movwf hex_word_get__digit hex_word_get__8: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; Recombine code1_bit_states != code2_bit_states ; 2GOTO: No goto needed; true= false=hex_word_get__6 true_size=21 false_size=1 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) goto hex_word_get__11 ; 2GOTO: Starting code 2 hex_word_get__10: ; line_number = 595 ; digit := character + (10 - 'A') ;info 595, 672 movlw 201 addwf hex_word_get__character,w movwf hex_word_get__digit hex_word_get__11: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; Recombine code1_bit_states != code2_bit_states ; 2GOTO: No goto needed; true= false=hex_word_get__9 true_size=35 false_size=1 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) goto hex_word_get__14 ; 2GOTO: Starting code 2 hex_word_get__13: ; line_number = 593 ; digit := character - '0' ;info 593, 676 movlw 208 addwf hex_word_get__character,w movwf hex_word_get__digit hex_word_get__14: ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; Recombine code1_bit_states != code2_bit_states ; 2GOTO: No goto needed; true= false=hex_word_get__12 true_size=49 false_size=1 ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:XX=cc=>XX) ; 2GOTO: code final bitstates:(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 592 ; if '0' <= character && character <= '9' done ; line_number = 603 ; hex_high := (hex_high << 4) | (hex_low >> 4) ;info 603, 679 hex_word_get__15 equ globals___0+33 swapf hex_high,w movwf hex_word_get__15 movlw 240 andwf hex_word_get__15,f hex_word_get__16 equ globals___0+34 swapf hex_low,w andlw 15 iorwf hex_word_get__15,w movwf hex_high ; line_number = 604 ; hex_low := (hex_low << 4) | digit ;info 604, 687 hex_word_get__17 equ globals___0+34 swapf hex_low,w andlw 240 iorwf hex_word_get__digit,w movwf hex_low ; line_number = 605 ; character := character_get() ;info 605, 691 call character_get movwf hex_word_get__character ; line_number = 591 ; loop_forever wrap-up goto hex_word_get__4 ; line_number = 591 ; loop_forever done hex_word_get__18: ; Recombine size1 = 0 || size2 = 0 ; line_number = 587 ; if !end_of_line done ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; Appending 7 delayed procedures to code bank 0 ; buffer = '_uart' ; line_number = 7 ;info 7, 695 ; procedure _uart_byte_safe_get _uart_byte_safe_get: ; arguments_none ; line_number = 9 ; returns byte ; # This procedure will the next byte from UART. If no byte ; # received in a reasonable time, 0xfc is returned. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 14 ; loop_exactly 255 start ;info 14, 695 _uart_byte_safe_get__1 equ globals___0+35 movlw 255 movwf _uart_byte_safe_get__1 _uart_byte_safe_get__2: ; line_number = 15 ; loop_exactly 255 start ;info 15, 697 _uart_byte_safe_get__3 equ globals___0+36 movlw 255 movwf _uart_byte_safe_get__3 _uart_byte_safe_get__4: ; line_number = 16 ; if _rcif start ;info 16, 699 ; =>bit_code_emit@symbol(): sym=_rcif ; No 1TEST: true.size=2 false.size=0 ; No 2TEST: true.size=2 false.size=0 ; 1GOTO: Single test with GOTO btfss _rcif___byte, _rcif___bit goto _uart_byte_safe_get__5 ; line_number = 17 ; return _rcreg start ; line_number = 17 ;info 17, 701 movf _rcreg,w return ; line_number = 17 ; return _rcreg done ; Recombine size1 = 0 || size2 = 0 _uart_byte_safe_get__5: ; line_number = 16 ; if _rcif done ; line_number = 15 ; loop_exactly 255 wrap-up decfsz _uart_byte_safe_get__3,f goto _uart_byte_safe_get__4 ; line_number = 15 ; loop_exactly 255 done ; line_number = 14 ; loop_exactly 255 wrap-up decfsz _uart_byte_safe_get__1,f goto _uart_byte_safe_get__2 ; line_number = 14 ; loop_exactly 255 done ; line_number = 18 ; return 0xfc start ; line_number = 18 ;info 18, 707 retlw 252 ; line_number = 18 ; return 0xfc done ; delay after procedure statements=non-uniform ; line_number = 21 ;info 21, 708 ; procedure _uart_byte_get _uart_byte_get: ; arguments_none ; line_number = 23 ; returns byte ; # This procedure will return the next byte from the UART. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 27 ; while !_rcif start _uart_byte_get__1: ;info 27, 708 ; =>bit_code_emit@symbol(): sym=_rcif ; 1TEST: Single test with code in skip slot btfss _rcif___byte, _rcif___bit ; line_number = 28 ; do_nothing ;info 28, 709 goto _uart_byte_get__1 ; Recombine size1 = 0 || size2 = 0 ; line_number = 27 ; while !_rcif done ; line_number = 29 ; return _rcreg start ; line_number = 29 ;info 29, 710 movf _rcreg,w return ; line_number = 29 ; return _rcreg done ; delay after procedure statements=non-uniform ; line_number = 32 ;info 32, 712 ; procedure _uart_hex_put _uart_hex_put: ; Last argument is sitting in W; save into argument variable movwf _uart_hex_put__value ; delay=4294967295 ; line_number = 33 ; argument value byte _uart_hex_put__value equ globals___0 ; line_number = 34 ; returns_nothing ; # This procedure will output {value} to the UART as a 2-digit ; # hexadecimal number. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 39 ; call _uart_nibble_put(value >> 4) ;info 39, 713 _uart_hex_put__1 equ globals___0+37 swapf _uart_hex_put__value,w andlw 15 call _uart_nibble_put ; line_number = 40 ; call _uart_nibble_put(value & 0xf) ;info 40, 716 movlw 15 andwf _uart_hex_put__value,w call _uart_nibble_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 43 ;info 43, 720 ; procedure _uart_nibble_put _uart_nibble_put: ; Last argument is sitting in W; save into argument variable movwf _uart_nibble_put__nibble ; delay=4294967295 ; line_number = 44 ; argument nibble byte _uart_nibble_put__nibble equ globals___0+1 ; line_number = 45 ; returns_nothing ; # This procedure will output {value} to UART as a 1 digit ; # hexadecimal number. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 50 ; if nibble < 10 start ;info 50, 721 movlw 10 subwf _uart_nibble_put__nibble,w ; =>bit_code_emit@symbol(): sym=__c ; No 1TEST: true.size=1 false.size=1 ; 2TEST: two tests with code in both delay slots btfsc __c___byte, __c___bit ; line_number = 53 ; nibble := nibble - 10 + 'A' ;info 53, 724 movlw 55 btfss __c___byte, __c___bit ; line_number = 51 ; nibble := nibble + '0' ;info 51, 726 movlw 48 addwf _uart_nibble_put__nibble,f ; line_number = 50 ; if nibble < 10 done ; line_number = 54 ; call _uart_byte_put(nibble) ;info 54, 728 movf _uart_nibble_put__nibble,w call _uart_byte_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 57 ;info 57, 731 ; procedure _uart_space_put _uart_space_put: ; arguments_none ; line_number = 59 ; returns_nothing ; # This procedure will output a space to the UART. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 63 ; call _uart_byte_put(' ') ;info 63, 731 movlw 32 call _uart_byte_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 66 ;info 66, 734 ; procedure _uart_crlf_put _uart_crlf_put: ; arguments_none ; line_number = 68 ; returns_nothing ; # This procedure will output a carriage return line feed sequecne to ; # the UART. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 73 ; call _uart_byte_put('\cr\') ;info 73, 734 movlw 13 call _uart_byte_put ; line_number = 74 ; call _uart_byte_put('\lf\') ;info 74, 736 movlw 10 call _uart_byte_put ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 77 ;info 77, 739 ; procedure _uart_byte_put _uart_byte_put: ; Last argument is sitting in W; save into argument variable movwf _uart_byte_put__byte ; delay=4294967295 ; line_number = 78 ; argument byte byte _uart_byte_put__byte equ globals___0+2 ; line_number = 79 ; returns_nothing ; # This procedure will send {byte} out using to the UART. ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:XX=cc=>XX) ; line_number = 83 ; while !_txif start _uart_byte_put__1: ;info 83, 740 ; =>bit_code_emit@symbol(): sym=_txif ; 1TEST: Single test with code in skip slot btfss _txif___byte, _txif___bit ; line_number = 84 ; do_nothing ;info 84, 741 goto _uart_byte_put__1 ; Recombine size1 = 0 || size2 = 0 ; line_number = 83 ; while !_txif done ; line_number = 85 ; _txreg := byte ;info 85, 742 movf _uart_byte_put__byte,w movwf _txreg ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; Configuration bits ; address = 0x2007, fill = 0x3000 ; fcmen = off (0x0) ; ieso = off (0x0) ; boden = off (0x0) ; cpd = off (0x80) ; cp = off (0x40) ; mclre = off (0x0) ; pwrte = off (0x10) ; wdte = off (0x0) ; fosc = hs (0x2) ; 12498 = 0x30d2 __config 12498 ; Define start addresses for data regions ; Region="shared___globals" Address=112" Size=16 Bytes=0 Bits=0 Available=16 ; Region="globals___0" Address=32" Size=80 Bytes=38 Bits=6 Available=41 ; Region="globals___1" Address=160" Size=80 Bytes=0 Bits=0 Available=80 ; Region="globals___2" Address=288" Size=80 Bytes=0 Bits=0 Available=80 ; Region="shared___globals" Address=112" Size=16 Bytes=0 Bits=0 Available=16 end