        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-2009 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
        ; 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 = 47
        ; 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 = 54
        ; package pdip
        ; line_number = 55
        ; pin 1 = power_supply
        ; line_number = 56
        ;  pin 2 = osc1
        ; line_number = 57
        ;  pin 3 = osc2
        ; line_number = 58
        ;  pin 4 = ra3_nc
        ; line_number = 59
        ;  pin 5 = rx, name=rx, bit=rx_bit
rx___byte equ _portc
rx___bit equ 5
rx_bit equ 5
        ; line_number = 60
        ;  pin 6 = tx, name=tx, bit=tx_bit
tx___byte equ _portc
tx___bit equ 4
tx_bit equ 4
        ; line_number = 61
        ;  pin 7 = rc3_nc
        ; line_number = 62
        ;  pin 8 = rc2_nc
        ; line_number = 63
        ;  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 = 64
        ;  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 = 65
        ;  pin 11 = an2
        ; line_number = 66
        ;  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 = 67
        ;  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 = 68
        ;  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 = 72
        ; constant position_index = 0		# Current position
position_index equ 0
        ; line_number = 73
        ; constant target_index = 1		# Target position
target_index equ 1
        ; line_number = 74
        ; constant divisor_index = 2		# Denominator for {kp}, {ki}, and {kd}
divisor_index equ 2
        ; line_number = 75
        ; constant kp_index = 3			# Numerator for {kp}
kp_index equ 3
        ; line_number = 76
        ; constant ki_index = 4			# Numerator for {ki}
ki_index equ 4
        ; line_number = 77
        ; constant kd_index = 5			# Numerator for {kd}
kd_index equ 5
        ; line_number = 78
        ; constant debug_index = 6
debug_index equ 6
        ; line_number = 79
        ; constant file24_size = 7		# 24-bit register file has 6 registers
file24_size equ 7

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

        ; # The quardarture is actually the same as the position:
        ; line_number = 89
        ; bind quad_high = highs[position_index]
quad_high equ globals___2
        ; line_number = 90
        ; bind quad_middle = middles[position_index]
quad_middle equ globals___2+7
        ; line_number = 91
        ; bind quad_low = lows[position_index]
quad_low equ globals___2+14
        ; line_number = 92
        ; global quad_state byte			# The quadrature state
quad_state equ globals___2+21

        ; line_number = 94
        ; global xstates[32] array[byte]
xstates equ globals___2+22

        ; # Every else with the 24-bit register file24 is in data bank 0:
        ; line_number = 98
        ; global file24_changed byte		# 1 bit for each value to mark change
file24_changed equ globals___0
        ; line_number = 99
        ; 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 = 104
        ; global high byte			# Temporary high byte
high equ globals___0+2
        ; line_number = 105
        ; global middle byte			# Temporary middle byte
middle equ globals___0+3
        ; line_number = 106
        ; 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 = 110
        ; constant configure_index = 0		# Configuration byte index
configure_index equ 0
        ; line_number = 111
        ; constant status_index = 1		# Status byte index
status_index equ 1
        ; line_number = 112
        ; constant speed_index = 2		# Current motor speed index
speed_index equ 2
        ; line_number = 113
        ; constant errors_index = 3		# Error count
errors_index equ 3
        ; line_number = 114
        ; constant deadband_index = 4		# Deadband for motor speed
deadband_index equ 4
        ; line_number = 115
        ; constant idle_index = 5			# Current idle count
idle_index equ 5
        ; line_number = 116
        ; constant limit_index = 6		# Loop index
limit_index equ 6
        ; line_number = 117
        ; constant file24_index_index = 7		# Index into 24-bit register file
file24_index_index equ 7
        ; line_number = 118
        ; constant file8_size = 8		# We have 8 registers in {file8]
file8_size equ 8

        ; # Here is the actual array of {file8}:
        ; line_number = 121
        ; 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 = 125
        ; bind configure = file8[configure_index]
configure equ globals___0+5
        ; line_number = 126
        ; bind motor_reverse = configure@0	# 1=>reverse motor direction
motor_reverse___byte equ globals___0+5
motor_reverse___bit equ 0
        ; line_number = 127
        ; bind position_reverse = configure@1	# 1=>reverse position direction
position_reverse___byte equ globals___0+5
position_reverse___bit equ 1
        ; line_number = 128
        ; bind use_potentiometer = configure@2	# 1=>potentiometer; 0=>quadrature
use_potentiometer___byte equ globals___0+5
use_potentiometer___bit equ 2
        ; line_number = 129
        ; bind status = file8[status_index]
status equ globals___0+6
        ; line_number = 130
        ; bind speed = file8[speed_index]
speed equ globals___0+7
        ; line_number = 131
        ; bind errors = file8[errors_index]
errors equ globals___0+8
        ; line_number = 132
        ; bind deadband = file8[deadband_index]
deadband equ globals___0+9
        ; line_number = 133
        ; bind idle = file8[idle_index]
idle equ globals___0+10
        ; line_number = 134
        ; bind limit = file8[limit_index]
limit equ globals___0+11
        ; line_number = 135
        ; bind file24_index = file8[file24_index_index]
file24_index equ globals___0+12

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

        ; # UART Globals and constants:

        ; line_number = 144
        ; global state byte			# State machine for command parsing
state equ globals___0+16
        ; line_number = 145
        ; constant state_select_wait = 0		# Waiting for a select address
state_select_wait equ 0
        ; line_number = 146
        ; constant state_echo_then_command = 1	# Wait for echo then a command
state_echo_then_command equ 1
        ; line_number = 147
        ; constant state_command = 2		# Wait for a command
state_command equ 2
        ; line_number = 148
        ; constant state_file24_full_get1 = 3
state_file24_full_get1 equ 3
        ; line_number = 149
        ; constant state_file24_full_get2 = 4
state_file24_full_get2 equ 4
        ; line_number = 150
        ; constant state_file24_full_set1 = 5
state_file24_full_set1 equ 5
        ; line_number = 151
        ; constant state_file24_full_set2 = 6
state_file24_full_set2 equ 6
        ; line_number = 152
        ; constant state_file24_full_set3 = 7
state_file24_full_set3 equ 7
        ; line_number = 153
        ; constant state_value_low_set1 = 8
state_value_low_set1 equ 8
        ; line_number = 154
        ; constant state_value_middle_set1 = 9
state_value_middle_set1 equ 9
        ; line_number = 155
        ; constant state_value_high_set1 = 10
state_value_high_set1 equ 10
        ; line_number = 156
        ; constant state_file8_set1 = 11
state_file8_set1 equ 11
        ; line_number = 157
        ; constant state_file8_set2 = 12
state_file8_set2 equ 12
        ; line_number = 158
        ; constant state_file8_set3 = 13
state_file8_set3 equ 13
        ; line_number = 159
        ; constant state_address_set1 = 14
state_address_set1 equ 14
        ; line_number = 160
        ; constant state_address_set2 = 15
state_address_set2 equ 15
        ; line_number = 161
        ; constant state_address_set3 = 16
state_address_set3 equ 16
        ; line_number = 162
        ; constant state_address_set4 = 17
state_address_set4 equ 17
        ; line_number = 163
        ; constant state_probe_get1 = 18
state_probe_get1 equ 18
        ; line_number = 164
        ; constant state_probe_get2 = 19
state_probe_get2 equ 19

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

        ; # UART data input buffer:
        ; line_number = 169
        ; constant uart_input_size = 4			# Buffer size (=power of 2)
uart_input_size equ 4
        ; line_number = 170
        ; constant uart_input_mask = uart_input_size - 1	# Mask for index
uart_input_mask equ 3
        ; line_number = 171
        ; global uart_input[uart_input_size] array[byte]	# Buffer for input
uart_input equ globals___0+18
        ; line_number = 172
        ; global uart_input_in_index byte			# Next index to insert into
uart_input_in_index equ globals___0+22
        ; line_number = 173
        ; global uart_input_out_index byte		# Next index to remove from
uart_input_out_index equ globals___0+23
        ; line_number = 174
        ; global uart_input_count byte			# Bytes in buffer
uart_input_count equ globals___0+24
        ; line_number = 175
        ; 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 = 177
        ; global address byte			# Address of this module
address equ globals___0+25
        ; line_number = 178
        ; global new_address byte			# New address of this module
new_address equ globals___0+26

        ; # Load up floating point library in code bank 1 using datab bank 0:
        ; line_number = 181
        ; library_bank 1
        ; line_number = 183
        ; 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 = 183
        ; library _float32 exited

        ; line_number = 186
        ; origin 0
        org     0

        ; line_number = 188
        ;info   188, 0
        ; procedure start
start:
        ; arguments_none
        ; line_number = 190
        ;  returns_nothing
        ; line_number = 191
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 193
        ;  assemble
        ;info   193, 0
        ; line_number = 194
        ;info   194, 0
        ; databank start, main
        ; line_number = 195
        ;info   195, 0
        ; codebank start, main
        ; line_number = 196
        ;info   196, 0
        goto    main

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




        ; line_number = 198
        ; origin 4
        org     4

        ; line_number = 200
        ;info   200, 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 = 202
        ;  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 = 244
        ;  local fsr_save byte
interrupt__fsr_save equ globals___0+27
        ; line_number = 245
        ;  local pclath_save byte
