radix dec ; Code bank 0; Start address: 0; End address: 2047 org 0 ; Define start addresses for data regions shared___globals equ 112 globals___0 equ 32 globals___1 equ 160 globals___2 equ 272 globals___3 equ 400 __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) 2000-2005 by Wayne C. Gramlich. ; # All rights reserved. ; # This is a boot loader that resides in high memory for ; # loading programs into low memory. ; buffer = 'picbrain11' ; line_number = 9 ; library _pic16f876 entered ; # Copyright (c) 2004 by Wayne C. Gramlich ; # All rights reserved. ; buffer = '_pic16f876' ; line_number = 6 ; processor pic16f876 ; line_number = 7 ; configure_address 0x2007 ; line_number = 8 ; configure_fill 0x0400 ; line_number = 9 ; configure_option cp: off = 0x3030 ; line_number = 10 ; configure_option cp: quarter = 0x2020 ; line_number = 11 ; configure_option cp: half = 0x1010 ; line_number = 12 ; configure_option cp: on = 0x0000 ; line_number = 13 ; configure_option debug: on = 0x000 ; line_number = 14 ; configure_option debug: off = 0x800 ; line_number = 15 ; configure_option wrt: on = 0x200 ; line_number = 16 ; configure_option wrt: off = 0x000 ; line_number = 17 ; configure_option cpd: on = 0x000 ; line_number = 18 ; configure_option cpd: off = 0x100 ; line_number = 19 ; configure_option lvp: on = 0x80 ; line_number = 20 ; configure_option lvp: off = 0x00 ; line_number = 21 ; configure_option boden: on = 0x40 ; line_number = 22 ; configure_option boden: off = 0x00 ; line_number = 23 ; configure_option pwrte: on = 0 ; line_number = 24 ; configure_option pwrte: off = 8 ; line_number = 25 ; configure_option wdte: on = 4 ; line_number = 26 ; configure_option wdte: off = 0 ; line_number = 27 ; configure_option fosc: rc = 3 ; line_number = 28 ; configure_option fosc: hs = 2 ; line_number = 29 ; configure_option fosc: xt = 1 ; line_number = 30 ; configure_option fosc: lp = 0 ; line_number = 31 ; code_bank 0x0 : 0x7ff ; line_number = 32 ; code_bank 0x800 : 0xfff ; line_number = 33 ; code_bank 0x1000 : 0x17ff ; line_number = 34 ; code_bank 0x1800 : 0x1fff ; line_number = 35 ; data_bank 0x0 : 0x7f ; line_number = 36 ; data_bank 0x80 : 0xff ; line_number = 37 ; data_bank 0x100 : 0x17f ; line_number = 38 ; data_bank 0x180 : 0x1ff ; line_number = 39 ; global_region 0x20 : 0x6f ; line_number = 40 ; global_region 0xa0 : 0xef ; line_number = 41 ; global_region 0x110 : 0x16f ; line_number = 42 ; global_region 0x190 : 0x1ff ; line_number = 43 ; shared_region 0x70 : 0x7f ; line_number = 44 ; interrupts_possible ; line_number = 45 ; packages pdip = 28 ; line_number = 46 ; pin mclr, vpp, thv, mclr_unused ; line_number = 47 ; pin_bindings pdip = 1 ; line_number = 48 ; pin ra0_in, ra0_out, an0, ra0_unused ; line_number = 49 ; pin_bindings pdip = 2 ; line_number = 50 ; bind_to _porta@0 ; line_number = 51 ; or_if ra0_in _trisa 1 ; line_number = 52 ; or_if ra0_in _adcon1 7 ; line_number = 53 ; or_if ra0_in _adcon0 0 ; line_number = 54 ; or_if ra0_out _trisa 0 ; line_number = 55 ; or_if ra0_out _adcon1 7 ; line_number = 56 ; or_if ra0_out _adcon0 0 ; line_number = 57 ; pin ra1_in, ra1_out, an1, ra1_unused ; line_number = 58 ; pin_bindings pdip = 3 ; line_number = 59 ; bind_to _porta@1 ; line_number = 60 ; or_if ra1_in _trisa 2 ; line_number = 61 ; or_if ra1_in _adcon1 7 ; line_number = 62 ; or_if ra1_in _adcon0 0 ; line_number = 63 ; or_if ra1_out _trisa 0 ; line_number = 64 ; or_if ra1_out _adcon1 7 ; line_number = 65 ; or_if ra1_out _adcon0 0 ; line_number = 66 ; pin ra2_in, ra2_out, an2, vref_minus, ra2_unused ; line_number = 67 ; pin_bindings pdip = 4 ; line_number = 68 ; bind_to _porta@2 ; line_number = 69 ; or_if ra2_in _trisa 4 ; line_number = 70 ; or_if ra2_in _adcon1 7 ; line_number = 71 ; or_if ra2_in _adcon0 0 ; line_number = 72 ; or_if ra2_out _trisa 0 ; line_number = 73 ; or_if ra2_out _adcon1 7 ; line_number = 74 ; or_if ra2_out _adcon0 0 ; line_number = 75 ; pin ra3_in, ra3_out, an3, vrev_plus, ra3_unused ; line_number = 76 ; pin_bindings pdip = 5 ; line_number = 77 ; bind_to _porta@3 ; line_number = 78 ; or_if ra3_in _trisa 8 ; line_number = 79 ; or_if ra3_in _adcon1 7 ; line_number = 80 ; or_if ra3_in _adcon0 0 ; line_number = 81 ; or_if ra3_out _trisa 0 ; line_number = 82 ; or_if ra3_out _adcon1 7 ; line_number = 83 ; or_if ra3_out _adcon0 0 ; line_number = 84 ; pin ra4_in, ra4_out, t0cki, ra4_unused ; line_number = 85 ; pin_bindings pdip = 6 ; line_number = 86 ; bind_to _porta@4 ; line_number = 87 ; or_if ra4_in _trisa 16 ; line_number = 88 ; or_if ra4_in _adcon1 7 ; line_number = 89 ; or_if ra4_in _adcon0 0 ; line_number = 90 ; or_if ra4_out _trisa 0 ; line_number = 91 ; or_if ra4_out _adcon1 7 ; line_number = 92 ; or_if ra4_out _adcon0 0 ; line_number = 93 ; pin ra5_in, ra5_out, an4, ra5_unused ; line_number = 94 ; pin_bindings pdip = 7 ; line_number = 95 ; bind_to _porta@5 ; line_number = 96 ; or_if ra5_in _trisa 32 ; line_number = 97 ; or_if ra5_in _adcon1 7 ; line_number = 98 ; or_if ra5_in _adcon1 0 ; line_number = 99 ; or_if ra5_out _trisa 0 ; line_number = 100 ; or_if ra5_out _adcon1 7 ; line_number = 101 ; or_if ra5_out _adcon0 0 ; line_number = 102 ; pin vss, ground ; line_number = 103 ; pin_bindings pdip = 8 ; line_number = 104 ; pin osc1, clkin ; line_number = 105 ; pin_bindings pdip = 9 ; line_number = 106 ; pin osc2, clkout ; line_number = 107 ; pin_bindings pdip = 10 ; line_number = 108 ; pin rc0_in, rc0_out, t1oso, t1cki, rc0_unused ; line_number = 109 ; pin_bindings pdip = 11 ; line_number = 110 ; bind_to _portc@0 ; line_number = 111 ; or_if rc0_in _trisc 1 ; line_number = 112 ; or_if rc0_in _adcon1 7 ; line_number = 113 ; or_if rc0_in _adcon0 0 ; line_number = 114 ; or_if rc0_out _trisc 0 ; line_number = 115 ; or_if rc0_out _adcon1 7 ; line_number = 116 ; or_if rc0_out _adcon0 0 ; line_number = 117 ; pin rc1_in, rc1_out, t1osi, ccp2, rc1_unused ; line_number = 118 ; pin_bindings pdip = 12 ; line_number = 119 ; bind_to _portc@1 ; line_number = 120 ; or_if rc1_in _trisc 2 ; line_number = 121 ; or_if rc1_in _adcon1 7 ; line_number = 122 ; or_if rc1_in _adcon0 0 ; line_number = 123 ; or_if rc1_out _trisc 0 ; line_number = 124 ; or_if rc1_out _adcon1 7 ; line_number = 125 ; or_if rc1_out _adcon0 0 ; line_number = 126 ; pin rc2_in, rc2_out, ccp1, rc2_unused ; line_number = 127 ; pin_bindings pdip = 13 ; line_number = 128 ; bind_to _portc@2 ; line_number = 129 ; or_if rc2_in _trisc 4 ; line_number = 130 ; or_if rc2_in _adcon1 7 ; line_number = 131 ; or_if rc2_in _adcon0 0 ; line_number = 132 ; or_if rc2_out _trisc 0 ; line_number = 133 ; or_if rc2_out _adcon1 7 ; line_number = 134 ; or_if rc2_out _adcon0 0 ; line_number = 135 ; pin rc3_in, rc3_out, sck, scl, rc3_unused ; line_number = 136 ; pin_bindings pdip = 14 ; line_number = 137 ; bind_to _portc@3 ; line_number = 138 ; or_if rc3_in _trisc 8 ; line_number = 139 ; or_if rc3_in _adcon1 7 ; line_number = 140 ; or_if rc3_in _adcon0 0 ; line_number = 141 ; or_if rc3_out _trisc 0 ; line_number = 142 ; or_if rc3_out _adcon1 7 ; line_number = 143 ; or_if rc3_out _adcon0 0 ; line_number = 144 ; pin rc4_in, rc4_out, sdi, sda, rc4_unused ; line_number = 145 ; pin_bindings pdip = 15 ; line_number = 146 ; bind_to _portc@4 ; line_number = 147 ; or_if rc4_in _trisc 16 ; line_number = 148 ; or_if rc4_in _adcon1 7 ; line_number = 149 ; or_if rc4_in _adcon0 0 ; line_number = 150 ; or_if rc4_out _trisc 0 ; line_number = 151 ; or_if rc4_out _adcon1 7 ; line_number = 152 ; or_if rc4_out _adcon0 0 ; line_number = 153 ; pin rc5_in, rc5_out, sdo, rc5_unused ; line_number = 154 ; pin_bindings pdip = 16 ; line_number = 155 ; bind_to _portc@5 ; line_number = 156 ; or_if rc5_in _trisc 32 ; line_number = 157 ; or_if rc5_in _adcon1 7 ; line_number = 158 ; or_if rc5_in _adcon0 0 ; line_number = 159 ; or_if rc5_out _trisc 0 ; line_number = 160 ; or_if rc5_out _adcon1 7 ; line_number = 161 ; or_if rc5_out _adcon0 0 ; line_number = 162 ; pin rc6_in, rc6_out, tx, ck, rc6_unused ; line_number = 163 ; pin_bindings pdip = 17 ; line_number = 164 ; bind_to _portc@6 ; line_number = 165 ; or_if rc6_in _trisc 64 ; line_number = 166 ; or_if rc6_in _adcon1 7 ; line_number = 167 ; or_if rc6_in _adcon0 0 ; line_number = 168 ; or_if rc6_out _trisc 0 ; line_number = 169 ; or_if rc6_out _adcon1 7 ; line_number = 170 ; or_if rc6_out _adcon0 0 ; line_number = 171 ; or_if tx _trisc 0 ; line_number = 172 ; or_if tx _adcon1 7 ; line_number = 173 ; or_if tx _adcon0 0 ; line_number = 174 ; pin rc7_in, rc7_out, rx, dt, rc7_unused ; line_number = 175 ; pin_bindings pdip = 18 ; line_number = 176 ; bind_to _portc@7 ; line_number = 177 ; or_if rc7_in _trisc 128 ; line_number = 178 ; or_if rc7_in _adcon1 7 ; line_number = 179 ; or_if rc7_in _adcon0 0 ; line_number = 180 ; or_if rx _trisc 128 ; line_number = 181 ; or_if rx _adcon1 7 ; line_number = 182 ; or_if rx _adcon0 0 ; line_number = 183 ; or_if rc7_out _trisc 0 ; line_number = 184 ; or_if rc7_out _adcon1 7 ; line_number = 185 ; or_if rc7_out _adcon0 0 ; line_number = 186 ; pin vss2, ground2 ; line_number = 187 ; pin_bindings pdip = 19 ; line_number = 188 ; pin vdd, power_supply ; line_number = 189 ; pin_bindings pdip = 20 ; line_number = 190 ; pin rb0_in, rb0_out, int, rb0_unused ; line_number = 191 ; pin_bindings pdip = 21 ; line_number = 192 ; bind_to _portb@0 ; line_number = 193 ; or_if rb0_in _trisb 1 ; line_number = 194 ; or_if rb0_in _adcon1 7 ; line_number = 195 ; or_if rb0_in _adcon0 0 ; line_number = 196 ; or_if rb0_out _trisb 0 ; line_number = 197 ; or_if rb0_out _adcon1 7 ; line_number = 198 ; or_if rb0_out _adcon0 0 ; line_number = 199 ; pin rb1_in, rb1_out, rb1_unused ; line_number = 200 ; pin_bindings pdip = 22 ; line_number = 201 ; bind_to _portb@1 ; line_number = 202 ; or_if rb1_in _trisb 2 ; line_number = 203 ; or_if rb1_in _adcon1 7 ; line_number = 204 ; or_if rb1_in _adcon0 0 ; line_number = 205 ; or_if rb1_out _trisb 0 ; line_number = 206 ; or_if rb1_out _adcon1 7 ; line_number = 207 ; or_if rb1_out _adcon0 0 ; line_number = 208 ; pin rb2_in, rb2_out, rb2_unused ; line_number = 209 ; pin_bindings pdip = 23 ; line_number = 210 ; bind_to _portb@2 ; line_number = 211 ; or_if rb2_in _trisb 4 ; line_number = 212 ; or_if rb2_in _adcon1 7 ; line_number = 213 ; or_if rb2_in _adcon0 0 ; line_number = 214 ; or_if rb2_out _trisb 0 ; line_number = 215 ; or_if rb2_out _adcon1 7 ; line_number = 216 ; or_if rb2_out _adcon0 0 ; line_number = 217 ; pin rb3_in, rb3_out, pgm, rb3_unused ; line_number = 218 ; pin_bindings pdip = 24 ; line_number = 219 ; bind_to _portb@3 ; line_number = 220 ; or_if rb3_in _trisb 8 ; line_number = 221 ; or_if rb3_in _adcon1 7 ; line_number = 222 ; or_if rb3_out _trisb 0 ; line_number = 223 ; or_if rb3_out _adcon1 7 ; line_number = 224 ; pin rb4_in, rb4_out, rb4_unused ; line_number = 225 ; pin_bindings pdip = 25 ; line_number = 226 ; bind_to _portb@4 ; line_number = 227 ; or_if rb4_in _trisb 16 ; line_number = 228 ; or_if rb4_in _adcon1 7 ; line_number = 229 ; or_if rb4_in _adcon0 0 ; line_number = 230 ; or_if rb4_out _trisb 0 ; line_number = 231 ; or_if rb4_out _adcon1 7 ; line_number = 232 ; or_if rb4_out _adcon0 0 ; line_number = 233 ; pin rb5_in, rb5_out, rb5_unused ; line_number = 234 ; pin_bindings pdip = 26 ; line_number = 235 ; bind_to _portb@5 ; line_number = 236 ; or_if rb5_in _trisb 32 ; line_number = 237 ; or_if rb5_in _adcon1 7 ; line_number = 238 ; or_if rb5_in _adcon0 0 ; line_number = 239 ; or_if rb5_out _trisb 0 ; line_number = 240 ; or_if rb5_out _adcon1 7 ; line_number = 241 ; or_if rb5_out _adcon0 0 ; line_number = 242 ; pin rb6_in, rb6_out, pgc, rb6_unused ; line_number = 243 ; pin_bindings pdip = 27 ; line_number = 244 ; bind_to _portb@6 ; line_number = 245 ; or_if rb6_in _trisb 64 ; line_number = 246 ; or_if rb6_in _adcon1 7 ; line_number = 247 ; or_if rb6_in _adcon0 0 ; line_number = 248 ; or_if rb6_out _trisb 0 ; line_number = 249 ; or_if rb6_out _adcon1 7 ; line_number = 250 ; or_if rb6_out _adcon0 0 ; line_number = 251 ; pin rb7_in, rb7_out, pgd, rb7_unused ; line_number = 252 ; pin_bindings pdip = 28 ; line_number = 253 ; bind_to _portb@7 ; line_number = 254 ; or_if rb7_in _trisb 128 ; line_number = 255 ; or_if rb7_in _adcon1 7 ; line_number = 256 ; or_if rb7_in _adcon0 0 ; line_number = 257 ; or_if rb7_out _trisb 0 ; line_number = 258 ; or_if rb7_out _adcon1 7 ; line_number = 259 ; or_if rb7_out _adcon0 0 ; # Register and pin definitions: ; line_number = 266 ; library _pic16f87x entered ; # Copyright (c) 2004 by Wayne C. Gramlich ; # All rights reserved. ; # Common declarations for PIC16F87x series microcontrollers: ; # Register and pin definitions: ; # Bank 0: ; buffer = '_pic16f87x' ; line_number = 12 ; register _indf = _indf equ 0 ; line_number = 14 ; register _tmr0 = _tmr0 equ 1 ; line_number = 16 ; register _pcl = _pcl equ 2 ; line_number = 18 ; register _status = _status equ 3 ; line_number = 19 ; bind _irp = _status@7 _irp___byte equ _status _irp___bit equ 7 ; line_number = 20 ; bind _rp1 = _status@6 _rp1___byte equ _status _rp1___bit equ 6 ; line_number = 21 ; bind _rp0 = _status@5 _rp0___byte equ _status _rp0___bit equ 5 ; line_number = 22 ; bind _to = _status@4 _to___byte equ _status _to___bit equ 4 ; line_number = 23 ; bind _pd = _status@3 _pd___byte equ _status _pd___bit equ 3 ; line_number = 24 ; bind _z = _status@2 _z___byte equ _status _z___bit equ 2 ; line_number = 25 ; bind _dc = _status@1 _dc___byte equ _status _dc___bit equ 1 ; line_number = 27 ; register _fsr = _fsr equ 4 ; line_number = 29 ; register _porta = _porta equ 5 ; line_number = 31 ; register _portb = _portb equ 6 ; line_number = 33 ; register _portc = _portc equ 7 ; line_number = 35 ; register _pclath = _pclath equ 10 ; line_number = 37 ; register _intcon = _intcon equ 11 ; line_number = 38 ; bind _gie = _intcon@7 _gie___byte equ _intcon _gie___bit equ 7 ; line_number = 39 ; bind _peie = _intcon@6 _peie___byte equ _intcon _peie___bit equ 6 ; line_number = 40 ; bind _t0ie = _intcon@5 _t0ie___byte equ _intcon _t0ie___bit equ 5 ; line_number = 41 ; bind _inte = _intcon@4 _inte___byte equ _intcon _inte___bit equ 4 ; line_number = 42 ; bind _rbie = _intcon@3 _rbie___byte equ _intcon _rbie___bit equ 3 ; line_number = 43 ; bind _t0if = _intcon@2 _t0if___byte equ _intcon _t0if___bit equ 2 ; line_number = 44 ; bind _intf = _intcon@1 _intf___byte equ _intcon _intf___bit equ 1 ; line_number = 45 ; bind _rbf = _intcon@0 _rbf___byte equ _intcon _rbf___bit equ 0 ; line_number = 47 ; register _pir1 = _pir1 equ 12 ; line_number = 48 ; bind _pspif = _pir1@7 _pspif___byte equ _pir1 _pspif___bit equ 7 ; line_number = 49 ; bind _adif = _pir1@6 _adif___byte equ _pir1 _adif___bit equ 6 ; line_number = 50 ; bind _rcif = _pir1@5 _rcif___byte equ _pir1 _rcif___bit equ 5 ; line_number = 51 ; bind _txif = _pir1@4 _txif___byte equ _pir1 _txif___bit equ 4 ; line_number = 52 ; bind _sspif = _pir1@3 _sspif___byte equ _pir1 _sspif___bit equ 3 ; line_number = 53 ; bind _ccpif = _pir1@2 _ccpif___byte equ _pir1 _ccpif___bit equ 2 ; line_number = 54 ; bind _tmr2if = _pir1@1 _tmr2if___byte equ _pir1 _tmr2if___bit equ 1 ; line_number = 55 ; bind _tmr1if = _pir1@0 _tmr1if___byte equ _pir1 _tmr1if___bit equ 0 ; line_number = 57 ; register _pir2 = _pir2 equ 13 ; line_number = 58 ; bind _eeif = _pir2@4 _eeif___byte equ _pir2 _eeif___bit equ 4 ; line_number = 59 ; bind _bclif = _pir2@3 _bclif___byte equ _pir2 _bclif___bit equ 3 ; line_number = 60 ; bind _ccp2if = _pir2@0 _ccp2if___byte equ _pir2 _ccp2if___bit equ 0 ; line_number = 62 ; register _tmr1l = _tmr1l equ 14 ; line_number = 64 ; register _tmr1h = _tmr1h equ 15 ; line_number = 66 ; register _t1con = _t1con equ 16 ; line_number = 67 ; bind _t1ckps1 = _t1con@5 _t1ckps1___byte equ _t1con _t1ckps1___bit equ 5 ; line_number = 68 ; bind _t1ckps0 = _t1con@4 _t1ckps0___byte equ _t1con _t1ckps0___bit equ 4 ; line_number = 69 ; bind _t1oscen = _t1con@3 _t1oscen___byte equ _t1con _t1oscen___bit equ 3 ; line_number = 70 ; bind _t1sync = _t1con@2 _t1sync___byte equ _t1con _t1sync___bit equ 2 ; line_number = 71 ; bind _tmr1cs = _t1con@1 _tmr1cs___byte equ _t1con _tmr1cs___bit equ 1 ; line_number = 72 ; bind _tmr1on = _t1con@0 _tmr1on___byte equ _t1con _tmr1on___bit equ 0 ; line_number = 74 ; register _tmr2 = _tmr2 equ 17 ; line_number = 76 ; register _t2con = _t2con equ 18 ; line_number = 77 ; bind _toutps3 = _t2con@6 _toutps3___byte equ _t2con _toutps3___bit equ 6 ; line_number = 78 ; bind _toutps2 = _t2con@5 _toutps2___byte equ _t2con _toutps2___bit equ 5 ; line_number = 79 ; bind _toutps1 = _t2con@4 _toutps1___byte equ _t2con _toutps1___bit equ 4 ; line_number = 80 ; bind _toutps0 = _t2con@3 _toutps0___byte equ _t2con _toutps0___bit equ 3 ; line_number = 81 ; bind _tmr2on = _t2con@2 _tmr2on___byte equ _t2con _tmr2on___bit equ 2 ; line_number = 82 ; bind _t2ckps1 = _t2con@1 _t2ckps1___byte equ _t2con _t2ckps1___bit equ 1 ; line_number = 83 ; bind _t2ckps0 = _t2con@0 _t2ckps0___byte equ _t2con _t2ckps0___bit equ 0 ; line_number = 85 ; register _sspbuf = _sspbuf equ 19 ; line_number = 87 ; register _sspcon = _sspcon equ 20 ; line_number = 88 ; bind _wcol = _sspcon@7 _wcol___byte equ _sspcon _wcol___bit equ 7 ; line_number = 89 ; bind _sspov = _sspcon@6 _sspov___byte equ _sspcon _sspov___bit equ 6 ; line_number = 90 ; bind _sspen = _sspcon@5 _sspen___byte equ _sspcon _sspen___bit equ 5 ; line_number = 91 ; bind _ckp = _sspcon@4 _ckp___byte equ _sspcon _ckp___bit equ 4 ; line_number = 92 ; bind _sspm3 = _sspcon@3 _sspm3___byte equ _sspcon _sspm3___bit equ 3 ; line_number = 93 ; bind _sspm2 = _sspcon@2 _sspm2___byte equ _sspcon _sspm2___bit equ 2 ; line_number = 94 ; bind _sspm1 = _sspcon@1 _sspm1___byte equ _sspcon _sspm1___bit equ 1 ; line_number = 95 ; bind _sspm0 = _sspcon@0 _sspm0___byte equ _sspcon _sspm0___bit equ 0 ; line_number = 97 ; register _ccpr1l = _ccpr1l equ 21 ; line_number = 99 ; register _ccpr1h = _ccpr1h equ 22 ; line_number = 101 ; register _ccp1con = _ccp1con equ 23 ; line_number = 102 ; bind _ccp1x = _ccp1con@5 _ccp1x___byte equ _ccp1con _ccp1x___bit equ 5 ; line_number = 103 ; bind _ccp1y = _ccp1con@4 _ccp1y___byte equ _ccp1con _ccp1y___bit equ 4 ; line_number = 104 ; bind _ccp1m3 = _ccp1con@3 _ccp1m3___byte equ _ccp1con _ccp1m3___bit equ 3 ; line_number = 105 ; bind _ccp1m2 = _ccp1con@2 _ccp1m2___byte equ _ccp1con _ccp1m2___bit equ 2 ; line_number = 106 ; bind _ccp1m1 = _ccp1con@1 _ccp1m1___byte equ _ccp1con _ccp1m1___bit equ 1 ; line_number = 107 ; bind _ccp1m0 = _ccp1con@0 _ccp1m0___byte equ _ccp1con _ccp1m0___bit equ 0 ; line_number = 109 ; register _rcsta = _rcsta equ 24 ; line_number = 110 ; bind _spen = _rcsta@7 _spen___byte equ _rcsta _spen___bit equ 7 ; line_number = 111 ; bind _rx9 = _rcsta@6 _rx9___byte equ _rcsta _rx9___bit equ 6 ; line_number = 112 ; bind _sren = _rcsta@5 _sren___byte equ _rcsta _sren___bit equ 5 ; line_number = 113 ; bind _cren = _rcsta@4 _cren___byte equ _rcsta _cren___bit equ 4 ; line_number = 114 ; bind _adden = _rcsta@3 _adden___byte equ _rcsta _adden___bit equ 3 ; line_number = 115 ; bind _ferr = _rcsta@2 _ferr___byte equ _rcsta _ferr___bit equ 2 ; line_number = 116 ; bind _oerr = _rcsta@1 _oerr___byte equ _rcsta _oerr___bit equ 1 ; line_number = 117 ; bind _rx9d = _rcsta@0 _rx9d___byte equ _rcsta _rx9d___bit equ 0 ; line_number = 119 ; register _txreg = _txreg equ 25 ; line_number = 121 ; register _rcreg = _rcreg equ 26 ; line_number = 123 ; register _ccpr2l = _ccpr2l equ 27 ; line_number = 125 ; register _ccpr2h = _ccpr2h equ 28 ; line_number = 127 ; register _ccp2con = _ccp2con equ 29 ; line_number = 128 ; bind _ccp2x = _ccp2con@5 _ccp2x___byte equ _ccp2con _ccp2x___bit equ 5 ; line_number = 129 ; bind _ccp2y = _ccp2con@4 _ccp2y___byte equ _ccp2con _ccp2y___bit equ 4 ; line_number = 130 ; bind _ccp2m3 = _ccp2con@3 _ccp2m3___byte equ _ccp2con _ccp2m3___bit equ 3 ; line_number = 131 ; bind _ccp2m2 = _ccp2con@2 _ccp2m2___byte equ _ccp2con _ccp2m2___bit equ 2 ; line_number = 132 ; bind _ccp2m1 = _ccp2con@1 _ccp2m1___byte equ _ccp2con _ccp2m1___bit equ 1 ; line_number = 133 ; bind _ccp2m0 = _ccp2con@0 _ccp2m0___byte equ _ccp2con _ccp2m0___bit equ 0 ; line_number = 135 ; register _adresh = _adresh equ 30 ; line_number = 137 ; register _adcon0 = _adcon0 equ 31 ; line_number = 138 ; bind _adcs1 = _adcon0@7 _adcs1___byte equ _adcon0 _adcs1___bit equ 7 ; line_number = 139 ; bind _adcs0 = _adcon0@6 _adcs0___byte equ _adcon0 _adcs0___bit equ 6 ; line_number = 140 ; bind _chs2 = _adcon0@5 _chs2___byte equ _adcon0 _chs2___bit equ 5 ; line_number = 141 ; bind _chs1 = _adcon0@4 _chs1___byte equ _adcon0 _chs1___bit equ 4 ; line_number = 142 ; bind _chs0 = _adcon0@3 _chs0___byte equ _adcon0 _chs0___bit equ 3 ; line_number = 143 ; bind _go_done = _adcon0@2 _go_done___byte equ _adcon0 _go_done___bit equ 2 ; line_number = 144 ; bind _adon = _adcon0@0 _adon___byte equ _adcon0 _adon___bit equ 0 ; # Bank 1: ; line_number = 148 ; register _option_reg = _option_reg equ 129 ; line_number = 149 ; bind _rbpu = _option_reg@7 _rbpu___byte equ _option_reg _rbpu___bit equ 7 ; line_number = 150 ; bind _intedg = _option_reg@6 _intedg___byte equ _option_reg _intedg___bit equ 6 ; line_number = 151 ; bind _t0cs = _option_reg@5 _t0cs___byte equ _option_reg _t0cs___bit equ 5 ; line_number = 152 ; bind _t0se = _option_reg@4 _t0se___byte equ _option_reg _t0se___bit equ 4 ; line_number = 153 ; bind _psa = _option_reg@3 _psa___byte equ _option_reg _psa___bit equ 3 ; line_number = 154 ; bind _ps2 = _option_reg@2 _ps2___byte equ _option_reg _ps2___bit equ 2 ; line_number = 155 ; bind _ps1 = _option_reg@1 _ps1___byte equ _option_reg _ps1___bit equ 1 ; line_number = 156 ; bind _ps0 = _option_reg@0 _ps0___byte equ _option_reg _ps0___bit equ 0 ; line_number = 158 ; register _trisa = _trisa equ 133 ; line_number = 160 ; register _trisb = _trisb equ 134 ; line_number = 162 ; register _trisc = _trisc equ 135 ; line_number = 164 ; register _pie1 = _pie1 equ 140 ; line_number = 165 ; bind _pspie = _pie1@7 _pspie___byte equ _pie1 _pspie___bit equ 7 ; line_number = 166 ; bind _adie = _pie1@6 _adie___byte equ _pie1 _adie___bit equ 6 ; line_number = 167 ; bind _rcie = _pie1@5 _rcie___byte equ _pie1 _rcie___bit equ 5 ; line_number = 168 ; bind _txie = _pie1@4 _txie___byte equ _pie1 _txie___bit equ 4 ; line_number = 169 ; bind _sspie = _pie1@3 _sspie___byte equ _pie1 _sspie___bit equ 3 ; line_number = 170 ; bind _ccp1ie = _pie1@2 _ccp1ie___byte equ _pie1 _ccp1ie___bit equ 2 ; line_number = 171 ; bind _tmr2ie = _pie1@1 _tmr2ie___byte equ _pie1 _tmr2ie___bit equ 1 ; line_number = 172 ; bind _tmr1ie = _pie1@0 _tmr1ie___byte equ _pie1 _tmr1ie___bit equ 0 ; line_number = 174 ; register _pie2 = _pie2 equ 141 ; line_number = 175 ; bind _eeie = _pie2@4 _eeie___byte equ _pie2 _eeie___bit equ 4 ; line_number = 176 ; bind _bcie = _pie2@3 _bcie___byte equ _pie2 _bcie___bit equ 3 ; line_number = 177 ; bind _ccp2ie = _pie2@0 _ccp2ie___byte equ _pie2 _ccp2ie___bit equ 0 ; line_number = 179 ; register _pcon = _pcon equ 142 ; line_number = 180 ; bind _por = _pcon@1 _por___byte equ _pcon _por___bit equ 1 ; line_number = 181 ; bind _bor = _pcon@0 _bor___byte equ _pcon _bor___bit equ 0 ; line_number = 183 ; register _sspcon2 = _sspcon2 equ 145 ; line_number = 184 ; bind _gcen = _sspcon2@7 _gcen___byte equ _sspcon2 _gcen___bit equ 7 ; line_number = 185 ; bind _ackstat = _sspcon2@6 _ackstat___byte equ _sspcon2 _ackstat___bit equ 6 ; line_number = 186 ; bind _ackdt = _sspcon2@5 _ackdt___byte equ _sspcon2 _ackdt___bit equ 5 ; line_number = 187 ; bind _acken = _sspcon2@4 _acken___byte equ _sspcon2 _acken___bit equ 4 ; line_number = 188 ; bind _rcen = _sspcon2@3 _rcen___byte equ _sspcon2 _rcen___bit equ 3 ; line_number = 189 ; bind _pen = _sspcon2@2 _pen___byte equ _sspcon2 _pen___bit equ 2 ; line_number = 190 ; bind _rsen = _sspcon2@1 _rsen___byte equ _sspcon2 _rsen___bit equ 1 ; line_number = 191 ; bind _sen = _sspcon2@0 _sen___byte equ _sspcon2 _sen___bit equ 0 ; line_number = 193 ; register _pr2 = _pr2 equ 146 ; line_number = 195 ; register _sspadd = _sspadd equ 147 ; line_number = 197 ; register _sspstat = _sspstat equ 148 ; line_number = 198 ; bind _smp = _sspstat@7 _smp___byte equ _sspstat _smp___bit equ 7 ; line_number = 199 ; bind _cke = _sspstat@6 _cke___byte equ _sspstat _cke___bit equ 6 ; line_number = 200 ; bind _da = _sspstat@5 _da___byte equ _sspstat _da___bit equ 5 ; line_number = 201 ; bind _p = _sspstat@4 _p___byte equ _sspstat _p___bit equ 4 ; line_number = 202 ; bind _s = _sspstat@3 _s___byte equ _sspstat _s___bit equ 3 ; line_number = 203 ; bind _rw = _sspstat@2 _rw___byte equ _sspstat _rw___bit equ 2 ; line_number = 204 ; bind _ua = _sspstat@1 _ua___byte equ _sspstat _ua___bit equ 1 ; line_number = 205 ; bind _bf = _sspstat@0 _bf___byte equ _sspstat _bf___bit equ 0 ; line_number = 207 ; register _txsta = _txsta equ 152 ; line_number = 208 ; bind _csrc = _txsta@7 _csrc___byte equ _txsta _csrc___bit equ 7 ; line_number = 209 ; bind _tx9 = _txsta@6 _tx9___byte equ _txsta _tx9___bit equ 6 ; line_number = 210 ; bind _txen = _txsta@5 _txen___byte equ _txsta _txen___bit equ 5 ; line_number = 211 ; bind _sync = _txsta@4 _sync___byte equ _txsta _sync___bit equ 4 ; line_number = 212 ; bind _brgh = _txsta@2 _brgh___byte equ _txsta _brgh___bit equ 2 ; line_number = 213 ; bind _trmt = _txsta@1 _trmt___byte equ _txsta _trmt___bit equ 1 ; line_number = 214 ; bind _tx9d = _txsta@0 _tx9d___byte equ _txsta _tx9d___bit equ 0 ; line_number = 216 ; register _spbrg = _spbrg equ 153 ; line_number = 218 ; register _adresl = _adresl equ 158 ; line_number = 220 ; register _adcon1 = _adcon1 equ 159 ; line_number = 221 ; bind _adfm = _adcon1@7 _adfm___byte equ _adcon1 _adfm___bit equ 7 ; line_number = 222 ; bind _pcfg3 = _adcon1@3 _pcfg3___byte equ _adcon1 _pcfg3___bit equ 3 ; line_number = 223 ; bind _pcfg2 = _adcon1@2 _pcfg2___byte equ _adcon1 _pcfg2___bit equ 2 ; line_number = 224 ; bind _pcfg1 = _adcon1@1 _pcfg1___byte equ _adcon1 _pcfg1___bit equ 1 ; line_number = 225 ; bind _pcfg0 = _adcon1@0 _pcfg0___byte equ _adcon1 _pcfg0___bit equ 0 ; # Bank 2: ; line_number = 229 ; register _eedata = _eedata equ 268 ; line_number = 231 ; register _eeadr = _eeadr equ 269 ; line_number = 233 ; register _eedath = _eedath equ 270 ; line_number = 235 ; register _eeadrh = _eeadrh equ 271 ; # Bank 3: ; line_number = 239 ; register _eecon1 = _eecon1 equ 396 ; line_number = 240 ; bind _eepgd = _eecon1@7 _eepgd___byte equ _eecon1 _eepgd___bit equ 7 ; line_number = 241 ; bind _wrerr = _eecon1@3 _wrerr___byte equ _eecon1 _wrerr___bit equ 3 ; line_number = 242 ; bind _wren = _eecon1@2 _wren___byte equ _eecon1 _wren___bit equ 2 ; line_number = 243 ; bind _wr = _eecon1@1 _wr___byte equ _eecon1 _wr___bit equ 1 ; line_number = 244 ; bind _rd = _eecon1@0 _rd___byte equ _eecon1 _rd___bit equ 0 ; line_number = 246 ; register _eecon2 = _eecon2 equ 397 ; buffer = '_pic16f876' ; line_number = 266 ; library _pic16f87x exited ; buffer = 'picbrain11' ; line_number = 9 ; library _pic16f876 exited ; line_number = 10 ; 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 = 'picbrain11' ; line_number = 10 ; library clock20mhz exited ; # Port and pin definitions: ; line_number = 16 ; constant a_reg = 0 a_reg equ 0 ; line_number = 17 ; constant b_reg = 1 b_reg equ 1 ; line_number = 18 ; constant c_reg = 2 c_reg equ 2 ; line_number = 20 ; constant n1 = 0 n1 equ 0 ; line_number = 21 ; constant n1_reg = b_reg n1_reg equ 1 ; line_number = 23 ; constant n2 = 1 n2 equ 1 ; line_number = 24 ; constant n2_reg = a_reg n2_reg equ 0 ; line_number = 26 ; constant n3 = 2 n3 equ 2 ; line_number = 27 ; constant n3_reg = b_reg n3_reg equ 1 ; line_number = 29 ; constant n4 = 3 n4 equ 3 ; line_number = 30 ; constant n4_reg = a_reg n4_reg equ 0 ; line_number = 32 ; constant n5 = 4 n5 equ 4 ; line_number = 33 ; constant n5_reg = b_reg n5_reg equ 1 ; line_number = 35 ; constant n6 = 5 n6 equ 5 ; line_number = 36 ; constant n6_reg = a_reg n6_reg equ 0 ; line_number = 38 ; constant n7 = 6 n7 equ 6 ; line_number = 39 ; constant n7_reg = b_reg n7_reg equ 1 ; line_number = 41 ; constant n8 = 7 n8 equ 7 ; line_number = 42 ; constant n8_reg = c_reg n8_reg equ 2 ; line_number = 44 ; constant n9 = 8 n9 equ 8 ; line_number = 45 ; constant n9_reg = c_reg n9_reg equ 2 ; line_number = 47 ; constant n10 = 9 n10 equ 9 ; line_number = 48 ; constant n10_reg = c_reg n10_reg equ 2 ; line_number = 50 ; constant n11 = 10 n11 equ 10 ; line_number = 51 ; constant n11_reg = c_reg n11_reg equ 2 ; line_number = 53 ; constant n_none = 11 n_none equ 11 ; # Port definitions: ; line_number = 57 ; package pdip ; line_number = 58 ; pin 1 = mclr ; line_number = 59 ; pin 2 = ra0_in, name = n2in, bit = n2in_bit, mask = n2in_mask n2in___byte equ _porta n2in___bit equ 0 n2in_bit equ 0 n2in_mask equ 1 ; line_number = 60 ; pin 3 = ra1_out, name = n2out, bit = n2out_bit, mask = n2out_mask n2out___byte equ _porta n2out___bit equ 1 n2out_bit equ 1 n2out_mask equ 2 ; line_number = 61 ; pin 4 = ra2_in, name = n4in, bit = n4in_bit, mask = n4in_mask n4in___byte equ _porta n4in___bit equ 2 n4in_bit equ 2 n4in_mask equ 4 ; line_number = 62 ; pin 5 = ra3_out, name = n4out, bit = n4out_bit, mask = n4out_mask n4out___byte equ _porta n4out___bit equ 3 n4out_bit equ 3 n4out_mask equ 8 ; line_number = 63 ; pin 6 = ra4_in, name = n6in, bit = n6in_bit, mask = n6in_mask n6in___byte equ _porta n6in___bit equ 4 n6in_bit equ 4 n6in_mask equ 16 ; line_number = 64 ; pin 7 = ra5_out, name = n6out, bit = n6_out_bit, mask = n6out_mask n6out___byte equ _porta n6out___bit equ 5 n6_out_bit equ 5 n6out_mask equ 32 ; line_number = 65 ; pin 8 = ground ; line_number = 66 ; pin 9 = osc1 ; line_number = 67 ; pin 10 = osc2 ; line_number = 68 ; pin 11 = rc0_in, name = n9in, bit = n9in_bit, mask = n9in_mask n9in___byte equ _portc n9in___bit equ 0 n9in_bit equ 0 n9in_mask equ 1 ; line_number = 69 ; pin 12 = rc1_out, name = n9out, bit = n9out_bit, mask = n9out_mask n9out___byte equ _portc n9out___bit equ 1 n9out_bit equ 1 n9out_mask equ 2 ; line_number = 70 ; pin 13 = rc2_in, name = n8in, bit = n8in_bit, mask = n8in_mask n8in___byte equ _portc n8in___bit equ 2 n8in_bit equ 2 n8in_mask equ 4 ; line_number = 71 ; pin 14 = rc3_in, name = n10in, bit = n10in_bit, mask = n10in_mask n10in___byte equ _portc n10in___bit equ 3 n10in_bit equ 3 n10in_mask equ 8 ; line_number = 72 ; pin 15 = rc4_out, name = n10out, bit = n10out_bit, mask = n10out_mask n10out___byte equ _portc n10out___bit equ 4 n10out_bit equ 4 n10out_mask equ 16 ; line_number = 73 ; pin 16 = rc5_out, name = n8out, bit = n8out_bit, mask = n8out_mask n8out___byte equ _portc n8out___bit equ 5 n8out_bit equ 5 n8out_mask equ 32 ; line_number = 74 ; pin 17 = rc6_out, name = n11out, bit = n11out_bit, mask = n11out_mask n11out___byte equ _portc n11out___bit equ 6 n11out_bit equ 6 n11out_mask equ 64 ; line_number = 75 ; pin 18 = rc7_in, name = n11in, bit = n11in_bit, mask = n11in_mask n11in___byte equ _portc n11in___bit equ 7 n11in_bit equ 7 n11in_mask equ 128 ; line_number = 76 ; pin 19 = ground2 ; line_number = 77 ; pin 20 = power_supply ; line_number = 78 ; pin 21 = rb0_in, name = n7in, bit = n7in_bit, mask = n7in_mask n7in___byte equ _portb n7in___bit equ 0 n7in_bit equ 0 n7in_mask equ 1 ; line_number = 79 ; pin 22 = rb1_out, name = n7out, bit = n7_out_bit, mask = n7out_mask n7out___byte equ _portb n7out___bit equ 1 n7_out_bit equ 1 n7out_mask equ 2 ; line_number = 80 ; pin 23 = rb2_in, name = n5in, bit = n5in_bit, mask = n5in_mask n5in___byte equ _portb n5in___bit equ 2 n5in_bit equ 2 n5in_mask equ 4 ; line_number = 81 ; pin 24 = rb3_out, name = n5out, bit = n5out_bit, mask = n5out_mask n5out___byte equ _portb n5out___bit equ 3 n5out_bit equ 3 n5out_mask equ 8 ; line_number = 82 ; pin 25 = rb4_in, name = n3in, bit = n3in_bit, mask = n3in_mask n3in___byte equ _portb n3in___bit equ 4 n3in_bit equ 4 n3in_mask equ 16 ; line_number = 83 ; pin 26 = rb5_out, name = n3out, bit = n3out_bit, mask = n3out_mask n3out___byte equ _portb n3out___bit equ 5 n3out_bit equ 5 n3out_mask equ 32 ; line_number = 84 ; pin 27 = rb6_in, name = n1in, bit = n1in_bit, mask = n1in_mask n1in___byte equ _portb n1in___bit equ 6 n1in_bit equ 6 n1in_mask equ 64 ; line_number = 85 ; pin 28 = rb7_out, name = n1out, bit = n1out_bit, mask = n1out_mask n1out___byte equ _portb n1out___bit equ 7 n1out_bit equ 7 n1out_mask equ 128 ; # The tether is expected on connector N1: ; #constant tether_socket = n1 ; line_number = 89 ; constant tether_socket = n1 tether_socket equ 0 ; # Some general constants: ; line_number = 92 ; constant ascii_mask = 0x7f ascii_mask equ 127 ; line_number = 93 ; constant tab = 8 tab equ 8 ; line_number = 94 ; constant line_feed = 10 line_feed equ 10 ; line_number = 95 ; constant carriage_return = 13 carriage_return equ 13 ; line_number = 96 ; constant space = 32 space equ 32 ; line_number = 97 ; constant register_mask = 0x7f register_mask equ 127 ; # Stome timing constants: ; line_number = 100 ; constant baud_rate = 2400 baud_rate equ 2400 ; line_number = 101 ; constant instructions_per_bit = instruction_rate / baud_rate instructions_per_bit equ 2083 ; line_number = 102 ; constant delays_per_bit = 3 delays_per_bit equ 3 ; line_number = 103 ; constant instructions_per_delay = instructions_per_bit / delays_per_bit instructions_per_delay equ 694 ; line_number = 104 ; constant extra_delay_instructions = 8 extra_delay_instructions equ 8 ; line_number = 105 ; constant extra_bit_instructions = extra_delay_instructions * delays_per_bit extra_bit_instructions equ 24 ; line_number = 106 ; constant delay_instructions = instructions_per_delay - extra_delay_instructions delay_instructions equ 686 ; # The null pulse that comes back from a clock pulse command is supposed to be ; # exactly 9 bits long. 9 bits at 2400 baud is 9/2400 = 3.75mS. The number ; # iterations through the loop is 3.75mS / (number of instructions per iteration.) ; line_number = 111 ; constant nine_bits_instructions = (clock_rate * 9) / (4 * baud_rate) nine_bits_instructions equ 18750 ; line_number = 112 ; constant instructions_per_iteration = 13 instructions_per_iteration equ 13 ; line_number = 113 ; constant iterations_for_nine_bits = nine_bits_instructions / instructions_per_iteration iterations_for_nine_bits equ 1442 ; line_number = 114 ; constant iterations_high = iterations_for_nine_bits / 256 iterations_high equ 5 ; line_number = 115 ; constant iterations_low = iterations_for_nine_bits - (iterations_high * 256) iterations_low equ 162 ; line_number = 117 ; origin 0 org 0 ; line_number = 121 ; procedure start start: ; arguments_none ; line_number = 123 ; returns_nothing ; # This procedure will transfer control to the boot loader {main}. ; before procedure statements delay=non-uniform, bit states=(data:01=>01 code:00=>00) ; line_number = 127 ; call main() bsf __cb0___byte, __cb0___bit bsf __cb1___byte, __cb1___bit bcf __rp0___byte, __rp0___bit call main ; delay after procedure statements=non-uniform bsf __rp0___byte, __rp0___bit ; Implied return bcf __cb0___byte, __cb0___bit bcf __cb1___byte, __cb1___bit retlw 0 ; line_number = 130 ; constant program_origin = 8 program_origin equ 8 ; line_number = 131 ; origin program_origin org 8 ; line_number = 133 ; procedure program program: ; arguments_none ; line_number = 135 ; returns_nothing ; # Dummy program that does nothing: ; line_number = 139 ; local index byte program__index equ globals___1 ; before procedure statements delay=non-uniform, bit states=(data:01=>01 code:00=>00) ; line_number = 141 ; index := 1 movlw 1 movwf program__index ; line_number = 142 ; loop_exactly message.size start program__1 equ globals___1+1 movlw 33 movwf program__1 program__2: ; line_number = 143 ; call put_character(message[index]) movf program__index,w call message bsf __cb0___byte, __cb0___bit bsf __cb1___byte, __cb1___bit bcf __rp0___byte, __rp0___bit call put_character ; line_number = 144 ; index := index + 1 bsf __rp0___byte, __rp0___bit incf program__index,f ; line_number = 142 ; loop_exactly message.size wrap-up decfsz program__1,f bcf __cb0___byte, __cb0___bit bcf __cb1___byte, __cb1___bit goto program__2 ; line_number = 142 ; loop_exactly message.size done ; line_number = 146 ; call main() bsf __cb0___byte, __cb0___bit bsf __cb1___byte, __cb1___bit bcf __rp0___byte, __rp0___bit call main ; delay after procedure statements=non-uniform bsf __rp0___byte, __rp0___bit ; Implied return bcf __cb0___byte, __cb0___bit bcf __cb1___byte, __cb1___bit retlw 0 ; line_number = 149 ; string message = "You need to download a program!\cr,lf\" start ; message = 'You need to download a program!\13,10\' message: ; Temporarily save index into FSR movwf __fsr ; Initialize PCLATH to point to this code page movlw message___base>>8 movwf __pclath ; Restore index from FSR movf __fsr,w addlw message___base ; Index to the correct return value movwf __pcl ; page_group 33 message___base: retlw 89 retlw 111 retlw 117 retlw 32 retlw 110 retlw 101 retlw 101 retlw 100 retlw 32 retlw 116 retlw 111 retlw 32 retlw 100 retlw 111 retlw 119 retlw 110 retlw 108 retlw 111 retlw 97 retlw 100 retlw 32 retlw 97 retlw 32 retlw 112 retlw 114 retlw 111 retlw 103 retlw 114 retlw 97 retlw 109 retlw 33 retlw 13 retlw 10 ; line_number = 149 ; string message = "You need to download a program!\cr,lf\" start ; line_number = 152 ; constant buffer_size = 8 buffer_size equ 8 ; line_number = 153 ; global buffer_highs[buffer_size] array[byte] buffer_highs equ globals___2 ; line_number = 154 ; global buffer_lows[buffer_size] array[byte] buffer_lows equ globals___2+8 ; line_number = 156 ; constant boot_loader_origin = 0x1b00 boot_loader_origin equ 6912 ; line_number = 157 ; constant boot_loader_origin_high = boot_loader_origin >> 8 boot_loader_origin_high equ 27 ; line_number = 158 ; origin boot_loader_origin ; Code bank 1; Start address: 2048; End address: 4095 org 2048 ; Code bank 2; Start address: 4096; End address: 6143 org 4096 ; Code bank 3; Start address: 6144; End address: 8191 org 6144 org 6912 ; line_number = 161 ; register_array bank01[256] = 0 bank01 equ 0 ; line_number = 162 ; register_array bank23[256] = 0x100 bank23 equ 256 ; line_number = 163 ; register_array ports[3] = 5 ports equ 5 ; line_number = 165 ; constant id_reset = 0xfd id_reset equ 253 ; line_number = 166 ; constant id_next = 0xfc id_next equ 252 ; # Global variables: ; # In general, I don't like gobal error registers, but for this ; # application, I think a global one works best: ; line_number = 172 ; global ok bit ok___byte equ globals___0+79 ok___bit equ 0 ; line_number = 173 ; global have_carriage_return bit have_carriage_return___byte equ globals___0+79 have_carriage_return___bit equ 1 ; # I/O registers: ; line_number = 176 ; global in_mask byte in_mask equ globals___0 ; line_number = 177 ; global in_out_register byte in_out_register equ globals___0+1 ; line_number = 178 ; global out_mask byte out_mask equ globals___0+2 ; line_number = 179 ; global receiving bit receiving___byte equ globals___0+79 receiving___bit equ 2 ; line_number = 181 ; global sleep_count byte sleep_count equ globals___0+3 ; line_number = 183 ; procedure main main: ; Initialize some registers clrf _adcon0 movlw 7 bsf __rp0___byte, __rp0___bit movwf _adcon1 movlw 21 movwf _trisa movlw 85 movwf _trisb movlw 141 movwf _trisc ; arguments_none ; line_number = 185 ; returns_nothing ; line_number = 187 ; local address_high byte main__address_high equ globals___0+4 ; line_number = 188 ; local address_low byte main__address_low equ globals___0+5 ; line_number = 189 ; local block_index byte main__block_index equ globals___0+6 ; line_number = 190 ; local buffer_index byte main__buffer_index equ globals___0+7 ; line_number = 191 ; local buffer_size byte main__buffer_size equ globals___0+8 ; line_number = 192 ; local byte byte main__byte equ globals___0+9 ; line_number = 193 ; local check_sum byte main__check_sum equ globals___0+10 ; line_number = 194 ; local chr byte main__chr equ globals___0+11 ; line_number = 195 ; local command byte main__command equ globals___0+12 ; line_number = 196 ; local count byte main__count equ globals___0+13 ; line_number = 197 ; local errors byte main__errors equ globals___0+14 ; line_number = 198 ; local error_high byte main__error_high equ globals___0+15 ; line_number = 199 ; local error_low byte main__error_low equ globals___0+16 ; line_number = 200 ; local index byte main__index equ globals___0+17 ; line_number = 201 ; local length byte main__length equ globals___0+18 ; line_number = 202 ; local more bit main__more___byte equ globals___0+79 main__more___bit equ 3 ; line_number = 203 ; local return1 byte main__return1 equ globals___0+19 ; line_number = 204 ; local return2 byte main__return2 equ globals___0+20 ; line_number = 205 ; local socket byte main__socket equ globals___0+21 ; line_number = 206 ; local type byte main__type equ globals___0+22 ; # Turn of general interrupts: ; before procedure statements delay=non-uniform, bit states=(data:00=>01 code:11=>11) ; line_number = 209 ; _gie := 0 bcf _gie___byte, _gie___bit ; # Initilize serial port: ; # Do Baud Rate selection and asynch. serial port enable: ; # Prescaler = low: ; line_number = 215 ; _brgh := 1 bsf _brgh___byte, _brgh___bit ; # Baud rate = 19200 Baud: ; line_number = 217 ; _spbrg := 64 movlw 64 movwf _spbrg ; # Asynchronous mode: ; line_number = 219 ; _sync := 0 bcf _sync___byte, _sync___bit ; # Serial port enable: ; line_number = 221 ; _spen := 1 bcf __rp0___byte, __rp0___bit bsf _spen___byte, _spen___bit ; line_number = 222 ; _txif := 0 bcf _txif___byte, _txif___bit ; # Enable the transmitter: ; # 8-bit mode: ; line_number = 226 ; _tx9 := 0 bsf __rp0___byte, __rp0___bit bcf _tx9___byte, _tx9___bit ; # Enable transmitter: ; line_number = 228 ; _txen := 1 bsf _txen___byte, _txen___bit ; # Enable the receiver: ; # 8-bit mode: ; line_number = 232 ; _rx9 := 0 bcf __rp0___byte, __rp0___bit bcf _rx9___byte, _rx9___bit ; # Disable address: ; line_number = 234 ; _adden := 0 bcf _adden___byte, _adden___bit ; # Continuous receive enable: ; line_number = 236 ; _cren := 1 bsf _cren___byte, _cren___bit ; # Serial receive enable: ; line_number = 238 ; _sren := 1 bsf _sren___byte, _sren___bit ; # Initialize all of the serial outs: ; line_number = 241 ; n1out := 1 bsf n1out___byte, n1out___bit ; line_number = 242 ; n2out := 1 bsf n2out___byte, n2out___bit ; line_number = 243 ; n3out := 1 bsf n3out___byte, n3out___bit ; line_number = 244 ; n4out := 1 bsf n4out___byte, n4out___bit ; line_number = 245 ; n5out := 1 bsf n5out___byte, n5out___bit ; line_number = 246 ; n6out := 1 bsf n6out___byte, n6out___bit ; line_number = 247 ; n7out := 1 bsf n7out___byte, n7out___bit ; line_number = 248 ; n8out := 1 bsf n8out___byte, n8out___bit ; line_number = 249 ; n9out := 1 bsf n9out___byte, n9out___bit ; line_number = 250 ; n10out := 1 bsf n10out___byte, n10out___bit ; #call put_character('H') ; #call put_character('i') ; #call put_character('!') ; #call put_character('\r\') ; #call put_character('\n\') ; # Print out a hello message: ; line_number = 259 ; index := 0 movlw 0 movwf main__index ; line_number = 260 ; while index < hello.size start main__1: movlw 13 subwf main__index,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto main__2 ; line_number = 261 ; call put_character(hello[index]) movf main__index,w call hello call put_character ; line_number = 262 ; index := index + 1 incf main__index,f goto main__1 main__2: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 260 ; while index < hello.size done ; line_number = 264 ; if seconds_sleep(60) start movlw 60 call seconds_sleep ; =>bit_code_emit@symbol(): sym=seconds_sleep__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss seconds_sleep__0return___byte, seconds_sleep__0return___bit goto main__3 ; line_number = 265 ; call put_crlf() call put_crlf ; line_number = 267 ; call execute() call execute ; Recombine size1 = 0 || size2 = 0 main__3: ; <=bit_code_emit@symbol; sym=seconds_sleep__0return (data:00=>00 code:11=>11) ; line_number = 264 ; if seconds_sleep(60) done ; #FIXME: What is this? ; #call put_byte(0x11, n10) ; #call put_byte(0xa0, n10) ; line_number = 273 ; socket := n1 clrf main__socket ; line_number = 274 ; errors := 0 movlw 0 movwf main__errors ; # Command loop: ; #call put_crlf() ; line_number = 278 ; loop_forever start main__4: ; # Output a prompt: ; line_number = 280 ; call put_character('>') movlw 62 call put_character ; # Go fetch a command character: ; line_number = 283 ; have_carriage_return := 0 bcf have_carriage_return___byte, have_carriage_return___bit ; line_number = 284 ; ok := 1 bsf ok___byte, ok___bit ; line_number = 285 ; command := get_character() call get_character movwf main__command ; # Dispatch on command character: ; line_number = 288 ; if command = 'C' start ; Left minus Right movlw 189 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__66 ; line_number = 289 ; byte := get_hex_byte() call get_hex_byte movwf main__byte ; line_number = 290 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__65 ; line_number = 291 ; call clock_adjust(byte, socket) movf main__byte,w movwf clock_adjust__adjust movf main__socket,w call clock_adjust ; Recombine size1 = 0 || size2 = 0 main__65: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 290 ; if get_carriage_return() done goto main__67 main__66: ; line_number = 292 ; Left minus Right movlw 187 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__63 ; # Examine data memory command: ; line_number = 294 ; address_high := get_hex_byte() call get_hex_byte movwf main__address_high ; line_number = 295 ; address_low := get_hex_byte() call get_hex_byte movwf main__address_low ; line_number = 296 ; count := get_hex_byte() call get_hex_byte movwf main__count ; line_number = 297 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__62 ; line_number = 298 ; loop_exactly count start main__58 equ globals___0+69 movf main__count,w movwf main__58 main__59: ; line_number = 299 ; if address_high = 0 start ; Left minus Right movf main__address_high,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__60 ; line_number = 300 ; byte := bank01[address_low] movf main__address_low,w addlw bank01 movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w movwf main__byte goto main__61 main__60: ; line_number = 302 ; byte := bank23[address_low] movf main__address_low,w addlw bank23 movwf __fsr bsf __irp___byte, __irp___bit movf __indf,w movwf main__byte main__61: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 299 ; if address_high = 0 done ; line_number = 303 ; call put_hex_byte(byte) movf main__byte,w call put_hex_byte ; line_number = 304 ; call put_space() call put_space ; line_number = 305 ; address_low := address_low + 1 incf main__address_low,f ; line_number = 306 ; if _z start ; =>bit_code_emit@symbol(): sym=_z ; CASE: True.size=1 False.size=0 btfsc _z___byte, _z___bit ; line_number = 307 ; address_high := address_high + 1 incf main__address_high,f ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=_z (data:00=>00 code:11=>11) ; line_number = 306 ; if _z done ; line_number = 298 ; loop_exactly count wrap-up decfsz main__58,f goto main__59 ; line_number = 298 ; loop_exactly count done ; line_number = 308 ; call put_crlf() call put_crlf ; Recombine size1 = 0 || size2 = 0 main__62: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 297 ; if get_carriage_return() done goto main__64 main__63: ; line_number = 309 ; Left minus Right movlw 185 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=1 false.size>1; no GOTO btfss __z___byte, __z___bit goto main__56 ; # Goto command: ; line_number = 311 ; call goto_command() call goto_command goto main__57 main__56: ; line_number = 312 ; Left minus Right movlw 183 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__54 ; line_number = 313 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__53 ; line_number = 314 ; call put_byte(id_reset, socket) movlw 253 movwf put_byte__character movf main__socket,w call put_byte ; line_number = 315 ; call id8(socket) movf main__socket,w call id8 ; line_number = 316 ; call id8(socket) movf main__socket,w call id8 ; line_number = 317 ; call id8(socket) movf main__socket,w call id8 ; line_number = 318 ; call id_string(socket) movf main__socket,w call id_string ; line_number = 319 ; call id_string(socket) movf main__socket,w call id_string ; Recombine size1 = 0 || size2 = 0 main__53: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 313 ; if get_carriage_return() done goto main__55 main__54: ; line_number = 320 ; Left minus Right movlw 181 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__51 ; line_number = 321 ; byte := get_hex_nibble() call get_hex_nibble movwf main__byte ; line_number = 322 ; if byte = 0 || byte > 10 start ; Left minus Right movf main__byte,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=1 false.size>1; true=GOTO btfsc __z___byte, __z___bit goto main__49 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 10 subwf main__byte,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: True.size=1 False.size=0 btfsc __c___byte, __c___bit main__49: ; line_number = 323 ; ok := 0 bcf ok___byte, ok___bit ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 322 ; if byte = 0 || byte > 10 done ; line_number = 324 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__50 ; line_number = 325 ; socket := byte - 1 decf main__byte,w movwf main__socket ; Recombine size1 = 0 || size2 = 0 main__50: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 324 ; if get_carriage_return() done goto main__52 main__51: ; line_number = 326 ; Left minus Right movlw 176 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__47 ; # Print a page of memory: ; line_number = 328 ; _eeadrh := get_hex_byte() call get_hex_byte bsf __rp1___byte, __rp1___bit movwf _eeadrh ; line_number = 329 ; if get_carriage_return() start bcf __rp1___byte, __rp1___bit call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__46 ; line_number = 330 ; index := 0 movlw 0 movwf main__index ; line_number = 331 ; more := 1 bsf main__more___byte, main__more___bit ; line_number = 332 ; while more start main__43: ; =>bit_code_emit@symbol(): sym=main__more ; CASE: true_code.size = 0 && false_code.size > 1 btfss main__more___byte, main__more___bit goto main__45 ; line_number = 333 ; if index & 7 = 0 start ; Left minus Right movlw 7 andwf main__index,w ; =>bit_code_emit@symbol(): sym=__z bsf __rp1___byte, __rp1___bit ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto main__44 ; # Display the address: ; line_number = 335 ; call put_hex_byte(_eeadrh) movf _eeadrh,w bcf __rp1___byte, __rp1___bit call put_hex_byte ; line_number = 336 ; call put_hex_byte(index) movf main__index,w call put_hex_byte ; line_number = 337 ; call put_character(':') movlw 58 call put_character ; Recombine size1 = 0 || size2 = 0 main__44: ; <=bit_code_emit@symbol; sym=__z (data:00=>?0 code:11=>11) ; line_number = 333 ; if index & 7 = 0 done ; # Read the word: ; line_number = 340 ; _eeadr := index bcf __rp1___byte, __rp1___bit movf main__index,w bsf __rp1___byte, __rp1___bit movwf _eeadr ; line_number = 341 ; _eepgd := 1 bsf __rp0___byte, __rp0___bit bsf _eepgd___byte, _eepgd___bit ; line_number = 342 ; _rd := 1 bsf _rd___byte, _rd___bit ; # The next two instructions are *ignored*: ; line_number = 344 ; assemble ; line_number = 345 nop ; line_number = 346 nop ; # Display the word: ; line_number = 349 ; call put_space() bcf __rp0___byte, __rp0___bit bcf __rp1___byte, __rp1___bit call put_space ; line_number = 350 ; call put_hex_byte(_eedath) bsf __rp1___byte, __rp1___bit movf _eedath,w bcf __rp1___byte, __rp1___bit call put_hex_byte ; line_number = 351 ; call put_hex_byte(_eedata) bsf __rp1___byte, __rp1___bit movf _eedata,w bcf __rp1___byte, __rp1___bit call put_hex_byte ; # Bump to next address in page: ; line_number = 354 ; index := index + 1 incf main__index,f ; line_number = 355 ; if _z start ; =>bit_code_emit@symbol(): sym=_z ; CASE: True.size=1 False.size=0 btfsc _z___byte, _z___bit ; line_number = 356 ; more := 0 bcf main__more___byte, main__more___bit ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=_z (data:00=>00 code:11=>11) ; line_number = 355 ; if _z done ; line_number = 357 ; if index & 7 = 0 start ; Left minus Right movlw 7 andwf main__index,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: True.size=1 False.size=0 btfsc __z___byte, __z___bit ; line_number = 358 ; call put_crlf() call put_crlf ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 357 ; if index & 7 = 0 done goto main__43 ; Recombine size1 = 0 || size2 = 0 main__45: ; <=bit_code_emit@symbol; sym=main__more (data:00=>00 code:11=>11) ; line_number = 332 ; while more done ; Recombine size1 = 0 || size2 = 0 main__46: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 329 ; if get_carriage_return() done goto main__48 main__47: ; line_number = 359 ; Left minus Right movlw 174 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__41 ; # Send a command to a RoboBrick: ; line_number = 361 ; byte := get_hex_byte() call get_hex_byte movwf main__byte ; line_number = 362 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__40 ; line_number = 363 ; call put_byte(byte, socket) movf main__byte,w movwf put_byte__character movf main__socket,w call put_byte ; line_number = 364 ; return1 := get_byte(socket) movf main__socket,w call get_byte movwf main__return1 ; line_number = 365 ; return2 := get_byte(socket) movf main__socket,w call get_byte movwf main__return2 ; line_number = 366 ; call put_hex_byte(return1) movf main__return1,w call put_hex_byte ; line_number = 367 ; call put_space() call put_space ; line_number = 368 ; call put_hex_byte(return2) movf main__return2,w call put_hex_byte ; line_number = 369 ; call put_crlf() call put_crlf ; Recombine size1 = 0 || size2 = 0 main__40: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 362 ; if get_carriage_return() done goto main__42 main__41: ; line_number = 370 ; Left minus Right movlw 173 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__38 ; # Store data memory command: ; line_number = 372 ; address_high := get_hex_byte() call get_hex_byte movwf main__address_high ; line_number = 373 ; address_low := get_hex_byte() call get_hex_byte movwf main__address_low ; line_number = 374 ; byte := get_hex_byte() call get_hex_byte movwf main__byte ; line_number = 375 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__37 ; line_number = 376 ; if address_high = 0 start ; Left minus Right movf main__address_high,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__35 ; line_number = 377 ; bank01[address_low] := byte ; index_fsr_first movf main__address_low,w addlw bank01 movwf __fsr bcf __irp___byte, __irp___bit movf main__byte,w movwf __indf goto main__36 main__35: ; line_number = 379 ; bank23[address_low] := byte ; index_fsr_first movf main__address_low,w addlw bank23 movwf __fsr bsf __irp___byte, __irp___bit movf main__byte,w movwf __indf main__36: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 376 ; if address_high = 0 done ; Recombine size1 = 0 || size2 = 0 main__37: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 375 ; if get_carriage_return() done goto main__39 main__38: ; line_number = 380 ; Left minus Right movlw 172 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__33 ; line_number = 381 ; loop_forever start main__32: ; line_number = 382 ; call put_byte('U', n2) movlw 85 movwf put_byte__character movlw 1 call put_byte ; line_number = 381 ; loop_forever wrap-up goto main__32 ; line_number = 381 ; loop_forever done goto main__34 main__33: ; line_number = 383 ; Left minus Right movlw 170 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__30 ; line_number = 384 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__29 ; line_number = 385 ; call put_character('1') movlw 49 call put_character ; line_number = 386 ; call put_character('.') movlw 46 call put_character ; line_number = 387 ; call put_character('0') movlw 48 call put_character ; line_number = 388 ; call put_crlf() call put_crlf ; Recombine size1 = 0 || size2 = 0 main__29: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 384 ; if get_carriage_return() done goto main__31 main__30: ; line_number = 389 ; Left minus Right movlw 168 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__27 ; line_number = 390 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: True.size=1 False.size=0 btfsc get_carriage_return__0return___byte, get_carriage_return__0return___bit ; line_number = 391 ; call execute() call execute ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 390 ; if get_carriage_return() done goto main__28 main__27: ; line_number = 392 ; Left minus Right movlw 198 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__25 ; # Hex command: ; line_number = 394 ; check_sum := 0 movlw 0 movwf main__check_sum ; line_number = 395 ; length := get_hex_byte() call get_hex_byte movwf main__length ; line_number = 396 ; check_sum := check_sum + length movf main__length,w addwf main__check_sum,f ; line_number = 397 ; address_high := get_hex_byte() call get_hex_byte movwf main__address_high ; line_number = 398 ; check_sum := check_sum + address_high movf main__address_high,w addwf main__check_sum,f ; line_number = 399 ; address_low := get_hex_byte() call get_hex_byte movwf main__address_low ; line_number = 400 ; check_sum := check_sum + address_low movf main__address_low,w addwf main__check_sum,f ; line_number = 401 ; type := get_hex_byte() call get_hex_byte movwf main__type ; line_number = 402 ; check_sum := check_sum + type movf main__type,w addwf main__check_sum,f ; line_number = 403 ; index := 0 movlw 0 movwf main__index ; line_number = 404 ; buffer_size := length >> 1 rrf main__length,w movwf main__buffer_size bcf main__buffer_size, 7 ; line_number = 405 ; while index < buffer_size start main__6: movf main__buffer_size,w subwf main__index,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto main__7 ; line_number = 406 ; byte := get_hex_byte() call get_hex_byte movwf main__byte ; line_number = 407 ; check_sum := check_sum + byte movf main__byte,w addwf main__check_sum,f ; line_number = 408 ; buffer_lows[index] := byte ; index_fsr_first movf main__index,w addlw buffer_lows movwf __fsr bsf __irp___byte, __irp___bit movf main__byte,w movwf __indf ; line_number = 409 ; byte := get_hex_byte() call get_hex_byte movwf main__byte ; line_number = 410 ; check_sum := check_sum + byte movf main__byte,w addwf main__check_sum,f ; line_number = 411 ; buffer_highs[index] := byte ; index_fsr_first movf main__index,w addlw buffer_highs movwf __fsr bsf __irp___byte, __irp___bit movf main__byte,w movwf __indf ; line_number = 412 ; index := index + 1 incf main__index,f goto main__6 main__7: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 405 ; while index < buffer_size done ; line_number = 413 ; check_sum := check_sum + get_hex_byte() main__8 equ globals___0+69 movf main__check_sum,w movwf main__8 call get_hex_byte addwf main__8,w movwf main__check_sum ; line_number = 414 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto main__24 ; # Command completed without error: ; # For debugging only: ; #call put_character('L') ; #call put_hex_byte(length) ; #call put_space() ; #call put_character('A') ; #call put_hex_byte(address_high) ; #call put_hex_byte(address_low) ; #call put_space() ; #call put_character('T') ; #call put_hex_byte(type) ; #call put_space() ; #index := 0 ; #buffer_size := length >> 1 ; #while index < buffer_size ; # call put_character('[') ; # call put_hex_nibble(index) ; # call put_character(']') ; # call put_hex_byte(buffer_highs[index]) ; # call put_hex_byte(buffer_lows[index]) ; # call put_space() ; # index := index + 1 ; #call put_character('C') ; #call put_hex_byte(check_sum) ; #call put_crlf() ; line_number = 446 ; if check_sum = 0 start ; Left minus Right movf main__check_sum,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__22 ; # Check sum is cool: ; # Address is off by a factor of 2: ; line_number = 449 ; address_low := address_low >> 1 ; Assignment of variable to self (no code needed) rrf main__address_low,f bcf main__address_low, 7 ; line_number = 450 ; if address_high@0 start main__select__10___byte equ main__address_high main__select__10___bit equ 0 ; =>bit_code_emit@symbol(): sym=main__select__10 ; CASE: True.size=1 False.size=0 btfsc main__select__10___byte, main__select__10___bit ; line_number = 451 ; address_low@7 := 1 main__select__9___byte equ main__address_low main__select__9___bit equ 7 bsf main__select__9___byte, main__select__9___bit ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=main__select__10 (data:00=>00 code:11=>11) ; line_number = 450 ; if address_high@0 done ; line_number = 452 ; address_high := address_high >> 1 ; Assignment of variable to self (no code needed) rrf main__address_high,f bcf main__address_high, 7 ; #call put_character('X') ; #call put_hex_byte(address_high) ; #call put_hex_byte(address_low) ; #call put_space() ; # Only write data into "safe" pages: ; line_number = 460 ; if type = 1 start ; Left minus Right decf main__type,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto main__20 ; line_number = 461 ; if errors != 0 start ; Left minus Right movf main__errors,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto main__19 ; line_number = 462 ; call put_character('E') movlw 69 call put_character ; line_number = 463 ; call put_character('r') movlw 114 call put_character ; line_number = 464 ; call put_character('r') movlw 114 call put_character ; line_number = 465 ; call put_character('@') movlw 64 call put_character ; line_number = 466 ; call put_hex_byte(error_high) movf main__error_high,w call put_hex_byte ; line_number = 467 ; call put_hex_byte(error_low) movf main__error_low,w call put_hex_byte ; line_number = 468 ; call put_crlf() call put_crlf ; line_number = 469 ; errors := 0 movlw 0 movwf main__errors main__19: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 461 ; if errors != 0 done goto main__21 main__20: ; line_number = 470 ; Left minus Right movf main__type,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto main__18 ; line_number = 473 ; Left minus Right movf main__address_high,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size>1 false.size=1; false=GOTO btfss __z___byte, __z___bit goto main__16 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 ; Left minus Right movlw 252 andwf main__address_low,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto main__17 main__16: ; line_number = 478 movlw 27 subwf main__address_high,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto main__15 ; # Write data until the buffer is empty: ; #call put_character('@') ; line_number = 481 ; ok := 1 bsf ok___byte, ok___bit ; line_number = 482 ; index := 0 movlw 0 movwf main__index ; line_number = 483 ; loop_exactly buffer_size start main__11 equ globals___0+69 movf main__buffer_size,w movwf main__11 main__12: ; # Write the instruction into flash: ; #call put_character('&') ; line_number = 486 ; _eeadrh := address_high movf main__address_high,w bsf __rp1___byte, __rp1___bit movwf _eeadrh ; line_number = 487 ; _eeadr := address_low bcf __rp1___byte, __rp1___bit movf main__address_low,w bsf __rp1___byte, __rp1___bit movwf _eeadr ; line_number = 488 ; _eedath := buffer_highs[index] bcf __rp1___byte, __rp1___bit movf main__index,w addlw buffer_highs movwf __fsr bsf __irp___byte, __irp___bit movf __indf,w bsf __rp1___byte, __rp1___bit movwf _eedath ; line_number = 489 ; _eedata := buffer_lows[index] bcf __rp1___byte, __rp1___bit movf main__index,w addlw buffer_lows movwf __fsr bsf __irp___byte, __irp___bit movf __indf,w bsf __rp1___byte, __rp1___bit movwf _eedata ; line_number = 490 ; _eepgd := 1 bsf __rp0___byte, __rp0___bit bsf _eepgd___byte, _eepgd___bit ; line_number = 491 ; _wren := 1 bsf _wren___byte, _wren___bit ; line_number = 492 ; _eecon2 := 0x55 movlw 85 movwf _eecon2 ; line_number = 493 ; _eecon2 := 0xaa movlw 170 movwf _eecon2 ; line_number = 494 ; _wr := 1 bsf _wr___byte, _wr___bit ; # The next two instructions must be nop's: ; line_number = 496 ; assemble ; line_number = 497 nop ; Statement 0 of 2 delay = 29 ; line_number = 498 nop ; Statement 1 of 2 delay = 30 ; line_number = 499 ; _wren := 0 bcf _wren___byte, _wren___bit ; # Verify that the data was written successfully: ; line_number = 502 ; _eepgd := 1 bsf _eepgd___byte, _eepgd___bit ; line_number = 503 ; _rd := 1 bsf _rd___byte, _rd___bit ; # The next two instructions must be nop's: ; line_number = 505 ; assemble ; line_number = 506 nop ; Statement 0 of 2 delay = 31 ; line_number = 507 nop ; Statement 1 of 2 delay = 32 ; line_number = 508 ; if buffer_highs[index] != _eedath start ; Right minus Left bcf __rp0___byte, __rp0___bit bcf __rp1___byte, __rp1___bit movf main__index,w addlw buffer_highs movwf __fsr bsf __irp___byte, __irp___bit movf __indf,w bsf __rp1___byte, __rp1___bit subwf _eedath,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto main__13 ; #call put_character('=') ; line_number = 510 ; error_high := _eeadrh movf _eeadrh,w bcf __rp1___byte, __rp1___bit movwf main__error_high ; line_number = 511 ; error_low := _eeadr bsf __rp1___byte, __rp1___bit movf _eeadr,w bcf __rp1___byte, __rp1___bit movwf main__error_low ; line_number = 512 ; errors := errors + 1 incf main__errors,f main__13: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>?0 code:11=>11) ; line_number = 508 ; if buffer_highs[index] != _eedath done ; line_number = 513 ; if buffer_lows[index] != _eedata start ; Right minus Left bcf __rp1___byte, __rp1___bit movf main__index,w addlw buffer_lows movwf __fsr bsf __irp___byte, __irp___bit movf __indf,w bsf __rp1___byte, __rp1___bit subwf _eedata,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto main__14 ; #call put_character('+') ; line_number = 515 ; error_high := _eeadrh movf _eeadrh,w bcf __rp1___byte, __rp1___bit movwf main__error_high ; line_number = 516 ; error_low := _eeadr bsf __rp1___byte, __rp1___bit movf _eeadr,w bcf __rp1___byte, __rp1___bit movwf main__error_low ; line_number = 517 ; errors := errors + 1 incf main__errors,f main__14: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>?0 code:11=>11) ; line_number = 513 ; if buffer_lows[index] != _eedata done ; # Increment the address: ; line_number = 520 ; address_low := address_low + 1 bcf __rp1___byte, __rp1___bit incf main__address_low,f ; line_number = 521 ; if _z start ; =>bit_code_emit@symbol(): sym=_z ; CASE: True.size=1 False.size=0 btfsc _z___byte, _z___bit ; line_number = 522 ; address_high := address_high + 1 incf main__address_high,f ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=_z (data:00=>00 code:11=>11) ; line_number = 521 ; if _z done ; line_number = 523 ; index := index + 1 incf main__index,f ; line_number = 483 ; loop_exactly buffer_size wrap-up decfsz main__11,f goto main__12 ; line_number = 483 ; loop_exactly buffer_size done main__15: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) main__17: ; # Trying to modify first 4 words of flash; ; # This is not allowed: ; #call put_character('^') ; line_number = 477 ; do_nothing ; Recombine code1_bit_states != code2_bit_states ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; &&||: 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 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; Recombine code1_bit_states != code2_bit_states main__18: ; #call put_character('_') ; line_number = 472 ; do_nothing ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__21: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 460 ; if type = 1 done goto main__23 main__22: ; line_number = 525 ; errors := errors + 1 incf main__errors,f ; line_number = 526 ; call put_character('c') movlw 99 call put_character ; line_number = 527 ; call put_character('s') movlw 115 call put_character ; line_number = 528 ; call put_character('=') movlw 61 call put_character ; line_number = 529 ; call put_hex_byte(check_sum) movf main__check_sum,w call put_hex_byte ; line_number = 530 ; call put_crlf() call put_crlf main__23: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 446 ; if check_sum = 0 done ; Recombine size1 = 0 || size2 = 0 main__24: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 414 ; if get_carriage_return() done goto main__26 main__25: ; line_number = 531 ; Left minus Right movlw 243 addwf main__command,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto main__5 ; # Unrecognized command: ; line_number = 536 ; call get_carriage_return() call get_carriage_return ; line_number = 537 ; call put_character('?') movlw 63 call put_character ; line_number = 538 ; call put_crlf() call put_crlf main__5: ; # Empty command:ain11 ; line_number = 533 ; do_nothing ; Recombine code1_bit_states != code2_bit_states ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__26: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__28: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__31: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__34: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__39: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__42: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__48: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__52: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__55: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__57: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__64: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) main__67: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 288 ; if command = 'C' done ; line_number = 278 ; loop_forever wrap-up goto main__4 ; line_number = 278 ; loop_forever done ; delay after procedure statements=non-uniform ; line_number = 541 ; procedure clock_adjust clock_adjust: ; Last argument is sitting in W; save into argument variable movwf clock_adjust__socket ; delay=4294967295 ; line_number = 542 ; argument adjust byte clock_adjust__adjust equ globals___0+32 ; line_number = 543 ; argument socket byte clock_adjust__socket equ globals___0+33 ; line_number = 544 ; returns_nothing ; # This procedure will adjust the clock to the slave. ; line_number = 548 ; local command byte clock_adjust__command equ globals___0+23 ; line_number = 549 ; local count byte clock_adjust__count equ globals___0+24 ; line_number = 550 ; local error byte clock_adjust__error equ globals___0+25 ; line_number = 551 ; local error_minimum byte clock_adjust__error_minimum equ globals___0+26 ; line_number = 552 ; local high byte clock_adjust__high equ globals___0+27 ; line_number = 553 ; local in_mask byte clock_adjust__in_mask equ globals___0+28 ; line_number = 554 ; local in_out_register byte clock_adjust__in_out_register equ globals___0+29 ; line_number = 555 ; local low byte clock_adjust__low equ globals___0+30 ; line_number = 556 ; local target byte clock_adjust__target equ globals___0+31 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 558 ; target := iterations_low - adjust comf clock_adjust__adjust,w addlw 163 movwf clock_adjust__target ; line_number = 559 ; count := 2 movlw 2 movwf clock_adjust__count ; line_number = 560 ; error := 0xff movlw 255 movwf clock_adjust__error ; line_number = 561 ; error_minimum := 0xf0 movlw 240 movwf clock_adjust__error_minimum ; # Print out the target: ; line_number = 564 ; call put_character('T') movlw 84 call put_character ; line_number = 565 ; call put_hex_byte(iterations_high) movlw 5 call put_hex_byte ; line_number = 566 ; call put_hex_byte(target) movf clock_adjust__target,w call put_hex_byte ; line_number = 567 ; call put_crlf() call put_crlf ; line_number = 569 ; loop_forever start clock_adjust__1: ; # Print out the clock value: ; line_number = 571 ; call put_character('C') movlw 67 call put_character ; line_number = 572 ; call put_byte(0xfa, socket) movlw 250 movwf put_byte__character movf clock_adjust__socket,w call put_byte ; line_number = 573 ; call put_hex_byte(get_byte(socket)) movf clock_adjust__socket,w call get_byte call put_hex_byte ; line_number = 574 ; call put_space() call put_space ; line_number = 576 ; in_mask := in_masks(socket) movf clock_adjust__socket,w call in_masks movwf clock_adjust__in_mask ; line_number = 577 ; in_out_register := in_out_registers(socket) movf clock_adjust__socket,w call in_out_registers movwf clock_adjust__in_out_register ; # Ask for a timing byte: ; line_number = 580 ; call put_byte(0xfb, socket) movlw 251 movwf put_byte__character movf clock_adjust__socket,w call put_byte ; # Nasty: ; line_number = 583 ; low := 0 movlw 0 movwf clock_adjust__low ; line_number = 584 ; high := 0 movlw 0 movwf clock_adjust__high ; line_number = 585 ; while ports[in_out_register] & in_mask != 0 start clock_adjust__2: ; Left minus Right movf clock_adjust__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w andwf clock_adjust__in_mask,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size=0 && false_code.size=1 btfss __z___byte, __z___bit ; true.size=0 false_size=1 false=GOTO goto clock_adjust__2 ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 585 ; while ports[in_out_register] & in_mask != 0 done ; line_number = 587 ; while ports[in_out_register] & in_mask = 0 start clock_adjust__3: ; Left minus Right movf clock_adjust__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w andwf clock_adjust__in_mask,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto clock_adjust__4 ; line_number = 588 ; low := low + 1 incf clock_adjust__low,f ; line_number = 589 ; if _z start ; =>bit_code_emit@symbol(): sym=_z ; CASE: True.size=1 False.size=0 btfsc _z___byte, _z___bit ; line_number = 590 ; high := high + 1 incf clock_adjust__high,f ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=_z (data:00=>00 code:11=>11) ; line_number = 589 ; if _z done goto clock_adjust__3 ; Recombine size1 = 0 || size2 = 0 clock_adjust__4: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 587 ; while ports[in_out_register] & in_mask = 0 done ; # Print out high and low: ; line_number = 593 ; call put_character('H') movlw 72 call put_character ; line_number = 594 ; call put_hex_byte(high) movf clock_adjust__high,w call put_hex_byte ; line_number = 595 ; call put_space() call put_space ; line_number = 596 ; call put_character('L') movlw 76 call put_character ; line_number = 597 ; call put_hex_byte(low) movf clock_adjust__low,w call put_hex_byte ; line_number = 598 ; call put_space() call put_space ; # Now think about adjusting clock. ; line_number = 601 ; if high > iterations_high start movlw 5 subwf clock_adjust__high,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto clock_adjust__11 ; # Clock pulse is too long; slave clock is too slow: ; line_number = 603 ; command := 0xf9 movlw 249 movwf clock_adjust__command ; line_number = 604 ; error := high - target movf clock_adjust__target,w subwf clock_adjust__high,w movwf clock_adjust__error ; Recombine code1_bit_states != code2_bit_states goto clock_adjust__12 clock_adjust__11: ; line_number = 605 movlw 5 subwf clock_adjust__high,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto clock_adjust__9 ; # The high 8-bits are equal: ; line_number = 611 ; if low > target start movf clock_adjust__target,w subwf clock_adjust__low,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto clock_adjust__7 ; # Clock pulse is too long; slave clock is too slow: ; line_number = 613 ; command := 0xf9 movlw 249 movwf clock_adjust__command ; line_number = 614 ; error := low - target movf clock_adjust__target,w subwf clock_adjust__low,w movwf clock_adjust__error ; Recombine code1_bit_states != code2_bit_states goto clock_adjust__8 clock_adjust__7: ; line_number = 615 movf clock_adjust__target,w subwf clock_adjust__low,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto clock_adjust__5 ; # Exact match; we are done: ; line_number = 621 ; command := 0 movlw 0 movwf clock_adjust__command ; line_number = 622 ; error := 0 movlw 0 movwf clock_adjust__error ; line_number = 623 ; error_minimum := 0 movlw 0 movwf clock_adjust__error_minimum goto clock_adjust__6 clock_adjust__5: ; # Clock pulse is too short; slave clock is too fast: ; line_number = 617 ; command := 0xf8 movlw 248 movwf clock_adjust__command ; line_number = 618 ; error := target - low movf clock_adjust__low,w subwf clock_adjust__target,w movwf clock_adjust__error clock_adjust__6: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) clock_adjust__8: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 611 ; if low > target done ; Recombine code1_bit_states != code2_bit_states goto clock_adjust__10 clock_adjust__9: ; # Clock pulse is too short; slave clock is too fast: ; line_number = 607 ; command := 0xf8 movlw 248 movwf clock_adjust__command ; line_number = 608 ; error := target - high movf clock_adjust__high,w subwf clock_adjust__target,w movwf clock_adjust__error clock_adjust__10: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) clock_adjust__12: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 601 ; if high > iterations_high done ; # Print out the error and error minimum: ; line_number = 626 ; call put_character('E') movlw 69 call put_character ; line_number = 627 ; call put_hex_byte(error) movf clock_adjust__error,w call put_hex_byte ; line_number = 628 ; call put_space() call put_space ; line_number = 629 ; call put_character('M') movlw 77 call put_character ; line_number = 630 ; call put_hex_byte(error_minimum) movf clock_adjust__error_minimum,w call put_hex_byte ; line_number = 631 ; call put_space() call put_space ; line_number = 633 ; if error = error_minimum start ; Left minus Right movf clock_adjust__error_minimum,w subwf clock_adjust__error,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code_size > 1 && false_code_size > 1 btfss __z___byte, __z___bit goto clock_adjust__16 ; line_number = 634 ; call put_crlf() call put_crlf ; line_number = 635 ; return start ; line_number = 635 retlw 0 ; line_number = 635 ; return done goto clock_adjust__17 clock_adjust__16: ; line_number = 636 movf clock_adjust__error_minimum,w subwf clock_adjust__error,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto clock_adjust__14 ; line_number = 640 ; count := count - 1 decf clock_adjust__count,f ; line_number = 641 ; if _z start ; =>bit_code_emit@symbol(): sym=_z ; CASE: true_code.size = 0 && false_code.size > 1 btfss _z___byte, _z___bit goto clock_adjust__13 ; line_number = 642 ; error_minimum := error_minimum + 1 incf clock_adjust__error_minimum,f ; line_number = 643 ; count := 2 movlw 2 movwf clock_adjust__count ; Recombine size1 = 0 || size2 = 0 clock_adjust__13: ; <=bit_code_emit@symbol; sym=_z (data:00=>00 code:11=>11) ; line_number = 641 ; if _z done ; Recombine code1_bit_states != code2_bit_states goto clock_adjust__15 clock_adjust__14: ; line_number = 637 ; error_minimum := error movf clock_adjust__error,w movwf clock_adjust__error_minimum ; line_number = 638 ; error := error + 1 incf clock_adjust__error,f clock_adjust__15: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) clock_adjust__17: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 633 ; if error = error_minimum done ; # Now adjust the clock: ; line_number = 646 ; call put_byte(command, socket) movf clock_adjust__command,w movwf put_byte__character movf clock_adjust__socket,w call put_byte ; line_number = 648 ; call put_crlf() call put_crlf ; line_number = 569 ; loop_forever wrap-up goto clock_adjust__1 ; line_number = 569 ; loop_forever done ; delay after procedure statements=non-uniform ; line_number = 651 ; procedure execute execute: ; arguments_none ; line_number = 653 ; returns_nothing ; # This procedure will transfer control to location program_origin. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 657 ; _pclath := 0 movlw 0 movwf _pclath ; line_number = 658 ; _pcl := program_origin movlw 8 movwf _pcl ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 661 ; procedure goto_command goto_command: ; arguments_none ; line_number = 663 ; returns_nothing ; line_number = 665 ; local address_low byte goto_command__address_low equ globals___0+34 ; line_number = 666 ; local address_high byte goto_command__address_high equ globals___0+35 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 668 ; address_high := get_hex_byte() call get_hex_byte movwf goto_command__address_high ; line_number = 669 ; address_low := get_hex_byte() call get_hex_byte movwf goto_command__address_low ; line_number = 670 ; if get_carriage_return() start call get_carriage_return ; =>bit_code_emit@symbol(): sym=get_carriage_return__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss get_carriage_return__0return___byte, get_carriage_return__0return___bit goto goto_command__1 ; line_number = 671 ; _pclath := address_high movf goto_command__address_high,w movwf _pclath ; line_number = 672 ; _pcl := address_low movf goto_command__address_low,w movwf _pcl ; Recombine size1 = 0 || size2 = 0 goto_command__1: ; <=bit_code_emit@symbol; sym=get_carriage_return__0return (data:00=>00 code:11=>11) ; line_number = 670 ; if get_carriage_return() done ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; # The `id' procedures are below: ; line_number = 677 ; procedure id8 id8: ; Last argument is sitting in W; save into argument variable movwf id8__socket ; delay=4294967295 ; line_number = 678 ; argument socket byte id8__socket equ globals___0+37 ; line_number = 679 ; returns_nothing ; # This procedure will print out 8 bytes of id: ; line_number = 683 ; local count byte id8__count equ globals___0+36 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 685 ; loop_exactly 8 start id8__1 equ globals___0+70 movlw 8 movwf id8__1 id8__2: ; line_number = 686 ; call put_hex_byte(put_get_byte(id_next, socket)) movlw 252 movwf put_get_byte__command movf id8__socket,w call put_get_byte call put_hex_byte ; line_number = 687 ; call put_space() call put_space ; line_number = 685 ; loop_exactly 8 wrap-up decfsz id8__1,f goto id8__2 ; line_number = 685 ; loop_exactly 8 done ; line_number = 688 ; call put_crlf() call put_crlf ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 691 ; procedure id_string id_string: ; Last argument is sitting in W; save into argument variable movwf id_string__socket ; delay=4294967295 ; line_number = 692 ; argument socket byte id_string__socket equ globals___0+39 ; line_number = 693 ; returns_nothing ; # This procedure will print out a string from the id: ; line_number = 697 ; local size byte id_string__size equ globals___0+38 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 699 ; size := put_get_byte(id_next, socket) movlw 252 movwf put_get_byte__command movf id_string__socket,w call put_get_byte movwf id_string__size ; line_number = 700 ; while size != 0 start id_string__1: ; Left minus Right movf id_string__size,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto id_string__2 ; line_number = 701 ; call put_character(put_get_byte(id_next, socket)) movlw 252 movwf put_get_byte__command movf id_string__socket,w call put_get_byte call put_character ; line_number = 702 ; size := size - 1 decf id_string__size,f goto id_string__1 id_string__2: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 700 ; while size != 0 done ; line_number = 703 ; call put_crlf() call put_crlf ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; # The `get' procedures are below: ; line_number = 708 ; procedure get_byte get_byte: ; Last argument is sitting in W; save into argument variable movwf get_byte__socket ; delay=4294967295 ; line_number = 709 ; argument socket byte get_byte__socket equ globals___0+44 ; line_number = 710 ; returns byte ; # This procedure will get a byte from the currently selected ; # input. If no byte is received in a reasonable amount of ; # time, 0xfc is returned. ; line_number = 716 ; local counter byte get_byte__counter equ globals___0+40 ; line_number = 717 ; local character byte get_byte__character equ globals___0+41 ; line_number = 718 ; local in_mask byte get_byte__in_mask equ globals___0+42 ; line_number = 719 ; local in_out_register byte get_byte__in_out_register equ globals___0+43 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 721 ; in_out_register := in_out_registers(socket) movf get_byte__socket,w call in_out_registers movwf get_byte__in_out_register ; line_number = 722 ; in_mask := in_masks(socket) movf get_byte__socket,w call in_masks movwf get_byte__in_mask ; line_number = 724 ; receiving := 1 bsf receiving___byte, receiving___bit ; line_number = 725 ; loop_exactly 255 start get_byte__1 equ globals___0+71 movlw 255 movwf get_byte__1 get_byte__2: ; line_number = 726 ; if ports[in_out_register] & in_mask = 0 start ; Left minus Right movf get_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w andwf get_byte__in_mask,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto get_byte__9 ; # We got a start bit: ; line_number = 728 ; call delay() call delay ; line_number = 729 ; call delay() call delay ; line_number = 730 ; call delay() call delay ; # 2 Instructions for loop_exactly initialization: ; line_number = 733 ; delay extra_bit_instructions - 2 start ; Delay expression evaluates to 22 ; # Sample 1/3 of bit into each character: ; line_number = 735 ; character := 0 ; Delay at assignment is 0 movlw 0 movwf get_byte__character ; Delay 20 cycles ; Delay loop takes 5 * 4 = 20 cycles movlw 5 get_byte__3: addlw 255 btfss __z___byte, __z___bit goto get_byte__3 ; line_number = 733 ; delay extra_bit_instructions - 2 done ; line_number = 737 ; loop_exactly 8 start get_byte__4 equ globals___0+72 movlw 8 movwf get_byte__4 get_byte__5: ; line_number = 738 ; call delay() call delay ; # 3 Instructions for loop overhead: ; line_number = 740 ; delay extra_bit_instructions - 3 start ; Delay expression evaluates to 21 ; line_number = 741 ; character := character >> 1 ; Delay at assignment is 0 ; Assignment of variable to self (no code needed) rrf get_byte__character,f bcf get_byte__character, 7 ; line_number = 742 ; if ports[in_out_register] & in_mask != 0 start ; Delay at if is 2 ; Left minus Right movf get_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w andwf get_byte__in_mask,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size=0 && false_code.size=1 btfss __z___byte, __z___bit ; line_number = 743 ; character@7 := 1 ; Delay at assignment is 0 get_byte__select__6___byte equ get_byte__character get_byte__select__6___bit equ 7 bsf get_byte__select__6___byte, get_byte__select__6___bit ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; Uniform delay broke in relation_code_emit ; if final true delay=1 false delay=0 code delay=10 ; line_number = 742 ; if ports[in_out_register] & in_mask != 0 done ; Delay 11 cycles ; Delay loop takes 2 * 4 = 8 cycles movlw 2 get_byte__7: addlw 255 btfss __z___byte, __z___bit goto get_byte__7 goto get_byte__8 get_byte__8: nop ; line_number = 740 ; delay extra_bit_instructions - 3 done ; line_number = 744 ; call delay() call delay ; line_number = 745 ; call delay() call delay ; line_number = 737 ; loop_exactly 8 wrap-up decfsz get_byte__4,f goto get_byte__5 ; line_number = 737 ; loop_exactly 8 done ; # Now sleep through 2/3's of the stop bit: ; line_number = 748 ; call delay() call delay ; line_number = 749 ; call delay() call delay ; line_number = 750 ; return character start ; line_number = 750 movf get_byte__character,w return ; line_number = 750 ; return character done ; Recombine size1 = 0 || size2 = 0 get_byte__9: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 726 ; if ports[in_out_register] & in_mask = 0 done ; line_number = 751 ; call delay() call delay ; line_number = 725 ; loop_exactly 255 wrap-up decfsz get_byte__1,f goto get_byte__2 ; line_number = 725 ; loop_exactly 255 done ; line_number = 752 ; return 0xfc start ; line_number = 752 retlw 252 ; line_number = 752 ; return 0xfc done ; delay after procedure statements=non-uniform get_carriage_return__0return___byte equ globals___0+79 get_carriage_return__0return___bit equ 4 ; line_number = 755 ; procedure get_carriage_return get_carriage_return: ; arguments_none ; line_number = 757 ; returns bit ; # This procedure will verify that the next character is ; # a carriage return. If the next character is a carriage ; # return a 1 is returned. Otherwise, characters are read ; # until a carriage return is encountered and 0 is returned. ; # If any errors occurred (i.e. ok = 0), a "?" followed by ; # carriage-return line-feed is returned. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 766 ; while get_character() != carriage_return start get_carriage_return__1: ; Left minus Right call get_character addlw 243 ; =>bit_code_emit@symbol(): sym=__z ; CASE: true.size=0 && false.size>1 btfsc __z___byte, __z___bit goto get_carriage_return__2 ; line_number = 767 ; ok := 0 bcf ok___byte, ok___bit goto get_carriage_return__1 get_carriage_return__2: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 766 ; while get_character() != carriage_return done ; line_number = 768 ; have_carriage_return := 0 bcf have_carriage_return___byte, have_carriage_return___bit ; line_number = 769 ; if ok start ; =>bit_code_emit@symbol(): sym=ok ; CASE: true_code.size = 0 && false_code.size > 1 btfss ok___byte, ok___bit goto get_carriage_return__3 ; line_number = 770 ; return 1 start ; line_number = 770 bsf get_carriage_return__0return___byte, get_carriage_return__0return___bit return ; line_number = 770 ; return 1 done ; Recombine size1 = 0 || size2 = 0 get_carriage_return__3: ; <=bit_code_emit@symbol; sym=ok (data:00=>00 code:11=>11) ; line_number = 769 ; if ok done ; line_number = 771 ; call put_character('?') movlw 63 call put_character ; line_number = 772 ; call put_crlf() call put_crlf ; line_number = 773 ; return 0 start ; line_number = 773 bcf get_carriage_return__0return___byte, get_carriage_return__0return___bit return ; line_number = 773 ; return 0 done ; delay after procedure statements=non-uniform ; line_number = 776 ; procedure get_character get_character: ; arguments_none ; line_number = 778 ; returns byte ; # This procedure will get the next character from the UART. ; line_number = 782 ; local character byte get_character__character equ globals___0+45 ; line_number = 783 ; local pir1_copy byte get_character__pir1_copy equ globals___0+46 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 785 ; if have_carriage_return start ; =>bit_code_emit@symbol(): sym=have_carriage_return ; CASE: True.size=1 False.size=0 btfsc have_carriage_return___byte, have_carriage_return___bit ; line_number = 786 ; return carriage_return start ; line_number = 786 retlw 13 ; line_number = 786 ; return carriage_return done ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=have_carriage_return (data:00=>00 code:11=>11) ; line_number = 785 ; if have_carriage_return done ; # FIXME: Compiler can't bit test outside of the current data bank!!! ; # So read the entire register into a temporary and test second. ; # Read characters until something other than a space is typed in: ; line_number = 792 ; character := space movlw 32 movwf get_character__character ; line_number = 793 ; while character = space start get_character__1: ; Left minus Right movlw 224 addwf get_character__character,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto get_character__6 ; line_number = 794 ; pir1_copy@5 := 0 get_character__select__2___byte equ get_character__pir1_copy get_character__select__2___bit equ 5 bcf get_character__select__2___byte, get_character__select__2___bit ; line_number = 795 ; while !(pir1_copy@5) start get_character__3: get_character__select__4___byte equ get_character__pir1_copy get_character__select__4___bit equ 5 ; =>bit_code_emit@symbol(): sym=get_character__select__4 ; CASE: true.size=0 && false.size>1 btfsc get_character__select__4___byte, get_character__select__4___bit goto get_character__5 ; # Wait for character: ; line_number = 797 ; pir1_copy := _pir1 movf _pir1,w movwf get_character__pir1_copy goto get_character__3 get_character__5: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=get_character__select__4 (data:00=>00 code:11=>11) ; line_number = 795 ; while !(pir1_copy@5) done ; line_number = 798 ; character := _rcreg movf _rcreg,w movwf get_character__character goto get_character__1 ; Recombine size1 = 0 || size2 = 0 get_character__6: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 793 ; while character = space done ; # Convert to upper case: ; line_number = 801 ; if 'a' <= character && character <= 'z' start movlw 97 subwf get_character__character,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size>1 false.size=1; false=GOTO btfss __c___byte, __c___bit goto get_character__7 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 122 subwf get_character__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto get_character__8 ; line_number = 802 ; character := character - 'a' + 'A' movlw 224 addwf get_character__character,f get_character__8: get_character__7: ; Recombine code1_bit_states != code2_bit_states ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; &&||: 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 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 801 ; if 'a' <= character && character <= 'z' done ; # Carriage returns "stick" until get_carriage_return() is called: ; line_number = 805 ; if character = carriage_return start ; Left minus Right movlw 243 addwf get_character__character,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size = 0 && false_code.size > 1 btfss __z___byte, __z___bit goto get_character__9 ; line_number = 806 ; call put_character(line_feed) movlw 10 call put_character ; line_number = 807 ; have_carriage_return := 1 bsf have_carriage_return___byte, have_carriage_return___bit ; Recombine size1 = 0 || size2 = 0 get_character__9: ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; line_number = 805 ; if character = carriage_return done ; line_number = 808 ; return character start ; line_number = 808 movf get_character__character,w return ; line_number = 808 ; return character done ; delay after procedure statements=non-uniform ; line_number = 811 ; procedure get_hex_byte get_hex_byte: ; arguments_none ; line_number = 813 ; returns byte ; # This procedure will read one hexadecimal byte: ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 817 ; return (get_hex_nibble() << 4) | get_hex_nibble() start ; line_number = 817 get_hex_byte__1 equ globals___0+73 call get_hex_nibble movwf get_hex_byte__1 swapf get_hex_byte__1,f movlw 240 andwf get_hex_byte__1,f call get_hex_nibble iorwf get_hex_byte__1,w return ; line_number = 817 ; return (get_hex_nibble() << 4) | get_hex_nibble() done ; delay after procedure statements=non-uniform ; line_number = 820 ; procedure get_hex_nibble get_hex_nibble: ; arguments_none ; line_number = 822 ; returns byte ; # This procedure will get and return one hexadecimal digit worth ; # of number. ; line_number = 827 ; local character byte get_hex_nibble__character equ globals___0+47 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 829 ; character := get_character() call get_character movwf get_hex_nibble__character ; line_number = 830 ; if '0' <= character && character <= '9' start movlw 48 subwf get_hex_nibble__character,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size>1 false.size=1; false=GOTO btfss __c___byte, __c___bit goto get_hex_nibble__3 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 57 subwf get_hex_nibble__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_code_size > 1 && false_code_size > 1 btfss __c___byte, __c___bit goto get_hex_nibble__4 get_hex_nibble__3: ; line_number = 832 movlw 65 subwf get_hex_nibble__character,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size>1 false.size=1; false=GOTO btfss __c___byte, __c___bit goto get_hex_nibble__1 ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295 movlw 70 subwf get_hex_nibble__character,w btfsc __z___byte, __z___bit bcf __c___byte, __c___bit ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto get_hex_nibble__2 ; line_number = 833 ; return character - 'A' + 10 start ; line_number = 833 movlw 201 addwf get_hex_nibble__character,w return ; line_number = 833 ; return character - 'A' + 10 done get_hex_nibble__2: get_hex_nibble__1: ; Recombine code1_bit_states != code2_bit_states ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; &&||: 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 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; Recombine code1_bit_states != code2_bit_states goto get_hex_nibble__5 get_hex_nibble__4: ; line_number = 831 ; return character - '0' start ; line_number = 831 movlw 208 addwf get_hex_nibble__character,w return ; line_number = 831 ; return character - '0' done get_hex_nibble__5: ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; &&||: 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 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 830 ; if '0' <= character && character <= '9' done ; line_number = 834 ; ok := 0 bcf ok___byte, ok___bit ; line_number = 835 ; return 0 start ; line_number = 835 retlw 0 ; line_number = 835 ; return 0 done ; delay after procedure statements=non-uniform ; # The `put' procedures: ; line_number = 840 ; procedure put_get_byte put_get_byte: ; Last argument is sitting in W; save into argument variable movwf put_get_byte__socket ; delay=4294967295 ; line_number = 841 ; argument command byte put_get_byte__command equ globals___0+48 ; line_number = 842 ; argument socket byte put_get_byte__socket equ globals___0+49 ; line_number = 843 ; returns byte ; # This procedure will output {command} to {socket} and wait ; # for a response which is subseuently returned. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 848 ; call put_byte(command, socket) movf put_get_byte__command,w movwf put_byte__character movf put_get_byte__socket,w call put_byte ; line_number = 849 ; return get_byte(socket) start ; line_number = 849 movf put_get_byte__socket,w call get_byte return ; line_number = 849 ; return get_byte(socket) done ; delay after procedure statements=non-uniform ; line_number = 852 ; procedure put_byte put_byte: ; Last argument is sitting in W; save into argument variable movwf put_byte__socket ; delay=4294967295 ; line_number = 853 ; argument character byte put_byte__character equ globals___0+56 ; line_number = 854 ; argument socket byte put_byte__socket equ globals___0+57 ; line_number = 855 ; returns_nothing ; # This procedure will send {character} out to {socket}. ; line_number = 859 ; local counter byte put_byte__counter equ globals___0+50 ; line_number = 860 ; local one byte put_byte__one equ globals___0+51 ; line_number = 861 ; local port byte put_byte__port equ globals___0+52 ; line_number = 862 ; local zero byte put_byte__zero equ globals___0+53 ; line_number = 864 ; local in_out_register byte put_byte__in_out_register equ globals___0+54 ; line_number = 865 ; local out_mask byte put_byte__out_mask equ globals___0+55 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 867 ; in_out_register := in_out_registers(socket) movf put_byte__socket,w call in_out_registers movwf put_byte__in_out_register ; line_number = 868 ; out_mask := out_masks(socket) movf put_byte__socket,w call out_masks movwf put_byte__out_mask ; line_number = 869 ; port := ports[in_out_register] movf put_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w movwf put_byte__port ; line_number = 870 ; one := port | out_mask movf put_byte__port,w iorwf put_byte__out_mask,w movwf put_byte__one ; line_number = 871 ; zero := port & (out_mask ^ 0xff) movlw 255 xorwf put_byte__out_mask,w andwf put_byte__port,w movwf put_byte__zero ; # If we were last receiving some characters, let's delay by 2/3 bit ; # to make sure there is adequate turn-around: ; line_number = 875 ; if receiving start ; =>bit_code_emit@symbol(): sym=receiving ; CASE: true_code.size = 0 && false_code.size > 1 btfss receiving___byte, receiving___bit goto put_byte__1 ; line_number = 876 ; receiving := 0 bcf receiving___byte, receiving___bit ; line_number = 877 ; call delay() call delay ; line_number = 878 ; call delay() call delay ; Recombine size1 = 0 || size2 = 0 put_byte__1: ; <=bit_code_emit@symbol; sym=receiving (data:00=>00 code:11=>11) ; line_number = 875 ; if receiving done ; # Do start bit: ; line_number = 881 ; delay extra_bit_instructions - 2 start ; Delay expression evaluates to 22 ; line_number = 882 ; ports[in_out_register] := zero ; Delay at assignment is 0 ; index_fsr_first movf put_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf put_byte__zero,w movwf __indf ; Delay 16 cycles ; Delay loop takes 4 * 4 = 16 cycles movlw 4 put_byte__2: addlw 255 btfss __z___byte, __z___bit goto put_byte__2 ; line_number = 881 ; delay extra_bit_instructions - 2 done ; line_number = 883 ; call delay() call delay ; line_number = 884 ; call delay() call delay ; line_number = 885 ; call delay() call delay ; # "- 2" is for two bytes of loop set up: ; # Do next 8 bits: ; line_number = 889 ; loop_exactly 8 start put_byte__3 equ globals___0+74 movlw 8 movwf put_byte__3 put_byte__4: ; # 3 cycles for goto at end of loop ; line_number = 891 ; delay extra_bit_instructions - 3 start ; Delay expression evaluates to 21 ; line_number = 892 ; port := ports[in_out_register] ; Delay at assignment is 0 movf put_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf __indf,w movwf put_byte__port ; line_number = 893 ; if character@0 start ; Delay at if is 6 put_byte__select__5___byte equ put_byte__character put_byte__select__5___bit equ 0 ; =>bit_code_emit@symbol(): sym=put_byte__select__5 ; CASE: true_code_size > 1 && false_code_size > 1 btfss put_byte__select__5___byte, put_byte__select__5___bit goto put_byte__6 ; # Send a mark (1): ; line_number = 895 ; port := one ; Delay at assignment is 0 movf put_byte__one,w movwf put_byte__port goto put_byte__7 put_byte__6: ; # Send a space (0): ; line_number = 898 ; port := zero ; Delay at assignment is 0 movf put_byte__zero,w movwf put_byte__port nop put_byte__7: ; <=bit_code_emit@symbol; sym=put_byte__select__5 (data:00=>00 code:11=>11) ; if final true delay=2 false delay=2 code delay=12 ; line_number = 893 ; if character@0 done ; line_number = 899 ; ports[in_out_register] := port ; Delay at assignment is 12 ; index_fsr_first movf put_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf put_byte__port,w movwf __indf ; line_number = 900 ; character := character >> 1 ; Delay at assignment is 18 ; Assignment of variable to self (no code needed) rrf put_byte__character,f bcf put_byte__character, 7 ; Delay 1 cycles nop ; line_number = 891 ; delay extra_bit_instructions - 3 done ; line_number = 901 ; call delay() call delay ; line_number = 902 ; call delay() call delay ; line_number = 903 ; call delay() call delay ; line_number = 889 ; loop_exactly 8 wrap-up decfsz put_byte__3,f goto put_byte__4 ; line_number = 889 ; loop_exactly 8 done ; # Now do stop bit: ; line_number = 906 ; delay extra_bit_instructions start ; Delay expression evaluates to 24 ; line_number = 907 ; ports[in_out_register] := one ; Delay at assignment is 0 ; index_fsr_first movf put_byte__in_out_register,w addlw ports movwf __fsr bcf __irp___byte, __irp___bit movf put_byte__one,w movwf __indf ; Delay 18 cycles ; Delay loop takes 4 * 4 = 16 cycles movlw 4 put_byte__8: addlw 255 btfss __z___byte, __z___bit goto put_byte__8 goto put_byte__9 put_byte__9: ; line_number = 906 ; delay extra_bit_instructions done ; line_number = 908 ; call delay() call delay ; line_number = 909 ; call delay() call delay ; line_number = 910 ; call delay() call delay ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 913 ; procedure put_character put_character: ; Last argument is sitting in W; save into argument variable movwf put_character__character ; delay=4294967295 ; line_number = 914 ; argument character byte put_character__character equ globals___0+59 ; line_number = 915 ; returns_nothing ; # This procedure will send {character} out to TX-pin of port C. ; line_number = 919 ; local pir1_copy byte put_character__pir1_copy equ globals___0+58 ; #FIXME: The compiler chokes on a bit test in another page!!! ; # For now may a local copy and test locally: ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 923 ; pir1_copy@4 := 0 put_character__select__1___byte equ put_character__pir1_copy put_character__select__1___bit equ 4 bcf put_character__select__1___byte, put_character__select__1___bit ; line_number = 924 ; while !(pir1_copy@4) start put_character__2: put_character__select__3___byte equ put_character__pir1_copy put_character__select__3___bit equ 4 ; =>bit_code_emit@symbol(): sym=put_character__select__3 ; CASE: true.size=0 && false.size>1 btfsc put_character__select__3___byte, put_character__select__3___bit goto put_character__4 ; # Wait for transmit buffer to empty. ; line_number = 926 ; pir1_copy := _pir1 movf _pir1,w movwf put_character__pir1_copy goto put_character__2 put_character__4: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=put_character__select__3 (data:00=>00 code:11=>11) ; line_number = 924 ; while !(pir1_copy@4) done ; # Send the character: ; line_number = 929 ; _txreg := character movf put_character__character,w movwf _txreg ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 932 ; procedure put_crlf put_crlf: ; arguments_none ; line_number = 934 ; returns_nothing ; # This procedure will output a carriage-return line-feed. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 938 ; call put_character(carriage_return) movlw 13 call put_character ; line_number = 939 ; call put_character(line_feed) movlw 10 call put_character ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 942 ; procedure put_hex_byte put_hex_byte: ; Last argument is sitting in W; save into argument variable movwf put_hex_byte__byte ; delay=4294967295 ; line_number = 943 ; argument byte byte put_hex_byte__byte equ globals___0+60 ; line_number = 944 ; returns_nothing ; # This procedure will output {byte} as two hexadecimal digits. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 948 ; call put_hex_nibble(byte >> 4) put_hex_byte__1 equ globals___0+75 swapf put_hex_byte__byte,w andlw 15 call put_hex_nibble ; line_number = 949 ; call put_hex_nibble(byte & 15) movlw 15 andwf put_hex_byte__byte,w call put_hex_nibble ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 952 ; procedure put_hex_nibble put_hex_nibble: ; Last argument is sitting in W; save into argument variable movwf put_hex_nibble__nibble ; delay=4294967295 ; line_number = 953 ; argument nibble byte put_hex_nibble__nibble equ globals___0+61 ; line_number = 954 ; returns_nothing ; # This procedure will output {nibble} as a hexadecimal digit. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 958 ; if nibble < 10 start movlw 10 subwf put_hex_nibble__nibble,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true_size=1 && false_size=1 btfsc __c___byte, __c___bit ; line_number = 961 ; nibble := nibble + 'A' - 10 movlw 55 btfss __c___byte, __c___bit ; line_number = 959 ; nibble := nibble + '0' movlw 48 addwf put_hex_nibble__nibble,f ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 958 ; if nibble < 10 done ; line_number = 962 ; call put_character(nibble) movf put_hex_nibble__nibble,w call put_character ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; line_number = 965 ; procedure put_space put_space: ; arguments_none ; line_number = 967 ; returns_nothing ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 969 ; call put_character(space) movlw 32 call put_character ; delay after procedure statements=non-uniform ; Implied return retlw 0 ; # Sleep routines: seconds_sleep__0return___byte equ globals___0+79 seconds_sleep__0return___bit equ 5 ; line_number = 974 ; procedure seconds_sleep seconds_sleep: ; Last argument is sitting in W; save into argument variable movwf seconds_sleep__seconds ; delay=4294967295 ; line_number = 975 ; argument seconds byte seconds_sleep__seconds equ globals___0+63 ; line_number = 976 ; returns bit ; # This procedure will sleep for the specified number of seconds. ; line_number = 980 ; local count byte seconds_sleep__count equ globals___0+62 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 982 ; count := 0 movlw 0 movwf seconds_sleep__count ; line_number = 983 ; loop_exactly seconds start seconds_sleep__1 equ globals___0+76 movf seconds_sleep__seconds,w movwf seconds_sleep__1 seconds_sleep__2: ; line_number = 984 ; call put_hex_byte(count) movf seconds_sleep__count,w call put_hex_byte ; line_number = 985 ; call put_space() call put_space ; line_number = 986 ; if second_sleep() start call second_sleep ; =>bit_code_emit@symbol(): sym=second_sleep__0return ; CASE: true_code.size = 0 && false_code.size > 1 btfss second_sleep__0return___byte, second_sleep__0return___bit goto seconds_sleep__4 ; line_number = 987 ; if sleep_count < 10 start movlw 10 subwf sleep_count,w ; =>bit_code_emit@symbol(): sym=__c ; CASE: true.size=0 && false.size>1 btfsc __c___byte, __c___bit goto seconds_sleep__3 ; line_number = 988 ; return 1 start ; line_number = 988 bsf seconds_sleep__0return___byte, seconds_sleep__0return___bit return ; line_number = 988 ; return 1 done seconds_sleep__3: ; Recombine size1 = 0 || size2 = 0 ; <=bit_code_emit@symbol; sym=__c (data:00=>00 code:11=>11) ; line_number = 987 ; if sleep_count < 10 done ; line_number = 989 ; return 0 start ; line_number = 989 bcf seconds_sleep__0return___byte, seconds_sleep__0return___bit return ; line_number = 989 ; return 0 done ; Recombine size1 = 0 || size2 = 0 seconds_sleep__4: ; <=bit_code_emit@symbol; sym=second_sleep__0return (data:00=>00 code:11=>11) ; line_number = 986 ; if second_sleep() done ; line_number = 990 ; count := count + 1 incf seconds_sleep__count,f ; line_number = 983 ; loop_exactly seconds wrap-up decfsz seconds_sleep__1,f goto seconds_sleep__2 ; line_number = 983 ; loop_exactly seconds done ; line_number = 991 ; return 1 start ; line_number = 991 bsf seconds_sleep__0return___byte, seconds_sleep__0return___bit return ; line_number = 991 ; return 1 done ; delay after procedure statements=non-uniform second_sleep__0return___byte equ globals___0+79 second_sleep__0return___bit equ 6 ; line_number = 994 ; procedure second_sleep second_sleep: ; arguments_none ; line_number = 996 ; returns bit ; # This procedure will sleep for one second. ; line_number = 1000 ; local count1 byte second_sleep__count1 equ globals___0+64 ; line_number = 1001 ; local count2 byte second_sleep__count2 equ globals___0+65 ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 1003 ; _rcif := 0 bcf _rcif___byte, _rcif___bit ; line_number = 1004 ; _rcreg := 0 movlw 0 movwf _rcreg ; line_number = 1005 ; loop_exactly 100 start second_sleep__1 equ globals___0+77 movlw 100 movwf second_sleep__1 second_sleep__2: ; line_number = 1006 ; loop_exactly 100 start second_sleep__3 equ globals___0+78 movlw 100 movwf second_sleep__3 second_sleep__4: ; line_number = 1007 ; delay 500 start ; Delay expression evaluates to 500 ; line_number = 1008 ; if _rcif start ; Delay at if is 0 ; =>bit_code_emit@symbol(): sym=_rcif ; CASE: true_code.size = 0 && false_code.size > 1 btfsc _rcif___byte, _rcif___bit goto second_sleep__5 ; Delay 2 cycles goto second_sleep__7 second_sleep__7: goto second_sleep__6 second_sleep__5: ; line_number = 1009 ; return 1 start ; line_number = 1009 ; Delay at expression return is 0 bsf second_sleep__0return___byte, second_sleep__0return___bit return ; line_number = 1009 ; return 1 done second_sleep__6: ; <=bit_code_emit@symbol; sym=_rcif (data:00=>00 code:11=>11) ; if final true delay=3 false delay=0 code delay=6 ; line_number = 1008 ; if _rcif done ; line_number = 1010 ; if sleep_count != 255 start ; Delay at if is 6 ; Left minus Right incf sleep_count,w ; =>bit_code_emit@symbol(): sym=__z ; CASE: true_code.size=0 && false_code.size=1 btfss __z___byte, __z___bit ; line_number = 1011 ; sleep_count := sleep_count + 1 ; Delay at assignment is 0 incf sleep_count,f ; <=bit_code_emit@symbol; sym=__z (data:00=>00 code:11=>11) ; Uniform delay broke in relation_code_emit ; if final true delay=1 false delay=0 code delay=9 ; line_number = 1010 ; if sleep_count != 255 done ; Delay 491 cycles ; Delay loop takes 122 * 4 = 488 cycles movlw 122 second_sleep__8: addlw 255 btfss __z___byte, __z___bit goto second_sleep__8 goto second_sleep__9 second_sleep__9: nop ; line_number = 1007 ; delay 500 done ; line_number = 1006 ; loop_exactly 100 wrap-up decfsz second_sleep__3,f goto second_sleep__4 ; line_number = 1006 ; loop_exactly 100 done ; line_number = 1005 ; loop_exactly 100 wrap-up decfsz second_sleep__1,f goto second_sleep__2 ; line_number = 1005 ; loop_exactly 100 done ; line_number = 1012 ; return 0 start ; line_number = 1012 bcf second_sleep__0return___byte, second_sleep__0return___bit return ; line_number = 1012 ; return 0 done ; delay after procedure statements=non-uniform ; line_number = 1015 ; procedure delay delay: ; arguments_none ; line_number = 1017 ; returns_nothing ; line_number = 1018 ; exact_delay delay_instructions ; # Delay 1/3 of a bit: ; # Kick the dog: ; before procedure statements delay=0, bit states=(data:00=>00 code:11=>11) ; line_number = 1023 ; watch_dog_reset done ; Delay at watch_dog_reset is 0 clrwdt ; delay after procedure statements=1 ; Delay 683 cycles ; Delay loop takes 170 * 4 = 680 cycles movlw 170 delay__1: addlw 255 btfss __z___byte, __z___bit goto delay__1 goto delay__2 delay__2: nop ; Implied return retlw 0 ; Final delay = 686 ; line_number = 1026 ; string hello = "PICBrain11D\cr,lf\" start ; hello = 'PICBrain11D\13,10\' hello: ; Temporarily save index into FSR movwf __fsr ; Initialize PCLATH to point to this code page movlw hello___base>>8 movwf __pclath ; Restore index from FSR movf __fsr,w addlw hello___base ; Index to the correct return value movwf __pcl ; page_group 13 hello___base: retlw 80 retlw 73 retlw 67 retlw 66 retlw 114 retlw 97 retlw 105 retlw 110 retlw 49 retlw 49 retlw 68 retlw 13 retlw 10 ; line_number = 1026 ; string hello = "PICBrain11D\cr,lf\" start ; line_number = 1028 ; procedure in_out_registers in_out_registers: ; Last argument is sitting in W; save into argument variable movwf in_out_registers__socket ; delay=4294967295 ; line_number = 1029 ; argument socket byte in_out_registers__socket equ globals___0+66 ; line_number = 1030 ; returns byte ; # This procedure will return the register number to access for {socket}. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 1034 ; switch socket start movlw in_out_registers__12>>8 movwf __pclath movf in_out_registers__socket,w addlw in_out_registers__12 movwf __pcl ; page_group 11 in_out_registers__12: ; line_number = 1036 ; return n1_reg start ; line_number = 1036 retlw 1 ; line_number = 1036 ; return n1_reg done ; line_number = 1038 ; return n2_reg start ; line_number = 1038 retlw 0 ; line_number = 1038 ; return n2_reg done ; line_number = 1040 ; return n3_reg start ; line_number = 1040 retlw 1 ; line_number = 1040 ; return n3_reg done ; line_number = 1042 ; return n4_reg start ; line_number = 1042 retlw 0 ; line_number = 1042 ; return n4_reg done ; line_number = 1044 ; return n5_reg start ; line_number = 1044 retlw 1 ; line_number = 1044 ; return n5_reg done ; line_number = 1046 ; return n6_reg start ; line_number = 1046 retlw 0 ; line_number = 1046 ; return n6_reg done ; line_number = 1048 ; return n7_reg start ; line_number = 1048 retlw 1 ; line_number = 1048 ; return n7_reg done ; line_number = 1050 ; return n8_reg start ; line_number = 1050 retlw 2 ; line_number = 1050 ; return n8_reg done ; line_number = 1052 ; return n9_reg start ; line_number = 1052 retlw 2 ; line_number = 1052 ; return n9_reg done ; line_number = 1054 ; return n10_reg start ; line_number = 1054 retlw 2 ; line_number = 1054 ; return n10_reg done ; line_number = 1056 ; return n11_reg start ; line_number = 1056 retlw 2 ; line_number = 1056 ; return n11_reg done in_out_registers__13: ; line_number = 1034 ; switch socket done ; line_number = 1057 ; return n_none start ; line_number = 1057 retlw 11 ; line_number = 1057 ; return n_none done ; delay after procedure statements=non-uniform ; line_number = 1060 ; procedure in_masks in_masks: ; Last argument is sitting in W; save into argument variable movwf in_masks__socket ; delay=4294967295 ; line_number = 1061 ; argument socket byte in_masks__socket equ globals___0+67 ; line_number = 1062 ; returns byte ; # This procedure will return the input mask for {socket}. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 1066 ; switch socket start movlw in_masks__12>>8 movwf __pclath movf in_masks__socket,w addlw in_masks__12 movwf __pcl ; page_group 11 in_masks__12: ; line_number = 1068 ; return n1in_mask start ; line_number = 1068 retlw 64 ; line_number = 1068 ; return n1in_mask done ; line_number = 1070 ; return n2in_mask start ; line_number = 1070 retlw 1 ; line_number = 1070 ; return n2in_mask done ; line_number = 1072 ; return n3in_mask start ; line_number = 1072 retlw 16 ; line_number = 1072 ; return n3in_mask done ; line_number = 1074 ; return n4in_mask start ; line_number = 1074 retlw 4 ; line_number = 1074 ; return n4in_mask done ; line_number = 1076 ; return n5in_mask start ; line_number = 1076 retlw 4 ; line_number = 1076 ; return n5in_mask done ; line_number = 1078 ; return n6in_mask start ; line_number = 1078 retlw 16 ; line_number = 1078 ; return n6in_mask done ; line_number = 1080 ; return n7in_mask start ; line_number = 1080 retlw 1 ; line_number = 1080 ; return n7in_mask done ; line_number = 1082 ; return n8in_mask start ; line_number = 1082 retlw 4 ; line_number = 1082 ; return n8in_mask done ; line_number = 1084 ; return n9in_mask start ; line_number = 1084 retlw 1 ; line_number = 1084 ; return n9in_mask done ; line_number = 1086 ; return n10in_mask start ; line_number = 1086 retlw 8 ; line_number = 1086 ; return n10in_mask done ; line_number = 1088 ; return n11in_mask start ; line_number = 1088 retlw 128 ; line_number = 1088 ; return n11in_mask done in_masks__13: ; line_number = 1066 ; switch socket done ; line_number = 1089 ; return 0 start ; line_number = 1089 retlw 0 ; line_number = 1089 ; return 0 done ; delay after procedure statements=non-uniform ; line_number = 1092 ; procedure out_masks out_masks: ; Last argument is sitting in W; save into argument variable movwf out_masks__socket ; delay=4294967295 ; line_number = 1093 ; argument socket byte out_masks__socket equ globals___0+68 ; line_number = 1094 ; returns byte ; # This procedure will return the output mask for {socket}. ; before procedure statements delay=non-uniform, bit states=(data:00=>00 code:11=>11) ; line_number = 1098 ; switch socket start movlw out_masks__12>>8 movwf __pclath movf out_masks__socket,w addlw out_masks__12 movwf __pcl ; page_group 11 out_masks__12: ; line_number = 1100 ; return n1out_mask start ; line_number = 1100 retlw 128 ; line_number = 1100 ; return n1out_mask done ; line_number = 1102 ; return n2out_mask start ; line_number = 1102 retlw 2 ; line_number = 1102 ; return n2out_mask done ; line_number = 1104 ; return n3out_mask start ; line_number = 1104 retlw 32 ; line_number = 1104 ; return n3out_mask done ; line_number = 1106 ; return n4out_mask start ; line_number = 1106 retlw 8 ; line_number = 1106 ; return n4out_mask done ; line_number = 1108 ; return n5out_mask start ; line_number = 1108 retlw 8 ; line_number = 1108 ; return n5out_mask done ; line_number = 1110 ; return n6out_mask start ; line_number = 1110 retlw 32 ; line_number = 1110 ; return n6out_mask done ; line_number = 1112 ; return n7out_mask start ; line_number = 1112 retlw 2 ; line_number = 1112 ; return n7out_mask done ; line_number = 1114 ; return n8out_mask start ; line_number = 1114 retlw 32 ; line_number = 1114 ; return n8out_mask done ; line_number = 1116 ; return n9out_mask start ; line_number = 1116 retlw 2 ; line_number = 1116 ; return n9out_mask done ; line_number = 1118 ; return n10out_mask start ; line_number = 1118 retlw 16 ; line_number = 1118 ; return n10out_mask done ; line_number = 1120 ; return n11out_mask start ; line_number = 1120 retlw 64 ; line_number = 1120 ; return n11out_mask done out_masks__13: ; line_number = 1098 ; switch socket done ; line_number = 1121 ; return 0 start ; line_number = 1121 retlw 0 ; line_number = 1121 ; return 0 done ; delay after procedure statements=non-uniform ; Configuration bits ; address = 0x2007, fill = 0x400 ; cp = off (0x3030) ; debug = off (0x800) ; wrt = on (0x200) ; cpd = off (0x100) ; lvp = off (0x0) ; boden = off (0x0) ; pwrte = off (0x8) ; wdte = off (0x0) ; fosc = hs (0x2) ; 16186 = 0x3f3a __config 16186 ; 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=79 Bits=7 Available=0 ; Region="globals___1" Address=160" Size=80 Bytes=2 Bits=0 Available=78 ; Region="globals___2" Address=272" Size=96 Bytes=16 Bits=0 Available=80 ; Region="globals___3" Address=400" Size=112 Bytes=0 Bits=0 Available=112 end