        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 288
__indf equ 0
__pcl equ 2
__status equ 3
__fsr equ 4
__c___byte equ 3
__c___bit equ 0
__z___byte equ 3
__z___bit equ 2
__rp0___byte equ 3
__rp0___bit equ 5
__rp1___byte equ 3
__rp1___bit equ 6
__irp___byte equ 3
__irp___bit equ 7
__pclath equ 10
__cb0___byte equ 10
__cb0___bit equ 3
__cb1___byte equ 10
__cb1___bit equ 4

        ; # Copyright (c) 2006-2012 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # This code implements the firmware for the MidiMotor1E.
        ; # The MidiMotor1E differs from the MidiMotor1 in that the '1E has
        ; # two extra connectors N2 and N4.  N2 is a 5 pin connector that can
        ; # be used to read in two channels of quardarature position (plus an
        ; # an index pulse.)  Alternatively, N2 can be used to read in an
        ; # analog signal between 0 and 5V for an absolute position.  N4 is
        ; # used as an active low limit switch that can be used to term off
        ; # the motor.
        ; #
        ; # The architecture of this firmware is actually pretty complicated.
        ; # The pulse width modulation is controlled by the Timer0 and Timer1
        ; # modules.  The quadrature encoding and limit switch is delt with
        ; # via some pins on Port A.  The UART is responsible for dealing
        ; # with RoboBricks2 bus I/O.  The A/D converter is responsible
        ; # for processing Analog to digital conversions.  The code in the
        ; # main loop is responsible for running a PID (Proportional,
        ; # Integral, Derivative) motor control loop.  The PID algorithm is
        ; # done using 32-bit floating point arithmetic.  Heavy use of interrupts
        ; # is used to ensure that everything works in a timely fashion.
        ; #
        ; # There are three main routines -- interrupt(), main() and uart_manage().
        ; # The interrupt() routine is responsible for processing all interrupt
        ; # events.  UART processing is sufficiently complicated, that UART input
        ; # is quickly stuffed into a temporary buffer, to minimize intterupt
        ; # latency.  Further UART process is handled by the uart_manage() routine.
        ; # Calls to the uart_manage() routine are sprinkled throught the main
        ; # loop in main() to ensure that any buffered uart commands are processed
        ; # fairly quickly.

        ; # We use the PIC16F688 for this module:
        ; buffer = 'midimotor1e'
        ; line_number = 36
        ; library _pic16f688 entered

        ; # Copyright (c) 2004-2006 by Wayne C. Gramlich
        ; # All rights reserved.

        ; buffer = '_pic16f688'
        ; line_number = 6
        ; processor pic16f688
        ; line_number = 7
        ; configure_address 0x2007
        ; line_number = 8
        ;  configure_fill 0x3000
        ; line_number = 9
        ;  configure_option fcmen: on = 0x800
        ; line_number = 10
        ;  configure_option fcmen: off = 0x000
        ; line_number = 11
        ;  configure_option ieso: on = 0x400
        ; line_number = 12
        ;  configure_option ieso: off = 0x000
        ; line_number = 13
        ;  configure_option boden: on = 0x300
        ; line_number = 14
        ;  configure_option boden: partial = 0x200
        ; line_number = 15
        ;  configure_option boden: sboden = 0x100
        ; line_number = 16
        ;  configure_option boden: off = 0x000
        ; line_number = 17
        ;  configure_option cpd: on = 0x00
        ; line_number = 18
        ;  configure_option cpd: off = 0x80
        ; line_number = 19
        ;  configure_option cp: on = 0x00
        ; line_number = 20
        ;  configure_option cp: off = 0x40
        ; line_number = 21
        ;  configure_option mclre: on = 0x20
        ; line_number = 22
        ;  configure_option mclre: off = 0x00
        ; line_number = 23
        ;  configure_option pwrte: on = 0x00
        ; line_number = 24
        ;  configure_option pwrte: off = 0x10
        ; line_number = 25
        ;  configure_option wdte: on = 8
        ; line_number = 26
        ;  configure_option wdte: off = 0
        ; line_number = 27
        ;  configure_option fosc: rc_clk = 7
        ; line_number = 28
        ;  configure_option fosc: rc_no_clk = 6
        ; line_number = 29
        ;  configure_option fosc: int_clk = 5
        ; line_number = 30
        ;  configure_option fosc: int_no_clk = 4
        ; line_number = 31
        ;  configure_option fosc: ec = 3
        ; line_number = 32
        ;  configure_option fosc: hs = 2
        ; line_number = 33
        ;  configure_option fosc: xt = 1
        ; line_number = 34
        ;  configure_option fosc: lp = 0

        ; line_number = 36
        ;  code_bank 0x0 : 0x7ff
        ; line_number = 37
        ;  code_bank 0x800 : 0xfff
        ; line_number = 38
        ;  data_bank 0x0 : 0x7f
        ; line_number = 39
        ;  data_bank 0x80 : 0xff
        ; line_number = 40
        ;  data_bank 0x100 : 0x17f
        ; line_number = 41
        ;  data_bank 0x180 : 0x1ff

        ; line_number = 43
        ;  global_region 0x20 : 0x6f
        ; line_number = 44
        ;  icd2_global_region 0x20 : 0x6f

        ; line_number = 46
        ;  global_region 0xa0 : 0xef
        ; line_number = 47
        ;  icd2_global_region 0xa0 : 0xef

        ; line_number = 49
        ;  global_region 0x120 : 0x16f
        ; line_number = 50
        ;  icd2_global_region 0x120 : 0x164

        ; line_number = 52
        ;  shared_region 0x70 : 0x7f
        ; line_number = 53
        ;  icd2_shared_region 0x71 : 0x7f

        ; line_number = 55
        ;  interrupts_possible
        ; line_number = 56
        ;  packages pdip=14, soic=14, tssop=14
        ; line_number = 57
        ;  pin vdd, power_supply
        ; line_number = 58
        ; pin_bindings pdip=1, soic=1, tssop=1
        ; line_number = 59
        ; pin ra5_in, ra5_nc, ra5_out, t1cki, osc1, clkin
        ; line_number = 60
        ; pin_bindings pdip=2, soic=2, tssop=2
        ; line_number = 61
        ;  bind_to _porta@5
        ; line_number = 62
        ;  or_if ra5_in _trisa 32
        ; line_number = 63
        ;  or_if ra5_nc _trisa 32
        ; line_number = 64
        ;  or_if ra5_out _trisa 0
        ; line_number = 65
        ;  or_if osc1 _trisa 32
        ; line_number = 66
        ; pin ra4_in, ra4_nc, ra4_out, t1g, osc2, an3, clkout
        ; line_number = 67
        ; pin_bindings pdip=3, soic=3, tssop=3
        ; line_number = 68
        ;  bind_to _porta@4
        ; line_number = 69
        ;  or_if ra4_in _trisa 16
        ; line_number = 70
        ;  or_if ra4_nc _trisa 16
        ; line_number = 71
        ;  or_if ra4_out _trisa 0
        ; line_number = 72
        ;  or_if an3 _trisa 16
        ; line_number = 73
        ;  or_if osc2 _trisa 16
        ; line_number = 74
        ;  or_if ra4_in _ansel 0
        ; line_number = 75
        ;  or_if ra4_out _ansel 0
        ; line_number = 76
        ;  or_if an3 _ansel 8
        ; line_number = 77
        ;  or_if ra4_in _adcon0 0
        ; line_number = 78
        ;  or_if ra4_out _adcon0 0
        ; line_number = 79
        ;  or_if an3 _adcon0 1
        ; line_number = 80
        ; pin ra3_in, ra3_nc, mclr, vpp
        ; line_number = 81
        ; pin_bindings pdip=4, soic=4, tssop=4
        ; line_number = 82
        ;  bind_to _porta@3
        ; line_number = 83
        ;  or_if ra3_in _trisa 8
        ; line_number = 84
        ;  or_if ra3_nc _trisa 8
        ; line_number = 85
        ; pin rc5_in, rc5_nc, rc5_out, rx, dt
        ; line_number = 86
        ; pin_bindings pdip=5, soic=5, tssop=5
        ; line_number = 87
        ;  bind_to _portc@5
        ; line_number = 88
        ;  or_if rc5_in _trisc 32
        ; line_number = 89
        ;  or_if rc5_nc _trisc 32
        ; line_number = 90
        ;  or_if rc5_out _trisc 0
        ; line_number = 91
        ;  or_if rx _trisc 32
        ; line_number = 92
        ; pin rc4_in, rc4_nc, rc4_out, c2out, tx, ck
        ; line_number = 93
        ; pin_bindings pdip=6, soic=6, tssop=6
        ; line_number = 94
        ;  bind_to _portc@4
        ; line_number = 95
        ;  or_if rc4_in _trisc 16
        ; line_number = 96
        ;  or_if rc4_nc _trisc 16
        ; line_number = 97
        ;  or_if rc4_out _trisc 0
        ; # The UART documentation says TX must be marked as in input:
        ; line_number = 99
        ;  or_if tx _trisc 16
        ; line_number = 100
        ; pin rc3_in, rc3_nc, rc3_out, an7
        ; line_number = 101
        ; pin_bindings pdip=7, soic=7, tssop=7
        ; line_number = 102
        ;  bind_to _portc@3
        ; line_number = 103
        ;  or_if rc3_in _trisc 8
        ; line_number = 104
        ;  or_if rc3_nc _trisc 8
        ; line_number = 105
        ;  or_if rc3_out _trisc 0
        ; line_number = 106
        ;  or_if an7 _trisc 8
        ; line_number = 107
        ;  or_if rc3_in _ansel 0
        ; line_number = 108
        ;  or_if rc3_out _ansel 0
        ; line_number = 109
        ;  or_if an7 _ansel 128
        ; line_number = 110
        ;  or_if rc3_in _adcon0 0
        ; line_number = 111
        ;  or_if rc3_out _adcon0 0
        ; line_number = 112
        ;  or_if an7 _adcon0 1
        ; line_number = 113
        ; pin rc2_in, rc2_nc, rc2_out, an6
        ; line_number = 114
        ; pin_bindings pdip=8, soic=8, tssop=8
        ; line_number = 115
        ;  bind_to _portc@2
        ; line_number = 116
        ;  or_if rc2_in _trisc 4
        ; line_number = 117
        ;  or_if rc2_nc _trisc 4
        ; line_number = 118
        ;  or_if rc2_out _trisc 0
        ; line_number = 119
        ;  or_if an6 _trisc 4
        ; line_number = 120
        ;  or_if rc2_in _ansel 0
        ; line_number = 121
        ;  or_if rc2_out _ansel 0
        ; line_number = 122
        ;  or_if an6 _ansel 64
        ; line_number = 123
        ;  or_if rc2_in _adcon0 0
        ; line_number = 124
        ;  or_if rc2_out _adcon0 0
        ; line_number = 125
        ;  or_if an6 _adcon0 1
        ; line_number = 126
        ; pin rc1_in, rc1_nc, rc1_out, an5, c2in_minus
        ; line_number = 127
        ; pin_bindings pdip=9, soic=9, tssop=9
        ; line_number = 128
        ;  bind_to _portc@1
        ; line_number = 129
        ;  or_if rc1_in _trisc 2
        ; line_number = 130
        ;  or_if rc1_nc _trisc 2
        ; line_number = 131
        ;  or_if rc1_out _trisc 0
        ; line_number = 132
        ;  or_if rc1_in _cmcon0 7
        ; line_number = 133
        ;  or_if rc1_out _cmcon0 7
        ; line_number = 134
        ;  or_if an5 _trisc 2
        ; line_number = 135
        ;  or_if rc1_in _ansel 0
        ; line_number = 136
        ;  or_if rc1_out _ansel 0
        ; line_number = 137
        ;  or_if an5 _ansel 32
        ; line_number = 138
        ;  or_if rc1_in _adcon0 0
        ; line_number = 139
        ;  or_if rc1_out _adcon0 0
        ; line_number = 140
        ;  or_if an5 _adcon0 1
        ; line_number = 141
        ; pin rc0_in, rc0_nc, rc0_out, an4, c2in_plus
        ; line_number = 142
        ; pin_bindings pdip=10, soic=10, tssop=10
        ; line_number = 143
        ;  bind_to _portc@0
        ; line_number = 144
        ;  or_if rc0_in _trisc 1
        ; line_number = 145
        ;  or_if rc0_nc _trisc 1
        ; line_number = 146
        ;  or_if rc0_out _trisc 0
        ; line_number = 147
        ;  or_if rc0_in _cmcon0 7
        ; line_number = 148
        ;  or_if rc0_out _cmcon0 7
        ; line_number = 149
        ;  or_if an4 _trisc 1
        ; line_number = 150
        ;  or_if rc0_in _ansel 0
        ; line_number = 151
        ;  or_if rc0_out _ansel 0
        ; line_number = 152
        ;  or_if an4 _ansel 16
        ; line_number = 153
        ;  or_if rc0_in _adcon0 0
        ; line_number = 154
        ;  or_if rc0_out _adcon0 0
        ; line_number = 155
        ;  or_if an4 _adcon0 1
        ; line_number = 156
        ; pin ra2_in, ra2_nc, ra2_out, an2, c1out, t0cki, int
        ; line_number = 157
        ; pin_bindings pdip=11, soic=11, tssop=11
        ; line_number = 158
        ;  bind_to _porta@2
        ; line_number = 159
        ;  or_if ra2_in _trisa 4
        ; line_number = 160
        ;  or_if ra2_nc _trisa 4
        ; line_number = 161
        ;  or_if ra2_out _trisa 0
        ; line_number = 162
        ;  or_if an2 _trisa 4
        ; line_number = 163
        ;  or_if ra2_in _ansel 0
        ; line_number = 164
        ;  or_if ra2_out _ansel 0
        ; line_number = 165
        ;  or_if an2 _ansel 4
        ; line_number = 166
        ;  or_if ra2_in _adcon0 0
        ; line_number = 167
        ;  or_if ra2_out _adcon0 0
        ; line_number = 168
        ;  or_if an2 _adcon0 1
        ; line_number = 169
        ; pin ra1_in, ra1_nc, ra1_out, an1, c1in_minus, vref, icspclk
        ; line_number = 170
        ; pin_bindings pdip=12, soic=12, tssop=12
        ; line_number = 171
        ;  bind_to _porta@1
        ; line_number = 172
        ;  or_if ra1_in _trisa 2
        ; line_number = 173
        ;  or_if ra1_nc _trisa 2
        ; line_number = 174
        ;  or_if ra1_out _trisa 0
        ; line_number = 175
        ;  or_if ra1_in _cmcon0 7
        ; line_number = 176
        ;  or_if ra1_out _cmcon0 7
        ; line_number = 177
        ;  or_if an1 _trisa 2
        ; line_number = 178
        ;  or_if vref _trisa 2
        ; line_number = 179
        ;  or_if ra1_in _ansel 0
        ; line_number = 180
        ;  or_if ra1_out _ansel 0
        ; line_number = 181
        ;  or_if an1 _ansel 2
        ; line_number = 182
        ;  or_if vref _ansel 2
        ; line_number = 183
        ;  or_if ra1_in _adcon0 0
        ; line_number = 184
        ;  or_if ra1_out _adcon0 0
        ; line_number = 185
        ;  or_if an1 _adcon0 1		# Turn on _addon
        ; line_number = 186
        ;  or_if vref _adcon0 1		# Turn on _addon
        ; line_number = 187
        ;  or_if vref _adcon0 64		# Turn of _vcfg
        ; line_number = 188
        ; pin ra0_in, ra0_nc, ra0_out, an0, c1in_plus, icspdat, ulpwu
        ; line_number = 189
        ; pin_bindings pdip=13, soic=13, tssop=13
        ; line_number = 190
        ;  bind_to _porta@0
        ; line_number = 191
        ;  or_if ra0_in _trisa 1
        ; line_number = 192
        ;  or_if ra0_nc _trisa 1
        ; line_number = 193
        ;  or_if ra0_out _trisa 0
        ; line_number = 194
        ;  or_if ra0_in _cmcon0 7
        ; line_number = 195
        ;  or_if ra0_out _cmcon0 7
        ; line_number = 196
        ;  or_if an0 _trisa 1
        ; line_number = 197
        ;  or_if ra0_in _ansel 0
        ; line_number = 198
        ;  or_if ra0_out _ansel 0
        ; line_number = 199
        ;  or_if an0 _ansel 1
        ; line_number = 200
        ;  or_if ra0_in _adcon0 0
        ; line_number = 201
        ;  or_if ra0_out _adcon0 0
        ; line_number = 202
        ;  or_if an0 _adcon0 1
        ; line_number = 203
        ; pin vss, ground
        ; line_number = 204
        ; pin_bindings pdip=14, soic=14, tssop=14

        ; line_number = 206
        ; library _standard entered

        ; # Copyright (c) 2006 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # Standard definition for uCL:

        ; buffer = '_standard'
        ; line_number = 8
        ; constant _true = (1 = 1)
_true equ 1
        ; line_number = 9
        ; constant _false = (0 != 0)
_false equ 0


        ; buffer = '_pic16f688'
        ; line_number = 206
        ; library _standard exited


        ; # Register/bit bindings:

        ; # Databank 0 (0x0 - 0x7f):

        ; line_number = 217
        ; register _indf = 
_indf equ 0

        ; line_number = 219
        ; register _tmr0 = 
_tmr0 equ 1

        ; line_number = 221
        ; register _pcl = 
_pcl equ 2

        ; line_number = 223
        ; register _status = 
_status equ 3
        ; line_number = 224
        ; bind _irp = _status@7
_irp___byte equ _status
_irp___bit equ 7
        ; line_number = 225
        ; bind _rp1 = _status@5
_rp1___byte equ _status
_rp1___bit equ 5
        ; line_number = 226
        ; bind _rp0 = _status@5
_rp0___byte equ _status
_rp0___bit equ 5
        ; line_number = 227
        ; bind _to = _status@4
_to___byte equ _status
_to___bit equ 4
        ; line_number = 228
        ; bind _pd = _status@3
_pd___byte equ _status
_pd___bit equ 3
        ; line_number = 229
        ; bind _z = _status@2
_z___byte equ _status
_z___bit equ 2
        ; line_number = 230
        ; bind _dc = _status@1
_dc___byte equ _status
_dc___bit equ 1
        ; line_number = 231
        ; bind _c = _status@0
_c___byte equ _status
_c___bit equ 0

        ; line_number = 233
        ; register _fsr = 
_fsr equ 4

        ; line_number = 235
        ; register _porta = 
_porta equ 5
        ; line_number = 236
        ; register _ra = 
_ra equ 5
        ; line_number = 237
        ; bind _ra5 = _porta@5
_ra5___byte equ _porta
_ra5___bit equ 5
        ; line_number = 238
        ; bind _ra4 = _porta@4
_ra4___byte equ _porta
_ra4___bit equ 4
        ; line_number = 239
        ; bind _ra3 = _porta@3
_ra3___byte equ _porta
_ra3___bit equ 3
        ; line_number = 240
        ; bind _ra2 = _porta@2
_ra2___byte equ _porta
_ra2___bit equ 2
        ; line_number = 241
        ; bind _ra1 = _porta@1
_ra1___byte equ _porta
_ra1___bit equ 1
        ; line_number = 242
        ; bind _ra0 = _porta@0
_ra0___byte equ _porta
_ra0___bit equ 0

        ; line_number = 244
        ; register _portc = 
_portc equ 7
        ; line_number = 245
        ; register _rc = 
_rc equ 7
        ; line_number = 246
        ; bind _rc5 = _portc@5
_rc5___byte equ _portc
_rc5___bit equ 5
        ; line_number = 247
        ; bind _rc4 = _portc@4
_rc4___byte equ _portc
_rc4___bit equ 4
        ; line_number = 248
        ; bind _rc3 = _portc@3
_rc3___byte equ _portc
_rc3___bit equ 3
        ; line_number = 249
        ; bind _rc2 = _portc@2
_rc2___byte equ _portc
_rc2___bit equ 2
        ; line_number = 250
        ; bind _rc1 = _portc@1
_rc1___byte equ _portc
_rc1___bit equ 1
        ; line_number = 251
        ; bind _rc0 = _portc@0
_rc0___byte equ _portc
_rc0___bit equ 0

        ; line_number = 253
        ; register _pclath = 
_pclath equ 10

        ; line_number = 255
        ; register _intcon = 
_intcon equ 11
        ; line_number = 256
        ; bind _gie = _intcon@7
_gie___byte equ _intcon
_gie___bit equ 7
        ; line_number = 257
        ; bind _peie = _intcon@6
_peie___byte equ _intcon
_peie___bit equ 6
        ; line_number = 258
        ; bind _t0ie = _intcon@5
_t0ie___byte equ _intcon
_t0ie___bit equ 5
        ; line_number = 259
        ; bind _inte = _intcon@4
_inte___byte equ _intcon
_inte___bit equ 4
        ; line_number = 260
        ; bind _raie = _intcon@3
_raie___byte equ _intcon
_raie___bit equ 3
        ; line_number = 261
        ; bind _t0if = _intcon@2
_t0if___byte equ _intcon
_t0if___bit equ 2
        ; line_number = 262
        ; bind _intf = _intcon@1
_intf___byte equ _intcon
_intf___bit equ 1
        ; line_number = 263
        ; bind _raif = _intcon@0
_raif___byte equ _intcon
_raif___bit equ 0

        ; line_number = 265
        ; register _pir1 = 
_pir1 equ 12
        ; line_number = 266
        ; bind _eeif = _pir1@7
_eeif___byte equ _pir1
_eeif___bit equ 7
        ; line_number = 267
        ; bind _adif = _pir1@6
_adif___byte equ _pir1
_adif___bit equ 6
        ; line_number = 268
        ; bind _rcif = _pir1@5
_rcif___byte equ _pir1
_rcif___bit equ 5
        ; line_number = 269
        ; bind _c2if = _pir1@4
_c2if___byte equ _pir1
_c2if___bit equ 4
        ; line_number = 270
        ; bind _c1if = _pir1@3
_c1if___byte equ _pir1
_c1if___bit equ 3
        ; line_number = 271
        ; bind _osfif = _pir1@2
_osfif___byte equ _pir1
_osfif___bit equ 2
        ; line_number = 272
        ; bind _txif = _pir1@1
_txif___byte equ _pir1
_txif___bit equ 1
        ; line_number = 273
        ; bind _tmr1if = _pir1@0
_tmr1if___byte equ _pir1
_tmr1if___bit equ 0

        ; line_number = 275
        ; register _tmr1l = 
_tmr1l equ 14

        ; line_number = 277
        ; register _tmr1h = 
_tmr1h equ 15

        ; line_number = 279
        ; register _t1con = 
_t1con equ 16
        ; line_number = 280
        ; bind t1ginv = _t1con@7
t1ginv___byte equ _t1con
t1ginv___bit equ 7
        ; line_number = 281
        ; bind _tmr1ge = _t1con@6
_tmr1ge___byte equ _t1con
_tmr1ge___bit equ 6
        ; line_number = 282
        ; bind _t1ckps1 = _t1con@5
_t1ckps1___byte equ _t1con
_t1ckps1___bit equ 5
        ; line_number = 283
        ; bind _t1ckps0 = _t1con@4
_t1ckps0___byte equ _t1con
_t1ckps0___bit equ 4
        ; line_number = 284
        ; bind _t1oscen = _t1con@3
_t1oscen___byte equ _t1con
_t1oscen___bit equ 3
        ; line_number = 285
        ; bind _t1sync = _t1con@2
_t1sync___byte equ _t1con
_t1sync___bit equ 2
        ; line_number = 286
        ; bind _tmr1cs = _t1con@1
_tmr1cs___byte equ _t1con
_tmr1cs___bit equ 1
        ; line_number = 287
        ; bind _tmr1on = _t1con@0
_tmr1on___byte equ _t1con
_tmr1on___bit equ 0

        ; line_number = 289
        ; register _baudctl = 
_baudctl equ 17
        ; line_number = 290
        ; bind _abdovf = _baudctl@7
_abdovf___byte equ _baudctl
_abdovf___bit equ 7
        ; line_number = 291
        ; bind _rcidl = _baudctl@6
_rcidl___byte equ _baudctl
_rcidl___bit equ 6
        ; line_number = 292
        ; bind _sckp = _baudctl@4
_sckp___byte equ _baudctl
_sckp___bit equ 4
        ; line_number = 293
        ; bind _brg16 = _baudctl@3
_brg16___byte equ _baudctl
_brg16___bit equ 3
        ; line_number = 294
        ; bind _wue = _baudctl@1
_wue___byte equ _baudctl
_wue___bit equ 1
        ; line_number = 295
        ; bind _abden = _baudctl@0
_abden___byte equ _baudctl
_abden___bit equ 0

        ; line_number = 297
        ; register _spbrgh = 
_spbrgh equ 18

        ; line_number = 299
        ; register _spbrg = 
_spbrg equ 19

        ; line_number = 301
        ; register _rcreg = 
_rcreg equ 20

        ; line_number = 303
        ; register _txreg = 
_txreg equ 21

        ; line_number = 305
        ; register _txsta = 
_txsta equ 22
        ; line_number = 306
        ; bind _csrc = _txsta@7
_csrc___byte equ _txsta
_csrc___bit equ 7
        ; line_number = 307
        ; bind _tx9 = _txsta@6
_tx9___byte equ _txsta
_tx9___bit equ 6
        ; line_number = 308
        ; bind _txen = _txsta@5
_txen___byte equ _txsta
_txen___bit equ 5
        ; line_number = 309
        ; bind _sync = _txsta@4
_sync___byte equ _txsta
_sync___bit equ 4
        ; line_number = 310
        ; bind _sendb = _txsta@3
_sendb___byte equ _txsta
_sendb___bit equ 3
        ; line_number = 311
        ; bind _brgh = _txsta@2
_brgh___byte equ _txsta
_brgh___bit equ 2
        ; line_number = 312
        ; bind _trmt = _txsta@1
_trmt___byte equ _txsta
_trmt___bit equ 1
        ; line_number = 313
        ; bind _tx9d = _txsta@0
_tx9d___byte equ _txsta
_tx9d___bit equ 0

        ; line_number = 315
        ; register _rcsta = 
_rcsta equ 23
        ; line_number = 316
        ; bind _spen = _rcsta@7
_spen___byte equ _rcsta
_spen___bit equ 7
        ; line_number = 317
        ; bind _rx9 = _rcsta@6
_rx9___byte equ _rcsta
_rx9___bit equ 6
        ; line_number = 318
        ; bind _sren = _rcsta@5
_sren___byte equ _rcsta
_sren___bit equ 5
        ; line_number = 319
        ; bind _cren = _rcsta@4
_cren___byte equ _rcsta
_cren___bit equ 4
        ; line_number = 320
        ; bind _adden = _rcsta@3
_adden___byte equ _rcsta
_adden___bit equ 3
        ; line_number = 321
        ; bind _ferr = _rcsta@2
_ferr___byte equ _rcsta
_ferr___bit equ 2
        ; line_number = 322
        ; bind _oerr = _rcsta@1
_oerr___byte equ _rcsta
_oerr___bit equ 1
        ; line_number = 323
        ; bind _rx9d = _rcsta@0
_rx9d___byte equ _rcsta
_rx9d___bit equ 0

        ; line_number = 325
        ; register _wdtcon = 
_wdtcon equ 24
        ; line_number = 326
        ; bind _wdtps3 = _wdtcon@4
_wdtps3___byte equ _wdtcon
_wdtps3___bit equ 4
        ; line_number = 327
        ; bind _wdtps2 = _wdtcon@3
_wdtps2___byte equ _wdtcon
_wdtps2___bit equ 3
        ; line_number = 328
        ; bind _wdtps1 = _wdtcon@2
_wdtps1___byte equ _wdtcon
_wdtps1___bit equ 2
        ; line_number = 329
        ; bind _wdtps0 = _wdtcon@1
_wdtps0___byte equ _wdtcon
_wdtps0___bit equ 1
        ; line_number = 330
        ; bind _swdten = _wdtcon@0
_swdten___byte equ _wdtcon
_swdten___bit equ 0

        ; line_number = 332
        ; register _cmcon0 = 
_cmcon0 equ 25
        ; line_number = 333
        ; bind _c1out = _cmcon0@7
_c1out___byte equ _cmcon0
_c1out___bit equ 7
        ; line_number = 334
        ; bind _c2out = _cmcon0@6
_c2out___byte equ _cmcon0
_c2out___bit equ 6
        ; line_number = 335
        ; bind _c1inv = _cmcon0@5
_c1inv___byte equ _cmcon0
_c1inv___bit equ 5
        ; line_number = 336
        ; bind _c2inv = _cmcon0@4
_c2inv___byte equ _cmcon0
_c2inv___bit equ 4
        ; line_number = 337
        ; bind _cis = _cmcon0@3
_cis___byte equ _cmcon0
_cis___bit equ 3
        ; line_number = 338
        ; bind _cm2 = _cmcon0@2
_cm2___byte equ _cmcon0
_cm2___bit equ 2
        ; line_number = 339
        ; bind _cm1 = _cmcon0@1
_cm1___byte equ _cmcon0
_cm1___bit equ 1
        ; line_number = 340
        ; bind _cm0 = _cmcon0@0
_cm0___byte equ _cmcon0
_cm0___bit equ 0

        ; line_number = 342
        ; register _cmcon1 = 
_cmcon1 equ 26
        ; line_number = 343
        ; bind _t1gss = _cmcon1@0
_t1gss___byte equ _cmcon1
_t1gss___bit equ 0
        ; line_number = 344
        ; bind _c2sync = _cmcon1@1
_c2sync___byte equ _cmcon1
_c2sync___bit equ 1

        ; line_number = 346
        ; register _adresh = 
_adresh equ 30

        ; line_number = 348
        ; register _adcon0 = 
_adcon0 equ 31
        ; line_number = 349
        ; bind _adfm = _adcon0@7
_adfm___byte equ _adcon0
_adfm___bit equ 7
        ; line_number = 350
        ; bind _vcfg = _adcon0@6
_vcfg___byte equ _adcon0
_vcfg___bit equ 6
        ; line_number = 351
        ; bind _chs2 = _adcon0@4
_chs2___byte equ _adcon0
_chs2___bit equ 4
        ; line_number = 352
        ; bind _chs1 = _adcon0@3
_chs1___byte equ _adcon0
_chs1___bit equ 3
        ; line_number = 353
        ; bind _chs0 = _adcon0@2
_chs0___byte equ _adcon0
_chs0___bit equ 2
        ; line_number = 354
        ; bind _go = _adcon0@1
_go___byte equ _adcon0
_go___bit equ 1
        ; line_number = 355
        ; bind _adon = _adcon0@0
_adon___byte equ _adcon0
_adon___bit equ 0

        ; # Data bank 1 (0x80-0xff):

        ; line_number = 359
        ; register _option_reg = 
_option_reg equ 129
        ; line_number = 360
        ; bind _rapu = _option_reg@7
_rapu___byte equ _option_reg
_rapu___bit equ 7
        ; line_number = 361
        ; bind _intedg = _option_reg@6
_intedg___byte equ _option_reg
_intedg___bit equ 6
        ; line_number = 362
        ; bind _t0cs = _option_reg@5
_t0cs___byte equ _option_reg
_t0cs___bit equ 5
        ; line_number = 363
        ; bind _t0se = _option_reg@4
_t0se___byte equ _option_reg
_t0se___bit equ 4
        ; line_number = 364
        ; bind _psa = _option_reg@3
_psa___byte equ _option_reg
_psa___bit equ 3
        ; line_number = 365
        ; bind _ps2 = _option_reg@2
_ps2___byte equ _option_reg
_ps2___bit equ 2
        ; line_number = 366
        ; bind _ps1 = _option_reg@1
_ps1___byte equ _option_reg
_ps1___bit equ 1
        ; line_number = 367
        ; bind _ps0 = _option_reg@0
_ps0___byte equ _option_reg
_ps0___bit equ 0

        ; line_number = 369
        ; register _trisa = 
_trisa equ 133
        ; line_number = 370
        ; bind _trisa5 = _trisa@5
_trisa5___byte equ _trisa
_trisa5___bit equ 5
        ; line_number = 371
        ; bind _trisa4 = _trisa@4
_trisa4___byte equ _trisa
_trisa4___bit equ 4
        ; line_number = 372
        ; bind _trisa3 = _trisa@3
_trisa3___byte equ _trisa
_trisa3___bit equ 3
        ; line_number = 373
        ; bind _trisa2 = _trisa@2
_trisa2___byte equ _trisa
_trisa2___bit equ 2
        ; line_number = 374
        ; bind _trisa1 = _trisa@1
_trisa1___byte equ _trisa
_trisa1___bit equ 1
        ; line_number = 375
        ; bind _trisa0 = _trisa@0
_trisa0___byte equ _trisa
_trisa0___bit equ 0

        ; line_number = 377
        ; register _trisc = 
_trisc equ 135
        ; line_number = 378
        ; bind _trisc5 = _trisc@5
_trisc5___byte equ _trisc
_trisc5___bit equ 5
        ; line_number = 379
        ; bind _trisc4 = _trisc@4
_trisc4___byte equ _trisc
_trisc4___bit equ 4
        ; line_number = 380
        ; bind _trisc3 = _trisc@3
_trisc3___byte equ _trisc
_trisc3___bit equ 3
        ; line_number = 381
        ; bind _trisc2 = _trisc@2
_trisc2___byte equ _trisc
_trisc2___bit equ 2
        ; line_number = 382
        ; bind _trisc1 = _trisc@1
_trisc1___byte equ _trisc
_trisc1___bit equ 1
        ; line_number = 383
        ; bind _trisc0 = _trisc@0
_trisc0___byte equ _trisc
_trisc0___bit equ 0

        ; line_number = 385
        ; register _pie1 = 
_pie1 equ 140
        ; line_number = 386
        ; bind _eeie = _pie1@7
_eeie___byte equ _pie1
_eeie___bit equ 7
        ; line_number = 387
        ; bind _adie = _pie1@6
_adie___byte equ _pie1
_adie___bit equ 6
        ; line_number = 388
        ; bind _rcie = _pie1@5
_rcie___byte equ _pie1
_rcie___bit equ 5
        ; line_number = 389
        ; bind _c2ie = _pie1@4
_c2ie___byte equ _pie1
_c2ie___bit equ 4
        ; line_number = 390
        ; bind _c1ie = _pie1@3
_c1ie___byte equ _pie1
_c1ie___bit equ 3
        ; line_number = 391
        ; bind _osfie = _pie1@2
_osfie___byte equ _pie1
_osfie___bit equ 2
        ; line_number = 392
        ; bind _txie = _pie1@1
_txie___byte equ _pie1
_txie___bit equ 1
        ; line_number = 393
        ; bind _tmr1ie = _pie1@0
_tmr1ie___byte equ _pie1
_tmr1ie___bit equ 0

        ; line_number = 395
        ; register _pcon = 
_pcon equ 142
        ; line_number = 396
        ; bind _ulpwue = _pcon@5
_ulpwue___byte equ _pcon
_ulpwue___bit equ 5
        ; line_number = 397
        ; bind _sboden = _pcon@4
_sboden___byte equ _pcon
_sboden___bit equ 4
        ; line_number = 398
        ; bind _por = _pcon@1
_por___byte equ _pcon
_por___bit equ 1
        ; line_number = 399
        ; bind _bod = _pcon@0
_bod___byte equ _pcon
_bod___bit equ 0

        ; line_number = 401
        ; register _osccon = 
_osccon equ 143
        ; line_number = 402
        ; bind _ircf2 = _osccon@6
_ircf2___byte equ _osccon
_ircf2___bit equ 6
        ; line_number = 403
        ; bind _ircf1 = _osccon@5
_ircf1___byte equ _osccon
_ircf1___bit equ 5
        ; line_number = 404
        ; bind _ircf0 = _osccon@4
_ircf0___byte equ _osccon
_ircf0___bit equ 4
        ; line_number = 405
        ; bind _osts = _osccon@3
_osts___byte equ _osccon
_osts___bit equ 3
        ; line_number = 406
        ; bind _hts = _osccon@2
_hts___byte equ _osccon
_hts___bit equ 2
        ; line_number = 407
        ; bind _lts = _osccon@3
_lts___byte equ _osccon
_lts___bit equ 3
        ; line_number = 408
        ; bind _scs = _osccon@2
_scs___byte equ _osccon
_scs___bit equ 2

        ; line_number = 410
        ; register _osctune = 
_osctune equ 144
        ; line_number = 411
        ; bind _tun4 = _osctune@4
_tun4___byte equ _osctune
_tun4___bit equ 4
        ; line_number = 412
        ; bind _tun3 = _osctune@3
_tun3___byte equ _osctune
_tun3___bit equ 3
        ; line_number = 413
        ; bind _tun2 = _osctune@2
_tun2___byte equ _osctune
_tun2___bit equ 2
        ; line_number = 414
        ; bind _tun1 = _osctune@1
_tun1___byte equ _osctune
_tun1___bit equ 1
        ; line_number = 415
        ; bind _tun0 = _osctune@0
_tun0___byte equ _osctune
_tun0___bit equ 0
        ; line_number = 416
        ; constant _osccal_lsb = 1
_osccal_lsb equ 1

        ; line_number = 418
        ; register _ansel = 
_ansel equ 145
        ; line_number = 419
        ; bind _ans7 = _ansel@7
_ans7___byte equ _ansel
_ans7___bit equ 7
        ; line_number = 420
        ; bind _ans6 = _ansel@6
_ans6___byte equ _ansel
_ans6___bit equ 6
        ; line_number = 421
        ; bind _ans5 = _ansel@5
_ans5___byte equ _ansel
_ans5___bit equ 5
        ; line_number = 422
        ; bind _ans4 = _ansel@4
_ans4___byte equ _ansel
_ans4___bit equ 4
        ; line_number = 423
        ; bind _ans3 = _ansel@3
_ans3___byte equ _ansel
_ans3___bit equ 3
        ; line_number = 424
        ; bind _ans2 = _ansel@2
_ans2___byte equ _ansel
_ans2___bit equ 2
        ; line_number = 425
        ; bind _ans1 = _ansel@1
_ans1___byte equ _ansel
_ans1___bit equ 1
        ; line_number = 426
        ; bind _ans0 = _ansel@0
_ans0___byte equ _ansel
_ans0___bit equ 0

        ; line_number = 428
        ; register _wpua = 
_wpua equ 149
        ; line_number = 429
        ; bind _wpua5 = _wpua@5
_wpua5___byte equ _wpua
_wpua5___bit equ 5
        ; line_number = 430
        ; bind _wpua4 = _wpua@4
_wpua4___byte equ _wpua
_wpua4___bit equ 4
        ; line_number = 431
        ; bind _wpua2 = _wpua@2
_wpua2___byte equ _wpua
_wpua2___bit equ 2
        ; line_number = 432
        ; bind _wpua1 = _wpua@1
_wpua1___byte equ _wpua
_wpua1___bit equ 1
        ; line_number = 433
        ; bind _wpua0 = _wpua@0
_wpua0___byte equ _wpua
_wpua0___bit equ 0

        ; line_number = 435
        ; register _ioca = 
_ioca equ 150
        ; line_number = 436
        ; bind _ioca5 = _ioca@5
_ioca5___byte equ _ioca
_ioca5___bit equ 5
        ; line_number = 437
        ; bind _ioca4 = _ioca@4
_ioca4___byte equ _ioca
_ioca4___bit equ 4
        ; line_number = 438
        ; bind _ioca3 = _ioca@3
_ioca3___byte equ _ioca
_ioca3___bit equ 3
        ; line_number = 439
        ; bind _ioca2 = _ioca@2
_ioca2___byte equ _ioca
_ioca2___bit equ 2
        ; line_number = 440
        ; bind _ioca1 = _ioca@1
_ioca1___byte equ _ioca
_ioca1___bit equ 1
        ; line_number = 441
        ; bind _ioca0 = _ioca@0
_ioca0___byte equ _ioca
_ioca0___bit equ 0

        ; line_number = 443
        ; register _eedath = 
_eedath equ 151

        ; line_number = 445
        ; register _eeadrh = 
_eeadrh equ 152

        ; line_number = 447
        ; register _vrcon = 
_vrcon equ 153
        ; line_number = 448
        ; bind _vren = _vrcon@7
_vren___byte equ _vrcon
_vren___bit equ 7
        ; line_number = 449
        ; bind _vrr = _vrcon@5
_vrr___byte equ _vrcon
_vrr___bit equ 5
        ; line_number = 450
        ; bind _vr3 = _vrcon@3
_vr3___byte equ _vrcon
_vr3___bit equ 3
        ; line_number = 451
        ; bind _vr2 = _vrcon@2
_vr2___byte equ _vrcon
_vr2___bit equ 2
        ; line_number = 452
        ; bind _vr1 = _vrcon@1
_vr1___byte equ _vrcon
_vr1___bit equ 1
        ; line_number = 453
        ; bind _vr0 = _vrcon@0
_vr0___byte equ _vrcon
_vr0___bit equ 0

        ; line_number = 455
        ; register _eedat = 
_eedat equ 154
        ; line_number = 456
        ; bind _eedat7 = _eedat@7
_eedat7___byte equ _eedat
_eedat7___bit equ 7
        ; line_number = 457
        ; bind _eedat6 = _eedat@6
_eedat6___byte equ _eedat
_eedat6___bit equ 6
        ; line_number = 458
        ; bind _eedat5 = _eedat@5
_eedat5___byte equ _eedat
_eedat5___bit equ 5
        ; line_number = 459
        ; bind _eedat4 = _eedat@4
_eedat4___byte equ _eedat
_eedat4___bit equ 4
        ; line_number = 460
        ; bind _eedat3 = _eedat@3
_eedat3___byte equ _eedat
_eedat3___bit equ 3
        ; line_number = 461
        ; bind _eedat2 = _eedat@2
_eedat2___byte equ _eedat
_eedat2___bit equ 2
        ; line_number = 462
        ; bind _eedat1 = _eedat@1
_eedat1___byte equ _eedat
_eedat1___bit equ 1
        ; line_number = 463
        ; bind _eedat0 = _eedat@0
_eedat0___byte equ _eedat
_eedat0___bit equ 0

        ; line_number = 465
        ; register _eeadr = 
_eeadr equ 155
        ; line_number = 466
        ; bind _eeadr7 = _eeadr@7
_eeadr7___byte equ _eeadr
_eeadr7___bit equ 7
        ; line_number = 467
        ; bind _eeadr6 = _eeadr@6
_eeadr6___byte equ _eeadr
_eeadr6___bit equ 6
        ; line_number = 468
        ; bind _eeadr5 = _eeadr@5
_eeadr5___byte equ _eeadr
_eeadr5___bit equ 5
        ; line_number = 469
        ; bind _eeadr4 = _eeadr@4
_eeadr4___byte equ _eeadr
_eeadr4___bit equ 4
        ; line_number = 470
        ; bind _eeadr3 = _eeadr@3
_eeadr3___byte equ _eeadr
_eeadr3___bit equ 3
        ; line_number = 471
        ; bind _eeadr2 = _eeadr@2
_eeadr2___byte equ _eeadr
_eeadr2___bit equ 2
        ; line_number = 472
        ; bind _eeadr1 = _eeadr@1
_eeadr1___byte equ _eeadr
_eeadr1___bit equ 1
        ; line_number = 473
        ; bind _eeadr0 = _eeadr@0
_eeadr0___byte equ _eeadr
_eeadr0___bit equ 0

        ; line_number = 475
        ; register _eecon1 = 
_eecon1 equ 156
        ; line_number = 476
        ; bind _eepgd = _eecon1@7
_eepgd___byte equ _eecon1
_eepgd___bit equ 7
        ; line_number = 477
        ; bind _wrerr = _eecon1@3
_wrerr___byte equ _eecon1
_wrerr___bit equ 3
        ; line_number = 478
        ; bind _wren = _eecon1@2
_wren___byte equ _eecon1
_wren___bit equ 2
        ; line_number = 479
        ; bind _wr = _eecon1@1
_wr___byte equ _eecon1
_wr___bit equ 1
        ; line_number = 480
        ; bind _rd = _eecon1@0
_rd___byte equ _eecon1
_rd___bit equ 0

        ; line_number = 482
        ; register _eecon2 = 
_eecon2 equ 157

        ; line_number = 484
        ; register _adresl = 
_adresl equ 158

        ; line_number = 486
        ; register _adcon1 = 
_adcon1 equ 159
        ; line_number = 487
        ; bind _adcs2 = _adcon1@6
_adcs2___byte equ _adcon1
_adcs2___bit equ 6
        ; line_number = 488
        ; bind _adcs1 = _adcon1@5
_adcs1___byte equ _adcon1
_adcs1___bit equ 5
        ; line_number = 489
        ; bind _adcs0 = _adcon1@4
_adcs0___byte equ _adcon1
_adcs0___bit equ 4

        ; # Data Bank 2 (0x100 - 0x17f):

        ; buffer = 'midimotor1e'
        ; line_number = 36
        ; library _pic16f688 exited

        ; # The module runs at 20MHz:
        ; line_number = 39
        ; 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 = 'midimotor1e'
        ; line_number = 39
        ; library clock20mhz exited

        ; # The {_eusart} module needs the following 2 constants defined
        ; # before inclusion:
        ; line_number = 43
        ; constant _eusart_clock = clock_rate
_eusart_clock equ 20000000
        ; line_number = 44
        ; constant _eusart_factor = 4
_eusart_factor equ 4
        ; line_number = 45
        ; library _eusart entered

        ; # Copyright (c) 2005 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # This library contains a bunch of definitions for the Enhanced Universal
        ; # Asynchronous Serial Receiver/Transmitter (EUSART) that is available
        ; # on many of the PIC microcontrollers.

        ; # In order to use this module you have to get two constants defined
        ; # BEFORE including this library -- {_eusart_factor} and {_eusart_clock}.
        ; # {_eusart_clock} should be set to the frequency oscillator for the chip.
        ; # {_eusart_factor} should be set to 4, 16, or 64 depending upon whether
        ; # the {_brg16} and {_brgh} bits are set.  Use the table below to select:
        ; #
        ; #        _{brg16}	{_brgh}		_{eusart_factor}
        ; #	    0		   0		      64
        ; #	    0		   1		      16
        ; #	    1		   0		      16
        ; #	    1		   1		       4

        ; # 2400 bits/sec:
        ; buffer = '_eusart'
        ; line_number = 23
        ; constant _eusart_2400 = (_eusart_clock / (2400 * _eusart_factor)) - 1
_eusart_2400 equ 2082
        ; line_number = 24
        ; constant _eusart_2400_low = _eusart_2400 & 0xff
_eusart_2400_low equ 34
        ; line_number = 25
        ; constant _eusart_2400_high = _eusart_2400 >> 8
_eusart_2400_high equ 8
        ; line_number = 26
        ; constant _eusart_2400_index = 0
_eusart_2400_index equ 0
        ; # 4800 bits/sec:
        ; line_number = 28
        ; constant _eusart_4800 = (_eusart_clock / (4800 * _eusart_factor)) - 1
_eusart_4800 equ 1040
        ; line_number = 29
        ; constant _eusart_4800_low = _eusart_4800 & 0xff
_eusart_4800_low equ 16
        ; line_number = 30
        ; constant _eusart_4800_high = _eusart_4800 >> 8
_eusart_4800_high equ 4
        ; line_number = 31
        ; constant _eusart_4800_index = 1
_eusart_4800_index equ 1
        ; # 9600 bits/sec:
        ; line_number = 33
        ; constant _eusart_9600 = (_eusart_clock / (9600 * _eusart_factor)) - 1
_eusart_9600 equ 519
        ; line_number = 34
        ; constant _eusart_9600_low = _eusart_9600 & 0xff
_eusart_9600_low equ 7
        ; line_number = 35
        ; constant _eusart_9600_high = _eusart_9600 >> 8
_eusart_9600_high equ 2
        ; line_number = 36
        ; constant _eusart_9600_index = 2
_eusart_9600_index equ 2
        ; # 19200 bits/sec:
        ; line_number = 38
        ; constant _eusart_19200 = (_eusart_clock / (19200 * _eusart_factor)) - 1
_eusart_19200 equ 259
        ; line_number = 39
        ; constant _eusart_19200_low = _eusart_19200 & 0xff
_eusart_19200_low equ 3
        ; line_number = 40
        ; constant _eusart_19200_high = _eusart_19200 >> 8
_eusart_19200_high equ 1
        ; line_number = 41
        ; constant _eusart_19200_index = 3
_eusart_19200_index equ 3
        ; # 38400 bits/sec:
        ; line_number = 43
        ; constant _eusart_38400 = (_eusart_clock / (38400 * _eusart_factor)) - 1
_eusart_38400 equ 129
        ; line_number = 44
        ; constant _eusart_38400_low = _eusart_38400 & 0xff
_eusart_38400_low equ 129
        ; line_number = 45
        ; constant _eusart_38400_high = _eusart_38400 >> 8
_eusart_38400_high equ 0
        ; line_number = 46
        ; constant _eusart_38400_index = 4
_eusart_38400_index equ 4
        ; # 57600 bits/sec:
        ; line_number = 48
        ; constant _eusart_57600 = (_eusart_clock / (57600 * _eusart_factor)) - 1
_eusart_57600 equ 85
        ; line_number = 49
        ; constant _eusart_57600_low = _eusart_57600 & 0xff
_eusart_57600_low equ 85
        ; line_number = 50
        ; constant _eusart_57600_high = _eusart_57600 >> 8
_eusart_57600_high equ 0
        ; line_number = 51
        ; constant _eusart_57600_index = 5
_eusart_57600_index equ 5
        ; # 115200 bits/sec:
        ; line_number = 53
        ; constant _eusart_115200 = (_eusart_clock / (115200 * _eusart_factor)) - 1
_eusart_115200 equ 42
        ; line_number = 54
        ; constant _eusart_115200_low = _eusart_115200 & 0xff
_eusart_115200_low equ 42
        ; line_number = 55
        ; constant _eusart_115200_high = _eusart_115200 >> 8
_eusart_115200_high equ 0
        ; line_number = 56
        ; constant _eusart_115200_index = 6
_eusart_115200_index equ 6
        ; # 203400 bits/sec:
        ; line_number = 58
        ; constant _eusart_230400 = (_eusart_clock / (230400 * _eusart_factor)) - 1
_eusart_230400 equ 20
        ; line_number = 59
        ; constant _eusart_230400_low = _eusart_230400 & 0xff
_eusart_230400_low equ 20
        ; line_number = 60
        ; constant _eusart_230400_high = _eusart_230400 >> 8
_eusart_230400_high equ 0
        ; line_number = 61
        ; constant _eusart_230400_index = 7
_eusart_230400_index equ 7
        ; # 406800 bits/sec:
        ; line_number = 63
        ; constant _eusart_460800 = (_eusart_clock / (460800 * _eusart_factor)) - 1
_eusart_460800 equ 9
        ; line_number = 64
        ; constant _eusart_460800_low = _eusart_460800 & 0xff
_eusart_460800_low equ 9
        ; line_number = 65
        ; constant _eusart_460800_high = _eusart_460800 >> 8
_eusart_460800_high equ 0
        ; line_number = 66
        ; constant _eusart_460800_index = 8
_eusart_460800_index equ 8
        ; # 500000 bits/sec:
        ; line_number = 68
        ; constant _eusart_500000 = (_eusart_clock / (500000 * _eusart_factor)) - 1
_eusart_500000 equ 9
        ; line_number = 69
        ; constant _eusart_500000_low = _eusart_500000 & 0xff
_eusart_500000_low equ 9
        ; line_number = 70
        ; constant _eusart_500000_high = _eusart_500000 >> 8
_eusart_500000_high equ 0
        ; line_number = 71
        ; constant _eusart_500000_index = 9
_eusart_500000_index equ 9
        ; # 576000 bits/sec (1MHz):
        ; line_number = 73
        ; constant _eusart_576000 = (_eusart_clock / (576000 * _eusart_factor)) - 1
_eusart_576000 equ 7
        ; line_number = 74
        ; constant _eusart_576000_low = _eusart_576000 & 0xff
_eusart_576000_low equ 7
        ; line_number = 75
        ; constant _eusart_576000_high = _eusart_576000 >> 8
_eusart_576000_high equ 0
        ; line_number = 76
        ; constant _eusart_576000_index = 10
_eusart_576000_index equ 10
        ; # 625000 bits/sec:
        ; line_number = 78
        ; constant _eusart_625000 = (_eusart_clock / (625000 * _eusart_factor)) - 1
_eusart_625000 equ 7
        ; line_number = 79
        ; constant _eusart_625000_low = _eusart_625000 & 0xff
_eusart_625000_low equ 7
        ; line_number = 80
        ; constant _eusart_625000_high = _eusart_625000 >> 8
_eusart_625000_high equ 0
        ; line_number = 81
        ; constant _eusart_625000_index = 11
_eusart_625000_index equ 11
        ; # 833333 bits/sec:
        ; line_number = 83
        ; constant _eusart_833333 = (_eusart_clock / (833333 * _eusart_factor)) - 1
_eusart_833333 equ 5
        ; line_number = 84
        ; constant _eusart_833333_low = _eusart_833333 & 0xff
_eusart_833333_low equ 5
        ; line_number = 85
        ; constant _eusart_833333_high = _eusart_833333 >> 8
_eusart_833333_high equ 0
        ; line_number = 86
        ; constant _eusart_833333_index = 12
_eusart_833333_index equ 12
        ; # 921600 bits/sec:
        ; line_number = 88
        ; constant _eusart_921600 = (_eusart_clock / (921600 * _eusart_factor)) - 1
_eusart_921600 equ 4
        ; line_number = 89
        ; constant _eusart_921600_low = _eusart_921600 & 0xff
_eusart_921600_low equ 4
        ; line_number = 90
        ; constant _eusart_921600_high = _eusart_921600 >> 8
_eusart_921600_high equ 0
        ; line_number = 91
        ; constant _eusart_921600_index = 13
_eusart_921600_index equ 13
        ; # 1000000 bits/sec (1MHz):
        ; line_number = 93
        ; constant _eusart_1000000 = (_eusart_clock / (1000000 * _eusart_factor)) - 1
_eusart_1000000 equ 4
        ; line_number = 94
        ; constant _eusart_1000000_low = _eusart_1000000 & 0xff
_eusart_1000000_low equ 4
        ; line_number = 95
        ; constant _eusart_1000000_high = _eusart_1000000 >> 8
_eusart_1000000_high equ 0
        ; line_number = 96
        ; constant _eusart_1000000_index = 14
_eusart_1000000_index equ 14

        ; buffer = 'midimotor1e'
        ; line_number = 45
        ; library _eusart exited

        ; line_number = 47
        ; constant microsecond = 5
microsecond equ 5

        ; line_number = 49
        ; library rb2_constants entered

        ; # Copyright (c) 2006-2007 by Wayne C. Gramlich.
        ; # All rights reserved.

        ; buffer = 'rb2_constants'
        ; line_number = 6
        ; constant rb2_ok = 0xa5
rb2_ok equ 165

        ; line_number = 8
        ; constant rb2_common_address_set = 0xfc
rb2_common_address_set equ 252
        ; line_number = 9
        ; constant rb2_common_id_next = 0xfd
rb2_common_id_next equ 253
        ; line_number = 10
        ; constant rb2_common_id_start = 0xfe
rb2_common_id_start equ 254
        ; line_number = 11
        ; constant rb2_common_deselect = 0xff
rb2_common_deselect equ 255

        ; line_number = 13
        ; constant rb2_laser1_address = 1
rb2_laser1_address equ 1
        ; line_number = 14
        ; constant rb2_laser1_sense_read = 0
rb2_laser1_sense_read equ 0
        ; line_number = 15
        ; constant rb2_laser1_enable_read = 1
rb2_laser1_enable_read equ 1
        ; line_number = 16
        ; constant rb2_laser1_enable_clear = 2
rb2_laser1_enable_clear equ 2
        ; line_number = 17
        ; constant rb2_laser1_enable_set = 3
rb2_laser1_enable_set equ 3

        ; line_number = 19
        ; constant rb2_minimotor2_address = 2
rb2_minimotor2_address equ 2
        ; line_number = 20
        ; constant rb2_midimotor2_address = 3
rb2_midimotor2_address equ 3
        ; line_number = 21
        ; constant rb2_motor0_speed_get = 0
rb2_motor0_speed_get equ 0
        ; line_number = 22
        ; constant rb2_motor0_speed_set = 1
rb2_motor0_speed_set equ 1
        ; line_number = 23
        ; constant rb2_motor1_speed_get = 2
rb2_motor1_speed_get equ 2
        ; line_number = 24
        ; constant rb2_motor1_speed_set = 3
rb2_motor1_speed_set equ 3
        ; line_number = 25
        ; constant rb2_duty_cycle_get = 4
rb2_duty_cycle_get equ 4
        ; line_number = 26
        ; constant rb2_duty_cycle_set = 8
rb2_duty_cycle_set equ 8

        ; line_number = 28
        ; constant rb2_irdistance2_address = 4
rb2_irdistance2_address equ 4
        ; line_number = 29
        ; constant rb2_irdistance2_raw0_get = 0
rb2_irdistance2_raw0_get equ 0
        ; line_number = 30
        ; constant rb2_irdistance2_raw1_get = 1
rb2_irdistance2_raw1_get equ 1
        ; line_number = 31
        ; constant rb2_irdistance2_smooth0_get = 2
rb2_irdistance2_smooth0_get equ 2
        ; line_number = 32
        ; constant rb2_irdistance2_smooth1_get = 3
rb2_irdistance2_smooth1_get equ 3
        ; line_number = 33
        ; constant rb2_irdistance2_linear0_get = 4
rb2_irdistance2_linear0_get equ 4
        ; line_number = 34
        ; constant rb2_irdistance2_linear1_get = 6
rb2_irdistance2_linear1_get equ 6

        ; line_number = 36
        ; constant rb2_shaft2_address = 5
rb2_shaft2_address equ 5
        ; line_number = 37
        ; constant rb2_shaft2_count_latch = 0
rb2_shaft2_count_latch equ 0
        ; line_number = 38
        ; constant rb2_shaft2_count_clear = 1
rb2_shaft2_count_clear equ 1
        ; line_number = 39
        ; constant rb2_shaft2_shaft0_high_get = 2
rb2_shaft2_shaft0_high_get equ 2
        ; line_number = 40
        ; constant rb2_shaft2_shaft1_high_get = 3
rb2_shaft2_shaft1_high_get equ 3
        ; line_number = 41
        ; constant rb2_shaft2_continue_get = 4
rb2_shaft2_continue_get equ 4
        ; line_number = 42
        ; constant rb2_shaft2_shaft0_low_get = rb2_shaft2_continue_get
rb2_shaft2_shaft0_low_get equ 4
        ; line_number = 43
        ; constant rb2_shaft2_shaft1_low_get = rb2_shaft2_continue_get
rb2_shaft2_shaft1_low_get equ 4
        ; line_number = 44
        ; constant rb2_shaft2_x_get = 0x10
rb2_shaft2_x_get equ 16
        ; line_number = 45
        ; constant rb2_shaft2_y_get = 0x11
rb2_shaft2_y_get equ 17
        ; line_number = 46
        ; constant rb2_shaft2_bearing16_get = 0x12
rb2_shaft2_bearing16_get equ 18
        ; line_number = 47
        ; constant rb2_shaft2_bearing8_get = 0x13
rb2_shaft2_bearing8_get equ 19
        ; line_number = 48
        ; constant rb2_shaft2_target_x_get = 0x14
rb2_shaft2_target_x_get equ 20
        ; line_number = 49
        ; constant rb2_shaft2_target_y_get = 0x15
rb2_shaft2_target_y_get equ 21
        ; line_number = 50
        ; constant rb2_shaft2_target_bearing16_get = 0x16
rb2_shaft2_target_bearing16_get equ 22
        ; line_number = 51
        ; constant rb2_shaft2_target_bearing8_get = 0x17
rb2_shaft2_target_bearing8_get equ 23
        ; line_number = 52
        ; constant rb2_shaft2_target_distance_get = 0x18
rb2_shaft2_target_distance_get equ 24
        ; line_number = 53
        ; constant rb2_shaft2_wheel_spacing_get = 0x19
rb2_shaft2_wheel_spacing_get equ 25
        ; line_number = 54
        ; constant rb2_shaft2_wheel_ticks_get = 0x1a
rb2_shaft2_wheel_ticks_get equ 26
        ; line_number = 55
        ; constant rb2_shaft2_wheel_diameter_get = 0x1b
rb2_shaft2_wheel_diameter_get equ 27
        ; line_number = 56
        ; constant rb2_shaft2_count_iteration_get = 0x1c
rb2_shaft2_count_iteration_get equ 28
        ; line_number = 57
        ; constant rb2_shaft2_counter_signs_get = 0x1d
rb2_shaft2_counter_signs_get equ 29
        ; line_number = 58
        ; constant rb2_shaft2_x_set = 0x20
rb2_shaft2_x_set equ 32
        ; line_number = 59
        ; constant rb2_shaft2_y_set = 0x21
rb2_shaft2_y_set equ 33
        ; line_number = 60
        ; constant rb2_shaft2_bearing16_set = 0x22
rb2_shaft2_bearing16_set equ 34
        ; line_number = 61
        ; constant rb2_shaft2_navigation_latch = 0x23
rb2_shaft2_navigation_latch equ 35
        ; line_number = 62
        ; constant rb2_shaft2_target_x_set = 0x24
rb2_shaft2_target_x_set equ 36
        ; line_number = 63
        ; constant rb2_shaft2_target_y_set = 0x25
rb2_shaft2_target_y_set equ 37
        ; line_number = 64
        ; constant rb2_shaft2_wheel_spacing_set = 0x29
rb2_shaft2_wheel_spacing_set equ 41
        ; line_number = 65
        ; constant rb2_shaft2_wheel_ticks_set = 0x2a
rb2_shaft2_wheel_ticks_set equ 42
        ; line_number = 66
        ; constant rb2_shaft2_wheel_diameter_set = 0x2b
rb2_shaft2_wheel_diameter_set equ 43
        ; line_number = 67
        ; constant rb2_shaft2_counter_signs_set = 0x2c
rb2_shaft2_counter_signs_set equ 44

        ; line_number = 69
        ; constant rb2_orient5_address = 6
rb2_orient5_address equ 6

        ; line_number = 71
        ; constant rb2_compass8_address = 7
rb2_compass8_address equ 7

        ; line_number = 73
        ; constant rb2_io8_address = 8
rb2_io8_address equ 8
        ; line_number = 74
        ; constant rb2_io8_digital8_get = 0
rb2_io8_digital8_get equ 0
        ; line_number = 75
        ; constant rb2_io8_digital8_set = 1
rb2_io8_digital8_set equ 1
        ; line_number = 76
        ; constant rb2_io8_direction_get = 2
rb2_io8_direction_get equ 2
        ; line_number = 77
        ; constant rb2_io8_direction_set = 3
rb2_io8_direction_set equ 3
        ; line_number = 78
        ; constant rb2_io8_analog_mask_get = 4
rb2_io8_analog_mask_get equ 4
        ; line_number = 79
        ; constant rb2_io8_analog_mask_set = 5
rb2_io8_analog_mask_set equ 5
        ; line_number = 80
        ; constant rb2_io8_analog8_get = 0x10
rb2_io8_analog8_get equ 16
        ; line_number = 81
        ; constant rb2_io8_analog10_get = 0x18
rb2_io8_analog10_get equ 24
        ; line_number = 82
        ; constant rb2_low_set = 0x20
rb2_low_set equ 32
        ; line_number = 83
        ; constant rb2_high_set = 0x30
rb2_high_set equ 48

        ; line_number = 85
        ; constant rb2_sonar2_address = 9
rb2_sonar2_address equ 9

        ; line_number = 87
        ; constant rb2_voice1_address = 10
rb2_voice1_address equ 10

        ; line_number = 89
        ; constant rb2_servo4_address = 11
rb2_servo4_address equ 11
        ; line_number = 90
        ; constant rb2_servo4_servo0 = 0
rb2_servo4_servo0 equ 0
        ; line_number = 91
        ; constant rb2_servo4_servo1 = 1
rb2_servo4_servo1 equ 1
        ; line_number = 92
        ; constant rb2_servo4_servo2 = 2
rb2_servo4_servo2 equ 2
        ; line_number = 93
        ; constant rb2_servo4_servo3 = 3
rb2_servo4_servo3 equ 3
        ; line_number = 94
        ; constant rb2_servo4_quick_set = 0
rb2_servo4_quick_set equ 0
        ; line_number = 95
        ; constant rb2_servo4_quick_low = 0
rb2_servo4_quick_low equ 0
        ; line_number = 96
        ; constant rb2_servo4_quick_center = 40
rb2_servo4_quick_center equ 40
        ; line_number = 97
        ; constant rb2_servo4_quick_high = 0x7c
rb2_servo4_quick_high equ 124
        ; line_number = 98
        ; constant rb2_servo4_high_low_set = 0x80
rb2_servo4_high_low_set equ 128
        ; line_number = 99
        ; constant rb2_servo4_short_high_low_set = 0x84
rb2_servo4_short_high_low_set equ 132
        ; line_number = 100
        ; constant rb2_servo4_high_set = 0x88
rb2_servo4_high_set equ 136
        ; line_number = 101
        ; constant rb2_servo4_low_set = 0x8c
rb2_servo4_low_set equ 140
        ; line_number = 102
        ; constant rb2_servo4_enables_set = 0x90
rb2_servo4_enables_set equ 144
        ; line_number = 103
        ; constant rb2_servo4_enable0 = 1
rb2_servo4_enable0 equ 1
        ; line_number = 104
        ; constant rb2_servo4_enable1 = 2
rb2_servo4_enable1 equ 2
        ; line_number = 105
        ; constant rb2_servo4_enable2 = 4
rb2_servo4_enable2 equ 4
        ; line_number = 106
        ; constant rb2_servo4_enable3 = 8
rb2_servo4_enable3 equ 8
        ; line_number = 107
        ; constant rb2_servo4_enable_all = 0xf
rb2_servo4_enable_all equ 15
        ; line_number = 108
        ; constant rb2_servo4_enable_none = 0
rb2_servo4_enable_none equ 0
        ; line_number = 109
        ; constant rb2_servo4_high_get = 0xa0
rb2_servo4_high_get equ 160
        ; line_number = 110
        ; constant rb2_servo4_low_get = 0xa4
rb2_servo4_low_get equ 164
        ; line_number = 111
        ; constant rb2_servo4_enables_get = 0xa8
rb2_servo4_enables_get equ 168

        ; line_number = 113
        ; constant rb2_controller28_address = 28
rb2_controller28_address equ 28

        ; line_number = 115
        ; constant rb2_lcd32_address = 32
rb2_lcd32_address equ 32
        ; line_number = 116
        ; constant rb2_lcd32_row_set = 4
rb2_lcd32_row_set equ 4
        ; line_number = 117
        ; constant rb2_lcd32_row0_set = rb2_lcd32_row_set | 0
rb2_lcd32_row0_set equ 4
        ; line_number = 118
        ; constant rb2_lcd32_row1_set = rb2_lcd32_row_set | 1
rb2_lcd32_row1_set equ 5
        ; line_number = 119
        ; constant rb2_lcd32_row2_set = rb2_lcd32_row_set | 2
rb2_lcd32_row2_set equ 6
        ; line_number = 120
        ; constant rb2_lcd32_row3_set = rb2_lcd32_row_set | 3
rb2_lcd32_row3_set equ 7
        ; line_number = 121
        ; constant rb2_lcd32_new_line = 0xa
rb2_lcd32_new_line equ 10
        ; line_number = 122
        ; constant rb2_lcd32_form_feed = 0xc
rb2_lcd32_form_feed equ 12
        ; line_number = 123
        ; constant rb2_lcd32_carriage_return = 0xd
rb2_lcd32_carriage_return equ 13
        ; line_number = 124
        ; constant rb2_lcd32_column_set = 0x10
rb2_lcd32_column_set equ 16


        ; buffer = 'midimotor1e'
        ; line_number = 49
        ; library rb2_constants exited

        ; # The module uses a 20MHz resonator; thus, the oscillator mode is HS:

        ; # Besides the bus RX/TX lines, only 4 other lines are used to
        ; # control the motor -- RC<0:3>:
        ; line_number = 56
        ; package pdip
        ; line_number = 57
        ; pin 1 = power_supply
        ; line_number = 58
        ;  pin 2 = osc1
        ; line_number = 59
        ;  pin 3 = osc2
        ; line_number = 60
        ;  pin 4 = ra3_nc
        ; line_number = 61
        ;  pin 5 = rx, name=rx, bit=rx_bit
rx___byte equ _portc
rx___bit equ 5
rx_bit equ 5
        ; line_number = 62
        ;  pin 6 = tx, name=tx, bit=tx_bit
tx___byte equ _portc
tx___bit equ 4
tx_bit equ 4
        ; line_number = 63
        ;  pin 7 = rc3_nc
        ; line_number = 64
        ;  pin 8 = rc2_nc
        ; line_number = 65
        ;  pin 9 = rc1_out, name=m1b, mask=m1b_mask, bit=m1b_bit
m1b___byte equ _portc
m1b___bit equ 1
m1b_mask equ 2
m1b_bit equ 1
        ; line_number = 66
        ;  pin 10 = rc0_out, name=m1a, mask=m1a_mask, bit=m1a_bit
m1a___byte equ _portc
m1a___bit equ 0
m1a_mask equ 1
m1a_bit equ 0
        ; line_number = 67
        ;  pin 11 = an2
        ; line_number = 68
        ;  pin 12 = ra1_in, name=quad_a, mask=quad_a_mask, bit=quad_a_bit
quad_a___byte equ _porta
quad_a___bit equ 1
quad_a_mask equ 2
quad_a_bit equ 1
        ; line_number = 69
        ;  pin 13 = ra0_in, name=quad_b, mask=quad_b_mask, bit=quad_b_bit
quad_b___byte equ _porta
quad_b___bit equ 0
quad_b_mask equ 1
quad_b_bit equ 0
        ; line_number = 70
        ;  pin 14 = ground

        ; # All of the 24-bit signed file24 in the 24-bit register file are stored
        ; # in the {highs}, {middles} and {lows} arrays:
        ; line_number = 74
        ; constant position_index = 0		# Current position
position_index equ 0
        ; line_number = 75
        ; constant target_index = 1		# Target position
target_index equ 1
        ; line_number = 76
        ; constant divisor_index = 2		# Denominator for {kp}, {ki}, and {kd}
divisor_index equ 2
        ; line_number = 77
        ; constant kp_index = 3			# Numerator for {kp}
kp_index equ 3
        ; line_number = 78
        ; constant ki_index = 4			# Numerator for {ki}
ki_index equ 4
        ; line_number = 79
        ; constant kd_index = 5			# Numerator for {kd}
kd_index equ 5
        ; line_number = 80
        ; constant ad0_value_index = 6		# AD0
ad0_value_index equ 6
        ; line_number = 81
        ; constant ad1_value_index = 7		# AD1
ad1_value_index equ 7
        ; line_number = 82
        ; constant ad0_limit_index = 8		# AD0
ad0_limit_index equ 8
        ; line_number = 83
        ; constant ad1_limit_index = 9		# AD1
ad1_limit_index equ 9
        ; line_number = 84
        ; constant file24_size = 10		# 24-bit register file has 6 registers
file24_size equ 10

        ; # We are short of bytes in data bank 0, so we stuff the 24-bit register
        ; # files off into data bank 2:
        ; line_number = 89
        ; global highs[file24_size] array[byte]	# All the highs are grouped together
highs equ globals___2
        ; line_number = 90
        ; global middles[file24_size] array[byte]	# All the middles are grouped together
middles equ globals___2+10
        ; line_number = 91
        ; global lows[file24_size] array[byte]	# All the lows are grouped together
lows equ globals___2+20

        ; # The quardarture is actually the same as the position:
        ; line_number = 94
        ; bind quad_high = highs[position_index]
quad_high equ globals___2
        ; line_number = 95
        ; bind quad_middle = middles[position_index]
quad_middle equ globals___2+10
        ; line_number = 96
        ; bind quad_low = lows[position_index]
quad_low equ globals___2+20
        ; line_number = 97
        ; global quad_state byte			# The quadrature state
quad_state equ globals___2+30

        ; line_number = 99
        ; bind ad0_value_high = highs[ad0_value_index]
ad0_value_high equ globals___2+6
        ; line_number = 100
        ; bind ad0_value_middle = middles[ad0_value_index]
ad0_value_middle equ globals___2+16
        ; line_number = 101
        ; bind ad0_value_low = lows[ad0_value_index]
ad0_value_low equ globals___2+26
        ; line_number = 102
        ; bind ad1_value_high = highs[ad1_value_index]
ad1_value_high equ globals___2+7
        ; line_number = 103
        ; bind ad1_value_middle = middles[ad1_value_index]
ad1_value_middle equ globals___2+17
        ; line_number = 104
        ; bind ad1_value_low = lows[ad1_value_index]
ad1_value_low equ globals___2+27

        ; line_number = 106
        ; bind ad0_limit_high = highs[ad0_limit_index]
ad0_limit_high equ globals___2+8
        ; line_number = 107
        ; bind ad0_limit_middle = middles[ad0_limit_index]
ad0_limit_middle equ globals___2+18
        ; line_number = 108
        ; bind ad0_limit_low = lows[ad0_limit_index]
ad0_limit_low equ globals___2+28
        ; line_number = 109
        ; bind ad1_limit_high = highs[ad1_limit_index]
ad1_limit_high equ globals___2+9
        ; line_number = 110
        ; bind ad1_limit_middle = middles[ad1_limit_index]
ad1_limit_middle equ globals___2+19
        ; line_number = 111
        ; bind ad1_limit_low = lows[ad1_limit_index]
ad1_limit_low equ globals___2+29

        ; # Temporarily removed to free up some space:
        ; #global xstates[32] array[byte]

        ; # Every else with the 24-bit register file24 is in data bank 0:
        ; line_number = 118
        ; global file24_changed byte		# 1 bit for each value to mark change
file24_changed equ globals___0
        ; line_number = 119
        ; global file24_zero byte			# 1 bit for each value set to zero
file24_zero equ globals___0+1

        ; # A number of places need a temporary for high, middle and low.  Rather
        ; # than chew up scarse memory, we share them all with globals.  As of now,
        ; # these bytes are used in {file24_float_convert}() and {uart_manage}():
        ; line_number = 124
        ; global high byte			# Temporary high byte
high equ globals___0+2
        ; line_number = 125
        ; global middle byte			# Temporary middle byte
middle equ globals___0+3
        ; line_number = 126
        ; global low byte				# Temporary low byte
low equ globals___0+4

        ; # The 8-bit register file is stored in {file8} and indexed using the
        ; # indices below:
        ; line_number = 130
        ; constant configure_index = 0		# Configuration byte index
configure_index equ 0
        ; line_number = 131
        ; constant status_index = 1		# Status byte index
status_index equ 1
        ; line_number = 132
        ; constant speed_index = 2		# Current motor speed index
speed_index equ 2
        ; line_number = 133
        ; constant errors_index = 3		# Error count
errors_index equ 3
        ; line_number = 134
        ; constant deadband_index = 4		# Deadband for error
deadband_index equ 4
        ; line_number = 135
        ; constant minimum_index = 5		# Motor (non-zero) speed minimum
minimum_index equ 5
        ; line_number = 136
        ; constant maximum_index = 6		# Motor speed maximum
maximum_index equ 6
        ; line_number = 137
        ; constant file24_index_index = 7		# Index into 24-bit register file
file24_index_index equ 7
        ; line_number = 138
        ; constant file8_size = 8			# We have 8 registers in {file8]
file8_size equ 8

        ; # These are the configure bits numbers:
        ; line_number = 141
        ; constant configure_motor_reverse_bit = 0    # Motor reverse bit
configure_motor_reverse_bit equ 0
        ; line_number = 142
        ; constant configure_position_reverse_bit = 1 # Position sensor reverse bit
configure_position_reverse_bit equ 1
        ; line_number = 143
        ; constant configure_quadrature_bit = 2	    # Quadrature disable bit
configure_quadrature_bit equ 2
        ; line_number = 144
        ; constant configure_lock_bit = 3		    # Lock configuration registers
configure_lock_bit equ 3
        ; line_number = 145
        ; constant configure_analog1_reverse_bit = 4  # Reverse analog1 sense direction
configure_analog1_reverse_bit equ 4
        ; line_number = 146
        ; constant configure_analog1_enable_bit = 5   # Reverse analog1 enable
configure_analog1_enable_bit equ 5
        ; line_number = 147
        ; constant configure_analog0_reverse_bit = 6  # Reverse analog0 sense direction
configure_analog0_reverse_bit equ 6
        ; line_number = 148
        ; constant configure_analog0_enable_bit = 7   # Reverse analog0 enable
configure_analog0_enable_bit equ 7

        ; # Associated analog masks:
        ; line_number = 151
        ; constant configure_motor_reverse_mask = 1 << configure_motor_reverse_bit
configure_motor_reverse_mask equ 1
        ; line_number = 152
        ; constant configure_position_reverse_mask = 1 << configure_position_reverse_bit
configure_position_reverse_mask equ 2
        ; line_number = 153
        ; constant configure_quadrature_mask = 1 << configure_quadrature_bit
configure_quadrature_mask equ 4
        ; line_number = 154
        ; constant configure_analog1_reverse_mask = 1 << configure_analog1_reverse_bit
configure_analog1_reverse_mask equ 16
        ; line_number = 155
        ; constant configure_analog1_enable_mask = 1 << configure_analog1_enable_bit
configure_analog1_enable_mask equ 32
        ; line_number = 156
        ; constant configure_analog0_reverse_mask = 1 << configure_analog0_reverse_bit
configure_analog0_reverse_mask equ 64
        ; line_number = 157
        ; constant configure_analog0_enable_mask = 1 << configure_analog0_enable_bit
configure_analog0_enable_mask equ 128
        ; line_number = 158
        ; constant configure_analogs_enabled_mask = configure_analog0_enable_mask | configure_analog1_enable_mask 
configure_analogs_enabled_mask equ 160

        ; # Here is the actual array of {file8}:
        ; line_number = 162
        ; global file8[file8_size] array[byte]
file8 equ globals___0+5

        ; # It is a hassle to always index into {file8}, we use binds to make
        ; # the code more readable:
        ; line_number = 166
        ; bind configure = file8[configure_index]
configure equ globals___0+5
        ; line_number = 167
        ; bind motor_reverse = configure@configure_motor_reverse_bit
motor_reverse___byte equ globals___0+5
motor_reverse___bit equ 0
        ; line_number = 168
        ; bind position_reverse = configure@configure_position_reverse_bit
position_reverse___byte equ globals___0+5
position_reverse___bit equ 1
        ; line_number = 169
        ; bind use_potentiometer = configure@configure_quadrature_bit
use_potentiometer___byte equ globals___0+5
use_potentiometer___bit equ 2
        ; line_number = 170
        ; bind configure_lock = configure@configure_lock_bit
configure_lock___byte equ globals___0+5
configure_lock___bit equ 3
        ; line_number = 171
        ; bind ad0_reverse = configure@configure_analog0_reverse_bit
ad0_reverse___byte equ globals___0+5
ad0_reverse___bit equ 6
        ; line_number = 172
        ; bind ad0_enable = configure@configure_analog0_enable_bit
ad0_enable___byte equ globals___0+5
ad0_enable___bit equ 7
        ; line_number = 173
        ; bind ad1_reverse = configure@configure_analog0_reverse_bit
ad1_reverse___byte equ globals___0+5
ad1_reverse___bit equ 6
        ; line_number = 174
        ; bind ad1_enable = configure@configure_analog1_enable_bit
ad1_enable___byte equ globals___0+5
ad1_enable___bit equ 5
        ; line_number = 175
        ; bind status = file8[status_index]
status equ globals___0+6
        ; line_number = 176
        ; bind speed = file8[speed_index]
speed equ globals___0+7
        ; line_number = 177
        ; bind errors = file8[errors_index]
errors equ globals___0+8
        ; line_number = 178
        ; bind deadband = file8[deadband_index]
deadband equ globals___0+9
        ; line_number = 179
        ; bind minimum = file8[minimum_index]
minimum equ globals___0+10
        ; line_number = 180
        ; bind maximum = file8[maximum_index]
maximum equ globals___0+11
        ; line_number = 181
        ; bind file24_index = file8[file24_index_index]
file24_index equ globals___0+12

        ; # These are the variables used to control motor1:
        ; line_number = 184
        ; global motor1_speed byte
motor1_speed equ globals___0+13
        ; line_number = 185
        ; global motor1_on_mask byte
motor1_on_mask equ globals___0+14
        ; line_number = 186
        ; global motor1_pulse_width byte
motor1_pulse_width equ globals___0+15

        ; # UART Globals and constants:

        ; line_number = 190
        ; global state byte			# State machine for command parsing
state equ globals___0+16
        ; line_number = 191
        ; constant state_select_wait = 0		# Waiting for a select address
state_select_wait equ 0
        ; line_number = 192
        ; constant state_echo_then_command = 1	# Wait for echo then a command
state_echo_then_command equ 1
        ; line_number = 193
        ; constant state_command = 2		# Wait for a command
state_command equ 2
        ; line_number = 194
        ; constant state_file24_full_get1 = 3
state_file24_full_get1 equ 3
        ; line_number = 195
        ; constant state_file24_full_get2 = 4
state_file24_full_get2 equ 4
        ; line_number = 196
        ; constant state_file24_full_set1 = 5
state_file24_full_set1 equ 5
        ; line_number = 197
        ; constant state_file24_full_set2 = 6
state_file24_full_set2 equ 6
        ; line_number = 198
        ; constant state_file24_full_set3 = 7
state_file24_full_set3 equ 7
        ; line_number = 199
        ; constant state_value_low_set1 = 8
state_value_low_set1 equ 8
        ; line_number = 200
        ; constant state_value_middle_set1 = 9
state_value_middle_set1 equ 9
        ; line_number = 201
        ; constant state_value_high_set1 = 10
state_value_high_set1 equ 10
        ; line_number = 202
        ; constant state_file8_set1 = 11
state_file8_set1 equ 11
        ; line_number = 203
        ; constant state_file8_set2 = 12
state_file8_set2 equ 12
        ; line_number = 204
        ; constant state_file8_set3 = 13
state_file8_set3 equ 13
        ; line_number = 205
        ; constant state_address_set1 = 14
state_address_set1 equ 14
        ; line_number = 206
        ; constant state_address_set2 = 15
state_address_set2 equ 15
        ; line_number = 207
        ; constant state_address_set3 = 16
state_address_set3 equ 16
        ; line_number = 208
        ; constant state_address_set4 = 17
state_address_set4 equ 17
        ; line_number = 209
        ; constant state_probe_get1 = 18
state_probe_get1 equ 18
        ; line_number = 210
        ; constant state_probe_get2 = 19
state_probe_get2 equ 19

        ; line_number = 212
        ; global id_index byte			# Index into id string
id_index equ globals___0+17

        ; # UART data input buffer:
        ; line_number = 215
        ; constant uart_input_size = 4			# Buffer size (=power of 2)
uart_input_size equ 4
        ; line_number = 216
        ; constant uart_input_mask = uart_input_size - 1	# Mask for index
uart_input_mask equ 3
        ; line_number = 217
        ; global uart_input[uart_input_size] array[byte]	# Buffer for input
uart_input equ globals___0+18
        ; line_number = 218
        ; global uart_input_in_index byte			# Next index to insert into
uart_input_in_index equ globals___0+22
        ; line_number = 219
        ; global uart_input_out_index byte		# Next index to remove from
uart_input_out_index equ globals___0+23
        ; line_number = 220
        ; global uart_input_count byte			# Bytes in buffer
uart_input_count equ globals___0+24
        ; line_number = 221
        ; global uart_input_pending bit			# 1=>data is pending; 0=>no data
uart_input_pending___byte equ globals___0+79
uart_input_pending___bit equ 0

        ; line_number = 223
        ; global address byte			# Address of this module
address equ globals___0+25
        ; line_number = 224
        ; global new_address byte			# New address of this module
new_address equ globals___0+26
        ; line_number = 225
        ; global channel byte			# A/D channel
channel equ globals___0+27

        ; # Load up floating point library in code bank 1 using datab bank 0:
        ; line_number = 228
        ; library_bank 1
        ; line_number = 230
        ; library _float32 entered

        ; # Copyright (c) 2005-2006 Wayne C. Gramlich
        ; # All rights reserved.

        ; # This library implements the following procedures for general use
        ; # by users:
        ; #
        ; #    _float32_from_byte			return float(x) where x is a byte
        ; #    _float32_to_byte			return byte(x) whre x is a float
        ; #
        ; # The following additional procedures are implemented for use by the
        ; # compiler.
        ; #
        ; #    _float32_pointer_load()		A := M[W]
        ; #    _float32_pointer_add()		A := M[W]
        ; #    _float32_pointer_divide()		A := A / M[W]
        ; #    _float32_pointer_multiply()	A := A * M[W]
        ; #    _float32_pointer_subtract()	A := A - M[W]
        ; #    _float32_pointer_store		M[W] := A
        ; #    _float32_pointer_negate		A := -A
        ; #    _float32_pointer_reciprocal	A := 1/A
        ; #    _float32_pointer_swap		A <=> M[W]
        ; #    _float32_equals			_z := A = 0.0
        ; #    _float32_not_equal			_z := A != 0.0
        ; #    _float32_less_than			_z := if A < 0.0
        ; #    _float32_less_than_or_equal	_z := A <= 0.0
        ; #    _float32_greater_than		_z := A > 0.0
        ; #    _float32_greater_than_or_equal	_z := A >= 0.0
        ; #
        ; # All of the procedures constants and labels in this library are
        ; # prefixed by "_float32_".
        ; #
        ; # The _float32 library is seriously intertwingled (technical term)
        ; # with the _float32_base library.  What this means is both libraries
        ; # need to be loaded into the same code bank and data bank.  There
        ; # is no real nead to worry since there is a "library _float32_base"
        ; # immediately below.  These two libraries pretty much fill up
        ; # all of the code bank they are loaded into.
        ; #
        ; # For the uCL compiler, floats are required to be aligned on even
        ; # memory addresses.  Since the PIC16F* processor can not access more
        ; # 512 bytes of RAM, this means that a pointer a float can be represented
        ; # in 8-bits as (float_address>>1).  (Pretty, slick!)

        ; buffer = '_float32'
        ; line_number = 46
        ; library _float32_base entered

        ; # Copyright (c) 2005-2006 by Wayne C. Gramlich
        ; # All rights reserved.
        ; # Copyright (c) 1997 by Microchip, Inc.
        ; # All rights reserved.
        ; #
        ; # This code is based on a floating point library provided by Microchip
        ; # in AN575.  Note, only the translation aspect is copyright Wayne C.
        ; # Gramlich; the original code is copyright by Microchip.
        ; #
        ; #
        ; # This library implements the following procedures:
        ; #
        ; #    _float32_from_integer24()		Convert 24-bit integer into float
        ; #    _float32_normalize()		Normalize a float
        ; #    _float32_from integer32()		Convert 32-bit integer into float
        ; #    _float32_normalize40()		Normalize a 40-bit float
        ; #    _float32_integer24_convert()	Convert float into 24 bit integer
        ; #    _float32_integer32_convert()	Convert float into 32 bit integer
        ; #    _float32_multiply()		Multiply two floats
        ; #    _float32_divide()			Divide two floats
        ; #    _float32_subtract()		Subtract two floats
        ; #    _float32_add()			Add two floats
        ; #
        ; # All procedures, constants, and labels in this procedure are
        ; # prefixed with "_float32_".
        ; #
        ; # Every attempt has been made to ensure that it compiles *exactly* as
        ; # the .hex file that ships with AN575.  The remaining procedures
        ; # needed by the uCL compiler are in library _float32.
        ; #
        ; # Note that this procedure defines memory needed for both the
        ; # main arithmetic procedures and some of the square root and trigametric
        ; # procedures in the _float32_trig library.

        ; buffer = '_float32_base'
        ; line_number = 37
        ; constant _float32_status = 3
_float32_status equ 3
        ; line_number = 38
        ; constant _float32_c = 0
_float32_c equ 0
        ; line_number = 39
        ; constant _float32_z = 2
_float32_z equ 2

        ; # The floating point variables:
        ; line_number = 42
        ; constant _float32_msb = 7
_float32_msb equ 7
        ; line_number = 43
        ; constant _float32_lsb = 0
_float32_lsb equ 0

        ; line_number = 45
        ; global _float32_loc20 byte
_float32_loc20 equ globals___1
        ; line_number = 46
        ; global _float32_loc21 byte
_float32_loc21 equ globals___1+1
        ; line_number = 47
        ; global _float32_loc22 byte
_float32_loc22 equ globals___1+2
        ; line_number = 48
        ; global _float32_loc23 byte
_float32_loc23 equ globals___1+3
        ; line_number = 49
        ; global _float32_loc24 byte
_float32_loc24 equ globals___1+4
        ; line_number = 50
        ; global _float32_loc25 byte
_float32_loc25 equ globals___1+5
        ; line_number = 51
        ; global _float32_loc26 byte
_float32_loc26 equ globals___1+6
        ; line_number = 52
        ; global _float32_loc27 byte
_float32_loc27 equ globals___1+7
        ; line_number = 53
        ; global _float32_loc28 byte
_float32_loc28 equ globals___1+8
        ; line_number = 54
        ; global _float32_loc29 byte
_float32_loc29 equ globals___1+9
        ; line_number = 55
        ; global _float32_loc2a byte
_float32_loc2a equ globals___1+10
        ; line_number = 56
        ; global _float32_loc2b byte
_float32_loc2b equ globals___1+11
        ; line_number = 57
        ; global _float32_loc2c byte
_float32_loc2c equ globals___1+12
        ; line_number = 58
        ; global _float32_loc2d byte
_float32_loc2d equ globals___1+13
        ; line_number = 59
        ; global _float32_loc2e byte
_float32_loc2e equ globals___1+14
        ; line_number = 60
        ; global _float32_loc2f byte
_float32_loc2f equ globals___1+15
        ; line_number = 61
        ; global _float32_loc30 byte
_float32_loc30 equ globals___1+16
        ; line_number = 62
        ; global _float32_loc31 byte
_float32_loc31 equ globals___1+17
        ; line_number = 63
        ; global _float32_loc32 byte
_float32_loc32 equ globals___1+18
        ; line_number = 64
        ; global _float32_loc33 byte
_float32_loc33 equ globals___1+19
        ; line_number = 65
        ; global _float32_loc34 byte
_float32_loc34 equ globals___1+20
        ; line_number = 66
        ; global _float32_loc35 byte
_float32_loc35 equ globals___1+21
        ; line_number = 67
        ; global _float32_loc36 byte
_float32_loc36 equ globals___1+22
        ; line_number = 68
        ; global _float32_loc37 byte
_float32_loc37 equ globals___1+23
        ; line_number = 69
        ; global _float32_loc38 byte
_float32_loc38 equ globals___1+24
        ; line_number = 70
        ; global _float32_loc39 byte
_float32_loc39 equ globals___1+25
        ; line_number = 71
        ; global _float32_loc3a byte
_float32_loc3a equ globals___1+26
        ; line_number = 72
        ; global _float32_loc3b byte
_float32_loc3b equ globals___1+27
        ; line_number = 73
        ; global _float32_loc3c byte
_float32_loc3c equ globals___1+28
        ; line_number = 74
        ; global _float32_loc3d byte
_float32_loc3d equ globals___1+29
        ; line_number = 75
        ; global _float32_loc3e byte
_float32_loc3e equ globals___1+30
        ; line_number = 76
        ; global _float32_loc3f byte
_float32_loc3f equ globals___1+31
        ; line_number = 77
        ; global _float32_loc40 byte
_float32_loc40 equ globals___1+32
        ; line_number = 78
        ; global _float32_loc41 byte
_float32_loc41 equ globals___1+33
        ; line_number = 79
        ; global _float32_loc42 byte
_float32_loc42 equ globals___1+34
        ; line_number = 80
        ; global _float32_loc43 byte
_float32_loc43 equ globals___1+35
        ; #global _float32_loc44 byte
        ; #global _float32_loc45 byte
        ; #global _float32_loc46 byte
        ; #global _float32_loc47 byte
        ; #global _float32_loc48 byte
        ; #global _float32_loc49 byte
        ; #global _float32_loc4a byte
        ; #global _float32_loc4b byte

        ; # general register variables

        ; # These are not used currently!!!
        ; #bind _float32_accb7 = _float32_loc20
        ; #bind _float32_accb6 = _float32_loc21
        ; #bind _float32_accb5 = _float32_loc22
        ; #bind _float32_accb4 = _float32_loc23
        ; #bind _float32_accb3 = _float32_loc24
        ; #bind _float32_accb2 = _float32_loc25
        ; #bind _float32_accb1 = _float32_loc26
        ; #bind _float32_accb0 = _float32_loc27
        ; # most significant byte of contiguous 8 byte accumulator
        ; #bind _float32_acc = _float32_loc27

        ; # save location for sign in MSB
        ; line_number = 105
        ; bind _float32_sign = _float32_loc29
_float32_sign equ globals___1+9

        ; line_number = 107
        ; bind _float32_tempb3 = _float32_loc30
_float32_tempb3 equ globals___1+16
        ; line_number = 108
        ; bind _float32_tempb2 = _float32_loc31
_float32_tempb2 equ globals___1+17
        ; line_number = 109
        ; bind _float32_tempb1 = _float32_loc32
_float32_tempb1 equ globals___1+18
        ; line_number = 110
        ; bind _float32_tempb0 = _float32_loc33
_float32_tempb0 equ globals___1+19
        ; # temporary storage
        ; line_number = 112
        ; bind _float32_temp = _float32_loc33
_float32_temp equ globals___1+19

        ; # binary operation arguments

        ; line_number = 116
        ; bind _float32_aargb7 = _float32_loc20
_float32_aargb7 equ globals___1
        ; line_number = 117
        ; bind _float32_aargb6 = _float32_loc21
_float32_aargb6 equ globals___1+1
        ; line_number = 118
        ; bind _float32_aargb5 = _float32_loc22
_float32_aargb5 equ globals___1+2
        ; line_number = 119
        ; bind _float32_aargb4 = _float32_loc23
_float32_aargb4 equ globals___1+3
        ; line_number = 120
        ; bind _float32_aargb3 = _float32_loc24
_float32_aargb3 equ globals___1+4
        ; line_number = 121
        ; bind _float32_aargb2 = _float32_loc25
_float32_aargb2 equ globals___1+5
        ; line_number = 122
        ; bind _float32_aargb1 = _float32_loc26
_float32_aargb1 equ globals___1+6
        ; line_number = 123
        ; bind _float32_aargb0 = _float32_loc27
_float32_aargb0 equ globals___1+7
        ; # most significant byte of argument A
        ; line_number = 125
        ; bind _float32_aarg = _float32_loc27
_float32_aarg equ globals___1+7

        ; line_number = 127
        ; bind _float32_bargb3 = _float32_loc2b
_float32_bargb3 equ globals___1+11
        ; line_number = 128
        ; bind _float32_bargb2 = _float32_loc2c
_float32_bargb2 equ globals___1+12
        ; line_number = 129
        ; bind _float32_bargb1 = _float32_loc2d
_float32_bargb1 equ globals___1+13
        ; line_number = 130
        ; bind _float32_bargb0 = _float32_loc2e
_float32_bargb0 equ globals___1+14
        ; # most significant byte of argument B
        ; line_number = 132
        ; bind _float32_barg = _float32_loc2e
_float32_barg equ globals___1+14

        ; # Note that AARG and ACC reference the same storage locations

        ; # FIXED POINT SPECIFIC DEFINITIONS
        ; # remainder storage

        ; # These are not currently being used!!!
        ; #bind _float32_remb3 = _float32_loc20
        ; #bind _float32_remb2 = _float32_loc21
        ; #bind _float32_remb1 = _float32_loc22
        ; ## most significant byte of remainder
        ; #bind _float32_remb0 = _float32_loc23

        ; line_number = 146
        ; bind _float32_loopcount = _float32_loc34
_float32_loopcount equ globals___1+20

        ; # FLOATING POINT SPECIFIC DEFINITIONS
        ; # literal constants
        ; line_number = 150
        ; constant _float32_expbias = 127
_float32_expbias equ 127
        ; line_number = 151
        ; constant _float32_expbias_1 = _float32_expbias - 1
_float32_expbias_1 equ 126
        ; line_number = 152
        ; constant _float32_expbias_23 = _float32_expbias + 23
_float32_expbias_23 equ 150
        ; line_number = 153
        ; constant _float32_expbias_31 = _float32_expbias + 31
_float32_expbias_31 equ 158

        ; # biased exponents:

        ; # 8 bit biased exponent
        ; line_number = 158
        ; bind _float32_exp = _float32_loc28
_float32_exp equ globals___1+8

        ; # 8 bit biased exponent for argument A
        ; line_number = 161
        ; bind _float32_aexp = _float32_loc28
_float32_aexp equ globals___1+8

        ; # 8 bit biased exponent for argument B
        ; line_number = 164
        ; bind _float32_bexp = _float32_loc2f
_float32_bexp equ globals___1+15

        ; # floating point library exception flags

        ; # floating point library exception flags
        ; line_number = 169
        ; bind _float32_fpflags = _float32_loc2a
_float32_fpflags equ globals___1+10

        ; # bit0 = integer overflow flag
        ; line_number = 172
        ; constant _float32_iov = 0
_float32_iov equ 0

        ; # bit1 = floating point overflow flag
        ; line_number = 175
        ; constant _float32_fov = 1
_float32_fov equ 1

        ; # bit2 = floating point underflow flag
        ; line_number = 178
        ; constant _float32_fun = 2
_float32_fun equ 2

        ; # bit3 = floating point divide by zero flag
        ; line_number = 181
        ; constant _float32_fdz = 3
_float32_fdz equ 3

        ; # bit4 = not-a-number exception flag
        ; line_number = 184
        ; constant _float32_nan = 4
_float32_nan equ 4

        ; # bit5 = domain error exception flag
        ; line_number = 187
        ; constant _float32_dom = 5
_float32_dom equ 5

        ; # bit6 = floating point rounding flag, 0 = truncation; 1 = unbiased rounding
        ; # to nearest LSB
        ; line_number = 191
        ; constant _float32_rnd = 6
_float32_rnd equ 6

        ; # bit7 = floating point saturate flag, 0 = terminate on
        ; # exception without saturation, 1 = terminate on
        ; # exception with saturation to appropriate value
        ; line_number = 196
        ; constant _float32_sat = 7
_float32_sat equ 7

        ; #	ELEMENTARY FUNCTION MEMORY

        ; line_number = 200
        ; bind _float32_cexp = _float32_loc35
_float32_cexp equ globals___1+21
        ; line_number = 201
        ; bind _float32_cargb0 = _float32_loc36
_float32_cargb0 equ globals___1+22
        ; line_number = 202
        ; bind _float32_cargb1 = _float32_loc37
_float32_cargb1 equ globals___1+23
        ; line_number = 203
        ; bind _float32_cargb2 = _float32_loc38
_float32_cargb2 equ globals___1+24
        ; line_number = 204
        ; bind _float32_cargb3 = _float32_loc39
_float32_cargb3 equ globals___1+25

        ; line_number = 206
        ; bind _float32_dexp = _float32_loc3a
_float32_dexp equ globals___1+26
        ; line_number = 207
        ; bind _float32_dargb0 = _float32_loc3b
_float32_dargb0 equ globals___1+27
        ; line_number = 208
        ; bind _float32_dargb1 = _float32_loc3c
_float32_dargb1 equ globals___1+28
        ; line_number = 209
        ; bind _float32_dargb2 = _float32_loc3d
_float32_dargb2 equ globals___1+29
        ; line_number = 210
        ; bind _float32_dargb3 = _float32_loc3e
_float32_dargb3 equ globals___1+30

        ; line_number = 212
        ; bind _float32_eexp = _float32_loc3f
_float32_eexp equ globals___1+31
        ; line_number = 213
        ; bind _float32_eargb0 = _float32_loc40
_float32_eargb0 equ globals___1+32
        ; line_number = 214
        ; bind _float32_eargb1 = _float32_loc41
_float32_eargb1 equ globals___1+33
        ; line_number = 215
        ; bind _float32_eargb2 = _float32_loc42
_float32_eargb2 equ globals___1+34
        ; line_number = 216
        ; bind _float32_eargb3 = _float32_loc43
_float32_eargb3 equ globals___1+35

        ; #bind _float32_zargb0 = _float32_loc44
        ; #bind _float32_zargb1 = _float32_loc45
        ; #bind _float32_zargb2 = _float32_loc46
        ; #bind _float32_zargb3 = _float32_loc47

        ; #bind _float32_randb0 = _float32_loc48
        ; #bind _float32_randb1 = _float32_loc49
        ; #bind _float32_randb2 = _float32_loc4a
        ; #bind _float32_randb3 = _float32_loc4b

        ; # 32 BIT FLOATING POINT CONSTANTS

        ; # Machine precision
        ; # 5.96046447754E-8 = 2**-24
        ; line_number = 232
        ; constant _float32_machep32exp = 0x67
_float32_machep32exp equ 103
        ; line_number = 233
        ; constant _float32_machep32b0 = 0
_float32_machep32b0 equ 0
        ; line_number = 234
        ; constant _float32_machep32b1 = 0
_float32_machep32b1 equ 0
        ; line_number = 235
        ; constant _float32_machep32b2 = 0
_float32_machep32b2 equ 0

        ; # Maximum argument to EXP32
        ; # 88.7228391117 = log(2**128)
        ; line_number = 239
        ; constant _float32_maxlog32exp = 0x85
_float32_maxlog32exp equ 133
        ; line_number = 240
        ; constant _float32_maxlog32b0 = 0x31
_float32_maxlog32b0 equ 49
        ; line_number = 241
        ; constant _float32_maxlog32b1 = 0x72
_float32_maxlog32b1 equ 114
        ; line_number = 242
        ; constant _float32_maxlog32b2 = 0x18
_float32_maxlog32b2 equ 24

        ; # Minimum argument to EXP32
        ; # -87.3365447506 = log(2**-126)
        ; line_number = 246
        ; constant _float32_minlog32exp = 0x85
_float32_minlog32exp equ 133
        ; line_number = 247
        ; constant _float32_minlog32b0 = 0xae
_float32_minlog32b0 equ 174
        ; line_number = 248
        ; constant _float32_minlog32b1 = 0xac
_float32_minlog32b1 equ 172
        ; line_number = 249
        ; constant _float32_minlog32b2 = 0x50
_float32_minlog32b2 equ 80

        ; # Maximum argument to EXP1032
        ; # 38.531839445 = log10(2**128)
        ; line_number = 253
        ; constant _float32_maxlog1032exp = 0x84
_float32_maxlog1032exp equ 132
        ; line_number = 254
        ; constant _float32_maxlog1032b0 = 0x1a
_float32_maxlog1032b0 equ 26
        ; line_number = 255
        ; constant _float32_maxlog1032b1 = 0x20
_float32_maxlog1032b1 equ 32
        ; line_number = 256
        ; constant _float32_maxlog1032b2 = 0x9b
_float32_maxlog1032b2 equ 155

        ; # Minimum argument to EXP1032
        ; # -37.9297794537 = log10(2**-126)
        ; line_number = 260
        ; constant _float32_minlog1032exp = 0x84
_float32_minlog1032exp equ 132
        ; line_number = 261
        ; constant _float32_minlog1032b0 = 0x97
_float32_minlog1032b0 equ 151
        ; line_number = 262
        ; constant _float32_minlog1032b1 = 0xb8
_float32_minlog1032b1 equ 184
        ; line_number = 263
        ; constant _float32_minlog1032b2 = 0x18
_float32_minlog1032b2 equ 24

        ; # Maximum representable number before overflow
        ; # 6.80564774407E38 = (2**128) * (2 - 2**-23)
        ; line_number = 267
        ; constant _float32_maxnum32exp = 0xff
_float32_maxnum32exp equ 255
        ; line_number = 268
        ; constant _float32_maxnum32b0 = 0x7f
_float32_maxnum32b0 equ 127
        ; line_number = 269
        ; constant _float32_maxnum32b1 = 0xff
_float32_maxnum32b1 equ 255
        ; line_number = 270
        ; constant _float32_maxnum32b2 = 0xff
_float32_maxnum32b2 equ 255

        ; # Minimum representable number before underflow
        ; # 1.17549435082E-38 = (2**-126) * 1
        ; line_number = 274
        ; constant _float32_minnum32exp = 1
_float32_minnum32exp equ 1
        ; line_number = 275
        ; constant _float32_minnum32b0 = 0
_float32_minnum32b0 equ 0
        ; line_number = 276
        ; constant _float32_minnum32b1 = 0
_float32_minnum32b1 equ 0
        ; line_number = 277
        ; constant _float32_minnum32b2 = 0
_float32_minnum32b2 equ 0

        ; # Loss threshhold for argument to SIN32 and COS32
        ; # 4096 = sqrt(2**24)
        ; line_number = 281
        ; constant _float32_lossthr32exp = 0x8b
_float32_lossthr32exp equ 139
        ; line_number = 282
        ; constant _float32_lossthr32b0 = 0
_float32_lossthr32b0 equ 0
        ; line_number = 283
        ; constant _float32_lossthr32b1 = 0
_float32_lossthr32b1 equ 0
        ; line_number = 284
        ; constant _float32_lossthr32b2 = 0
_float32_lossthr32b2 equ 0

        ; # PIC16 32 BIT FLOATING POINT LIBRARY
        ; #
        ; # Unary operations: both input and output are in _float32_aexp,_FLOAT32_AARG
        ; # Binary operations: input in _float32_aexp,_FLOAT32_AARG and _float32_bexp,_FLOAT32_BARG with output in _float32_aexp,_FLOAT32_AARG
        ; #
        ; # All routines return WREG = 0x00 for successful completion, and WREG = 0xFF
        ; # for an error condition specified in _FLOAT32_FPFLAGS.
        ; # All timings are worst case cycle counts

        ; # Routine		Function

        ; # FLO2432	24 bit integer to 32 bit floating point conversion
        ; # FLO32
        ; #	Timing:	RND0	RND1
        ; #	SAT0	104	104
        ; #	SAT1	110	110

        ; # NRM3232	32 bit normalization of unnormalized 32 bit
        ; # NRM32		floating point numbers
        ; #	Timing:	RND0	RND1
        ; #	SAT0	90	90
        ; #	SAT1	96	96

        ; # INT3224	32 bit floating point to 24 bit integer conversion
        ; # INT32
        ; #	Timing:	RND0	RND1
        ; #	SAT0	104	112
        ; #	SAT1	104	114

        ; # FLO3232	32 bit integer to 32 bit floating point conversion
        ; #	Timing:	RND0	RND1
        ; #	SAT0	129	145
        ; #	SAT1	129	152

        ; # NRM4032	32 bit normalization of unnormalized 40 bit floating
        ; #		 point numbers
        ; #	Timing: RND0	RND1
        ; #	SAT0	112	128
        ; #	SAT1	112	135

        ; # INT3232	32 bit floating point to 32 bit integer conversion
        ; #	Timing:	RND0	RND1
        ; #	SAT0	130	137
        ; #	SAT1	130	137

        ; # FPA32		32 bit floating point add
        ; #	Timing:	RND0	RND1
        ; #	SAT0	251	265
        ; #	SAT1	251	271

        ; # FPS32		32 bit floating point subtract
        ; #	Timing:	RND0	RND1
        ; #	SAT0	253	267
        ; #	SAT1	253	273

        ; # FPM32		32 bit floating point multiply
        ; # 	Timing: RND0	RND1
        ; #	SAT0	574	588
        ; #	SAT1	574	591

        ; # FPD32		32 bit floating point divide
        ; #	Timing:	RND0	RND1
        ; #	SAT0	932	968
        ; #	SAT1	932	971

        ; # 32 bit floating point representation
        ; #
        ; # EXPONENT	8 bit biased exponent
        ; #		It is important to note that the use of biased
        ; #		exponents produces a unique representation of a
        ; #		floating point 0, given by
        ; #		EXP = HIGHBYTE = MIDBYTE = LOWBYTE = 0x00,
        ; #		with 0 being the only number with EXP = 0.
        ; #
        ; # HIGHBYTE	8 bit most significant byte of fraction in
        ; #		sign-magnitude representation, with SIGN = MSB,
        ; #		implicit MSB = 1 and radix point to the right of MSB
        ; #
        ; # MIDBYTE	8 bit middle significant byte of sign-magnitude fraction
        ; #
        ; # LOWBYTE	8 bit least significant byte of sign-magnitude fraction
        ; #
        ; # EXPONENT	HIGHBYTE	MIDBYTE		LOWBYTE
        ; # xxxxxxxx	S.xxxxxxx	xxxxxxxx	xxxxxxxx
        ; #                |
        ; #		RADIX
        ; #		POINT

        ; Delaying code generation for procedure  _float32_from_integer24
        ; Delaying code generation for procedure  _float32_normalize
        ; Delaying code generation for procedure  _float32_from_integer32
        ; Delaying code generation for procedure  _float32_normalize40
        ; Delaying code generation for procedure  _float32_integer24_convert
        ; Delaying code generation for procedure  float32_integer32_convert
        ; Delaying code generation for procedure  _float32_multiply
        ; Delaying code generation for procedure  _float32_divide
        ; Delaying code generation for procedure  _float32_subtract
        ; Delaying code generation for procedure  _float32_add

        ; buffer = '_float32'
        ; line_number = 46
        ; library _float32_base exited

        ; # FIXME: Make sure that none of the procedure allocate any argument storage!!!

        ; Delaying code generation for procedure  _float32_pointer_load
        ; Delaying code generation for procedure  _float32_pointer_add
        ; Delaying code generation for procedure  _float32_pointer_divide
        ; Delaying code generation for procedure  _float32_pointer_multiply
        ; Delaying code generation for procedure  _float32_pointer_subtract
        ; Delaying code generation for procedure  _float32_pointer_store
        ; Delaying code generation for procedure  _float32_negate
        ; Delaying code generation for procedure  _float32_reciprocal
        ; Delaying code generation for procedure  _float32_pointer_swap
        ; Delaying code generation for procedure  _float32_from_byte
        ; Delaying code generation for procedure  _float32_to_byte
        ; Delaying code generation for procedure  _float32_equals
        ; Delaying code generation for procedure  _float32_not_equal
        ; Delaying code generation for procedure  _float32_less_than
        ; Delaying code generation for procedure  _float32_less_than_or_equal
        ; Delaying code generation for procedure  _float32_greater_than
        ; Delaying code generation for procedure  _float32_greater_than_or_equal

        ; buffer = 'midimotor1e'
        ; line_number = 230
        ; library _float32 exited

        ; line_number = 233
        ; origin 0
        org     0

        ; line_number = 235
        ;info   235, 0
        ; procedure start
start:
        ; arguments_none
        ; line_number = 237
        ;  returns_nothing
        ; line_number = 238
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 240
        ;  assemble
        ;info   240, 0
        ; line_number = 241
        ;info   241, 0
        ; databank start, main
        ; line_number = 242
        ;info   242, 0
        ; codebank start, main
        ; line_number = 243
        ;info   243, 0
        goto    main

        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 245
        ; origin 4
        org     4

        ; line_number = 247
        ;info   247, 4
        ; procedure interrupt
interrupt:
interrupt___w_save equ shared___globals+1
interrupt___status_save equ shared___globals
        ; Carefully save __w and __tatus into RAM
        ; Save W first (easy)
        movwf   interrupt___w_save
        ; Save Status without smashing it (tricky)
        ; Move swapped version of status into W
        swapf   __status,w
        ; Store swapped version of status into RAM
        movwf   interrupt___status_save
        ; arguments_none
        ; line_number = 249
        ;  returns_nothing

        ; # This is the interrupt processing routine.  While it is quite long
        ; # it actually does not take very long to execute.  This is important
        ; # since long interrupt routines can cause problems with over module
        ; # latency.

        ; # Step1:  Save our system registers.  There are 4 registers that
        ; # need to be saved -- W, STATUS, FSR, and PCLATH.
        ; # 
        ; #  W & STATUS:
        ; #	  The compiler takes care of the weird code needed to safely
        ; #     save W adn STATUS registers.  (Read the generated assembly code
        ; #     comments to see some strange usage of the SWAPF instruction.)
        ; #     Since the microcontroller can be using any of the 4 register
        ; #     banks when the interrupt occurs, the W and STATUS register
        ; #     are stored into a couple of shared memory bank registers.
        ; #     There are 16 of these registers available, and the interupt
        ; #     takes 2 of the 16.
        ; #
        ; #  PCLATH:
        ; #     When the interrupt occurs, the previous progam counter is
        ; #     pushed onto the stack and then the program counter is set
        ; #     to 4 to force execution of the interrupt routine.  The PCLATH
        ; #     register is left unchanged.  Since the PCLATH register can
        ; #     pointing to any of the 4 code banks (only 2 implemented for
        ; #     the PIC16F688), it is vital that we update PCLATH to point
        ; #     to code bank 0 (where the interrupt routine is) before the
        ; #     first GOTO, CALL, or computed GOTO.  Otherwise, the first
        ; #     GOTO, CALL, or computed GOTO will jump off into code bank
        ; #     that was being used prior to the interrupt.
        ; #
        ; #  FSR:
        ; #     The FSR register needs to be saved since we using code that
        ; #     indexes into a small buffer to store UART input.
        ; #
        ; #  Both PCLATH and FSR can be saved into regular registers in
        ; #  register bank 0.  No shared registers are needed.  Once we have
        ; #  STATUS stashed away, the register bank can be set to 0.  The
        ; #  compiler takes care of this automagically before the first save
        ; #  assignment.

        ; line_number = 291
        ;  local fsr_save byte
interrupt__fsr_save equ globals___0+28
        ; line_number = 292
        ;  local pclath_save byte
interrupt__pclath_save equ globals___0+29

        ; before procedure statements delay=non-uniform, bit states=(data:??=uu=>?? code:X0=cu=>X0)
        ; line_number = 294
        ;  fsr_save := _fsr
        ;info   294, 7
        movf    _fsr,w
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movwf   interrupt__fsr_save
        ; line_number = 295
        ;  pclath_save := _pclath
        ;info   295, 11
        movf    _pclath,w
        movwf   interrupt__pclath_save
        ; # Make sure we are on correct page:
        ; line_number = 297
        ;  _pclath := 0
        ;info   297, 13
        clrf    _pclath

        ; # Now we have to deal with any of the pending interrupts.  Timer0
        ; # is set to go off at the overall duty cycle of the PWM (Pulse Width
        ; # Modulation) rate.  We turn the motor "on" each time Timer0 triggers
        ; # an interrupt.  We also start Timer1 to specifiy the over width of
        ; # the pulse before we turn it off.  When Timer1 triggers, it is time
        ; # to turn the pulse off.  Timer0 is an 8-bit register and it it is
        ; # being driven by a the system clock divided by 256.  Thus, the Timer0
        ; # triggers every 65536 (=2^16) clock ticks.  Timer 1 is a 16-bit
        ; # counter that runs at the system clock.  We always set the low
        ; # order byte to 0, and the high order byte to W, where W=255-PW and
        ; # PW is the pulse width as a number between 0 and 255.  Thus, we can
        ; # have the pulse width vary in increments of 1/256 of the total duty
        ; # cycle.

        ; # Deal with Timer 0 interrupt:
        ; line_number = 314
        ;  if _t0if start
        ;info   314, 14
        ; =>bit_code_emit@symbol(): sym=_t0if
        ; No 1TEST: true.size=89 false.size=0
        ; No 2TEST: true.size=89 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _t0if___byte, _t0if___bit
        goto    interrupt__14
        ; # Timer 0 just triggered.  It is time to start a new pulse width
        ; # duty cycle:

        ; # Clear the interrupt flag:
        ; line_number = 319
        ;  _t0if := _false
        ;info   319, 16
        bcf     _t0if___byte, _t0if___bit

        ; # Make sure Timer1 is off while we muck around with Timer1:
        ; line_number = 322
        ;  _tmr1on := _false
        ;info   322, 17
        bcf     _tmr1on___byte, _tmr1on___bit

        ; # Set the pulse width to W::0, where W=255-PW, where PW={0,...,255}.
        ; line_number = 325
        ;  _tmr1l := 0
        ;info   325, 18
        clrf    _tmr1l
        ; line_number = 326
        ;  _tmr1h := motor1_pulse_width
        ;info   326, 19
        movf    motor1_pulse_width,w
        movwf   _tmr1h

        ; # Make sure that we clear off the Timer1 interrupt flag, just in case:
        ; line_number = 329
        ;  _tmr1if := _false
        ;info   329, 21
        bcf     _tmr1if___byte, _tmr1if___bit

        ; # Turn on Timer1:
        ; line_number = 332
        ;  _tmr1on := _true
        ;info   332, 22
        bsf     _tmr1on___byte, _tmr1on___bit

        ; # Finally, turn on the appropriate leads of the motor to make it move.
        ; line_number = 335
        ;  _portc := motor1_on_mask
        ;info   335, 23
        movf    motor1_on_mask,w
        movwf   _portc

        ; line_number = 337
        ;  if use_potentiometer start
        ;info   337, 25
        ; =>bit_code_emit@symbol(): sym=use_potentiometer
        ; No 1TEST: true.size=77 false.size=0
        ; No 2TEST: true.size=77 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   use_potentiometer___byte, use_potentiometer___bit
        goto    interrupt__13
        ; line_number = 338
        ; switch channel start
        ;info   338, 27
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 358
        ; case_maximum 2
        movlw   interrupt__6>>8
        movwf   __pclath
        movf    channel,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        ; All case bodies prefer this bit set
        bsf     __rp0___byte, __rp0___bit
        addlw   interrupt__6
        movwf   __pcl
        ; page_group 3
interrupt__6:
        goto    interrupt__3
        goto    interrupt__4
        goto    interrupt__5
        ; line_number = 339
        ; case 0
interrupt__3:
        ; line_number = 340
        ; ad1_value_low := _adresl
        ;info   340, 36
        movf    _adresl,w
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   ad1_value_low
        ; line_number = 341
        ;  ad1_value_middle := _adresh
        ;info   341, 40
        bcf     __rp1___byte, __rp1___bit
        movf    _adresh,w
        bsf     __rp1___byte, __rp1___bit
        movwf   ad1_value_middle
        ; line_number = 342
        ;  ad1_value_high := 0
        ;info   342, 44
        clrf    ad1_value_high
        goto    interrupt__7
        ; line_number = 343
        ; case 1
interrupt__4:
        ; line_number = 344
        ; ad0_value_low := _adresl
        ;info   344, 46
        movf    _adresl,w
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   ad0_value_low
        ; line_number = 345
        ;  ad0_value_middle := _adresh
        ;info   345, 50
        bcf     __rp1___byte, __rp1___bit
        movf    _adresh,w
        bsf     __rp1___byte, __rp1___bit
        movwf   ad0_value_middle
        ; line_number = 346
        ;  ad0_value_high := 0
        ;info   346, 54
        clrf    ad0_value_high
        goto    interrupt__7
        ; line_number = 347
        ; case 2
interrupt__5:
        ; line_number = 348
        ; quad_low := _adresl
        ;info   348, 56
        movf    _adresl,w
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_low
        ; line_number = 349
        ;  quad_middle := _adresh
        ;info   349, 60
        bcf     __rp1___byte, __rp1___bit
        movf    _adresh,w
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_middle
        ; line_number = 350
        ;  quad_high := 0
        ;info   350, 64
        clrf    quad_high
        ; line_number = 351
        ;  if position_reverse start
        ;info   351, 65
        ; =>bit_code_emit@symbol(): sym=position_reverse
        ; No 1TEST: true.size=9 false.size=0
        ; No 2TEST: true.size=9 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __rp1___byte, __rp1___bit
        btfss   position_reverse___byte, position_reverse___bit
        goto    interrupt__2
        bsf     __rp1___byte, __rp1___bit
        ; # Perform a 1's complement of the result:
        ; line_number = 353
        ;  quad_low := quad_low ^ 0xff
        ;info   353, 69
        comf    quad_low,f
        ; line_number = 354
        ;  quad_middle := quad_middle ^ 3
        ;info   354, 70
        movlw   3
        xorwf   quad_middle,f
        ; line_number = 355
        ;  quad_low := quad_low + 1
        ;info   355, 72
        incf    quad_low,f
        ; line_number = 356
        ;  if _z start
        ;info   356, 73
        ; =>bit_code_emit@symbol(): sym=_z
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _z___byte, _z___bit
        goto    interrupt__1
        ; line_number = 357
        ; quad_middle := (quad_middle + 1) & 3
        ;info   357, 75
        incf    quad_middle,w
        andlw   3
        movwf   quad_middle
        ; Recombine size1 = 0 || size2 = 0
interrupt__1:
        ; line_number = 356
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__2:
        ; line_number = 351
        ;  if position_reverse done
interrupt__7:
        ; line_number = 338
        ; switch channel done
        ; line_number = 359
        ; if configure & configure_analogs_enabled_mask = 0 start
        ;info   359, 78
        ; Left minus Right
        movlw   160
        bcf     __rp1___byte, __rp1___bit
        andwf   configure,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=5
        ; No 2TEST: true.size=2 false.size=5
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    interrupt__8
        ; line_number = 360
        ; channel := 2
        ;info   360, 83
        movlw   2
        movwf   channel
        goto    interrupt__9
        ; 2GOTO: Starting code 2
interrupt__8:
        ; line_number = 362
        ; channel := channel + 1
        ;info   362, 86
        incf    channel,f
        ; line_number = 363
        ;  if channel >= 3 start
        ;info   363, 87
        movlw   3
        subwf   channel,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; 1TEST: Single test with code in skip slot
        btfsc   __c___byte, __c___bit
        ; line_number = 364
        ; channel := 0
        ;info   364, 90
        clrf    channel

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 363
        ;  if channel >= 3 done
interrupt__9:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 359
        ; if configure & configure_analogs_enabled_mask = 0 done
        ; # The other channels are enabled:
        ; line_number = 367
        ;  _adcon0 := _adcon0 & 0xc3 | (channel << 2)
        ;info   367, 91
interrupt__10 equ globals___0+64
        movlw   195
        andwf   _adcon0,w
        movwf   interrupt__10
interrupt__11 equ globals___0+65
        rlf     channel,w
        movwf   interrupt__11
        rlf     interrupt__11,w
        andlw   252
        iorwf   interrupt__10,w
        movwf   _adcon0
        ; line_number = 368
        ;  delay 20 * microsecond start
        ;info   368, 100
        ; Delay expression evaluates to 100
        ; line_number = 369
        ; do_nothing
        ;info   369, 100


        ; Delay 100 cycles
        ; Delay loop takes 25 * 4 = 100 cycles
        movlw   25
interrupt__12:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    interrupt__12
        ; line_number = 368
        ;  delay 20 * microsecond done
        ; Recombine size1 = 0 || size2 = 0
interrupt__13:
        ; line_number = 337
        ;  if use_potentiometer done
        ; # Trigger an A/D conversion to pick up next time:
        ; line_number = 373
        ;  _go := _true
        ;info   373, 104
        bsf     _go___byte, _go___bit

        ; Recombine size1 = 0 || size2 = 0
interrupt__14:
        ; line_number = 314
        ;  if _t0if done
        ; # Deal with Timer 1 interrupt:
        ; line_number = 376
        ;  if _tmr1if start
        ;info   376, 105
        ; =>bit_code_emit@symbol(): sym=_tmr1if
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _tmr1if___byte, _tmr1if___bit
        goto    interrupt__15
        ; # Timer 1 just triggered.  It is time to turn off the pulse width.

        ; # Turn off the motor leads:
        ; line_number = 380
        ;  _portc := 0
        ;info   380, 107
        clrf    _portc

        ; # Turn off Timer 1:
        ; line_number = 383
        ;  _tmr1on := _false
        ;info   383, 108
        bcf     _tmr1on___byte, _tmr1on___bit

        ; # Make sure we clear timer 1 interrupt flag:
        ; line_number = 386
        ;  _tmr1if := _false
        ;info   386, 109
        bcf     _tmr1if___byte, _tmr1if___bit

        ; Recombine size1 = 0 || size2 = 0
interrupt__15:
        ; line_number = 376
        ;  if _tmr1if done
        ; # Deal with UART receive interrupt:
        ; line_number = 389
        ;  if _rcif start
        ;info   389, 110
        ; =>bit_code_emit@symbol(): sym=_rcif
        ; No 1TEST: true.size=35 false.size=0
        ; No 2TEST: true.size=35 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _rcif___byte, _rcif___bit
        goto    interrupt__20
        ; # We have a byte in the UART receive buffer.  We want to be as
        ; # quick as possible here.  Do the minimum to process the incoming
        ; # byte and move on.a

        ; # First, look at the ninth bit.  If the ninth bit is set, we
        ; # process it immediately.
        ; line_number = 396
        ;  if _rx9d start
        ;info   396, 112
        ; =>bit_code_emit@symbol(): sym=_rx9d
        ; No 1TEST: true.size=16 false.size=10
        ; No 2TEST: true.size=16 false.size=10
        ; 2GOTO: Single test with two GOTO's
        btfss   _rx9d___byte, _rx9d___bit
        goto    interrupt__18
        ; # The ninth bit is set, we have an module address select
        ; # command:
        ; line_number = 399
        ;  if _rcreg = address start
        ;info   399, 114
        ; Left minus Right
        movf    address,w
        subwf   _rcreg,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=9 false.size=2
        ; No 2TEST: true.size=9 false.size=2
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    interrupt__16
        ; # The address that came in matches ours in {address}.
        ; # We need to prepare for further incoming data bytes:

        ; # Force the UART to start accepting data bytes with the
        ; # ninth bit clear:
        ; line_number = 405
        ;  _adden := _false
        ;info   405, 118
        bcf     _adden___byte, _adden___bit

        ; # Clear out the input data buffer:
        ; line_number = 408
        ;  uart_input_in_index := 0
        ;info   408, 119
        clrf    uart_input_in_index
        ; line_number = 409
        ;  uart_input_out_index := 0
        ;info   409, 120
        clrf    uart_input_out_index
        ; line_number = 410
        ;  uart_input_count := 0
        ;info   410, 121
        clrf    uart_input_count
        ; line_number = 411
        ;  uart_input_pending := _false
        ;info   411, 122
        bcf     uart_input_pending___byte, uart_input_pending___bit

        ; # Send an acknowledge byte:
        ; line_number = 414
        ;  call uart_byte_put(rb2_ok)
        ;info   414, 123
        movlw   165
        call    uart_byte_put

        ; # Set the state machine for {uart_manage} to eat the echo
        ; # and start processing commands:
        ; line_number = 418
        ;  state := state_echo_then_command
        ;info   418, 125
        movlw   1
        movwf   state
        ; Recombine code1_bit_states != code2_bit_states
        goto    interrupt__17
        ; 2GOTO: Starting code 2
interrupt__16:
        ; # The address that came in did not match our address:

        ; # Force the UART to only listen to bytes that have the
        ; # ninth bit set (i.e. address commands).  All data bytes
        ; # to the other selected module will be invisible to us:
        ; line_number = 425
        ;  _adden := _true
        ;info   425, 128
        bsf     _adden___byte, _adden___bit

        ; # Set the state machine for {uart_manage} to ignore any
        ; # incoming data bytes.  This should never happen, be it
        ; # it never hurts to be careful.
        ; line_number = 430
        ;  state := state_select_wait
        ;info   430, 129
        clrf    state
interrupt__17:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 399
        ;  if _rcreg = address done
        ; Recombine code1_bit_states != code2_bit_states
        goto    interrupt__19
        ; 2GOTO: Starting code 2
interrupt__18:
        ; # We have a data byte for us to process.  For now we
        ; # stuff it into an input buffer:

        ; # Stuff the byte into the {uart_input} buffer being careful
        ; # not to go out of bounds.  The buffer is a power of 2 in
        ; # size, so masking {uart_input_in_index} with {uart_input_mask}
        ; # will keep us in bounds:
        ; line_number = 439
        ;  uart_input[uart_input_in_index & uart_input_mask] := _rcreg
        ;info   439, 131
        ; index_fsr_first
        movlw   3
        andwf   uart_input_in_index,w
        addlw   uart_input
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    _rcreg,w
        movwf   __indf

        ; # Bump {uart_input_in_index} so that we next byte the comes
        ; # in will follow this current byte:
        ; line_number = 443
        ;  uart_input_in_index := uart_input_in_index + 1
        ;info   443, 138
        incf    uart_input_in_index,f

        ; # Keep track of how many bytes are in the input buffer:
        ; line_number = 446
        ;  uart_input_count := uart_input_count + 1
        ;info   446, 139
        incf    uart_input_count,f

        ; # Let the {uart_manage} routine know that it has work to do:
        ; line_number = 449
        ;  uart_input_pending := _true
        ;info   449, 140
        bsf     uart_input_pending___byte, uart_input_pending___bit

interrupt__19:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 396
        ;  if _rx9d done
        ; # The PIC UART can get wedged by errors.  We fix that problem
        ; # by toggling {_cren} whenever we have an overrun error.  The
        ; # code below is really tight (5 instructions):
        ; line_number = 454
        ;  if _oerr start
        ;info   454, 141
        ; =>bit_code_emit@symbol(): sym=_oerr
        ; 1TEST: Single test with code in skip slot
        btfsc   _oerr___byte, _oerr___bit
        ; # We have an over run error, clear {_cren}:
        ; line_number = 456
        ;  _cren := _false
        ;info   456, 142
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 454
        ;  if _oerr done
        ; line_number = 457
        ; if _ferr start
        ;info   457, 143
        ; =>bit_code_emit@symbol(): sym=_ferr
        ; 1TEST: Single test with code in skip slot
        btfsc   _ferr___byte, _ferr___bit
        ; # We have a framing error, clear {_cren}:
        ; line_number = 459
        ;  _cren := _false
        ;info   459, 144
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 457
        ; if _ferr done
        ; # If either of the two previous statements triggered, {_cren}
        ; # got turned off.  This next statement will turn it on again.
        ; # Otherwise, {_cren} is already on, and this statement will do
        ; # nothing:
        ; line_number = 464
        ;  _cren := _true
        ;info   464, 145
        bsf     _cren___byte, _cren___bit

        ; # Clear the recieve interrupt condition:
        ; line_number = 467
        ;  _rcif := _false
        ;info   467, 146
        bcf     _rcif___byte, _rcif___bit

        ; Recombine size1 = 0 || size2 = 0
interrupt__20:
        ; line_number = 389
        ;  if _rcif done
        ; # Deal with quadrature input changes:
        ; line_number = 470
        ;  if _raif start
        ;info   470, 147
        ; =>bit_code_emit@symbol(): sym=_raif
        ; No 1TEST: true.size=56 false.size=0
        ; No 2TEST: true.size=56 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _raif___byte, _raif___bit
        goto    interrupt__35
        bsf     __rp1___byte, __rp1___bit
        ; # The file24 a the A and B channels of Port A have changed
        ; # since the last time we read Port A.  Deal with the change
        ; # by cycling the {quad_state} state machine.  Please carefully
        ; # read the documentation in the states.ucl library to understand
        ; # the format of the {states} vector.

        ; # Cycle the {quad_state} state machine.  Use only the lower 3 bits
        ; # currently in {quad_state} concatenated with the low order 2 bits
        ; # of {_porta} (the A and B quadrature channels).  That gives a total
        ; # of 5 bits to work with:
        ; #FIXME: should be {xstates}!!!
        ; #quad_state := xstates[quad_state & 7 | (_porta << 3) & 0x18]
        ; line_number = 483
        ;  quad_state := states[quad_state & 7 | (_porta << 3) & 0x18]
        ;info   483, 150
interrupt__21 equ globals___0+64
        movlw   7
        andwf   quad_state,w
        bcf     __rp1___byte, __rp1___bit
        movwf   interrupt__21
interrupt__22 equ globals___0+65
        rlf     _porta,w
        movwf   interrupt__22
        rlf     interrupt__22,f
        rlf     interrupt__22,w
        andlw   24
        iorwf   interrupt__21,w
        call    states
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_state

        ; # Disable interrupt condition until the next time:
        ; line_number = 486
        ;  _raif := _false
        ;info   486, 163
        bcf     _raif___byte, _raif___bit

        ; # The rest of this code just increments and decrements the quadrature
        ; # counter.  The quad counter is signed 24 bit integer that is stored
        ; # in {quad_high}, {quad_middle}, and {quad_low}.  This code is kind
        ; # big and long, but in reality, 99% of the time we will perform either
        ; # a single increment or decrement of {quad_low}.  So, most of the
        ; # time this code very fast:

        ; line_number = 495
        ;  if quad_state@7 start
        ;info   495, 164
interrupt__select__27___byte equ quad_state
interrupt__select__27___bit equ 7
        ; =>bit_code_emit@symbol(): sym=interrupt__select__27
        ; No 1TEST: true.size=17 false.size=0
        ; No 2TEST: true.size=17 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__27___byte, interrupt__select__27___bit
        goto    interrupt__28
        ; # The state machine wants us to increment the quadrature counter
        ; # by 1.  We work our way from {quad_low} through {quad_high}:
        ; line_number = 498
        ;  quad_low := quad_low + 1
        ;info   498, 166
        incf    quad_low,f
        ; line_number = 499
        ;  if _z start
        ;info   499, 167
        ; =>bit_code_emit@symbol(): sym=_z
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _z___byte, _z___bit
        goto    interrupt__23
        ; # The zero status flag is set, so {quad_low} just wrapped from
        ; # 0xff to 0.  Thus, we need to increment {quad_middle}"
        ; line_number = 502
        ;  quad_middle := quad_middle + 1
        ;info   502, 169
        incf    quad_middle,f
        ; line_number = 503
        ;  if _z start
        ;info   503, 170
        ; =>bit_code_emit@symbol(): sym=_z
        ; 1TEST: Single test with code in skip slot
        btfsc   _z___byte, _z___bit
        ; # The zero status flat is set, so {quad_middle} just
        ; # wrapped from 0xff to 0.  Thus we need to increment
        ; # {quad_high}:
        ; line_number = 507
        ;  quad_high := quad_high + 1
        ;info   507, 171
        incf    quad_high,f

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 503
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__23:
        ; line_number = 499
        ;  if _z done
        ; line_number = 509
        ; if quad_state@6 start
        ;info   509, 172
interrupt__select__25___byte equ quad_state
interrupt__select__25___bit equ 6
        ; =>bit_code_emit@symbol(): sym=interrupt__select__25
        ; No 1TEST: true.size=8 false.size=0
        ; No 2TEST: true.size=8 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__25___byte, interrupt__select__25___bit
        goto    interrupt__26
        bcf     __rp1___byte, __rp1___bit
        ; # This bit will be set in the state machine if we have an
        ; # "illegal" state machine transistion.

        ; # Bump the {errors} counter to let somebody know
        ; # that we are having problems:
        ; line_number = 515
        ;  errors := errors + 1
        ;info   515, 175
        incf    errors,f

        ; # This code is the same as the first increment, so the
        ; # comments are not repeated:
        ; line_number = 519
        ;  quad_low := quad_low + 1
        ;info   519, 176
        bsf     __rp1___byte, __rp1___bit
        incf    quad_low,f
        ; line_number = 520
        ;  if _z start
        ;info   520, 178
        ; =>bit_code_emit@symbol(): sym=_z
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _z___byte, _z___bit
        goto    interrupt__24
        ; line_number = 521
        ; quad_middle := quad_middle + 1
        ;info   521, 180
        incf    quad_middle,f
        ; line_number = 522
        ;  if _z start
        ;info   522, 181
        ; =>bit_code_emit@symbol(): sym=_z
        ; 1TEST: Single test with code in skip slot
        btfsc   _z___byte, _z___bit
        ; line_number = 523
        ; quad_high := quad_high + 1
        ;info   523, 182
        incf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 522
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__24:
        ; line_number = 520
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__26:
        ; line_number = 509
        ; if quad_state@6 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__28:
        ; line_number = 495
        ;  if quad_state@7 done
        ; line_number = 524
        ; if quad_state@5 start
        ;info   524, 183
interrupt__select__33___byte equ quad_state
interrupt__select__33___bit equ 5
        ; =>bit_code_emit@symbol(): sym=interrupt__select__33
        ; No 1TEST: true.size=21 false.size=0
        ; No 2TEST: true.size=21 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__33___byte, interrupt__select__33___bit
        goto    interrupt__34
        ; # The state machine wants us to decrement the quadrature counter
        ; # by 1.  We work our way from {quad_low} through {quad_high}:
        ; line_number = 527
        ;  if quad_low = 0 start
        ;info   527, 185
        ; Left minus Right
        movf    quad_low,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=4 false.size=0
        ; No 2TEST: true.size=4 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __z___byte, __z___bit
        goto    interrupt__29
        ; # {quad_low} is 0, so we are going to wrap down to 0xff.
        ; # We need to decrement {quad_middle}:
        ; line_number = 530
        ;  if quad_middle = 0 start
        ;info   530, 188
        ; Left minus Right
        movf    quad_middle,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; # {quad_middle} is 0, we are going to wrap down to 0xff.
        ; # We need to decrement {quad_high}:
        ; line_number = 533
        ;  quad_high := quad_high - 1
        ;info   533, 190
        decf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 530
        ;  if quad_middle = 0 done
        ; # Do the {quad_middle} decrement:
        ; line_number = 535
        ;  quad_middle := quad_middle - 1
        ;info   535, 191
        decf    quad_middle,f
        ; Recombine size1 = 0 || size2 = 0
interrupt__29:
        ; line_number = 527
        ;  if quad_low = 0 done
        ; # Do the {quad_low} decrement:
        ; line_number = 537
        ;  quad_low := quad_low - 1
        ;info   537, 192
        decf    quad_low,f

        ; line_number = 539
        ;  if quad_state@4 start
        ;info   539, 193
interrupt__select__31___byte equ quad_state
interrupt__select__31___bit equ 4
        ; =>bit_code_emit@symbol(): sym=interrupt__select__31
        ; No 1TEST: true.size=10 false.size=0
        ; No 2TEST: true.size=10 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__31___byte, interrupt__select__31___bit
        goto    interrupt__32
        bcf     __rp1___byte, __rp1___bit
        ; # This bit will be set in the state machine if we have an
        ; # "illegal" state machine transition:

        ; # Bump the {errors} counter to let somebody know that
        ; # we are having problems:
        ; line_number = 545
        ;  errors := errors + 1
        ;info   545, 196
        incf    errors,f

        ; # This code is the same as the first decrement, so the
        ; # comments are not repeated:
        ; line_number = 549
        ;  if quad_low = 0 start
        ;info   549, 197
        ; Left minus Right
        bsf     __rp1___byte, __rp1___bit
        movf    quad_low,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=4 false.size=0
        ; No 2TEST: true.size=4 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __z___byte, __z___bit
        goto    interrupt__30
        ; line_number = 550
        ; if quad_middle = 0 start
        ;info   550, 201
        ; Left minus Right
        movf    quad_middle,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; line_number = 551
        ; quad_high := quad_high - 1
        ;info   551, 203
        decf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 550
        ; if quad_middle = 0 done
        ; line_number = 552
        ; quad_middle := quad_middle - 1
        ;info   552, 204
        decf    quad_middle,f
        ; Recombine size1 = 0 || size2 = 0
interrupt__30:
        ; line_number = 549
        ;  if quad_low = 0 done
        ; line_number = 553
        ; quad_low := quad_low - 1
        ;info   553, 205
        decf    quad_low,f

        ; Recombine size1 = 0 || size2 = 0
interrupt__32:
        ; line_number = 539
        ;  if quad_state@4 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__34:
        ; line_number = 524
        ; if quad_state@5 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__35:
        ; line_number = 470
        ;  if _raif done
        ; # All done processing interrupt conditions.  Let's get out of here by
        ; # restoring {_fsr} and {_pclath}:
        ; line_number = 557
        ;  _fsr := fsr_save    
        ;info   557, 206
        bcf     __rp1___byte, __rp1___bit
        movf    interrupt__fsr_save,w
        movwf   _fsr
        ; line_number = 558
        ;  _pclath := pclath_save
        ;info   558, 209
        movf    interrupt__pclath_save,w
        movwf   _pclath

        ; # The compiler takes care of restoring {_status} and {_w}.

        ; delay after procedure statements=non-uniform
        ; Interrupt return
        ; Carefully restore __w and __tatus from RAM
        ; Restore swapped status into W
        swapf   interrupt___status_save,w
        ; W now contains (unswapped) status
        ; Restore W to __status
        movwf   __status
        ; From here on out, do not modify __status
        ; Swap saved W register in RAM
        swapf   interrupt___w_save,f
        ; Unswap the saved W reg and restore to W
        swapf   interrupt___w_save,w
        ; __w and __status are now restored
        ; Return from interrupt
        retfie  




        ; # Split the floats between data banks 1 and 2:


        ; line_number = 566
        ; global error float32
error equ globals___2+32
        ; line_number = 567
        ; global position float32
position equ globals___2+36
        ; line_number = 568
        ; global target float32
target equ globals___2+40
        ; line_number = 569
        ; global kp float32
kp equ globals___2+44
        ; line_number = 570
        ; global ki float32
ki equ globals___2+48


        ; line_number = 574
        ; global kd float32
kd equ globals___1+52
        ; line_number = 575
        ; global pid float32
pid equ globals___1+56
        ; line_number = 576
        ; global divisor float32
divisor equ globals___1+60
        ; line_number = 577
        ; global numerator float32
numerator equ globals___1+64
        ; line_number = 578
        ; global previous_error float32
previous_error equ globals___1+68
        ; line_number = 579
        ; global error_sum float32
error_sum equ globals___1+72


        ; line_number = 583
        ; global target_speed byte		# Target motor speed
target_speed equ globals___0+30
        ; line_number = 584
        ; global target_seek bit
target_seek___byte equ globals___0+79
target_seek___bit equ 1
        ; line_number = 585
        ; global analog0_greater_than bit		# Analog0 value > analog0 limit
analog0_greater_than___byte equ globals___0+79
analog0_greater_than___bit equ 2
        ; line_number = 586
        ; global analog1_greater_than bit		# Analog1 value > analog1 limit
analog1_greater_than___byte equ globals___0+79
analog1_greater_than___bit equ 3
        ; line_number = 587
        ; global value byte			# 8-bit analog value
value equ globals___0+31
        ; line_number = 588
        ; global limit byte			# 8-bit limit value
limit equ globals___0+32

        ; line_number = 590
        ;info   590, 216
        ; procedure main
main:
        ; Initialize some registers
        movlw   1
        movwf   _adcon0
        movlw   4
        bsf     __rp0___byte, __rp0___bit
        movwf   _ansel
        movlw   7
        bcf     __rp0___byte, __rp0___bit
        movwf   _cmcon0
        movlw   63
        bsf     __rp0___byte, __rp0___bit
        movwf   _trisa
        movlw   60
        movwf   _trisc
        ; arguments_none
        ; line_number = 592
        ;  returns_nothing

        ; line_number = 594
        ;  local pos_high byte
main__pos_high equ globals___0+33
        ; line_number = 595
        ;  local pos_middle byte
main__pos_middle equ globals___0+34
        ; line_number = 596
        ;  local pos_low byte
main__pos_low equ globals___0+35
        ; line_number = 597
        ;  local negative bit
main__negative___byte equ globals___0+79
main__negative___bit equ 4
        ; line_number = 598
        ;  local small_error byte
main__small_error equ globals___0+36

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>01 code:X0=cu=>X0)
        ; line_number = 600
        ;  call reset()
        ;info   600, 229
        bcf     __rp0___byte, __rp0___bit
        call    reset

        ; line_number = 602
        ;  loop_forever start
main__1:
        ; # Make sure we manage the UART:
        ; line_number = 604
        ;  call uart_manage()
        ;info   604, 231
        call    uart_manage

        ; # Update target if necesary
        ; line_number = 607
        ;  if file24_changed != 0 start
        ;info   607, 232
        ; Left minus Right
        movf    file24_changed,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=0 false.size=120
        ; No 2TEST: true.size=0 false.size=120
        ; 1GOTO: Single test with GOTO
        btfsc   __z___byte, __z___bit
        goto    main__22
        ; # Something has changed:
        ; line_number = 609
        ;  if file24_changed@target_index start
        ;info   609, 235
main__select__3___byte equ file24_changed
main__select__3___bit equ 1
        ; =>bit_code_emit@symbol(): sym=main__select__3
        ; No 1TEST: true.size=13 false.size=0
        ; No 2TEST: true.size=13 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__select__3___byte, main__select__3___bit
        goto    main__4
        ; line_number = 610
        ; target_seek := _true
        ;info   610, 237
        bsf     target_seek___byte, target_seek___bit
        ; line_number = 611
        ;  target := file24_float_convert(target_index)
        ;info   611, 238
        movlw   1
        call    file24_float_convert
        movlw   file24_float_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   target>>1
        call    _float32_pointer_store
        ; line_number = 612
        ;  file24_changed@target_index := _false
        ;info   612, 246
main__select__2___byte equ file24_changed
main__select__2___bit equ 1
        bcf     __rp0___byte, __rp0___bit
        bcf     main__select__2___byte, main__select__2___bit
        ; line_number = 613
        ;  call uart_manage()
        ;info   613, 248
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__4:
        ; line_number = 609
        ;  if file24_changed@target_index done
        ; line_number = 614
        ; if file24_changed@divisor_index start
        ;info   614, 250
main__select__11___byte equ file24_changed
main__select__11___bit equ 2
        ; =>bit_code_emit@symbol(): sym=main__select__11
        ; No 1TEST: true.size=28 false.size=0
        ; No 2TEST: true.size=28 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__select__11___byte, main__select__11___bit
        goto    main__12
        ; line_number = 615
        ; divisor := file24_float_convert(divisor_index)
        ;info   615, 252
        movlw   2
        call    file24_float_convert
        movlw   file24_float_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   divisor>>1
        call    _float32_pointer_store
        ; line_number = 616
        ;  if file24_zero@divisor_index start
        ;info   616, 260
main__select__5___byte equ file24_zero
main__select__5___bit equ 2
        ; =>bit_code_emit@symbol(): sym=main__select__5
        ; No 1TEST: true.size=9 false.size=0
        ; No 2TEST: true.size=9 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __rp0___byte, __rp0___bit
        bcf     __cb0___byte, __cb0___bit
        btfss   main__select__5___byte, main__select__5___bit
        goto    main__6
        bsf     __rp1___byte, __rp1___bit
        ; # Yikes, the user set the divisor to zero; set to 1 instead:
        ; line_number = 618
        ;  lows[divisor_index] := 1
        ;info   618, 265
        movlw   1
        movwf   lows+2
        ; line_number = 619
        ;  divisor := 1.0
        ;info   619, 267
        ; divisor := 1 (7F 00 00 00)
        movlw   127
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movwf   divisor
        clrf    divisor+1
        clrf    divisor+2
        clrf    divisor+3
        ; Recombine size1 = 0 || size2 = 0
main__6:
        ; line_number = 616
        ;  if file24_zero@divisor_index done
        ; line_number = 620
        ; file24_changed@divisor_index := _false
        ;info   620, 274
main__select__7___byte equ file24_changed
main__select__7___bit equ 2
        bcf     __rp0___byte, __rp0___bit
        bcf     main__select__7___byte, main__select__7___bit
        ; line_number = 621
        ;  file24_changed@kp_index := _true
        ;info   621, 276
main__select__8___byte equ file24_changed
main__select__8___bit equ 3
        bsf     main__select__8___byte, main__select__8___bit
        ; line_number = 622
        ;  file24_changed@ki_index := _true
        ;info   622, 277
main__select__9___byte equ file24_changed
main__select__9___bit equ 4
        bsf     main__select__9___byte, main__select__9___bit
        ; line_number = 623
        ;  file24_changed@kd_index := _true
        ;info   623, 278
main__select__10___byte equ file24_changed
main__select__10___bit equ 5
        bsf     main__select__10___byte, main__select__10___bit
        ; line_number = 624
        ;  call uart_manage()
        ;info   624, 279
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__12:
        ; line_number = 614
        ; if file24_changed@divisor_index done
        ; line_number = 625
        ; if file24_changed@kp_index start
        ;info   625, 280
main__select__14___byte equ file24_changed
main__select__14___bit equ 3
        ; =>bit_code_emit@symbol(): sym=main__select__14
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__select__14___byte, main__select__14___bit
        goto    main__15
        ; line_number = 626
        ; numerator := file24_float_convert(kp_index)
        ;info   626, 282
        movlw   3
        call    file24_float_convert
        movlw   file24_float_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   numerator>>1
        call    _float32_pointer_store
        ; line_number = 627
        ;  call uart_manage()
        ;info   627, 290
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 628
        ;  kp := numerator / divisor
        ;info   628, 293
        movlw   numerator>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   divisor>>1
        call    _float32_pointer_divide
        movlw   kp>>1
        call    _float32_pointer_store
        ; line_number = 629
        ;  file24_changed@kp_index := _false
        ;info   629, 301
main__select__13___byte equ file24_changed
main__select__13___bit equ 3
        bcf     __rp0___byte, __rp0___bit
        bcf     main__select__13___byte, main__select__13___bit
        ; line_number = 630
        ;  call uart_manage()
        ;info   630, 303
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__15:
        ; line_number = 625
        ; if file24_changed@kp_index done
        ; line_number = 631
        ; if file24_changed@ki_index start
        ;info   631, 305
main__select__17___byte equ file24_changed
main__select__17___bit equ 4
        ; =>bit_code_emit@symbol(): sym=main__select__17
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__select__17___byte, main__select__17___bit
        goto    main__18
        ; line_number = 632
        ; numerator := file24_float_convert(ki_index)
        ;info   632, 307
        movlw   4
        call    file24_float_convert
        movlw   file24_float_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   numerator>>1
        call    _float32_pointer_store
        ; line_number = 633
        ;  call uart_manage()
        ;info   633, 315
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 634
        ;  ki := numerator / divisor
        ;info   634, 318
        movlw   numerator>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   divisor>>1
        call    _float32_pointer_divide
        movlw   ki>>1
        call    _float32_pointer_store
        ; line_number = 635
        ;  file24_changed@ki_index := _false
        ;info   635, 326
main__select__16___byte equ file24_changed
main__select__16___bit equ 4
        bcf     __rp0___byte, __rp0___bit
        bcf     main__select__16___byte, main__select__16___bit
        ; line_number = 636
        ;  call uart_manage()
        ;info   636, 328
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__18:
        ; line_number = 631
        ; if file24_changed@ki_index done
        ; line_number = 637
        ; if file24_changed@kd_index start
        ;info   637, 330
main__select__20___byte equ file24_changed
main__select__20___bit equ 5
        ; =>bit_code_emit@symbol(): sym=main__select__20
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__select__20___byte, main__select__20___bit
        goto    main__21
        ; line_number = 638
        ; numerator := file24_float_convert(kd_index)
        ;info   638, 332
        movlw   5
        call    file24_float_convert
        movlw   file24_float_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   numerator>>1
        call    _float32_pointer_store
        ; line_number = 639
        ;  call uart_manage()
        ;info   639, 340
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 640
        ;  kd := numerator / divisor
        ;info   640, 343
        movlw   numerator>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   divisor>>1
        call    _float32_pointer_divide
        movlw   kd>>1
        call    _float32_pointer_store
        ; line_number = 641
        ;  file24_changed@kd_index := _false
        ;info   641, 351
main__select__19___byte equ file24_changed
main__select__19___bit equ 5
        bcf     __rp0___byte, __rp0___bit
        bcf     main__select__19___byte, main__select__19___bit
        ; line_number = 642
        ;  call uart_manage()
        ;info   642, 353
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage

        ; Recombine size1 = 0 || size2 = 0
main__21:
        ; line_number = 637
        ; if file24_changed@kd_index done
main__22:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 607
        ;  if file24_changed != 0 done
        ; line_number = 644
        ; if target_seek start
        ;info   644, 355
        ; =>bit_code_emit@symbol(): sym=target_seek
        ; No 1TEST: true.size=363 false.size=0
        ; No 2TEST: true.size=363 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   target_seek___byte, target_seek___bit
        goto    main__52
        bsf     __rp1___byte, __rp1___bit
        ; # Fetch the position atomically:
        ; line_number = 646
        ;  _gie := _false
        ;info   646, 358
        bcf     _gie___byte, _gie___bit
        ; line_number = 647
        ;  pos_high := quad_high
        ;info   647, 359
        movf    quad_high,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_high
        ; line_number = 648
        ;  pos_middle := quad_middle
        ;info   648, 362
        bsf     __rp1___byte, __rp1___bit
        movf    quad_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_middle
        ; line_number = 649
        ;  pos_low := quad_low
        ;info   649, 366
        bsf     __rp1___byte, __rp1___bit
        movf    quad_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_low
        ; line_number = 650
        ;  _gie := _true
        ;info   650, 370
        bsf     _gie___byte, _gie___bit
        ; line_number = 651
        ;  call uart_manage()
        ;info   651, 371
        call    uart_manage

        ; # Convert the position bytes into a float:
        ; line_number = 654
        ;  position := xyz(pos_high, pos_middle, pos_low)
        ;info   654, 372
        movf    main__pos_high,w
        movwf   xyz__high
        movf    main__pos_middle,w
        movwf   xyz__middle
        movf    main__pos_low,w
        call    xyz
        movlw   xyz__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   position>>1
        call    _float32_pointer_store
        ; line_number = 655
        ;  call uart_manage()
        ;info   655, 384
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage

        ; # Figure out the proportional error:
        ; line_number = 658
        ;  previous_error := error
        ;info   658, 387
        movlw   error>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   previous_error>>1
        call    _float32_pointer_store
        ; line_number = 659
        ;  error := position - target
        ;info   659, 393
        movlw   position>>1
        call    _float32_pointer_load
        movlw   target>>1
        call    _float32_pointer_subtract
        movlw   error>>1
        call    _float32_pointer_store
        ; line_number = 660
        ;  error_sum := error_sum + error
        ;info   660, 399
        movlw   error_sum>>1
        call    _float32_pointer_load
        movlw   error>>1
        call    _float32_pointer_add
        movlw   error_sum>>1
        call    _float32_pointer_store
        ; line_number = 661
        ;  call uart_manage()
        ;info   661, 405
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage

        ; # Compute the PID equation:
        ; line_number = 664
        ;  pid := kp * error
        ;info   664, 408
        movlw   kp>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   error>>1
        call    _float32_pointer_multiply
        movlw   pid>>1
        call    _float32_pointer_store
        ; line_number = 665
        ;  call uart_manage()
        ;info   665, 416
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 666
        ;  pid := pid + kd * (error - previous_error)
        ;info   666, 419
        movlw   error>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   previous_error>>1
        call    _float32_pointer_subtract
        movlw   kd>>1
        call    _float32_pointer_multiply
        movlw   pid>>1
        call    _float32_pointer_add
        movlw   pid>>1
        call    _float32_pointer_store
        ; line_number = 667
        ;  call uart_manage()
        ;info   667, 431
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 668
        ;  pid := pid + ki * error_sum
        ;info   668, 434
        movlw   ki>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   error_sum>>1
        call    _float32_pointer_multiply
        movlw   pid>>1
        call    _float32_pointer_add
        movlw   pid>>1
        call    _float32_pointer_store

        ; # Set the new motor speed:
        ; line_number = 671
        ;  negative := _false
        ;info   671, 444
        bcf     __rp0___byte, __rp0___bit
        bcf     main__negative___byte, main__negative___bit
        ; line_number = 672
        ;  if pid < 0.0 start
        ;info   672, 446
        movlw   pid>>1
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=7 false.size=0
        ; No 2TEST: true.size=7 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb0___byte, __cb0___bit
        btfss   __z___byte, __z___bit
        goto    main__23
        bsf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        ; # Work in positive arithmetic:
        ; line_number = 674
        ;  negative := _true
        ;info   674, 455
        bsf     main__negative___byte, main__negative___bit
        ; line_number = 675
        ;  pid := -pid
        ;info   675, 456
        movlw   pid>>1
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        call    _float32_negate
        movlw   pid>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
main__23:
        ; line_number = 672
        ;  if pid < 0.0 done
        ; line_number = 677
        ; if pid > 127.0 start
        ;info   677, 462
        ; -127 = 85 fe 00 00
        movlw   133
        movwf   _float32_aexp
        movlw   254
        movwf   _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   pid>>1
        bsf     __cb0___byte, __cb0___bit
        call    _float32_pointer_add
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=7 false.size=83
        ; No 2TEST: true.size=7 false.size=83
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__31
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 678
        ; target_speed := 127
        ;info   678, 476
        movlw   127
        movwf   target_speed
        ; line_number = 679
        ;  error_sum := 0.0
        ;info   679, 478
        ; error_sum := 0 (00 00 00 00)
        bsf     __rp0___byte, __rp0___bit
        clrf    error_sum
        clrf    error_sum+1
        clrf    error_sum+2
        clrf    error_sum+3
        ; Recombine code1_bit_states != code2_bit_states
        goto    main__32
        ; 2GOTO: Starting code 2
main__31:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 681
        ; target_speed := _float32_to_byte(pid)
        ;info   681, 485
        movlw   pid>>1
        call    _float32_pointer_load
        movlw   _float32_to_byte__number>>1
        call    _float32_pointer_store
        call    _float32_to_byte
        bcf     __rp0___byte, __rp0___bit
        movwf   target_speed
        ; line_number = 682
        ;  call uart_manage()
        ;info   682, 492
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage

        ; # Extract the error as a small byte:
        ; line_number = 685
        ;  if error >= 0.0 start
        ;info   685, 494
        movlw   error>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        call    _float32_greater_than_or_equal
        ; =>bit_code_emit@symbol(): sym=__z
        ; line_number = 686
        ; if error >= 255.0 start
        ;info   686, 499
        ; -255 = 86 ff 00 00
        movlw   134
        movwf   _float32_aexp
        ; line_number = 691
        ; if error < -255.0 start
        ;info   691, 501
        ; 255 = 86 7f 00 00
        ; No 1TEST: true.size=22 false.size=23
        ; No 2TEST: true.size=22 false.size=23
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__28
        bsf     __cb0___byte, __cb0___bit
        movlw   255
        movwf   _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   error>>1
        call    _float32_pointer_add
        call    _float32_greater_than_or_equal
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=7
        ; No 2TEST: true.size=2 false.size=7
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__26
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 687
        ; small_error := 255
        ;info   687, 516
        movlw   255
        movwf   main__small_error
        ; Recombine code1_bit_states != code2_bit_states
        goto    main__27
        ; 2GOTO: Starting code 2
main__26:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 689
        ; small_error := _float32_to_byte(error)
        ;info   689, 520
        movlw   error>>1
        call    _float32_pointer_load
        movlw   _float32_to_byte__number>>1
        call    _float32_pointer_store
        call    _float32_to_byte
        bcf     __rp0___byte, __rp0___bit
        movwf   main__small_error
main__27:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>00 code:X1=cu=>X1)
        ; 2GOTO: code final bitstates:(data:01=uu=>00 code:X1=cu=>X?)
        ; line_number = 686
        ; if error >= 255.0 done
        bcf     __cb0___byte, __cb0___bit
        goto    main__29
        ; 2GOTO: Starting code 2
main__28:
        bsf     __cb0___byte, __cb0___bit
        movlw   127
        movwf   _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   error>>1
        call    _float32_pointer_add
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=8
        ; No 2TEST: true.size=2 false.size=8
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__24
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 692
        ; small_error := 255
        ;info   692, 541
        movlw   255
        movwf   main__small_error
        ; Recombine code1_bit_states != code2_bit_states
        goto    main__25
        ; 2GOTO: Starting code 2
main__24:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 694
        ; small_error := _float32_to_byte(-error)
        ;info   694, 545
        movlw   error>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_to_byte__number>>1
        call    _float32_pointer_store
        call    _float32_to_byte
        bcf     __rp0___byte, __rp0___bit
        movwf   main__small_error
main__25:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>00 code:X1=cu=>X1)
        ; 2GOTO: code final bitstates:(data:01=uu=>00 code:X1=cu=>X?)
        ; line_number = 691
        ; if error < -255.0 done
main__29:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code final bitstates:(data:01=uu=>01 code:X1=cu=>X?)
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 685
        ;  if error >= 0.0 done
        ; line_number = 695
        ; call uart_manage()
        ;info   695, 554
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage

        ; # We we are in -{deadband} <= {error} <= {deadband},
        ; # we turn everything off:
        ; line_number = 699
        ;  if small_error <= deadband start
        ;info   699, 556
        movf    deadband,w
        subwf   main__small_error,w
        btfsc   __z___byte, __z___bit
        bcf     __c___byte, __c___bit
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=0 false.size=6
        ; No 2TEST: true.size=0 false.size=6
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    main__30
        ; line_number = 700
        ; target_speed := 0
        ;info   700, 562
        clrf    target_speed
        ; line_number = 701
        ;  error_sum := 0.0
        ;info   701, 563
        ; error_sum := 0 (00 00 00 00)
        bsf     __rp0___byte, __rp0___bit
        clrf    error_sum
        clrf    error_sum+1
        clrf    error_sum+2
        clrf    error_sum+3

main__30:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 699
        ;  if small_error <= deadband done
main__32:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>01 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>0? code:X1=cu=>X0)
        ; 2GOTO: code final bitstates:(data:10=uu=>0? code:X0=cu=>X0)
        ; line_number = 677
        ; if pid > 127.0 done
        ; # Deal with {minimum}:
        ; line_number = 704
        ;  if target_speed != 0 start
        ;info   704, 568
        ; Left minus Right
        bcf     __rp0___byte, __rp0___bit
        movf    target_speed,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=0 false.size=15
        ; No 2TEST: true.size=0 false.size=15
        ; 1GOTO: Single test with GOTO
        btfsc   __z___byte, __z___bit
        goto    main__35
        ; line_number = 705
        ; target_speed := target_speed + minimum
        ;info   705, 572
        movf    minimum,w
        addwf   target_speed,f
        ; line_number = 706
        ;  if target_speed > maximum start
        ;info   706, 574
        movf    maximum,w
        subwf   target_speed,w
        btfsc   __z___byte, __z___bit
        bcf     __c___byte, __c___bit
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __c___byte, __c___bit
        goto    main__33
        ; line_number = 707
        ; target_speed := maximum
        ;info   707, 580
        movf    maximum,w
        movwf   target_speed

        ; Recombine size1 = 0 || size2 = 0
main__33:
        ; line_number = 706
        ;  if target_speed > maximum done
        ; line_number = 709
        ; if negative start
        ;info   709, 582
        ; =>bit_code_emit@symbol(): sym=main__negative
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   main__negative___byte, main__negative___bit
        goto    main__34
        ; line_number = 710
        ; target_speed := 0 - target_speed
        ;info   710, 584
        movf    target_speed,w
        sublw   0
        movwf   target_speed

        ; Recombine size1 = 0 || size2 = 0
main__34:
        ; line_number = 709
        ; if negative done
main__35:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 704
        ;  if target_speed != 0 done
        ; # Deal with analog0 motor disable:
        ; line_number = 713
        ;  if ad0_enable start
        ;info   713, 587
        ; =>bit_code_emit@symbol(): sym=ad0_enable
        ; No 1TEST: true.size=62 false.size=0
        ; No 2TEST: true.size=62 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   ad0_enable___byte, ad0_enable___bit
        goto    main__43
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 714
        ; value := (ad0_value_middle << 6) | (ad0_value_low >> 2)
        ;info   714, 590
main__36 equ globals___0+66
        swapf   ad0_value_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__36
        rlf     main__36,f
        rlf     main__36,f
        movlw   192
        andwf   main__36,f
main__37 equ globals___0+67
        bsf     __rp1___byte, __rp1___bit
        rrf     ad0_value_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__37
        rrf     main__37,w
        andlw   63
        iorwf   main__36,w
        movwf   value
        ; line_number = 715
        ;  limit := (ad0_limit_middle << 6) | (ad0_limit_low >> 2)
        ;info   715, 605
main__38 equ globals___0+67
        bsf     __rp1___byte, __rp1___bit
        swapf   ad0_limit_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__38
        rlf     main__38,f
        rlf     main__38,f
        movlw   192
        andwf   main__38,f
main__39 equ globals___0+68
        bsf     __rp1___byte, __rp1___bit
        rrf     ad0_limit_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__39
        rrf     main__39,w
        andlw   63
        iorwf   main__38,w
        movwf   limit
        ; line_number = 716
        ;  analog0_greater_than := _false
        ;info   716, 621
        bcf     analog0_greater_than___byte, analog0_greater_than___bit
        ; line_number = 717
        ;  if value > limit start
        ;info   717, 622
        movf    limit,w
        subwf   value,w
        btfsc   __z___byte, __z___bit
        bcf     __c___byte, __c___bit
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __c___byte, __c___bit
        goto    main__42
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 718
        ; analog0_greater_than := _true
        ;info   718, 629
        bsf     analog0_greater_than___byte, analog0_greater_than___bit
        ; line_number = 719
        ;  if ad0_reverse start
        ;info   719, 630
        ; =>bit_code_emit@symbol(): sym=ad0_reverse
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 720
        ; if target < position start
        ;info   720, 631
        movlw   target>>1
        call    _float32_pointer_load
        movlw   position>>1
        call    _float32_pointer_subtract
        ; line_number = 723
        ; if target > position start
        ;info   723, 635
        ; No 1TEST: true.size=1 false.size=1
        ; No 2TEST: data0 mismatch
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        bcf     __rp0___byte, __rp0___bit
        btfss   ad0_reverse___byte, ad0_reverse___bit
        goto    main__40
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        bcf     __cb0___byte, __cb0___bit
        goto    main__41
        ; 2GOTO: Starting code 2
main__40:
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
main__41:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X1=cu=>X?)
        bsf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp0___byte, __rp0___bit
        btfsc   __z___byte, __z___bit
        ; line_number = 721
        ; target_speed := 0
        ;info   721, 651
        clrf    target_speed
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 720
        ; if target < position done
        ; line_number = 724
        ; target_speed := 0
        ;info   724, 652

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 723
        ; if target > position done
        ; line_number = 719
        ;  if ad0_reverse done
        ; Recombine size1 = 0 || size2 = 0
main__42:
        ; line_number = 717
        ;  if value > limit done
        ; Recombine size1 = 0 || size2 = 0
main__43:
        ; line_number = 713
        ;  if ad0_enable done
        ; # Deal with analog1 motor disable:
        ; line_number = 727
        ;  if ad1_enable start
        ;info   727, 652
        ; =>bit_code_emit@symbol(): sym=ad1_enable
        ; No 1TEST: true.size=62 false.size=0
        ; No 2TEST: true.size=62 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb0___byte, __cb0___bit
        btfss   ad1_enable___byte, ad1_enable___bit
        goto    main__51
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 728
        ; value := (ad1_value_middle << 6) | (ad1_value_low >> 2)
        ;info   728, 656
main__44 equ globals___0+67
        swapf   ad1_value_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__44
        rlf     main__44,f
        rlf     main__44,f
        movlw   192
        andwf   main__44,f
main__45 equ globals___0+68
        bsf     __rp1___byte, __rp1___bit
        rrf     ad1_value_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__45
        rrf     main__45,w
        andlw   63
        iorwf   main__44,w
        movwf   value
        ; line_number = 729
        ;  limit := (ad1_limit_middle << 6) | (ad1_limit_low >> 2)
        ;info   729, 671
main__46 equ globals___0+68
        bsf     __rp1___byte, __rp1___bit
        swapf   ad1_limit_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__46
        rlf     main__46,f
        rlf     main__46,f
        movlw   192
        andwf   main__46,f
main__47 equ globals___0+69
        bsf     __rp1___byte, __rp1___bit
        rrf     ad1_limit_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__47
        rrf     main__47,w
        andlw   63
        iorwf   main__46,w
        movwf   limit
        ; line_number = 730
        ;  analog1_greater_than := _false
        ;info   730, 687
        bcf     analog1_greater_than___byte, analog1_greater_than___bit
        ; line_number = 731
        ;  if value > limit start
        ;info   731, 688
        movf    limit,w
        subwf   value,w
        btfsc   __z___byte, __z___bit
        bcf     __c___byte, __c___bit
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __c___byte, __c___bit
        goto    main__50
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 732
        ; analog1_greater_than := _true
        ;info   732, 695
        bsf     analog1_greater_than___byte, analog1_greater_than___bit
        ; line_number = 733
        ;  if ad1_reverse start
        ;info   733, 696
        ; =>bit_code_emit@symbol(): sym=ad1_reverse
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 734
        ; if target < position start
        ;info   734, 697
        movlw   target>>1
        call    _float32_pointer_load
        movlw   position>>1
        call    _float32_pointer_subtract
        ; line_number = 737
        ; if target > position start
        ;info   737, 701
        ; No 1TEST: true.size=1 false.size=1
        ; No 2TEST: data0 mismatch
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        bcf     __rp0___byte, __rp0___bit
        btfss   ad1_reverse___byte, ad1_reverse___bit
        goto    main__48
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        bcf     __cb0___byte, __cb0___bit
        goto    main__49
        ; 2GOTO: Starting code 2
main__48:
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
main__49:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:X1=cu=>X1)
        ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X1=cu=>X?)
        bsf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp0___byte, __rp0___bit
        btfsc   __z___byte, __z___bit
        ; line_number = 735
        ; target_speed := 0
        ;info   735, 717
        clrf    target_speed
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 734
        ; if target < position done
        ; line_number = 738
        ; target_speed := 0
        ;info   738, 718

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 737
        ; if target > position done
        ; line_number = 733
        ;  if ad1_reverse done
        ; Recombine size1 = 0 || size2 = 0
main__50:
        ; line_number = 731
        ;  if value > limit done
        ; Recombine size1 = 0 || size2 = 0
main__51:
        ; line_number = 727
        ;  if ad1_enable done
        ; line_number = 740
        ; call speed_set(target_speed)
        ;info   740, 718
        movf    target_speed,w
        bcf     __cb0___byte, __cb0___bit
        call    speed_set


        ; Recombine size1 = 0 || size2 = 0
main__52:
        ; line_number = 644
        ; if target_seek done
        ; line_number = 602
        ;  loop_forever wrap-up
        goto    main__1
        ; line_number = 602
        ;  loop_forever done
        ; delay after procedure statements=non-uniform




        ; line_number = 743
        ;info   743, 722
        ; procedure reset
reset:
        ; arguments_none
        ; line_number = 745
        ;  returns_nothing

        ; # This procedure will return the restore all of the state to start-up state.

        ; line_number = 749
        ;  local index byte
reset__index equ globals___0+37

        ; # Initialize UART:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 752
        ;  address := rb2bus_eedata_read()
        ;info   752, 722
        call    rb2bus_eedata_read
        movwf   address
        ; line_number = 753
        ;  if address = 0 start
        ;info   753, 724
        ; Left minus Right
        movf    address,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __z___byte, __z___bit
        goto    reset__1
        ; line_number = 754
        ; address := 21
        ;info   754, 727
        movlw   21
        movwf   address
        ; Recombine size1 = 0 || size2 = 0
reset__1:
        ; line_number = 753
        ;  if address = 0 done
        ; line_number = 755
        ; call uart_initialize()
        ;info   755, 729
        call    uart_initialize

        ; # Initialize prescaler for use by Timer 0:
        ; # _rapu := _true	# Disable bit port A pull-ups (bit 7)
        ; # _integ := _false	# Interrupt edge select (bit 6)
        ; # _t0cs := _false	# Use clock for tmr0 (bit 5)
        ; # _t0se := _false	# Source edge select (bit 4)
        ; # _psa := _false	# Prescaler is assigned to timer0 (bit 3)
        ; # _ps2 := _true
        ; # _ps1 := _true
        ; # _ps0 := _true	# Prescaler = 256
        ; # 1000 0111 = 0x87
        ; line_number = 767
        ;  _option_reg := 0x87
        ;info   767, 730
        movlw   135
        bsf     __rp0___byte, __rp0___bit
        movwf   _option_reg

        ; # Initialize Timer 1:
        ; # _t1ginv := _false	# Timer1 gate (bit 7)
        ; # _tmr1ge := _false	# Timer1 gate enable (bit 6)
        ; # _t1ckps1 := _false # (bit 5)
        ; # _t1ckps0 := _false # Timer1 prescale = 1:1 (bit 4)
        ; # _t10scen := _false # LP oscillator is off (bit 3)
        ; # _t1sync := _false	# Timer 1 synchorinize (bit 2)
        ; # _tmr1cs := _false	# Use internal clock (bit 1)
        ; # _tmr1on := _false	# Leave timer off for now (bit 0)
        ; # 0000 0000 = 0
        ; line_number = 779
        ;  _t1con := 0
        ;info   779, 733
        bcf     __rp0___byte, __rp0___bit
        clrf    _t1con

        ; # Initialize A/D module:
        ; # ANSEL is already set by the compiler:
        ; #
        ; # ADCON0 needs to be configured:
        ; # _adfm := _true	# Right justified result
        ; # _vcfg := _false	# Use 5V as Vref
        ; # _chs2 := _false
        ; # _chs1 := _true
        ; # _chs0 := _false	# Channel = 010 = AN2
        ; # _go := _false
        ; # _adon := _true	# Turn on A/D converter
        ; # 10x0 1001 = 0x89
        ; line_number = 793
        ;  _adcon0 := 0x89
        ;info   793, 735
        movlw   137
        movwf   _adcon0
        ; line_number = 794
        ;  channel := 2
        ;info   794, 737
        movlw   2
        movwf   channel

        ; # ADCON1 needs to be configured:
        ; # ADCS<2:0> := 101 = Tad=1.6uS at Fosc=20MHz
        ; # _adcs2 := _true
        ; # _adcs1 := _false
        ; # _adcs0 := _true
        ; # x110 xxxx = 0x50
        ; line_number = 802
        ;  _adcon1 := 0x50
        ;info   802, 739
        movlw   80
        bsf     __rp0___byte, __rp0___bit
        movwf   _adcon1

        ; # Initialize motor:
        ; line_number = 805
        ;  call speed_set(0)
        ;info   805, 742
        movlw   0
        bcf     __rp0___byte, __rp0___bit
        call    speed_set

        ; # Initialize {file8}:
        ; line_number = 808
        ;  index := 0
        ;info   808, 745
        clrf    reset__index
        ; line_number = 809
        ;  while index < file8_size start
reset__2:
        ;info   809, 746
        movlw   8
        subwf   reset__index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=0 false.size=7
        ; No 2TEST: true.size=0 false.size=7
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    reset__3
        ; line_number = 810
        ; file8[index] := 0
        ;info   810, 750
        ; index_fsr_first
        movf    reset__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 811
        ;  index := index + 1
        ;info   811, 755
        incf    reset__index,f
        goto    reset__2
reset__3:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 809
        ;  while index < file8_size done
        ; line_number = 812
        ; call configure_update()
        ;info   812, 757
        call    configure_update
        ; line_number = 813
        ;  deadband := 5
        ;info   813, 758
        movlw   5
        movwf   deadband
        ; line_number = 814
        ;  minimum := 0
        ;info   814, 760
        clrf    minimum
        ; line_number = 815
        ;  maximum := 60
        ;info   815, 761
        movlw   60
        movwf   maximum
        ; line_number = 816
        ;  error_sum := 0.0
        ;info   816, 763
        ; error_sum := 0 (00 00 00 00)
        bsf     __rp0___byte, __rp0___bit
        clrf    error_sum
        clrf    error_sum+1
        clrf    error_sum+2
        clrf    error_sum+3

        ; # Initialize {file24}:
        ; line_number = 819
        ;  index := 0
        ;info   819, 768
        bcf     __rp0___byte, __rp0___bit
        clrf    reset__index
        ; line_number = 820
        ;  while index < file24_size start
reset__4:
        ;info   820, 770
        movlw   10
        subwf   reset__index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=0 false.size=17
        ; No 2TEST: true.size=0 false.size=17
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    reset__5
        ; line_number = 821
        ; highs[index] := 0
        ;info   821, 774
        ; index_fsr_first
        movf    reset__index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 822
        ;  middles[index] := 0
        ;info   822, 779
        ; index_fsr_first
        movf    reset__index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 823
        ;  lows[index] := 0
        ;info   823, 784
        ; index_fsr_first
        movf    reset__index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 824
        ;  index := index + 1
        ;info   824, 789
        incf    reset__index,f
        goto    reset__4
reset__5:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 820
        ;  while index < file24_size done
        ; line_number = 825
        ; file24_index := 0
        ;info   825, 791
        clrf    file24_index
        ; line_number = 826
        ;  file24_changed := 0
        ;info   826, 792
        clrf    file24_changed
        ; line_number = 827
        ;  file24_zero := 0	
        ;info   827, 793
        clrf    file24_zero

        ; # For now force divisor to -1:
        ; line_number = 830
        ;  highs[divisor_index] := 0xff
        ;info   830, 794
        movlw   255
        bsf     __rp1___byte, __rp1___bit
        movwf   highs+2
        ; line_number = 831
        ;  middles[divisor_index] := 0xff
        ;info   831, 797
        movlw   255
        movwf   middles+2
        ; line_number = 832
        ;  lows[divisor_index] := 0xff
        ;info   832, 799
        movlw   255
        movwf   lows+2

        ; # Force the an update of {divisor}:
        ; line_number = 835
        ;  file24_changed@divisor_index := _true
        ;info   835, 801
reset__select__6___byte equ file24_changed
reset__select__6___bit equ 2
        bcf     __rp1___byte, __rp1___bit
        bsf     reset__select__6___byte, reset__select__6___bit

        ; # For now kp = 20:
        ; line_number = 838
        ;  lows[kp_index] := 1
        ;info   838, 803
        movlw   1
        bsf     __rp1___byte, __rp1___bit
        movwf   lows+3

        ; # No need to manually force a {kp} update, since updating {divisor} does
        ; # that already:

        ; # We only turn on target seeking when the {target} is changed.
        ; # It gets turned off when find the target (or a limit switch is hit):
        ; line_number = 845
        ;  target_seek := _false
        ;info   845, 806
        bcf     __rp1___byte, __rp1___bit
        bcf     target_seek___byte, target_seek___bit

        ; # It does not really matter, but setting {target} to 0.0 does not hurt:
        ; line_number = 848
        ;  target := 0.0
        ;info   848, 808
        ; target := 0 (00 00 00 00)
        bsf     __rp1___byte, __rp1___bit
        clrf    target
        clrf    target+1
        clrf    target+2
        clrf    target+3

        ; # Always initialize {quad_state} even if we do not use quadrature:
        ; line_number = 851
        ;  quad_state := 0
        ;info   851, 813
        clrf    quad_state

        ; # The weak pull-ups can be turned off:
        ; line_number = 854
        ;  _wpua := 0
        ;info   854, 814
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        clrf    _wpua

        ; # We are only interested in changes in the A and B channels:
        ; line_number = 857
        ;  _ioca := quad_a_mask | quad_b_mask
        ;info   857, 817
        movlw   3
        movwf   _ioca

        ; # We only want to turn on the interrupt on change if we are using
        ; # the quadrature (i.e. !{use_potentiometer}:
        ; line_number = 861
        ;  _raie := !use_potentiometer
        ;info   861, 819
        bcf     _raie___byte, _raie___bit
        ; =>bit_code_emit@symbol(): sym=use_potentiometer
        ; 1TEST: Single test with code in skip slot
        bcf     __rp0___byte, __rp0___bit
        btfss   use_potentiometer___byte, use_potentiometer___bit
        bsf     _raie___byte, _raie___bit
        ; Recombine size1 = 0 || size2 = 0

        ; # Enable the appropriate interrupts:
        ; line_number = 864
        ;  _t0if := _false
        ;info   864, 823
        bcf     _t0if___byte, _t0if___bit
        ; line_number = 865
        ;  _t0ie := _true
        ;info   865, 824
        bsf     _t0ie___byte, _t0ie___bit
        ; line_number = 866
        ;  _tmr1if := _false
        ;info   866, 825
        bcf     _tmr1if___byte, _tmr1if___bit
        ; line_number = 867
        ;  _tmr1ie := _true
        ;info   867, 826
        bsf     __rp0___byte, __rp0___bit
        bsf     _tmr1ie___byte, _tmr1ie___bit
        ; line_number = 868
        ;  _peie := _true
        ;info   868, 828
        bsf     _peie___byte, _peie___bit
        ; line_number = 869
        ;  _gie := _true
        ;info   869, 829
        bsf     _gie___byte, _gie___bit


        ; delay after procedure statements=non-uniform
        bcf     __rp0___byte, __rp0___bit
        ; Implied return
        retlw   0




        ; line_number = 872
        ;info   872, 832
        ; procedure uart_manage
uart_manage:
        ; arguments_none
        ; line_number = 874
        ;  returns_nothing

        ; line_number = 876
        ;  local command byte
uart_manage__command equ globals___0+38
        ; line_number = 877
        ;  local index byte
uart_manage__index equ globals___0+39
        ; line_number = 878
        ;  local allow bit
uart_manage__allow___byte equ globals___0+79
uart_manage__allow___bit equ 5

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 880
        ;  if uart_input_count != 0 start
        ;info   880, 832
        ; Left minus Right
        movf    uart_input_count,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=0 false.size=464
        ; No 2TEST: true.size=0 false.size=464
        ; 1GOTO: Single test with GOTO
        btfsc   __z___byte, __z___bit
        goto    uart_manage__75
        ; # We have a data/command byte to process:
        ; line_number = 882
        ;  command := uart_input[uart_input_out_index & uart_input_mask]
        ;info   882, 835
        movlw   3
        andwf   uart_input_out_index,w
        addlw   uart_input
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   uart_manage__command
        ; line_number = 883
        ;  uart_input_out_index := uart_input_out_index + 1
        ;info   883, 842
        incf    uart_input_out_index,f

        ; # Manage {uart_input_count} and {uart_input_pending} atomically:
        ; line_number = 886
        ;  _gie := _false
        ;info   886, 843
        bcf     _gie___byte, _gie___bit
        ; line_number = 887
        ;  uart_input_count := uart_input_count - 1
        ;info   887, 844
        decf    uart_input_count,f
        ; line_number = 888
        ;  if uart_input_count = 0 start
        ;info   888, 845
        ; Left minus Right
        movf    uart_input_count,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; line_number = 889
        ; uart_input_pending := _false
        ;info   889, 847
        bcf     uart_input_pending___byte, uart_input_pending___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 888
        ;  if uart_input_count = 0 done
        ; line_number = 890
        ; _gie := _true
        ;info   890, 848
        bsf     _gie___byte, _gie___bit

        ; # We received a "data" byte"
        ; line_number = 893
        ;  switch state start
        ;info   893, 849
        ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=14
        movlw   uart_manage__73>>8
        movwf   __pclath
        movf    state,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__73
        movwf   __pcl
        ; page_group 20
uart_manage__73:
        goto    uart_manage__55
        goto    uart_manage__56
        goto    uart_manage__57
        goto    uart_manage__58
        goto    uart_manage__59
        goto    uart_manage__60
        goto    uart_manage__61
        goto    uart_manage__62
        goto    uart_manage__63
        goto    uart_manage__64
        goto    uart_manage__65
        goto    uart_manage__66
        goto    uart_manage__74
        goto    uart_manage__74
        goto    uart_manage__67
        goto    uart_manage__68
        goto    uart_manage__69
        goto    uart_manage__70
        goto    uart_manage__71
        goto    uart_manage__72
        ; line_number = 894
        ; case 0
uart_manage__55:
        ; # Technically we should not get here because {_adden} should
        ; # be {_true}, but just in case we do, we just ignore the byte:
        ; line_number = 897
        ;  do_nothing
        ;info   897, 874
        goto    uart_manage__74
        ; line_number = 898
        ; case 1
uart_manage__56:
        ; # Ignore the echo before processing a command byte:
        ; line_number = 900
        ;  state := state_command
        ;info   900, 875
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 901
        ; case 2
uart_manage__57:
        ; # Process a command byte:
        ; line_number = 903
        ;  switch command >> 6 start
        ;info   903, 878
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   uart_manage__39>>8
        movwf   __pclath
uart_manage__40 equ globals___0+70
        swapf   uart_manage__command,w
        movwf   uart_manage__40
        rrf     uart_manage__40,f
        rrf     uart_manage__40,w
        andlw   3
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__39
        movwf   __pcl
        ; page_group 4
uart_manage__39:
        goto    uart_manage__37
        goto    uart_manage__41
        goto    uart_manage__41
        goto    uart_manage__38
        ; line_number = 904
        ; case 0
uart_manage__37:
        ; # 00xx xxxx:
        ; line_number = 906
        ;  switch (command >> 3) & 7 start
        ;info   906, 891
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 975
        ; case_maximum 7
        movlw   uart_manage__24>>8
        movwf   __pclath
uart_manage__25 equ globals___0+70
        rrf     uart_manage__command,w
        movwf   uart_manage__25
        rrf     uart_manage__25,f
        rrf     uart_manage__25,w
        andlw   7
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__24
        movwf   __pcl
        ; page_group 8
uart_manage__24:
        goto    uart_manage__19
        goto    uart_manage__20
        goto    uart_manage__21
        goto    uart_manage__22
        goto    uart_manage__23
        goto    uart_manage__26
        goto    uart_manage__26
        goto    uart_manage__26
        ; line_number = 907
        ; case 0
uart_manage__19:
        ; # 0000 0xxx:
        ; line_number = 909
        ;  switch command & 7 start
        ;info   909, 908
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   uart_manage__9>>8
        movwf   __pclath
        movlw   7
        andwf   uart_manage__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__9
        movwf   __pcl
        ; page_group 8
uart_manage__9:
        goto    uart_manage__1
        goto    uart_manage__2
        goto    uart_manage__3
        goto    uart_manage__4
        goto    uart_manage__5
        goto    uart_manage__6
        goto    uart_manage__7
        goto    uart_manage__8
        ; line_number = 910
        ; case 0
uart_manage__1:
        ; # 0000 0000 (Value All Get):
        ; line_number = 912
        ;  call uart_byte_put(highs[file24_index])
        ;info   912, 922
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 913
        ;  state := state_file24_full_get1
        ;info   913, 928
        movlw   3
        movwf   state
        goto    uart_manage__10
        ; line_number = 914
        ; case 1
uart_manage__2:
        ; # 0000 0001 (Value Low Get):
        ; line_number = 916
        ;  call uart_byte_put(lows[file24_index])
        ;info   916, 931
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 917
        ;  state := state_echo_then_command
        ;info   917, 937
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 918
        ; case 2
uart_manage__3:
        ; # 0000 0010 (Value Middle Get):
        ; line_number = 920
        ;  call uart_byte_put(middles[file24_index])
        ;info   920, 940
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 921
        ;  state := state_echo_then_command
        ;info   921, 946
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 922
        ; case 3
uart_manage__4:
        ; # 0000 0011 (Value High Get):
        ; line_number = 924
        ;  call uart_byte_put(highs[file24_index])
        ;info   924, 949
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 925
        ;  state := state_echo_then_command
        ;info   925, 955
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 926
        ; case 4
uart_manage__5:
        ; # 0000 0100 (Value All Set):
        ; line_number = 928
        ;  state := state_file24_full_set1
        ;info   928, 958
        movlw   5
        movwf   state
        goto    uart_manage__10
        ; line_number = 929
        ; case 5
uart_manage__6:
        ; # 0000 0101 (Value Low Set):
        ; line_number = 931
        ;  state := state_value_low_set1
        ;info   931, 961
        movlw   8
        movwf   state
        goto    uart_manage__10
        ; line_number = 932
        ; case 6
uart_manage__7:
        ; # 0000 0110 (Value Middle Set):
        ; line_number = 934
        ;  state := state_value_middle_set1
        ;info   934, 964
        movlw   9
        movwf   state
        goto    uart_manage__10
        ; line_number = 935
        ; case 7
uart_manage__8:
        ; # 0000 0111 (Value High Set):
        ; line_number = 937
        ;  state := state_value_high_set1
        ;info   937, 967
        movlw   10
        movwf   state
uart_manage__10:
        ; line_number = 909
        ;  switch command & 7 done
        goto    uart_manage__26
        ; line_number = 938
        ; case 1
uart_manage__20:
        ; # 0000 1sss (Value Index Set):
        ; line_number = 940
        ;  file24_index := command & 7
        ;info   940, 970
        movlw   7
        andwf   uart_manage__command,w
        movwf   file24_index
        ; # Make sure we stay in bounds:
        ; line_number = 942
        ;  if file24_index >= file24_size start
        ;info   942, 973
        movlw   10
        subwf   file24_index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; 1TEST: Single test with code in skip slot
        btfsc   __c___byte, __c___bit
        ; line_number = 943
        ; file24_index := 0
        ;info   943, 976
        clrf    file24_index
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 942
        ;  if file24_index >= file24_size done
        ; line_number = 944
        ; state := state_command
        ;info   944, 977
        movlw   2
        movwf   state
        goto    uart_manage__26
        ; line_number = 945
        ; case 2
uart_manage__21:
        ; # 0001 0xxx (Byte Get):
        ; line_number = 947
        ;  index := command & 7
        ;info   947, 980
        movlw   7
        andwf   uart_manage__command,w
        movwf   uart_manage__index
        ; line_number = 948
        ;  if index = 2 start
        ;info   948, 983
        ; Left minus Right
        movlw   254
        addwf   uart_manage__index,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; # 0001 0010: (Status_Get):
        ; line_number = 950
        ;  call status_update()
        ;info   950, 986
        call    status_update
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 948
        ;  if index = 2 done
        ; line_number = 951
        ; call uart_byte_put(file8[index])
        ;info   951, 987
        movf    uart_manage__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 952
        ;  state := state_echo_then_command
        ;info   952, 993
        movlw   1
        movwf   state
        goto    uart_manage__26
        ; line_number = 953
        ; case 3
uart_manage__22:
        ; # 0001 1xxx (Byte Set):
        ; line_number = 955
        ;  index := command & 7
        ;info   955, 996
        movlw   7
        andwf   uart_manage__command,w
        movwf   uart_manage__index
        ; line_number = 956
        ;  state := state_file8_set1
        ;info   956, 999
        movlw   11
        movwf   state
        goto    uart_manage__26
        ; line_number = 957
        ; case 4
uart_manage__23:
        ; # 0010 0xxx (Probe Get):
        ; line_number = 959
        ;  switch command & 7 start
        ;info   959, 1002
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 972
        ; case_maximum 7
        movlw   uart_manage__17>>8
        movwf   __pclath
        movlw   7
        andwf   uart_manage__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        ; All case bodies prefer this bit set
        bsf     __rp0___byte, __rp0___bit
        addlw   uart_manage__17
        movwf   __pcl
        ; page_group 8
uart_manage__17:
        goto    uart_manage__11
        goto    uart_manage__12
        goto    uart_manage__13
        goto    uart_manage__14
        goto    uart_manage__15
        goto    uart_manage__16
        goto    uart_manage__18
        goto    uart_manage__18
        ; line_number = 960
        ; case 0
uart_manage__11:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 961
        ; call zyx(position)
        ;info   961, 1018
        movlw   position>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
        goto    uart_manage__18
        ; line_number = 962
        ; case 1
uart_manage__12:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 963
        ; call zyx(target)
        ;info   963, 1027
        movlw   target>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
        goto    uart_manage__18
        ; line_number = 964
        ; case 2
uart_manage__13:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 965
        ; call zyx(error)
        ;info   965, 1036
        movlw   error>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
        goto    uart_manage__18
        ; line_number = 966
        ; case 3
uart_manage__14:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 967
        ; call zyx(pid)
        ;info   967, 1045
        movlw   pid>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
        goto    uart_manage__18
        ; line_number = 968
        ; case 4
uart_manage__15:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 969
        ; call zyx(divisor)
        ;info   969, 1054
        movlw   divisor>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
        goto    uart_manage__18
        ; line_number = 970
        ; case 5
uart_manage__16:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 971
        ; call zyx(kp)
        ;info   971, 1063
        movlw   kp>>1
        call    _float32_pointer_load
        movlw   zyx__value>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    zyx
uart_manage__18:
        ; line_number = 959
        ;  switch command & 7 done
        ; line_number = 973
        ; call uart_byte_put(high)
        ;info   973, 1070
        movf    high,w
        call    uart_byte_put
        ; line_number = 974
        ;  state := state_probe_get1
        ;info   974, 1072
        movlw   18
        movwf   state
uart_manage__26:
        ; line_number = 906
        ;  switch (command >> 3) & 7 done
        goto    uart_manage__41
        ; line_number = 976
        ; case 3
uart_manage__38:
        ; # 11xx xxxx:
        ; line_number = 978
        ;  switch (command >> 3) & 7 start
        ;info   978, 1075
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   uart_manage__34>>8
        movwf   __pclath
uart_manage__35 equ globals___0+70
        rrf     uart_manage__command,w
        movwf   uart_manage__35
        rrf     uart_manage__35,f
        rrf     uart_manage__35,w
        andlw   7
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__34
        movwf   __pcl
        ; page_group 8
uart_manage__34:
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__36
        goto    uart_manage__33
        ; line_number = 979
        ; case 7
uart_manage__33:
        ; # 1111 1xxx:
        ; line_number = 981
        ;  switch command & 7 start
        ;info   981, 1092
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   uart_manage__31>>8
        movwf   __pclath
        movlw   7
        andwf   uart_manage__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__31
        movwf   __pcl
        ; page_group 8
uart_manage__31:
        goto    uart_manage__32
        goto    uart_manage__32
        goto    uart_manage__32
        goto    uart_manage__32
        goto    uart_manage__27
        goto    uart_manage__28
        goto    uart_manage__29
        goto    uart_manage__30
        ; line_number = 982
        ; case 4
uart_manage__27:
        ; # 1111 1100 (Address Set):
        ; line_number = 984
        ;  call uart_byte_put(address)
        ;info   984, 1106
        movf    address,w
        call    uart_byte_put
        ; line_number = 985
        ;  state := state_address_set1
        ;info   985, 1108
        movlw   14
        movwf   state
        goto    uart_manage__32
        ; line_number = 986
        ; case 5
uart_manage__28:
        ; # 1111 1101 (Id_Next):
        ; line_number = 988
        ;  call uart_byte_put(id[id_index])
        ;info   988, 1111
        movf    id_index,w
        call    id
        call    uart_byte_put
        ; line_number = 989
        ;  id_index := id_index + 1
        ;info   989, 1114
        incf    id_index,f
        ; line_number = 990
        ;  if id_index >= id.size start
        ;info   990, 1115
        movlw   28
        subwf   id_index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; 1TEST: Single test with code in skip slot
        btfsc   __c___byte, __c___bit
        ; line_number = 991
        ; id_index := id_index - 1
        ;info   991, 1118
        decf    id_index,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 990
        ;  if id_index >= id.size done
        ; line_number = 992
        ; state := state_echo_then_command
        ;info   992, 1119
        movlw   1
        movwf   state
        goto    uart_manage__32
        ; line_number = 993
        ; case 6
uart_manage__29:
        ; # 1111 1110 (Id_Start):
        ; line_number = 995
        ;  id_index := 0
        ;info   995, 1122
        clrf    id_index
        goto    uart_manage__32
        ; line_number = 996
        ; case 7
uart_manage__30:
        ; # 1111 1111 (Deselect):
        ; line_number = 998
        ;  _adden := _true
        ;info   998, 1124
        bsf     _adden___byte, _adden___bit
        ; line_number = 999
        ;  state := state_select_wait
        ;info   999, 1125
        clrf    state
uart_manage__32:
        ; line_number = 981
        ;  switch command & 7 done
uart_manage__36:
        ; line_number = 978
        ;  switch (command >> 3) & 7 done
uart_manage__41:
        ; line_number = 903
        ;  switch command >> 6 done
        goto    uart_manage__74
        ; line_number = 1000
        ; case 3
uart_manage__58:
        ; # Value All Get 2nd response byte:
        ; line_number = 1002
        ;  call uart_byte_put(middles[file24_index])
        ;info   1002, 1127
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 1003
        ;  state := state_file24_full_get2
        ;info   1003, 1133
        movlw   4
        movwf   state
        goto    uart_manage__74
        ; line_number = 1004
        ; case 4
uart_manage__59:
        ; # Value All Get 3rd response byte:
        ; line_number = 1006
        ;  call uart_byte_put(lows[file24_index])
        ;info   1006, 1136
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 1007
        ;  state := state_echo_then_command
        ;info   1007, 1142
        movlw   1
        movwf   state
        goto    uart_manage__74
        ; line_number = 1008
        ; case 5
uart_manage__60:
        ; # Value All Set 2nd command byte:
        ; line_number = 1010
        ;  high := command
        ;info   1010, 1145
        movf    uart_manage__command,w
        movwf   high
        ; line_number = 1011
        ;  state := state_file24_full_set2
        ;info   1011, 1147
        movlw   6
        movwf   state
        goto    uart_manage__74
        ; line_number = 1012
        ; case 6
uart_manage__61:
        ; # Value All Set 3rd command byte:
        ; line_number = 1014
        ;  middle := command
        ;info   1014, 1150
        movf    uart_manage__command,w
        movwf   middle
        ; line_number = 1015
        ;  state := state_file24_full_set3
        ;info   1015, 1152
        movlw   7
        movwf   state
        goto    uart_manage__74
        ; line_number = 1016
        ; case 7
uart_manage__62:
        ; # Value All Set 4th command byte:
        ; line_number = 1018
        ;  highs[file24_index] := high
        ;info   1018, 1155
        ; index_fsr_first
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    high,w
        movwf   __indf
        ; line_number = 1019
        ;  middles[file24_index] := middle
        ;info   1019, 1161
        ; index_fsr_first
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    middle,w
        movwf   __indf
        ; line_number = 1020
        ;  lows[file24_index] := command
        ;info   1020, 1167
        ; index_fsr_first
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; line_number = 1021
        ;  call file24_updated()
        ;info   1021, 1173
        call    file24_updated
        ; line_number = 1022
        ;  state := state_command
        ;info   1022, 1174
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 1023
        ; case 8
uart_manage__63:
        ; # Value Low Set 2nd command byte:
        ; line_number = 1025
        ;  lows[file24_index] := command
        ;info   1025, 1177
        ; index_fsr_first
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; line_number = 1026
        ;  call file24_updated()
        ;info   1026, 1183
        call    file24_updated
        ; line_number = 1027
        ;  state := state_command
        ;info   1027, 1184
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 1028
        ; case 9
uart_manage__64:
        ; # Value Middle Set 2nd command byte:
        ; line_number = 1030
        ;  middles[file24_index] := command
        ;info   1030, 1187
        ; index_fsr_first
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; line_number = 1031
        ;  call file24_updated()
        ;info   1031, 1193
        call    file24_updated
        ; line_number = 1032
        ;  state := state_command
        ;info   1032, 1194
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 1033
        ; case 10
uart_manage__65:
        ; # Value High Set 2nd command byte:
        ; line_number = 1035
        ;  highs[file24_index] := command
        ;info   1035, 1197
        ; index_fsr_first
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; line_number = 1036
        ;  call file24_updated()
        ;info   1036, 1203
        call    file24_updated
        ; line_number = 1037
        ;  state := state_command
        ;info   1037, 1204
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 1038
        ; case 11
uart_manage__66:
        ; # File8 Set 2nd command byte:
        ; line_number = 1040
        ;  allow := _false
        ;info   1040, 1207
        bcf     uart_manage__allow___byte, uart_manage__allow___bit
        ; line_number = 1041
        ;  switch index start
        ;info   1041, 1208
        ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=1
        ; line_number = 1049
        ; case_maximum 7
        movlw   uart_manage__45>>8
        movwf   __pclath
        movf    uart_manage__index,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__45
        movwf   __pcl
        ; page_group 8
uart_manage__45:
        goto    uart_manage__42
        goto    uart_manage__43
        goto    uart_manage__44
        goto    uart_manage__44
        goto    uart_manage__44
        goto    uart_manage__44
        goto    uart_manage__44
        goto    uart_manage__44
        ; line_number = 1042
        ; case 0
uart_manage__42:
        ; line_number = 1043
        ; allow := _true
        ;info   1043, 1221
        bsf     uart_manage__allow___byte, uart_manage__allow___bit
        goto    uart_manage__46
        ; line_number = 1044
        ; case 1
uart_manage__43:
        ; line_number = 1045
        ; do_nothing
        ;info   1045, 1223
        goto    uart_manage__46
        ; line_number = 1046
        ; default
uart_manage__44:
        ; line_number = 1047
        ; if !configure_lock start
        ;info   1047, 1224
        ; =>bit_code_emit@symbol(): sym=configure_lock
        ; 1TEST: Single test with code in skip slot
        btfss   configure_lock___byte, configure_lock___bit
        ; line_number = 1048
        ; allow := _true
        ;info   1048, 1225
        bsf     uart_manage__allow___byte, uart_manage__allow___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1047
        ; if !configure_lock done
uart_manage__46:
        ; line_number = 1041
        ;  switch index done
        ; line_number = 1050
        ; if allow start
        ;info   1050, 1226
        ; =>bit_code_emit@symbol(): sym=uart_manage__allow
        ; No 1TEST: true.size=6 false.size=0
        ; No 2TEST: true.size=6 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   uart_manage__allow___byte, uart_manage__allow___bit
        goto    uart_manage__47
        ; line_number = 1051
        ; file8[index] := command
        ;info   1051, 1228
        ; index_fsr_first
        movf    uart_manage__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; Recombine size1 = 0 || size2 = 0
uart_manage__47:
        ; line_number = 1050
        ; if allow done
        ; line_number = 1052
        ; switch index start
        ;info   1052, 1234
        ; switch_before:(data:00=uu=>00 code:X0=cu=>X0) size=27
        ; line_number = 1060
        ; case_maximum 7
        movlw   uart_manage__51>>8
        movwf   __pclath
        movf    uart_manage__index,w
        ; switch after expression:(data:00=uu=>00 code:X0=cu=>X0)
        addlw   uart_manage__51
        movwf   __pcl
        ; page_group 8
uart_manage__51:
        goto    uart_manage__48
        goto    uart_manage__52
        goto    uart_manage__49
        goto    uart_manage__52
        goto    uart_manage__52
        goto    uart_manage__52
        goto    uart_manage__52
        goto    uart_manage__50
        ; line_number = 1053
        ; case 0
uart_manage__48:
        ; line_number = 1054
        ; call configure_update()
        ;info   1054, 1247
        call    configure_update
        goto    uart_manage__52
        ; line_number = 1055
        ; case 2
uart_manage__49:
        ; line_number = 1056
        ; call speed_set(speed)
        ;info   1056, 1249
        movf    speed,w
        call    speed_set
        goto    uart_manage__52
        ; line_number = 1057
        ; case 7
uart_manage__50:
        ; line_number = 1058
        ; if command > file24_size start
        ;info   1058, 1252
        movlw   10
        subwf   uart_manage__command,w
        btfsc   __z___byte, __z___bit
        bcf     __c___byte, __c___bit
        ; =>bit_code_emit@symbol(): sym=__c
        ; 1TEST: Single test with code in skip slot
        btfsc   __c___byte, __c___bit
        ; line_number = 1059
        ; command := 0
        ;info   1059, 1257
        clrf    uart_manage__command
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1058
        ; if command > file24_size done
uart_manage__52:
        ; line_number = 1052
        ; switch index done
        ; line_number = 1061
        ; state:= state_command
        ;info   1061, 1258
        movlw   2
        movwf   state
        goto    uart_manage__74
        ; line_number = 1062
        ; case 14
uart_manage__67:
        ; # Ignore the echo and wait for the new address:
        ; line_number = 1064
        ;  state := state_address_set2
        ;info   1064, 1261
        movlw   15
        movwf   state
        goto    uart_manage__74
        ; line_number = 1065
        ; case 15
uart_manage__68:
        ; # First, copy of new address just arrived:
        ; line_number = 1067
        ;  new_address := command
        ;info   1067, 1264
        movf    uart_manage__command,w
        movwf   new_address
        ; # Return it
        ; line_number = 1069
        ;  call uart_byte_put(new_address)
        ;info   1069, 1266
        movf    new_address,w
        call    uart_byte_put
        ; line_number = 1070
        ;  state := state_address_set3
        ;info   1070, 1268
        movlw   16
        movwf   state
        goto    uart_manage__74
        ; line_number = 1071
        ; case 16
uart_manage__69:
        ; # Ignore the echo
        ; line_number = 1073
        ;  state := state_address_set4
        ;info   1073, 1271
        movlw   17
        movwf   state
        goto    uart_manage__74
        ; line_number = 1074
        ; case 17
uart_manage__70:
        ; # We have the 2nd copy of new addres.
        ; line_number = 1076
        ;  if command = new_address start
        ;info   1076, 1274
        ; Left minus Right
        movf    new_address,w
        subwf   uart_manage__command,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=6 false.size=1
        ; No 2TEST: true.size=6 false.size=1
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    uart_manage__53
        ; # They match; write it in:
        ; line_number = 1078
        ;  call rb2bus_eedata_write(new_address)
        ;info   1078, 1278
        movf    new_address,w
        call    rb2bus_eedata_write
        ; line_number = 1079
        ;  _gie := _true
        ;info   1079, 1280
        bsf     _gie___byte, _gie___bit
        ; line_number = 1080
        ;  address := new_address
        ;info   1080, 1281
        movf    new_address,w
        movwf   address
        ; line_number = 1081
        ;  call uart_byte_put(rb2_ok)
        ;info   1081, 1283
        movlw   165
        goto    uart_manage__54
        ; 2GOTO: Starting code 2
uart_manage__53:
        ; # They do not match, return an error:
        ; line_number = 1084
        ;  call uart_byte_put(0)
        ;info   1084, 1285
        movlw   0
uart_manage__54:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        call    uart_byte_put
        ; line_number = 1076
        ;  if command = new_address done
        ; line_number = 1085
        ; state := state_echo_then_command
        ;info   1085, 1287
        movlw   1
        movwf   state
        goto    uart_manage__74
        ; line_number = 1086
        ; case 18
uart_manage__71:
        ; line_number = 1087
        ; call uart_byte_put(middle)
        ;info   1087, 1290
        movf    middle,w
        call    uart_byte_put
        ; line_number = 1088
        ;  state := state_probe_get2
        ;info   1088, 1292
        movlw   19
        movwf   state
        goto    uart_manage__74
        ; line_number = 1089
        ; case 19
uart_manage__72:
        ; line_number = 1090
        ; call uart_byte_put(low)
        ;info   1090, 1295
        movf    low,w
        call    uart_byte_put
        ; line_number = 1091
        ;  state := state_echo_then_command
        ;info   1091, 1297
        movlw   1
        movwf   state



uart_manage__74:
        ; line_number = 893
        ;  switch state done
uart_manage__75:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 880
        ;  if uart_input_count != 0 done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 1095
        ;info   1095, 1300
        ; procedure file24_updated
file24_updated:
        ; arguments_none
        ; line_number = 1097
        ;  returns_nothing

        ; # This routine will cause the {file24_change} mask to be updated
        ; # with the value that changed.

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1102
        ;  switch file24_index start
        ;info   1102, 1300
        ; switch_before:(data:00=uu=>00 code:X0=cu=>X0) size=0
        movlw   file24_updated__12>>8
        movwf   __pclath
        movf    file24_index,w
        ; switch after expression:(data:00=uu=>00 code:X0=cu=>X0)
        addlw   file24_updated__12
        movwf   __pcl
        ; page_group 6
file24_updated__12:
        goto    file24_updated__6
        goto    file24_updated__7
        goto    file24_updated__8
        goto    file24_updated__9
        goto    file24_updated__10
        goto    file24_updated__11
        ; line_number = 1103
        ; case 0
file24_updated__6:
        ; line_number = 1104
        ; do_nothing
        ;info   1104, 1311
        goto    file24_updated__13
        ; line_number = 1105
        ; case 1
file24_updated__7:
        ; line_number = 1106
        ; file24_changed@target_index := _true
        ;info   1106, 1312
file24_updated__select__1___byte equ file24_changed
file24_updated__select__1___bit equ 1
        bsf     file24_updated__select__1___byte, file24_updated__select__1___bit
        goto    file24_updated__13
        ; line_number = 1107
        ; case 2
file24_updated__8:
        ; line_number = 1108
        ; file24_changed@divisor_index := _true
        ;info   1108, 1314
file24_updated__select__2___byte equ file24_changed
file24_updated__select__2___bit equ 2
        bsf     file24_updated__select__2___byte, file24_updated__select__2___bit
        ; # Changing the divisor will cause kp, ki, and kd to be updated:
        goto    file24_updated__13
        ; line_number = 1110
        ; case 3
file24_updated__9:
        ; line_number = 1111
        ; file24_changed@kp_index := _true
        ;info   1111, 1316
file24_updated__select__3___byte equ file24_changed
file24_updated__select__3___bit equ 3
        bsf     file24_updated__select__3___byte, file24_updated__select__3___bit
        goto    file24_updated__13
        ; line_number = 1112
        ; case 4
file24_updated__10:
        ; line_number = 1113
        ; file24_changed@ki_index := _true
        ;info   1113, 1318
file24_updated__select__4___byte equ file24_changed
file24_updated__select__4___bit equ 4
        bsf     file24_updated__select__4___byte, file24_updated__select__4___bit
        goto    file24_updated__13
        ; line_number = 1114
        ; case 5
file24_updated__11:
        ; line_number = 1115
        ; file24_changed@kd_index := _true
        ;info   1115, 1320
file24_updated__select__5___byte equ file24_changed
file24_updated__select__5___bit equ 5
        bsf     file24_updated__select__5___byte, file24_updated__select__5___bit


file24_updated__13:
        ; line_number = 1102
        ;  switch file24_index done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




file24_float_convert__0return equ globals___0+42
        ; line_number = 1118
        ;info   1118, 1322
        ; procedure file24_float_convert
file24_float_convert:
        ; Last argument is sitting in W; save into argument variable
        movwf   file24_float_convert__index
        ; delay=4294967295
        ; line_number = 1119
        ; argument index byte
file24_float_convert__index equ globals___0+41
        ; line_number = 1120
        ;  returns float32

        ; # This routine will return {file24}[{index}] as a {float32}.

        ; line_number = 1124
        ;  local mask byte
file24_float_convert__mask equ globals___0+40

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1126
        ;  high := highs[index]
        ;info   1126, 1323
        movf    file24_float_convert__index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   high
        ; line_number = 1127
        ;  middle := middles[index]
        ;info   1127, 1329
        movf    file24_float_convert__index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   middle
        ; line_number = 1128
        ;  low := lows[index]
        ;info   1128, 1335
        movf    file24_float_convert__index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   low
        ; line_number = 1129
        ;  mask := index2mask[index]
        ;info   1129, 1341
        movf    file24_float_convert__index,w
        call    index2mask
        movwf   file24_float_convert__mask
        ; line_number = 1130
        ;  if high = 0 && middle = 0 && low = 0 start
        ;info   1130, 1344
        ; Left minus Right
        movf    high,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=11 false.size=1
        ; No 2TEST: true.size=11 false.size=1
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    file24_float_convert__1
        ; Left minus Right
        movf    middle,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=8 false.size=1
        ; No 2TEST: true.size=8 false.size=1
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    file24_float_convert__1
        ; &&||: index=2 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
        ; Left minus Right
        movf    low,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=2
        ; No 2TEST: true.size=2 false.size=2
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    file24_float_convert__2
        ; line_number = 1131
        ; file24_zero := file24_zero | mask
        ;info   1131, 1353
        movf    file24_float_convert__mask,w
        iorwf   file24_zero,f
        goto    file24_float_convert__3
        ; 2GOTO: Starting code 2
file24_float_convert__2:
file24_float_convert__1:
        ; line_number = 1133
        ; file24_zero := file24_zero & (mask ^ 0xff)
        ;info   1133, 1356
        comf    file24_float_convert__mask,w
        andwf   file24_zero,f
file24_float_convert__3:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; &&||: index=1 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
        ; &&||:: index=1 new_delay=4294967295 goto_delay=4294967295
        ; Recombine code1_bit_states != code2_bit_states
        ; 2GOTO: No goto needed; true= false=file24_float_convert__1 true_size=8 false_size=1
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:X0=cu=>X0)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; &&||: index=0 true_delay=4294967295 false_delay=4294967295 goto_delay=4294967295
        ; &&||:: index=0 new_delay=4294967295 goto_delay=4294967295
        ; Recombine code1_bit_states != code2_bit_states
        ; 2GOTO: No goto needed; true= false=file24_float_convert__1 true_size=11 false_size=1
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code2 final bitstates:(data:XX=cc=>XX code:X0=cu=>X0)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1130
        ;  if high = 0 && middle = 0 && low = 0 done
        ; line_number = 1134
        ; return xyz(high, middle, low) start
        ; line_number = 1134
        ;info   1134, 1358
        movf    high,w
        movwf   xyz__high
        movf    middle,w
        movwf   xyz__middle
        movf    low,w
        call    xyz
        movlw   xyz__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   file24_float_convert__0return>>1
        call    _float32_pointer_store
        bcf     __rp0___byte, __rp0___bit
        bcf     __cb0___byte, __cb0___bit
        return  
        ; line_number = 1134
        ; return xyz(high, middle, low) done


        ; delay after procedure statements=non-uniform




        ; line_number = 1137
        ;info   1137, 1373
        ; procedure status_update
status_update:
        ; arguments_none
        ; line_number = 1139
        ;  returns_nothing

        ; # This routine will cause {status} to be updated.

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1143
        ;  status := 0
        ;info   1143, 1373
        clrf    status
        ; line_number = 1144
        ;  if quad_a start
        ;info   1144, 1374
        ; =>bit_code_emit@symbol(): sym=quad_a
        ; 1TEST: Single test with code in skip slot
        btfsc   quad_a___byte, quad_a___bit
        ; line_number = 1145
        ; status@0 := _true
        ;info   1145, 1375
status_update__select__1___byte equ status
status_update__select__1___bit equ 0
        bsf     status_update__select__1___byte, status_update__select__1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1144
        ;  if quad_a done
        ; line_number = 1146
        ; if quad_b start
        ;info   1146, 1376
        ; =>bit_code_emit@symbol(): sym=quad_b
        ; 1TEST: Single test with code in skip slot
        btfsc   quad_b___byte, quad_b___bit
        ; line_number = 1147
        ; status@1 := _true
        ;info   1147, 1377
status_update__select__2___byte equ status
status_update__select__2___bit equ 1
        bsf     status_update__select__2___byte, status_update__select__2___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1146
        ; if quad_b done
        ; line_number = 1148
        ; if analog0_greater_than start
        ;info   1148, 1378
        ; =>bit_code_emit@symbol(): sym=analog0_greater_than
        ; 1TEST: Single test with code in skip slot
        btfsc   analog0_greater_than___byte, analog0_greater_than___bit
        ; line_number = 1149
        ; status@2 := _true
        ;info   1149, 1379
status_update__select__3___byte equ status
status_update__select__3___bit equ 2
        bsf     status_update__select__3___byte, status_update__select__3___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1148
        ; if analog0_greater_than done
        ; line_number = 1150
        ; if analog1_greater_than start
        ;info   1150, 1380
        ; =>bit_code_emit@symbol(): sym=analog1_greater_than
        ; 1TEST: Single test with code in skip slot
        btfsc   analog1_greater_than___byte, analog1_greater_than___bit
        ; line_number = 1151
        ; status@3 := _true
        ;info   1151, 1381
status_update__select__4___byte equ status
status_update__select__4___bit equ 3
        bsf     status_update__select__4___byte, status_update__select__4___bit


        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1150
        ; if analog1_greater_than done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 1154
        ;info   1154, 1383
        ; procedure configure_update
configure_update:
        ; arguments_none
        ; line_number = 1156
        ;  returns_nothing

        ; line_number = 1158
        ;  local index byte
configure_update__index equ globals___0+46
        ; line_number = 1159
        ;  local state byte
configure_update__state equ globals___0+47

        ; # This routine will read {configure} and process it:

        ; # 0x1c = ad0_enable:ad1_enable:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1164
        ;  if configure & 0x18 != 0 start
        ;info   1164, 1383
        ; Left minus Right
        movlw   24
        andwf   configure,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=2
        ; No 2TEST: true.size=2 false.size=2
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    configure_update__5
        bsf     __rp0___byte, __rp0___bit
        ; # We configure quad A and B as digital inputs:
        ; line_number = 1170
        ;  _ansel@0 := _false
        ;info   1170, 1388
configure_update__select__1___byte equ _ansel
configure_update__select__1___bit equ 0
        bcf     configure_update__select__1___byte, configure_update__select__1___bit
        ; line_number = 1171
        ;  _ansel@1 := _false
        ;info   1171, 1389
configure_update__select__2___byte equ _ansel
configure_update__select__2___bit equ 1
        bcf     configure_update__select__2___byte, configure_update__select__2___bit

        goto    configure_update__6
        ; 2GOTO: Starting code 2
configure_update__5:
        bsf     __rp0___byte, __rp0___bit
        ; # We have to configure quad A and B as A/D inputs:
        ; line_number = 1166
        ;  _ansel@0 := _true
        ;info   1166, 1392
configure_update__select__3___byte equ _ansel
configure_update__select__3___bit equ 0
        bsf     configure_update__select__3___byte, configure_update__select__3___bit
        ; line_number = 1167
        ;  _ansel@1 := _true
        ;info   1167, 1393
configure_update__select__4___byte equ _ansel
configure_update__select__4___bit equ 1
        bsf     configure_update__select__4___byte, configure_update__select__4___bit
configure_update__6:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>01 code:X0=cu=>X0)
        ; line_number = 1164
        ;  if configure & 0x18 != 0 done
        ; line_number = 1173
        ; index := 0
        ;info   1173, 1394
        bcf     __rp0___byte, __rp0___bit
        clrf    configure_update__index
        ; line_number = 1174
        ;  while index < 32 start
configure_update__7:
        ;info   1174, 1396
        movlw   32
        subwf   configure_update__index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=0 false.size=21
        ; No 2TEST: true.size=0 false.size=21
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    configure_update__12
        ; line_number = 1175
        ; state := states[index]
        ;info   1175, 1400
        movf    configure_update__index,w
        call    states
        movwf   configure_update__state
        ; line_number = 1176
        ;  if position_reverse start
        ;info   1176, 1403
        ; =>bit_code_emit@symbol(): sym=position_reverse
        ; No 1TEST: true.size=14 false.size=0
        ; No 2TEST: true.size=14 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   position_reverse___byte, position_reverse___bit
        goto    configure_update__11
        ; # Swap the increment and decrement bits in {xstates}:
        ; line_number = 1178
        ;  state := state & 0xf | (state << 2) & 0xc0 | (state >> 2) & 0x30
        ;info   1178, 1405
configure_update__8 equ globals___0+71
        movlw   15
        andwf   configure_update__state,w
        movwf   configure_update__8
configure_update__9 equ globals___0+72
        rlf     configure_update__state,w
        movwf   configure_update__9
        rlf     configure_update__9,w
        andlw   192
        iorwf   configure_update__8,f
configure_update__10 equ globals___0+73
        rrf     configure_update__state,w
        movwf   configure_update__10
        rrf     configure_update__10,w
        andlw   48
        iorwf   configure_update__8,w
        movwf   configure_update__state
        ; Recombine size1 = 0 || size2 = 0
configure_update__11:
        ; line_number = 1176
        ;  if position_reverse done
        ; #FIXME: Uncomment to enable {xstates}:
        ; #xstates[index] := state
        ; line_number = 1181
        ;  index := index + 1
        ;info   1181, 1419
        incf    configure_update__index,f


        goto    configure_update__7
configure_update__12:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1174
        ;  while index < 32 done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 1184
        ;info   1184, 1422
        ; procedure uart_byte_put
uart_byte_put:
        ; Last argument is sitting in W; save into argument variable
        movwf   uart_byte_put__value
        ; delay=4294967295
        ; line_number = 1185
        ; argument value byte
uart_byte_put__value equ globals___0+48
        ; line_number = 1186
        ;  returns_nothing

        ; # This routine will send {value} to the bus.

        ; # Wait until {_txreg} is ready for a value:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1191
        ;  while !_txif start
uart_byte_put__1:
        ;info   1191, 1423
        ; =>bit_code_emit@symbol(): sym=_txif
        ; 1TEST: Single test with code in skip slot
        btfss   _txif___byte, _txif___bit
        ; line_number = 1192
        ; do_nothing
        ;info   1192, 1424

        goto    uart_byte_put__1
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1191
        ;  while !_txif done
        ; # Ship {value} out to the bus with 9th bit turned off:
        ; line_number = 1195
        ;  _adden := _false
        ;info   1195, 1425
        bcf     _adden___byte, _adden___bit
        ; line_number = 1196
        ;  _tx9d := _false
        ;info   1196, 1426
        bcf     _tx9d___byte, _tx9d___bit
        ; line_number = 1197
        ;  _txreg := value
        ;info   1197, 1427
        movf    uart_byte_put__value,w
        movwf   _txreg


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 1200
        ;info   1200, 1430
        ; procedure uart_initialize
uart_initialize:
        ; arguments_none
        ; line_number = 1202
        ;  returns_nothing

        ; # This procedure is responsibile for initializing the UART
        ; # connected to the bus.  This code is currently specific to
        ; # the PIC16F688.

        ; #FIXME: Use {rx_bit} and {tx_bit}!!!

        ; # Warm up the UART:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1211
        ;  _trisc@5 := _true
        ;info   1211, 1430
uart_initialize__select__1___byte equ _trisc
uart_initialize__select__1___bit equ 5
        bsf     __rp0___byte, __rp0___bit
        bsf     uart_initialize__select__1___byte, uart_initialize__select__1___bit
        ; line_number = 1212
        ;  _trisc@4 := _true
        ;info   1212, 1432
uart_initialize__select__2___byte equ _trisc
uart_initialize__select__2___bit equ 4
        bsf     uart_initialize__select__2___byte, uart_initialize__select__2___bit

        ; # Initialize the {_txsta} register:
        ; line_number = 1215
        ;  _txsta := 0
        ;info   1215, 1433
        bcf     __rp0___byte, __rp0___bit
        clrf    _txsta
        ; line_number = 1216
        ;  _tx9 := _true
        ;info   1216, 1435
        bsf     _tx9___byte, _tx9___bit
        ; line_number = 1217
        ;  _txen := _true
        ;info   1217, 1436
        bsf     _txen___byte, _txen___bit
        ; line_number = 1218
        ;  _brgh := _true
        ;info   1218, 1437
        bsf     _brgh___byte, _brgh___bit

        ; # Initialize the {_rcsta} register:
        ; line_number = 1221
        ;  _rcsta := 0
        ;info   1221, 1438
        clrf    _rcsta
        ; line_number = 1222
        ;  _spen := _true
        ;info   1222, 1439
        bsf     _spen___byte, _spen___bit
        ; line_number = 1223
        ;  _rx9 := _true
        ;info   1223, 1440
        bsf     _rx9___byte, _rx9___bit
        ; line_number = 1224
        ;  _cren := _true
        ;info   1224, 1441
        bsf     _cren___byte, _cren___bit
        ; line_number = 1225
        ;  _adden := _true
        ;info   1225, 1442
        bsf     _adden___byte, _adden___bit

        ; # Set up the baud rate generator:
        ; line_number = 1228
        ;  _baudctl := 0
        ;info   1228, 1443
        clrf    _baudctl
        ; line_number = 1229
        ;  _brg16 := _true
        ;info   1229, 1444
        bsf     _brg16___byte, _brg16___bit
        ; line_number = 1230
        ;  _spbrg := _eusart_500000_low
        ;info   1230, 1445
        movlw   9
        movwf   _spbrg
        ; line_number = 1231
        ;  _spbrgh := _eusart_500000_high
        ;info   1231, 1447
        clrf    _spbrgh

        ; line_number = 1233
        ;  state := state_select_wait
        ;info   1233, 1448
        clrf    state
        ; line_number = 1234
        ;  id_index := 0
        ;info   1234, 1449
        clrf    id_index
        ; line_number = 1235
        ;  uart_input_in_index := 0
        ;info   1235, 1450
        clrf    uart_input_in_index
        ; line_number = 1236
        ;  uart_input_out_index := 0
        ;info   1236, 1451
        clrf    uart_input_out_index
        ; line_number = 1237
        ;  uart_input_count := 0
        ;info   1237, 1452
        clrf    uart_input_count
        ; line_number = 1238
        ;  uart_input_pending := _false
        ;info   1238, 1453
        bcf     uart_input_pending___byte, uart_input_pending___bit

        ; # Turn on the interrupts:
        ; line_number = 1241
        ;  _txie := _false
        ;info   1241, 1454
        bsf     __rp0___byte, __rp0___bit
        bcf     _txie___byte, _txie___bit
        ; line_number = 1242
        ;  _rcie := _true
        ;info   1242, 1456
        bsf     _rcie___byte, _rcie___bit


        ; delay after procedure statements=non-uniform
        bcf     __rp0___byte, __rp0___bit
        ; Implied return
        retlw   0




        ; line_number = 1245
        ;info   1245, 1459
        ; procedure speed_set
speed_set:
        ; Last argument is sitting in W; save into argument variable
        movwf   speed_set__speed
        ; delay=4294967295
        ; line_number = 1246
        ; argument speed byte
speed_set__speed equ globals___0+49
        ; line_number = 1247
        ;  returns_nothing

        ; # This procedure will set {motor1_speed}, {motor1_on_mask}, and
        ; # {motor1_pulse_width} from {speed}.

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1252
        ;  motor1_speed := speed
        ;info   1252, 1460
        movf    speed_set__speed,w
        movwf   motor1_speed
        ; line_number = 1253
        ;  if motor1_speed@7 start
        ;info   1253, 1462
speed_set__select__4___byte equ motor1_speed
speed_set__select__4___bit equ 7
        ; =>bit_code_emit@symbol(): sym=speed_set__select__4
        ; No 1TEST: true.size=8 false.size=14
        ; No 2TEST: true.size=8 false.size=14
        ; 2GOTO: Single test with two GOTO's
        btfss   speed_set__select__4___byte, speed_set__select__4___bit
        goto    speed_set__5
        ; # Reverse direction:
        ; line_number = 1255
        ;  if motor_reverse start
        ;info   1255, 1464
        ; =>bit_code_emit@symbol(): sym=motor_reverse
        ; No 1TEST: true.size=1 false.size=1
        ; 2TEST: two tests with code in both delay slots
        btfsc   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1256
        ; motor1_on_mask := 1
        ;info   1256, 1465
        movlw   1
        btfss   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1258
        ; motor1_on_mask := 2
        ;info   1258, 1467
        movlw   2
        movwf   motor1_on_mask
        ; line_number = 1255
        ;  if motor_reverse done
        ; line_number = 1259
        ; motor1_pulse_width := speed << 1
        ;info   1259, 1469
        rlf     speed_set__speed,w
        movwf   motor1_pulse_width
        bcf     motor1_pulse_width, 0
        ; Recombine code1_bit_states != code2_bit_states
        goto    speed_set__6
        ; 2GOTO: Starting code 2
speed_set__5:
        ; line_number = 1261
        ; if speed = 0 start
        ;info   1261, 1473
        ; Left minus Right
        movf    speed_set__speed,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=1 false.size=5
        ; No 2TEST: true.size=1 false.size=5
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    speed_set__1
        ; # Stopped
        ; line_number = 1263
        ;  motor1_on_mask := 0
        ;info   1263, 1476
        clrf    motor1_on_mask
        goto    speed_set__2
        ; 2GOTO: Starting code 2
speed_set__1:
        ; # Forward direction:
        ; line_number = 1266
        ;  if motor_reverse start
        ;info   1266, 1478
        ; =>bit_code_emit@symbol(): sym=motor_reverse
        ; No 1TEST: true.size=1 false.size=1
        ; 2TEST: two tests with code in both delay slots
        btfsc   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1267
        ; motor1_on_mask := 2
        ;info   1267, 1479
        movlw   2
        btfss   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1269
        ; motor1_on_mask := 1
        ;info   1269, 1481
        movlw   1
        movwf   motor1_on_mask
        ; line_number = 1266
        ;  if motor_reverse done
speed_set__2:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1261
        ; if speed = 0 done
        ; line_number = 1270
        ; motor1_pulse_width := 0xff - (speed << 1)
        ;info   1270, 1483
speed_set__3 equ globals___0+74
        rlf     speed_set__speed,w
        andlw   254
        sublw   255
        movwf   motor1_pulse_width


speed_set__6:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1253
        ;  if motor1_speed@7 done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; # FIXME: These two routines are directly copied from rb2_pic16f688.ucl
        ; # and should be included via a library command.   Alas, the rb2_pic16f688.ucl
        ; # library also include rb2bus.ucl, which we do not want!!!

        ; line_number = 1277
        ; constant rb2bus_eedata_address = 0xfe
rb2bus_eedata_address equ 254

        ; line_number = 1279
        ;info   1279, 1488
        ; procedure rb2bus_eedata_read
rb2bus_eedata_read:
        ; arguments_none
        ; line_number = 1281
        ;  returns byte

        ; # This procedure will return the address stored in EEData.  If
        ; # there is no data, 0 is returned.

        ; line_number = 1286
        ;  local temp1 byte
rb2bus_eedata_read__temp1 equ globals___0+50
        ; line_number = 1287
        ;  local temp2 byte
rb2bus_eedata_read__temp2 equ globals___0+51

        ; # Read the first byte (the address):
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1290
        ;  _eecon1 := 0
        ;info   1290, 1488
        bsf     __rp0___byte, __rp0___bit
        clrf    _eecon1
        ; line_number = 1291
        ;  _eeadr := rb2bus_eedata_address
        ;info   1291, 1490
        movlw   254
        movwf   _eeadr
        ; line_number = 1292
        ;  _rd := _true
        ;info   1292, 1492
        bsf     _rd___byte, _rd___bit
        ; line_number = 1293
        ;  temp1 := _eedat
        ;info   1293, 1493
        movf    _eedat,w
        bcf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_read__temp1

        ; # Read the second byte (the 1'z complement)
        ; line_number = 1296
        ;  _eeadr := _eeadr + 1
        ;info   1296, 1496
        bsf     __rp0___byte, __rp0___bit
        incf    _eeadr,f
        ; line_number = 1297
        ;  _rd := _true
        ;info   1297, 1498
        bsf     _rd___byte, _rd___bit
        ; line_number = 1298
        ;  temp2 := _eedat
        ;info   1298, 1499
        movf    _eedat,w
        bcf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_read__temp2

        ; # If they are 1's complement of one another, they are valid:
        ; line_number = 1301
        ;  if temp1 = (0xff ^ temp2) start
        ;info   1301, 1502
        ; Left minus Right
        comf    rb2bus_eedata_read__temp2,w
        subwf   rb2bus_eedata_read__temp1,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   __z___byte, __z___bit
        goto    rb2bus_eedata_read__1
        ; # Return the valid address:
        ; line_number = 1303
        ;  return temp1 start
        ; line_number = 1303
        ;info   1303, 1506
        movf    rb2bus_eedata_read__temp1,w
        return  
        ; line_number = 1303
        ;  return temp1 done

        ; Recombine size1 = 0 || size2 = 0
rb2bus_eedata_read__1:
        ; line_number = 1301
        ;  if temp1 = (0xff ^ temp2) done
        ; # They are not 1's complement, so return 0 as an error:
        ; line_number = 1306
        ;  return 0 start
        ; line_number = 1306
        ;info   1306, 1508
        retlw   0
        ; line_number = 1306
        ;  return 0 done


        ; delay after procedure statements=non-uniform




        ; line_number = 1309
        ;info   1309, 1509
        ; procedure rb2bus_eedata_write
rb2bus_eedata_write:
        ; Last argument is sitting in W; save into argument variable
        movwf   rb2bus_eedata_write__address
        ; delay=4294967295
        ; line_number = 1310
        ; argument address byte
rb2bus_eedata_write__address equ globals___0+52
        ; line_number = 1311
        ;  returns_nothing

        ; # This procedure will write {address} into the EEData.  The
        ; # microcontroller pauses while the EEData is written.

        ; # Clear out the {_eecon1} register
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1317
        ;  _eecon1 := 0
        ;info   1317, 1510
        bsf     __rp0___byte, __rp0___bit
        clrf    _eecon1
        ; line_number = 1318
        ;  _eeadr := rb2bus_eedata_address
        ;info   1318, 1512
        movlw   254
        movwf   _eeadr
        ; line_number = 1319
        ;  _eedat := address
        ;info   1319, 1514
        bcf     __rp0___byte, __rp0___bit
        movf    rb2bus_eedata_write__address,w
        bsf     __rp0___byte, __rp0___bit
        movwf   _eedat

        ; # Write 2 bytes ({address} followed by {address}^0xff):
        ; line_number = 1322
        ;  loop_exactly 2 start
        ;info   1322, 1518
rb2bus_eedata_write__1 equ globals___0+75
        movlw   2
        bcf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_write__1
rb2bus_eedata_write__2:
        ; # Set the data to write:

        ; # Set up the for the write:
        ; line_number = 1326
        ;  _wren := _true
        ;info   1326, 1521
        bsf     __rp0___byte, __rp0___bit
        bsf     _wren___byte, _wren___bit
        ; line_number = 1327
        ;  _gie := _false
        ;info   1327, 1523
        bcf     _gie___byte, _gie___bit
        ; line_number = 1328
        ;  _eecon2 := 0x55
        ;info   1328, 1524
        movlw   85
        movwf   _eecon2
        ; line_number = 1329
        ;  _eecon2 := 0xaa
        ;info   1329, 1526
        movlw   170
        movwf   _eecon2
        ; # Start the write:
        ; line_number = 1331
        ;  _wr := _true
        ;info   1331, 1528
        bsf     _wr___byte, _wr___bit

        ; # Wait for write to complete:
        ; line_number = 1334
        ;  while _wr start
rb2bus_eedata_write__3:
        ;info   1334, 1529
        ; =>bit_code_emit@symbol(): sym=_wr
        ; 1TEST: Single test with code in skip slot
        btfsc   _wr___byte, _wr___bit
        ; line_number = 1335
        ; do_nothing
        ;info   1335, 1530

        goto    rb2bus_eedata_write__3
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1334
        ;  while _wr done
        ; # Disable writing:
        ; line_number = 1338
        ;  _wren := _false
        ;info   1338, 1531
        bcf     _wren___byte, _wren___bit

        ; # Prepare the second byte of data:
        ; line_number = 1341
        ;  _eeadr := _eeadr + 1
        ;info   1341, 1532
        incf    _eeadr,f
        ; line_number = 1342
        ;  _eedat := address ^ 0xff
        ;info   1342, 1533
        bcf     __rp0___byte, __rp0___bit
        comf    rb2bus_eedata_write__address,w
        bsf     __rp0___byte, __rp0___bit
        movwf   _eedat


        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1322
        ;  loop_exactly 2 wrap-up
        decfsz  rb2bus_eedata_write__1,f
        goto    rb2bus_eedata_write__2
        ; line_number = 1322
        ;  loop_exactly 2 done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; # 24-bit convert to from float code:
xyz__0return equ globals___0+56
        ; line_number = 1346
        ;info   1346, 1541
        ; procedure xyz
xyz:
        ; Last argument is sitting in W; save into argument variable
        movwf   xyz__low
        ; delay=4294967295
        ; line_number = 1347
        ; argument high byte
xyz__high equ globals___0+53
        ; line_number = 1348
        ; argument middle byte
xyz__middle equ globals___0+54
        ; line_number = 1349
        ; argument low byte
xyz__low equ globals___0+55
        ; line_number = 1350
        ;  returns float32
        ; line_number = 1351
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1353
        ;  assemble
        ;info   1353, 1542
        ; # Grab the high byte:
        ; line_number = 1355
        ;info   1355, 1542
        movf    xyz__high,w
        ; line_number = 1356
        ;info   1356, 1543
        ; databank xyz, _float32_aargb0
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1357
        ;info   1357, 1544
        movwf   _float32_aargb0

        ; # Grab the middle byte:
        ; line_number = 1360
        ;info   1360, 1545
        ; databank _float32_aargb0, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1361
        ;info   1361, 1546
        movf    xyz__middle,w
        ; line_number = 1362
        ;info   1362, 1547
        ; databank xyz, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1363
        ;info   1363, 1548
        movwf   _float32_aargb1

        ; # Grab the low byte:
        ; line_number = 1366
        ;info   1366, 1549
        ; databank _float32_aargb1, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1367
        ;info   1367, 1550
        movf    xyz__low,w
        ; line_number = 1368
        ;info   1368, 1551
        ; databank xyz, _float32_aargb2
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1369
        ;info   1369, 1552
        movwf   _float32_aargb2

        ; # Do the conversion to float32:
        ; line_number = 1372
        ;info   1372, 1553
        ; databank _float32_aargb2, _float32_from_integer24
        ; line_number = 1373
        ;info   1373, 1553
        ; codebank xyz, _float32_from_integer24
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1374
        ;info   1374, 1554
        call    _float32_from_integer24

        ; # Result is in the float32 A "register"l not move to 0return:
        ; line_number = 1377
        ;info   1377, 1555
        movlw   xyz__0return>>1
        ; line_number = 1378
        ;info   1378, 1556
        ; databank _float32_from_integer24, _float32_pointer_store
        ; line_number = 1379
        ;info   1379, 1556
        ; codebank _float32_from_integer24, _float32_pointer_store
        ; line_number = 1380
        ;info   1380, 1556
        call    _float32_pointer_store

        ; # Get out code and data banks back home:
        ; line_number = 1383
        ;info   1383, 1557
        ; databank _float32_pointer_store, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1384
        ;info   1384, 1558
        ; codebank _float32_pointer_store, xyz
        bcf     __cb0___byte, __cb0___bit
        ; line_number = 1385
        ;info   1385, 1559
        return  

        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; # 24-bit convert to from float code:
        ; line_number = 1388
        ;info   1388, 1560
        ; procedure zyx
zyx:
        ; line_number = 1389
        ; argument value float32
zyx__value equ globals___0+60
        ; line_number = 1390
        ;  returns byte
        ; line_number = 1391
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1393
        ;  assemble
        ;info   1393, 1560
        ; line_number = 1394
        ;info   1394, 1560
        movlw   zyx__value>>1
        ; line_number = 1395
        ;info   1395, 1561
        ; databank zyx, _float32_pointer_load
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1396
        ;info   1396, 1562
        ; codebank zyx, _float32_pointer_load
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1397
        ;info   1397, 1563
        call    _float32_pointer_load

        ; line_number = 1399
        ;info   1399, 1564
        ; databank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 1400
        ;info   1400, 1564
        ; codebank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 1401
        ;info   1401, 1564
        call    _float32_integer24_convert
        ; line_number = 1402
        ;info   1402, 1565
        ; codebank _float32_integer24_convert, zyx
        bcf     __cb0___byte, __cb0___bit

        ; line_number = 1404
        ;info   1404, 1566
        ; databank _float32_integer24_convert, _float32_aargb0
        ; line_number = 1405
        ;info   1405, 1566
        movf    _float32_aargb0,w
        ; line_number = 1406
        ;info   1406, 1567
        ; databank _float32_aargb0, high
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1407
        ;info   1407, 1568
        movwf   high

        ; line_number = 1409
        ;info   1409, 1569
        ; databank high, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1410
        ;info   1410, 1570
        movf    _float32_aargb1,w
        ; line_number = 1411
        ;info   1411, 1571
        ; databank _float32_aargb0, middle
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1412
        ;info   1412, 1572
        movwf   middle

        ; line_number = 1414
        ;info   1414, 1573
        ; databank middle, _float32_aargb2
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1415
        ;info   1415, 1574
        movf    _float32_aargb2,w
        ; line_number = 1416
        ;info   1416, 1575
        ; databank _float32_aargb0, low
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1417
        ;info   1417, 1576
        movwf   low

        ; line_number = 1419
        ;info   1419, 1577
        ; databank low, zyx

        ; line_number = 1421
        ;info   1421, 1577
        return  



        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 1425
        ; string index2mask = "\1,2,4,8,16,32,64,128\" start
        ; index2mask = '\1,2,4,8,16\ @\128\'
index2mask:
        ; Temporarily save index into FSR
        movwf   __fsr
        ; Initialize PCLATH to point to this code page
        movlw   index2mask___base>>8
        movwf   __pclath
        ; Restore index from FSR
        movf    __fsr,w
        addlw   index2mask___base
        ; Index to the correct return value
        movwf   __pcl
        ; page_group 8
index2mask___base:
        retlw   1
        retlw   2
        retlw   4
        retlw   8
        retlw   16
        retlw   32
        retlw   64
        retlw   128
        ; line_number = 1425
        ; string index2mask = "\1,2,4,8,16,32,64,128\" start
        ; line_number = 1426
        ; string id = "\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson" start
        ; id = '\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson'
id:
        ; Temporarily save index into FSR
        movwf   __fsr
        ; Initialize PCLATH to point to this code page
        movlw   id___base>>8
        movwf   __pclath
        ; Restore index from FSR
        movf    __fsr,w
        addlw   id___base
        ; Index to the correct return value
        movwf   __pcl
        ; page_group 28
id___base:
        retlw   16
        retlw   0
        retlw   21
        retlw   2
        retlw   3
        retlw   14
        retlw   77
        retlw   105
        retlw   100
        retlw   105
        retlw   77
        retlw   111
        retlw   116
        retlw   111
        retlw   114
        retlw   49
        retlw   69
        retlw   45
        retlw   66
        retlw   52
        retlw   7
        retlw   71
        retlw   114
        retlw   97
        retlw   109
        retlw   115
        retlw   111
        retlw   110
        ; line_number = 1426
        ; string id = "\16,0,21,2,3,14\MidiMotor1E-B4\7\Gramson" start

        ; # {state} is defined by another file:
        ; line_number = 1429
        ; library states entered

        ; # Copyright (c) 2009 by Wayne C. Gramlich
        ; # All rights reserved

        ; # A quadrature encoder is a state machine that cycles through
        ; # 4 states in the following possible cycle:
        ; #
        ; #     00 <=> 01
        ; #     ^      ^
        ; #     |      |
        ; #     v      v
        ; #     10 <=> 11
        ; #
        ; # This is also known as a 2-bit Gray code.  The bit on the left
        ; # is called the A channel and the bit on the right is called the
        ; # B channel.  Typically, a counter is incremented for each
        ; # clockwise state transistion and decremented for each counter
        ; # clockwise transistion.  The following state transistions show the
        ; # counter increments and decrements:
        ; #
        ; #  00 => 01 => 11 => 10 => 00 => 01 => 00 => 10 => 00
        ; #     +1    +1    +1    +1    +1    -1    -1    +1
        ; #   0     1     2     3     4     5     4     3     4 
        ; #
        ; # Quadrature encoding does not allow two state transitions:
        ; #
        ; #     00 <=> 11   and    01 <=> 10
        ; #
        ; # because it is ambigous whether or not to increment or decrement
        ; # the counter.  None-the-less, sometimes such a state transition
        ; # occurs by accident.  The solution is to double the number of states
        ; # from 4 to 8 and remember whether or not the last operation was an
        ; # increment or a decrement.  Thus, the 8 new states are {+00},
        ; # {+01}, {+11}, {+10}, {-00}, {-01}, {-11}, and {-11}.  If the
        ; # Current state is {+01} and the new inputs are 11, then the new
        ; # state is {+11} and the counter is incremented.  If the current
        ; # state is {+01} and the new inputs are 00, the next state is {-00}
        ; # and the counter is decremented; we changed from {+} to {-}.
        ; # Lastly, if we are in the state {+01} and the new inputs are 10,
        ; # we have an illegal/ambiguous transition that is resolved by
        ; # transitioning to {+10} and incrementing the counter by 2.
        ; # 
        ; # This file contains the state transition table between all 8 of
        ; # these states along with the operations to perform.  It a table
        ; # that is 32 bytes long.   The current 8-bit state is concatenated
        ; # with two bits of input (for a total of 5 bits).  This 5 bit
        ; # quantity indexes into a 32 byte table (2^5=32) to determine the
        ; # new state and whether to incement or decrement the counter by 1
        ; # or 2.  The index is constructed as follows:
        ; # 
        ; #     ABmab
        ; # 
        ; # where {A} and {B} are the new inputs, and {m}, {a] and {b}
        ; # are the current 8-bit state, where m=0 for + and m=1 for -.
        ; # where {A} and {B} are the new inputs, and {m}, {a] and {b}
        ; # Each entry in the table looks as follows:
        ; # 
        ; #     iIdD 0mab
        ; # 
        ; # where {i} means increment by 1, and {I} means increment by 2,
        ; # where {d} means decrement by 1, and {D} means decrement by 2,
        ; # and {mab} is the new state.
        ; # 
        ; # Here is the {state vector}:

        ; # [0= 00 000]: 0=0000 0000 0=>0
        ; # [1= 00 001]: 32=0010 0000 1=>0
        ; # [2= 00 010]: 128=1000 0000 3=>0
        ; # [3= 00 011]: 192=1100 0000 2=>0
        ; # [4= 00 100]: 4=0000 0100 0=>0
        ; # [5= 00 101]: 36=0010 0100 1=>0
        ; # [6= 00 110]: 132=1000 0100 3=>0
        ; # [7= 00 111]: 52=0011 0100 2=>0
        ; # [8= 01 000]: 129=1000 0001 0=>1
        ; # [9= 01 001]: 1=0000 0001 1=>1
        ; # [10= 01 010]: 193=1100 0001 3=>1
        ; # [11= 01 011]: 33=0010 0001 2=>1
        ; # [12= 01 100]: 133=1000 0101 0=>1
        ; # [13= 01 101]: 5=0000 0101 1=>1
        ; # [14= 01 110]: 53=0011 0101 3=>1
        ; # [15= 01 111]: 37=0010 0101 2=>1
        ; # [16= 10 000]: 34=0010 0010 0=>3
        ; # [17= 10 001]: 194=1100 0010 1=>3
        ; # [18= 10 010]: 2=0000 0010 3=>3
        ; # [19= 10 011]: 130=1000 0010 2=>3
        ; # [20= 10 100]: 38=0010 0110 0=>3
        ; # [21= 10 101]: 54=0011 0110 1=>3
        ; # [22= 10 110]: 6=0000 0110 3=>3
        ; # [23= 10 111]: 134=1000 0110 2=>3
        ; # [24= 11 000]: 195=1100 0011 0=>2
        ; # [25= 11 001]: 131=1000 0011 1=>2
        ; # [26= 11 010]: 35=0010 0011 3=>2
        ; # [27= 11 011]: 3=0000 0011 2=>2
        ; # [28= 11 100]: 55=0011 0111 0=>2
        ; # [29= 11 101]: 135=1000 0111 1=>2
        ; # [30= 11 110]: 39=0010 0111 3=>2
        ; # [31= 11 111]: 7=0000 0111 2=>2
        ; buffer = 'states'
        ; line_number = 99
        ; string states = "\0,32,128,192,4,36,132,52,129,1,193,33,133,5,53,37,34,194,2,130,38,54,6,134,195,131,35,3,55,135,39,7\" start
        ; states = '\0\ \128,192,4\_\132\4\129,1,193\!\133,5\5%"\194,2,130\&6\6,134,195,131\#\3\7\135,39,7\'
states:
        ; Temporarily save index into FSR
        movwf   __fsr
        ; Initialize PCLATH to point to this code page
        movlw   states___base>>8
        movwf   __pclath
        ; Restore index from FSR
        movf    __fsr,w
        addlw   states___base
        ; Index to the correct return value
        movwf   __pcl
        ; page_group 32
states___base:
        retlw   0
        retlw   32
        retlw   128
        retlw   192
        retlw   4
        retlw   36
        retlw   132
        retlw   52
        retlw   129
        retlw   1
        retlw   193
        retlw   33
        retlw   133
        retlw   5
        retlw   53
        retlw   37
        retlw   34
        retlw   194
        retlw   2
        retlw   130
        retlw   38
        retlw   54
        retlw   6
        retlw   134
        retlw   195
        retlw   131
        retlw   35
        retlw   3
        retlw   55
        retlw   135
        retlw   39
        retlw   7
        ; line_number = 99
        ; string states = "\0,32,128,192,4,36,132,52,129,1,193,33,133,5,53,37,34,194,2,130,38,54,6,134,195,131,35,3,55,135,39,7\" start

        ; buffer = 'midimotor1e'
        ; line_number = 1429
        ; library states exited



        ; Code bank 1; Start address: 2048; End address: 4095
        org     2048
        ; Appending 27 delayed procedures to code bank 1
        ; buffer = '_float32_base'
        ; line_number = 374
        ;info   374, 2048
        ; procedure _float32_from_integer24
_float32_from_integer24:
        ; arguments_none
        ; line_number = 376
        ;  returns_nothing
        ; line_number = 377
        ;  return_suppress

        ; # Integer to float conversion
        ; # Input: 24 bit 2's complement integer right justified in
        ; #        _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
        ; # Use: call flo2432()
        ; # Output: 32 bit floating point number in _float32_aexp, _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
        ; # Result: _FLOAT32_AARG  <--  FLOAT( _FLOAT32_AARG )
        ; # Max Timing:	14+90 = 104 clks	SAT = 0
        ; #			14+96 = 110 clks	SAT = 1
        ; # Min Timing:	6+28 = 34 clks		_FLOAT32_AARG = 0
        ; #			6+18 = 24 clks
        ; # PM: 14+38 = 52	DM: 7

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 391
        ;  assemble
        ;info   391, 2048
        ; line_number = 392
_float32_flo32:
        ; # initialize exponent and add bias
        ; line_number = 394
        ;info   394, 2048
        movlw   _float32_expbias_23
        ; line_number = 395
        ;info   395, 2049
        movwf   _float32_exp
        ; line_number = 396
        ;info   396, 2050
        clrf    _float32_sign
        ; # test sign
        ; line_number = 398
        ;info   398, 2051
        btfss   _float32_aargb0, _float32_msb
        ; line_number = 399
        ;info   399, 2052
        goto    _float32_normalize
        ; # if < 0, negate and set MSB in _float32_sign
        ; line_number = 401
        ;info   401, 2053
        comf    _float32_aargb2,f
        ; line_number = 402
        ;info   402, 2054
        comf    _float32_aargb1,f
        ; line_number = 403
        ;info   403, 2055
        comf    _float32_aargb0,f
        ; line_number = 404
        ;info   404, 2056
        incf    _float32_aargb2,f
        ; line_number = 405
        ;info   405, 2057
        btfsc   _float32_status, _float32_z
        ; line_number = 406
        ;info   406, 2058
        incf    _float32_aargb1,f
        ; line_number = 407
        ;info   407, 2059
        btfsc   _float32_status, _float32_z
        ; line_number = 408
        ;info   408, 2060
        incf    _float32_aargb0,f
        ; line_number = 409
        ;info   409, 2061
        bsf     _float32_sign, _float32_msb
        ; # Note that this procedure runs into _float_normalize
        ; #goto _float_normalize


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 414
        ;info   414, 2062
        ; procedure _float32_normalize
_float32_normalize:
        ; arguments_none
        ; line_number = 416
        ;  returns_nothing
        ; line_number = 417
        ;  return_suppress

        ; # Normalization routine
        ; # Input:  32 bit unnormalized floating point number in
        ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, with sign in _float32_sign msb
        ; # Use: call _float32_normalize()
        ; # Output: 32 bit normalized floating point number in
        ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  NORMALIZE( _FLOAT32_AARG )
        ; # Max Timing:	21+6+7*8+7 = 90 clks	SAT = 0
        ; #			21+6+7*8+1+12 = 96 clks	SAT = 1
        ; # Min Timing:	22+6 = 28 clks		_FLOAT32_AARG = 0
        ; #			5+9+4 = 18 clks
        ; # PM: 38	DM: 7

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 432
        ;  assemble
        ;info   432, 2062
        ; #:nrm3232
        ; line_number = 434
_float32_nrm32:
        ; # lear exponent decrement
        ; line_number = 436
        ;info   436, 2062
        clrf    _float32_temp
        ; # test if highbyte=0
        ; line_number = 438
        ;info   438, 2063
        movf    _float32_aargb0,w
        ; line_number = 439
        ;info   439, 2064
        btfss   _float32_status, _float32_z
        ; line_number = 440
        ;info   440, 2065
        goto    _float32_norm3232
        ; # if so, shift 8 bits by move
        ; line_number = 442
        ;info   442, 2066
        movf    _float32_aargb1,w
        ; line_number = 443
        ;info   443, 2067
        movwf   _float32_aargb0
        ; line_number = 444
        ;info   444, 2068
        movf    _float32_aargb2,w
        ; line_number = 445
        ;info   445, 2069
        movwf   _float32_aargb1
        ; line_number = 446
        ;info   446, 2070
        clrf    _float32_aargb2
        ; # increase decrement by 8
        ; line_number = 448
        ;info   448, 2071
        bsf     _float32_temp, 3

        ; # test if highbyte=0
        ; line_number = 451
        ;info   451, 2072
        movf    _float32_aargb0,w
        ; line_number = 452
        ;info   452, 2073
        btfss   _float32_status, _float32_z
        ; line_number = 453
        ;info   453, 2074
        goto    _float32_norm3232
        ; # if so, shift 8 bits by move
        ; line_number = 455
        ;info   455, 2075
        movf    _float32_aargb1,w
        ; line_number = 456
        ;info   456, 2076
        movwf   _float32_aargb0
        ; line_number = 457
        ;info   457, 2077
        clrf    _float32_aargb1
        ; # increase decrement by 8
        ; line_number = 459
        ;info   459, 2078
        bcf     _float32_temp, 3
        ; line_number = 460
        ;info   460, 2079
        bsf     _float32_temp, 4

        ; # if highbyte=0, result=0
        ; line_number = 463
        ;info   463, 2080
        movf    _float32_aargb0,w
        ; line_number = 464
        ;info   464, 2081
        btfsc   _float32_status, _float32_z
        ; line_number = 465
        ;info   465, 2082
        goto    _float32_res032

        ; line_number = 467
_float32_norm3232:
        ; line_number = 468
        ;info   468, 2083
        movf    _float32_temp,w
        ; line_number = 469
        ;info   469, 2084
        subwf   _float32_exp,f
        ; line_number = 470
        ;info   470, 2085
        btfss   _float32_status, _float32_z
        ; line_number = 471
        ;info   471, 2086
        btfss   _float32_status, _float32_c
        ; line_number = 472
        ;info   472, 2087
        goto    _float32_setfun32

        ; # clear carry bit
        ; line_number = 475
        ;info   475, 2088
        bcf     _float32_status, _float32_c

        ; line_number = 477
_float32_norm3232a:
        ; # if MSB=1, normalization done
        ; line_number = 479
        ;info   479, 2089
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 480
        ;info   480, 2090
        goto    _float32_fixsign32
        ; # otherwise, shift left and
        ; line_number = 482
        ;info   482, 2091
        rlf     _float32_aargb2,f
        ; # decrement exp
        ; line_number = 484
        ;info   484, 2092
        rlf     _float32_aargb1,f
        ; line_number = 485
        ;info   485, 2093
        rlf     _float32_aargb0,f
        ; line_number = 486
        ;info   486, 2094
        decfsz  _float32_exp,f
        ; line_number = 487
        ;info   487, 2095
        goto    _float32_norm3232a

        ; # underflow if exp=0
        ; line_number = 490
        ;info   490, 2096
        goto    _float32_setfun32

        ; line_number = 492
_float32_fixsign32:
        ; line_number = 493
        ;info   493, 2097
        btfss   _float32_sign, _float32_msb
        ; # clear explicit MSB if positive
        ; line_number = 495
        ;info   495, 2098
        bcf     _float32_aargb0, _float32_msb
        ; line_number = 496
        ;info   496, 2099
        retlw   0

        ; # result equals zero
        ; line_number = 499
_float32_res032:
        ; line_number = 500
        ;info   500, 2100
        clrf    _float32_aargb0
        ; line_number = 501
        ;info   501, 2101
        clrf    _float32_aargb1
        ; line_number = 502
        ;info   502, 2102
        clrf    _float32_aargb2
        ; line_number = 503
        ;info   503, 2103
        clrf    _float32_aargb3
        ; line_number = 504
        ;info   504, 2104
        clrf    _float32_exp
        ; line_number = 505
        ;info   505, 2105
        retlw   0


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 508
        ;info   508, 2106
        ; procedure _float32_from_integer32
_float32_from_integer32:
        ; arguments_none
        ; line_number = 510
        ;  returns_nothing
        ; line_number = 511
        ;  return_suppress

        ; # Integer to float conversion
        ; # Input:  32 bit 2's complement integer right justified in
        ; #          _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
        ; # Use: call flo3232()
        ; # Output: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  FLOAT( _FLOAT32_AARG )
        ; # Max Timing:	17+112 = 129 clks	RND = 0
        ; #			17+128 = 145 clks	RND = 1, SAT = 0
        ; #			17+135 = 152 clks	RND = 1, SAT = 1
        ; # Min Timing:	6+39 = 45 clks		_FLOAT32_AARG = 0
        ; #			6+22 = 28 clks
        ; # PM: 17+66 = 83	DM: 8

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 526
        ;  assemble
        ;info   526, 2106
        ; # initialize exponent and add bias
        ; line_number = 528
        ;info   528, 2106
        movlw   _float32_expbias_31
        ; line_number = 529
        ;info   529, 2107
        movwf   _float32_exp
        ; line_number = 530
        ;info   530, 2108
        clrf    _float32_sign
        ; # test sign
        ; line_number = 532
        ;info   532, 2109
        btfss   _float32_aargb0, _float32_msb
        ; line_number = 533
        ;info   533, 2110
        goto    _float32_normalize40
        ; # if < 0, negate and set MSB in _float32_sign
        ; line_number = 535
        ;info   535, 2111
        comf    _float32_aargb3,f
        ; line_number = 536
        ;info   536, 2112
        comf    _float32_aargb2,f
        ; line_number = 537
        ;info   537, 2113
        comf    _float32_aargb1,f
        ; line_number = 538
        ;info   538, 2114
        comf    _float32_aargb0,f
        ; line_number = 539
        ;info   539, 2115
        incf    _float32_aargb3,f
        ; line_number = 540
        ;info   540, 2116
        btfsc   _float32_status, _float32_z
        ; line_number = 541
        ;info   541, 2117
        incf    _float32_aargb2,f
        ; line_number = 542
        ;info   542, 2118
        btfsc   _float32_status, _float32_z
        ; line_number = 543
        ;info   543, 2119
        incf    _float32_aargb1,f
        ; line_number = 544
        ;info   544, 2120
        btfsc   _float32_status, _float32_z
        ; line_number = 545
        ;info   545, 2121
        incf    _float32_aargb0,f
        ; line_number = 546
        ;info   546, 2122
        bsf     _float32_sign, _float32_msb
        ; # This procedure falls through to nrm4032
        ; #goto nrm4032


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 551
        ;info   551, 2123
        ; procedure _float32_normalize40
_float32_normalize40:
        ; arguments_none
        ; line_number = 553
        ;  returns_nothing
        ; line_number = 554
        ;  return_suppress

        ; # Normalization routine
        ; # Input: 40 bit unnormalized floating point number in
        ; #        _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3 with sign in _float32_sign, MSB
        ; # Use: call nrm4032()
        ; # Output: 32 bit normalized floating point number in
        ; #         _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
        ; # Result: _FLOAT32_AARG  <--  NORMALIZE( _FLOAT32_AARG )
        ; # Max Timing:	38+6*9+12+8 = 112 clks	RND = 0
        ; #			38+6*9+12+24 = 128 clks	RND = 1, SAT = 0
        ; #			38+6*9+12+31 = 135 clks	RND = 1, SAT = 1
        ; # Min Timing:	33+6 = 39 clks		_FLOAT32_AARG = 0
        ; #			5+9+8 = 22 clks
        ; # PM: 66	DM: 8

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 570
        ;  assemble
        ;info   570, 2123
        ; #:nrm4032
        ; # clear exponent decrement
        ; line_number = 573
        ;info   573, 2123
        clrf    _float32_temp
        ; # test if highbyte=0
        ; line_number = 575
        ;info   575, 2124
        movf    _float32_aargb0,w
        ; line_number = 576
        ;info   576, 2125
        btfss   _float32_status, _float32_z
        ; line_number = 577
        ;info   577, 2126
        goto    _float32_norm4032
        ; # if so, shift 8 bits by move
        ; line_number = 579
        ;info   579, 2127
        movf    _float32_aargb1,w
        ; line_number = 580
        ;info   580, 2128
        movwf   _float32_aargb0
        ; line_number = 581
        ;info   581, 2129
        movf    _float32_aargb2,w
        ; line_number = 582
        ;info   582, 2130
        movwf   _float32_aargb1
        ; line_number = 583
        ;info   583, 2131
        movf    _float32_aargb3,w
        ; line_number = 584
        ;info   584, 2132
        movwf   _float32_aargb2
        ; line_number = 585
        ;info   585, 2133
        clrf    _float32_aargb3
        ; # increase decrement by 8
        ; line_number = 587
        ;info   587, 2134
        bsf     _float32_temp, 3

        ; # test if highbyte=0
        ; line_number = 590
        ;info   590, 2135
        movf    _float32_aargb0,w
        ; line_number = 591
        ;info   591, 2136
        btfss   _float32_status, _float32_z
        ; line_number = 592
        ;info   592, 2137
        goto    _float32_norm4032
        ; # if so, shift 8 bits by move
        ; line_number = 594
        ;info   594, 2138
        movf    _float32_aargb1,w
        ; line_number = 595
        ;info   595, 2139
        movwf   _float32_aargb0
        ; line_number = 596
        ;info   596, 2140
        movf    _float32_aargb2,w
        ; line_number = 597
        ;info   597, 2141
        movwf   _float32_aargb1
        ; line_number = 598
        ;info   598, 2142
        clrf    _float32_aargb2
        ; # increase decrement by 8
        ; line_number = 600
        ;info   600, 2143
        bcf     _float32_temp, 3
        ; line_number = 601
        ;info   601, 2144
        bsf     _float32_temp, 4

        ; # test if highbyte=0
        ; line_number = 604
        ;info   604, 2145
        movf    _float32_aargb0,w
        ; line_number = 605
        ;info   605, 2146
        btfss   _float32_status, _float32_z
        ; line_number = 606
        ;info   606, 2147
        goto    _float32_norm4032
        ; # if so, shift 8 bits by move
        ; line_number = 608
        ;info   608, 2148
        movf    _float32_aargb1,w
        ; line_number = 609
        ;info   609, 2149
        movwf   _float32_aargb0
        ; line_number = 610
        ;info   610, 2150
        clrf    _float32_aargb1
        ; # increase decrement by 8
        ; line_number = 612
        ;info   612, 2151
        bsf     _float32_temp, 3

        ; # if highbyte=0, result=0
        ; line_number = 615
        ;info   615, 2152
        movf    _float32_aargb0,w
        ; line_number = 616
        ;info   616, 2153
        btfsc   _float32_status, _float32_z
        ; line_number = 617
        ;info   617, 2154
        goto    _float32_res032

        ; line_number = 619
_float32_norm4032:
        ; line_number = 620
        ;info   620, 2155
        movf    _float32_temp,w
        ; line_number = 621
        ;info   621, 2156
        subwf   _float32_exp,f
        ; line_number = 622
        ;info   622, 2157
        btfss   _float32_status, _float32_z
        ; line_number = 623
        ;info   623, 2158
        btfss   _float32_status, _float32_c
        ; line_number = 624
        ;info   624, 2159
        goto    _float32_setfun32

        ; # clear carry bit
        ; line_number = 627
        ;info   627, 2160
        bcf     _float32_status, _float32_c

        ; line_number = 629
_float32_norm4032a:
        ; # if MSB=1, normalization done
        ; line_number = 631
        ;info   631, 2161
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 632
        ;info   632, 2162
        goto    _float32_nrmrnd4032
        ; # otherwise, shift left and
        ; line_number = 634
        ;info   634, 2163
        rlf     _float32_aargb3,f
        ; # decrement exp
        ; line_number = 636
        ;info   636, 2164
        rlf     _float32_aargb2,f
        ; line_number = 637
        ;info   637, 2165
        rlf     _float32_aargb1,f
        ; line_number = 638
        ;info   638, 2166
        rlf     _float32_aargb0,f
        ; line_number = 639
        ;info   639, 2167
        decfsz  _float32_exp,f
        ; line_number = 640
        ;info   640, 2168
        goto    _float32_norm4032a

        ; # underflow if exp=0
        ; line_number = 643
        ;info   643, 2169
        goto    _float32_setfun32

        ; line_number = 645
_float32_nrmrnd4032:
        ; line_number = 646
        ;info   646, 2170
        btfsc   _float32_fpflags, _float32_rnd
        ; line_number = 647
        ;info   647, 2171
        btfss   _float32_aargb2, _float32_lsb
        ; line_number = 648
        ;info   648, 2172
        goto    _float32_fixsign32
        ; # round if next bit is set
        ; line_number = 650
        ;info   650, 2173
        btfss   _float32_aargb3, _float32_msb
        ; line_number = 651
        ;info   651, 2174
        goto    _float32_fixsign32
        ; line_number = 652
        ;info   652, 2175
        incf    _float32_aargb2,f
        ; line_number = 653
        ;info   653, 2176
        btfsc   _float32_status, _float32_z
        ; line_number = 654
        ;info   654, 2177
        incf    _float32_aargb1,f
        ; line_number = 655
        ;info   655, 2178
        btfsc   _float32_status, _float32_z
        ; line_number = 656
        ;info   656, 2179
        incf    _float32_aargb0,f

        ; # has rounding caused carryout
        ; line_number = 659
        ;info   659, 2180
        btfss   _float32_status, _float32_z
        ; line_number = 660
        ;info   660, 2181
        goto    _float32_fixsign32
        ; # if so, right shift
        ; line_number = 662
        ;info   662, 2182
        rrf     _float32_aargb0,f
        ; line_number = 663
        ;info   663, 2183
        rrf     _float32_aargb1,f
        ; line_number = 664
        ;info   664, 2184
        rrf     _float32_aargb2,f
        ; line_number = 665
        ;info   665, 2185
        incf    _float32_exp,f
        ; # check for overflow
        ; line_number = 667
        ;info   667, 2186
        btfsc   _float32_status, _float32_z
        ; line_number = 668
        ;info   668, 2187
        goto    _float32_setfov32
        ; line_number = 669
        ;info   669, 2188
        goto    _float32_fixsign32


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 672
        ;info   672, 2189
        ; procedure _float32_integer24_convert
_float32_integer24_convert:
        ; arguments_none
        ; line_number = 674
        ;  returns_nothing
        ; line_number = 675
        ;  return_suppress

        ; # Float to integer conversion
        ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Use: call int3224()
        ; # Output: 24 bit 2's complement integer right justified in
        ; #         _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  INT( _FLOAT32_AARG )
        ; # Max Timing:	40+6*7+6+16 = 104 clks	RND = 0
        ; #			40+6*7+6+24 = 112 clks	RND = 1, SAT = 0
        ; #			40+6*7+6+26 = 114 clks	RND = 1, SAT = 1
        ; # Min Timing:	4 clks
        ; # PM: 82	DM: 6

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 689
        ;  assemble
        ;info   689, 2189
        ; line_number = 690
_float32_int32:
        ; # test for zero argument
        ; line_number = 692
        ;info   692, 2189
        movf    _float32_exp,w
        ; line_number = 693
        ;info   693, 2190
        btfsc   _float32_status, _float32_z
        ; line_number = 694
        ;info   694, 2191
        retlw   0

        ; # save sign in _float32_sign
        ; line_number = 697
        ;info   697, 2192
        movf    _float32_aargb0,w
        ; line_number = 698
        ;info   698, 2193
        movwf   _float32_sign
        ; # make MSB explicit
        ; line_number = 700
        ;info   700, 2194
        bsf     _float32_aargb0, _float32_msb

        ; # remove bias from exp
        ; line_number = 703
        ;info   703, 2195
        movlw   _float32_expbias_23
        ; line_number = 704
        ;info   704, 2196
        subwf   _float32_exp,f
        ; line_number = 705
        ;info   705, 2197
        btfss   _float32_exp, _float32_msb
        ; line_number = 706
        ;info   706, 2198
        goto    _float32_setiov3224
        ; line_number = 707
        ;info   707, 2199
        comf    _float32_exp,f
        ; line_number = 708
        ;info   708, 2200
        incf    _float32_exp,f

        ; # do byte shift if exp >= 8
        ; line_number = 711
        ;info   711, 2201
        movlw   8
        ; line_number = 712
        ;info   712, 2202
        subwf   _float32_exp,w
        ; line_number = 713
        ;info   713, 2203
        btfss   _float32_status, _float32_c
        ; line_number = 714
        ;info   714, 2204
        goto    _float32_tshift3224
        ; line_number = 715
        ;info   715, 2205
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 717
        ;info   717, 2206
        rlf     _float32_aargb2,f
        ; line_number = 718
        ;info   718, 2207
        movf    _float32_aargb1,w
        ; line_number = 719
        ;info   719, 2208
        movwf   _float32_aargb2
        ; line_number = 720
        ;info   720, 2209
        movf    _float32_aargb0,w
        ; line_number = 721
        ;info   721, 2210
        movwf   _float32_aargb1
        ; line_number = 722
        ;info   722, 2211
        clrf    _float32_aargb0

        ; # do another byte shift if exp >= 8
        ; line_number = 725
        ;info   725, 2212
        movlw   8
        ; line_number = 726
        ;info   726, 2213
        subwf   _float32_exp,w
        ; line_number = 727
        ;info   727, 2214
        btfss   _float32_status, _float32_c
        ; line_number = 728
        ;info   728, 2215
        goto    _float32_tshift3224
        ; line_number = 729
        ;info   729, 2216
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 731
        ;info   731, 2217
        rlf     _float32_aargb2,f
        ; line_number = 732
        ;info   732, 2218
        movf    _float32_aargb1,w
        ; line_number = 733
        ;info   733, 2219
        movwf   _float32_aargb2
        ; line_number = 734
        ;info   734, 2220
        clrf    _float32_aargb1

        ; # do another byte shift if exp >= 8
        ; line_number = 737
        ;info   737, 2221
        movlw   8
        ; line_number = 738
        ;info   738, 2222
        subwf   _float32_exp,w
        ; line_number = 739
        ;info   739, 2223
        btfss   _float32_status, _float32_c
        ; line_number = 740
        ;info   740, 2224
        goto    _float32_tshift3224
        ; line_number = 741
        ;info   741, 2225
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 743
        ;info   743, 2226
        rlf     _float32_aargb2,f
        ; line_number = 744
        ;info   744, 2227
        clrf    _float32_aargb2
        ; line_number = 745
        ;info   745, 2228
        movf    _float32_exp,w
        ; line_number = 746
        ;info   746, 2229
        btfss   _float32_status, _float32_z
        ; line_number = 747
        ;info   747, 2230
        bcf     _float32_status, _float32_c
        ; line_number = 748
        ;info   748, 2231
        goto    _float32_shift3224ok

        ; line_number = 750
_float32_tshift3224:
        ; # shift completed if exp = 0
        ; line_number = 752
        ;info   752, 2232
        movf    _float32_exp,w
        ; line_number = 753
        ;info   753, 2233
        btfsc   _float32_status, _float32_z
        ; line_number = 754
        ;info   754, 2234
        goto    _float32_shift3224ok

        ; line_number = 756
_float32_shift3224:
        ; line_number = 757
        ;info   757, 2235
        bcf     _float32_status, _float32_c
        ; # right shift by exp
        ; line_number = 759
        ;info   759, 2236
        rrf     _float32_aargb0,f
        ; line_number = 760
        ;info   760, 2237
        rrf     _float32_aargb1,f
        ; line_number = 761
        ;info   761, 2238
        rrf     _float32_aargb2,f
        ; line_number = 762
        ;info   762, 2239
        decfsz  _float32_exp,f
        ; line_number = 763
        ;info   763, 2240
        goto    _float32_shift3224

        ; line_number = 765
_float32_shift3224ok:
        ; line_number = 766
        ;info   766, 2241
        btfsc   _float32_fpflags, _float32_rnd
        ; line_number = 767
        ;info   767, 2242
        btfss   _float32_aargb2, _float32_lsb
        ; line_number = 768
        ;info   768, 2243
        goto    _float32_int3224ok
        ; line_number = 769
        ;info   769, 2244
        btfss   _float32_status, _float32_c
        ; line_number = 770
        ;info   770, 2245
        goto    _float32_int3224ok
        ; line_number = 771
        ;info   771, 2246
        incf    _float32_aargb2,f
        ; line_number = 772
        ;info   772, 2247
        btfsc   _float32_status, _float32_z
        ; line_number = 773
        ;info   773, 2248
        incf    _float32_aargb1,f
        ; line_number = 774
        ;info   774, 2249
        btfsc   _float32_status, _float32_z
        ; line_number = 775
        ;info   775, 2250
        incf    _float32_aargb0,f
        ; # test for overflow
        ; line_number = 777
        ;info   777, 2251
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 778
        ;info   778, 2252
        goto    _float32_setiov3224

        ; line_number = 780
_float32_int3224ok:
        ; # if sign bit set, negate
        ; line_number = 782
        ;info   782, 2253
        btfss   _float32_sign, _float32_msb
        ; line_number = 783
        ;info   783, 2254
        retlw   0
        ; line_number = 784
        ;info   784, 2255
        comf    _float32_aargb0,f
        ; line_number = 785
        ;info   785, 2256
        comf    _float32_aargb1,f
        ; line_number = 786
        ;info   786, 2257
        comf    _float32_aargb2,f
        ; line_number = 787
        ;info   787, 2258
        incf    _float32_aargb2,f
        ; line_number = 788
        ;info   788, 2259
        btfsc   _float32_status, _float32_z
        ; line_number = 789
        ;info   789, 2260
        incf    _float32_aargb1,f
        ; line_number = 790
        ;info   790, 2261
        btfsc   _float32_status, _float32_z
        ; line_number = 791
        ;info   791, 2262
        incf    _float32_aargb0,f
        ; line_number = 792
        ;info   792, 2263
        retlw   0

        ; line_number = 794
_float32_ires03224:
        ; # integer result equals zero
        ; line_number = 796
        ;info   796, 2264
        clrf    _float32_aargb0
        ; line_number = 797
        ;info   797, 2265
        clrf    _float32_aargb1
        ; line_number = 798
        ;info   798, 2266
        clrf    _float32_aargb2
        ; line_number = 799
        ;info   799, 2267
        retlw   0

        ; # set integer overflow flag
        ; line_number = 802
_float32_setiov3224:
        ; line_number = 803
        ;info   803, 2268
        bsf     _float32_fpflags, _float32_iov
        ; # test for saturation
        ; line_number = 805
        ;info   805, 2269
        btfss   _float32_fpflags, _float32_sat
        ; # return error code in WREG
        ; line_number = 807
        ;info   807, 2270
        retlw   255

        ; # saturate to largest two's
        ; line_number = 810
        ;info   810, 2271
        clrf    _float32_aargb0
        ; # complement 24 bit integer
        ; line_number = 812
        ;info   812, 2272
        btfss   _float32_sign, _float32_msb
        ; line_number = 813
        ;info   813, 2273
        movlw   255
        ; # sign = 0, 0x 7F FF FF
        ; line_number = 815
        ;info   815, 2274
        movwf   _float32_aargb0
        ; # sign = 1, 0x 80 00 00
        ; line_number = 817
        ;info   817, 2275
        movwf   _float32_aargb1
        ; line_number = 818
        ;info   818, 2276
        movwf   _float32_aargb2
        ; line_number = 819
        ;info   819, 2277
        rlf     _float32_sign,f
        ; line_number = 820
        ;info   820, 2278
        rrf     _float32_aargb0,f
        ; # return error code in WREG
        ; line_number = 822
        ;info   822, 2279
        retlw   255


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 825
        ;info   825, 2280
        ; procedure float32_integer32_convert
float32_integer32_convert:
        ; arguments_none
        ; line_number = 827
        ;  returns_nothing
        ; line_number = 828
        ;  return_suppress

        ; # Float to integer conversion
        ; # Input:  32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Use: call int3232()
        ; # Output: 32 bit 2's complement integer right justified in
        ; #         _float32_aargb0, _float32_aargb1, _float32_aargb2, _float32_aargb3
        ; # Result: _FLOAT32_AARG  <--  INT( _FLOAT32_AARG )
        ; # Max Timing:	54+6*8+7+21 = 130 clks	RND = 0
        ; #			54+6*8+7+29 = 137 clks	RND = 1, SAT = 0
        ; #			54+6*8+7+29 = 137 clks	RND = 1, SAT = 1
        ; # Min Timing:	5 clks
        ; # PM: 102	DM: 7

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 842
        ;  assemble
        ;info   842, 2280
        ; #:int3232
        ; line_number = 844
        ;info   844, 2280
        clrf    _float32_aargb3
        ; # test for zero argument
        ; line_number = 846
        ;info   846, 2281
        movf    _float32_exp,w
        ; line_number = 847
        ;info   847, 2282
        btfsc   _float32_status, _float32_z
        ; line_number = 848
        ;info   848, 2283
        retlw   0

        ; # save sign in _float32_sign
        ; line_number = 851
        ;info   851, 2284
        movf    _float32_aargb0,w
        ; line_number = 852
        ;info   852, 2285
        movwf   _float32_sign
        ; # make MSB explicit
        ; line_number = 854
        ;info   854, 2286
        bsf     _float32_aargb0, _float32_msb

        ; # remove bias from exp
        ; line_number = 857
        ;info   857, 2287
        movlw   _float32_expbias_31
        ; line_number = 858
        ;info   858, 2288
        subwf   _float32_exp,f
        ; line_number = 859
        ;info   859, 2289
        btfss   _float32_exp, _float32_msb
        ; line_number = 860
        ;info   860, 2290
        goto    _float32_setiov32
        ; line_number = 861
        ;info   861, 2291
        comf    _float32_exp,f
        ; line_number = 862
        ;info   862, 2292
        incf    _float32_exp,f

        ; # do byte shift if exp >= 8
        ; line_number = 865
        ;info   865, 2293
        movlw   8
        ; line_number = 866
        ;info   866, 2294
        subwf   _float32_exp,w
        ; line_number = 867
        ;info   867, 2295
        btfss   _float32_status, _float32_c
        ; line_number = 868
        ;info   868, 2296
        goto    _float32_tshift3232
        ; line_number = 869
        ;info   869, 2297
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 871
        ;info   871, 2298
        rlf     _float32_aargb3,f
        ; line_number = 872
        ;info   872, 2299
        movf    _float32_aargb2,w
        ; line_number = 873
        ;info   873, 2300
        movwf   _float32_aargb3
        ; line_number = 874
        ;info   874, 2301
        movf    _float32_aargb1,w
        ; line_number = 875
        ;info   875, 2302
        movwf   _float32_aargb2
        ; line_number = 876
        ;info   876, 2303
        movf    _float32_aargb0,w
        ; line_number = 877
        ;info   877, 2304
        movwf   _float32_aargb1
        ; line_number = 878
        ;info   878, 2305
        clrf    _float32_aargb0

        ; # do another byte shift if exp >= 8
        ; line_number = 881
        ;info   881, 2306
        movlw   8
        ; line_number = 882
        ;info   882, 2307
        subwf   _float32_exp,w
        ; line_number = 883
        ;info   883, 2308
        btfss   _float32_status, _float32_c
        ; line_number = 884
        ;info   884, 2309
        goto    _float32_tshift3232
        ; line_number = 885
        ;info   885, 2310
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 887
        ;info   887, 2311
        rlf     _float32_aargb3,f
        ; line_number = 888
        ;info   888, 2312
        movf    _float32_aargb2,w
        ; line_number = 889
        ;info   889, 2313
        movwf   _float32_aargb3
        ; line_number = 890
        ;info   890, 2314
        movf    _float32_aargb1,w
        ; line_number = 891
        ;info   891, 2315
        movwf   _float32_aargb2
        ; line_number = 892
        ;info   892, 2316
        clrf    _float32_aargb1

        ; # do another byte shift if exp >= 8
        ; line_number = 895
        ;info   895, 2317
        movlw   8
        ; line_number = 896
        ;info   896, 2318
        subwf   _float32_exp,w
        ; line_number = 897
        ;info   897, 2319
        btfss   _float32_status, _float32_c
        ; line_number = 898
        ;info   898, 2320
        goto    _float32_tshift3232
        ; line_number = 899
        ;info   899, 2321
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 901
        ;info   901, 2322
        rlf     _float32_aargb3,f
        ; line_number = 902
        ;info   902, 2323
        movf    _float32_aargb2,w
        ; line_number = 903
        ;info   903, 2324
        movwf   _float32_aargb3
        ; line_number = 904
        ;info   904, 2325
        clrf    _float32_aargb2

        ; # do another byte shift if exp >= 8
        ; line_number = 907
        ;info   907, 2326
        movlw   8
        ; line_number = 908
        ;info   908, 2327
        subwf   _float32_exp,w
        ; line_number = 909
        ;info   909, 2328
        btfss   _float32_status, _float32_c
        ; line_number = 910
        ;info   910, 2329
        goto    _float32_tshift3232
        ; line_number = 911
        ;info   911, 2330
        movwf   _float32_exp
        ; # rotate next bit for rounding
        ; line_number = 913
        ;info   913, 2331
        rlf     _float32_aargb3,f
        ; line_number = 914
        ;info   914, 2332
        clrf    _float32_aargb3
        ; line_number = 915
        ;info   915, 2333
        movf    _float32_exp,w
        ; line_number = 916
        ;info   916, 2334
        btfss   _float32_status, _float32_z
        ; line_number = 917
        ;info   917, 2335
        bcf     _float32_status, _float32_c
        ; line_number = 918
        ;info   918, 2336
        goto    _float32_shift3232ok

        ; line_number = 920
_float32_tshift3232:
        ; # shift completed if exp = 0
        ; line_number = 922
        ;info   922, 2337
        movf    _float32_exp,w
        ; line_number = 923
        ;info   923, 2338
        btfsc   _float32_status, _float32_z
        ; line_number = 924
        ;info   924, 2339
        goto    _float32_shift3232ok

        ; line_number = 926
_float32_shift3232:
        ; line_number = 927
        ;info   927, 2340
        bcf     _float32_status, _float32_c
        ; # right shift by exp
        ; line_number = 929
        ;info   929, 2341
        rrf     _float32_aargb0,f
        ; line_number = 930
        ;info   930, 2342
        rrf     _float32_aargb1,f
        ; line_number = 931
        ;info   931, 2343
        rrf     _float32_aargb2,f
        ; line_number = 932
        ;info   932, 2344
        rrf     _float32_aargb3,f
        ; line_number = 933
        ;info   933, 2345
        decfsz  _float32_exp,f
        ; line_number = 934
        ;info   934, 2346
        goto    _float32_shift3232

        ; line_number = 936
_float32_shift3232ok:
        ; line_number = 937
        ;info   937, 2347
        btfsc   _float32_fpflags, _float32_rnd
        ; line_number = 938
        ;info   938, 2348
        btfss   _float32_aargb3, _float32_lsb
        ; line_number = 939
        ;info   939, 2349
        goto    _float32_int3232ok
        ; line_number = 940
        ;info   940, 2350
        btfss   _float32_status, _float32_c
        ; line_number = 941
        ;info   941, 2351
        goto    _float32_int3232ok
        ; line_number = 942
        ;info   942, 2352
        incf    _float32_aargb3,f
        ; line_number = 943
        ;info   943, 2353
        btfsc   _float32_status, _float32_z
        ; line_number = 944
        ;info   944, 2354
        incf    _float32_aargb2,f
        ; line_number = 945
        ;info   945, 2355
        btfsc   _float32_status, _float32_z
        ; line_number = 946
        ;info   946, 2356
        incf    _float32_aargb1,f
        ; line_number = 947
        ;info   947, 2357
        btfsc   _float32_status, _float32_z
        ; line_number = 948
        ;info   948, 2358
        incf    _float32_aargb0,f
        ; # test for overflow
        ; line_number = 950
        ;info   950, 2359
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 951
        ;info   951, 2360
        goto    _float32_setiov3224

        ; line_number = 953
_float32_int3232ok:
        ; # if sign bit set, negate
        ; line_number = 955
        ;info   955, 2361
        btfss   _float32_sign, _float32_msb
        ; line_number = 956
        ;info   956, 2362
        retlw   0
        ; line_number = 957
        ;info   957, 2363
        comf    _float32_aargb0,f
        ; line_number = 958
        ;info   958, 2364
        comf    _float32_aargb1,f
        ; line_number = 959
        ;info   959, 2365
        comf    _float32_aargb2,f
        ; line_number = 960
        ;info   960, 2366
        comf    _float32_aargb3,f
        ; line_number = 961
        ;info   961, 2367
        incf    _float32_aargb3,f
        ; line_number = 962
        ;info   962, 2368
        btfsc   _float32_status, _float32_z
        ; line_number = 963
        ;info   963, 2369
        incf    _float32_aargb2,f
        ; line_number = 964
        ;info   964, 2370
        btfsc   _float32_status, _float32_z
        ; line_number = 965
        ;info   965, 2371
        incf    _float32_aargb1,f
        ; line_number = 966
        ;info   966, 2372
        btfsc   _float32_status, _float32_z
        ; line_number = 967
        ;info   967, 2373
        incf    _float32_aargb0,f
        ; line_number = 968
        ;info   968, 2374
        retlw   0

        ; line_number = 970
_float32_ires032:
        ; # integer result equals zero
        ; line_number = 972
        ;info   972, 2375
        clrf    _float32_aargb0
        ; line_number = 973
        ;info   973, 2376
        clrf    _float32_aargb1
        ; line_number = 974
        ;info   974, 2377
        clrf    _float32_aargb2
        ; line_number = 975
        ;info   975, 2378
        clrf    _float32_aargb3
        ; line_number = 976
        ;info   976, 2379
        retlw   0

        ; line_number = 978
_float32_setiov32:
        ; # set integer overflow flag
        ; line_number = 980
        ;info   980, 2380
        bsf     _float32_fpflags, _float32_iov
        ; # test for saturation
        ; line_number = 982
        ;info   982, 2381
        btfss   _float32_fpflags, _float32_sat
        ; # return error code in WREG
        ; line_number = 984
        ;info   984, 2382
        retlw   255

        ; #saturate to largest two's
        ; line_number = 987
        ;info   987, 2383
        clrf    _float32_aargb0
        ; # complement 32 bit integer
        ; line_number = 989
        ;info   989, 2384
        btfss   _float32_sign, _float32_msb
        ; line_number = 990
        ;info   990, 2385
        movlw   255
        ; # sign = 0, 0x 7F FF FF FF
        ; line_number = 992
        ;info   992, 2386
        movwf   _float32_aargb0
        ; # sign = 1, 0x 80 00 00 00
        ; line_number = 994
        ;info   994, 2387
        movwf   _float32_aargb1
        ; line_number = 995
        ;info   995, 2388
        movwf   _float32_aargb2
        ; line_number = 996
        ;info   996, 2389
        movwf   _float32_aargb3
        ; line_number = 997
        ;info   997, 2390
        rlf     _float32_sign,f
        ; line_number = 998
        ;info   998, 2391
        rrf     _float32_aargb0,f
        ; # return error code in WREG
        ; line_number = 1000
        ;info   1000, 2392
        retlw   255


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 1003
        ;info   1003, 2393
        ; procedure _float32_multiply
_float32_multiply:
        ; arguments_none
        ; line_number = 1005
        ;  returns_nothing
        ; line_number = 1006
        ;  return_suppress

        ; # Floating Point Multiply
        ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; #        32 bit floating point number in _float32_bexp, _FLOAT32_BARGB0, _FLOAT32_BARGB1, _FLOAT32_BARGB2
        ; # Use: call fpm32()
        ; # Output: 32 bit floating point product in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG * _FLOAT32_BARG
        ; # Max Timing:	26+23*22+21+21 = 574 clks	RND = 0
        ; #			26+23*22+21+35 = 588 clks	RND = 1, SAT = 0
        ; #			26+23*22+21+38 = 591 clks	RND = 1, SAT = 1
        ; # Min Timing:	6+6 = 12 clks			_FLOAT32_AARG * _FLOAT32_BARG = 0
        ; #			24+23*11+21+17 = 315 clks
        ; # PM: 94		DM: 14

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 1021
        ;  assemble
        ;info   1021, 2393
        ; # test for zero arguments
        ; line_number = 1023
        ;info   1023, 2393
        movf    _float32_aexp,w
        ; line_number = 1024
        ;info   1024, 2394
        btfss   _float32_status, _float32_z
        ; line_number = 1025
        ;info   1025, 2395
        movf    _float32_bexp,w
        ; line_number = 1026
        ;info   1026, 2396
        btfsc   _float32_status, _float32_z
        ; line_number = 1027
        ;info   1027, 2397
        goto    _float32_res032

        ; line_number = 1029
_float32_m32bne0:
        ; line_number = 1030
        ;info   1030, 2398
        movf    _float32_aargb0,w
        ; line_number = 1031
        ;info   1031, 2399
        xorwf   _float32_bargb0,w
        ; # save sign in _float32_sign
        ; line_number = 1033
        ;info   1033, 2400
        movwf   _float32_sign

        ; line_number = 1035
        ;info   1035, 2401
        movf    _float32_bexp,w
        ; line_number = 1036
        ;info   1036, 2402
        addwf   _float32_exp,f
        ; line_number = 1037
        ;info   1037, 2403
        movlw   _float32_expbias_1
        ; line_number = 1038
        ;info   1038, 2404
        btfss   _float32_status, _float32_c
        ; line_number = 1039
        ;info   1039, 2405
        goto    _float32_mtun32

        ; line_number = 1041
        ;info   1041, 2406
        subwf   _float32_exp,f
        ; line_number = 1042
        ;info   1042, 2407
        btfsc   _float32_status, _float32_c
        ; # set multiply overflow flag
        ; line_number = 1044
        ;info   1044, 2408
        goto    _float32_setfov32
        ; line_number = 1045
        ;info   1045, 2409
        goto    _float32_mok32

        ; line_number = 1047
_float32_mtun32:
        ; line_number = 1048
        ;info   1048, 2410
        subwf   _float32_exp,f
        ; line_number = 1049
        ;info   1049, 2411
        btfss   _float32_status, _float32_c
        ; line_number = 1050
        ;info   1050, 2412
        goto    _float32_setfun32

        ; line_number = 1052
_float32_mok32:
        ; line_number = 1053
        ;info   1053, 2413
        movf    _float32_aargb0,w
        ; line_number = 1054
        ;info   1054, 2414
        movwf   _float32_aargb3
        ; line_number = 1055
        ;info   1055, 2415
        movf    _float32_aargb1,w
        ; line_number = 1056
        ;info   1056, 2416
        movwf   _float32_aargb4
        ; line_number = 1057
        ;info   1057, 2417
        movf    _float32_aargb2,w
        ; line_number = 1058
        ;info   1058, 2418
        movwf   _float32_aargb5
        ; # make argument MSB's explicit
        ; line_number = 1060
        ;info   1060, 2419
        bsf     _float32_aargb3, _float32_msb
        ; line_number = 1061
        ;info   1061, 2420
        bsf     _float32_bargb0, _float32_msb
        ; line_number = 1062
        ;info   1062, 2421
        bcf     _float32_status, _float32_c
        ; # clear initial partial product
        ; line_number = 1064
        ;info   1064, 2422
        clrf    _float32_aargb0
        ; line_number = 1065
        ;info   1065, 2423
        clrf    _float32_aargb1
        ; line_number = 1066
        ;info   1066, 2424
        clrf    _float32_aargb2
        ; line_number = 1067
        ;info   1067, 2425
        movlw   24
        ; # initialize counter
        ; line_number = 1069
        ;info   1069, 2426
        movwf   _float32_temp

        ; # test next bit
        ; line_number = 1072
_float32_mloop32:
        ; line_number = 1073
        ;info   1073, 2427
        btfss   _float32_aargb5, _float32_lsb
        ; line_number = 1074
        ;info   1074, 2428
        goto    _float32_mnoadd32

        ; line_number = 1076
_float32_madd32:
        ; line_number = 1077
        ;info   1077, 2429
        movf    _float32_bargb2,w
        ; line_number = 1078
        ;info   1078, 2430
        addwf   _float32_aargb2,f
        ; line_number = 1079
        ;info   1079, 2431
        movf    _float32_bargb1,w
        ; line_number = 1080
        ;info   1080, 2432
        btfsc   _float32_status, _float32_c
        ; line_number = 1081
        ;info   1081, 2433
        incfsz  _float32_bargb1,w
        ; line_number = 1082
        ;info   1082, 2434
        addwf   _float32_aargb1,f

        ; line_number = 1084
        ;info   1084, 2435
        movf    _float32_bargb0,w
        ; line_number = 1085
        ;info   1085, 2436
        btfsc   _float32_status, _float32_c
        ; line_number = 1086
        ;info   1086, 2437
        incfsz  _float32_bargb0,w
        ; line_number = 1087
        ;info   1087, 2438
        addwf   _float32_aargb0,f

        ; line_number = 1089
_float32_mnoadd32:
        ; line_number = 1090
        ;info   1090, 2439
        rrf     _float32_aargb0,f
        ; line_number = 1091
        ;info   1091, 2440
        rrf     _float32_aargb1,f
        ; line_number = 1092
        ;info   1092, 2441
        rrf     _float32_aargb2,f
        ; line_number = 1093
        ;info   1093, 2442
        rrf     _float32_aargb3,f
        ; line_number = 1094
        ;info   1094, 2443
        rrf     _float32_aargb4,f
        ; line_number = 1095
        ;info   1095, 2444
        rrf     _float32_aargb5,f
        ; line_number = 1096
        ;info   1096, 2445
        bcf     _float32_status, _float32_c
        ; line_number = 1097
        ;info   1097, 2446
        decfsz  _float32_temp,f
        ; line_number = 1098
        ;info   1098, 2447
        goto    _float32_mloop32

        ; # check for postnormalization
        ; line_number = 1101
        ;info   1101, 2448
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 1102
        ;info   1102, 2449
        goto    _float32_mround32
        ; line_number = 1103
        ;info   1103, 2450
        rlf     _float32_aargb3,f
        ; line_number = 1104
        ;info   1104, 2451
        rlf     _float32_aargb2,f
        ; line_number = 1105
        ;info   1105, 2452
        rlf     _float32_aargb1,f
        ; line_number = 1106
        ;info   1106, 2453
        rlf     _float32_aargb0,f
        ; line_number = 1107
        ;info   1107, 2454
        decf    _float32_exp,f

        ; line_number = 1109
_float32_mround32:
        ; line_number = 1110
        ;info   1110, 2455
        btfsc   _float32_fpflags, _float32_rnd
        ; line_number = 1111
        ;info   1111, 2456
        btfss   _float32_aargb2, _float32_lsb
        ; line_number = 1112
        ;info   1112, 2457
        goto    _float32_mul32ok
        ; line_number = 1113
        ;info   1113, 2458
        btfss   _float32_aargb3, _float32_msb
        ; line_number = 1114
        ;info   1114, 2459
        goto    _float32_mul32ok
        ; line_number = 1115
        ;info   1115, 2460
        incf    _float32_aargb2,f
        ; line_number = 1116
        ;info   1116, 2461
        btfsc   _float32_status, _float32_z
        ; line_number = 1117
        ;info   1117, 2462
        incf    _float32_aargb1,f
        ; line_number = 1118
        ;info   1118, 2463
        btfsc   _float32_status, _float32_z
        ; line_number = 1119
        ;info   1119, 2464
        incf    _float32_aargb0,f

        ; # has rounding caused carryout?
        ; line_number = 1122
        ;info   1122, 2465
        btfss   _float32_status, _float32_z
        ; line_number = 1123
        ;info   1123, 2466
        goto    _float32_mul32ok
        ; # if so, right shift
        ; line_number = 1125
        ;info   1125, 2467
        rrf     _float32_aargb0,f
        ; line_number = 1126
        ;info   1126, 2468
        rrf     _float32_aargb1,f
        ; line_number = 1127
        ;info   1127, 2469
        rrf     _float32_aargb2,f
        ; line_number = 1128
        ;info   1128, 2470
        incf    _float32_exp,f
        ; # check for overflow
        ; line_number = 1130
        ;info   1130, 2471
        btfsc   _float32_status, _float32_z
        ; line_number = 1131
        ;info   1131, 2472
        goto    _float32_setfov32

        ; line_number = 1133
_float32_mul32ok:
        ; line_number = 1134
        ;info   1134, 2473
        btfss   _float32_sign, _float32_msb
        ; # clear explicit MSB if positive
        ; line_number = 1136
        ;info   1136, 2474
        bcf     _float32_aargb0, _float32_msb

        ; line_number = 1138
        ;info   1138, 2475
        retlw   0

        ; # set floating point underflag
        ; line_number = 1141
_float32_setfov32:
        ; line_number = 1142
        ;info   1142, 2476
        bsf     _float32_fpflags, _float32_fov
        ; # test for saturation
        ; line_number = 1144
        ;info   1144, 2477
        btfss   _float32_fpflags, _float32_sat
        ; # return error code in WREG
        ; line_number = 1146
        ;info   1146, 2478
        retlw   255

        ; line_number = 1148
        ;info   1148, 2479
        movlw   255
        ; # saturate to largest floating
        ; line_number = 1150
        ;info   1150, 2480
        movwf   _float32_aexp
        ; # point number = 0x FF 7F FF FF
        ; line_number = 1152
        ;info   1152, 2481
        movwf   _float32_aargb0
        ; # modulo the appropriate sign bit
        ; line_number = 1154
        ;info   1154, 2482
        movwf   _float32_aargb1
        ; line_number = 1155
        ;info   1155, 2483
        movwf   _float32_aargb2
        ; line_number = 1156
        ;info   1156, 2484
        rlf     _float32_sign,f
        ; line_number = 1157
        ;info   1157, 2485
        rrf     _float32_aargb0,f
        ; # return error code in WREG
        ; line_number = 1159
        ;info   1159, 2486
        retlw   255


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 1162
        ;info   1162, 2487
        ; procedure _float32_divide
_float32_divide:
        ; arguments_none
        ; line_number = 1164
        ;  returns_nothing
        ; line_number = 1165
        ;  return_suppress

        ; # Floating Point Divide
        ; # Input:  32 bit floating point dividend in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; #         32 bit floating point divisor in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
        ; # Use: call fpd32()
        ; # Output: 32 bit floating point quotient in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG / _FLOAT32_BARG
        ; # Max Timing:	43+12+23*36+35+14 = 932 clks	RND = 0
        ; #			43+12+23*36+35+50 = 968 clks	RND = 1, SAT = 0
        ; #			43+12+23*36+35+53 = 971 clks    RND = 1, SAT = 1
        ; # Min Timing:	7+6 = 13 clks
        ; # PM: 155		DM: 14

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 1179
        ;  assemble
        ;info   1179, 2487
        ; # test for divide by zero
        ; line_number = 1181
        ;info   1181, 2487
        movf    _float32_bexp,w
        ; line_number = 1182
        ;info   1182, 2488
        btfsc   _float32_status, _float32_z
        ; line_number = 1183
        ;info   1183, 2489
        goto    _float32_setfdz32

        ; line_number = 1185
        ;info   1185, 2490
        movf    _float32_aexp,w
        ; line_number = 1186
        ;info   1186, 2491
        btfsc   _float32_status, _float32_z
        ; line_number = 1187
        ;info   1187, 2492
        goto    _float32_res032

        ; line_number = 1189
_float32_d32bne0:
        ; line_number = 1190
        ;info   1190, 2493
        movf    _float32_aargb0,w
        ; line_number = 1191
        ;info   1191, 2494
        xorwf   _float32_bargb0,w
        ; # save sign in _float32_sign
        ; line_number = 1193
        ;info   1193, 2495
        movwf   _float32_sign
        ; # make argument MSB's explicit
        ; line_number = 1195
        ;info   1195, 2496
        bsf     _float32_aargb0, _float32_msb
        ; line_number = 1196
        ;info   1196, 2497
        bsf     _float32_bargb0, _float32_msb

        ; line_number = 1198
_float32_talign32:
        ; # clear align increment
        ; line_number = 1200
        ;info   1200, 2498
        clrf    _float32_temp
        ; line_number = 1201
        ;info   1201, 2499
        movf    _float32_aargb0,w
        ; # test for alignment
        ; line_number = 1203
        ;info   1203, 2500
        movwf   _float32_aargb3
        ; line_number = 1204
        ;info   1204, 2501
        movf    _float32_aargb1,w
        ; line_number = 1205
        ;info   1205, 2502
        movwf   _float32_aargb4
        ; line_number = 1206
        ;info   1206, 2503
        movf    _float32_aargb2,w
        ; line_number = 1207
        ;info   1207, 2504
        movwf   _float32_aargb5

        ; line_number = 1209
        ;info   1209, 2505
        movf    _float32_bargb2,w
        ; line_number = 1210
        ;info   1210, 2506
        subwf   _float32_aargb5,f
        ; line_number = 1211
        ;info   1211, 2507
        movf    _float32_bargb1,w
        ; line_number = 1212
        ;info   1212, 2508
        btfss   _float32_status, _float32_c
        ; line_number = 1213
        ;info   1213, 2509
        incfsz  _float32_bargb1,w

        ; line_number = 1215
_float32_ts1align32:
        ; line_number = 1216
        ;info   1216, 2510
        subwf   _float32_aargb4,f
        ; line_number = 1217
        ;info   1217, 2511
        movf    _float32_bargb0,w
        ; line_number = 1218
        ;info   1218, 2512
        btfss   _float32_status, _float32_c
        ; line_number = 1219
        ;info   1219, 2513
        incfsz  _float32_bargb0,w

        ; line_number = 1221
_float32_ts2align32:
        ; line_number = 1222
        ;info   1222, 2514
        subwf   _float32_aargb3,f

        ; line_number = 1224
        ;info   1224, 2515
        clrf    _float32_aargb3
        ; line_number = 1225
        ;info   1225, 2516
        clrf    _float32_aargb4
        ; line_number = 1226
        ;info   1226, 2517
        clrf    _float32_aargb5

        ; line_number = 1228
        ;info   1228, 2518
        btfss   _float32_status, _float32_c
        ; line_number = 1229
        ;info   1229, 2519
        goto    _float32_dalign32ok

        ; # align if necessary
        ; line_number = 1232
        ;info   1232, 2520
        bcf     _float32_status, _float32_c
        ; line_number = 1233
        ;info   1233, 2521
        rrf     _float32_aargb0,f
        ; line_number = 1234
        ;info   1234, 2522
        rrf     _float32_aargb1,f
        ; line_number = 1235
        ;info   1235, 2523
        rrf     _float32_aargb2,f
        ; line_number = 1236
        ;info   1236, 2524
        rrf     _float32_aargb3,f
        ; line_number = 1237
        ;info   1237, 2525
        movlw   1
        ; # save align increment
        ; line_number = 1239
        ;info   1239, 2526
        movwf   _float32_temp

        ; line_number = 1241
_float32_dalign32ok:
        ; # compare _float32_aexp and _float32_bexp
        ; line_number = 1243
        ;info   1243, 2527
        movf    _float32_bexp,w
        ; line_number = 1244
        ;info   1244, 2528
        subwf   _float32_exp,f
        ; line_number = 1245
        ;info   1245, 2529
        btfss   _float32_status, _float32_c
        ; line_number = 1246
        ;info   1246, 2530
        goto    _float32_altb32

        ; line_number = 1248
_float32_ageb32:
        ; line_number = 1249
        ;info   1249, 2531
        movlw   _float32_expbias_1
        ; line_number = 1250
        ;info   1250, 2532
        addwf   _float32_temp,w
        ; line_number = 1251
        ;info   1251, 2533
        addwf   _float32_exp,f
        ; line_number = 1252
        ;info   1252, 2534
        btfsc   _float32_status, _float32_c
        ; line_number = 1253
        ;info   1253, 2535
        goto    _float32_setfov32
        ; # set overflow flag
        ; line_number = 1255
        ;info   1255, 2536
        goto    _float32_dargok32

        ; line_number = 1257
_float32_altb32:
        ; line_number = 1258
        ;info   1258, 2537
        movlw   _float32_expbias_1
        ; line_number = 1259
        ;info   1259, 2538
        addwf   _float32_temp,w
        ; line_number = 1260
        ;info   1260, 2539
        addwf   _float32_exp,f
        ; line_number = 1261
        ;info   1261, 2540
        btfss   _float32_status, _float32_c
        ; # set underflow flag
        ; line_number = 1263
        ;info   1263, 2541
        goto    _float32_setfun32

        ; line_number = 1265
_float32_dargok32:
        ; # initialize counter
        ; line_number = 1267
        ;info   1267, 2542
        movlw   24
        ; line_number = 1268
        ;info   1268, 2543
        movwf   _float32_tempb1

        ; line_number = 1270
_float32_dloop32:
        ; # left shift
        ; line_number = 1272
        ;info   1272, 2544
        rlf     _float32_aargb5,f
        ; line_number = 1273
        ;info   1273, 2545
        rlf     _float32_aargb4,f
        ; line_number = 1274
        ;info   1274, 2546
        rlf     _float32_aargb3,f
        ; line_number = 1275
        ;info   1275, 2547
        rlf     _float32_aargb2,f
        ; line_number = 1276
        ;info   1276, 2548
        rlf     _float32_aargb1,f
        ; line_number = 1277
        ;info   1277, 2549
        rlf     _float32_aargb0,f
        ; line_number = 1278
        ;info   1278, 2550
        rlf     _float32_temp,f

        ; # subtract
        ; line_number = 1281
        ;info   1281, 2551
        movf    _float32_bargb2,w
        ; line_number = 1282
        ;info   1282, 2552
        subwf   _float32_aargb2,f
        ; line_number = 1283
        ;info   1283, 2553
        movf    _float32_bargb1,w
        ; line_number = 1284
        ;info   1284, 2554
        btfss   _float32_status, _float32_c
        ; line_number = 1285
        ;info   1285, 2555
        incfsz  _float32_bargb1,w
        ; line_number = 1286
_float32_ds132:
        ; line_number = 1287
        ;info   1287, 2556
        subwf   _float32_aargb1,f

        ; line_number = 1289
        ;info   1289, 2557
        movf    _float32_bargb0,w
        ; line_number = 1290
        ;info   1290, 2558
        btfss   _float32_status, _float32_c
        ; line_number = 1291
        ;info   1291, 2559
        incfsz  _float32_bargb0,w
        ; line_number = 1292
_float32_DS232:
        ; line_number = 1293
        ;info   1293, 2560
        subwf   _float32_aargb0,f

        ; line_number = 1295
        ;info   1295, 2561
        rlf     _float32_bargb0,w
        ; line_number = 1296
        ;info   1296, 2562
        iorwf   _float32_temp,f

        ; # test for restore
        ; line_number = 1299
        ;info   1299, 2563
        btfss   _float32_temp, _float32_lsb
        ; line_number = 1300
        ;info   1300, 2564
        goto    _float32_drest32

        ; line_number = 1302
        ;info   1302, 2565
        bsf     _float32_aargb5, _float32_lsb
        ; line_number = 1303
        ;info   1303, 2566
        goto    _float32_dok32

        ; line_number = 1305
_float32_drest32:
        ; # restore if necessary
        ; line_number = 1307
        ;info   1307, 2567
        movf    _float32_bargb2,w
        ; line_number = 1308
        ;info   1308, 2568
        addwf   _float32_aargb2,f
        ; line_number = 1309
        ;info   1309, 2569
        movf    _float32_bargb1,w
        ; line_number = 1310
        ;info   1310, 2570
        btfsc   _float32_status, _float32_c
        ; line_number = 1311
        ;info   1311, 2571
        incfsz  _float32_bargb1,w
        ; line_number = 1312
_float32_darest32:
        ; line_number = 1313
        ;info   1313, 2572
        addwf   _float32_aargb1,f

        ; line_number = 1315
        ;info   1315, 2573
        movf    _float32_bargb0,w
        ; line_number = 1316
        ;info   1316, 2574
        btfsc   _float32_status, _float32_c
        ; line_number = 1317
        ;info   1317, 2575
        incf    _float32_bargb0,w
        ; line_number = 1318
        ;info   1318, 2576
        addwf   _float32_aargb0,f

        ; line_number = 1320
        ;info   1320, 2577
        bcf     _float32_aargb5, _float32_lsb

        ; line_number = 1322
_float32_dok32:
        ; line_number = 1323
        ;info   1323, 2578
        decfsz  _float32_tempb1,f
        ; line_number = 1324
        ;info   1324, 2579
        goto    _float32_dloop32

        ; line_number = 1326
_float32_dround32:
        ; line_number = 1327
        ;info   1327, 2580
        btfsc   _float32_fpflags, _float32_rnd
        ; line_number = 1328
        ;info   1328, 2581
        btfss   _float32_aargb5, _float32_lsb
        ; line_number = 1329
        ;info   1329, 2582
        goto    _float32_div32ok
        ; line_number = 1330
        ;info   1330, 2583
        bcf     _float32_status, _float32_c
        ; # compute next significant bit
        ; line_number = 1332
        ;info   1332, 2584
        rlf     _float32_aargb2,f
        ; # for rounding
        ; line_number = 1334
        ;info   1334, 2585
        rlf     _float32_aargb1,f
        ; line_number = 1335
        ;info   1335, 2586
        rlf     _float32_aargb0,f
        ; line_number = 1336
        ;info   1336, 2587
        rlf     _float32_temp,f

        ; # subtract
        ; line_number = 1339
        ;info   1339, 2588
        movf    _float32_bargb2,w
        ; line_number = 1340
        ;info   1340, 2589
        subwf   _float32_aargb2,f
        ; line_number = 1341
        ;info   1341, 2590
        movf    _float32_bargb1,w
        ; line_number = 1342
        ;info   1342, 2591
        btfss   _float32_status, _float32_c
        ; line_number = 1343
        ;info   1343, 2592
        incfsz  _float32_bargb1,w
        ; line_number = 1344
        ;info   1344, 2593
        subwf   _float32_aargb1,f

        ; line_number = 1346
        ;info   1346, 2594
        movf    _float32_bargb0,w
        ; line_number = 1347
        ;info   1347, 2595
        btfss   _float32_status, _float32_c
        ; line_number = 1348
        ;info   1348, 2596
        incfsz  _float32_bargb0,w
        ; line_number = 1349
        ;info   1349, 2597
        subwf   _float32_aargb0,f

        ; line_number = 1351
        ;info   1351, 2598
        rlf     _float32_bargb0,w
        ; line_number = 1352
        ;info   1352, 2599
        iorwf   _float32_temp,w
        ; line_number = 1353
        ;info   1353, 2600
        andlw   1

        ; line_number = 1355
        ;info   1355, 2601
        addwf   _float32_aargb5,f
        ; line_number = 1356
        ;info   1356, 2602
        btfsc   _float32_status, _float32_c
        ; line_number = 1357
        ;info   1357, 2603
        incf    _float32_aargb4,f
        ; line_number = 1358
        ;info   1358, 2604
        btfsc   _float32_status, _float32_z
        ; line_number = 1359
        ;info   1359, 2605
        incf    _float32_aargb3,f

        ; # test if rounding caused carryout
        ; line_number = 1362
        ;info   1362, 2606
        btfss   _float32_status, _float32_z
        ; line_number = 1363
        ;info   1363, 2607
        goto    _float32_div32ok
        ; line_number = 1364
        ;info   1364, 2608
        rrf     _float32_aargb3,f
        ; line_number = 1365
        ;info   1365, 2609
        rrf     _float32_aargb4,f
        ; line_number = 1366
        ;info   1366, 2610
        rrf     _float32_aargb5,f
        ; line_number = 1367
        ;info   1367, 2611
        incf    _float32_exp,f
        ; # test for overflow#
        ; line_number = 1369
        ;info   1369, 2612
        btfsc   _float32_status, _float32_z
        ; line_number = 1370
        ;info   1370, 2613
        goto    _float32_setfov32

        ; line_number = 1372
_float32_div32ok:
        ; line_number = 1373
        ;info   1373, 2614
        btfss   _float32_sign, _float32_msb
        ; # clear explicit MSB if positive
        ; line_number = 1375
        ;info   1375, 2615
        bcf     _float32_aargb3, _float32_msb

        ; line_number = 1377
        ;info   1377, 2616
        movf    _float32_aargb3,w
        ; # move result to _FLOAT32_AARG
        ; line_number = 1379
        ;info   1379, 2617
        movwf   _float32_aargb0
        ; line_number = 1380
        ;info   1380, 2618
        movf    _float32_aargb4,w
        ; line_number = 1381
        ;info   1381, 2619
        movwf   _float32_aargb1
        ; line_number = 1382
        ;info   1382, 2620
        movf    _float32_aargb5,w
        ; line_number = 1383
        ;info   1383, 2621
        movwf   _float32_aargb2

        ; line_number = 1385
        ;info   1385, 2622
        retlw   0

        ; line_number = 1387
_float32_setfun32:
        ; # set floating point underflag
        ; line_number = 1389
        ;info   1389, 2623
        bsf     _float32_fpflags, _float32_fun
        ; # test for saturation
        ; line_number = 1391
        ;info   1391, 2624
        btfss   _float32_fpflags, _float32_sat
        ; # return error code in WREG
        ; line_number = 1393
        ;info   1393, 2625
        retlw   255

        ; # saturate to smallest floating
        ; line_number = 1396
        ;info   1396, 2626
        movlw   1
        ; # point number = 0x 01 00 00 00
        ; line_number = 1398
        ;info   1398, 2627
        movwf   _float32_aexp
        ; # modulo the appropriate sign bit
        ; line_number = 1400
        ;info   1400, 2628
        clrf    _float32_aargb0
        ; line_number = 1401
        ;info   1401, 2629
        clrf    _float32_aargb1
        ; line_number = 1402
        ;info   1402, 2630
        clrf    _float32_aargb2
        ; line_number = 1403
        ;info   1403, 2631
        rlf     _float32_sign,f
        ; line_number = 1404
        ;info   1404, 2632
        rrf     _float32_aargb0,f
        ; # return error code in WREG
        ; line_number = 1406
        ;info   1406, 2633
        retlw   255

        ; # set divide by zero flag
        ; line_number = 1409
_float32_setfdz32:
        ; line_number = 1410
        ;info   1410, 2634
        bsf     _float32_fpflags, _float32_fdz
        ; line_number = 1411
        ;info   1411, 2635
        retlw   255


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 1414
        ;info   1414, 2636
        ; procedure _float32_subtract
_float32_subtract:
        ; arguments_none
        ; line_number = 1416
        ;  returns_nothing
        ; line_number = 1417
        ;  return_suppress

        ; # Floating Point Subtract
        ; # Input:  32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; #         32 bit floating point number in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
        ; # Use: call fps32()
        ; # Output: 32 bit floating point sum in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG - _FLOAT32_BARG
        ; # Max Timing:	2+251 = 253 clks	RND = 0
        ; #			2+265 = 267 clks	RND = 1, SAT = 0
        ; #			2+271 = 273 clks	RND = 1, SAT = 1
        ; # Min Timing:	2+12 = 14 clks
        ; # PM: 2+146 = 148	DM: 14

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 1431
        ;  assemble
        ;info   1431, 2636
        ; line_number = 1432
        ;info   1432, 2636
        movlw   128
        ; line_number = 1433
        ;info   1433, 2637
        xorwf   _float32_bargb0,f
        ; # This procedure runs into FPA32
        ; #goto fpa32


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 1438
        ;info   1438, 2638
        ; procedure _float32_add
_float32_add:
        ; arguments_none
        ; line_number = 1440
        ;  returns_nothing
        ; line_number = 1441
        ;  return_suppress

        ; # Floating Point Add
        ; # Input: 32 bit floating point number in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; #        32 bit floating point number in _float32_bexp, _float32_bargb0, _float32_bargb1, _float32_bargb2
        ; # Use: call fpa32()
        ; # Output: 32 bit floating point sum in _float32_aexp, _float32_aargb0, _float32_aargb1, _float32_aargb2
        ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG - _FLOAT32_BARG
        ; # Max Timing:	31+41+6*7+6+41+90 = 251 clks	RND = 0
        ; #			31+41+6*7+6+55+90 = 265 clks	RND = 1, SAT = 0
        ; #			31+41+6*7+6+55+96 = 271 clks	RND = 1, SAT = 1
        ; # Min Timing:	8+4 = 12 clks
        ; # PM: 146		DM: 14

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 1455
        ;  assemble
        ;info   1455, 2638
        ; # exclusive or of signs in temp
        ; line_number = 1457
        ;info   1457, 2638
        movf    _float32_aargb0,w
        ; line_number = 1458
        ;info   1458, 2639
        xorwf   _float32_bargb0,w
        ; line_number = 1459
        ;info   1459, 2640
        movwf   _float32_temp

        ; # clear extended byte
        ; line_number = 1462
        ;info   1462, 2641
        clrf    _float32_aargb3
        ; line_number = 1463
        ;info   1463, 2642
        clrf    _float32_bargb3

        ; # use _FLOAT32_AARG if _float32_aexp >= _float32_bexp
        ; line_number = 1466
        ;info   1466, 2643
        movf    _float32_aexp,w
        ; line_number = 1467
        ;info   1467, 2644
        subwf   _float32_bexp,w
        ; line_number = 1468
        ;info   1468, 2645
        btfss   _float32_status, _float32_c
        ; line_number = 1469
        ;info   1469, 2646
        goto    _float32_usea32

        ; # use _FLOAT32_BARG if _float32_aexp < _float32_bexp
        ; line_number = 1472
        ;info   1472, 2647
        movf    _float32_bexp,w
        ; # therefore, swap _FLOAT32_AARG and _FLOAT32_BARG
        ; line_number = 1474
        ;info   1474, 2648
        movwf   _float32_aargb5
        ; line_number = 1475
        ;info   1475, 2649
        movf    _float32_aexp,w
        ; line_number = 1476
        ;info   1476, 2650
        movwf   _float32_bexp
        ; line_number = 1477
        ;info   1477, 2651
        movf    _float32_aargb5,w
        ; line_number = 1478
        ;info   1478, 2652
        movwf   _float32_aexp

        ; line_number = 1480
        ;info   1480, 2653
        movf    _float32_bargb0,w
        ; line_number = 1481
        ;info   1481, 2654
        movwf   _float32_aargb5
        ; line_number = 1482
        ;info   1482, 2655
        movf    _float32_aargb0,w
        ; line_number = 1483
        ;info   1483, 2656
        movwf   _float32_bargb0
        ; line_number = 1484
        ;info   1484, 2657
        movf    _float32_aargb5,w
        ; line_number = 1485
        ;info   1485, 2658
        movwf   _float32_aargb0

        ; line_number = 1487
        ;info   1487, 2659
        movf    _float32_bargb1,w
        ; line_number = 1488
        ;info   1488, 2660
        movwf   _float32_aargb5
        ; line_number = 1489
        ;info   1489, 2661
        movf    _float32_aargb1,w
        ; line_number = 1490
        ;info   1490, 2662
        movwf   _float32_bargb1
        ; line_number = 1491
        ;info   1491, 2663
        movf    _float32_aargb5,w
        ; line_number = 1492
        ;info   1492, 2664
        movwf   _float32_aargb1

        ; line_number = 1494
        ;info   1494, 2665
        movf    _float32_bargb2,w
        ; line_number = 1495
        ;info   1495, 2666
        movwf   _float32_aargb5
        ; line_number = 1496
        ;info   1496, 2667
        movf    _float32_aargb2,w
        ; line_number = 1497
        ;info   1497, 2668
        movwf   _float32_bargb2
        ; line_number = 1498
        ;info   1498, 2669
        movf    _float32_aargb5,w
        ; line_number = 1499
        ;info   1499, 2670
        movwf   _float32_aargb2

        ; line_number = 1501
_float32_usea32:
        ; # return _FLOAT32_AARG if _FLOAT32_BARG = 0
        ; line_number = 1503
        ;info   1503, 2671
        movf    _float32_bexp,w
        ; line_number = 1504
        ;info   1504, 2672
        btfsc   _float32_status, _float32_z
        ; line_number = 1505
        ;info   1505, 2673
        retlw   0

        ; line_number = 1507
        ;info   1507, 2674
        movf    _float32_aargb0,w
        ; # save sign in _float32_sign
        ; line_number = 1509
        ;info   1509, 2675
        movwf   _float32_sign
        ; # make MSB's explicit
        ; line_number = 1511
        ;info   1511, 2676
        bsf     _float32_aargb0, _float32_msb
        ; line_number = 1512
        ;info   1512, 2677
        bsf     _float32_bargb0, _float32_msb

        ; # compute shift count in _float32_bexp
        ; line_number = 1515
        ;info   1515, 2678
        movf    _float32_bexp,w
        ; line_number = 1516
        ;info   1516, 2679
        subwf   _float32_aexp,w
        ; line_number = 1517
        ;info   1517, 2680
        movwf   _float32_bexp
        ; line_number = 1518
        ;info   1518, 2681
        btfsc   _float32_status, _float32_z
        ; line_number = 1519
        ;info   1519, 2682
        goto    _float32_aligned32

        ; line_number = 1521
        ;info   1521, 2683
        movlw   8
        ; line_number = 1522
        ;info   1522, 2684
        subwf   _float32_bexp,w
        ; # if _float32_bexp >= 8, do byte shift
        ; line_number = 1524
        ;info   1524, 2685
        btfss   _float32_status, _float32_c
        ; line_number = 1525
        ;info   1525, 2686
        goto    _float32_alignb32
        ; line_number = 1526
        ;info   1526, 2687
        movwf   _float32_bexp
        ; # keep for postnormalization
        ; line_number = 1528
        ;info   1528, 2688
        movf    _float32_bargb2,w
        ; line_number = 1529
        ;info   1529, 2689
        movwf   _float32_bargb3
        ; line_number = 1530
        ;info   1530, 2690
        movf    _float32_bargb1,w
        ; line_number = 1531
        ;info   1531, 2691
        movwf   _float32_bargb2
        ; line_number = 1532
        ;info   1532, 2692
        movf    _float32_bargb0,w
        ; line_number = 1533
        ;info   1533, 2693
        movwf   _float32_bargb1
        ; line_number = 1534
        ;info   1534, 2694
        clrf    _float32_bargb0

        ; line_number = 1536
        ;info   1536, 2695
        movlw   8
        ; line_number = 1537
        ;info   1537, 2696
        subwf   _float32_bexp,w
        ; # if _float32_bexp >= 8, do byte shift
        ; line_number = 1539
        ;info   1539, 2697
        btfss   _float32_status, _float32_c
        ; line_number = 1540
        ;info   1540, 2698
        goto    _float32_alignb32
        ; line_number = 1541
        ;info   1541, 2699
        movwf   _float32_bexp
        ; # keep for postnormalization
        ; line_number = 1543
        ;info   1543, 2700
        movf    _float32_bargb2,w
        ; line_number = 1544
        ;info   1544, 2701
        movwf   _float32_bargb3
        ; line_number = 1545
        ;info   1545, 2702
        movf    _float32_bargb1,w
        ; line_number = 1546
        ;info   1546, 2703
        movwf   _float32_bargb2
        ; line_number = 1547
        ;info   1547, 2704
        clrf    _float32_bargb1

        ; line_number = 1549
        ;info   1549, 2705
        movlw   8
        ; line_number = 1550
        ;info   1550, 2706
        subwf   _float32_bexp,w
        ; # if _float32_bexp >= 8, _FLOAT32_BARG = 0 relative to _FLOAT32_AARG
        ; line_number = 1552
        ;info   1552, 2707
        btfss   _float32_status, _float32_c
        ; line_number = 1553
        ;info   1553, 2708
        goto    _float32_alignb32
        ; line_number = 1554
        ;info   1554, 2709
        movf    _float32_sign,w
        ; line_number = 1555
        ;info   1555, 2710
        movwf   _float32_aargb0
        ; line_number = 1556
        ;info   1556, 2711
        retlw   0

        ; line_number = 1558
_float32_alignb32:
        ; # already aligned if _float32_bexp = 0
        ; line_number = 1560
        ;info   1560, 2712
        movf    _float32_bexp,w
        ; line_number = 1561
        ;info   1561, 2713
        btfsc   _float32_status, _float32_z
        ; line_number = 1562
        ;info   1562, 2714
        goto    _float32_aligned32

        ; line_number = 1564
_float32_aloopb32:
        ; # right shift by _float32_bexp
        ; line_number = 1566
        ;info   1566, 2715
        bcf     _float32_status, _float32_c
        ; line_number = 1567
        ;info   1567, 2716
        rrf     _float32_bargb0,f
        ; line_number = 1568
        ;info   1568, 2717
        rrf     _float32_bargb1,f
        ; line_number = 1569
        ;info   1569, 2718
        rrf     _float32_bargb2,f
        ; line_number = 1570
        ;info   1570, 2719
        rrf     _float32_bargb3,f
        ; line_number = 1571
        ;info   1571, 2720
        decfsz  _float32_bexp,f
        ; line_number = 1572
        ;info   1572, 2721
        goto    _float32_aloopb32

        ; line_number = 1574
_float32_aligned32:
        ; # negate if signs opposite
        ; line_number = 1576
        ;info   1576, 2722
        btfss   _float32_temp, _float32_msb
        ; line_number = 1577
        ;info   1577, 2723
        goto    _float32_aok32

        ; line_number = 1579
        ;info   1579, 2724
        comf    _float32_bargb3,f
        ; line_number = 1580
        ;info   1580, 2725
        comf    _float32_bargb2,f
        ; line_number = 1581
        ;info   1581, 2726
        comf    _float32_bargb1,f
        ; line_number = 1582
        ;info   1582, 2727
        comf    _float32_bargb0,f
        ; line_number = 1583
        ;info   1583, 2728
        incf    _float32_bargb3,f
        ; line_number = 1584
        ;info   1584, 2729
        btfsc   _float32_status, _float32_z
        ; line_number = 1585
        ;info   1585, 2730
        incf    _float32_bargb2,f
        ; line_number = 1586
        ;info   1586, 2731
        btfsc   _float32_status, _float32_z
        ; line_number = 1587
        ;info   1587, 2732
        incf    _float32_bargb1,f
        ; line_number = 1588
        ;info   1588, 2733
        btfsc   _float32_status, _float32_z
        ; line_number = 1589
        ;info   1589, 2734
        incf    _float32_bargb0,f

        ; line_number = 1591
_float32_aok32:
        ; line_number = 1592
        ;info   1592, 2735
        movf    _float32_bargb3,w
        ; line_number = 1593
        ;info   1593, 2736
        addwf   _float32_aargb3,f
        ; line_number = 1594
        ;info   1594, 2737
        movf    _float32_bargb2,w
        ; line_number = 1595
        ;info   1595, 2738
        btfsc   _float32_status, _float32_c
        ; line_number = 1596
        ;info   1596, 2739
        incfsz  _float32_bargb2,w
        ; line_number = 1597
        ;info   1597, 2740
        addwf   _float32_aargb2,f
        ; line_number = 1598
        ;info   1598, 2741
        movf    _float32_bargb1,w
        ; line_number = 1599
        ;info   1599, 2742
        btfsc   _float32_status, _float32_c
        ; line_number = 1600
        ;info   1600, 2743
        incfsz  _float32_bargb1,w
        ; line_number = 1601
        ;info   1601, 2744
        addwf   _float32_aargb1,f
        ; line_number = 1602
        ;info   1602, 2745
        movf    _float32_bargb0,w
        ; line_number = 1603
        ;info   1603, 2746
        btfsc   _float32_status, _float32_c
        ; line_number = 1604
        ;info   1604, 2747
        incfsz  _float32_bargb0,w
        ; line_number = 1605
        ;info   1605, 2748
        addwf   _float32_aargb0,f

        ; line_number = 1607
        ;info   1607, 2749
        btfsc   _float32_temp, _float32_msb
        ; line_number = 1608
        ;info   1608, 2750
        goto    _float32_acomp32
        ; line_number = 1609
        ;info   1609, 2751
        btfss   _float32_status, _float32_c
        ; line_number = 1610
        ;info   1610, 2752
        goto    _float32_nrmrnd4032

        ; # shift right and increment exp
        ; line_number = 1613
        ;info   1613, 2753
        rrf     _float32_aargb0,f
        ; line_number = 1614
        ;info   1614, 2754
        rrf     _float32_aargb1,f
        ; line_number = 1615
        ;info   1615, 2755
        rrf     _float32_aargb2,f
        ; line_number = 1616
        ;info   1616, 2756
        rrf     _float32_aargb3,f
        ; line_number = 1617
        ;info   1617, 2757
        incfsz  _float32_aexp,f
        ; line_number = 1618
        ;info   1618, 2758
        goto    _float32_nrmrnd4032
        ; line_number = 1619
        ;info   1619, 2759
        goto    _float32_setfov32

        ; line_number = 1621
_float32_acomp32:
        ; line_number = 1622
        ;info   1622, 2760
        btfsc   _float32_status, _float32_c
        ; # normalize and fix sign
        ; line_number = 1624
        ;info   1624, 2761
        goto    _float32_normalize40

        ; line_number = 1626
        ;info   1626, 2762
        comf    _float32_aargb3,f
        ; # negate, toggle sign bit and
        ; line_number = 1628
        ;info   1628, 2763
        comf    _float32_aargb2,f
        ; # then normalize
        ; line_number = 1630
        ;info   1630, 2764
        comf    _float32_aargb1,f
        ; line_number = 1631
        ;info   1631, 2765
        comf    _float32_aargb0,f
        ; line_number = 1632
        ;info   1632, 2766
        incf    _float32_aargb3,f
        ; line_number = 1633
        ;info   1633, 2767
        btfsc   _float32_status, _float32_z
        ; line_number = 1634
        ;info   1634, 2768
        incf    _float32_aargb2,f
        ; line_number = 1635
        ;info   1635, 2769
        btfsc   _float32_status, _float32_z
        ; line_number = 1636
        ;info   1636, 2770
        incf    _float32_aargb1,f
        ; line_number = 1637
        ;info   1637, 2771
        btfsc   _float32_status, _float32_z
        ; line_number = 1638
        ;info   1638, 2772
        incf    _float32_aargb0,f

        ; line_number = 1640
        ;info   1640, 2773
        movlw   128
        ; line_number = 1641
        ;info   1641, 2774
        xorwf   _float32_sign,f
        ; line_number = 1642
        ;info   1642, 2775
        goto    _float32_nrm32


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; buffer = '_float32'
        ; line_number = 50
        ;info   50, 2776
        ; procedure _float32_pointer_load
_float32_pointer_load:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_load__pointer
        ; delay=4294967295
        ; line_number = 51
        ; argument pointer byte
_float32_pointer_load__pointer equ globals___1+36
        ; line_number = 52
        ;  returns_nothing

        ; # This procedure will load the float32 "A" register with {pointer}.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 56
        ;  assemble
        ;info   56, 2777
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 58
        ;info   58, 2777
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 60
        ;info   60, 2778
        bcf     _irp___byte, _irp___bit
        ; line_number = 61
        ;info   61, 2779
        rlf     _fsr,f
        ; line_number = 62
        ;info   62, 2780
        btfsc   _c___byte, _c___bit
        ; line_number = 63
        ;info   63, 2781
        bsf     _irp___byte, _irp___bit
        ; line_number = 64
        ;info   64, 2782
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_aexp},...,{_float32_aargb2}
        ; line_number = 66
        ;info   66, 2783
        movf    _indf,w
        ; line_number = 67
        ;info   67, 2784
        movwf   _float32_aexp
        ; line_number = 68
        ;info   68, 2785
        incf    _fsr,f
        ; line_number = 69
        ;info   69, 2786
        movf    _indf,w
        ; line_number = 70
        ;info   70, 2787
        movwf   _float32_aargb0
        ; line_number = 71
        ;info   71, 2788
        incf    _fsr,f
        ; line_number = 72
        ;info   72, 2789
        movf    _indf,w
        ; line_number = 73
        ;info   73, 2790
        movwf   _float32_aargb1
        ; line_number = 74
        ;info   74, 2791
        incf    _fsr,f
        ; line_number = 75
        ;info   75, 2792
        movf    _indf,w
        ; line_number = 76
        ;info   76, 2793
        movwf   _float32_aargb2


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 79
        ;info   79, 2795
        ; procedure _float32_pointer_add
_float32_pointer_add:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_add__pointer
        ; delay=4294967295
        ; line_number = 80
        ; argument pointer byte
_float32_pointer_add__pointer equ globals___1+37
        ; line_number = 81
        ;  returns_nothing
        ; line_number = 82
        ;  return_suppress

        ; # This procedure will add the float32 "A" register with {pointer}
        ; # and store the result back into the "A" register.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 87
        ;  assemble
        ;info   87, 2796
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 89
        ;info   89, 2796
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 91
        ;info   91, 2797
        bcf     _irp___byte, _irp___bit
        ; line_number = 92
        ;info   92, 2798
        rlf     _fsr,f
        ; line_number = 93
        ;info   93, 2799
        btfsc   _c___byte, _c___bit
        ; line_number = 94
        ;info   94, 2800
        bsf     _irp___byte, _irp___bit
        ; line_number = 95
        ;info   95, 2801
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
        ; line_number = 97
        ;info   97, 2802
        movf    _indf,w
        ; line_number = 98
        ;info   98, 2803
        movwf   _float32_bexp
        ; line_number = 99
        ;info   99, 2804
        incf    _fsr,f
        ; line_number = 100
        ;info   100, 2805
        movf    _indf,w
        ; line_number = 101
        ;info   101, 2806
        movwf   _float32_bargb0
        ; line_number = 102
        ;info   102, 2807
        incf    _fsr,f
        ; line_number = 103
        ;info   103, 2808
        movf    _indf,w
        ; line_number = 104
        ;info   104, 2809
        movwf   _float32_bargb1
        ; line_number = 105
        ;info   105, 2810
        incf    _fsr,f
        ; line_number = 106
        ;info   106, 2811
        movf    _indf,w
        ; line_number = 107
        ;info   107, 2812
        movwf   _float32_bargb2
        ; line_number = 108
        ;info   108, 2813
        goto    _float32_add


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 111
        ;info   111, 2814
        ; procedure _float32_pointer_divide
_float32_pointer_divide:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_divide__pointer
        ; delay=4294967295
        ; line_number = 112
        ; argument pointer byte
_float32_pointer_divide__pointer equ globals___1+38
        ; line_number = 113
        ;  returns_nothing
        ; line_number = 114
        ;  return_suppress

        ; # This procedure will divide the float32 A register by {pointer} and
        ; # store the result back into the A "register".

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 119
        ;  assemble
        ;info   119, 2815
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 121
        ;info   121, 2815
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 123
        ;info   123, 2816
        bcf     _irp___byte, _irp___bit
        ; line_number = 124
        ;info   124, 2817
        rlf     _fsr,f
        ; line_number = 125
        ;info   125, 2818
        btfsc   _c___byte, _c___bit
        ; line_number = 126
        ;info   126, 2819
        bsf     _irp___byte, _irp___bit
        ; line_number = 127
        ;info   127, 2820
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
        ; line_number = 129
        ;info   129, 2821
        movf    _indf,w
        ; line_number = 130
        ;info   130, 2822
        movwf   _float32_bexp
        ; line_number = 131
        ;info   131, 2823
        incf    _fsr,f
        ; line_number = 132
        ;info   132, 2824
        movf    _indf,w
        ; line_number = 133
        ;info   133, 2825
        movwf   _float32_bargb0
        ; line_number = 134
        ;info   134, 2826
        incf    _fsr,f
        ; line_number = 135
        ;info   135, 2827
        movf    _indf,w
        ; line_number = 136
        ;info   136, 2828
        movwf   _float32_bargb1
        ; line_number = 137
        ;info   137, 2829
        incf    _fsr,f
        ; line_number = 138
        ;info   138, 2830
        movf    _indf,w
        ; line_number = 139
        ;info   139, 2831
        movwf   _float32_bargb2
        ; line_number = 140
        ;info   140, 2832
        goto    _float32_divide


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 143
        ;info   143, 2833
        ; procedure _float32_pointer_multiply
_float32_pointer_multiply:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_multiply__pointer
        ; delay=4294967295
        ; line_number = 144
        ; argument pointer byte
_float32_pointer_multiply__pointer equ globals___1+39
        ; line_number = 145
        ;  returns_nothing
        ; line_number = 146
        ;  return_suppress

        ; # This procedure will multiply {pointer} with the float32 A "register"
        ; # and store the result back into the A "register".

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 151
        ;  assemble
        ;info   151, 2834
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 153
        ;info   153, 2834
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 155
        ;info   155, 2835
        bcf     _irp___byte, _irp___bit
        ; line_number = 156
        ;info   156, 2836
        rlf     _fsr,f
        ; line_number = 157
        ;info   157, 2837
        btfsc   _c___byte, _c___bit
        ; line_number = 158
        ;info   158, 2838
        bsf     _irp___byte, _irp___bit
        ; line_number = 159
        ;info   159, 2839
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
        ; line_number = 161
        ;info   161, 2840
        movf    _indf,w
        ; line_number = 162
        ;info   162, 2841
        movwf   _float32_bexp
        ; line_number = 163
        ;info   163, 2842
        incf    _fsr,f
        ; line_number = 164
        ;info   164, 2843
        movf    _indf,w
        ; line_number = 165
        ;info   165, 2844
        movwf   _float32_bargb0
        ; line_number = 166
        ;info   166, 2845
        incf    _fsr,f
        ; line_number = 167
        ;info   167, 2846
        movf    _indf,w
        ; line_number = 168
        ;info   168, 2847
        movwf   _float32_bargb1
        ; line_number = 169
        ;info   169, 2848
        incf    _fsr,f
        ; line_number = 170
        ;info   170, 2849
        movf    _indf,w
        ; line_number = 171
        ;info   171, 2850
        movwf   _float32_bargb2
        ; line_number = 172
        ;info   172, 2851
        goto    _float32_multiply


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 175
        ;info   175, 2852
        ; procedure _float32_pointer_subtract
_float32_pointer_subtract:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_subtract__pointer
        ; delay=4294967295
        ; line_number = 176
        ; argument pointer byte
_float32_pointer_subtract__pointer equ globals___1+40
        ; line_number = 177
        ;  returns_nothing
        ; line_number = 178
        ;  return_suppress

        ; # This procedure will subtract {pointer} from the float32 A "register"
        ; # and store the result back into the A "register".

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 183
        ;  assemble
        ;info   183, 2853
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 185
        ;info   185, 2853
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 187
        ;info   187, 2854
        bcf     _irp___byte, _irp___bit
        ; line_number = 188
        ;info   188, 2855
        rlf     _fsr,f
        ; line_number = 189
        ;info   189, 2856
        btfsc   _c___byte, _c___bit
        ; line_number = 190
        ;info   190, 2857
        bsf     _irp___byte, _irp___bit
        ; line_number = 191
        ;info   191, 2858
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_bexp},...,{_float32_bargb2}
        ; line_number = 193
        ;info   193, 2859
        movf    _indf,w
        ; line_number = 194
        ;info   194, 2860
        movwf   _float32_bexp
        ; line_number = 195
        ;info   195, 2861
        incf    _fsr,f
        ; line_number = 196
        ;info   196, 2862
        movf    _indf,w
        ; line_number = 197
        ;info   197, 2863
        movwf   _float32_bargb0
        ; line_number = 198
        ;info   198, 2864
        incf    _fsr,f
        ; line_number = 199
        ;info   199, 2865
        movf    _indf,w
        ; line_number = 200
        ;info   200, 2866
        movwf   _float32_bargb1
        ; line_number = 201
        ;info   201, 2867
        incf    _fsr,f
        ; line_number = 202
        ;info   202, 2868
        movf    _indf,w
        ; line_number = 203
        ;info   203, 2869
        movwf   _float32_bargb2
        ; line_number = 204
        ;info   204, 2870
        goto    _float32_subtract


        ; delay after procedure statements=non-uniform
        ; Return instruction suppressed by 'return_suppress'




        ; line_number = 207
        ;info   207, 2871
        ; procedure _float32_pointer_store
_float32_pointer_store:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_store__pointer
        ; delay=4294967295
        ; line_number = 208
        ; argument pointer byte
_float32_pointer_store__pointer equ globals___1+41
        ; line_number = 209
        ;  returns_nothing

        ; # This procedure will store the float32 A "register" into {pointer}.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 213
        ;  assemble
        ;info   213, 2872
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 215
        ;info   215, 2872
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 217
        ;info   217, 2873
        bcf     _irp___byte, _irp___bit
        ; line_number = 218
        ;info   218, 2874
        rlf     _fsr,f
        ; line_number = 219
        ;info   219, 2875
        btfsc   _c___byte, _c___bit
        ; line_number = 220
        ;info   220, 2876
        bsf     _irp___byte, _irp___bit
        ; line_number = 221
        ;info   221, 2877
        bcf     _fsr, 0
        ; # Grab the value and store into {_float32_aexp},...,{_float32_aargb2}
        ; line_number = 223
        ;info   223, 2878
        movf    _float32_aexp,w
        ; line_number = 224
        ;info   224, 2879
        movwf   _indf
        ; line_number = 225
        ;info   225, 2880
        incf    _fsr,f
        ; line_number = 226
        ;info   226, 2881
        movf    _float32_aargb0,w
        ; line_number = 227
        ;info   227, 2882
        movwf   _indf
        ; line_number = 228
        ;info   228, 2883
        incf    _fsr,f
        ; line_number = 229
        ;info   229, 2884
        movf    _float32_aargb1,w
        ; line_number = 230
        ;info   230, 2885
        movwf   _indf
        ; line_number = 231
        ;info   231, 2886
        incf    _fsr,f
        ; line_number = 232
        ;info   232, 2887
        movf    _float32_aargb2,w
        ; line_number = 233
        ;info   233, 2888
        movwf   _indf


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 236
        ;info   236, 2890
        ; procedure _float32_negate
_float32_negate:
        ; arguments_none
        ; line_number = 238
        ;  returns_nothing

        ; # This procedure will negate the float32 A registers.

        ; # Flip the sign bit:
        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 243
        ;  assemble
        ;info   243, 2890
        ; line_number = 244
        ;info   244, 2890
        movlw   128
        ; line_number = 245
        ;info   245, 2891
        xorwf   _float32_aargb0,f


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 248
        ;info   248, 2893
        ; procedure _float32_reciprocal
_float32_reciprocal:
        ; arguments_none
        ; line_number = 250
        ;  returns_nothing

        ; # This procedure will compute the reciprocal of the float32 A "register"
        ; # an store the result back into the float32 A "register".

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 255
        ;  assemble
        ;info   255, 2893
        ; # Move A register to B register:
        ; line_number = 257
        ;info   257, 2893
        movf    _float32_aexp,w
        ; line_number = 258
        ;info   258, 2894
        movwf   _float32_bexp
        ; line_number = 259
        ;info   259, 2895
        movf    _float32_aargb0,w
        ; line_number = 260
        ;info   260, 2896
        movwf   _float32_bargb0
        ; line_number = 261
        ;info   261, 2897
        movf    _float32_aargb1,w
        ; line_number = 262
        ;info   262, 2898
        movwf   _float32_bargb1
        ; line_number = 263
        ;info   263, 2899
        movf    _float32_aargb2,w
        ; line_number = 264
        ;info   264, 2900
        movwf   _float32_bargb2

        ; # Now store 1 into A:
        ; line_number = 267
        ;info   267, 2901
        movlw   127
        ; line_number = 268
        ;info   268, 2902
        movwf   _float32_aexp
        ; line_number = 269
        ;info   269, 2903
        clrf    _float32_aargb0
        ; line_number = 270
        ;info   270, 2904
        clrf    _float32_aargb1
        ; line_number = 271
        ;info   271, 2905
        clrf    _float32_aargb2

        ; # Now perform the division:
        ; line_number = 274
        ;info   274, 2906
        goto    _float32_divide


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 277
        ;info   277, 2908
        ; procedure _float32_pointer_swap
_float32_pointer_swap:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_pointer_swap__pointer
        ; delay=4294967295
        ; line_number = 278
        ; argument pointer byte
_float32_pointer_swap__pointer equ globals___1+42
        ; line_number = 279
        ;  returns_nothing

        ; # This procedure will swap the float32 A "register" with {pointer}:

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 283
        ;  assemble
        ;info   283, 2909
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 285
        ;info   285, 2909
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 287
        ;info   287, 2910
        bcf     _irp___byte, _irp___bit
        ; line_number = 288
        ;info   288, 2911
        rlf     _fsr,f
        ; line_number = 289
        ;info   289, 2912
        btfsc   _c___byte, _c___bit
        ; line_number = 290
        ;info   290, 2913
        bsf     _irp___byte, _irp___bit
        ; line_number = 291
        ;info   291, 2914
        bcf     _fsr, 0

        ; # Swap {pointer} with {_float32_aexp}:
        ; line_number = 294
        ;info   294, 2915
        movf    _indf,w
        ; line_number = 295
        ;info   295, 2916
        xorwf   _float32_aexp,f
        ; line_number = 296
        ;info   296, 2917
        xorwf   _float32_aexp,w
        ; line_number = 297
        ;info   297, 2918
        xorwf   _float32_aexp,f
        ; line_number = 298
        ;info   298, 2919
        movwf   _indf

        ; # Swap {pointer}+1 with {_float32_aargb0}:
        ; line_number = 301
        ;info   301, 2920
        incf    _fsr,f
        ; line_number = 302
        ;info   302, 2921
        movf    _indf,w
        ; line_number = 303
        ;info   303, 2922
        xorwf   _float32_aargb0,f
        ; line_number = 304
        ;info   304, 2923
        xorwf   _float32_aargb0,w
        ; line_number = 305
        ;info   305, 2924
        xorwf   _float32_aargb0,f
        ; line_number = 306
        ;info   306, 2925
        movwf   _indf

        ; # Swap {pointer}+2 with {_float32_aargb1}:
        ; line_number = 309
        ;info   309, 2926
        incf    _fsr,f
        ; line_number = 310
        ;info   310, 2927
        movf    _indf,w
        ; line_number = 311
        ;info   311, 2928
        xorwf   _float32_aargb1,f
        ; line_number = 312
        ;info   312, 2929
        xorwf   _float32_aargb1,w
        ; line_number = 313
        ;info   313, 2930
        xorwf   _float32_aargb1,f
        ; line_number = 314
        ;info   314, 2931
        movwf   _indf

        ; # Swap {pointer}+3 with {_float32_aargb2}:
        ; line_number = 317
        ;info   317, 2932
        incf    _fsr,f
        ; line_number = 318
        ;info   318, 2933
        movf    _indf,w
        ; line_number = 319
        ;info   319, 2934
        xorwf   _float32_aargb2,f
        ; line_number = 320
        ;info   320, 2935
        xorwf   _float32_aargb2,w
        ; line_number = 321
        ;info   321, 2936
        xorwf   _float32_aargb2,f
        ; line_number = 322
        ;info   322, 2937
        movwf   _indf


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




_float32_from_byte__0return equ globals___1+44
        ; line_number = 325
        ;info   325, 2939
        ; procedure _float32_from_byte
_float32_from_byte:
        ; Last argument is sitting in W; save into argument variable
        movwf   _float32_from_byte__number
        ; delay=4294967295
        ; line_number = 326
        ; argument number byte
_float32_from_byte__number equ globals___1+43
        ; line_number = 327
        ;  returns float32

        ; # This procedure will convert {number} into a float32 and return it.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 331
        ;  _float32_aargb0 := 0
        ;info   331, 2940
        clrf    _float32_aargb0
        ; line_number = 332
        ;  _float32_aargb1 := 0
        ;info   332, 2941
        clrf    _float32_aargb1
        ; line_number = 333
        ;  _float32_aargb2 := number
        ;info   333, 2942
        movf    _float32_from_byte__number,w
        movwf   _float32_aargb2
        ; line_number = 334
        ;  assemble
        ;info   334, 2944
        ; line_number = 335
        ;info   335, 2944
        call    _float32_from_integer24
        ; line_number = 336
        ;info   336, 2945
        movlw   _float32_from_byte__0return>>1
        ; line_number = 337
        ;info   337, 2946
        call    _float32_pointer_store
        ; line_number = 338
        ;info   338, 2947
        retlw   0


        ; delay after procedure statements=non-uniform
        ; Exiting procedure with no return(s); infinite loop fail
_float32_from_byte__1:
        goto    _float32_from_byte__1




        ; line_number = 341
        ;info   341, 2949
        ; procedure _float32_to_byte
_float32_to_byte:
        ; line_number = 342
        ; argument number float32
_float32_to_byte__number equ globals___1+48
        ; line_number = 343
        ;  returns byte

        ; # This procedure will convert {number} into a 8-bit integer and return it.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 347
        ;  assemble
        ;info   347, 2949
        ; # Get the argument stored into the float32 "A" register:
        ; line_number = 349
        ;info   349, 2949
        movlw   _float32_to_byte__number>>1
        ; line_number = 350
        ;info   350, 2950
        call    _float32_pointer_store
        ; line_number = 351
        ;info   351, 2951
        call    _float32_integer24_convert
        ; line_number = 352
        ; return _float32_aargb2 start
        ; line_number = 352
        ;info   352, 2952
        movf    _float32_aargb2,w
        return  
        ; line_number = 352
        ; return _float32_aargb2 done


        ; delay after procedure statements=non-uniform




        ; line_number = 355
        ;info   355, 2954
        ; procedure _float32_equals
_float32_equals:
        ; arguments_none
        ; line_number = 357
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is zero.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 361
        ;  assemble
        ;info   361, 2954
        ; line_number = 362
        ;info   362, 2954
        movf    _float32_aexp,w
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 366
        ;info   366, 2956
        ; procedure _float32_not_equal
_float32_not_equal:
        ; arguments_none
        ; line_number = 368
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is non-zero.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 372
        ;  assemble
        ;info   372, 2956
        ; line_number = 373
        ;info   373, 2956
        movf    _float32_aexp,w
        ; line_number = 374
        ;info   374, 2957
        btfss   _float32_status, _float32_z
        ; line_number = 375
        ;info   375, 2958
        goto    _float32_not_equal1
        ; # AEXP is zero; thus not_equal is false:
        ; line_number = 377
        ;info   377, 2959
        bcf     _float32_status, _float32_z
        ; line_number = 378
        ;info   378, 2960
        retlw   0
        ; line_number = 379
_float32_not_equal1:
        ; # AEXP is non-zero, the not_equal is true:
        ; line_number = 381
        ;info   381, 2961
        bsf     _float32_status, _float32_z
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 385
        ;info   385, 2963
        ; procedure _float32_less_than
_float32_less_than:
        ; arguments_none
        ; line_number = 387
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is non-zero and
        ; # positive.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 392
        ;  assemble
        ;info   392, 2963
        ; # Test AEXP for 0:
        ; line_number = 394
        ;info   394, 2963
        movf    _float32_aargb0,w
        ; line_number = 395
        ;info   395, 2964
        btfsc   _float32_status, _float32_z
        ; # AEXP=0; Z=1; clear Z:
        ; line_number = 397
        ;info   397, 2965
        goto    _float32_less_than1
        ; # AEXP!=0; Z=0; Test sign
        ; line_number = 399
        ;info   399, 2966
        btfsc   _float32_aargb0, 7
        ; # Sign=1; Set Z
        ; line_number = 401
        ;info   401, 2967
        bsf     _float32_status, _float32_z
        ; line_number = 402
        ;info   402, 2968
        retlw   0
        ; line_number = 403
_float32_less_than1:
        ; # AXP=0; Z=1; clear Z:
        ; line_number = 405
        ;info   405, 2969
        bcf     _float32_status, _float32_z
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 409
        ;info   409, 2971
        ; procedure _float32_less_than_or_equal
_float32_less_than_or_equal:
        ; arguments_none
        ; line_number = 411
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is zero or positive.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 415
        ;  assemble
        ;info   415, 2971
        ; # Test AEXP for 0:
        ; line_number = 417
        ;info   417, 2971
        movf    _float32_aexp,w
        ; line_number = 418
        ;info   418, 2972
        btfsc   _float32_status, _float32_z
        ; # AEXP=0; Z=1; Return
        ; line_number = 420
        ;info   420, 2973
        retlw   0
        ; # AEXP!=0; Z=0; Test sign:
        ; line_number = 422
        ;info   422, 2974
        btfsc   _float32_aargb0, 7
        ; # Sign=1; Set Z
        ; line_number = 424
        ;info   424, 2975
        bsf     _float32_status, _float32_z
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 428
        ;info   428, 2977
        ; procedure _float32_greater_than
_float32_greater_than:
        ; arguments_none
        ; line_number = 430
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is non-zero and
        ; # positive.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 435
        ;  assemble
        ;info   435, 2977
        ; # Test AEXP for 0:
        ; line_number = 437
        ;info   437, 2977
        movf    _float32_aexp,w
        ; line_number = 438
        ;info   438, 2978
        btfsc   _float32_status, _float32_z
        ; # AEXP=0 Z=1; Clear Z and return:
        ; line_number = 440
        ;info   440, 2979
        goto    _float32_greater_than1
        ; # AEXP!=0 Z=0; Test sign bit
        ; line_number = 442
        ;info   442, 2980
        btfss   _float32_aargb0, 7
        ; # Sign bit=0; Set Z
        ; line_number = 444
        ;info   444, 2981
        bsf     _float32_status, _float32_z
        ; line_number = 445
        ;info   445, 2982
        retlw   0
        ; line_number = 446
_float32_greater_than1:
        ; # AEXP=0 Z=1; Clear Z and return:
        ; line_number = 448
        ;info   448, 2983
        bcf     _float32_status, _float32_z
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 452
        ;info   452, 2985
        ; procedure _float32_greater_than_or_equal
_float32_greater_than_or_equal:
        ; arguments_none
        ; line_number = 454
        ;  returns_nothing

        ; # This procedure will set the Z bit if register "A" is zero or positive.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:X1=cu=>X1)
        ; line_number = 458
        ;  assemble
        ;info   458, 2985
        ; # Test AEXP for 0:
        ; line_number = 460
        ;info   460, 2985
        movf    _float32_aexp,w
        ; line_number = 461
        ;info   461, 2986
        btfsc   _float32_status, _float32_z
        ; # AEXP=0; Z=1; We can return
        ; line_number = 463
        ;info   463, 2987
        retlw   0
        ; # AEXP!=0; Z=0; now check sign
        ; line_number = 465
        ;info   465, 2988
        btfss   _float32_aargb0, 7
        ; # Sign=0; Set Z
        ; line_number = 467
        ;info   467, 2989
        bsf     _float32_status, _float32_z
        ; # Return is implicit


        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; Configuration bits
        ; address = 0x2007, fill = 0x3000
        ; fcmen = off (0x0)
        ; ieso = off (0x0)
        ; boden = off (0x0)
        ; cpd = off (0x80)
        ; cp = off (0x40)
        ; mclre = off (0x0)
        ; pwrte = off (0x10)
        ; wdte = off (0x0)
        ; fosc = hs (0x2)
        ; 12498 = 0x30d2
        __config 12498
        ; Define start addresses for data regions
        ; Region="shared___globals" Address=112" Size=16 Bytes=2 Bits=0 Available=14
        ; Region="globals___0" Address=32" Size=80 Bytes=76 Bits=6 Available=3
        ; Region="globals___1" Address=160" Size=80 Bytes=76 Bits=0 Available=4
        ; Region="globals___2" Address=288" Size=80 Bytes=52 Bits=0 Available=28
        ; Region="shared___globals" Address=112" Size=16 Bytes=2 Bits=0 Available=14
        end