interrupt__pclath_save equ globals___0+28

        ; before procedure statements delay=non-uniform, bit states=(data:??=uu=>?? code:X0=cu=>X0)
        ; line_number = 247
        ;  fsr_save := _fsr
        ;info   247, 7
        movf    _fsr,w
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movwf   interrupt__fsr_save
        ; line_number = 248
        ;  pclath_save := _pclath
        ;info   248, 11
        movf    _pclath,w
        movwf   interrupt__pclath_save
        ; # Make sure we are on correct page:
        ; line_number = 250
        ;  _pclath := 0
        ;info   250, 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 = 267
        ;  if _t0if start
        ;info   267, 14
        ; =>bit_code_emit@symbol(): sym=_t0if
        ; No 1TEST: true.size=36 false.size=0
        ; No 2TEST: true.size=36 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _t0if___byte, _t0if___bit
        goto    interrupt__4
        ; # Timer 0 just triggered.  It is time to start a new pulse width
        ; # duty cycle:

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

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

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

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

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

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

        ; line_number = 290
        ;  if use_potentiometer start
        ;info   290, 25
        ; =>bit_code_emit@symbol(): sym=use_potentiometer
        ; No 1TEST: true.size=22 false.size=0
        ; No 2TEST: true.size=22 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   use_potentiometer___byte, use_potentiometer___bit
        goto    interrupt__3
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 291
        ; quad_low := _adresl
        ;info   291, 28
        movf    _adresl,w
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_low
        ; line_number = 292
        ;  quad_middle := _adresh
        ;info   292, 32
        bcf     __rp1___byte, __rp1___bit
        movf    _adresh,w
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_middle
        ; line_number = 293
        ;  quad_high := 0
        ;info   293, 36
        clrf    quad_high
        ; line_number = 294
        ;  if position_reverse start
        ;info   294, 37
        ; =>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 = 296
        ;  quad_low := quad_low ^ 0xff
        ;info   296, 41
        comf    quad_low,f
        ; line_number = 297
        ;  quad_middle := quad_middle ^ 3
        ;info   297, 42
        movlw   3
        xorwf   quad_middle,f
        ; line_number = 298
        ;  quad_low := quad_low + 1
        ;info   298, 44
        incf    quad_low,f
        ; line_number = 299
        ;  if _z start
        ;info   299, 45
        ; =>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 = 300
        ; quad_middle := (quad_middle + 1) & 3
        ;info   300, 47
        incf    quad_middle,w
        andlw   3
        movwf   quad_middle

        ; Recombine size1 = 0 || size2 = 0
interrupt__1:
        ; line_number = 299
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__2:
        ; line_number = 294
        ;  if position_reverse done
        ; Recombine size1 = 0 || size2 = 0
interrupt__3:
        ; line_number = 290
        ;  if use_potentiometer done
        ; # Trigger an A/D conversion to pick up next time:
        ; line_number = 303
        ;  _go := _true
        ;info   303, 50
        bcf     __rp1___byte, __rp1___bit
        bsf     _go___byte, _go___bit

        ; Recombine size1 = 0 || size2 = 0
interrupt__4:
        ; line_number = 267
        ;  if _t0if done
        ; # Deal with Timer 1 interrupt:
        ; line_number = 306
        ;  if _tmr1if start
        ;info   306, 52
        ; =>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__5
        ; # Timer 1 just triggered.  It is time to turn off the pulse width.

        ; # Turn off the motor leads:
        ; line_number = 310
        ;  _portc := 0
        ;info   310, 54
        clrf    _portc

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

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

        ; Recombine size1 = 0 || size2 = 0
interrupt__5:
        ; line_number = 306
        ;  if _tmr1if done
        ; # Deal with UART receive interrupt:
        ; line_number = 319
        ;  if _rcif start
        ;info   319, 57
        ; =>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__10
        ; # 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 = 326
        ;  if _rx9d start
        ;info   326, 59
        ; =>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__8
        ; # The ninth bit is set, we have an module address select
        ; # command:
        ; line_number = 329
        ;  if _rcreg = address start
        ;info   329, 61
        ; 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__6
        ; # 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 = 335
        ;  _adden := _false
        ;info   335, 65
        bcf     _adden___byte, _adden___bit

        ; # Clear out the input data buffer:
        ; line_number = 338
        ;  uart_input_in_index := 0
        ;info   338, 66
        clrf    uart_input_in_index
        ; line_number = 339
        ;  uart_input_out_index := 0
        ;info   339, 67
        clrf    uart_input_out_index
        ; line_number = 340
        ;  uart_input_count := 0
        ;info   340, 68
        clrf    uart_input_count
        ; line_number = 341
        ;  uart_input_pending := _false
        ;info   341, 69
        bcf     uart_input_pending___byte, uart_input_pending___bit

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

        ; # Set the state machine for {uart_manage} to eat the echo
        ; # and start processing commands:
        ; line_number = 348
        ;  state := state_echo_then_command
        ;info   348, 72
        movlw   1
        movwf   state
        ; Recombine code1_bit_states != code2_bit_states
        goto    interrupt__7
        ; 2GOTO: Starting code 2
interrupt__6:
        ; # 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 = 355
        ;  _adden := _true
        ;info   355, 75
        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 = 360
        ;  state := state_select_wait
        ;info   360, 76
        clrf    state
interrupt__7:
        ; 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 = 329
        ;  if _rcreg = address done
        ; Recombine code1_bit_states != code2_bit_states
        goto    interrupt__9
        ; 2GOTO: Starting code 2
interrupt__8:
        ; # 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 = 369
        ;  uart_input[uart_input_in_index & uart_input_mask] := _rcreg
        ;info   369, 78
        ; 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 = 373
        ;  uart_input_in_index := uart_input_in_index + 1
        ;info   373, 85
        incf    uart_input_in_index,f

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

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

interrupt__9:
        ; 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 = 326
        ;  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 = 384
        ;  if _oerr start
        ;info   384, 88
        ; =>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 = 386
        ;  _cren := _false
        ;info   386, 89
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 384
        ;  if _oerr done
        ; line_number = 387
        ; if _ferr start
        ;info   387, 90
        ; =>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 = 389
        ;  _cren := _false
        ;info   389, 91
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 387
        ; 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 = 394
        ;  _cren := _true
        ;info   394, 92
        bsf     _cren___byte, _cren___bit

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

        ; Recombine size1 = 0 || size2 = 0
interrupt__10:
        ; line_number = 319
        ;  if _rcif done
        ; # Deal with quadrature input changes:
        ; line_number = 400
        ;  if _raif start
        ;info   400, 94
        ; =>bit_code_emit@symbol(): sym=_raif
        ; No 1TEST: true.size=59 false.size=0
        ; No 2TEST: true.size=59 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   _raif___byte, _raif___bit
        goto    interrupt__25
        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:
        ; line_number = 411
        ;  quad_state := xstates[quad_state & 7 | (_porta << 3) & 0x18]
        ;info   411, 97
interrupt__11 equ globals___0+62
        movlw   7
        andwf   quad_state,w
        bcf     __rp1___byte, __rp1___bit
        movwf   interrupt__11
interrupt__12 equ globals___0+63
        rlf     _porta,w
        movwf   interrupt__12
        rlf     interrupt__12,f
        rlf     interrupt__12,w
        andlw   24
        iorwf   interrupt__11,w
        addlw   xstates
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        bsf     __rp1___byte, __rp1___bit
        movwf   quad_state

        ; # Disable interrupt condition until the next time:
        ; line_number = 414
        ;  _raif := _false
        ;info   414, 113
        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 = 423
        ;  if quad_state@7 start
        ;info   423, 114
interrupt__select__17___byte equ quad_state
interrupt__select__17___bit equ 7
        ; =>bit_code_emit@symbol(): sym=interrupt__select__17
        ; No 1TEST: true.size=17 false.size=0
        ; No 2TEST: true.size=17 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__17___byte, interrupt__select__17___bit
        goto    interrupt__18
        ; # The state machine wants us to increment the quadrature counter
        ; # by 1.  We work our way from {quad_low} through {quad_high}:
        ; line_number = 426
        ;  quad_low := quad_low + 1
        ;info   426, 116
        incf    quad_low,f
        ; line_number = 427
        ;  if _z start
        ;info   427, 117
        ; =>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__13
        ; # The zero status flag is set, so {quad_low} just wrapped from
        ; # 0xff to 0.  Thus, we need to increment {quad_middle}"
        ; line_number = 430
        ;  quad_middle := quad_middle + 1
        ;info   430, 119
        incf    quad_middle,f
        ; line_number = 431
        ;  if _z start
        ;info   431, 120
        ; =>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 = 435
        ;  quad_high := quad_high + 1
        ;info   435, 121
        incf    quad_high,f

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 431
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__13:
        ; line_number = 427
        ;  if _z done
        ; line_number = 437
        ; if quad_state@6 start
        ;info   437, 122
interrupt__select__15___byte equ quad_state
interrupt__select__15___bit equ 6
        ; =>bit_code_emit@symbol(): sym=interrupt__select__15
        ; No 1TEST: true.size=8 false.size=0
        ; No 2TEST: true.size=8 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__15___byte, interrupt__select__15___bit
        goto    interrupt__16
        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 = 443
        ;  errors := errors + 1
        ;info   443, 125
        incf    errors,f

        ; # This code is the same as the first increment, so the
        ; # comments are not repeated:
        ; line_number = 447
        ;  quad_low := quad_low + 1
        ;info   447, 126
        bsf     __rp1___byte, __rp1___bit
        incf    quad_low,f
        ; line_number = 448
        ;  if _z start
        ;info   448, 128
        ; =>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__14
        ; line_number = 449
        ; quad_middle := quad_middle + 1
        ;info   449, 130
        incf    quad_middle,f
        ; line_number = 450
        ;  if _z start
        ;info   450, 131
        ; =>bit_code_emit@symbol(): sym=_z
        ; 1TEST: Single test with code in skip slot
        btfsc   _z___byte, _z___bit
        ; line_number = 451
        ; quad_high := quad_high + 1
        ;info   451, 132
        incf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 450
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__14:
        ; line_number = 448
        ;  if _z done
        ; Recombine size1 = 0 || size2 = 0
interrupt__16:
        ; line_number = 437
        ; if quad_state@6 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__18:
        ; line_number = 423
        ;  if quad_state@7 done
        ; line_number = 452
        ; if quad_state@5 start
        ;info   452, 133
interrupt__select__23___byte equ quad_state
interrupt__select__23___bit equ 5
        ; =>bit_code_emit@symbol(): sym=interrupt__select__23
        ; No 1TEST: true.size=21 false.size=0
        ; No 2TEST: true.size=21 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__23___byte, interrupt__select__23___bit
        goto    interrupt__24
        ; # The state machine wants us to decrement the quadrature counter
        ; # by 1.  We work our way from {quad_low} through {quad_high}:
        ; line_number = 455
        ;  if quad_low = 0 start
        ;info   455, 135
        ; 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__19
        ; # {quad_low} is 0, so we are going to wrap down to 0xff.
        ; # We need to decrement {quad_middle}:
        ; line_number = 458
        ;  if quad_middle = 0 start
        ;info   458, 138
        ; 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 = 461
        ;  quad_high := quad_high - 1
        ;info   461, 140
        decf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 458
        ;  if quad_middle = 0 done
        ; # Do the {quad_middle} decrement:
        ; line_number = 463
        ;  quad_middle := quad_middle - 1
        ;info   463, 141
        decf    quad_middle,f
        ; Recombine size1 = 0 || size2 = 0
interrupt__19:
        ; line_number = 455
        ;  if quad_low = 0 done
        ; # Do the {quad_low} decrement:
        ; line_number = 465
        ;  quad_low := quad_low - 1
        ;info   465, 142
        decf    quad_low,f

        ; line_number = 467
        ;  if quad_state@4 start
        ;info   467, 143
interrupt__select__21___byte equ quad_state
interrupt__select__21___bit equ 4
        ; =>bit_code_emit@symbol(): sym=interrupt__select__21
        ; No 1TEST: true.size=10 false.size=0
        ; No 2TEST: true.size=10 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   interrupt__select__21___byte, interrupt__select__21___bit
        goto    interrupt__22
        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 = 473
        ;  errors := errors + 1
        ;info   473, 146
        incf    errors,f

        ; # This code is the same as the first decrement, so the
        ; # comments are not repeated:
        ; line_number = 477
        ;  if quad_low = 0 start
        ;info   477, 147
        ; 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__20
        ; line_number = 478
        ; if quad_middle = 0 start
        ;info   478, 151
        ; 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 = 479
        ; quad_high := quad_high - 1
        ;info   479, 153
        decf    quad_high,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 478
        ; if quad_middle = 0 done
        ; line_number = 480
        ; quad_middle := quad_middle - 1
        ;info   480, 154
        decf    quad_middle,f
        ; Recombine size1 = 0 || size2 = 0
interrupt__20:
        ; line_number = 477
        ;  if quad_low = 0 done
        ; line_number = 481
        ; quad_low := quad_low - 1
        ;info   481, 155
        decf    quad_low,f

        ; Recombine size1 = 0 || size2 = 0
interrupt__22:
        ; line_number = 467
        ;  if quad_state@4 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__24:
        ; line_number = 452
        ; if quad_state@5 done
        ; Recombine size1 = 0 || size2 = 0
interrupt__25:
        ; line_number = 400
        ;  if _raif done
        ; # All done processing interrupt conditions.  Let's get out of here by
        ; # restoring {_fsr} and {_pclath}:
        ; line_number = 485
        ;  _fsr := fsr_save    
        ;info   485, 156
        bcf     __rp1___byte, __rp1___bit
        movf    interrupt__fsr_save,w
        movwf   _fsr
        ; line_number = 486
        ;  _pclath := pclath_save
        ;info   486, 159
        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 = 494
        ; global error float32
error equ globals___2+54
        ; line_number = 495
        ; global position float32
position equ globals___2+58
        ; line_number = 496
        ; global target float32
target equ globals___2+62
        ; line_number = 497
        ; global kp float32
kp equ globals___2+66
        ; line_number = 498
        ; global ki float32
ki equ globals___2+70


        ; line_number = 502
        ; global kd float32
kd equ globals___1+52
        ; line_number = 503
        ; global pid float32
pid equ globals___1+56
        ; line_number = 504
        ; global divisor float32
divisor equ globals___1+60
        ; line_number = 505
        ; global numerator float32
numerator equ globals___1+64


        ; line_number = 509
        ; global target_speed byte		# Target motor speed
target_speed equ globals___0+29
        ; line_number = 510
        ; global target_seek bit
target_seek___byte equ globals___0+79
target_seek___bit equ 1

        ; line_number = 512
        ;info   512, 166
        ; 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 = 514
        ;  returns_nothing

        ; line_number = 516
        ;  local pos_high byte
main__pos_high equ globals___0+30
        ; line_number = 517
        ;  local pos_middle byte
main__pos_middle equ globals___0+31
        ; line_number = 518
        ;  local pos_low byte
main__pos_low equ globals___0+32
        ; line_number = 519
        ;  local negative bit
main__negative___byte equ globals___0+79
main__negative___bit equ 2
        ; line_number = 520
        ;  local small_error byte
main__small_error equ globals___0+33

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

        ; line_number = 524
        ;  loop_forever start
main__1:
        ; # Make sure we manage the UART:
        ; line_number = 526
        ;  call uart_manage()
        ;info   526, 181
        call    uart_manage

        ; # Update target if necesary
        ; line_number = 529
        ;  if file24_changed != 0 start
        ;info   529, 182
        ; 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 = 531
        ;  if file24_changed@target_index start
        ;info   531, 185
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 = 532
        ; target_seek := _true
        ;info   532, 187
        bsf     target_seek___byte, target_seek___bit
        ; line_number = 533
        ;  target := file24_float_convert(target_index)
        ;info   533, 188
        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 = 534
        ;  file24_changed@target_index := _false
        ;info   534, 196
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 = 535
        ;  call uart_manage()
        ;info   535, 198
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__4:
        ; line_number = 531
        ;  if file24_changed@target_index done
        ; line_number = 536
        ; if file24_changed@divisor_index start
        ;info   536, 200
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 = 537
        ; divisor := file24_float_convert(divisor_index)
        ;info   537, 202
        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 = 538
        ;  if file24_zero@divisor_index start
        ;info   538, 210
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 = 540
        ;  lows[divisor_index] := 1
        ;info   540, 215
        movlw   1
        movwf   lows+2
        ; line_number = 541
        ;  divisor := 1.0
        ;info   541, 217
        ; 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 = 538
        ;  if file24_zero@divisor_index done
        ; line_number = 542
        ; file24_changed@divisor_index := _false
        ;info   542, 224
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 = 543
        ;  file24_changed@kp_index := _true
        ;info   543, 226
main__select__8___byte equ file24_changed
main__select__8___bit equ 3
        bsf     main__select__8___byte, main__select__8___bit
        ; line_number = 544
        ;  file24_changed@ki_index := _true
        ;info   544, 227
main__select__9___byte equ file24_changed
main__select__9___bit equ 4
        bsf     main__select__9___byte, main__select__9___bit
        ; line_number = 545
        ;  file24_changed@kd_index := _true
        ;info   545, 228
main__select__10___byte equ file24_changed
main__select__10___bit equ 5
        bsf     main__select__10___byte, main__select__10___bit
        ; line_number = 546
        ;  call uart_manage()
        ;info   546, 229
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__12:
        ; line_number = 536
        ; if file24_changed@divisor_index done
        ; line_number = 547
        ; if file24_changed@kp_index start
        ;info   547, 230
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 = 548
        ; numerator := file24_float_convert(kp_index)
        ;info   548, 232
        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 = 549
        ;  call uart_manage()
        ;info   549, 240
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 550
        ;  kp := numerator / divisor
        ;info   550, 243
        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 = 551
        ;  file24_changed@kp_index := _false
        ;info   551, 251
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 = 552
        ;  call uart_manage()
        ;info   552, 253
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__15:
        ; line_number = 547
        ; if file24_changed@kp_index done
        ; line_number = 553
        ; if file24_changed@ki_index start
        ;info   553, 255
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 = 554
        ; numerator := file24_float_convert(ki_index)
        ;info   554, 257
        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 = 555
        ;  call uart_manage()
        ;info   555, 265
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 556
        ;  ki := numerator / divisor
        ;info   556, 268
        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 = 557
        ;  file24_changed@ki_index := _false
        ;info   557, 276
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 = 558
        ;  call uart_manage()
        ;info   558, 278
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; Recombine size1 = 0 || size2 = 0
main__18:
        ; line_number = 553
        ; if file24_changed@ki_index done
        ; line_number = 559
        ; if file24_changed@kd_index start
        ;info   559, 280
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 = 560
        ; numerator := file24_float_convert(kd_index)
        ;info   560, 282
        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 = 561
        ;  call uart_manage()
        ;info   561, 290
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage
        ; line_number = 562
        ;  kd := numerator / divisor
        ;info   562, 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   kd>>1
        call    _float32_pointer_store
        ; line_number = 563
        ;  file24_changed@kd_index := _false
        ;info   563, 301
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 = 564
        ;  call uart_manage()
        ;info   564, 303
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage

        ; Recombine size1 = 0 || size2 = 0
main__21:
        ; line_number = 559
        ; if file24_changed@kd_index done
main__22:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 529
        ;  if file24_changed != 0 done
        ; line_number = 566
        ; if target_seek start
        ;info   566, 305
        ; =>bit_code_emit@symbol(): sym=target_seek
        ; No 1TEST: true.size=179 false.size=0
        ; No 2TEST: true.size=179 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   target_seek___byte, target_seek___bit
        goto    main__35
        bsf     __rp1___byte, __rp1___bit
        ; # Fetch the position atomically:
        ; line_number = 568
        ;  _gie := _false
        ;info   568, 308
        bcf     _gie___byte, _gie___bit
        ; line_number = 569
        ;  pos_high := quad_high
        ;info   569, 309
        movf    quad_high,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_high
        ; line_number = 570
        ;  pos_middle := quad_middle
        ;info   570, 312
        bsf     __rp1___byte, __rp1___bit
        movf    quad_middle,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_middle
        ; line_number = 571
        ;  pos_low := quad_low
        ;info   571, 316
        bsf     __rp1___byte, __rp1___bit
        movf    quad_low,w
        bcf     __rp1___byte, __rp1___bit
        movwf   main__pos_low
        ; line_number = 572
        ;  _gie := _true
        ;info   572, 320
        bsf     _gie___byte, _gie___bit
        ; line_number = 573
        ;  call uart_manage()
        ;info   573, 321
        call    uart_manage

        ; # Convert the position bytes into a float:
        ; line_number = 576
        ;  position := xyz(pos_high, pos_middle, pos_low)
        ;info   576, 322
        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 = 577
        ;  call uart_manage()
        ;info   577, 334
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage

        ; # Figure out the proportional error:
        ; line_number = 580
        ;  error := position - target
        ;info   580, 337
        movlw   position>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   target>>1
        call    _float32_pointer_subtract
        movlw   error>>1
        call    _float32_pointer_store
        ; line_number = 581
        ;  call uart_manage()
        ;info   581, 345
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage

        ; # Compute the PID equation:
        ; line_number = 584
        ;  pid := kp * error
        ;info   584, 348
        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 = 585
        ;  call uart_manage()
        ;info   585, 356
        bcf     __cb0___byte, __cb0___bit
        bcf     __rp0___byte, __rp0___bit
        call    uart_manage

        ; # Set the new motor speed:
        ; line_number = 588
        ;  negative := _false
        ;info   588, 359
        bcf     main__negative___byte, main__negative___bit
        ; line_number = 589
        ;  if pid < 0.0 start
        ;info   589, 360
        movlw   pid>>1
        bsf     __cb0___byte, __cb0___bit
        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 = 591
        ;  negative := _true
        ;info   591, 370
        bsf     main__negative___byte, main__negative___bit
        ; line_number = 592
        ;  pid := -pid
        ;info   592, 371
        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 = 589
        ;  if pid < 0.0 done
        ; line_number = 593
        ; if pid > 127.0 start
        ;info   593, 377
        ; -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=3 false.size=84
        ; No 2TEST: true.size=3 false.size=84
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__32
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 594
        ; target_speed := 127
        ;info   594, 391
        movlw   127
        movwf   target_speed
        ; line_number = 595
        ;  idle := 0
        ;info   595, 393
        clrf    idle
        ; Recombine code1_bit_states != code2_bit_states
        goto    main__33
        ; 2GOTO: Starting code 2
main__32:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 597
        ; target_speed := _float32_to_byte(pid)
        ;info   597, 396
        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 = 598
        ;  call uart_manage()
        ;info   598, 403
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; line_number = 599
        ;  if error >= 0.0 start
        ;info   599, 405
        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 = 600
        ; if error >= 255.0 start
        ;info   600, 410
        ; -255 = 86 ff 00 00
        movlw   134
        movwf   _float32_aexp
        ; line_number = 605
        ; if error < -255.0 start
        ;info   605, 412
        ; 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 = 601
        ; small_error := 255
        ;info   601, 427
        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 = 603
        ; small_error := _float32_to_byte(error)
        ;info   603, 431
        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 = 600
        ; 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 = 606
        ; small_error := 255
        ;info   606, 452
        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 = 608
        ; small_error := _float32_to_byte(-error)
        ;info   608, 456
        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 = 605
        ; 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 = 599
        ;  if error >= 0.0 done
        ; line_number = 609
        ; call uart_manage()
        ;info   609, 465
        bcf     __cb0___byte, __cb0___bit
        call    uart_manage
        ; line_number = 610
        ;  if small_error <= deadband start
        ;info   610, 467
        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=7
        ; No 2TEST: true.size=0 false.size=7
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    main__31
        ; line_number = 611
        ; idle := idle + 1
        ;info   611, 473
        incf    idle,f
        ; line_number = 612
        ;  if idle >= limit start
        ;info   612, 474
        movf    limit,w
        subwf   idle,w
        ; =>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__30
        ; line_number = 613
        ; target_seek := _false
        ;info   613, 478
        bcf     target_seek___byte, target_seek___bit
        ; line_number = 614
        ;  target_speed := 0
        ;info   614, 479
        clrf    target_speed
        ; Recombine size1 = 0 || size2 = 0
main__30:
        ; line_number = 612
        ;  if idle >= limit done
main__31:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 610
        ;  if small_error <= deadband done
main__33:
        ; 2GOTO: code1 final bitstates:(data:00=uu=>00 code:XX=cc=>XX)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>00 code:X1=cu=>X0)
        ; 2GOTO: code final bitstates:(data:10=uu=>00 code:X0=cu=>X0)
        ; line_number = 593
        ; if pid > 127.0 done
        ; line_number = 615
        ; if negative start
        ;info   615, 480
        ; =>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 = 616
        ; target_speed := 0 - target_speed
        ;info   616, 482
        movf    target_speed,w
        sublw   0
        movwf   target_speed
        ; Recombine size1 = 0 || size2 = 0
main__34:
        ; line_number = 615
        ; if negative done
        ; line_number = 617
        ; call speed_set(target_speed)
        ;info   617, 485
        movf    target_speed,w
        call    speed_set


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




        ; line_number = 620
        ;info   620, 488
        ; procedure reset
reset:
        ; arguments_none
        ; line_number = 622
        ;  returns_nothing

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

        ; line_number = 626
        ;  local index byte
reset__index equ globals___0+34

        ; # Initialize UART:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 629
        ;  address := rb2bus_eedata_read()
        ;info   629, 488
        call    rb2bus_eedata_read
        movwf   address
        ; line_number = 630
        ;  if address = 0 start
        ;info   630, 490
        ; 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 = 631
        ; address := 21
        ;info   631, 493
        movlw   21
        movwf   address
        ; Recombine size1 = 0 || size2 = 0
reset__1:
        ; line_number = 630
        ;  if address = 0 done
        ; line_number = 632
        ; call uart_initialize()
        ;info   632, 495
        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 = 644
        ;  _option_reg := 0x87
        ;info   644, 496
        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 = 656
        ;  _t1con := 0
        ;info   656, 499
        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 = 670
        ;  _adcon0 := 0x89
        ;info   670, 501
        movlw   137
        movwf   _adcon0

        ; # ADCON1 needs to be configured:
        ; # ADCS<2:0> := 110 = Tad=3.2uS at Fosc=20MHz
        ; # _adcs2 := _true
        ; # _adcs1 := _true
        ; # _adcs0 := _false
        ; # x110 xxxx = 0x60
        ; line_number = 678
        ;  _adcon1 := 0x60
        ;info   678, 503
        movlw   96
        bsf     __rp0___byte, __rp0___bit
        movwf   _adcon1

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

        ; # Initialize {file8}:
        ; line_number = 684
        ;  index := 0
        ;info   684, 509
        clrf    reset__index
        ; line_number = 685
        ;  while index < file8_size start
reset__2:
        ;info   685, 510
        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 = 686
        ; file8[index] := 0
        ;info   686, 514
        ; index_fsr_first
        movf    reset__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 687
        ;  index := index + 1
        ;info   687, 519
        incf    reset__index,f
        goto    reset__2
reset__3:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 685
        ;  while index < file8_size done
        ; line_number = 688
        ; call configure_update()
        ;info   688, 521
        call    configure_update
        ; line_number = 689
        ;  deadband := 4
        ;info   689, 522
        movlw   4
        movwf   deadband
        ; line_number = 690
        ;  limit := 20
        ;info   690, 524
        movlw   20
        movwf   limit

        ; # Initialize {file24}:
        ; line_number = 693
        ;  index := 0
        ;info   693, 526
        clrf    reset__index
        ; line_number = 694
        ;  while index < file24_size start
reset__4:
        ;info   694, 527
        movlw   7
        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 = 695
        ; highs[index] := 0
        ;info   695, 531
        ; index_fsr_first
        movf    reset__index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 696
        ;  middles[index] := 0
        ;info   696, 536
        ; index_fsr_first
        movf    reset__index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 697
        ;  lows[index] := 0
        ;info   697, 541
        ; index_fsr_first
        movf    reset__index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        clrf    __indf
        ; line_number = 698
        ;  index := index + 1
        ;info   698, 546
        incf    reset__index,f
        goto    reset__4
reset__5:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 694
        ;  while index < file24_size done
        ; line_number = 699
        ; file24_index := 0
        ;info   699, 548
        clrf    file24_index
        ; line_number = 700
        ;  file24_changed := 0
        ;info   700, 549
        clrf    file24_changed
        ; line_number = 701
        ;  file24_zero := 0	
        ;info   701, 550
        clrf    file24_zero

        ; # For now force divisor to -1:
        ; line_number = 704
        ;  highs[divisor_index] := 0xff
        ;info   704, 551
        movlw   255
        bsf     __rp1___byte, __rp1___bit
        movwf   highs+2
        ; line_number = 705
        ;  middles[divisor_index] := 0xff
        ;info   705, 554
        movlw   255
        movwf   middles+2
        ; line_number = 706
        ;  lows[divisor_index] := 0xff
        ;info   706, 556
        movlw   255
        movwf   lows+2

        ; # Force the an update of {divisor}:
        ; line_number = 709
        ;  file24_changed@divisor_index := _true
        ;info   709, 558
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 = 712
        ;  lows[kp_index] := 1
        ;info   712, 560
        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 = 719
        ;  target_seek := _false
        ;info   719, 563
        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 = 722
        ;  target := 0.0
        ;info   722, 565
        ; 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 = 725
        ;  quad_state := 0
        ;info   725, 570
        clrf    quad_state

        ; # The weak pull-ups can be turned off:
        ; line_number = 728
        ;  _wpua := 0
        ;info   728, 571
        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 = 731
        ;  _ioca := quad_a_mask | quad_b_mask
        ;info   731, 574
        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 = 735
        ;  _raie := !use_potentiometer
        ;info   735, 576
        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 = 738
        ;  _t0if := _false
        ;info   738, 580
        bcf     _t0if___byte, _t0if___bit
        ; line_number = 739
        ;  _t0ie := _true
        ;info   739, 581
        bsf     _t0ie___byte, _t0ie___bit
        ; line_number = 740
        ;  _tmr1if := _false
        ;info   740, 582
        bcf     _tmr1if___byte, _tmr1if___bit
        ; line_number = 741
        ;  _tmr1ie := _true
        ;info   741, 583
        bsf     __rp0___byte, __rp0___bit
        bsf     _tmr1ie___byte, _tmr1ie___bit
        ; line_number = 742
        ;  _peie := _true
        ;info   742, 585
        bsf     _peie___byte, _peie___bit
        ; line_number = 743
        ;  _gie := _true
        ;info   743, 586
        bsf     _gie___byte, _gie___bit


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




        ; line_number = 746
        ;info   746, 589
        ; procedure uart_manage
uart_manage:
        ; arguments_none
        ; line_number = 748
        ;  returns_nothing

        ; line_number = 750
        ;  local command byte
uart_manage__command equ globals___0+35
        ; line_number = 751
        ;  local index byte
uart_manage__index equ globals___0+36

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 753
        ;  if uart_input_count != 0 start
        ;info   753, 589
        ; Left minus Right
        movf    uart_input_count,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=0 false.size=443
        ; No 2TEST: true.size=0 false.size=443
        ; 1GOTO: Single test with GOTO
        btfsc   __z___byte, __z___bit
        goto    uart_manage__69
        ; # We have a data/command byte to process:
        ; line_number = 755
        ;  command := uart_input[uart_input_out_index & uart_input_mask]
        ;info   755, 592
        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 = 756
        ;  uart_input_out_index := uart_input_out_index + 1
        ;info   756, 599
        incf    uart_input_out_index,f

        ; # Manage {uart_input_count} and {uart_input_pending} atomically:
        ; line_number = 759
        ;  _gie := _false
        ;info   759, 600
        bcf     _gie___byte, _gie___bit
        ; line_number = 760
        ;  uart_input_count := uart_input_count - 1
        ;info   760, 601
        decf    uart_input_count,f
        ; line_number = 761
        ;  if uart_input_count = 0 start
        ;info   761, 602
        ; 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 = 762
        ; uart_input_pending := _false
        ;info   762, 604
        bcf     uart_input_pending___byte, uart_input_pending___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 761
        ;  if uart_input_count = 0 done
        ; line_number = 763
        ; _gie := _true
        ;info   763, 605
        bsf     _gie___byte, _gie___bit

        ; # We received a "data" byte"
        ; line_number = 766
        ;  switch state start
        ;info   766, 606
        ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=14
        movlw   uart_manage__67>>8
        movwf   __pclath
        movf    state,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   uart_manage__67
        movwf   __pcl
        ; page_group 20
uart_manage__67:
        goto    uart_manage__49
        goto    uart_manage__50
        goto    uart_manage__51
        goto    uart_manage__52
        goto    uart_manage__53
        goto    uart_manage__54
        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__68
        goto    uart_manage__68
        goto    uart_manage__61
        goto    uart_manage__62
        goto    uart_manage__63
        goto    uart_manage__64
        goto    uart_manage__65
        goto    uart_manage__66
        ; line_number = 767
        ; case 0
uart_manage__49:
        ; # Technically we should not get here because {_adden} should
        ; # be {_true}, but just in case we do, we just ignore the byte:
        ; line_number = 770
        ;  do_nothing
        ;info   770, 631
        goto    uart_manage__68
        ; line_number = 771
        ; case 1
uart_manage__50:
        ; # Ignore the echo before processing a command byte:
        ; line_number = 773
        ;  state := state_command
        ;info   773, 632
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 774
        ; case 2
uart_manage__51:
        ; # Process a command byte:
        ; line_number = 776
        ;  switch command >> 6 start
        ;info   776, 635
        ; 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+64
        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 = 777
        ; case 0
uart_manage__37:
        ; # 00xx xxxx:
        ; line_number = 779
        ;  switch (command >> 3) & 7 start
        ;info   779, 648
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 848
        ; case_maximum 7
        movlw   uart_manage__24>>8
        movwf   __pclath
uart_manage__25 equ globals___0+64
        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 = 780
        ; case 0
uart_manage__19:
        ; # 0000 0xxx:
        ; line_number = 782
        ;  switch command & 7 start
        ;info   782, 665
        ; 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 = 783
        ; case 0
uart_manage__1:
        ; # 0000 0000 (Value All Get):
        ; line_number = 785
        ;  call uart_byte_put(highs[file24_index])
        ;info   785, 679
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 786
        ;  state := state_file24_full_get1
        ;info   786, 685
        movlw   3
        movwf   state
        goto    uart_manage__10
        ; line_number = 787
        ; case 1
uart_manage__2:
        ; # 0000 0001 (Value Low Get):
        ; line_number = 789
        ;  call uart_byte_put(lows[file24_index])
        ;info   789, 688
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 790
        ;  state := state_echo_then_command
        ;info   790, 694
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 791
        ; case 2
uart_manage__3:
        ; # 0000 0010 (Value Middle Get):
        ; line_number = 793
        ;  call uart_byte_put(middles[file24_index])
        ;info   793, 697
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 794
        ;  state := state_echo_then_command
        ;info   794, 703
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 795
        ; case 3
uart_manage__4:
        ; # 0000 0011 (Value High Get):
        ; line_number = 797
        ;  call uart_byte_put(highs[file24_index])
        ;info   797, 706
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 798
        ;  state := state_echo_then_command
        ;info   798, 712
        movlw   1
        movwf   state
        goto    uart_manage__10
        ; line_number = 799
        ; case 4
uart_manage__5:
        ; # 0000 0100 (Value All Set):
        ; line_number = 801
        ;  state := state_file24_full_set1
        ;info   801, 715
        movlw   5
        movwf   state
        goto    uart_manage__10
        ; line_number = 802
        ; case 5
uart_manage__6:
        ; # 0000 0101 (Value Low Set):
        ; line_number = 804
        ;  state := state_value_low_set1
        ;info   804, 718
        movlw   8
        movwf   state
        goto    uart_manage__10
        ; line_number = 805
        ; case 6
uart_manage__7:
        ; # 0000 0110 (Value Middle Set):
        ; line_number = 807
        ;  state := state_value_middle_set1
        ;info   807, 721
        movlw   9
        movwf   state
        goto    uart_manage__10
        ; line_number = 808
        ; case 7
uart_manage__8:
        ; # 0000 0111 (Value High Set):
        ; line_number = 810
        ;  state := state_value_high_set1
        ;info   810, 724
        movlw   10
        movwf   state
uart_manage__10:
        ; line_number = 782
        ;  switch command & 7 done
        goto    uart_manage__26
        ; line_number = 811
        ; case 1
uart_manage__20:
        ; # 0000 1sss (Value Index Set):
        ; line_number = 813
        ;  file24_index := command & 7
        ;info   813, 727
        movlw   7
        andwf   uart_manage__command,w
        movwf   file24_index
        ; # Make sure we stay in bounds:
        ; line_number = 815
        ;  if file24_index >= file24_size start
        ;info   815, 730
        movlw   7
        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 = 816
        ; file24_index := 0
        ;info   816, 733
        clrf    file24_index
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 815
        ;  if file24_index >= file24_size done
        ; line_number = 817
        ; state := state_command
        ;info   817, 734
        movlw   2
        movwf   state
        goto    uart_manage__26
        ; line_number = 818
        ; case 2
uart_manage__21:
        ; # 0001 0xxx (Byte Get):
        ; line_number = 820
        ;  index := command & 7
        ;info   820, 737
        movlw   7
        andwf   uart_manage__command,w
        movwf   uart_manage__index
        ; line_number = 821
        ;  if index = 2 start
        ;info   821, 740
        ; 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 = 823
        ;  call status_update()
        ;info   823, 743
        call    status_update
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 821
        ;  if index = 2 done
        ; line_number = 824
        ; call uart_byte_put(file8[index])
        ;info   824, 744
        movf    uart_manage__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 825
        ;  state := state_echo_then_command
        ;info   825, 750
        movlw   1
        movwf   state
        goto    uart_manage__26
        ; line_number = 826
        ; case 3
uart_manage__22:
        ; # 0001 1xxx (Byte Set):
        ; line_number = 828
        ;  index := command & 7
        ;info   828, 753
        movlw   7
        andwf   uart_manage__command,w
        movwf   uart_manage__index
        ; line_number = 829
        ;  state := state_file8_set1
        ;info   829, 756
        movlw   11
        movwf   state
        goto    uart_manage__26
        ; line_number = 830
        ; case 4
uart_manage__23:
        ; # 0010 0xxx (Probe Get):
        ; line_number = 832
        ;  switch command & 7 start
        ;info   832, 759
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 845
        ; 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
        ; Add 2 NOP's until start of new page 
        nop     
        nop     
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 = 833
        ; case 0
uart_manage__11:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 834
        ; call zyx(position)
        ;info   834, 777
        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 = 835
        ; case 1
uart_manage__12:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 836
        ; call zyx(target)
        ;info   836, 786
        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 = 837
        ; case 2
uart_manage__13:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 838
        ; call zyx(error)
        ;info   838, 795
        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 = 839
        ; case 3
uart_manage__14:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 840
        ; call zyx(pid)
        ;info   840, 804
        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 = 841
        ; case 4
uart_manage__15:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 842
        ; call zyx(divisor)
        ;info   842, 813
        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 = 843
        ; case 5
uart_manage__16:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 844
        ; call zyx(kp)
        ;info   844, 822
        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 = 832
        ;  switch command & 7 done
        ; line_number = 846
        ; call uart_byte_put(high)
        ;info   846, 829
        movf    high,w
        call    uart_byte_put
        ; line_number = 847
        ;  state := state_probe_get1
        ;info   847, 831
        movlw   18
        movwf   state
uart_manage__26:
        ; line_number = 779
        ;  switch (command >> 3) & 7 done
        goto    uart_manage__41
        ; line_number = 849
        ; case 3
uart_manage__38:
        ; # 11xx xxxx:
        ; line_number = 851
        ;  switch (command >> 3) & 7 start
        ;info   851, 834
        ; 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+64
        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 = 852
        ; case 7
uart_manage__33:
        ; # 1111 1xxx:
        ; line_number = 854
        ;  switch command & 7 start
        ;info   854, 851
        ; 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 = 855
        ; case 4
uart_manage__27:
        ; # 1111 1100 (Address Set):
        ; line_number = 857
        ;  call uart_byte_put(address)
        ;info   857, 865
        movf    address,w
        call    uart_byte_put
        ; line_number = 858
        ;  state := state_address_set1
        ;info   858, 867
        movlw   14
        movwf   state
        goto    uart_manage__32
        ; line_number = 859
        ; case 5
uart_manage__28:
        ; # 1111 1101 (Id_Next):
        ; line_number = 861
        ;  call uart_byte_put(id[id_index])
        ;info   861, 870
        movf    id_index,w
        call    id
        call    uart_byte_put
        ; line_number = 862
        ;  id_index := id_index + 1
        ;info   862, 873
        incf    id_index,f
        ; line_number = 863
        ;  if id_index >= id.size start
        ;info   863, 874
        movlw   27
        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 = 864
        ; id_index := id_index - 1
        ;info   864, 877
        decf    id_index,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 863
        ;  if id_index >= id.size done
        ; line_number = 865
        ; state := state_echo_then_command
        ;info   865, 878
        movlw   1
        movwf   state
        goto    uart_manage__32
        ; line_number = 866
        ; case 6
uart_manage__29:
        ; # 1111 1110 (Id_Start):
        ; line_number = 868
        ;  id_index := 0
        ;info   868, 881
        clrf    id_index
        goto    uart_manage__32
        ; line_number = 869
        ; case 7
uart_manage__30:
        ; # 1111 1111 (Deselect):
        ; line_number = 871
        ;  _adden := _true
        ;info   871, 883
        bsf     _adden___byte, _adden___bit
        ; line_number = 872
        ;  state := state_select_wait
        ;info   872, 884
        clrf    state
uart_manage__32:
        ; line_number = 854
        ;  switch command & 7 done
uart_manage__36:
        ; line_number = 851
        ;  switch (command >> 3) & 7 done
uart_manage__41:
        ; line_number = 776
        ;  switch command >> 6 done
        goto    uart_manage__68
        ; line_number = 873
        ; case 3
uart_manage__52:
        ; # Value All Get 2nd response byte:
        ; line_number = 875
        ;  call uart_byte_put(middles[file24_index])
        ;info   875, 886
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 876
        ;  state := state_file24_full_get2
        ;info   876, 892
        movlw   4
        movwf   state
        goto    uart_manage__68
        ; line_number = 877
        ; case 4
uart_manage__53:
        ; # Value All Get 3rd response byte:
        ; line_number = 879
        ;  call uart_byte_put(lows[file24_index])
        ;info   879, 895
        movf    file24_index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        call    uart_byte_put
        ; line_number = 880
        ;  state := state_echo_then_command
        ;info   880, 901
        movlw   1
        movwf   state
        goto    uart_manage__68
        ; line_number = 881
        ; case 5
uart_manage__54:
        ; # Value All Set 2nd command byte:
        ; line_number = 883
        ;  high := command
        ;info   883, 904
        movf    uart_manage__command,w
        movwf   high
        ; line_number = 884
        ;  state := state_file24_full_set2
        ;info   884, 906
        movlw   6
        movwf   state
        goto    uart_manage__68
        ; line_number = 885
        ; case 6
uart_manage__55:
        ; # Value All Set 3rd command byte:
        ; line_number = 887
        ;  middle := command
        ;info   887, 909
        movf    uart_manage__command,w
        movwf   middle
        ; line_number = 888
        ;  state := state_file24_full_set3
        ;info   888, 911
        movlw   7
        movwf   state
        goto    uart_manage__68
        ; line_number = 889
        ; case 7
uart_manage__56:
        ; # Value All Set 4th command byte:
        ; line_number = 891
        ;  highs[file24_index] := high
        ;info   891, 914
        ; index_fsr_first
        movf    file24_index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    high,w
        movwf   __indf
        ; line_number = 892
        ;  middles[file24_index] := middle
        ;info   892, 920
        ; index_fsr_first
        movf    file24_index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    middle,w
        movwf   __indf
        ; line_number = 893
        ;  lows[file24_index] := command
        ;info   893, 926
        ; 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 = 894
        ;  call file24_updated()
        ;info   894, 932
        call    file24_updated
        ; line_number = 895
        ;  state := state_command
        ;info   895, 933
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 896
        ; case 8
uart_manage__57:
        ; # Value Low Set 2nd command byte:
        ; line_number = 898
        ;  lows[file24_index] := command
        ;info   898, 936
        ; 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 = 899
        ;  call file24_updated()
        ;info   899, 942
        call    file24_updated
        ; line_number = 900
        ;  state := state_command
        ;info   900, 943
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 901
        ; case 9
uart_manage__58:
        ; # Value Middle Set 2nd command byte:
        ; line_number = 903
        ;  middles[file24_index] := command
        ;info   903, 946
        ; 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 = 904
        ;  call file24_updated()
        ;info   904, 952
        call    file24_updated
        ; line_number = 905
        ;  state := state_command
        ;info   905, 953
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 906
        ; case 10
uart_manage__59:
        ; # Value High Set 2nd command byte:
        ; line_number = 908
        ;  highs[file24_index] := command
        ;info   908, 956
        ; 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 = 909
        ;  call file24_updated()
        ;info   909, 962
        call    file24_updated
        ; line_number = 910
        ;  state := state_command
        ;info   910, 963
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 911
        ; case 11
uart_manage__60:
        ; # File8 Set 2nd command byte:
        ; line_number = 913
        ;  file8[index] := command
        ;info   913, 966
        ; index_fsr_first
        movf    uart_manage__index,w
        addlw   file8
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    uart_manage__command,w
        movwf   __indf
        ; line_number = 914
        ;  switch index start
        ;info   914, 972
        ; switch_before:(data:00=uu=>00 code:XX=cc=>XX) size=6
        ; line_number = 922
        ; 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__46
        goto    uart_manage__43
        goto    uart_manage__46
        goto    uart_manage__46
        goto    uart_manage__46
        goto    uart_manage__46
        goto    uart_manage__44
        ; line_number = 915
        ; case 0
uart_manage__42:
        ; line_number = 916
        ; call configure_update()
        ;info   916, 985
        call    configure_update
        goto    uart_manage__46
        ; line_number = 917
        ; case 2
uart_manage__43:
        ; line_number = 918
        ; call speed_set(speed)
        ;info   918, 987
        movf    speed,w
        call    speed_set
        goto    uart_manage__46
        ; line_number = 919
        ; case 7
uart_manage__44:
        ; line_number = 920
        ; if command > file24_size start
        ;info   920, 990
        movlw   7
        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 = 921
        ; command := 0
        ;info   921, 995
        clrf    uart_manage__command
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 920
        ; if command > file24_size done
uart_manage__46:
        ; line_number = 914
        ;  switch index done
        ; line_number = 923
        ; state:= state_command
        ;info   923, 996
        movlw   2
        movwf   state
        goto    uart_manage__68
        ; line_number = 924
        ; case 14
uart_manage__61:
        ; # Ignore the echo and wait for the new address:
        ; line_number = 926
        ;  state := state_address_set2
        ;info   926, 999
        movlw   15
        movwf   state
        goto    uart_manage__68
        ; line_number = 927
        ; case 15
uart_manage__62:
        ; # First, copy of new address just arrived:
        ; line_number = 929
        ;  new_address := command
        ;info   929, 1002
        movf    uart_manage__command,w
        movwf   new_address
        ; # Return it
        ; line_number = 931
        ;  call uart_byte_put(new_address)
        ;info   931, 1004
        movf    new_address,w
        call    uart_byte_put
        ; line_number = 932
        ;  state := state_address_set3
        ;info   932, 1006
        movlw   16
        movwf   state
        goto    uart_manage__68
        ; line_number = 933
        ; case 16
uart_manage__63:
        ; # Ignore the echo
        ; line_number = 935
        ;  state := state_address_set4
        ;info   935, 1009
        movlw   17
        movwf   state
        goto    uart_manage__68
        ; line_number = 936
        ; case 17
uart_manage__64:
        ; # We have the 2nd copy of new addres.
        ; line_number = 938
        ;  if command = new_address start
        ;info   938, 1012
        ; 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__47
        ; # They match; write it in:
        ; line_number = 940
        ;  call rb2bus_eedata_write(new_address)
        ;info   940, 1016
        movf    new_address,w
        call    rb2bus_eedata_write
        ; line_number = 941
        ;  _gie := _true
        ;info   941, 1018
        bsf     _gie___byte, _gie___bit
        ; line_number = 942
        ;  address := new_address
        ;info   942, 1019
        movf    new_address,w
        movwf   address
        ; line_number = 943
        ;  call uart_byte_put(rb2_ok)
        ;info   943, 1021
        movlw   165
        goto    uart_manage__48
        ; 2GOTO: Starting code 2
uart_manage__47:
        ; # They do not match, return an error:
        ; line_number = 946
        ;  call uart_byte_put(0)
        ;info   946, 1023
        movlw   0
uart_manage__48:
        ; 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 = 938
        ;  if command = new_address done
        ; line_number = 947
        ; state := state_echo_then_command
        ;info   947, 1025
        movlw   1
        movwf   state
        goto    uart_manage__68
        ; line_number = 948
        ; case 18
uart_manage__65:
        ; line_number = 949
        ; call uart_byte_put(middle)
        ;info   949, 1028
        movf    middle,w
        call    uart_byte_put
        ; line_number = 950
        ;  state := state_probe_get2
        ;info   950, 1030
        movlw   19
        movwf   state
        goto    uart_manage__68
        ; line_number = 951
        ; case 19
uart_manage__66:
        ; line_number = 952
        ; call uart_byte_put(low)
        ;info   952, 1033
        movf    low,w
        call    uart_byte_put
        ; line_number = 953
        ;  state := state_echo_then_command
        ;info   953, 1035
        movlw   1
        movwf   state



uart_manage__68:
        ; line_number = 766
        ;  switch state done
uart_manage__69:
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 753
        ;  if uart_input_count != 0 done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 957
        ;info   957, 1038
        ; procedure file24_updated
file24_updated:
        ; arguments_none
        ; line_number = 959
        ;  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 = 964
        ;  switch file24_index start
        ;info   964, 1038
        ; 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 = 965
        ; case 0
file24_updated__6:
        ; line_number = 966
        ; do_nothing
        ;info   966, 1049
        goto    file24_updated__13
        ; line_number = 967
        ; case 1
file24_updated__7:
        ; line_number = 968
        ; file24_changed@target_index := _true
        ;info   968, 1050
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 = 969
        ; case 2
file24_updated__8:
        ; line_number = 970
        ; file24_changed@divisor_index := _true
        ;info   970, 1052
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 = 972
        ; case 3
file24_updated__9:
        ; line_number = 973
        ; file24_changed@kp_index := _true
        ;info   973, 1054
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 = 974
        ; case 4
file24_updated__10:
        ; line_number = 975
        ; file24_changed@ki_index := _true
        ;info   975, 1056
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 = 976
        ; case 5
file24_updated__11:
        ; line_number = 977
        ; file24_changed@kd_index := _true
        ;info   977, 1058
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 = 964
        ;  switch file24_index done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




file24_float_convert__0return equ globals___0+40
        ; line_number = 980
        ;info   980, 1060
        ; 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 = 981
        ; argument index byte
file24_float_convert__index equ globals___0+38
        ; line_number = 982
        ;  returns float32

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

        ; line_number = 986
        ;  local mask byte
file24_float_convert__mask equ globals___0+37

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 988
        ;  high := highs[index]
        ;info   988, 1061
        movf    file24_float_convert__index,w
        addlw   highs
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   high
        ; line_number = 989
        ;  middle := middles[index]
        ;info   989, 1067
        movf    file24_float_convert__index,w
        addlw   middles
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   middle
        ; line_number = 990
        ;  low := lows[index]
        ;info   990, 1073
        movf    file24_float_convert__index,w
        addlw   lows
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    __indf,w
        movwf   low
        ; line_number = 991
        ;  mask := index2mask[index]
        ;info   991, 1079
        movf    file24_float_convert__index,w
        call    index2mask
        movwf   file24_float_convert__mask
        ; line_number = 992
        ;  if high = 0 && middle = 0 && low = 0 start
        ;info   992, 1082
        ; 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 = 993
        ; file24_zero := file24_zero | mask
        ;info   993, 1091
        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 = 995
        ; file24_zero := file24_zero & (mask ^ 0xff)
        ;info   995, 1094
        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 = 992
        ;  if high = 0 && middle = 0 && low = 0 done
        ; line_number = 996
        ; return xyz(high, middle, low) start
        ; line_number = 996
        ;info   996, 1096
        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 = 996
        ; return xyz(high, middle, low) done


        ; delay after procedure statements=non-uniform




        ; line_number = 999
        ;info   999, 1111
        ; procedure status_update
status_update:
        ; arguments_none
        ; line_number = 1001
        ;  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 = 1005
        ;  do_nothing
        ;info   1005, 1111

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




        ; line_number = 1007
        ;info   1007, 1112
        ; procedure configure_update
configure_update:
        ; arguments_none
        ; line_number = 1009
        ;  returns_nothing

        ; line_number = 1011
        ;  local index byte
configure_update__index equ globals___0+44
        ; line_number = 1012
        ;  local state byte
configure_update__state equ globals___0+45

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

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1016
        ;  index := 0
        ;info   1016, 1112
        clrf    configure_update__index
        ; line_number = 1017
        ;  while index < 32 start
configure_update__1:
        ;info   1017, 1113
        movlw   32
        subwf   configure_update__index,w
        ; =>bit_code_emit@symbol(): sym=__c
        ; No 1TEST: true.size=0 false.size=27
        ; No 2TEST: true.size=0 false.size=27
        ; 1GOTO: Single test with GOTO
        btfsc   __c___byte, __c___bit
        goto    configure_update__6
        ; line_number = 1018
        ; state := states[index]
        ;info   1018, 1117
        movf    configure_update__index,w
        call    states
        movwf   configure_update__state
        ; line_number = 1019
        ;  if position_reverse start
        ;info   1019, 1120
        ; =>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__5
        ; # Swap the increment and decrement bits in {xstates}:
        ; line_number = 1021
        ;  state := state & 0xf | (state << 2) & 0xc0 | (state >> 2) & 0x30
        ;info   1021, 1122
configure_update__2 equ globals___0+65
        movlw   15
        andwf   configure_update__state,w
        movwf   configure_update__2
configure_update__3 equ globals___0+66
        rlf     configure_update__state,w
        movwf   configure_update__3
        rlf     configure_update__3,w
        andlw   192
        iorwf   configure_update__2,f
configure_update__4 equ globals___0+67
        rrf     configure_update__state,w
        movwf   configure_update__4
        rrf     configure_update__4,w
        andlw   48
        iorwf   configure_update__2,w
        movwf   configure_update__state
        ; Recombine size1 = 0 || size2 = 0
configure_update__5:
        ; line_number = 1019
        ;  if position_reverse done
        ; line_number = 1022
        ; xstates[index] := state
        ;info   1022, 1136
        ; index_fsr_first
        movf    configure_update__index,w
        addlw   xstates
        movwf   __fsr
        bsf     __irp___byte, __irp___bit
        movf    configure_update__state,w
        movwf   __indf
        ; line_number = 1023
        ;  index := index + 1
        ;info   1023, 1142
        incf    configure_update__index,f


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




        ; line_number = 1026
        ;info   1026, 1145
        ; 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 = 1027
        ; argument value byte
uart_byte_put__value equ globals___0+46
        ; line_number = 1028
        ;  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 = 1033
        ;  while !_txif start
uart_byte_put__1:
        ;info   1033, 1146
        ; =>bit_code_emit@symbol(): sym=_txif
        ; 1TEST: Single test with code in skip slot
        btfss   _txif___byte, _txif___bit
        ; line_number = 1034
        ; do_nothing
        ;info   1034, 1147

        goto    uart_byte_put__1
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 1033
        ;  while !_txif done
        ; # Ship {value} out to the bus with 9th bit turned off:
        ; line_number = 1037
        ;  _adden := _false
        ;info   1037, 1148
        bcf     _adden___byte, _adden___bit
        ; line_number = 1038
        ;  _tx9d := _false
        ;info   1038, 1149
        bcf     _tx9d___byte, _tx9d___bit
        ; line_number = 1039
        ;  _txreg := value
        ;info   1039, 1150
        movf    uart_byte_put__value,w
        movwf   _txreg


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




        ; line_number = 1042
        ;info   1042, 1153
        ; procedure uart_initialize
uart_initialize:
        ; arguments_none
        ; line_number = 1044
        ;  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 = 1053
        ;  _trisc@5 := _true
        ;info   1053, 1153
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 = 1054
        ;  _trisc@4 := _true
        ;info   1054, 1155
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 = 1057
        ;  _txsta := 0
        ;info   1057, 1156
        bcf     __rp0___byte, __rp0___bit
        clrf    _txsta
        ; line_number = 1058
        ;  _tx9 := _true
        ;info   1058, 1158
        bsf     _tx9___byte, _tx9___bit
        ; line_number = 1059
        ;  _txen := _true
        ;info   1059, 1159
        bsf     _txen___byte, _txen___bit
        ; line_number = 1060
        ;  _brgh := _true
        ;info   1060, 1160
        bsf     _brgh___byte, _brgh___bit

        ; # Initialize the {_rcsta} register:
        ; line_number = 1063
        ;  _rcsta := 0
        ;info   1063, 1161
        clrf    _rcsta
        ; line_number = 1064
        ;  _spen := _true
        ;info   1064, 1162
        bsf     _spen___byte, _spen___bit
        ; line_number = 1065
        ;  _rx9 := _true
        ;info   1065, 1163
        bsf     _rx9___byte, _rx9___bit
        ; line_number = 1066
        ;  _cren := _true
        ;info   1066, 1164
        bsf     _cren___byte, _cren___bit
        ; line_number = 1067
        ;  _adden := _true
        ;info   1067, 1165
        bsf     _adden___byte, _adden___bit

        ; # Set up the baud rate generator:
        ; line_number = 1070
        ;  _baudctl := 0
        ;info   1070, 1166
        clrf    _baudctl
        ; line_number = 1071
        ;  _brg16 := _true
        ;info   1071, 1167
        bsf     _brg16___byte, _brg16___bit
        ; line_number = 1072
        ;  _spbrg := _eusart_500000_low
        ;info   1072, 1168
        movlw   9
        movwf   _spbrg
        ; line_number = 1073
        ;  _spbrgh := _eusart_500000_high
        ;info   1073, 1170
        clrf    _spbrgh

        ; line_number = 1075
        ;  state := state_select_wait
        ;info   1075, 1171
        clrf    state
        ; line_number = 1076
        ;  id_index := 0
        ;info   1076, 1172
        clrf    id_index
        ; line_number = 1077
        ;  uart_input_in_index := 0
        ;info   1077, 1173
        clrf    uart_input_in_index
        ; line_number = 1078
        ;  uart_input_out_index := 0
        ;info   1078, 1174
        clrf    uart_input_out_index
        ; line_number = 1079
        ;  uart_input_count := 0
        ;info   1079, 1175
        clrf    uart_input_count
        ; line_number = 1080
        ;  uart_input_pending := _false
        ;info   1080, 1176
        bcf     uart_input_pending___byte, uart_input_pending___bit

        ; # Turn on the interrupts:
        ; line_number = 1083
        ;  _txie := _false
        ;info   1083, 1177
        bsf     __rp0___byte, __rp0___bit
        bcf     _txie___byte, _txie___bit
        ; line_number = 1084
        ;  _rcie := _true
        ;info   1084, 1179
        bsf     _rcie___byte, _rcie___bit


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




        ; line_number = 1087
        ;info   1087, 1182
        ; procedure speed_set
speed_set:
        ; Last argument is sitting in W; save into argument variable
        movwf   speed_set__speed
        ; delay=4294967295
        ; line_number = 1088
        ; argument speed byte
speed_set__speed equ globals___0+47
        ; line_number = 1089
        ;  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 = 1094
        ;  motor1_speed := speed
        ;info   1094, 1183
        movf    speed_set__speed,w
        movwf   motor1_speed
        ; line_number = 1095
        ;  if motor1_speed@7 start
        ;info   1095, 1185
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 = 1097
        ;  if motor_reverse start
        ;info   1097, 1187
        ; =>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 = 1098
        ; motor1_on_mask := 1
        ;info   1098, 1188
        movlw   1
        btfss   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1100
        ; motor1_on_mask := 2
        ;info   1100, 1190
        movlw   2
        movwf   motor1_on_mask
        ; line_number = 1097
        ;  if motor_reverse done
        ; line_number = 1101
        ; motor1_pulse_width := speed << 1
        ;info   1101, 1192
        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 = 1103
        ; if speed = 0 start
        ;info   1103, 1196
        ; 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 = 1105
        ;  motor1_on_mask := 0
        ;info   1105, 1199
        clrf    motor1_on_mask
        goto    speed_set__2
        ; 2GOTO: Starting code 2
speed_set__1:
        ; # Forward direction:
        ; line_number = 1108
        ;  if motor_reverse start
        ;info   1108, 1201
        ; =>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 = 1109
        ; motor1_on_mask := 2
        ;info   1109, 1202
        movlw   2
        btfss   motor_reverse___byte, motor_reverse___bit
        ; line_number = 1111
        ; motor1_on_mask := 1
        ;info   1111, 1204
        movlw   1
        movwf   motor1_on_mask
        ; line_number = 1108
        ;  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 = 1103
        ; if speed = 0 done
        ; line_number = 1112
        ; motor1_pulse_width := 0xff - (speed << 1)
        ;info   1112, 1206
speed_set__3 equ globals___0+68
        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 = 1095
        ;  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 = 1119
        ; constant rb2bus_eedata_address = 0xfe
rb2bus_eedata_address equ 254

        ; line_number = 1121
        ;info   1121, 1211
        ; procedure rb2bus_eedata_read
rb2bus_eedata_read:
        ; arguments_none
        ; line_number = 1123
        ;  returns byte

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

        ; line_number = 1128
        ;  local temp1 byte
rb2bus_eedata_read__temp1 equ globals___0+48
        ; line_number = 1129
        ;  local temp2 byte
rb2bus_eedata_read__temp2 equ globals___0+49

        ; # Read the first byte (the address):
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1132
        ;  _eecon1 := 0
        ;info   1132, 1211
        bsf     __rp0___byte, __rp0___bit
        clrf    _eecon1
        ; line_number = 1133
        ;  _eeadr := rb2bus_eedata_address
        ;info   1133, 1213
        movlw   254
        movwf   _eeadr
        ; line_number = 1134
        ;  _rd := _true
        ;info   1134, 1215
        bsf     _rd___byte, _rd___bit
        ; line_number = 1135
        ;  temp1 := _eedat
        ;info   1135, 1216
        movf    _eedat,w
        bcf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_read__temp1

        ; # Read the second byte (the 1'z complement)
        ; line_number = 1138
        ;  _eeadr := _eeadr + 1
        ;info   1138, 1219
        bsf     __rp0___byte, __rp0___bit
        incf    _eeadr,f
        ; line_number = 1139
        ;  _rd := _true
        ;info   1139, 1221
        bsf     _rd___byte, _rd___bit
        ; line_number = 1140
        ;  temp2 := _eedat
        ;info   1140, 1222
        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 = 1143
        ;  if temp1 = (0xff ^ temp2) start
        ;info   1143, 1225
        ; 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 = 1145
        ;  return temp1 start
        ; line_number = 1145
        ;info   1145, 1229
        movf    rb2bus_eedata_read__temp1,w
        return  
        ; line_number = 1145
        ;  return temp1 done

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


        ; delay after procedure statements=non-uniform




        ; line_number = 1151
        ;info   1151, 1232
        ; 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 = 1152
        ; argument address byte
rb2bus_eedata_write__address equ globals___0+50
        ; line_number = 1153
        ;  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 = 1159
        ;  _eecon1 := 0
        ;info   1159, 1233
        bsf     __rp0___byte, __rp0___bit
        clrf    _eecon1
        ; line_number = 1160
        ;  _eeadr := rb2bus_eedata_address
        ;info   1160, 1235
        movlw   254
        movwf   _eeadr
        ; line_number = 1161
        ;  _eedat := address
        ;info   1161, 1237
        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 = 1164
        ;  loop_exactly 2 start
        ;info   1164, 1241
rb2bus_eedata_write__1 equ globals___0+69
        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 = 1168
        ;  _wren := _true
        ;info   1168, 1244
        bsf     __rp0___byte, __rp0___bit
        bsf     _wren___byte, _wren___bit
        ; line_number = 1169
        ;  _gie := _false
        ;info   1169, 1246
        bcf     _gie___byte, _gie___bit
        ; line_number = 1170
        ;  _eecon2 := 0x55
        ;info   1170, 1247
        movlw   85
        movwf   _eecon2
        ; line_number = 1171
        ;  _eecon2 := 0xaa
        ;info   1171, 1249
        movlw   170
        movwf   _eecon2
        ; # Start the write:
        ; line_number = 1173
        ;  _wr := _true
        ;info   1173, 1251
        bsf     _wr___byte, _wr___bit

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

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

        ; # Prepare the second byte of data:
        ; line_number = 1183
        ;  _eeadr := _eeadr + 1
        ;info   1183, 1255
        incf    _eeadr,f
        ; line_number = 1184
        ;  _eedat := address ^ 0xff
        ;info   1184, 1256
        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 = 1164
        ;  loop_exactly 2 wrap-up
        decfsz  rb2bus_eedata_write__1,f
        goto    rb2bus_eedata_write__2
        ; line_number = 1164
        ;  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+54
        ; line_number = 1188
        ;info   1188, 1264
        ; procedure xyz
xyz:
        ; Last argument is sitting in W; save into argument variable
        movwf   xyz__low
        ; delay=4294967295
        ; line_number = 1189
        ; argument high byte
xyz__high equ globals___0+51
        ; line_number = 1190
        ; argument middle byte
xyz__middle equ globals___0+52
        ; line_number = 1191
        ; argument low byte
xyz__low equ globals___0+53
        ; line_number = 1192
        ;  returns float32
        ; line_number = 1193
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1195
        ;  assemble
        ;info   1195, 1265
        ; # Grab the high byte:
        ; line_number = 1197
        ;info   1197, 1265
        movf    xyz__high,w
        ; line_number = 1198
        ;info   1198, 1266
        ; databank xyz, _float32_aargb0
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1199
        ;info   1199, 1267
        movwf   _float32_aargb0

        ; # Grab the middle byte:
        ; line_number = 1202
        ;info   1202, 1268
        ; databank _float32_aargb0, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1203
        ;info   1203, 1269
        movf    xyz__middle,w
        ; line_number = 1204
        ;info   1204, 1270
        ; databank xyz, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1205
        ;info   1205, 1271
        movwf   _float32_aargb1

        ; # Grab the low byte:
        ; line_number = 1208
        ;info   1208, 1272
        ; databank _float32_aargb1, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1209
        ;info   1209, 1273
        movf    xyz__low,w
        ; line_number = 1210
        ;info   1210, 1274
        ; databank xyz, _float32_aargb2
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1211
        ;info   1211, 1275
        movwf   _float32_aargb2

        ; # Do the conversion to float32:
        ; line_number = 1214
        ;info   1214, 1276
        ; databank _float32_aargb2, _float32_from_integer24
        ; line_number = 1215
        ;info   1215, 1276
        ; codebank xyz, _float32_from_integer24
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1216
        ;info   1216, 1277
        call    _float32_from_integer24

        ; # Result is in the float32 A "register"l not move to 0return:
        ; line_number = 1219
        ;info   1219, 1278
        movlw   xyz__0return>>1
        ; line_number = 1220
        ;info   1220, 1279
        ; databank _float32_from_integer24, _float32_pointer_store
        ; line_number = 1221
        ;info   1221, 1279
        ; codebank _float32_from_integer24, _float32_pointer_store
        ; line_number = 1222
        ;info   1222, 1279
        call    _float32_pointer_store

        ; # Get out code and data banks back home:
        ; line_number = 1225
        ;info   1225, 1280
        ; databank _float32_pointer_store, xyz
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1226
        ;info   1226, 1281
        ; codebank _float32_pointer_store, xyz
        bcf     __cb0___byte, __cb0___bit
        ; line_number = 1227
        ;info   1227, 1282
        return  

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




        ; # 24-bit convert to from float code:
        ; line_number = 1230
        ;info   1230, 1283
        ; procedure zyx
zyx:
        ; line_number = 1231
        ; argument value float32
zyx__value equ globals___0+58
        ; line_number = 1232
        ;  returns byte
        ; line_number = 1233
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:X0=cu=>X0)
        ; line_number = 1235
        ;  assemble
        ;info   1235, 1283
        ; line_number = 1236
        ;info   1236, 1283
        movlw   zyx__value>>1
        ; line_number = 1237
        ;info   1237, 1284
        ; databank zyx, _float32_pointer_load
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1238
        ;info   1238, 1285
        ; codebank zyx, _float32_pointer_load
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1239
        ;info   1239, 1286
        call    _float32_pointer_load

        ; line_number = 1241
        ;info   1241, 1287
        ; databank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 1242
        ;info   1242, 1287
        ; codebank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 1243
        ;info   1243, 1287
        call    _float32_integer24_convert
        ; line_number = 1244
        ;info   1244, 1288
        ; codebank _float32_integer24_convert, zyx
        bcf     __cb0___byte, __cb0___bit

        ; line_number = 1246
        ;info   1246, 1289
        ; databank _float32_integer24_convert, _float32_aargb0
        ; line_number = 1247
        ;info   1247, 1289
        movf    _float32_aargb0,w
        ; line_number = 1248
        ;info   1248, 1290
        ; databank _float32_aargb0, high
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1249
        ;info   1249, 1291
        movwf   high

        ; line_number = 1251
        ;info   1251, 1292
        ; databank high, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1252
        ;info   1252, 1293
        movf    _float32_aargb1,w
        ; line_number = 1253
        ;info   1253, 1294
        ; databank _float32_aargb0, middle
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1254
        ;info   1254, 1295
        movwf   middle

        ; line_number = 1256
        ;info   1256, 1296
        ; databank middle, _float32_aargb2
        bsf     __rp0___byte, __rp0___bit
        ; line_number = 1257
        ;info   1257, 1297
        movf    _float32_aargb2,w
        ; line_number = 1258
        ;info   1258, 1298
        ; databank _float32_aargb0, low
        bcf     __rp0___byte, __rp0___bit
        ; line_number = 1259
        ;info   1259, 1299
        movwf   low

        ; line_number = 1261
        ;info   1261, 1300
        ; databank low, zyx

        ; line_number = 1263
        ;info   1263, 1300
        return  



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




        ; line_number = 1267
        ; 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 = 1267
        ; string index2mask = "\1,2,4,8,16,32,64,128\" start
        ; line_number = 1268
        ; string id = "\16,0,21,1,3,13\MidiMotor1E-A\7\Gramson" start
        ; id = '\16,0,21,1,3,13\MidiMotor1E-A\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 27
id___base:
        retlw   16
        retlw   0
        retlw   21
        retlw   1
        retlw   3
        retlw   13
        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   65
        retlw   7
        retlw   71
        retlw   114
        retlw   97
        retlw   109
        retlw   115
        retlw   111
        retlw   110
        ; line_number = 1268
        ; string id = "\16,0,21,1,3,13\MidiMotor1E-A\7\Gramson" start

        ; # {state} is defined by another file:
        ; line_number = 1271
        ; 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 = 1271
        ; 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=70 Bits=3 Available=9
        ; Region="globals___1" Address=160" Size=80 Bytes=68 Bits=0 Available=12
        ; Region="globals___2" Address=288" Size=80 Bytes=74 Bits=0 Available=6
        ; Region="shared___globals" Address=112" Size=16 Bytes=2 Bits=0 Available=14
        end
