        radix   dec
        ; Code bank 0; Start address: 0; End address: 2047
        org     0

        ; Define start addresses for data regions
shared___globals equ 112
globals___0 equ 32
globals___1 equ 160
globals___2 equ 272
globals___3 equ 400
__indf equ 0
__pcl equ 2
__status equ 3
__fsr equ 4
__c___byte equ 3
__c___bit equ 0
__z___byte equ 3
__z___bit equ 2
__rp0___byte equ 3
__rp0___bit equ 5
__rp1___byte equ 3
__rp1___bit equ 6
__irp___byte equ 3
__irp___bit equ 7
__pclath equ 10
__cb0___byte equ 10
__cb0___bit equ 3
__cb1___byte equ 10
__cb1___bit equ 4
        ; # Copyright (c) 2006-2009 by Wayne C. Gramlich.
        ; # All rights reserved.

        ; # This firmware is for the Shaft2 RoboBricks module.  It manages two
        ; # LS7366 shaft encoder chips.  It can be used to just read the shaft
        ; # counter values or it can be used to perform deduced location
        ; # reckoning (aka "dead reckoning") for a differentially steered
        ; # robot.  In the latter mode it can also keep track of the bearing
        ; # and distance to another location.  It is strongly recommend that
        ; # you read the top level documentation *before* digging into this
        ; # code.
        ; #
        ; # The overall architecture is to have two processes called the
        ; # "location process" and the "UART process".  The location process
        ; # is continuously reading the shaft encoder chips and recomputing
        ; # the current location and bearing.  The UART process is strictly
        ; # interrupt driven and deals with I/O traffic to/from the RoboBricks2
        ; # bus via the UART.  There is very little synchronoziation between the
        ; # two processes, they run pretty much independently of one another.
        ; #
        ; # At the end of each computation cycle, the location process will
        ; # disable interrupts and make a copy of its results from "working"
        ; # memory into "stable" memory.  This copy is performed quickly with
        ; # interrupts disabled to ensure that the interrupt driven UART process
        ; # will always see a consistent version of data in the "stable" memory.
        ; #
        ; # Similarly, every once and while, the client software will issue a
        ; # command to the UART process that causes it to make a copy from the
        ; # "stable" memory into "frozen" memory.  Since "stable" memory is
        ; # always consistent (due to interrupts being diabled during the copy), 
        ; # the "frozen" is also consistent.
        ; #
        ; # Alas, this architecture requires three copies of the interesting
        ; # data ("working", "stable", and "frozen"), which chews up memory
        ; # which is in short supply.
        ; #
        ; # Whenever the UART process needs to communicate status change
        ; # information down to the location process, it sets the appropriate
        ; # "request" bit.  Every computation cycle, the location process
        ; # will query each request bit and perform the requested operation.
        ; #
        ; # Hopefully, this introduction in conjunction with the top level
        ; # documentation will help demistify the code below.

        ; # This module uses a PIC16f876A:
        ; buffer = 'shaft2'
        ; line_number = 47
        ; library _pic16f876a entered

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

        ; buffer = '_pic16f876a'
        ; line_number = 6
        ; processor pic16f876a
        ; line_number = 7
        ; configure_address 0x2007
        ; line_number = 8
        ;  configure_fill 0x01030
        ; line_number = 9
        ;  configure_option cp: off = 0x2000
        ; line_number = 10
        ;  configure_option cp: on = 0x0000
        ; line_number = 11
        ;  configure_option debug: on = 0x000
        ; line_number = 12
        ;  configure_option debug: off = 0x800
        ; line_number = 13
        ;  configure_option wrt: on = 0x000
        ; line_number = 14
        ;  configure_option wrt: off = 0x300
        ; line_number = 15
        ;  configure_option cpd: on = 0x000
        ; line_number = 16
        ;  configure_option cpd: off = 0x100
        ; line_number = 17
        ;  configure_option lvp: on = 0x80
        ; line_number = 18
        ;  configure_option lvp: off = 0x00
        ; line_number = 19
        ;  configure_option boren: on = 0x40
        ; line_number = 20
        ;  configure_option boren: off = 0x00
        ; line_number = 21
        ;  configure_option pwrte: on = 0
        ; line_number = 22
        ;  configure_option pwrte: off = 8
        ; line_number = 23
        ;  configure_option wdte: on = 4
        ; line_number = 24
        ;  configure_option wdte: off = 0
        ; line_number = 25
        ;  configure_option fosc: rc = 3
        ; line_number = 26
        ;  configure_option fosc: hs = 2
        ; line_number = 27
        ;  configure_option fosc: xt = 1
        ; line_number = 28
        ;  configure_option fosc: lp = 0
        ; line_number = 29
        ;  code_bank 0x0 : 0x7ff
        ; line_number = 30
        ;  code_bank 0x800 : 0xfff
        ; line_number = 31
        ;  code_bank 0x1000 : 0x17ff
        ; line_number = 32
        ;  code_bank 0x1800 : 0x1fff
        ; line_number = 33
        ;  data_bank 0x0 : 0x7f
        ; line_number = 34
        ;  data_bank 0x80 : 0xff
        ; line_number = 35
        ;  data_bank 0x100 : 0x17f
        ; line_number = 36
        ;  data_bank 0x180 : 0x1ff
        ; line_number = 37
        ;  global_region 0x20 : 0x6f
        ; line_number = 38
        ;  global_region 0xa0 : 0xef
        ; line_number = 39
        ;  global_region 0x110 : 0x16f
        ; line_number = 40
        ;  global_region 0x190 : 0x1ff
        ; line_number = 41
        ;  shared_region 0x70 : 0x7f
        ; line_number = 42
        ;  interrupts_possible
        ; line_number = 43
        ;  packages pdip = 28
        ; line_number = 44
        ;  pin mclr, vpp, thv, mclr_unused
        ; line_number = 45
        ; pin_bindings pdip = 1
        ; line_number = 46
        ; pin ra0_in, ra0_out, an0, ra0_unused
        ; line_number = 47
        ; pin_bindings pdip = 2
        ; line_number = 48
        ;  bind_to _porta@0
        ; line_number = 49
        ;  or_if ra0_in _trisa 1
        ; line_number = 50
        ;  or_if ra0_in _adcon1 7
        ; line_number = 51
        ;  or_if ra0_in _adcon0 0
        ; line_number = 52
        ;  or_if ra0_in _cmcon 7
        ; line_number = 53
        ;  or_if ra0_out _trisa 0
        ; line_number = 54
        ;  or_if ra0_out _adcon1 7
        ; line_number = 55
        ;  or_if ra0_out _adcon0 0
        ; line_number = 56
        ;  or_if ra0_out _cmcon 7
        ; line_number = 57
        ;  or_if ra0_unused _trisa 1
        ; line_number = 58
        ;  or_if ra0_unused _adcon1 7
        ; line_number = 59
        ;  or_if ra0_unused _adcon0 0
        ; line_number = 60
        ;  or_if ra0_unused _cmcon 7
        ; line_number = 61
        ; pin ra1_in, ra1_out, an1, ra1_unused
        ; line_number = 62
        ; pin_bindings pdip = 3
        ; line_number = 63
        ;  bind_to _porta@1
        ; line_number = 64
        ;  or_if ra1_in _trisa 2
        ; line_number = 65
        ;  or_if ra1_in _adcon1 7
        ; line_number = 66
        ;  or_if ra1_in _adcon0 0
        ; line_number = 67
        ;  or_if ra1_in _cmcon 7
        ; line_number = 68
        ;  or_if ra1_out _trisa 0
        ; line_number = 69
        ;  or_if ra1_out _adcon1 7
        ; line_number = 70
        ;  or_if ra1_out _adcon0 0
        ; line_number = 71
        ;  or_if ra1_out _cmcon 7
        ; line_number = 72
        ;  or_if ra1_unused _trisa 2
        ; line_number = 73
        ;  or_if ra1_unused _adcon1 7
        ; line_number = 74
        ;  or_if ra1_unused _adcon0 0
        ; line_number = 75
        ;  or_if ra1_unused _cmcon 7
        ; line_number = 76
        ; pin ra2_in, ra2_out, an2, vref_minus, ra2_unused
        ; line_number = 77
        ; pin_bindings pdip = 4
        ; line_number = 78
        ;  bind_to _porta@2
        ; line_number = 79
        ;  or_if ra2_in _trisa 4
        ; line_number = 80
        ;  or_if ra2_in _adcon1 7
        ; line_number = 81
        ;  or_if ra2_in _adcon0 0
        ; line_number = 82
        ;  or_if ra2_in _cmcon 7
        ; line_number = 83
        ;  or_if ra2_out _trisa 0
        ; line_number = 84
        ;  or_if ra2_out _adcon1 7
        ; line_number = 85
        ;  or_if ra2_out _adcon0 0
        ; line_number = 86
        ;  or_if ra2_out _cmcon 7
        ; line_number = 87
        ;  or_if ra2_unused _trisa 4
        ; line_number = 88
        ;  or_if ra2_unused _adcon1 7
        ; line_number = 89
        ;  or_if ra2_unused _adcon0 0
        ; line_number = 90
        ;  or_if ra2_unused _cmcon 7
        ; line_number = 91
        ; pin ra3_in, ra3_out, an3, vrev_plus, ra3_unused
        ; line_number = 92
        ; pin_bindings pdip = 5
        ; line_number = 93
        ;  bind_to _porta@3
        ; line_number = 94
        ;  or_if ra3_in _trisa 8
        ; line_number = 95
        ;  or_if ra3_in _adcon1 7
        ; line_number = 96
        ;  or_if ra3_in _adcon0 0
        ; line_number = 97
        ;  or_if ra3_in _cmcon 7
        ; line_number = 98
        ;  or_if ra3_out _trisa 0
        ; line_number = 99
        ;  or_if ra3_out _adcon1 7
        ; line_number = 100
        ;  or_if ra3_out _adcon0 0
        ; line_number = 101
        ;  or_if ra3_out _cmcon 7
        ; line_number = 102
        ;  or_if ra3_unused _trisa 8
        ; line_number = 103
        ;  or_if ra3_unused _adcon1 7
        ; line_number = 104
        ;  or_if ra3_unused _adcon0 0
        ; line_number = 105
        ;  or_if ra3_unused _cmcon 7
        ; line_number = 106
        ; pin ra4_in, ra4_out, t0cki, ra4_unused
        ; line_number = 107
        ; pin_bindings pdip = 6
        ; line_number = 108
        ;  bind_to _porta@4
        ; line_number = 109
        ;  or_if ra4_in _trisa 16
        ; line_number = 110
        ;  or_if ra4_in _adcon1 7
        ; line_number = 111
        ;  or_if ra4_in _adcon0 0
        ; line_number = 112
        ;  or_if ra4_out _trisa 0
        ; line_number = 113
        ;  or_if ra4_out _adcon1 7
        ; line_number = 114
        ;  or_if ra4_out _adcon0 0
        ; line_number = 115
        ;  or_if ra4_unused _trisa 16
        ; line_number = 116
        ;  or_if ra4_unused _adcon1 7
        ; line_number = 117
        ;  or_if ra4_unused _adcon0 0
        ; line_number = 118
        ; pin ra5_in, ra5_out, an4, ra5_unused
        ; line_number = 119
        ; pin_bindings pdip = 7
        ; line_number = 120
        ;  bind_to _porta@5
        ; line_number = 121
        ;  or_if ra5_in _trisa 32
        ; line_number = 122
        ;  or_if ra5_in _adcon1 7
        ; line_number = 123
        ;  or_if ra5_in _adcon1 0
        ; line_number = 124
        ;  or_if ra5_out _trisa 0
        ; line_number = 125
        ;  or_if ra5_out _adcon1 7
        ; line_number = 126
        ;  or_if ra5_out _adcon0 0
        ; line_number = 127
        ;  or_if ra5_unused _trisa 32
        ; line_number = 128
        ;  or_if ra5_unused _adcon1 7
        ; line_number = 129
        ;  or_if ra5_unused _adcon1 0
        ; line_number = 130
        ; pin vss, ground
        ; line_number = 131
        ; pin_bindings pdip = 8
        ; line_number = 132
        ; pin osc1, clkin
        ; line_number = 133
        ; pin_bindings pdip = 9
        ; line_number = 134
        ; pin osc2, clkout
        ; line_number = 135
        ; pin_bindings pdip = 10
        ; line_number = 136
        ; pin rc0_in, rc0_out, t1oso, t1cki, rc0_unused
        ; line_number = 137
        ; pin_bindings pdip = 11
        ; line_number = 138
        ;  bind_to _portc@0
        ; line_number = 139
        ;  or_if rc0_in _trisc 1
        ; line_number = 140
        ;  or_if rc0_in _adcon1 7
        ; line_number = 141
        ;  or_if rc0_in _adcon0 0
        ; line_number = 142
        ;  or_if rc0_out _trisc 0
        ; line_number = 143
        ;  or_if rc0_out _adcon1 7
        ; line_number = 144
        ;  or_if rc0_out _adcon0 0
        ; line_number = 145
        ;  or_if rc0_unused _trisc 1
        ; line_number = 146
        ;  or_if rc0_unused _adcon1 7
        ; line_number = 147
        ;  or_if rc0_unused _adcon0 0
        ; line_number = 148
        ; pin rc1_in, rc1_out, t1osi, ccp2, rc1_unused
        ; line_number = 149
        ; pin_bindings pdip = 12
        ; line_number = 150
        ;  bind_to _portc@1
        ; line_number = 151
        ;  or_if rc1_in _trisc 2
        ; line_number = 152
        ;  or_if rc1_in _adcon1 7
        ; line_number = 153
        ;  or_if rc1_in _adcon0 0
        ; line_number = 154
        ;  or_if rc1_out _trisc 0
        ; line_number = 155
        ;  or_if rc1_out _adcon1 7
        ; line_number = 156
        ;  or_if rc1_out _adcon0 0
        ; line_number = 157
        ;  or_if rc1_unused _trisc 2
        ; line_number = 158
        ;  or_if rc1_unused _adcon1 7
        ; line_number = 159
        ;  or_if rc1_unused _adcon0 0
        ; line_number = 160
        ; pin rc2_in, rc2_out, ccp1, rc2_unused
        ; line_number = 161
        ; pin_bindings pdip = 13
        ; line_number = 162
        ;  bind_to _portc@2
        ; line_number = 163
        ;  or_if rc2_in _trisc 4
        ; line_number = 164
        ;  or_if rc2_in _adcon1 7
        ; line_number = 165
        ;  or_if rc2_in _adcon0 0
        ; line_number = 166
        ;  or_if rc2_out _trisc 0
        ; line_number = 167
        ;  or_if rc2_out _adcon1 7
        ; line_number = 168
        ;  or_if rc2_out _adcon0 0
        ; line_number = 169
        ;  or_if rc2_unused _trisc 4
        ; line_number = 170
        ;  or_if rc2_unused _adcon1 7
        ; line_number = 171
        ;  or_if rc2_unused _adcon0 0
        ; line_number = 172
        ; pin rc3_in, rc3_out, sck_master, sck_slave, scl, rc3_unused
        ; line_number = 173
        ; pin_bindings pdip = 14
        ; line_number = 174
        ;  bind_to _portc@3
        ; line_number = 175
        ;  or_if rc3_in _trisc 8
        ; line_number = 176
        ;  or_if rc3_in _adcon1 7
        ; line_number = 177
        ;  or_if rc3_in _adcon0 0
        ; line_number = 178
        ;  or_if rc3_out _trisc 0
        ; line_number = 179
        ;  or_if rc3_out _adcon1 7
        ; line_number = 180
        ;  or_if rc3_out _adcon0 0
        ; line_number = 181
        ;  or_if sck_slave _trisc 8
        ; line_number = 182
        ;  or_if sck_slave _adcon1 7
        ; line_number = 183
        ;  or_if sck_slave _adcon0 0
        ; line_number = 184
        ;  or_if sck_master _trisc 0
        ; line_number = 185
        ;  or_if sck_master _adcon1 7
        ; line_number = 186
        ;  or_if sck_master _adcon0 0
        ; line_number = 187
        ;  or_if rc3_unused _trisc 8
        ; line_number = 188
        ;  or_if rc3_unused _adcon1 7
        ; line_number = 189
        ;  or_if rc3_unused _adcon0 0
        ; line_number = 190
        ; pin rc4_in, rc4_out, sdi, sda, rc4_unused
        ; line_number = 191
        ; pin_bindings pdip = 15
        ; line_number = 192
        ;  bind_to _portc@4
        ; line_number = 193
        ;  or_if rc4_in _trisc 16
        ; line_number = 194
        ;  or_if rc4_in _adcon1 7
        ; line_number = 195
        ;  or_if rc4_in _adcon0 0
        ; line_number = 196
        ;  or_if rc4_out _trisc 0
        ; line_number = 197
        ;  or_if rc4_out _adcon1 7
        ; line_number = 198
        ;  or_if rc4_out _adcon0 0
        ; line_number = 199
        ;  or_if sdi _trisc 16
        ; line_number = 200
        ;  or_if sdi _adcon1 7
        ; line_number = 201
        ;  or_if sdi _adcon0 0
        ; line_number = 202
        ;  or_if rc4_unused _trisc 16
        ; line_number = 203
        ;  or_if rc4_unused _adcon1 7
        ; line_number = 204
        ;  or_if rc4_unused _adcon0 0
        ; line_number = 205
        ; pin rc5_in, rc5_out, sdo, rc5_unused
        ; line_number = 206
        ; pin_bindings pdip = 16
        ; line_number = 207
        ;  bind_to _portc@5
        ; line_number = 208
        ;  or_if rc5_in _trisc 32
        ; line_number = 209
        ;  or_if rc5_in _adcon1 7
        ; line_number = 210
        ;  or_if rc5_in _adcon0 0
        ; line_number = 211
        ;  or_if rc5_out _trisc 0
        ; line_number = 212
        ;  or_if rc5_out _adcon1 7
        ; line_number = 213
        ;  or_if rc5_out _adcon0 0
        ; line_number = 214
        ;  or_if sdo _trisc 0
        ; line_number = 215
        ;  or_if sdo _adcon1 7
        ; line_number = 216
        ;  or_if sdo _adcon0 0
        ; line_number = 217
        ;  or_if rc5_unused _trisc 32
        ; line_number = 218
        ;  or_if rc5_unused _adcon1 7
        ; line_number = 219
        ;  or_if rc5_unused _adcon0 0
        ; line_number = 220
        ; pin rc6_in, rc6_out, tx, ck, rc6_unused
        ; line_number = 221
        ; pin_bindings pdip = 17
        ; line_number = 222
        ;  bind_to _portc@6
        ; line_number = 223
        ;  or_if rc6_in _trisc 64
        ; line_number = 224
        ;  or_if rc6_in _adcon1 7
        ; line_number = 225
        ;  or_if rc6_in _adcon0 0
        ; line_number = 226
        ;  or_if rc6_out _trisc 0
        ; line_number = 227
        ;  or_if rc6_out _adcon1 7
        ; line_number = 228
        ;  or_if rc6_out _adcon0 0
        ; line_number = 229
        ;  or_if tx _trisc 0
        ; line_number = 230
        ;  or_if tx _adcon1 7
        ; line_number = 231
        ;  or_if tx _adcon0 0
        ; line_number = 232
        ;  or_if rc6_unused _trisc 64
        ; line_number = 233
        ;  or_if rc6_unused _adcon1 7
        ; line_number = 234
        ;  or_if rc6_unused _adcon0 0
        ; line_number = 235
        ; pin rc7_in, rc7_out, rx, dt, rc7_unused
        ; line_number = 236
        ; pin_bindings pdip = 18
        ; line_number = 237
        ;  bind_to _portc@7
        ; line_number = 238
        ;  or_if rc7_in _trisc 128
        ; line_number = 239
        ;  or_if rc7_in _adcon1 7
        ; line_number = 240
        ;  or_if rc7_in _adcon0 0
        ; line_number = 241
        ;  or_if rx _trisc 128
        ; line_number = 242
        ;  or_if rx _adcon1 7
        ; line_number = 243
        ;  or_if rx _adcon0 0
        ; line_number = 244
        ;  or_if rc7_out _trisc 0
        ; line_number = 245
        ;  or_if rc7_out _adcon1 7
        ; line_number = 246
        ;  or_if rc7_out _adcon0 0
        ; line_number = 247
        ;  or_if rc7_unused _trisc 128
        ; line_number = 248
        ;  or_if rc7_unused _adcon1 7
        ; line_number = 249
        ;  or_if rc7_unused _adcon0 0
        ; line_number = 250
        ; pin vss2, ground2
        ; line_number = 251
        ; pin_bindings pdip = 19
        ; line_number = 252
        ; pin vdd, power_supply
        ; line_number = 253
        ; pin_bindings pdip = 20
        ; line_number = 254
        ; pin rb0_in, rb0_out, int, rb0_unused
        ; line_number = 255
        ; pin_bindings pdip = 21
        ; line_number = 256
        ;  bind_to _portb@0
        ; line_number = 257
        ;  or_if rb0_in _trisb 1
        ; line_number = 258
        ;  or_if rb0_in _adcon1 7
        ; line_number = 259
        ;  or_if rb0_in _adcon0 0
        ; line_number = 260
        ;  or_if rb0_out _trisb 0
        ; line_number = 261
        ;  or_if rb0_out _adcon1 7
        ; line_number = 262
        ;  or_if rb0_out _adcon0 0
        ; line_number = 263
        ;  or_if rb0_unused _trisb 1
        ; line_number = 264
        ;  or_if rb0_unused _adcon1 7
        ; line_number = 265
        ;  or_if rb0_unused _adcon0 0
        ; line_number = 266
        ; pin rb1_in, rb1_out, rb1_unused
        ; line_number = 267
        ; pin_bindings pdip = 22
        ; line_number = 268
        ;  bind_to _portb@1
        ; line_number = 269
        ;  or_if rb1_in _trisb 2
        ; line_number = 270
        ;  or_if rb1_in _adcon1 7
        ; line_number = 271
        ;  or_if rb1_in _adcon0 0
        ; line_number = 272
        ;  or_if rb1_out _trisb 0
        ; line_number = 273
        ;  or_if rb1_out _adcon1 7
        ; line_number = 274
        ;  or_if rb1_out _adcon0 0
        ; line_number = 275
        ;  or_if rb1_unused _trisb 2
        ; line_number = 276
        ;  or_if rb1_unused _adcon1 7
        ; line_number = 277
        ;  or_if rb1_unused _adcon0 0
        ; line_number = 278
        ; pin rb2_in, rb2_out, rb2_unused
        ; line_number = 279
        ; pin_bindings pdip = 23
        ; line_number = 280
        ;  bind_to _portb@2
        ; line_number = 281
        ;  or_if rb2_in _trisb 4
        ; line_number = 282
        ;  or_if rb2_in _adcon1 7
        ; line_number = 283
        ;  or_if rb2_in _adcon0 0
        ; line_number = 284
        ;  or_if rb2_out _trisb 0
        ; line_number = 285
        ;  or_if rb2_out _adcon1 7
        ; line_number = 286
        ;  or_if rb2_out _adcon0 0
        ; line_number = 287
        ;  or_if rb2_unused _trisb 4
        ; line_number = 288
        ;  or_if rb2_unused _adcon1 7
        ; line_number = 289
        ;  or_if rb2_unused _adcon0 0
        ; line_number = 290
        ; pin rb3_in, rb3_out, pgm, rb3_unused
        ; line_number = 291
        ; pin_bindings pdip = 24
        ; line_number = 292
        ;  bind_to _portb@3
        ; line_number = 293
        ;  or_if rb3_in _trisb 8
        ; line_number = 294
        ;  or_if rb3_in _adcon1 7
        ; line_number = 295
        ;  or_if rb3_in _adcon0 0
        ; line_number = 296
        ;  or_if rb3_out _trisb 0
        ; line_number = 297
        ;  or_if rb3_out _adcon1 7
        ; line_number = 298
        ;  or_if rb3_out _adcon0 0
        ; line_number = 299
        ;  or_if rb3_unused _trisb 8
        ; line_number = 300
        ;  or_if rb3_unused _adcon1 7
        ; line_number = 301
        ;  or_if rb3_unused _adcon0 0
        ; line_number = 302
        ; pin rb4_in, rb4_out, rb4_unused
        ; line_number = 303
        ; pin_bindings pdip = 25
        ; line_number = 304
        ;  bind_to _portb@4
        ; line_number = 305
        ;  or_if rb4_in _trisb 16
        ; line_number = 306
        ;  or_if rb4_in _adcon1 7
        ; line_number = 307
        ;  or_if rb4_in _adcon0 0
        ; line_number = 308
        ;  or_if rb4_out _trisb 0
        ; line_number = 309
        ;  or_if rb4_out _adcon1 7
        ; line_number = 310
        ;  or_if rb4_out _adcon0 0
        ; line_number = 311
        ;  or_if rb4_unused _trisb 16
        ; line_number = 312
        ;  or_if rb4_unused _adcon1 7
        ; line_number = 313
        ;  or_if rb4_unused _adcon0 0
        ; line_number = 314
        ; pin rb5_in, rb5_out, rb5_unused
        ; line_number = 315
        ; pin_bindings pdip = 26
        ; line_number = 316
        ;  bind_to _portb@5
        ; line_number = 317
        ;  or_if rb5_in _trisb 32
        ; line_number = 318
        ;  or_if rb5_in _adcon1 7
        ; line_number = 319
        ;  or_if rb5_in _adcon0 0
        ; line_number = 320
        ;  or_if rb5_out _trisb 0
        ; line_number = 321
        ;  or_if rb5_out _adcon1 7
        ; line_number = 322
        ;  or_if rb5_out _adcon0 0
        ; line_number = 323
        ;  or_if rb5_unused _trisb 32
        ; line_number = 324
        ;  or_if rb5_unused _adcon1 7
        ; line_number = 325
        ;  or_if rb5_unused _adcon0 0
        ; line_number = 326
        ; pin rb6_in, rb6_out, pgc, rb6_unused
        ; line_number = 327
        ; pin_bindings pdip = 27
        ; line_number = 328
        ;  bind_to _portb@6
        ; line_number = 329
        ;  or_if rb6_in _trisb 64
        ; line_number = 330
        ;  or_if rb6_in _adcon1 7
        ; line_number = 331
        ;  or_if rb6_in _adcon0 0
        ; line_number = 332
        ;  or_if rb6_out _trisb 0
        ; line_number = 333
        ;  or_if rb6_out _adcon1 7
        ; line_number = 334
        ;  or_if rb6_out _adcon0 0
        ; line_number = 335
        ;  or_if rb6_unused _trisb 64
        ; line_number = 336
        ;  or_if rb6_unused _adcon1 7
        ; line_number = 337
        ;  or_if rb6_unused _adcon0 0
        ; line_number = 338
        ; pin rb7_in, rb7_out, pgd, rb7_unused
        ; line_number = 339
        ; pin_bindings pdip = 28
        ; line_number = 340
        ;  bind_to _portb@7
        ; line_number = 341
        ;  or_if rb7_in _trisb 128
        ; line_number = 342
        ;  or_if rb7_in _adcon1 7
        ; line_number = 343
        ;  or_if rb7_in _adcon0 0
        ; line_number = 344
        ;  or_if rb7_out _trisb 0
        ; line_number = 345
        ;  or_if rb7_out _adcon1 7
        ; line_number = 346
        ;  or_if rb7_out _adcon0 0
        ; line_number = 347
        ;  or_if rb7_unused _trisb 128
        ; line_number = 348
        ;  or_if rb7_unused _adcon1 7
        ; line_number = 349
        ;  or_if rb7_unused _adcon0 0


        ; # Register and pin definitions:

        ; line_number = 356
        ; library _pic16f87x entered

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

        ; # Common declarations for PIC16F87x series microcontrollers:

        ; buffer = '_pic16f87x'
        ; line_number = 8
        ; 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 = '_pic16f87x'
        ; line_number = 8
        ; library _standard exited

        ; # Register and pin definitions:

        ; # Bank 0:

        ; line_number = 14
        ; register _indf = 
_indf equ 0

        ; line_number = 16
        ; register _tmr0 = 
_tmr0 equ 1

        ; line_number = 18
        ; register _pcl = 
_pcl equ 2

        ; line_number = 20
        ; register _status = 
_status equ 3
        ; line_number = 21
        ; bind _irp = _status@7
_irp___byte equ _status
_irp___bit equ 7
        ; line_number = 22
        ; bind _rp1 = _status@6
_rp1___byte equ _status
_rp1___bit equ 6
        ; line_number = 23
        ; bind _rp0 = _status@5
_rp0___byte equ _status
_rp0___bit equ 5
        ; line_number = 24
        ; bind _to = _status@4
_to___byte equ _status
_to___bit equ 4
        ; line_number = 25
        ; bind _pd = _status@3
_pd___byte equ _status
_pd___bit equ 3
        ; line_number = 26
        ; bind _z = _status@2
_z___byte equ _status
_z___bit equ 2
        ; line_number = 27
        ; bind _dc = _status@1
_dc___byte equ _status
_dc___bit equ 1
        ; line_number = 28
        ; bind _c = _status@0
_c___byte equ _status
_c___bit equ 0

        ; line_number = 30
        ; register _fsr = 
_fsr equ 4

        ; line_number = 32
        ; register _porta = 
_porta equ 5

        ; line_number = 34
        ; register _portb = 
_portb equ 6

        ; line_number = 36
        ; register _portc = 
_portc equ 7

        ; line_number = 38
        ; register _pclath = 
_pclath equ 10

        ; line_number = 40
        ; register _intcon = 
_intcon equ 11
        ; line_number = 41
        ; bind _gie = _intcon@7
_gie___byte equ _intcon
_gie___bit equ 7
        ; line_number = 42
        ; bind _peie = _intcon@6
_peie___byte equ _intcon
_peie___bit equ 6
        ; line_number = 43
        ; bind _t0ie = _intcon@5
_t0ie___byte equ _intcon
_t0ie___bit equ 5
        ; line_number = 44
        ; bind _inte = _intcon@4
_inte___byte equ _intcon
_inte___bit equ 4
        ; line_number = 45
        ; bind _rbie = _intcon@3
_rbie___byte equ _intcon
_rbie___bit equ 3
        ; line_number = 46
        ; bind _t0if = _intcon@2
_t0if___byte equ _intcon
_t0if___bit equ 2
        ; line_number = 47
        ; bind _intf = _intcon@1
_intf___byte equ _intcon
_intf___bit equ 1
        ; line_number = 48
        ; bind _rbf = _intcon@0
_rbf___byte equ _intcon
_rbf___bit equ 0

        ; line_number = 50
        ; register _pir1 = 
_pir1 equ 12
        ; line_number = 51
        ; bind _pspif = _pir1@7
_pspif___byte equ _pir1
_pspif___bit equ 7
        ; line_number = 52
        ; bind _adif = _pir1@6
_adif___byte equ _pir1
_adif___bit equ 6
        ; line_number = 53
        ; bind _rcif = _pir1@5
_rcif___byte equ _pir1
_rcif___bit equ 5
        ; line_number = 54
        ; bind _txif = _pir1@4
_txif___byte equ _pir1
_txif___bit equ 4
        ; line_number = 55
        ; bind _sspif = _pir1@3
_sspif___byte equ _pir1
_sspif___bit equ 3
        ; line_number = 56
        ; bind _ccpif = _pir1@2
_ccpif___byte equ _pir1
_ccpif___bit equ 2
        ; line_number = 57
        ; bind _tmr2if = _pir1@1
_tmr2if___byte equ _pir1
_tmr2if___bit equ 1
        ; line_number = 58
        ; bind _tmr1if = _pir1@0
_tmr1if___byte equ _pir1
_tmr1if___bit equ 0

        ; line_number = 60
        ; register _pir2 = 
_pir2 equ 13
        ; line_number = 61
        ; bind _eeif = _pir2@4
_eeif___byte equ _pir2
_eeif___bit equ 4
        ; line_number = 62
        ; bind _bclif = _pir2@3
_bclif___byte equ _pir2
_bclif___bit equ 3
        ; line_number = 63
        ; bind _ccp2if = _pir2@0
_ccp2if___byte equ _pir2
_ccp2if___bit equ 0

        ; line_number = 65
        ; register _tmr1l = 
_tmr1l equ 14

        ; line_number = 67
        ; register _tmr1h = 
_tmr1h equ 15

        ; line_number = 69
        ; register _t1con = 
_t1con equ 16
        ; line_number = 70
        ; bind _t1ckps1 = _t1con@5
_t1ckps1___byte equ _t1con
_t1ckps1___bit equ 5
        ; line_number = 71
        ; bind _t1ckps0 = _t1con@4
_t1ckps0___byte equ _t1con
_t1ckps0___bit equ 4
        ; line_number = 72
        ; bind _t1oscen = _t1con@3
_t1oscen___byte equ _t1con
_t1oscen___bit equ 3
        ; line_number = 73
        ; bind _t1sync = _t1con@2
_t1sync___byte equ _t1con
_t1sync___bit equ 2
        ; line_number = 74
        ; bind _tmr1cs = _t1con@1
_tmr1cs___byte equ _t1con
_tmr1cs___bit equ 1
        ; line_number = 75
        ; bind _tmr1on = _t1con@0
_tmr1on___byte equ _t1con
_tmr1on___bit equ 0

        ; line_number = 77
        ; register _tmr2 = 
_tmr2 equ 17

        ; line_number = 79
        ; register _t2con = 
_t2con equ 18
        ; line_number = 80
        ; bind _toutps3 = _t2con@6
_toutps3___byte equ _t2con
_toutps3___bit equ 6
        ; line_number = 81
        ; bind _toutps2 = _t2con@5
_toutps2___byte equ _t2con
_toutps2___bit equ 5
        ; line_number = 82
        ; bind _toutps1 = _t2con@4
_toutps1___byte equ _t2con
_toutps1___bit equ 4
        ; line_number = 83
        ; bind _toutps0 = _t2con@3
_toutps0___byte equ _t2con
_toutps0___bit equ 3
        ; line_number = 84
        ; bind _tmr2on = _t2con@2
_tmr2on___byte equ _t2con
_tmr2on___bit equ 2
        ; line_number = 85
        ; bind _t2ckps1 = _t2con@1
_t2ckps1___byte equ _t2con
_t2ckps1___bit equ 1
        ; line_number = 86
        ; bind _t2ckps0 = _t2con@0
_t2ckps0___byte equ _t2con
_t2ckps0___bit equ 0

        ; line_number = 88
        ; register _sspbuf = 
_sspbuf equ 19

        ; line_number = 90
        ; register _sspcon = 
_sspcon equ 20
        ; line_number = 91
        ; bind _wcol = _sspcon@7
_wcol___byte equ _sspcon
_wcol___bit equ 7
        ; line_number = 92
        ; bind _sspov = _sspcon@6
_sspov___byte equ _sspcon
_sspov___bit equ 6
        ; line_number = 93
        ; bind _sspen = _sspcon@5
_sspen___byte equ _sspcon
_sspen___bit equ 5
        ; line_number = 94
        ; bind _ckp = _sspcon@4
_ckp___byte equ _sspcon
_ckp___bit equ 4
        ; line_number = 95
        ; bind _sspm3 = _sspcon@3
_sspm3___byte equ _sspcon
_sspm3___bit equ 3
        ; line_number = 96
        ; bind _sspm2 = _sspcon@2
_sspm2___byte equ _sspcon
_sspm2___bit equ 2
        ; line_number = 97
        ; bind _sspm1 = _sspcon@1
_sspm1___byte equ _sspcon
_sspm1___bit equ 1
        ; line_number = 98
        ; bind _sspm0 = _sspcon@0
_sspm0___byte equ _sspcon
_sspm0___bit equ 0

        ; line_number = 100
        ; register _ccpr1l = 
_ccpr1l equ 21

        ; line_number = 102
        ; register _ccpr1h = 
_ccpr1h equ 22

        ; line_number = 104
        ; register _ccp1con = 
_ccp1con equ 23
        ; line_number = 105
        ; bind _ccp1x = _ccp1con@5
_ccp1x___byte equ _ccp1con
_ccp1x___bit equ 5
        ; line_number = 106
        ; bind _ccp1y = _ccp1con@4
_ccp1y___byte equ _ccp1con
_ccp1y___bit equ 4
        ; line_number = 107
        ; bind _ccp1m3 = _ccp1con@3
_ccp1m3___byte equ _ccp1con
_ccp1m3___bit equ 3
        ; line_number = 108
        ; bind _ccp1m2 = _ccp1con@2
_ccp1m2___byte equ _ccp1con
_ccp1m2___bit equ 2
        ; line_number = 109
        ; bind _ccp1m1 = _ccp1con@1
_ccp1m1___byte equ _ccp1con
_ccp1m1___bit equ 1
        ; line_number = 110
        ; bind _ccp1m0 = _ccp1con@0
_ccp1m0___byte equ _ccp1con
_ccp1m0___bit equ 0

        ; line_number = 112
        ; register _rcsta = 
_rcsta equ 24
        ; line_number = 113
        ; bind _spen = _rcsta@7
_spen___byte equ _rcsta
_spen___bit equ 7
        ; line_number = 114
        ; bind _rx9 = _rcsta@6
_rx9___byte equ _rcsta
_rx9___bit equ 6
        ; line_number = 115
        ; bind _sren = _rcsta@5
_sren___byte equ _rcsta
_sren___bit equ 5
        ; line_number = 116
        ; bind _cren = _rcsta@4
_cren___byte equ _rcsta
_cren___bit equ 4
        ; line_number = 117
        ; bind _adden = _rcsta@3
_adden___byte equ _rcsta
_adden___bit equ 3
        ; line_number = 118
        ; bind _ferr = _rcsta@2
_ferr___byte equ _rcsta
_ferr___bit equ 2
        ; line_number = 119
        ; bind _oerr = _rcsta@1
_oerr___byte equ _rcsta
_oerr___bit equ 1
        ; line_number = 120
        ; bind _rx9d = _rcsta@0
_rx9d___byte equ _rcsta
_rx9d___bit equ 0

        ; line_number = 122
        ; register _txreg = 
_txreg equ 25

        ; line_number = 124
        ; register _rcreg = 
_rcreg equ 26

        ; line_number = 126
        ; register _ccpr2l = 
_ccpr2l equ 27

        ; line_number = 128
        ; register _ccpr2h = 
_ccpr2h equ 28

        ; line_number = 130
        ; register _ccp2con = 
_ccp2con equ 29
        ; line_number = 131
        ; bind _ccp2x = _ccp2con@5
_ccp2x___byte equ _ccp2con
_ccp2x___bit equ 5
        ; line_number = 132
        ; bind _ccp2y = _ccp2con@4
_ccp2y___byte equ _ccp2con
_ccp2y___bit equ 4
        ; line_number = 133
        ; bind _ccp2m3 = _ccp2con@3
_ccp2m3___byte equ _ccp2con
_ccp2m3___bit equ 3
        ; line_number = 134
        ; bind _ccp2m2 = _ccp2con@2
_ccp2m2___byte equ _ccp2con
_ccp2m2___bit equ 2
        ; line_number = 135
        ; bind _ccp2m1 = _ccp2con@1
_ccp2m1___byte equ _ccp2con
_ccp2m1___bit equ 1
        ; line_number = 136
        ; bind _ccp2m0 = _ccp2con@0
_ccp2m0___byte equ _ccp2con
_ccp2m0___bit equ 0

        ; line_number = 138
        ; register _adresh = 
_adresh equ 30

        ; line_number = 140
        ; register _adcon0 = 
_adcon0 equ 31
        ; line_number = 141
        ; bind _adcs1 = _adcon0@7
_adcs1___byte equ _adcon0
_adcs1___bit equ 7
        ; line_number = 142
        ; bind _adcs0 = _adcon0@6
_adcs0___byte equ _adcon0
_adcs0___bit equ 6
        ; line_number = 143
        ; bind _chs2 = _adcon0@5
_chs2___byte equ _adcon0
_chs2___bit equ 5
        ; line_number = 144
        ; bind _chs1 = _adcon0@4
_chs1___byte equ _adcon0
_chs1___bit equ 4
        ; line_number = 145
        ; bind _chs0 = _adcon0@3
_chs0___byte equ _adcon0
_chs0___bit equ 3
        ; line_number = 146
        ; bind _go_done = _adcon0@2
_go_done___byte equ _adcon0
_go_done___bit equ 2
        ; line_number = 147
        ; bind _adon = _adcon0@0
_adon___byte equ _adcon0
_adon___bit equ 0

        ; # Bank 1:

        ; line_number = 151
        ; register _option_reg = 
_option_reg equ 129
        ; line_number = 152
        ; bind _rbpu = _option_reg@7
_rbpu___byte equ _option_reg
_rbpu___bit equ 7
        ; line_number = 153
        ; bind _intedg = _option_reg@6
_intedg___byte equ _option_reg
_intedg___bit equ 6
        ; line_number = 154
        ; bind _t0cs = _option_reg@5
_t0cs___byte equ _option_reg
_t0cs___bit equ 5
        ; line_number = 155
        ; bind _t0se = _option_reg@4
_t0se___byte equ _option_reg
_t0se___bit equ 4
        ; line_number = 156
        ; bind _psa = _option_reg@3
_psa___byte equ _option_reg
_psa___bit equ 3
        ; line_number = 157
        ; bind _ps2 = _option_reg@2
_ps2___byte equ _option_reg
_ps2___bit equ 2
        ; line_number = 158
        ; bind _ps1 = _option_reg@1
_ps1___byte equ _option_reg
_ps1___bit equ 1
        ; line_number = 159
        ; bind _ps0 = _option_reg@0
_ps0___byte equ _option_reg
_ps0___bit equ 0

        ; line_number = 161
        ; register _trisa = 
_trisa equ 133

        ; line_number = 163
        ; register _trisb = 
_trisb equ 134

        ; line_number = 165
        ; register _trisc = 
_trisc equ 135

        ; line_number = 167
        ; register _pie1 = 
_pie1 equ 140
        ; line_number = 168
        ; bind _pspie = _pie1@7
_pspie___byte equ _pie1
_pspie___bit equ 7
        ; line_number = 169
        ; bind _adie = _pie1@6
_adie___byte equ _pie1
_adie___bit equ 6
        ; line_number = 170
        ; bind _rcie = _pie1@5
_rcie___byte equ _pie1
_rcie___bit equ 5
        ; line_number = 171
        ; bind _txie = _pie1@4
_txie___byte equ _pie1
_txie___bit equ 4
        ; line_number = 172
        ; bind _sspie = _pie1@3
_sspie___byte equ _pie1
_sspie___bit equ 3
        ; line_number = 173
        ; bind _ccp1ie = _pie1@2
_ccp1ie___byte equ _pie1
_ccp1ie___bit equ 2
        ; line_number = 174
        ; bind _tmr2ie = _pie1@1
_tmr2ie___byte equ _pie1
_tmr2ie___bit equ 1
        ; line_number = 175
        ; bind _tmr1ie = _pie1@0
_tmr1ie___byte equ _pie1
_tmr1ie___bit equ 0

        ; line_number = 177
        ; register _pie2 = 
_pie2 equ 141
        ; line_number = 178
        ; bind _eeie = _pie2@4
_eeie___byte equ _pie2
_eeie___bit equ 4
        ; line_number = 179
        ; bind _bcie = _pie2@3
_bcie___byte equ _pie2
_bcie___bit equ 3
        ; line_number = 180
        ; bind _ccp2ie = _pie2@0
_ccp2ie___byte equ _pie2
_ccp2ie___bit equ 0

        ; line_number = 182
        ; register _pcon = 
_pcon equ 142
        ; line_number = 183
        ; bind _por = _pcon@1
_por___byte equ _pcon
_por___bit equ 1
        ; line_number = 184
        ; bind _bor = _pcon@0
_bor___byte equ _pcon
_bor___bit equ 0

        ; line_number = 186
        ; register _sspcon2 = 
_sspcon2 equ 145
        ; line_number = 187
        ; bind _gcen = _sspcon2@7
_gcen___byte equ _sspcon2
_gcen___bit equ 7
        ; line_number = 188
        ; bind _ackstat = _sspcon2@6
_ackstat___byte equ _sspcon2
_ackstat___bit equ 6
        ; line_number = 189
        ; bind _ackdt = _sspcon2@5
_ackdt___byte equ _sspcon2
_ackdt___bit equ 5
        ; line_number = 190
        ; bind _acken = _sspcon2@4
_acken___byte equ _sspcon2
_acken___bit equ 4
        ; line_number = 191
        ; bind _rcen = _sspcon2@3
_rcen___byte equ _sspcon2
_rcen___bit equ 3
        ; line_number = 192
        ; bind _pen = _sspcon2@2
_pen___byte equ _sspcon2
_pen___bit equ 2
        ; line_number = 193
        ; bind _rsen = _sspcon2@1
_rsen___byte equ _sspcon2
_rsen___bit equ 1
        ; line_number = 194
        ; bind _sen = _sspcon2@0
_sen___byte equ _sspcon2
_sen___bit equ 0

        ; line_number = 196
        ; register _pr2 = 
_pr2 equ 146

        ; line_number = 198
        ; register _sspadd = 
_sspadd equ 147

        ; line_number = 200
        ; register _sspstat = 
_sspstat equ 148
        ; line_number = 201
        ; bind _smp = _sspstat@7
_smp___byte equ _sspstat
_smp___bit equ 7
        ; line_number = 202
        ; bind _cke = _sspstat@6
_cke___byte equ _sspstat
_cke___bit equ 6
        ; line_number = 203
        ; bind _da = _sspstat@5
_da___byte equ _sspstat
_da___bit equ 5
        ; line_number = 204
        ; bind _p = _sspstat@4
_p___byte equ _sspstat
_p___bit equ 4
        ; line_number = 205
        ; bind _s = _sspstat@3
_s___byte equ _sspstat
_s___bit equ 3
        ; line_number = 206
        ; bind _rw = _sspstat@2
_rw___byte equ _sspstat
_rw___bit equ 2
        ; line_number = 207
        ; bind _ua = _sspstat@1
_ua___byte equ _sspstat
_ua___bit equ 1
        ; line_number = 208
        ; bind _bf = _sspstat@0
_bf___byte equ _sspstat
_bf___bit equ 0

        ; line_number = 210
        ; register _txsta = 
_txsta equ 152
        ; line_number = 211
        ; bind _csrc = _txsta@7
_csrc___byte equ _txsta
_csrc___bit equ 7
        ; line_number = 212
        ; bind _tx9 = _txsta@6
_tx9___byte equ _txsta
_tx9___bit equ 6
        ; line_number = 213
        ; bind _txen = _txsta@5
_txen___byte equ _txsta
_txen___bit equ 5
        ; line_number = 214
        ; bind _sync = _txsta@4
_sync___byte equ _txsta
_sync___bit equ 4
        ; line_number = 215
        ; bind _brgh = _txsta@2
_brgh___byte equ _txsta
_brgh___bit equ 2
        ; line_number = 216
        ; bind _trmt = _txsta@1
_trmt___byte equ _txsta
_trmt___bit equ 1
        ; line_number = 217
        ; bind _tx9d = _txsta@0
_tx9d___byte equ _txsta
_tx9d___bit equ 0

        ; line_number = 219
        ; register _spbrg = 
_spbrg equ 153

        ; line_number = 221
        ; register _cmcon = 
_cmcon equ 156
        ; line_number = 222
        ; bind _c2out = _cmcon@7
_c2out___byte equ _cmcon
_c2out___bit equ 7
        ; line_number = 223
        ; bind _c1out = _cmcon@6
_c1out___byte equ _cmcon
_c1out___bit equ 6
        ; line_number = 224
        ; bind _c2inv = _cmcon@5
_c2inv___byte equ _cmcon
_c2inv___bit equ 5
        ; line_number = 225
        ; bind _c1inv = _cmcon@4
_c1inv___byte equ _cmcon
_c1inv___bit equ 4
        ; line_number = 226
        ; bind _cis = _cmcon@3
_cis___byte equ _cmcon
_cis___bit equ 3
        ; line_number = 227
        ; bind _cm2 = _cmcon@2
_cm2___byte equ _cmcon
_cm2___bit equ 2
        ; line_number = 228
        ; bind _cm1 = _cmcon@1
_cm1___byte equ _cmcon
_cm1___bit equ 1
        ; line_number = 229
        ; bind _cm0 = _cmcon@0
_cm0___byte equ _cmcon
_cm0___bit equ 0

        ; line_number = 231
        ; register _cvrcon = 
_cvrcon equ 157
        ; line_number = 232
        ; bind _cvren = _cvrcon@7
_cvren___byte equ _cvrcon
_cvren___bit equ 7
        ; line_number = 233
        ; bind _cvroe = _cvrcon@6
_cvroe___byte equ _cvrcon
_cvroe___bit equ 6
        ; line_number = 234
        ; bind _cvrr = _cvrcon@5
_cvrr___byte equ _cvrcon
_cvrr___bit equ 5
        ; line_number = 235
        ; bind _cvr3 = _cvrcon@3
_cvr3___byte equ _cvrcon
_cvr3___bit equ 3
        ; line_number = 236
        ; bind _cvr2 = _cvrcon@2
_cvr2___byte equ _cvrcon
_cvr2___bit equ 2
        ; line_number = 237
        ; bind _cvr1 = _cvrcon@1
_cvr1___byte equ _cvrcon
_cvr1___bit equ 1
        ; line_number = 238
        ; bind _cvr0 = _cvrcon@0
_cvr0___byte equ _cvrcon
_cvr0___bit equ 0

        ; line_number = 240
        ; register _adresl = 
_adresl equ 158

        ; line_number = 242
        ; register _adcon1 = 
_adcon1 equ 159
        ; line_number = 243
        ; bind _adfm = _adcon1@7
_adfm___byte equ _adcon1
_adfm___bit equ 7
        ; line_number = 244
        ; bind _pcfg3 = _adcon1@3
_pcfg3___byte equ _adcon1
_pcfg3___bit equ 3
        ; line_number = 245
        ; bind _pcfg2 = _adcon1@2
_pcfg2___byte equ _adcon1
_pcfg2___bit equ 2
        ; line_number = 246
        ; bind _pcfg1 = _adcon1@1
_pcfg1___byte equ _adcon1
_pcfg1___bit equ 1
        ; line_number = 247
        ; bind _pcfg0 = _adcon1@0
_pcfg0___byte equ _adcon1
_pcfg0___bit equ 0

        ; # Bank 2:

        ; line_number = 251
        ; register _eedata = 
_eedata equ 268

        ; line_number = 253
        ; register _eeadr = 
_eeadr equ 269

        ; line_number = 255
        ; register _eedath = 
_eedath equ 270

        ; line_number = 257
        ; register _eeadrh = 
_eeadrh equ 271

        ; # Bank 3:

        ; line_number = 261
        ; register _eecon1 = 
_eecon1 equ 396
        ; line_number = 262
        ; bind _eepgd = _eecon1@7
_eepgd___byte equ _eecon1
_eepgd___bit equ 7
        ; line_number = 263
        ; bind _wrerr = _eecon1@3
_wrerr___byte equ _eecon1
_wrerr___bit equ 3
        ; line_number = 264
        ; bind _wren = _eecon1@2
_wren___byte equ _eecon1
_wren___bit equ 2
        ; line_number = 265
        ; bind _wr = _eecon1@1
_wr___byte equ _eecon1
_wr___bit equ 1
        ; line_number = 266
        ; bind _rd = _eecon1@0
_rd___byte equ _eecon1
_rd___bit equ 0

        ; line_number = 268
        ; register _eecon2 = 
_eecon2 equ 397


        ; buffer = '_pic16f876a'
        ; line_number = 356
        ; library _pic16f87x exited


        ; buffer = 'shaft2'
        ; line_number = 47
        ; library _pic16f876a exited
        ; #library _pic16f876		# We use a PIC16F876
        ; line_number = 49
        ; library clock16mhz entered
        ; # Copyright (c) 2006 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # This library defines the contstants {clock_rate}, {instruction_rate},
        ; # and {clocks_per_instruction}.

        ; # Define processor constants:
        ; buffer = 'clock16mhz'
        ; line_number = 9
        ; constant clock_rate = 16000000
clock_rate equ 16000000
        ; 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 4000000


        ; buffer = 'shaft2'
        ; line_number = 49
        ; library clock16mhz exited
        ; line_number = 50
        ; 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 = 'shaft2'
        ; line_number = 50
        ; library rb2_constants exited

        ; line_number = 52
        ; library_bank 0
        ; line_number = 54
        ; library rb2bus_pic16f876 entered

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

        ; # This module provides some procedures for accessing a RoboBricks2
        ; # bus via a UART.  It is speicialized for the PIC16F876:
        ; #
        ; # It defines the following procedure:
        ; #
        ; # {rb2bus_initialize}({address}) The procedure that initializes the UART
        ; #                                for bus access.

        ; # Global variables used by {rb2bus} library and {rb2bus_picXXXX} libraries:
        ; buffer = 'rb2bus_pic16f876'
        ; line_number = 15
        ; library rb2bus_globals entered

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

        ; # These are the global variables used by both the {rb2bus} and
        ; # the various {rb2bus_picXXXX} libraries.  Poll based firmware
        ; # uses both libraries, whereas interrupt driven software only
        ; # uses the {rb2bus_picXXX} libraries.

        ; buffer = 'rb2bus_globals'
        ; line_number = 11
        ; global rb2bus_selected bit	# 
rb2bus_selected___byte equ globals___3+111
rb2bus_selected___bit equ 0
        ; line_number = 12
        ; global rb2bus_error bit		# Global error bit
rb2bus_error___byte equ globals___3+111
rb2bus_error___bit equ 1
        ; line_number = 13
        ; global rb2bus_address byte	# Bus address to respond to
rb2bus_address equ globals___3
        ; line_number = 14
        ; global rb2bus_index byte	# Index into id information
rb2bus_index equ globals___3+1


        ; buffer = 'rb2bus_pic16f876'
        ; line_number = 15
        ; library rb2bus_globals exited

        ; # All other bus access procedures are defined in the {rb2bus} library
        ; # which is accessed below:

        ; # Baud_Rate = Fosc / (16(X+1))
        ; # 16 * (X+1) = Fosc/Baud_Rate
        ; # X+1 = Fosc/(16*Baud_Rate)
        ; # X = Fosc/(16*Baud_rate) - 1

        ; line_number = 25
        ; constant baud_rate_500k = 500000
baud_rate_500k equ 500000
        ; line_number = 26
        ; constant spbrg_500k = clock_rate / (16 * baud_rate_500k) - 1
spbrg_500k equ 1

        ; Delaying code generation for procedure  rb2bus_initialize
        ; line_number = 64
        ; constant rb2bus_eedata_address = 0xfe
rb2bus_eedata_address equ 254

        ; Delaying code generation for procedure  rb2bus_eedata_read
        ; Delaying code generation for procedure  rb2bus_eedata_write

        ; buffer = 'shaft2'
        ; line_number = 54
        ; library rb2bus_pic16f876 exited

        ; # Load up the floating point library:
        ; line_number = 57
        ; library_bank 1
        ; line_number = 59
        ; 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 = 'shaft2'
        ; line_number = 59
        ; library _float32 exited

        ; # Load up the trigonometry library (must use same data_bank as {_float32}:
        ; line_number = 62
        ; library_bank 3
        ; line_number = 63
        ; library _float32_trig entered

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

        ; # This library implements the following functions:
        ; #
        ; #   _float32_sqrt(x):	square root of x
        ; #   _float32_sin(x):	sine of x
        ; #   _float32_cos(x):	cosine of x
        ; #   _float32_tan(x):	tangent of x
        ; #   _float32_arcsin(x):	inverse sine of x
        ; #   _float32_arctan2(x,y): inverse tanget of x/y
        ; #
        ; # All symbols defined by this library are prefixed by "_float32_".
        ; #
        ; # This library is pretty intertwingled (technical term) with
        ; # the rest of the _float32.ucl and _float32_base.ucl libraries.
        ; # While the _float32_trig library is too big to fit in the same code
        ; # bank as _float32.ucl and _float32_base.ucl, it *must* share the
        ; # same data bank.  Thus, the preferred organziation is something
        ; # like:
        ; #
        ; #    data_bank 1
        ; #    library_bank 1
        ; #    library _float32_base
        ; #    library _float32
        ; #
        ; #    library_bank 3
        ; #    library _float32_trig
        ; #
        ; # In the example above, all three libraries share data_bank 1.
        ; # Library _float32_base and library _float32 live in code bank 1
        ; # and library _float32_trig lives in code bank 3.  No that it is
        ; # possible to flip between code bank 1 and code bank 3 with a
        ; # single BCF or BSF instruction.
        ; #
        ; # Attributions:
        ; #
        ; # The algorithms for the _float32_trig library come from a variety
        ; # of locations as attributed below:
        ; # 
        ; #    The square root fuction came from the Microchip Application Note
        ; #    660 _Floating_Point_Math_Functions_ by Frank J. Testa.  I do not
        ; #    have the foggiest notion of how it works.
        ; #
        ; #    The coefficients for the polynomials used in the inverse sine
        ; #    function came from from the e_asinf.c routine found in the glibc
        ; #    verion 2.4.  The copyright says it came from Sun Microsystems
        ; #    and Stephen L. Moshier at Oak Ridge National Laboratory.  Being
        ; #    and ex-employee of Sun, I suspect that David Hough at Sun was
        ; #    the person that picked the polynomial Moshier's polynomial for
        ; #    Sun.
        ; #
        ; #    The cosine and sine functions were developed by Wayne C. Gramlich
        ; #    (i.e. me) using polynomial coefficients obtained from the book
        ; #    Computer_Approximations_ by Hart, et. al. published by
        ; #    John Wily & Sons, Inc in 1968.  The Library of Congress Card
        ; #    number is 67-23326 and ASIN is 0471356301.  It is long out of
        ; #    print.  I have a 25+ year photocopy of the book.  Your best bet
        ; #    for finding this book is in a college or university library.
        ; #    If you do not have access to a college or university library
        ; #    go to your local public library and ask about getting an
        ; #    inter-library loan of the book.  Good luck!
        ; #
        ; #    The inverse tangent2 function was developed from first
        ; #    principles by Wayne C. Gramlich.  I kind of like the
        ; #    alogrithm, but I have never seen anybody use that particular
        ; #    derivation though.

        ; # Here are some commonly used constants:
        ; buffer = '_float32_trig'
        ; line_number = 72
        ; constant _float32_pi = 3.14152926535
        ; _float32_pi = 3.14153
        ; line_number = 73
        ; constant _float32_minus_pi = -_float32_pi
        ; _float32_minus_pi = -3.14153
        ; line_number = 74
        ; constant _float32_two_pi = _float32_pi * 2.0
        ; _float32_two_pi = 6.28306
        ; line_number = 75
        ; constant _float32_minus_two_pi = -_float32_two_pi
        ; _float32_minus_two_pi = -6.28306
        ; line_number = 76
        ; constant _float32_half_pi = _float32_pi / 2.0
        ; _float32_half_pi = 1.57076
        ; line_number = 77
        ; constant _float32_minus_half_pi = -_float32_half_pi
        ; _float32_minus_half_pi = -1.57076

        ; # This next blob of software is the square root code from Microchip
        ; # application note 660:

        ; Delaying code generation for procedure  _float32_fxm3232u
        ; Delaying code generation for procedure  _float32_rnd4032
        ; # minimax rational coefficients for (sqrt(1+z)-1)/z on [0,1]

        ; # SQRT32P0 = 6.054736157E1
        ; line_number = 370
        ; constant _float32_sqrt32p0 = 0x84
_float32_sqrt32p0 equ 132
        ; line_number = 371
        ; constant _float32_sqrt32p00 = 0x72
_float32_sqrt32p00 equ 114
        ; line_number = 372
        ; constant _float32_sqrt32p01 = 0x30
_float32_sqrt32p01 equ 48
        ; line_number = 373
        ; constant _float32_sqrt32p02 = 0x80
_float32_sqrt32p02 equ 128

        ; # SQRT32P1 = 5.154073142E1
        ; line_number = 376
        ; constant _float32_sqrt32p1 = 0x84
_float32_sqrt32p1 equ 132
        ; line_number = 377
        ; constant _float32_sqrt32p10 = 0x4E
_float32_sqrt32p10 equ 78
        ; line_number = 378
        ; constant _float32_sqrt32p11 = 0x29
_float32_sqrt32p11 equ 41
        ; line_number = 379
        ; constant _float32_sqrt32p12 = 0xB5
_float32_sqrt32p12 equ 181

        ; # SQRT32P2 = 7.370062896E0
        ; line_number = 382
        ; constant _float32_sqrt32p2 = 0x81
_float32_sqrt32p2 equ 129
        ; line_number = 383
        ; constant _float32_sqrt32p20 = 0x6B
_float32_sqrt32p20 equ 107
        ; line_number = 384
        ; constant _float32_sqrt32p21 = 0xD7
_float32_sqrt32p21 equ 215
        ; line_number = 385
        ; constant _float32_sqrt32p22 = 0x8E
_float32_sqrt32p22 equ 142

        ; # SQRT32Q0 = 1.210947497E2
        ; line_number = 388
        ; constant _float32_sqrt32q0 = 0x85
_float32_sqrt32q0 equ 133
        ; line_number = 389
        ; constant _float32_sqrt32q00 = 0x72
_float32_sqrt32q00 equ 114
        ; line_number = 390
        ; constant _float32_sqrt32q01 = 0x30
_float32_sqrt32q01 equ 48
        ; line_number = 391
        ; constant _float32_sqrt32q02 = 0x83
_float32_sqrt32q02 equ 131

        ; # SQRT32Q1 = 1.333554439E2
        ; line_number = 394
        ; constant _float32_sqrt32q1 = 0x86
_float32_sqrt32q1 equ 134
        ; line_number = 395
        ; constant _float32_sqrt32q10 = 0x05
_float32_sqrt32q10 equ 5
        ; line_number = 396
        ; constant _float32_sqrt32q11 = 0x5A
_float32_sqrt32q11 equ 90
        ; line_number = 397
        ; constant _float32_sqrt32q12 = 0xBC
_float32_sqrt32q12 equ 188

        ; # SQRT32Q2 = 3.294831307E1
        ; line_number = 400
        ; constant _float32_sqrt32q2 = 0x84
_float32_sqrt32q2 equ 132
        ; line_number = 401
        ; constant _float32_sqrt32q20 = 0x03
_float32_sqrt32q20 equ 3
        ; line_number = 402
        ; constant _float32_sqrt32q21 = 0xCB
_float32_sqrt32q21 equ 203
        ; line_number = 403
        ; constant _float32_sqrt32q22 = 0x13
_float32_sqrt32q22 equ 19

        ; # SQRT32Q3 = 1.0
        ; line_number = 406
        ; constant _float32_sqrt32q3 = 0x7F
_float32_sqrt32q3 equ 127
        ; line_number = 407
        ; constant _float32_sqrt32q30 = 0x00
_float32_sqrt32q30 equ 0
        ; line_number = 408
        ; constant _float32_sqrt32q31 = 0x00
_float32_sqrt32q31 equ 0
        ; line_number = 409
        ; constant _float32_sqrt32q32 = 0x00
_float32_sqrt32q32 equ 0

        ; # sqrt2 = 1.41421356237
        ; line_number = 412
        ; constant _float32_sqrt2b0 = 0xb5
_float32_sqrt2b0 equ 181
        ; line_number = 413
        ; constant _float32_sqrt2b1 = 0x04
_float32_sqrt2b1 equ 4
        ; line_number = 414
        ; constant _float32_sqrt2b2 = 0xf3
_float32_sqrt2b2 equ 243
        ; line_number = 415
        ; constant _float32_sqrt2b3 = 0x33
_float32_sqrt2b3 equ 51

        ; Delaying code generation for procedure  _float32_sqrt
        ; Delaying code generation for procedure  _float32_sqrt_base
        ; # There is lots of variable sharing in the trig functions:
        ; line_number = 745
        ; global _float32_trig1 float32
_float32_trig1 equ globals___1+60
        ; line_number = 746
        ; global _float32_trig2 float32
_float32_trig2 equ globals___1+64
        ; line_number = 747
        ; global _float32_trig3 float32
_float32_trig3 equ globals___1+68

        ; # Now come the sine/cosine/tangent routines:

        ; Delaying code generation for procedure  _float32_tan
        ; Delaying code generation for procedure  _float32_sin
        ; #3502
        ; line_number = 778
        ; constant _float32_cosine_p00 = .999999953464
        ; _float32_cosine_p00 = 1
        ; line_number = 779
        ; constant _float32_cosine_p01 = -.499999053455
        ; _float32_cosine_p01 = -0.499999
        ; line_number = 780
        ; constant _float32_cosine_p02 = .416635846769e-1
        ; _float32_cosine_p02 = 0.0416636
        ; line_number = 781
        ; constant _float32_cosine_p03 = -.13853704264e-2
        ; _float32_cosine_p03 = -0.00138537
        ; line_number = 782
        ; constant _float32_cosine_p04 = .2315393167e-4
        ; _float32_cosine_p04 = 2.31539e-05

        ; #3503
        ; #constant _float32_cosine_p00 =  .99999999978064
        ; #constant _float32_cosine_p01 = -.499999993584651
        ; #constant _float32_cosine_p02 =  .4166663625936e-1
        ; #constant _float32_cosine_p03 = -.13888361399412e-2
        ; #constant _float32_cosine_p04 =  .247601613352e-4
        ; #constant _float32_cosine_p05 = -.2605149522e-6

        ; Delaying code generation for procedure  _float32_cos
        ; line_number = 855
        ; constant _float32_arcsine_p0 = 1.666675248e-1
        ; _float32_arcsine_p0 = 0.166668
        ; line_number = 856
        ; constant _float32_arcsine_p1 = 7.495297643e-2
        ; _float32_arcsine_p1 = 0.074953
        ; line_number = 857
        ; constant _float32_arcsine_p2 = 4.547037598e-2
        ; _float32_arcsine_p2 = 0.0454704
        ; line_number = 858
        ; constant _float32_arcsine_p3 = 2.417951451e-2
        ; _float32_arcsine_p3 = 0.0241795
        ; line_number = 859
        ; constant _float32_arcsine_p4 = 4.216630880e-2
        ; _float32_arcsine_p4 = 0.0421663

        ; Delaying code generation for procedure  _float32_arcsin
        ; Delaying code generation for procedure  _float32_arctan2

        ; buffer = 'shaft2'
        ; line_number = 63
        ; library _float32_trig exited

        ; # Load up the 16 bit library and conversion library:
        ; line_number = 66
        ; library_bank 2
        ; line_number = 68
        ; library _signed16 entered

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

        ; # This library implements the following procedures for general use
        ; # by users:
        ; #
        ; #    _signed16_from_byte(x)		return signed16(x) where x is a byte
        ; #    _signed16_from_byte2(x,y)		return signed16((x<<8)|y)
        ; #					where x,y are bytes
        ; #    _signed16_to_byte(x)		return x as an 8-bit byte
        ; #    _signed16_byte_high(x)		return bigh byte of x
        ; #    _signed16_byte_low(x))		return low byte of x
        ; #
        ; # The following additional procedures are implemented for use by the
        ; # compiler.
        ; #
        ; #    _signed16_pointer_load()		A := M[W]
        ; #    _signed16_pointer_add()		A := M[W]
        ; #    _signed16_pointer_divide()		A := A / M[W]
        ; #    _signed16_pointer_multiply()	A := A * M[W]
        ; #    _signed16_pointer_subtract()	A := A - M[W]
        ; #    _signed16_pointer_store()		M[W] := A
        ; #    _signed16_pointer_negate()		A := -A
        ; #    _signed16_pointer_swap()		A <=> M[W]
        ; #    _signed16_equals()			_z := A = 0.0
        ; #    _signed16_not_equal()		_z := A != 0.0
        ; #    _signed16_less_than()		_z := if A < 0.0
        ; #    _signed16_less_than_or_equal()	_z := A <= 0.0
        ; #    _signed16_greater_than()		_z := A > 0.0
        ; #    _signed16_greater_than_or_equal()	_z := A >= 0.0
        ; #
        ; # All of the procedures constants and labels in this library are
        ; # prefixed by "_signed16_".
        ; #
        ; # For the uCL compiler, signed16's 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 to signed16 can be represented
        ; # in 8-bits as (address>>1).  (Pretty, slick!)

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

        ; buffer = '_signed16'
        ; line_number = 44
        ; global _signed16_a0 byte	# A Register MSB
_signed16_a0 equ globals___2
        ; line_number = 45
        ; global _signed16_a1 byte	# A Register LSB
_signed16_a1 equ globals___2+1
        ; line_number = 46
        ; global _signed16_b0 byte	# B Register MSB
_signed16_b0 equ globals___2+2
        ; line_number = 47
        ; global _signed16_b1 byte	# B Register LSB
_signed16_b1 equ globals___2+3
        ; line_number = 48
        ; global _signed16_result3 byte	# Mulitply result MSB
_signed16_result3 equ globals___2+4
        ; line_number = 49
        ; global _signed16_result2 byte
_signed16_result2 equ globals___2+5
        ; line_number = 50
        ; global _signed16_result1 byte
_signed16_result1 equ globals___2+6
        ; line_number = 51
        ; global _signed16_result0 byte	# Mulitply resultLSB
_signed16_result0 equ globals___2+7
        ; line_number = 52
        ; global _signed16_neg_flag byte	# Negative flag
_signed16_neg_flag equ globals___2+8
        ; line_number = 53
        ; global _signed16_count byte	# Loop counter for divide
_signed16_count equ globals___2+9

        ; # Bindings for 
        ; line_number = 56
        ; bind _signed16_rem0 = _signed16_result2
_signed16_rem0 equ globals___2+5
        ; line_number = 57
        ; bind _signed16_rem1 = _signed16_result3
_signed16_rem1 equ globals___2+4
        ; line_number = 58
        ; bind _signed16_temp0 = _signed16_result0
_signed16_temp0 equ globals___2+7
        ; line_number = 59
        ; bind _signed16_temp1 = _signed16_result1
_signed16_temp1 equ globals___2+6
        ; line_number = 60
        ; bind _signed16_sign = _signed16_neg_flag
_signed16_sign equ globals___2+8

        ; Delaying code generation for procedure  _signed16_pointer_load
        ; Delaying code generation for procedure  _signed16_pointer_add
        ; Delaying code generation for procedure  _signed16_pointer_divide
        ; Delaying code generation for procedure  _signed16_pointer_multiply
        ; Delaying code generation for procedure  _signed16_pointer_subtract
        ; Delaying code generation for procedure  _signed16_pointer_store
        ; Delaying code generation for procedure  _signed16_negate
        ; Delaying code generation for procedure  _signed16_pointer_swap
        ; Delaying code generation for procedure  _signed16_from_byte
        ; Delaying code generation for procedure  _signed16_from_byte2
        ; Delaying code generation for procedure  _signed16_to_byte
        ; Delaying code generation for procedure  _signed16_byte_high
        ; Delaying code generation for procedure  _signed16_byte_low
        ; Delaying code generation for procedure  _signed16_equals
        ; Delaying code generation for procedure  _signed16_not_equal
        ; Delaying code generation for procedure  _signed16_less_than
        ; Delaying code generation for procedure  _signed16_less_than_or_equal
        ; Delaying code generation for procedure  _signed16_greater_than
        ; Delaying code generation for procedure  _signed16_greater_than_or_equal
        ; #*******************************************************************
        ; #                       Double Precision Division
        ; #
        ; #               ( Optimized for Code Size : Looped Code )
        ; #
        ; #*******************************************************************#
        ; #   Division:
        ; #	Input:
        ; #	    Numeratator=_signed16_a<0:1>
        ; #	    Denominator = _signed16_b<0:1>
        ; #	Outputs:
        ; #	    Quotiant = _signed16_a<0:1>
        ; #	    Remainder in _signed16_rem<0:1>
        ; #
        ; #   Sequence:
        ; #	(a) Load the Numerator in location _signed16_a<0:1> ( 16 bits )
        ; #	(b) Load the Denominator in location _signed16_b<0:1> ( 16 bits )
        ; #	(c) call _signed16_divide_raw
        ; #	(d) The 16 bit quotiant is in location _signed16_a<0:1>
        ; #	(e) The 16 bit remainder is in locations _signed16_rem<0:1>

        ; Delaying code generation for procedure  _signed16_divide_raw

        ; buffer = 'shaft2'
        ; line_number = 68
        ; library _signed16 exited
        ; line_number = 69
        ; library _float32_signed16 entered

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

        ; Delaying code generation for procedure  _signed16_float32_convert
        ; Delaying code generation for procedure  _float32_signed16_convert

        ; line_number = 69
        ; library _float32_signed16 exited

        ; # Most stuff occurs in data bank 0:

        ; # Pin definitions:

        ; line_number = 76
        ; package pdip
        ; line_number = 77
        ; pin 1 = mclr
        ; line_number = 78
        ;  pin 2 = ra0_unused
        ; line_number = 79
        ;  pin 3 = ra1_unused
        ; line_number = 80
        ;  pin 4 = ra2_unused
        ; line_number = 81
        ;  pin 5 = ra3_unused
        ; line_number = 82
        ;  pin 6 = ra4_unused
        ; line_number = 83
        ;  pin 7 = ra5_unused
        ; line_number = 84
        ;  pin 8 = ground
        ; line_number = 85
        ;  pin 9 = osc1
        ; line_number = 86
        ;  pin 10 = osc2
        ; line_number = 87
        ;  pin 11 = rc0_unused
        ; line_number = 88
        ;  pin 12 = rc1_out, name=shaft1
shaft1___byte equ _portc
shaft1___bit equ 1
        ; line_number = 89
        ;  pin 13 = rc2_in, name=dflag1
dflag1___byte equ _portc
dflag1___bit equ 2
        ; line_number = 90
        ;  pin 14 = sck_master
        ; line_number = 91
        ;  pin 15 = sdi
        ; line_number = 92
        ;  pin 16 = sdo
        ; line_number = 93
        ;  pin 17 = tx
        ; line_number = 94
        ;  pin 18 = rx
        ; line_number = 95
        ;  pin 19 = ground2
        ; line_number = 96
        ;  pin 20 = power_supply
        ; line_number = 97
        ;  pin 21 = rb0_in, name=lflag
lflag___byte equ _portb
lflag___bit equ 0
        ; line_number = 98
        ;  pin 22 = rb1_unused
        ; line_number = 99
        ;  pin 23 = rb2_unused
        ; line_number = 100
        ;  pin 24 = rb3_in, name=dflag0
dflag0___byte equ _portb
dflag0___bit equ 3
        ; line_number = 101
        ;  pin 25 = rb4_unused
        ; line_number = 102
        ;  pin 26 = rb5_out, name=shaft0
shaft0___byte equ _portb
shaft0___bit equ 5
        ; line_number = 103
        ;  pin 27 = rb6_unused
        ; line_number = 104
        ;  pin 28 = rb7_unused

        ; # This are the constants for the LS7366 commands:

        ; # The Instruction Register bits:
        ; # For IR<7:6>:
        ; line_number = 110
        ; constant ls_clear = 0 << 6
ls_clear equ 0
        ; line_number = 111
        ; constant ls_read = 1 << 6
ls_read equ 64
        ; line_number = 112
        ; constant ls_write = 2 << 6
ls_write equ 128
        ; line_number = 113
        ; constant ls_load = 3 << 6
ls_load equ 192
        ; # For IR<5:3>:
        ; line_number = 115
        ; constant ls_none = 0 << 3
ls_none equ 0
        ; line_number = 116
        ; constant ls_mdr0 = 1 << 3
ls_mdr0 equ 8
        ; line_number = 117
        ; constant ls_mdr1 = 2 << 3
ls_mdr1 equ 16
        ; line_number = 118
        ; constant ls_dtr = 3 << 3
ls_dtr equ 24
        ; line_number = 119
        ; constant ls_cntr = 4 << 3
ls_cntr equ 32
        ; line_number = 120
        ; constant ls_otr = 5 << 3
ls_otr equ 40
        ; line_number = 121
        ; constant ls_str = 6 << 3
ls_str equ 48
        ; line_number = 122
        ; constant ls_none2 = 7 << 3
ls_none2 equ 56
        ; # For IR<2:0> are unused.  We use them for chip selection:
        ; line_number = 124
        ; constant ls_shaft0_bit = 0
ls_shaft0_bit equ 0
        ; line_number = 125
        ; constant ls_shaft1_bit = 1
ls_shaft1_bit equ 1
        ; line_number = 126
        ; constant ls_select_shaft0 = 1 << ls_shaft0_bit
ls_select_shaft0 equ 1
        ; line_number = 127
        ; constant ls_select_shaft1 = 1 << ls_shaft1_bit
ls_select_shaft1 equ 2
        ; line_number = 128
        ; constant ls_select_both = ls_select_shaft0 | ls_select_shaft1
ls_select_both equ 3

        ; # For the MDR0 (mode register 0):
        ; # MDR0<1:0>:
        ; line_number = 132
        ; constant ls_non_quad = 0 << 0
ls_non_quad equ 0
        ; line_number = 133
        ; constant ls_quad_x1 = 1 << 0
ls_quad_x1 equ 1
        ; line_number = 134
        ; constant ls_quad_x2 = 2 << 0
ls_quad_x2 equ 2
        ; line_number = 135
        ; constant ls_quad_x4 = 3 << 0
ls_quad_x4 equ 3
        ; # MDR0<3:2>:
        ; line_number = 137
        ; constant ls_count_free = 0 << 2
ls_count_free equ 0
        ; line_number = 138
        ; constant ls_count_single = 1 << 2
ls_count_single equ 4
        ; line_number = 139
        ; constant ls_count_range = 2 << 2
ls_count_range equ 8
        ; line_number = 140
        ; constant ls_count_module = 3 << 2
ls_count_module equ 12
        ; # MDR0<5:4>:
        ; line_number = 142
        ; constant ls_index_disable = 0 << 4
ls_index_disable equ 0
        ; line_number = 143
        ; constant ls_index_cntr_load = 1 << 4
ls_index_cntr_load equ 16
        ; line_number = 144
        ; constant ls_index_cntr_reset = 2 << 4
ls_index_cntr_reset equ 32
        ; line_number = 145
        ; constant ls_index_otr_load = 3 << 4
ls_index_otr_load equ 48
        ; # MDR0<6>:
        ; line_number = 147
        ; constant ls_index_negative = 0 << 6
ls_index_negative equ 0
        ; line_number = 148
        ; constant ls_index_positive = 1 << 6
ls_index_positive equ 64
        ; # MDR0<7>:
        ; line_number = 150
        ; constant ls_index_filter1 = 0 << 7
ls_index_filter1 equ 0
        ; line_number = 151
        ; constant ls_index_filter2 = 1 << 7
ls_index_filter2 equ 128
        ; # The value for our MDR0 is:
        ; line_number = 153
        ; constant ls_mdr0_value = ls_non_quad | ls_count_free | ls_index_disable | ls_index_negative | ls_index_filter1 
ls_mdr0_value equ 0

        ; # For the MDR1 (mode_register 1):
        ; # MDR1<1:0>:
        ; line_number = 158
        ; constant ls_size_4 = 0 << 0
ls_size_4 equ 0
        ; line_number = 159
        ; constant ls_size_3 = 1 << 0
ls_size_3 equ 1
        ; line_number = 160
        ; constant ls_size_2 = 2 << 0
ls_size_2 equ 2
        ; line_number = 161
        ; constant ls_size_1 = 3 << 0
ls_size_1 equ 3
        ; # MDR1<2>:
        ; line_number = 163
        ; constant ls_count_enable = 0 << 2
ls_count_enable equ 0
        ; line_number = 164
        ; constant ls_count_disable = 1 << 2
ls_count_disable equ 4
        ; # MDR1<3> unused:
        ; # MDR1<4>:
        ; line_number = 167
        ; constant ls_flag_on_idx = 1 << 4
ls_flag_on_idx equ 16
        ; # MDR1<5>:
        ; line_number = 169
        ; constant ls_flag_on_cmp = 1 << 5
ls_flag_on_cmp equ 32
        ; # MDR1<6>:
        ; line_number = 171
        ; constant ls_flag_on_bw = 1 << 6
ls_flag_on_bw equ 64
        ; # MDR1<7>:
        ; line_number = 173
        ; constant ls_flag_on_cy = 1 << 7
ls_flag_on_cy equ 128
        ; # The value for our MDR1 is:
        ; line_number = 175
        ; constant ls_mdr1_value = ls_size_2 | ls_count_enable
ls_mdr1_value equ 2

        ; # Index constants for data passed from {working} to {stable} to {frozen}:
        ; line_number = 178
        ; constant index_shaft0_high = 0		# Shaft0 High
index_shaft0_high equ 0
        ; line_number = 179
        ; constant index_shaft0_low = 1		# Shaft0 Low
index_shaft0_low equ 1
        ; line_number = 180
        ; constant index_shaft1_high = 2		# Shaft1 High
index_shaft1_high equ 2
        ; line_number = 181
        ; constant index_shaft1_low = 3		# Shaft1 Low
index_shaft1_low equ 3
        ; line_number = 182
        ; constant index_x_high = 4		# X Coordinate High
index_x_high equ 4
        ; line_number = 183
        ; constant index_x_low = 5		# X Coordinate Low
index_x_low equ 5
        ; line_number = 184
        ; constant index_y_high = 6		# Y Coordinate High
index_y_high equ 6
        ; line_number = 185
        ; constant index_y_low = 7		# Y Coordinate Low
index_y_low equ 7
        ; line_number = 186
        ; constant index_bearing_high = 8		# Bearing Coordinate High
index_bearing_high equ 8
        ; line_number = 187
        ; constant index_bearing_low = 9		# Bearing Coordinate Low
index_bearing_low equ 9
        ; line_number = 188
        ; constant index_target_bearing_high = 10	# Target Bearing Coordinate High
index_target_bearing_high equ 10
        ; line_number = 189
        ; constant index_target_bearing_low = 11	# Target Bearing Coordinate Low
index_target_bearing_low equ 11
        ; line_number = 190
        ; constant index_target_distance_high = 12 # Target Bearing Coordinate High
index_target_distance_high equ 12
        ; line_number = 191
        ; constant index_target_distance_low = 13	# Target Bearing Coordinate Low
index_target_distance_low equ 13
        ; line_number = 192
        ; constant index_count = 14		# Iteration count
index_count equ 14
        ; line_number = 193
        ; constant up_data_size = 15		# Bytes of "up" only data
up_data_size equ 15

        ; # Index of constant for data that lives only in {frozen}:
        ; line_number = 196
        ; constant index_target_x_high = 15	# Target X Coordinate High
index_target_x_high equ 15
        ; line_number = 197
        ; constant index_target_x_low = 16	# Target X Coordinate Low
index_target_x_low equ 16
        ; line_number = 198
        ; constant index_target_y_high = 17	# Target Y Coordinate High
index_target_y_high equ 17
        ; line_number = 199
        ; constant index_target_y_low = 18	# Target Y Coordinate Low
index_target_y_low equ 18
        ; line_number = 200
        ; constant index_wheel_spacing_high = 19	# Wheel Spacing High
index_wheel_spacing_high equ 19
        ; line_number = 201
        ; constant index_wheel_spacing_low = 20	# Wheel Spacing Low
index_wheel_spacing_low equ 20
        ; line_number = 202
        ; constant index_wheel_ticks_high = 21	# Wheel Ticks High
index_wheel_ticks_high equ 21
        ; line_number = 203
        ; constant index_wheel_ticks_low = 22	# Wheel Ticks Low
index_wheel_ticks_low equ 22
        ; line_number = 204
        ; constant index_wheel_diameter_high = 23	# Wheel Diameter High
index_wheel_diameter_high equ 23
        ; line_number = 205
        ; constant index_wheel_diameter_low = 24	# Wheel Diameter Low
index_wheel_diameter_low equ 24
        ; line_number = 206
        ; constant up_down_data_size = 25		# Bytes of "up" and "down" data
up_down_data_size equ 25

        ; # Some flags used to comicate between processes:
        ; line_number = 209
        ; global clear_request bit		# Request to clear counters
clear_request___byte equ globals___0+79
clear_request___bit equ 0
        ; line_number = 210
        ; global location_on bit			# Location computation is on
location_on___byte equ globals___0+79
location_on___bit equ 1
        ; line_number = 211
        ; global target_changed bit		# Target X or Y Changed
target_changed___byte equ globals___0+79
target_changed___bit equ 2
        ; line_number = 212
        ; global target_change_request bit	# Target X or Y are about to change
target_change_request___byte equ globals___0+79
target_change_request___bit equ 3
        ; line_number = 213
        ; global location_changed bit		# Location X, Y, Bearing changed
location_changed___byte equ globals___0+79
location_changed___bit equ 4
        ; line_number = 214
        ; global location_change_request bit	# Location X, Y, Bearing are to change
location_change_request___byte equ globals___0+79
location_change_request___bit equ 5
        ; line_number = 215
        ; global wheel_change_request bit		# Wheel constant are about to change
wheel_change_request___byte equ globals___0+79
wheel_change_request___bit equ 6
        ; line_number = 216
        ; global wheel_changed bit		# Wheel constants changed
wheel_changed___byte equ globals___0+79
wheel_changed___bit equ 7
        ; line_number = 217
        ; global shaft0_invert bit		# Invert shaft0
shaft0_invert___byte equ globals___0+78
shaft0_invert___bit equ 0
        ; line_number = 218
        ; global shaft1_invert bit		# Invert shaft1
shaft1_invert___byte equ globals___0+78
shaft1_invert___bit equ 1
        ; line_number = 219
        ; global shafts_swap bit			# Swap shaft0 and shaft1
shafts_swap___byte equ globals___0+78
shafts_swap___bit equ 2

        ; line_number = 221
        ; global test0 bit
test0___byte equ globals___0+78
test0___bit equ 3
        ; line_number = 222
        ; global test1 bit
test1___byte equ globals___0+78
test1___bit equ 4
        ; line_number = 223
        ; global test2 bit
test2___byte equ globals___0+78
test2___bit equ 5
        ; line_number = 224
        ; global test3 bit
test3___byte equ globals___0+78
test3___bit equ 6

        ; # Working copies:
        ; line_number = 227
        ; global working[up_data_size] array[byte]	# Array of working data
working equ globals___0
        ; line_number = 228
        ; bind shaft0_high = working[index_shaft0_high]
shaft0_high equ globals___0
        ; line_number = 229
        ; bind shaft0_low = working[index_shaft0_low]
shaft0_low equ globals___0+1
        ; line_number = 230
        ; bind shaft1_high = working[index_shaft1_high]
shaft1_high equ globals___0+2
        ; line_number = 231
        ; bind shaft1_low = working[index_shaft1_low]
shaft1_low equ globals___0+3

        ; # Stable copies (only changed when interrupts are disabled):
        ; line_number = 234
        ; global stable[up_data_size] array[byte]	# Array of stable data
stable equ globals___0+15
        ; line_number = 235
        ; bind stable_shaft0_high = stable[index_shaft0_high]
stable_shaft0_high equ globals___0+15
        ; line_number = 236
        ; bind stable_shaft0_low = stable[index_shaft0_low]
stable_shaft0_low equ globals___0+16
        ; line_number = 237
        ; bind stable_shaft1_high = stable[index_shaft1_high]
stable_shaft1_high equ globals___0+17
        ; line_number = 238
        ; bind stable_shaft1_low = stable[index_shaft1_low]
stable_shaft1_low equ globals___0+18

        ; # Frozen copies (only changed when the user requests a change):
        ; line_number = 241
        ; global frozen[up_down_data_size] array[byte]	# Array of frozen data
frozen equ globals___0+30

        ; line_number = 243
        ; origin 0
        org     0

        ; # The start procedure jumps around the interrupt routine to the main routine.
        ; line_number = 246
        ;info   246, 0
        ; procedure start
start:
        ; arguments_none
        ; line_number = 248
        ;  returns_nothing
        ; line_number = 249
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 251
        ;  assemble
        ;info   251, 0
        ; line_number = 252
        ;info   252, 0
        ; codebank start, main
        ; line_number = 253
        ;info   253, 0
        goto    main

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




        ; # Used by the interrupt routine only.  Must be global since the state
        ; # must remain in place after the interrupt routine exits:
        ; line_number = 257
        ; share fsr_save byte		# {_fsr} register save (for interrupts)
fsr_save equ shared___globals
        ; line_number = 258
        ; share pclath_save byte		# {_pclath} register save (for interrupts)
pclath_save equ shared___globals+1
        ; line_number = 259
        ; global state byte		# Overall state machine
state equ globals___0+55
        ; line_number = 260
        ; global id_index byte		# The id index
id_index equ globals___0+56
        ; line_number = 261
        ; global frozen_shaft_low byte	# The low byte of the latest frozen shaft
frozen_shaft_low equ globals___0+57
        ; line_number = 262
        ; global next_byte byte		# Next byte to be sent
next_byte equ globals___0+58
        ; line_number = 263
        ; global store_index byte		# Index where to store byte
store_index equ globals___0+59
        ; line_number = 264
        ; global store_high byte		# High byte to store
store_high equ globals___0+60

        ; # The {state} variable is used to control the state of interaction
        ; # with the client.
        ; line_number = 268
        ; constant state_begin_echo = 0		# Eat "echoed" byte, return to {begin}
state_begin_echo equ 0
        ; line_number = 269
        ; constant state_begin = 1		# Top level command processing
state_begin equ 1
        ; line_number = 270
        ; constant state_deselected = 2		# Deselected byte eater
state_deselected equ 2
        ; line_number = 271
        ; constant state_next_send = 3		# Send the next byte
state_next_send equ 3
        ; line_number = 272
        ; constant state_store_high = 4		# Next byte is a high byte to store
state_store_high equ 4
        ; line_number = 273
        ; constant state_store_low = 5		# Next byte is a high byte to store
state_store_low equ 5
        ; line_number = 274
        ; constant state_signs_store = 6		# Next byte received is signs byte
state_signs_store equ 6

        ; line_number = 276
        ; origin 4
        org     4

        ; line_number = 278
        ;info   278, 4
        ; procedure interrupt
interrupt:
interrupt___w_save equ shared___globals+3
interrupt___status_save equ shared___globals+2
        ; 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 = 280
        ;  returns_nothing

        ; # Main interrupt procedure that implements the "interrupt" process.

        ; line_number = 284
        ;  local command byte
interrupt__command equ globals___0+61
        ; line_number = 285
        ;  local rx9d bit
interrupt__rx9d___byte equ globals___0+78
interrupt__rx9d___bit equ 7

        ; # Save the {_fsr}:
        ; before procedure statements delay=non-uniform, bit states=(data:??=uu=>?? code:00=uu=>00)
        ; line_number = 288
        ;  fsr_save := _fsr
        ;info   288, 7
        movf    _fsr,w
        movwf   fsr_save
        ; line_number = 289
        ;  pclath_save := _pclath
        ;info   289, 9
        movf    _pclath,w
        movwf   pclath_save
        ; line_number = 290
        ;  _pclath := 0
        ;info   290, 11
        clrf    _pclath
        ; # Now we are really in page 0:

        ; # The only interrupt should be for receive byt, but test {_rcif} just
        ; # to be sure:
        ; line_number = 295
        ;  if _rcif start
        ;info   295, 12
        ; =>bit_code_emit@symbol(): sym=_rcif
        ; No 1TEST: true.size=456 false.size=0
        ; No 2TEST: true.size=456 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        btfss   _rcif___byte, _rcif___bit
        goto    interrupt__93
        ; # Clear the interrupt flag until the next byte arrives:
        ; line_number = 297
        ;  _rcif := _false
        ;info   297, 16
        bcf     _rcif___byte, _rcif___bit

        ; # Deal with UART errors:
        ; line_number = 300
        ;  if _oerr start
        ;info   300, 17
        ; =>bit_code_emit@symbol(): sym=_oerr
        ; 1TEST: Single test with code in skip slot
        btfsc   _oerr___byte, _oerr___bit
        ; line_number = 301
        ; _cren := _false
        ;info   301, 18
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 300
        ;  if _oerr done
        ; line_number = 302
        ; if _ferr start
        ;info   302, 19
        ; =>bit_code_emit@symbol(): sym=_ferr
        ; 1TEST: Single test with code in skip slot
        btfsc   _ferr___byte, _ferr___bit
        ; line_number = 303
        ; _cren := _false
        ;info   303, 20
        bcf     _cren___byte, _cren___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 302
        ; if _ferr done
        ; line_number = 304
        ; _cren := _true
        ;info   304, 21
        bsf     _cren___byte, _cren___bit

        ; # Now read all 9 bits of data:
        ; line_number = 307
        ;  rx9d := _false
        ;info   307, 22
        bcf     interrupt__rx9d___byte, interrupt__rx9d___bit
        ; line_number = 308
        ;  if _rx9d start
        ;info   308, 23
        ; =>bit_code_emit@symbol(): sym=_rx9d
        ; 1TEST: Single test with code in skip slot
        btfsc   _rx9d___byte, _rx9d___bit
        ; line_number = 309
        ; rx9d := _true
        ;info   309, 24
        bsf     interrupt__rx9d___byte, interrupt__rx9d___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 308
        ;  if _rx9d done
        ; line_number = 310
        ; command := _rcreg
        ;info   310, 25
        movf    _rcreg,w
        movwf   interrupt__command
        ; line_number = 311
        ;  _tx9d := _false
        ;info   311, 27
        bsf     __rp0___byte, __rp0___bit
        bcf     _tx9d___byte, _tx9d___bit

        ; # Dispatch on the command byte:
        ; line_number = 314
        ;  if rx9d start
        ;info   314, 29
        ; =>bit_code_emit@symbol(): sym=interrupt__rx9d
        ; No 1TEST: true.size=14 false.size=423
        ; No 2TEST: true.size=14 false.size=423
        ; 2GOTO: Single test with two GOTO's
        bcf     __rp0___byte, __rp0___bit
        btfss   interrupt__rx9d___byte, interrupt__rx9d___bit
        goto    interrupt__91
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; # We have an address byte:
        ; line_number = 316
        ;  if command = rb2bus_address start
        ;info   316, 34
        ; Left minus Right
        movf    rb2bus_address,w
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        subwf   interrupt__command,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=4 false.size=3
        ; No 2TEST: true.size=4 false.size=3
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    interrupt__89
        ; # We have an address match:
        ; line_number = 318
        ;  _txreg := rb2_ok
        ;info   318, 40
        movlw   165
        movwf   _txreg
        ; line_number = 319
        ;  state := state_begin_echo
        ;info   319, 42
        clrf    state
        ; line_number = 320
        ;  _adden := _false
        ;info   320, 43
        bcf     _adden___byte, _adden___bit
        goto    interrupt__90
        ; 2GOTO: Starting code 2
interrupt__89:
        ; # Somebody else is selected; only listen for address bytes:
        ; line_number = 323
        ;  _adden := _true
        ;info   323, 45
        bsf     _adden___byte, _adden___bit
        ; line_number = 324
        ;  state := state_deselected
        ;info   324, 46
        movlw   2
        movwf   state
interrupt__90:
        ; 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:11=uu=>00 code:00=uu=>00)
        ; line_number = 316
        ;  if command = rb2bus_address done
        ; Recombine code1_bit_states != code2_bit_states
        goto    interrupt__92
        ; 2GOTO: Starting code 2
interrupt__91:
        ; # Process the received byte based on our current {state}.
        ; line_number = 327
        ;  switch state start
        ;info   327, 49
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   interrupt__87>>8
        movwf   __pclath
        movf    state,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__87
        movwf   __pcl
        ; page_group 7
interrupt__87:
        goto    interrupt__82
        goto    interrupt__81
        goto    interrupt__80
        goto    interrupt__83
        goto    interrupt__84
        goto    interrupt__85
        goto    interrupt__86
        ; line_number = 328
        ; case 2
interrupt__80:
        ; # We should never received data bytes in the deselected
        ; # state, but we have this case "just in case":
        ; line_number = 331
        ;  do_nothing
        ;info   331, 61
        goto    interrupt__88
        ; line_number = 332
        ; case 1
interrupt__81:
        ; # This is the first byte of a client command that has
        ; # been received.  Figure out what to do with three levels
        ; # of nested switch statements.  The first level dispatches
        ; # on DDxx xxxx., the second on xxDD Dxxx, and the third
        ; # level on xxxx xDDD:
        ; # (DDxx xxxx):
        ; line_number = 339
        ;  switch command >> 6 start
        ;info   339, 62
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 340
        ; case_maximum 3
        movlw   interrupt__71>>8
        movwf   __pclath
interrupt__72 equ globals___0+65
        swapf   interrupt__command,w
        movwf   interrupt__72
        rrf     interrupt__72,f
        rrf     interrupt__72,w
        andlw   3
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__71
        movwf   __pcl
        ; page_group 4
interrupt__71:
        goto    interrupt__68
        goto    interrupt__69
        goto    interrupt__69
        goto    interrupt__70
        ; line_number = 341
        ; case 0
interrupt__68:
        ; # (00DD Dxxx):
        ; line_number = 343
        ;  switch (command >> 3) & 7 start
        ;info   343, 75
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 344
        ; case_maximum 7
        movlw   interrupt__55>>8
        movwf   __pclath
interrupt__56 equ globals___0+65
        rrf     interrupt__command,w
        movwf   interrupt__56
        rrf     interrupt__56,f
        rrf     interrupt__56,w
        andlw   7
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__55
        movwf   __pcl
        ; page_group 8
interrupt__55:
        goto    interrupt__50
        goto    interrupt__57
        goto    interrupt__51
        goto    interrupt__52
        goto    interrupt__53
        goto    interrupt__54
        goto    interrupt__57
        goto    interrupt__57
        ; line_number = 345
        ; case 0
interrupt__50:
        ; # (0000 0DDD):
        ; line_number = 347
        ;  switch command & 7 start
        ;info   347, 92
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 348
        ; case_maximum 7
        movlw   interrupt__8>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__8
        movwf   __pcl
        ; page_group 8
interrupt__8:
        goto    interrupt__4
        goto    interrupt__5
        goto    interrupt__6
        goto    interrupt__6
        goto    interrupt__7
        goto    interrupt__9
        goto    interrupt__9
        goto    interrupt__9
        ; line_number = 349
        ; case 0
interrupt__4:
        ; # Count Latch (0000 0000):
        ; line_number = 351
        ;  frozen[index_shaft0_high] := stable[index_shaft0_high]
        ;info   351, 106
        movf    stable,w
        movwf   frozen

        ; line_number = 353
        ; frozen[index_shaft0_low] := stable[index_shaft0_low]
        ;info   353, 108
        movf    stable+1,w
        movwf   frozen+1

        ; line_number = 355
        ; frozen[index_shaft1_high] := stable[index_shaft1_high]
        ;info   355, 110
        movf    stable+2,w
        movwf   frozen+2

        ; line_number = 357
        ; frozen[index_shaft1_low] := stable[index_shaft1_low]
        ;info   357, 112
        movf    stable+3,w
        movwf   frozen+3

        goto    interrupt__9
        ; line_number = 359
        ; case 1
interrupt__5:
        ; # Count Clear (0000 0001):
        ; line_number = 361
        ;  clear_request := _true
        ;info   361, 115
        bsf     clear_request___byte, clear_request___bit
        goto    interrupt__9
        ; line_number = 362
        ; case 2, 3
interrupt__6:
        ; # Shaft High Get (0000 001s):
        ; line_number = 365
        ;  if command@0 start
        ;info   365, 117
interrupt__select__1___byte equ interrupt__command
interrupt__select__1___bit equ 0
        ; =>bit_code_emit@symbol(): sym=interrupt__select__1
        ; No 1TEST: true.size=3 false.size=3
        ; No 2TEST: true.size=3 false.size=3
        ; 2GOTO: Single test with two GOTO's
        btfss   interrupt__select__1___byte, interrupt__select__1___bit
        goto    interrupt__2
        ; line_number = 366
        ; _txreg := frozen[index_shaft1_high]
        ;info   366, 119
        movf    frozen+2,w
        movwf   _txreg
        ; line_number = 367
        ;  frozen_shaft_low := frozen[index_shaft1_low]
        ;info   367, 121
        movf    frozen+3,w
        goto    interrupt__3
        ; 2GOTO: Starting code 2
interrupt__2:
        ; line_number = 369
        ; _txreg := frozen[index_shaft0_high]
        ;info   369, 123
        movf    frozen,w
        movwf   _txreg
        ; line_number = 370
        ;  frozen_shaft_low := frozen[index_shaft0_low]
        ;info   370, 125
        movf    frozen+1,w
interrupt__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:00=uu=>00)
        movwf   frozen_shaft_low
        ; line_number = 365
        ;  if command@0 done
        ; line_number = 371
        ; state := state_begin_echo
        ;info   371, 127
        clrf    state
        goto    interrupt__9
        ; line_number = 372
        ; case 4
interrupt__7:
        ; # Shaft Low Get (0000 0100):
        ; line_number = 374
        ;  _txreg := frozen_shaft_low
        ;info   374, 129
        movf    frozen_shaft_low,w
        movwf   _txreg
        ; line_number = 375
        ;  state := state_begin_echo
        ;info   375, 131
        clrf    state
interrupt__9:
        ; line_number = 347
        ;  switch command & 7 done
        goto    interrupt__57
        ; line_number = 376
        ; case 2
interrupt__51:
        ; # (0001 0DDD):
        ; line_number = 378
        ;  switch command & 7 start
        ;info   378, 133
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 379
        ; case_maximum 7
        movlw   interrupt__18>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__18
        movwf   __pcl
        ; page_group 8
interrupt__18:
        goto    interrupt__10
        goto    interrupt__11
        goto    interrupt__12
        goto    interrupt__13
        goto    interrupt__14
        goto    interrupt__15
        goto    interrupt__16
        goto    interrupt__17
        ; line_number = 380
        ; case 0
interrupt__10:
        ; # X Get (0001 0000):
        ; line_number = 382
        ;  _txreg := frozen[index_x_high]
        ;info   382, 147
        movf    frozen+4,w
        movwf   _txreg
        ; line_number = 383
        ;  next_byte := frozen[index_x_low]
        ;info   383, 149
        movf    frozen+5,w
        movwf   next_byte
        ; line_number = 384
        ;  state := state_next_send
        ;info   384, 151
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 385
        ; case 1
interrupt__11:
        ; # Y Get (0001 0001):
        ; line_number = 387
        ;  _txreg := frozen[index_y_high]
        ;info   387, 154
        movf    frozen+6,w
        movwf   _txreg
        ; line_number = 388
        ;  next_byte := frozen[index_y_low]
        ;info   388, 156
        movf    frozen+7,w
        movwf   next_byte
        ; line_number = 389
        ;  state := state_next_send
        ;info   389, 158
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 390
        ; case 2
interrupt__12:
        ; # Bearing 16 Get(0001 0010):
        ; line_number = 392
        ;  _txreg := frozen[index_bearing_high]
        ;info   392, 161
        movf    frozen+8,w
        movwf   _txreg
        ; line_number = 393
        ;  next_byte := frozen[index_bearing_low]
        ;info   393, 163
        movf    frozen+9,w
        movwf   next_byte
        ; line_number = 394
        ;  state := state_next_send
        ;info   394, 165
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 395
        ; case 3
interrupt__13:
        ; # Bearing 8 Get(0001 0011):
        ; line_number = 397
        ;  _txreg := frozen[index_bearing_high]
        ;info   397, 168
        movf    frozen+8,w
        movwf   _txreg
        ; line_number = 398
        ;  state := state_begin_echo
        ;info   398, 170
        clrf    state
        goto    interrupt__19
        ; line_number = 399
        ; case 4
interrupt__14:
        ; # Target X Get (0001 0100):
        ; line_number = 401
        ;  _txreg := frozen[index_target_x_high]
        ;info   401, 172
        movf    frozen+15,w
        movwf   _txreg
        ; line_number = 402
        ;  next_byte := frozen[index_target_x_low]
        ;info   402, 174
        movf    frozen+16,w
        movwf   next_byte
        ; line_number = 403
        ;  state := state_next_send
        ;info   403, 176
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 404
        ; case 5
interrupt__15:
        ; # Target Y Get (0001 0101):
        ; line_number = 406
        ;  _txreg := frozen[index_target_y_high]
        ;info   406, 179
        movf    frozen+17,w
        movwf   _txreg
        ; line_number = 407
        ;  next_byte := frozen[index_target_y_low]
        ;info   407, 181
        movf    frozen+18,w
        movwf   next_byte
        ; line_number = 408
        ;  state := state_next_send
        ;info   408, 183
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 409
        ; case 6
interrupt__16:
        ; # Target Bearing 16 Get(0001 0110):
        ; line_number = 411
        ;  _txreg := frozen[index_target_bearing_high]
        ;info   411, 186
        movf    frozen+10,w
        movwf   _txreg
        ; line_number = 412
        ;  next_byte := frozen[index_target_bearing_low]
        ;info   412, 188
        movf    frozen+11,w
        movwf   next_byte
        ; line_number = 413
        ;  state := state_next_send
        ;info   413, 190
        movlw   3
        movwf   state
        goto    interrupt__19
        ; line_number = 414
        ; case 7
interrupt__17:
        ; # Target Bearing 8 Get (0001 0111):
        ; line_number = 416
        ;  _txreg := frozen[index_target_bearing_high]
        ;info   416, 193
        movf    frozen+10,w
        movwf   _txreg
        ; line_number = 417
        ;  state := state_begin_echo
        ;info   417, 195
        clrf    state
interrupt__19:
        ; line_number = 378
        ;  switch command & 7 done
        goto    interrupt__57
        ; line_number = 418
        ; case 3
interrupt__52:
        ; # (0001 0DDD):
        ; line_number = 420
        ;  switch command & 7 start
        ;info   420, 197
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 421
        ; case_maximum 7
        movlw   interrupt__34>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__34
        movwf   __pcl
        ; page_group 8
interrupt__34:
        goto    interrupt__28
        goto    interrupt__29
        goto    interrupt__30
        goto    interrupt__31
        goto    interrupt__32
        goto    interrupt__33
        goto    interrupt__35
        goto    interrupt__35
        ; line_number = 422
        ; case 0
interrupt__28:
        ; # Target Distance Get (0001 1000):
        ; line_number = 424
        ;  _txreg := frozen[index_target_distance_high]
        ;info   424, 211
        movf    frozen+12,w
        movwf   _txreg
        ; line_number = 425
        ;  next_byte := frozen[index_target_distance_low]
        ;info   425, 213
        movf    frozen+13,w
        movwf   next_byte
        ; line_number = 426
        ;  state := state_next_send
        ;info   426, 215
        movlw   3
        movwf   state
        goto    interrupt__35
        ; line_number = 427
        ; case 1
interrupt__29:
        ; # Wheel Spacing Get (0001 1001):
        ; line_number = 429
        ;  _txreg := frozen[index_wheel_spacing_high]
        ;info   429, 218
        movf    frozen+19,w
        movwf   _txreg
        ; line_number = 430
        ;  next_byte := frozen[index_wheel_spacing_low]
        ;info   430, 220
        movf    frozen+20,w
        movwf   next_byte
        ; line_number = 431
        ;  state := state_next_send
        ;info   431, 222
        movlw   3
        movwf   state
        goto    interrupt__35
        ; line_number = 432
        ; case 2
interrupt__30:
        ; # Wheel Ticks Get (0001 1010):
        ; line_number = 434
        ;  _txreg := frozen[index_wheel_ticks_high]
        ;info   434, 225
        movf    frozen+21,w
        movwf   _txreg
        ; line_number = 435
        ;  next_byte := frozen[index_wheel_ticks_low]
        ;info   435, 227
        movf    frozen+22,w
        movwf   next_byte
        ; line_number = 436
        ;  state := state_next_send
        ;info   436, 229
        movlw   3
        movwf   state
        goto    interrupt__35
        ; line_number = 437
        ; case 3
interrupt__31:
        ; # Wheel Diameter Get (0001 1011):
        ; line_number = 439
        ;  _txreg := frozen[index_wheel_diameter_high]
        ;info   439, 232
        movf    frozen+23,w
        movwf   _txreg
        ; line_number = 440
        ;  next_byte := frozen[index_wheel_diameter_low]
        ;info   440, 234
        movf    frozen+24,w
        movwf   next_byte
        ; line_number = 441
        ;  state := state_next_send
        ;info   441, 236
        movlw   3
        movwf   state
        goto    interrupt__35
        ; line_number = 442
        ; case 4
interrupt__32:
        ; # Iteration Count Get (0001 1100):
        ; line_number = 444
        ;  _txreg := frozen[index_count]
        ;info   444, 239
        movf    frozen+14,w
        movwf   _txreg
        ; line_number = 445
        ;  state := state_begin_echo
        ;info   445, 241
        clrf    state
        goto    interrupt__35
        ; line_number = 446
        ; case 5
interrupt__33:
        ; # Counter Signs Get(0001 1101):
        ; line_number = 448
        ;  next_byte := 0
        ;info   448, 243
        clrf    next_byte
        ; line_number = 449
        ;  if shaft0_invert start
        ;info   449, 244
        ; =>bit_code_emit@symbol(): sym=shaft0_invert
        ; 1TEST: Single test with code in skip slot
        btfsc   shaft0_invert___byte, shaft0_invert___bit
        ; line_number = 450
        ; next_byte@0 := _true
        ;info   450, 245
interrupt__select__20___byte equ next_byte
interrupt__select__20___bit equ 0
        bsf     interrupt__select__20___byte, interrupt__select__20___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 449
        ;  if shaft0_invert done
        ; line_number = 451
        ; if shaft1_invert start
        ;info   451, 246
        ; =>bit_code_emit@symbol(): sym=shaft1_invert
        ; 1TEST: Single test with code in skip slot
        btfsc   shaft1_invert___byte, shaft1_invert___bit
        ; line_number = 452
        ; next_byte@1 := _true
        ;info   452, 247
interrupt__select__21___byte equ next_byte
interrupt__select__21___bit equ 1
        bsf     interrupt__select__21___byte, interrupt__select__21___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 451
        ; if shaft1_invert done
        ; line_number = 453
        ; if shafts_swap start
        ;info   453, 248
        ; =>bit_code_emit@symbol(): sym=shafts_swap
        ; 1TEST: Single test with code in skip slot
        btfsc   shafts_swap___byte, shafts_swap___bit
        ; line_number = 454
        ; next_byte@2 := _true
        ;info   454, 249
interrupt__select__22___byte equ next_byte
interrupt__select__22___bit equ 2
        bsf     interrupt__select__22___byte, interrupt__select__22___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 453
        ; if shafts_swap done
        ; line_number = 455
        ; if location_on start
        ;info   455, 250
        ; =>bit_code_emit@symbol(): sym=location_on
        ; 1TEST: Single test with code in skip slot
        btfsc   location_on___byte, location_on___bit
        ; line_number = 456
        ; next_byte@3 := _true
        ;info   456, 251
interrupt__select__23___byte equ next_byte
interrupt__select__23___bit equ 3
        bsf     interrupt__select__23___byte, interrupt__select__23___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 455
        ; if location_on done
        ; line_number = 457
        ; if test0 start
        ;info   457, 252
        ; =>bit_code_emit@symbol(): sym=test0
        ; 1TEST: Single test with code in skip slot
        btfsc   test0___byte, test0___bit
        ; line_number = 458
        ; next_byte@4 := _true
        ;info   458, 253
interrupt__select__24___byte equ next_byte
interrupt__select__24___bit equ 4
        bsf     interrupt__select__24___byte, interrupt__select__24___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 457
        ; if test0 done
        ; line_number = 459
        ; if test1 start
        ;info   459, 254
        ; =>bit_code_emit@symbol(): sym=test1
        ; 1TEST: Single test with code in skip slot
        btfsc   test1___byte, test1___bit
        ; line_number = 460
        ; next_byte@5 := _true
        ;info   460, 255
interrupt__select__25___byte equ next_byte
interrupt__select__25___bit equ 5
        bsf     interrupt__select__25___byte, interrupt__select__25___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 459
        ; if test1 done
        ; line_number = 461
        ; if test2 start
        ;info   461, 256
        ; =>bit_code_emit@symbol(): sym=test2
        ; 1TEST: Single test with code in skip slot
        btfsc   test2___byte, test2___bit
        ; line_number = 462
        ; next_byte@6 := _true
        ;info   462, 257
interrupt__select__26___byte equ next_byte
interrupt__select__26___bit equ 6
        bsf     interrupt__select__26___byte, interrupt__select__26___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 461
        ; if test2 done
        ; line_number = 463
        ; if test3 start
        ;info   463, 258
        ; =>bit_code_emit@symbol(): sym=test3
        ; 1TEST: Single test with code in skip slot
        btfsc   test3___byte, test3___bit
        ; line_number = 464
        ; next_byte@7 := _true
        ;info   464, 259
interrupt__select__27___byte equ next_byte
interrupt__select__27___bit equ 7
        bsf     interrupt__select__27___byte, interrupt__select__27___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 463
        ; if test3 done
        ; line_number = 465
        ; _txreg := next_byte
        ;info   465, 260
        movf    next_byte,w
        movwf   _txreg
        ; line_number = 466
        ;  state := state_begin_echo
        ;info   466, 262
        clrf    state
interrupt__35:
        ; line_number = 420
        ;  switch command & 7 done
        goto    interrupt__57
        ; line_number = 467
        ; case 4
interrupt__53:
        ; # (0010 0DDD):
        ; line_number = 469
        ;  switch command & 7 start
        ;info   469, 264
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 470
        ; case_maximum 7
        movlw   interrupt__42>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__42
        movwf   __pcl
        ; page_group 8
interrupt__42:
        goto    interrupt__36
        goto    interrupt__37
        goto    interrupt__38
        goto    interrupt__39
        goto    interrupt__40
        goto    interrupt__41
        goto    interrupt__43
        goto    interrupt__43
        ; line_number = 471
        ; case 0
interrupt__36:
        ; # X Set (0010 0000):
        ; line_number = 473
        ;  store_index := index_x_high
        ;info   473, 278
        movlw   4
        movwf   store_index
        ; line_number = 474
        ;  location_change_request := _true
        ;info   474, 280
        bsf     location_change_request___byte, location_change_request___bit
        ; line_number = 475
        ;  state := state_store_high
        ;info   475, 281
        movlw   4
        movwf   state
        goto    interrupt__43
        ; line_number = 476
        ; case 1
interrupt__37:
        ; # Y Set (0010 0001):
        ; line_number = 478
        ;  store_index := index_y_high
        ;info   478, 284
        movlw   6
        movwf   store_index
        ; line_number = 479
        ;  location_change_request := _true
        ;info   479, 286
        bsf     location_change_request___byte, location_change_request___bit
        ; line_number = 480
        ;  state := state_store_high
        ;info   480, 287
        movlw   4
        movwf   state
        goto    interrupt__43
        ; line_number = 481
        ; case 2
interrupt__38:
        ; # Bearing 16 Set (0010 0010):
        ; line_number = 483
        ;  store_index := index_bearing_high
        ;info   483, 290
        movlw   8
        movwf   store_index
        ; line_number = 484
        ;  location_change_request := _true
        ;info   484, 292
        bsf     location_change_request___byte, location_change_request___bit
        ; line_number = 485
        ;  state := state_store_high
        ;info   485, 293
        movlw   4
        movwf   state
        goto    interrupt__43
        ; line_number = 486
        ; case 3
interrupt__39:
        ; # Navigation Latch (0010 0011):
        ; line_number = 488
        ;  frozen[index_x_high] := stable[index_x_high]
        ;info   488, 296
        movf    stable+4,w
        movwf   frozen+4
        ; line_number = 489
        ;  frozen[index_x_low] := stable[index_x_low]
        ;info   489, 298
        movf    stable+5,w
        movwf   frozen+5

        ; line_number = 491
        ;  frozen[index_y_high] := stable[index_y_high]
        ;info   491, 300
        movf    stable+6,w
        movwf   frozen+6
        ; line_number = 492
        ;  frozen[index_y_low] := stable[index_y_low]
        ;info   492, 302
        movf    stable+7,w
        movwf   frozen+7

        ; line_number = 494
        ;  frozen[index_bearing_high] := stable[index_bearing_high]
        ;info   494, 304
        movf    stable+8,w
        movwf   frozen+8

        ; line_number = 496
        ; frozen[index_bearing_low] := stable[index_bearing_low] 
        ;info   496, 306
        movf    stable+9,w
        movwf   frozen+9

        ; line_number = 499
        ; frozen[index_target_bearing_high] := stable[index_target_bearing_high]
        ;info   499, 308
        movf    stable+10,w
        movwf   frozen+10

        ; line_number = 501
        ; frozen[index_target_bearing_low] := stable[index_target_bearing_low] 	
        ;info   501, 310
        movf    stable+11,w
        movwf   frozen+11

        ; line_number = 504
        ; frozen[index_target_distance_high] := stable[index_target_distance_high]
        ;info   504, 312
        movf    stable+12,w
        movwf   frozen+12

        ; line_number = 506
        ; frozen[index_target_distance_low] := stable[index_target_distance_low] 	
        ;info   506, 314
        movf    stable+13,w
        movwf   frozen+13

        ; line_number = 509
        ; frozen[index_count] := stable[index_count]
        ;info   509, 316
        movf    stable+14,w
        movwf   frozen+14
        ; line_number = 510
        ;  location_on := _true
        ;info   510, 318
        bsf     location_on___byte, location_on___bit
        goto    interrupt__43
        ; line_number = 511
        ; case 4
interrupt__40:
        ; # Target X Set (0010 0100):
        ; line_number = 513
        ;  store_index := index_target_x_high
        ;info   513, 320
        movlw   15
        movwf   store_index
        ; line_number = 514
        ;  target_change_request := _true
        ;info   514, 322
        bsf     target_change_request___byte, target_change_request___bit
        ; line_number = 515
        ;  state := state_store_high
        ;info   515, 323
        movlw   4
        movwf   state
        goto    interrupt__43
        ; line_number = 516
        ; case 5
interrupt__41:
        ; # Target Y Set (0010 0101):
        ; line_number = 518
        ;  store_index := index_target_y_high
        ;info   518, 326
        movlw   17
        movwf   store_index
        ; line_number = 519
        ;  target_change_request := _true
        ;info   519, 328
        bsf     target_change_request___byte, target_change_request___bit
        ; line_number = 520
        ;  state := state_store_high
        ;info   520, 329
        movlw   4
        movwf   state
interrupt__43:
        ; line_number = 469
        ;  switch command & 7 done
        goto    interrupt__57
        ; line_number = 521
        ; case 5
interrupt__54:
        ; # (0010 1DDD):
        ; line_number = 523
        ;  switch command & 7 start
        ;info   523, 332
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 524
        ; case_maximum 7
        movlw   interrupt__48>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__48
        movwf   __pcl
        ; page_group 8
interrupt__48:
        goto    interrupt__49
        goto    interrupt__44
        goto    interrupt__45
        goto    interrupt__46
        goto    interrupt__47
        goto    interrupt__49
        goto    interrupt__49
        goto    interrupt__49
        ; line_number = 525
        ; case 1
interrupt__44:
        ; # Wheel Spacing Get (0010 1001):
        ; line_number = 527
        ;  store_index := index_wheel_spacing_high
        ;info   527, 346
        movlw   19
        movwf   store_index
        ; line_number = 528
        ;  wheel_change_request := _true
        ;info   528, 348
        bsf     wheel_change_request___byte, wheel_change_request___bit
        ; line_number = 529
        ;  state := state_store_high
        ;info   529, 349
        movlw   4
        movwf   state
        goto    interrupt__49
        ; line_number = 530
        ; case 2
interrupt__45:
        ; # Wheel Ticks Set (0010 1010):
        ; line_number = 532
        ;  store_index := index_wheel_ticks_high
        ;info   532, 352
        movlw   21
        movwf   store_index
        ; line_number = 533
        ;  wheel_change_request := _true
        ;info   533, 354
        bsf     wheel_change_request___byte, wheel_change_request___bit
        ; line_number = 534
        ;  state := state_store_high
        ;info   534, 355
        movlw   4
        movwf   state
        goto    interrupt__49
        ; line_number = 535
        ; case 3
interrupt__46:
        ; # Wheel Diameter Set (0010 1011):
        ; line_number = 537
        ;  store_index := index_wheel_diameter_high
        ;info   537, 358
        movlw   23
        movwf   store_index
        ; line_number = 538
        ;  wheel_change_request := _true
        ;info   538, 360
        bsf     wheel_change_request___byte, wheel_change_request___bit
        ; line_number = 539
        ;  state := state_store_high
        ;info   539, 361
        movlw   4
        movwf   state
        ; # Counter Signs Set (0010 1100):
        goto    interrupt__49
        ; line_number = 541
        ; case 4
interrupt__47:
        ; line_number = 542
        ; state := state_signs_store
        ;info   542, 364
        movlw   6
        movwf   state
interrupt__49:
        ; line_number = 523
        ;  switch command & 7 done
interrupt__57:
        ; line_number = 343
        ;  switch (command >> 3) & 7 done
        goto    interrupt__73
        ; line_number = 543
        ; case 1, 2
interrupt__69:
        ; # (01xx xxx:) or (10xx xxxx):
        ; line_number = 545
        ;  _txreg := _rcreg + 1
        ;info   545, 367
        incf    _rcreg,w
        movwf   _txreg
        ; line_number = 546
        ;  state := state_begin_echo
        ;info   546, 369
        clrf    state
        goto    interrupt__73
        ; line_number = 547
        ; case 3
interrupt__70:
        ; # (11DD Dxxx):
        ; line_number = 549
        ;  switch (command >> 3) & 7 start
        ;info   549, 371
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        ; line_number = 550
        ; case_maximum 7
        movlw   interrupt__65>>8
        movwf   __pclath
interrupt__66 equ globals___0+65
        rrf     interrupt__command,w
        movwf   interrupt__66
        rrf     interrupt__66,f
        rrf     interrupt__66,w
        andlw   7
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__65
        movwf   __pcl
        ; page_group 8
interrupt__65:
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__67
        goto    interrupt__64
        ; line_number = 551
        ; case 7
interrupt__64:
        ; # (1111 1DDD):
        ; line_number = 553
        ;  switch command & 7 start
        ;info   553, 388
        ; switch_before:(data:XX=cc=>XX code:XX=cc=>XX) size=0
        movlw   interrupt__62>>8
        movwf   __pclath
        movlw   7
        andwf   interrupt__command,w
        ; switch after expression:(data:00=uu=>00 code:XX=cc=>XX)
        addlw   interrupt__62
        movwf   __pcl
        ; page_group 8
interrupt__62:
        goto    interrupt__63
        goto    interrupt__63
        goto    interrupt__63
        goto    interrupt__63
        goto    interrupt__58
        goto    interrupt__59
        goto    interrupt__60
        goto    interrupt__61
        ; line_number = 554
        ; case 4
interrupt__58:
        ; # 1111 1100 (Address Set)
        ; #FIXME: need to add!!!
        ; line_number = 557
        ;  do_nothing
        ;info   557, 402
        goto    interrupt__63
        ; line_number = 558
        ; case 5
interrupt__59:
        ; # 1111 1101 (Id_Next):
        ; line_number = 560
        ;  _txreg := id[id_index]
        ;info   560, 403
        movf    id_index,w
        call    id
        movwf   _txreg
        ; line_number = 561
        ;  id_index := id_index + 1
        ;info   561, 406
        incf    id_index,f
        ; line_number = 562
        ;  if id_index >= id.size start
        ;info   562, 407
        movlw   24
        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 = 563
        ; id_index := id_index - 1
        ;info   563, 410
        decf    id_index,f
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 562
        ;  if id_index >= id.size done
        ; line_number = 564
        ; state := state_begin_echo
        ;info   564, 411
        clrf    state
        goto    interrupt__63
        ; line_number = 565
        ; case 6
interrupt__60:
        ; # 1111 1110 (Id_Start):
        ; line_number = 567
        ;  id_index := 0
        ;info   567, 413
        clrf    id_index
        ; line_number = 568
        ;  _txreg := id.size
        ;info   568, 414
        movlw   24
        movwf   _txreg
        ; line_number = 569
        ;  state := state_begin_echo
        ;info   569, 416
        clrf    state
        goto    interrupt__63
        ; line_number = 570
        ; case 7
interrupt__61:
        ; # 1111 1111 (Deselect):
        ; line_number = 572
        ;  _adden := _true
        ;info   572, 418
        bsf     _adden___byte, _adden___bit
        ; line_number = 573
        ;  state := state_deselected
        ;info   573, 419
        movlw   2
        movwf   state
interrupt__63:
        ; line_number = 553
        ;  switch command & 7 done
interrupt__67:
        ; line_number = 549
        ;  switch (command >> 3) & 7 done
interrupt__73:
        ; line_number = 339
        ;  switch command >> 6 done
        goto    interrupt__88
        ; line_number = 574
        ; case 0
interrupt__82:
        ; # Ignore echoed byte and enter "begin" state for the next
        ; # received byte:
        ; line_number = 577
        ;  state := state_begin
        ;info   577, 422
        movlw   1
        movwf   state
        goto    interrupt__88
        ; line_number = 578
        ; case 3
interrupt__83:
        ; # Send {next byte} and then then go into {state_begin_echo}
        ; # to force the next byte to be "eaten" before waiting
        ; # for the next command:
        ; line_number = 582
        ;  _txreg := next_byte
        ;info   582, 425
        movf    next_byte,w
        movwf   _txreg
        ; line_number = 583
        ;  state := state_begin_echo
        ;info   583, 427
        clrf    state
        goto    interrupt__88
        ; line_number = 584
        ; case 4
interrupt__84:
        ; # This is the first byte of a two byte store command into
        ; # {frozen}.  We remember the byte, and enter the
        ; # {state_store_low} state:
        ; line_number = 588
        ;  store_high := command
        ;info   588, 429
        movf    interrupt__command,w
        movwf   store_high
        ; line_number = 589
        ;  state := state_store_low
        ;info   589, 431
        movlw   5
        movwf   state
        goto    interrupt__88
        ; line_number = 590
        ; case 5
interrupt__85:
        ; # We have just received the second byte a a two byte store
        ; # into {frozon}.   Store the two bytes and listen for the
        ; # next client command byte:
        ; # Atomically update the word since we are in the intterupt
        ; # routine and nobody can interrupt us (at least not on a
        ; # PIC.)
        ; line_number = 597
        ;  frozen[store_index] := store_high
        ;info   597, 434
        ; index_fsr_first
        movf    store_index,w
        addlw   frozen
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    store_high,w
        movwf   __indf
        ; line_number = 598
        ;  frozen[store_index + 1] := command
        ;info   598, 440
        ; index_fsr_first
        incf    store_index,w
        addlw   frozen
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movf    interrupt__command,w
        movwf   __indf
        ; line_number = 599
        ;  if target_change_request start
        ;info   599, 446
        ; =>bit_code_emit@symbol(): sym=target_change_request
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   target_change_request___byte, target_change_request___bit
        goto    interrupt__74
        ; line_number = 600
        ; target_change_request := _false
        ;info   600, 448
        bcf     target_change_request___byte, target_change_request___bit
        ; line_number = 601
        ;  target_changed := _true
        ;info   601, 449
        bsf     target_changed___byte, target_changed___bit
        ; Recombine size1 = 0 || size2 = 0
interrupt__74:
        ; line_number = 599
        ;  if target_change_request done
        ; line_number = 602
        ; if wheel_change_request start
        ;info   602, 450
        ; =>bit_code_emit@symbol(): sym=wheel_change_request
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   wheel_change_request___byte, wheel_change_request___bit
        goto    interrupt__75
        ; line_number = 603
        ; wheel_change_request := _false
        ;info   603, 452
        bcf     wheel_change_request___byte, wheel_change_request___bit
        ; line_number = 604
        ;  wheel_changed := _true
        ;info   604, 453
        bsf     wheel_changed___byte, wheel_changed___bit
        ; Recombine size1 = 0 || size2 = 0
interrupt__75:
        ; line_number = 602
        ; if wheel_change_request done
        ; line_number = 605
        ; if location_change_request start
        ;info   605, 454
        ; =>bit_code_emit@symbol(): sym=location_change_request
        ; No 1TEST: true.size=2 false.size=0
        ; No 2TEST: true.size=2 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   location_change_request___byte, location_change_request___bit
        goto    interrupt__76
        ; line_number = 606
        ; location_change_request := _false
        ;info   606, 456
        bcf     location_change_request___byte, location_change_request___bit
        ; line_number = 607
        ;  location_changed := _true
        ;info   607, 457
        bsf     location_changed___byte, location_changed___bit
        ; Recombine size1 = 0 || size2 = 0
interrupt__76:
        ; line_number = 605
        ; if location_change_request done
        ; line_number = 608
        ; state := state_begin
        ;info   608, 458
        movlw   1
        movwf   state
        goto    interrupt__88
        ; line_number = 609
        ; case 6
interrupt__86:
        ; # The next byte is a signs byte:
        ; line_number = 611
        ;  shaft0_invert := _false
        ;info   611, 461
        bcf     shaft0_invert___byte, shaft0_invert___bit
        ; line_number = 612
        ;  shaft1_invert := _false
        ;info   612, 462
        bcf     shaft1_invert___byte, shaft1_invert___bit
        ; line_number = 613
        ;  shafts_swap := _false
        ;info   613, 463
        bcf     shafts_swap___byte, shafts_swap___bit
        ; line_number = 614
        ;  if command@0 start
        ;info   614, 464
interrupt__select__77___byte equ interrupt__command
interrupt__select__77___bit equ 0
        ; =>bit_code_emit@symbol(): sym=interrupt__select__77
        ; 1TEST: Single test with code in skip slot
        btfsc   interrupt__select__77___byte, interrupt__select__77___bit
        ; line_number = 615
        ; shaft0_invert := _true
        ;info   615, 465
        bsf     shaft0_invert___byte, shaft0_invert___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 614
        ;  if command@0 done
        ; line_number = 616
        ; if command@1		 start
        ;info   616, 466
interrupt__select__78___byte equ interrupt__command
interrupt__select__78___bit equ 1
        ; =>bit_code_emit@symbol(): sym=interrupt__select__78
        ; 1TEST: Single test with code in skip slot
        btfsc   interrupt__select__78___byte, interrupt__select__78___bit
        ; line_number = 617
        ; shaft1_invert := _true
        ;info   617, 467
        bsf     shaft1_invert___byte, shaft1_invert___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 616
        ; if command@1		 done
        ; line_number = 618
        ; if command@2 start
        ;info   618, 468
interrupt__select__79___byte equ interrupt__command
interrupt__select__79___bit equ 2
        ; =>bit_code_emit@symbol(): sym=interrupt__select__79
        ; 1TEST: Single test with code in skip slot
        btfsc   interrupt__select__79___byte, interrupt__select__79___bit
        ; line_number = 619
        ; shafts_swap := _true
        ;info   619, 469
        bsf     shafts_swap___byte, shafts_swap___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 618
        ; if command@2 done
        ; line_number = 620
        ; state := state_begin
        ;info   620, 470
        movlw   1
        movwf   state

interrupt__88:
        ; line_number = 327
        ;  switch state done
interrupt__92:
        ; 2GOTO: code1 final bitstates:(data:11=uu=>00 code:00=uu=>00)
        ; 2GOTO: code2 final bitstates:(data:00=uu=>00 code:00=uu=>00)
        ; 2GOTO: code final bitstates:(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 314
        ;  if rx9d done
        ; Recombine size1 = 0 || size2 = 0
interrupt__93:
        ; line_number = 295
        ;  if _rcif done
        ; # Save the {_fsr}:
        ; line_number = 623
        ;  _pclath := pclath_save
        ;info   623, 472
        movf    pclath_save,w
        movwf   _pclath
        ; line_number = 624
        ;  _fsr := fsr_save
        ;info   624, 474
        movf    fsr_save,w
        movwf   _fsr


        ; 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  





        ; line_number = 629
        ; constant wheel_diameter = 34
wheel_diameter equ 34
        ; line_number = 630
        ; constant wheel_diameter_high = wheel_diameter >> 8
wheel_diameter_high equ 0
        ; line_number = 631
        ; constant wheel_diameter_low = wheel_diameter & 0xff
wheel_diameter_low equ 34
        ; line_number = 632
        ; constant wheel_ticks = 6000
wheel_ticks equ 6000
        ; line_number = 633
        ; constant wheel_ticks_high = wheel_ticks >> 8
wheel_ticks_high equ 23
        ; line_number = 634
        ; constant wheel_ticks_low = wheel_ticks & 0xff
wheel_ticks_low equ 112
        ; line_number = 635
        ; constant wheel_spacing = 85
wheel_spacing equ 85
        ; line_number = 636
        ; constant wheel_spacing_high = wheel_spacing >> 8
wheel_spacing_high equ 0
        ; line_number = 637
        ; constant wheel_spacing_low = wheel_spacing & 0xff
wheel_spacing_low equ 85

        ; line_number = 639
        ;info   639, 481
        ; procedure reset
reset:
        ; arguments_none
        ; line_number = 641
        ;  returns_nothing

        ; # This procedure will reset the module.

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 645
        ;  call rb2bus_initialize(5)
        ;info   645, 481
        movlw   5
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    rb2bus_initialize

        ; # The synchronous serial port can be run in master mode at three
        ; # different clock rates:
        ; #
        ; #    Fosc/4 - SSPM<3:0> = 0000   = 5MHz @ Fosc=20MHz
        ; #    Fosc/16 - SSPM<3:0> = 0001  = 1.25MHz @ Fosc=20MHz
        ; #    Fosc/64 - SSPM<3:0> = 0010  = .3125MHz @ Fosc=20Mhz
        ; #
        ; # Technically, the specifications for the LS7366 dual quadrature
        ; # counter specify the following:
        ; #
        ; #    SCK High Pulse width = 100ns and
        ; #    SCK Low Pulse width = 100ns,
        ; #    thus SCK maximum fequency = 5 MHz (suggesting Fosc/4)

        ; # Initialize {_sspstat} (only {_cke} and {_smp} are writable):
        ; # Transmit from active to idle:
        ; line_number = 663
        ;  _cke := _true
        ;info   663, 485
        bcf     __rp1___byte, __rp1___bit
        bsf     _cke___byte, _cke___bit
        ; # Sample data in the middle:
        ; line_number = 665
        ;  _smp := _false
        ;info   665, 487
        bcf     _smp___byte, _smp___bit

        ; # Initialize {_sspcon}:
        ; # SSPM<3:0> := 0 (= SPI Master mode Fosc/4):
        ; line_number = 669
        ;  _sspcon := 0
        ;info   669, 488
        bcf     __rp0___byte, __rp0___bit
        clrf    _sspcon
        ; # Clock idle is at low
        ; line_number = 671
        ;  _ckp := _false
        ;info   671, 490
        bcf     _ckp___byte, _ckp___bit

        ; # Note {_ckp}=0 and {_cke}=1 is the one that matches the LS7366
        ; # spec. sheet for clocking.  {_smp}=0 is the correct sample location.

        ; # Make sure the two shaft encoder chips are deselected

        ; # Enable Synchronous Serial Port:
        ; line_number = 679
        ;  _sspen := _true
        ;info   679, 491
        bsf     _sspen___byte, _sspen___bit

        ; ## None of this is needed!!!
        ; ## The _bf (buffer full) bit is read-only and it initializes to 0.
        ; ## We need to get it set.  This is done by causing the synchronous
        ; ## serial port to write (and read) 8 bits:
        ; #_sspbuf := 0
        ; ## In about 8 cycles {_bf} should be 1:

        ; # Now intialize our favorite shaft encoder chips:
        ; line_number = 689
        ;  call ls_initialize()
        ;info   689, 492
        call    ls_initialize

        ; line_number = 691
        ;  clear_request := _false
        ;info   691, 493
        bcf     clear_request___byte, clear_request___bit
        ; line_number = 692
        ;  location_on := _false
        ;info   692, 494
        bcf     location_on___byte, location_on___bit
        ; line_number = 693
        ;  location_changed := _true
        ;info   693, 495
        bsf     location_changed___byte, location_changed___bit
        ; line_number = 694
        ;  location_change_request := _false
        ;info   694, 496
        bcf     location_change_request___byte, location_change_request___bit
        ; line_number = 695
        ;  target_changed := _true
        ;info   695, 497
        bsf     target_changed___byte, target_changed___bit
        ; line_number = 696
        ;  target_change_request := _false
        ;info   696, 498
        bcf     target_change_request___byte, target_change_request___bit
        ; line_number = 697
        ;  wheel_changed := _true
        ;info   697, 499
        bsf     wheel_changed___byte, wheel_changed___bit
        ; line_number = 698
        ;  wheel_change_request := _false
        ;info   698, 500
        bcf     wheel_change_request___byte, wheel_change_request___bit

        ; line_number = 700
        ;  state := state_deselected
        ;info   700, 501
        movlw   2
        movwf   state
        ; line_number = 701
        ;  id_index := 0
        ;info   701, 503
        clrf    id_index
        ; line_number = 702
        ;  loop_exactly up_down_data_size start
        ;info   702, 504
reset__1 equ globals___0+66
        movlw   25
        movwf   reset__1
reset__2:
        ; line_number = 703
        ; frozen[id_index] := id_index + 0x40
        ;info   703, 506
        ; index_fsr_first
        movf    id_index,w
        addlw   frozen
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movlw   64
        addwf   id_index,w
        movwf   __indf
        ; line_number = 704
        ;  id_index := id_index + 1
        ;info   704, 513
        incf    id_index,f
        ; line_number = 702
        ;  loop_exactly up_down_data_size wrap-up
        decfsz  reset__1,f
        goto    reset__2
        ; line_number = 702
        ;  loop_exactly up_down_data_size done
        ; line_number = 705
        ; id_index := 0
        ;info   705, 516
        clrf    id_index
        ; line_number = 706
        ;  loop_exactly up_data_size start
        ;info   706, 517
reset__3 equ globals___0+66
        movlw   15
        movwf   reset__3
reset__4:
        ; line_number = 707
        ; working[id_index] := id_index + 0x20
        ;info   707, 519
        ; index_fsr_first
        movf    id_index,w
        addlw   working
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movlw   32
        addwf   id_index,w
        movwf   __indf
        ; line_number = 708
        ;  stable[id_index] := id_index + 0x60
        ;info   708, 526
        ; index_fsr_first
        movf    id_index,w
        addlw   stable
        movwf   __fsr
        bcf     __irp___byte, __irp___bit
        movlw   96
        addwf   id_index,w
        movwf   __indf
        ; line_number = 709
        ;  id_index := id_index + 1
        ;info   709, 533
        incf    id_index,f
        ; line_number = 706
        ;  loop_exactly up_data_size wrap-up
        decfsz  reset__3,f
        goto    reset__4
        ; line_number = 706
        ;  loop_exactly up_data_size done
        ; line_number = 710
        ; id_index := 0
        ;info   710, 536
        clrf    id_index

        ; line_number = 712
        ;  frozen[index_wheel_spacing_high] := wheel_spacing_high
        ;info   712, 537
        movlw   0
        movwf   frozen+19
        ; line_number = 713
        ;  frozen[index_wheel_spacing_low] := wheel_spacing_low
        ;info   713, 539
        movlw   85
        movwf   frozen+20
        ; line_number = 714
        ;  frozen[index_wheel_diameter_high] := wheel_diameter_high
        ;info   714, 541
        movlw   0
        movwf   frozen+23
        ; line_number = 715
        ;  frozen[index_wheel_diameter_low] := wheel_diameter_low
        ;info   715, 543
        movlw   34
        movwf   frozen+24
        ; line_number = 716
        ;  frozen[index_wheel_ticks_high] := wheel_ticks_high
        ;info   716, 545
        movlw   23
        movwf   frozen+21
        ; line_number = 717
        ;  frozen[index_wheel_ticks_low] := wheel_ticks_low
        ;info   717, 547
        movlw   112
        movwf   frozen+22

        ; line_number = 719
        ;  frozen[index_target_x_high] := 0
        ;info   719, 549
        movlw   0
        movwf   frozen+15
        ; line_number = 720
        ;  frozen[index_target_x_low] := 100
        ;info   720, 551
        movlw   100
        movwf   frozen+16
        ; line_number = 721
        ;  frozen[index_target_y_high] := 0
        ;info   721, 553
        movlw   0
        movwf   frozen+17
        ; line_number = 722
        ;  frozen[index_target_y_low] := 100
        ;info   722, 555
        movlw   100
        movwf   frozen+18

        ; line_number = 724
        ;  shaft0_invert := _false
        ;info   724, 557
        bcf     shaft0_invert___byte, shaft0_invert___bit
        ; line_number = 725
        ;  shaft1_invert := _true
        ;info   725, 558
        bsf     shaft1_invert___byte, shaft1_invert___bit
        ; line_number = 726
        ;  shafts_swap := _false
        ;info   726, 559
        bcf     shafts_swap___byte, shafts_swap___bit

        ; line_number = 728
        ;  test0 := _false
        ;info   728, 560
        bcf     test0___byte, test0___bit
        ; line_number = 729
        ;  test1 := _false
        ;info   729, 561
        bcf     test1___byte, test1___bit
        ; line_number = 730
        ;  test2 := _false
        ;info   730, 562
        bcf     test2___byte, test2___bit
        ; line_number = 731
        ;  test3 := _false
        ;info   731, 563
        bcf     test3___byte, test3___bit


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




        ; line_number = 734
        ;info   734, 565
        ; procedure ls_initialize
ls_initialize:
        ; arguments_none
        ; line_number = 736
        ;  returns_nothing

        ; # Initialize both of the shaft encoder chips:

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 740
        ;  call ls_command_put(ls_clear | ls_mdr0)
        ;info   740, 565
        movlw   8
        call    ls_command_put
        ; line_number = 741
        ;  call ls_command_put(ls_clear | ls_mdr1)
        ;info   741, 567
        movlw   16
        call    ls_command_put
        ; line_number = 742
        ;  call ls_command_put(ls_clear | ls_str)
        ;info   742, 569
        movlw   48
        call    ls_command_put
        ; line_number = 743
        ;  call ls_command_put(ls_clear | ls_cntr)
        ;info   743, 571
        movlw   32
        call    ls_command_put

        ; line_number = 745
        ;  call ls_command_put(ls_write | ls_mdr0 | ls_select_both)
        ;info   745, 573
        movlw   139
        call    ls_command_put
        ; line_number = 746
        ;  call ls_byte_put(ls_mdr0_value)
        ;info   746, 575
        movlw   0
        call    ls_byte_put

        ; # This last command enables counting:
        ; line_number = 749
        ;  call ls_command_put(ls_write | ls_mdr1 | ls_select_both)
        ;info   749, 577
        movlw   147
        call    ls_command_put
        ; line_number = 750
        ;  call ls_byte_put(ls_mdr1_value)
        ;info   750, 579
        movlw   2
        call    ls_byte_put


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




        ; line_number = 753
        ;info   753, 582
        ; procedure ls_shaft_select
ls_shaft_select:
        ; Last argument is sitting in W; save into argument variable
        movwf   ls_shaft_select__command
        ; delay=4294967295
        ; line_number = 754
        ; argument command byte
ls_shaft_select__command equ globals___0+62
        ; line_number = 755
        ;  returns byte

        ; # This procedure will return {ls_select_shaft0} or {ls_select_shaft1}
        ; # depending upon whether {command}@0 is set or not.

        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 760
        ;  if command@0 start
        ;info   760, 583
ls_shaft_select__select__1___byte equ ls_shaft_select__command
ls_shaft_select__select__1___bit equ 0
        ; =>bit_code_emit@symbol(): sym=ls_shaft_select__select__1
        ; 1TEST: Single test with code in skip slot
        btfsc   ls_shaft_select__select__1___byte, ls_shaft_select__select__1___bit
        ; line_number = 761
        ; return ls_select_shaft1 start
        ; line_number = 761
        ;info   761, 584
        retlw   2
        ; line_number = 761
        ; return ls_select_shaft1 done
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 760
        ;  if command@0 done
        ; line_number = 762
        ; return ls_select_shaft0 start
        ; line_number = 762
        ;info   762, 585
        retlw   1
        ; line_number = 762
        ; return ls_select_shaft0 done


        ; delay after procedure statements=non-uniform




        ; line_number = 765
        ;info   765, 586
        ; procedure ls_command_put
ls_command_put:
        ; Last argument is sitting in W; save into argument variable
        movwf   ls_command_put__ir
        ; delay=4294967295
        ; line_number = 766
        ; argument ir byte
ls_command_put__ir equ globals___0+63
        ; line_number = 767
        ;  returns_nothing

        ; # This procedure will cause {ir} to be sent to the appropriate
        ; # shaft encoder.  Construct a command by OR'ing together an
        ; # operation ({ls_clear}, {ls_read}, {ls_write}, or {ls_load},
        ; # with a register ({ls_mdr0}, {ls_mdr1}, {ls_dtr}, {ls_cntr},
        ; # {ls_otr}, {ls_str}), and either {ls_shaft0} and/or {ls_shaft1}.
        ; # If both {ls_shaft0} and {ls_shaft1} are set at the same time,
        ; # the operation should be one of {ls_clear}, {ls_write}, or
        ; # {ls_load}; only one shaft encoder chip at a time can be read.

        ; # Force both shaft chips to be deselected:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 779
        ;  shaft0 := _true
        ;info   779, 587
        bsf     shaft0___byte, shaft0___bit
        ; line_number = 780
        ;  shaft1 := _true
        ;info   780, 588
        bsf     shaft1___byte, shaft1___bit

        ; # Select the appropriate
        ; line_number = 783
        ;  if ir@ls_shaft0_bit start
        ;info   783, 589
ls_command_put__select__1___byte equ ls_command_put__ir
ls_command_put__select__1___bit equ 0
        ; =>bit_code_emit@symbol(): sym=ls_command_put__select__1
        ; 1TEST: Single test with code in skip slot
        btfsc   ls_command_put__select__1___byte, ls_command_put__select__1___bit
        ; line_number = 784
        ; shaft0 := _false
        ;info   784, 590
        bcf     shaft0___byte, shaft0___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 783
        ;  if ir@ls_shaft0_bit done
        ; line_number = 785
        ; if ir@ls_shaft1_bit start
        ;info   785, 591
ls_command_put__select__2___byte equ ls_command_put__ir
ls_command_put__select__2___bit equ 1
        ; =>bit_code_emit@symbol(): sym=ls_command_put__select__2
        ; 1TEST: Single test with code in skip slot
        btfsc   ls_command_put__select__2___byte, ls_command_put__select__2___bit
        ; line_number = 786
        ; shaft1 := _false
        ;info   786, 592
        bcf     shaft1___byte, shaft1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 785
        ; if ir@ls_shaft1_bit done
        ; line_number = 787
        ; call ls_byte_put(ir)
        ;info   787, 593
        movf    ls_command_put__ir,w
        call    ls_byte_put


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




        ; line_number = 790
        ;info   790, 596
        ; procedure ls_byte_put
ls_byte_put:
        ; Last argument is sitting in W; save into argument variable
        movwf   ls_byte_put__data
        ; delay=4294967295
        ; line_number = 791
        ; argument data byte
ls_byte_put__data equ globals___0+64
        ; line_number = 792
        ;  returns_nothing

        ; # This procedure will output {data} to the currently
        ; # select chip.

        ; # Ship the byte on its way:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 798
        ;  _sspbuf := data
        ;info   798, 597
        movf    ls_byte_put__data,w
        movwf   _sspbuf

        ; # Wait for the transmission to finish:
        ; line_number = 801
        ;  while !_bf start
ls_byte_put__1:
        ;info   801, 599
        ; =>bit_code_emit@symbol(): sym=_bf
        ; 1TEST: Single test with code in skip slot
        bsf     __rp0___byte, __rp0___bit
        btfss   _bf___byte, _bf___bit
        ; line_number = 802
        ; do_nothing
        ;info   802, 601

        goto    ls_byte_put__1
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 801
        ;  while !_bf done
        ; # We don't need the data that was clocked in, so just clear {_bf}:
        ; line_number = 805
        ;  _bf := _false
        ;info   805, 602
        bcf     _bf___byte, _bf___bit


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




        ; line_number = 808
        ;info   808, 605
        ; procedure ls_byte_get
ls_byte_get:
        ; arguments_none
        ; line_number = 810
        ;  returns byte

        ; # This procedure will read a byte of data from the
        ; # currently selected chip.

        ; # Write out a 0, and shift in the data:
        ; before procedure statements delay=non-uniform, bit states=(data:00=uu=>00 code:00=uu=>00)
        ; line_number = 816
        ;  _sspbuf := 0
        ;info   816, 605
        clrf    _sspbuf

        ; #call rb2bus_byte_put(0xf1)

        ; # Now wait for the data to show up:
        ; line_number = 821
        ;  while !_bf start
ls_byte_get__1:
        ;info   821, 606
        ; =>bit_code_emit@symbol(): sym=_bf
        ; 1TEST: Single test with code in skip slot
        bsf     __rp0___byte, __rp0___bit
        btfss   _bf___byte, _bf___bit
        ; line_number = 822
        ; do_nothing
        ;info   822, 608

        goto    ls_byte_get__1
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 821
        ;  while !_bf done
        ; #call rb2bus_byte_put(0xf2)

        ; # Now return the data (clears {_bf} as a side effect):
        ; line_number = 827
        ;  return _sspbuf start
        ; line_number = 827
        ;info   827, 609
        bcf     __rp0___byte, __rp0___bit
        movf    _sspbuf,w
        return  
        ; line_number = 827
        ;  return _sspbuf done


        ; delay after procedure statements=non-uniform




        ; line_number = 830
        ; string id = "\16,0,5,5,3,10\Shaft2-E12\7\Gramson" start
        ; id = '\16,0,5,5,3,10\Shaft2-E12\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 24
id___base:
        retlw   16
        retlw   0
        retlw   5
        retlw   5
        retlw   3
        retlw   10
        retlw   83
        retlw   104
        retlw   97
        retlw   102
        retlw   116
        retlw   50
        retlw   45
        retlw   69
        retlw   49
        retlw   50
        retlw   7
        retlw   71
        retlw   114
        retlw   97
        retlw   109
        retlw   115
        retlw   111
        retlw   110
        ; line_number = 830
        ; string id = "\16,0,5,5,3,10\Shaft2-E12\7\Gramson" start


        ; line_number = 834
        ; global half_distance_per_tick float32
half_distance_per_tick equ globals___2+42
        ; line_number = 835
        ; global radians_per_tick float32
radians_per_tick equ globals___2+46
        ; line_number = 836
        ; global temporary signed16
temporary equ globals___2+50

        ; #constant bearing_convert = 65536.0 / _float32_two_pi
        ; line_number = 839
        ; constant bearing_convert = 360.0 / _float32_two_pi
        ; bearing_convert = 57.2969

        ; line_number = 841
        ;info   841, 642
        ; procedure wheel_recompute
wheel_recompute:
        ; arguments_none
        ; line_number = 843
        ;  returns_nothing

        ; # This procedure computes the magic constants needed to perform
        ; # location:

        ; line_number = 848
        ;  local wheel_diameter float32
wheel_recompute__wheel_diameter equ globals___2+52
        ; line_number = 849
        ;  local wheel_spacing float32
wheel_recompute__wheel_spacing equ globals___2+56
        ; line_number = 850
        ;  local wheel_ticks float32
wheel_recompute__wheel_ticks equ globals___2+60

        ; # We always want to read a pair of bytes out of {frozen}
        ; # indivisibly, hence, we disable interrupts for the read duration:
        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:00=uu=>00)
        ; line_number = 854
        ;  _gie := _false
        ;info   854, 642
        bcf     _gie___byte, _gie___bit
        ; line_number = 855
        ;  temporary := _signed16_from_byte2(frozen[index_wheel_spacing_high], frozen[index_wheel_spacing_low])
        ;info   855, 643
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+19,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+20,w
        bsf     __cb1___byte, __cb1___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 857
        ; _gie := _true
        ;info   857, 656
        bsf     _gie___byte, _gie___bit
        ; line_number = 858
        ;  wheel_spacing := _signed16_float32_convert(temporary)
        ;info   858, 657
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   wheel_recompute__wheel_spacing>>1
        call    _float32_pointer_store

        ; line_number = 860
        ;  _gie := _false
        ;info   860, 670
        bcf     _gie___byte, _gie___bit
        ; line_number = 861
        ;  temporary := _signed16_from_byte2(frozen[index_wheel_diameter_high], frozen[index_wheel_diameter_low])
        ;info   861, 671
        bcf     __rp0___byte, __rp0___bit
        movf    frozen+23,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+24,w
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 863
        ; _gie := _true
        ;info   863, 685
        bsf     _gie___byte, _gie___bit
        ; line_number = 864
        ;  wheel_diameter := _signed16_float32_convert(temporary)
        ;info   864, 686
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   wheel_recompute__wheel_diameter>>1
        call    _float32_pointer_store

        ; line_number = 866
        ;  _gie := _false
        ;info   866, 699
        bcf     _gie___byte, _gie___bit
        ; line_number = 867
        ;  temporary := _signed16_from_byte2(frozen[index_wheel_ticks_high], frozen[index_wheel_ticks_low])
        ;info   867, 700
        bcf     __rp0___byte, __rp0___bit
        movf    frozen+21,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+22,w
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 869
        ; _gie := _true
        ;info   869, 714
        bsf     _gie___byte, _gie___bit
        ; line_number = 870
        ;  wheel_ticks := _signed16_float32_convert(temporary)
        ;info   870, 715
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   wheel_recompute__wheel_ticks>>1
        call    _float32_pointer_store

        ; # Do the remaining computations:
        ; line_number = 873
        ;  half_distance_per_tick := wheel_diameter * _float32_half_pi / wheel_ticks 
        ;info   873, 728
        ; 1.57076 = 7f 49 0e d1
        movlw   127
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   wheel_recompute__wheel_diameter>>1
        call    _float32_pointer_multiply
        movlw   wheel_recompute__wheel_ticks>>1
        call    _float32_pointer_divide
        movlw   half_distance_per_tick>>1
        call    _float32_pointer_store
        ; line_number = 874
        ;  radians_per_tick := wheel_diameter * _float32_pi / (wheel_spacing * wheel_ticks) 
        ;info   874, 742
        movlw   wheel_recompute__wheel_spacing>>1
        call    _float32_pointer_load
        movlw   wheel_recompute__wheel_ticks>>1
        call    _float32_pointer_multiply
        call    _float32_reciprocal
        ; 3.14153 = 80 49 0e d1
        movlw   128
        movwf   _float32_bexp
        movlw   73
        movwf   _float32_bargb0
        movlw   14
        movwf   _float32_bargb1
        movlw   209
        movwf   _float32_bargb2
        call    _float32_multiply
        movlw   wheel_recompute__wheel_diameter>>1
        call    _float32_pointer_multiply
        movlw   radians_per_tick>>1
        call    _float32_pointer_store

        ; #half_ticks_limit := 2.0 * wheel_spacing * wheel_ticks / wheel_diameter
        ; #ticks_limit := 2.0 * half_ticks_limit
        ; #minus_half_ticks_limit := -half_ticks_limit


        ; delay after procedure statements=non-uniform
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; Implied return
        bcf     __cb0___byte, __cb0___bit
        retlw   0




        ; # The main process lives in data bank 3 since the other data
        ; # banks are pretty full.


        ; line_number = 887
        ;info   887, 764
        ; procedure main
main:
        ; Initialize some registers
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        clrf    _adcon0
        movlw   7
        bsf     __rp0___byte, __rp0___bit
        movwf   _adcon1
        movlw   7
        movwf   _cmcon
        movlw   63
        movwf   _trisa
        movlw   223
        movwf   _trisb
        movlw   149
        movwf   _trisc
        ; arguments_none
        ; line_number = 889
        ;  returns_nothing

        ; # This is the main procedure that initializes everything and then
        ; # goes into an infinite loop reading the shaft encoder counters
        ; # and computing our current location and bearing.

        ; line_number = 895
        ;  local bearing float32
main__bearing equ globals___3+6
        ; line_number = 896
        ;  local delta signed16
main__delta equ globals___3+10
        ; line_number = 897
        ;  local distance float32
main__distance equ globals___3+12
        ; line_number = 898
        ;  local dx float32
main__dx equ globals___3+16
        ; line_number = 899
        ;  local dy float32
main__dy equ globals___3+20
        ; line_number = 900
        ;  local high byte
main__high equ globals___3+24
        ; line_number = 901
        ;  local low byte
main__low equ globals___3+25
        ; line_number = 902
        ;  local shaft0_current signed16
main__shaft0_current equ globals___3+26
        ; line_number = 903
        ;  local shaft0_delta signed16
main__shaft0_delta equ globals___3+28
        ; line_number = 904
        ;  local shaft0_previous signed16
main__shaft0_previous equ globals___3+30
        ; line_number = 905
        ;  local shaft1_current signed16
main__shaft1_current equ globals___3+32
        ; line_number = 906
        ;  local shaft1_delta signed16
main__shaft1_delta equ globals___3+34
        ; line_number = 907
        ;  local shaft1_previous signed16
main__shaft1_previous equ globals___3+36
        ; line_number = 908
        ;  local target_bearing float32
main__target_bearing equ globals___3+38
        ; line_number = 909
        ;  local target_distance float32
main__target_distance equ globals___3+42
        ; line_number = 910
        ;  local target_x float32
main__target_x equ globals___3+46
        ; line_number = 911
        ;  local target_y float32
main__target_y equ globals___3+50
        ; line_number = 912
        ;  local temp byte
main__temp equ globals___3+54
        ; line_number = 913
        ;  local x float32
main__x equ globals___3+56
        ; line_number = 914
        ;  local y float32
main__y equ globals___3+60
        ; line_number = 915
        ;  local zero signed16
main__zero equ globals___3+64

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

        ; line_number = 919
        ;  _rcif := _false
        ;info   919, 780
        bcf     _rcif___byte, _rcif___bit
        ; line_number = 920
        ;  _rcie := _true
        ;info   920, 781
        bsf     __rp0___byte, __rp0___bit
        bsf     _rcie___byte, _rcie___bit
        ; line_number = 921
        ;  _peie := _true
        ;info   921, 783
        bsf     _peie___byte, _peie___bit
        ; line_number = 922
        ;  _gie := _true
        ;info   922, 784
        bsf     _gie___byte, _gie___bit

        ; line_number = 924
        ;  shaft0_previous := _signed16_from_byte2(0, 0)
        ;info   924, 785
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        clrf    _signed16_from_byte2__byte1
        movlw   0
        bsf     __cb1___byte, __cb1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   main__shaft0_previous>>1
        call    _signed16_pointer_store
        ; line_number = 925
        ;  shaft1_previous := shaft0_previous
        ;info   925, 795
        movlw   main__shaft0_previous>>1
        call    _signed16_pointer_load
        movlw   main__shaft1_previous>>1
        call    _signed16_pointer_store
        ; #bearing_ticks := 0.0
        ; line_number = 927
        ;  bearing := 0.0
        ;info   927, 799
        ; bearing := 0 (00 00 00 00)
        bsf     __rp0___byte, __rp0___bit
        clrf    main__bearing
        clrf    main__bearing+1
        clrf    main__bearing+2
        clrf    main__bearing+3
        ; line_number = 928
        ;  x := 0.0
        ;info   928, 804
        ; x := 0 (00 00 00 00)
        clrf    main__x
        clrf    main__x+1
        clrf    main__x+2
        clrf    main__x+3
        ; line_number = 929
        ;  y := 0.0
        ;info   929, 808
        ; y := 0 (00 00 00 00)
        clrf    main__y
        clrf    main__y+1
        clrf    main__y+2
        clrf    main__y+3
        ; line_number = 930
        ;  zero := _signed16_from_byte(0)
        ;info   930, 812
        movlw   0
        bcf     __rp0___byte, __rp0___bit
        call    _signed16_from_byte
        movlw   _signed16_from_byte__0return>>1
        call    _signed16_pointer_load
        movlw   main__zero>>1
        call    _signed16_pointer_store

        ; line_number = 932
        ;  loop_forever start
        bcf     __cb1___byte, __cb1___bit
main__1:
        bcf     __rp1___byte, __rp1___bit
        ; # Clear both counters (if requested):
        ; line_number = 934
        ;  if clear_request start
        ;info   934, 821
        ; =>bit_code_emit@symbol(): sym=clear_request
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   clear_request___byte, clear_request___bit
        goto    main__2
        ; line_number = 935
        ; clear_request := _false
        ;info   935, 823
        bcf     clear_request___byte, clear_request___bit
        ; line_number = 936
        ;  call ls_command_put(ls_clear | ls_cntr | ls_select_both)
        ;info   936, 824
        movlw   35
        call    ls_command_put

        ; Recombine size1 = 0 || size2 = 0
main__2:
        ; line_number = 934
        ;  if clear_request done
        ; # Latch both counters at the same time:
        ; line_number = 939
        ;  call ls_command_put(ls_load | ls_otr | ls_select_both)
        ;info   939, 826
        movlw   235
        call    ls_command_put

        ; # Read shaft 0:
        ; line_number = 942
        ;  call ls_command_put(ls_read | ls_otr | ls_select_shaft0)
        ;info   942, 828
        movlw   105
        call    ls_command_put
        ; line_number = 943
        ;  shaft0_high := ls_byte_get()
        ;info   943, 830
        call    ls_byte_get
        movwf   shaft0_high
        ; line_number = 944
        ;  shaft0_low := ls_byte_get()
        ;info   944, 832
        call    ls_byte_get
        movwf   shaft0_low

        ; # Read shaft 1:
        ; line_number = 947
        ;  call ls_command_put(ls_read | ls_otr | ls_select_shaft1)
        ;info   947, 834
        movlw   106
        call    ls_command_put
        ; line_number = 948
        ;  shaft1_high := ls_byte_get()
        ;info   948, 836
        call    ls_byte_get
        movwf   shaft1_high
        ; line_number = 949
        ;  shaft1_low := ls_byte_get()
        ;info   949, 838
        call    ls_byte_get
        movwf   shaft1_low

        ; # Deal with shaft inverting and swapping:
        ; line_number = 952
        ;  if shaft0_invert start
        ;info   952, 840
        ; =>bit_code_emit@symbol(): sym=shaft0_invert
        ; No 1TEST: true.size=6 false.size=0
        ; No 2TEST: true.size=6 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   shaft0_invert___byte, shaft0_invert___bit
        goto    main__3
        ; line_number = 953
        ; shaft0_high := shaft0_high ^ 0xff
        ;info   953, 842
        comf    shaft0_high,f
        ; line_number = 954
        ;  shaft0_low := shaft0_low ^ 0xff
        ;info   954, 843
        comf    shaft0_low,f
        ; line_number = 955
        ;  shaft0_low := shaft0_low + 1
        ;info   955, 844
        incf    shaft0_low,f
        ; line_number = 956
        ;  if shaft0_low = 0 start
        ;info   956, 845
        ; Left minus Right
        movf    shaft0_low,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; line_number = 957
        ; shaft0_high := shaft0_high + 1
        ;info   957, 847
        incf    shaft0_high,f

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 956
        ;  if shaft0_low = 0 done
        ; Recombine size1 = 0 || size2 = 0
main__3:
        ; line_number = 952
        ;  if shaft0_invert done
        ; line_number = 959
        ; if shaft1_invert start
        ;info   959, 848
        ; =>bit_code_emit@symbol(): sym=shaft1_invert
        ; No 1TEST: true.size=6 false.size=0
        ; No 2TEST: true.size=6 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   shaft1_invert___byte, shaft1_invert___bit
        goto    main__4
        ; line_number = 960
        ; shaft1_high := shaft1_high ^ 0xff
        ;info   960, 850
        comf    shaft1_high,f
        ; line_number = 961
        ;  shaft1_low := shaft1_low ^ 0xff
        ;info   961, 851
        comf    shaft1_low,f
        ; line_number = 962
        ;  shaft1_low := shaft1_low + 1
        ;info   962, 852
        incf    shaft1_low,f
        ; line_number = 963
        ;  if shaft1_low = 0 start
        ;info   963, 853
        ; Left minus Right
        movf    shaft1_low,w
        ; =>bit_code_emit@symbol(): sym=__z
        ; 1TEST: Single test with code in skip slot
        btfsc   __z___byte, __z___bit
        ; line_number = 964
        ; shaft1_high := shaft1_high + 1
        ;info   964, 855
        incf    shaft1_high,f

        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 963
        ;  if shaft1_low = 0 done
        ; Recombine size1 = 0 || size2 = 0
main__4:
        ; line_number = 959
        ; if shaft1_invert done
        ; line_number = 966
        ; if shafts_swap start
        ;info   966, 856
        ; =>bit_code_emit@symbol(): sym=shafts_swap
        ; No 1TEST: true.size=28 false.size=0
        ; No 2TEST: true.size=28 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   shafts_swap___byte, shafts_swap___bit
        goto    main__5
        ; line_number = 967
        ; temp := shaft0_low
        ;info   967, 858
        movf    shaft0_low,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__temp
        ; line_number = 968
        ;  shaft0_low := shaft1_low
        ;info   968, 862
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movf    shaft1_low,w
        movwf   shaft0_low
        ; line_number = 969
        ;  shaft1_low := temp
        ;info   969, 866
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movf    main__temp,w
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movwf   shaft1_low
        ; line_number = 970
        ;  temp := shaft0_high
        ;info   970, 872
        movf    shaft0_high,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__temp
        ; line_number = 971
        ;  shaft0_high := shaft1_high
        ;info   971, 876
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movf    shaft1_high,w
        movwf   shaft0_high
        ; line_number = 972
        ;  shaft1_high := temp
        ;info   972, 880
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movf    main__temp,w
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movwf   shaft1_high

        ; Recombine size1 = 0 || size2 = 0
main__5:
        ; line_number = 966
        ; if shafts_swap done
        ; # Now copy shaft data from "working" to "stable" atomically
        ; # by turning off interrupts:

        ; line_number = 977
        ;  _gie := _false
        ;info   977, 886
        bcf     _gie___byte, _gie___bit
        ; line_number = 978
        ;  stable_shaft0_high := shaft0_high
        ;info   978, 887
        movf    shaft0_high,w
        movwf   stable_shaft0_high
        ; line_number = 979
        ;  stable_shaft0_low := shaft0_low
        ;info   979, 889
        movf    shaft0_low,w
        movwf   stable_shaft0_low
        ; line_number = 980
        ;  stable_shaft1_high := shaft1_high
        ;info   980, 891
        movf    shaft1_high,w
        movwf   stable_shaft1_high
        ; line_number = 981
        ;  stable_shaft1_low := shaft1_low
        ;info   981, 893
        movf    shaft1_low,w
        movwf   stable_shaft1_low
        ; line_number = 982
        ;  _gie := _true
        ;info   982, 895
        bsf     _gie___byte, _gie___bit

        ; # Only do location computations if enabled:
        ; line_number = 985
        ;  if location_on start
        ;info   985, 896
        ; =>bit_code_emit@symbol(): sym=location_on
        ; No 1TEST: true.size=711 false.size=0
        ; No 2TEST: true.size=711 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   location_on___byte, location_on___bit
        goto    main__19
        ; line_number = 986
        ; if wheel_changed start
        ;info   986, 898
        ; =>bit_code_emit@symbol(): sym=wheel_changed
        ; No 1TEST: true.size=3 false.size=0
        ; No 2TEST: true.size=3 false.size=0
        ; 1GOTO: Single test with GOTO
        btfss   wheel_changed___byte, wheel_changed___bit
        goto    main__6
        ; line_number = 987
        ; wheel_changed := _false
        ;info   987, 900
        bcf     wheel_changed___byte, wheel_changed___bit
        ; line_number = 988
        ;  call wheel_recompute()
        ;info   988, 901
        bsf     __rp1___byte, __rp1___bit
        call    wheel_recompute

        ; Recombine size1 = 0 || size2 = 0
main__6:
        ; line_number = 986
        ; if wheel_changed done
        ; ## Compute the distance traversed by the robot center:
        ; line_number = 991
        ;  shaft0_current := _signed16_from_byte2(shaft0_high, shaft0_low)
        ;info   991, 903
        bcf     __rp1___byte, __rp1___bit
        movf    shaft0_high,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    shaft0_low,w
        bsf     __cb1___byte, __cb1___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   main__shaft0_current>>1
        call    _signed16_pointer_store
        ; line_number = 992
        ;  shaft1_current := _signed16_from_byte2(shaft1_high, shaft1_low)
        ;info   992, 916
        bcf     __rp1___byte, __rp1___bit
        movf    shaft1_high,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    shaft1_low,w
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   main__shaft1_current>>1
        call    _signed16_pointer_store
        ; line_number = 993
        ;  shaft0_delta := shaft0_current - shaft0_previous
        ;info   993, 928
        movlw   main__shaft0_current>>1
        call    _signed16_pointer_load
        movlw   main__shaft0_previous>>1
        call    _signed16_pointer_subtract
        movlw   main__shaft0_delta>>1
        call    _signed16_pointer_store
        ; line_number = 994
        ;  shaft1_delta := shaft1_current - shaft1_previous
        ;info   994, 934
        movlw   main__shaft1_current>>1
        call    _signed16_pointer_load
        movlw   main__shaft1_previous>>1
        call    _signed16_pointer_subtract
        movlw   main__shaft1_delta>>1
        call    _signed16_pointer_store
        ; line_number = 995
        ;  shaft0_previous := shaft0_current
        ;info   995, 940
        movlw   main__shaft0_current>>1
        call    _signed16_pointer_load
        movlw   main__shaft0_previous>>1
        call    _signed16_pointer_store
        ; line_number = 996
        ;  shaft1_previous := shaft1_current
        ;info   996, 944
        movlw   main__shaft1_current>>1
        call    _signed16_pointer_load
        movlw   main__shaft1_previous>>1
        call    _signed16_pointer_store

        ; # The factor of .5 (i.e. {half_distance_per_tick}) is because
        ; # we want the average of {shaft0_delta} and {shaft1_delta}.
        ; # distance = (shaft0_delta + shaft1_delta)/2 * distance_per_tick
        ; #    = (shaft0_delta + shaft1_delta) * (distance_per_tick)/2:
        ; line_number = 1002
        ;  distance := half_distance_per_tick * _signed16_float32_convert(shaft0_delta + shaft1_delta) 
        ;info   1002, 948
main__7 equ globals___3+66
        movlw   half_distance_per_tick>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__7>>1
        call    _float32_pointer_store
        movlw   main__shaft0_delta>>1
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   main__shaft1_delta>>1
        call    _signed16_pointer_add
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__7>>1
        call    _float32_pointer_multiply
        movlw   main__distance>>1
        call    _float32_pointer_store

        ; # Keep {bearing} between -pi and +pi:
        ; line_number = 1006
        ;  delta := shaft1_delta - shaft0_delta
        ;info   1006, 977
        movlw   main__shaft1_delta>>1
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   main__shaft0_delta>>1
        call    _signed16_pointer_subtract
        movlw   main__delta>>1
        call    _signed16_pointer_store
        ; line_number = 1007
        ;  if delta != zero start
        ;info   1007, 987
        movlw   main__delta>>1
        call    _signed16_pointer_load
        movlw   main__zero>>1
        call    _signed16_pointer_subtract
        call    _signed16_not_equal
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=82 false.size=0
        ; No 2TEST: true.size=82 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    main__12
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        ; line_number = 1008
        ; bearing := bearing + radians_per_tick * _signed16_float32_convert(delta)
        ;info   1008, 998
main__8 equ globals___3+66
        movlw   radians_per_tick>>1
        call    _float32_pointer_load
        movlw   main__8>>1
        call    _float32_pointer_store
        movlw   main__delta>>1
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__8>>1
        call    _float32_pointer_multiply
        movlw   main__bearing>>1
        call    _float32_pointer_add
        movlw   main__bearing>>1
        call    _float32_pointer_store

        ; line_number = 1010
        ; if bearing > _float32_pi start
        ;info   1010, 1023
        ; -3.14153 = 80 c9 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__bearing>>1
        call    _float32_pointer_add
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=12 false.size=27
        ; No 2TEST: true.size=12 false.size=27
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__10
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1011
        ; bearing := bearing - _float32_two_pi
        ;info   1011, 1038
        ; -6.28306 = 81 c9 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__bearing>>1
        call    _float32_pointer_add
        movlw   main__bearing>>1
        call    _float32_pointer_store
        ; Recombine code1_bit_states != code2_bit_states
        bcf     __cb0___byte, __cb0___bit
        goto    main__11
        ; 2GOTO: Starting code 2
main__10:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1012
        ;info   1012, 1053
        ; -3.14153 = 80 c9 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__bearing>>1
        call    _float32_pointer_add
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=12 false.size=0
        ; No 2TEST: true.size=12 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb0___byte, __cb0___bit
        btfss   __z___byte, __z___bit
        goto    main__9
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1013
        ; bearing := bearing + _float32_two_pi
        ;info   1013, 1068
        ; 6.28306 = 81 49 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__bearing>>1
        call    _float32_pointer_add
        movlw   main__bearing>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
main__9:
main__11:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:01=uu=>01)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:01=uu=>0?)
        ; 2GOTO: code final bitstates:(data:01=uu=>01 code:01=uu=>0?)
        ; line_number = 1010
        ; if bearing > _float32_pi done
        ; Recombine size1 = 0 || size2 = 0
main__12:
        ; line_number = 1007
        ;  if delta != zero done
        ; # Compute the updated {x} and {y} locations:
        ; line_number = 1016
        ;  x := x + distance * _float32_cos(bearing)
        ;info   1016, 1080
        movlw   main__bearing>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_cos
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   main__distance>>1
        call    _float32_pointer_multiply
        movlw   main__x>>1
        call    _float32_pointer_add
        movlw   main__x>>1
        call    _float32_pointer_store
        ; line_number = 1017
        ;  y := y + distance * _float32_sin(bearing)
        ;info   1017, 1098
        movlw   main__bearing>>1
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_sin
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   main__distance>>1
        call    _float32_pointer_multiply
        movlw   main__y>>1
        call    _float32_pointer_add
        movlw   main__y>>1
        call    _float32_pointer_store

        ; line_number = 1019
        ;  if location_changed start
        ;info   1019, 1113
        ; =>bit_code_emit@symbol(): sym=location_changed
        ; No 1TEST: true.size=125 false.size=0
        ; No 2TEST: true.size=125 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __rp0___byte, __rp0___bit
        bcf     __cb0___byte, __cb0___bit
        btfss   location_changed___byte, location_changed___bit
        goto    main__13
        bsf     __cb1___byte, __cb1___bit
        ; line_number = 1020
        ; _gie := _false
        ;info   1020, 1118
        bcf     _gie___byte, _gie___bit
        ; line_number = 1021
        ;  high := frozen[index_x_high]
        ;info   1021, 1119
        movf    frozen+4,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__high
        ; line_number = 1022
        ;  low := frozen[index_x_low]
        ;info   1022, 1123
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+5,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__low
        ; line_number = 1023
        ;  _gie := _true
        ;info   1023, 1129
        bsf     _gie___byte, _gie___bit
        ; line_number = 1024
        ;  temporary := _signed16_from_byte2(high, low)
        ;info   1024, 1130
        movf    main__high,w
        bcf     __rp0___byte, __rp0___bit
        movwf   _signed16_from_byte2__byte1
        bsf     __rp0___byte, __rp0___bit
        movf    main__low,w
        bcf     __rp0___byte, __rp0___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1025
        ;  x := _signed16_float32_convert(temporary)
        ;info   1025, 1141
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__x>>1
        call    _float32_pointer_store

        ; line_number = 1027
        ;  _gie := _false
        ;info   1027, 1154
        bcf     _gie___byte, _gie___bit
        ; line_number = 1028
        ;  high := frozen[index_y_high]
        ;info   1028, 1155
        bcf     __rp0___byte, __rp0___bit
        movf    frozen+6,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__high
        ; line_number = 1029
        ;  low := frozen[index_y_low]
        ;info   1029, 1160
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+7,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__low
        ; line_number = 1030
        ;  _gie := _true
        ;info   1030, 1166
        bsf     _gie___byte, _gie___bit
        ; line_number = 1031
        ;  temporary := _signed16_from_byte2(high, low)
        ;info   1031, 1167
        movf    main__high,w
        bcf     __rp0___byte, __rp0___bit
        movwf   _signed16_from_byte2__byte1
        bsf     __rp0___byte, __rp0___bit
        movf    main__low,w
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1032
        ;  y := _signed16_float32_convert(temporary)
        ;info   1032, 1180
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__y>>1
        call    _float32_pointer_store

        ; line_number = 1034
        ;  _gie := _false
        ;info   1034, 1193
        bcf     _gie___byte, _gie___bit
        ; line_number = 1035
        ;  high := frozen[index_bearing_high]
        ;info   1035, 1194
        bcf     __rp0___byte, __rp0___bit
        movf    frozen+8,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__high
        ; line_number = 1036
        ;  low := frozen[index_bearing_low]
        ;info   1036, 1199
        bcf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+9,w
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        movwf   main__low
        ; line_number = 1037
        ;  _gie := _true
        ;info   1037, 1205
        bsf     _gie___byte, _gie___bit
        ; line_number = 1038
        ;  temporary := _signed16_from_byte2(high, low)
        ;info   1038, 1206
        movf    main__high,w
        bcf     __rp0___byte, __rp0___bit
        movwf   _signed16_from_byte2__byte1
        bsf     __rp0___byte, __rp0___bit
        movf    main__low,w
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1039
        ;  bearing := _signed16_float32_convert(temporary) / bearing_convert 
        ;info   1039, 1219
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        ; 0.0174529 = 79 0e f9 78
        movlw   121
        movwf   _float32_bexp
        movlw   14
        movwf   _float32_bargb0
        movlw   249
        movwf   _float32_bargb1
        movlw   120
        movwf   _float32_bargb2
        call    _float32_multiply
        movlw   main__bearing>>1
        call    _float32_pointer_store

        ; line_number = 1042
        ; location_changed := _false
        ;info   1042, 1241
        bcf     __rp0___byte, __rp0___bit
        bcf     location_changed___byte, location_changed___bit

        ; Recombine size1 = 0 || size2 = 0
main__13:
        ; line_number = 1019
        ;  if location_changed done
        ; line_number = 1044
        ; if target_changed start
        ;info   1044, 1243
        ; =>bit_code_emit@symbol(): sym=target_changed
        ; No 1TEST: true.size=57 false.size=0
        ; No 2TEST: true.size=57 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb0___byte, __cb0___bit
        btfss   target_changed___byte, target_changed___bit
        goto    main__14
        bsf     __cb1___byte, __cb1___bit
        ; # We always want to read a pair of bytes out of {frozen}
        ; # indivisibly, hence, we disable interrupts for the read:
        ; line_number = 1047
        ;  _gie := _false
        ;info   1047, 1247
        bcf     _gie___byte, _gie___bit
        ; line_number = 1048
        ;  temporary := _signed16_from_byte2(frozen[index_target_x_high], frozen[index_target_x_low])
        ;info   1048, 1248
        movf    frozen+15,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+16,w
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 1050
        ; _gie := _true
        ;info   1050, 1259
        bsf     _gie___byte, _gie___bit
        ; line_number = 1051
        ;  target_x := _signed16_float32_convert(temporary)
        ;info   1051, 1260
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__target_x>>1
        call    _float32_pointer_store

        ; line_number = 1053
        ;  _gie := _false
        ;info   1053, 1273
        bcf     _gie___byte, _gie___bit
        ; line_number = 1054
        ;  temporary := _signed16_from_byte2(frozen[index_target_y_high], frozen[index_target_y_low])
        ;info   1054, 1274
        bcf     __rp0___byte, __rp0___bit
        movf    frozen+17,w
        bsf     __rp1___byte, __rp1___bit
        movwf   _signed16_from_byte2__byte1
        bcf     __rp1___byte, __rp1___bit
        movf    frozen+18,w
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_from_byte2
        movlw   _signed16_from_byte2__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 1056
        ; _gie := _true
        ;info   1056, 1288
        bsf     _gie___byte, _gie___bit
        ; line_number = 1057
        ;  target_y := _signed16_float32_convert(temporary)
        ;info   1057, 1289
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_float32_convert__from>>1
        call    _signed16_pointer_store
        call    _signed16_float32_convert
        movlw   _signed16_float32_convert__0return>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        call    _float32_pointer_load
        movlw   main__target_y>>1
        call    _float32_pointer_store

        ; line_number = 1059
        ;  target_changed := _false
        ;info   1059, 1302
        bcf     __rp0___byte, __rp0___bit
        bcf     target_changed___byte, target_changed___bit

        ; Recombine size1 = 0 || size2 = 0
main__14:
        ; line_number = 1044
        ; if target_changed done
        ; # Compute {target_bearing} and {target_distance}:
        ; line_number = 1062
        ;  dx := target_x - x
        ;info   1062, 1304
        movlw   main__target_x>>1
        bsf     __cb0___byte, __cb0___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   main__x>>1
        call    _float32_pointer_subtract
        movlw   main__dx>>1
        call    _float32_pointer_store
        ; line_number = 1063
        ;  dy := target_y - y
        ;info   1063, 1312
        movlw   main__target_y>>1
        call    _float32_pointer_load
        movlw   main__y>>1
        call    _float32_pointer_subtract
        movlw   main__dy>>1
        call    _float32_pointer_store
        ; line_number = 1064
        ;  target_distance := _float32_sqrt(dx * dx + dy * dy)
        ;info   1064, 1318
main__15 equ globals___3+66
        movlw   main__dx>>1
        call    _float32_pointer_load
        movlw   main__dx>>1
        call    _float32_pointer_multiply
        movlw   main__15>>1
        call    _float32_pointer_store
        movlw   main__dy>>1
        call    _float32_pointer_load
        movlw   main__dy>>1
        call    _float32_pointer_multiply
        movlw   main__15>>1
        call    _float32_pointer_add
        movlw   _float32_sqrt__preroot>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_sqrt
        movlw   _float32_sqrt__0return>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   main__target_distance>>1
        call    _float32_pointer_store
        ; line_number = 1065
        ;  target_bearing := _float32_arctan2(dx, dy) - bearing
        ;info   1065, 1339
        movlw   main__dx>>1
        call    _float32_pointer_load
        movlw   _float32_trig2>>1
        call    _float32_pointer_store
        movlw   main__dy>>1
        call    _float32_pointer_load
        movlw   _float32_trig3>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_arctan2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   main__bearing>>1
        call    _float32_pointer_subtract
        movlw   main__target_bearing>>1
        call    _float32_pointer_store

        ; # Fix up the {target_bearing} to between -pi and +pi:
        ; line_number = 1068
        ;  if target_bearing > _float32_pi start
        ;info   1068, 1356
        ; -3.14153 = 80 c9 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__target_bearing>>1
        call    _float32_pointer_add
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=12 false.size=27
        ; No 2TEST: true.size=12 false.size=27
        bcf     __cb0___byte, __cb0___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    main__17
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1069
        ; target_bearing := target_bearing - _float32_two_pi
        ;info   1069, 1371
        ; -6.28306 = 81 c9 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__target_bearing>>1
        call    _float32_pointer_add
        movlw   main__target_bearing>>1
        call    _float32_pointer_store
        ; Recombine code1_bit_states != code2_bit_states
        bcf     __cb0___byte, __cb0___bit
        goto    main__18
        ; 2GOTO: Starting code 2
main__17:
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1070
        ;info   1070, 1386
        ; 3.14153 = 80 49 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__target_bearing>>1
        call    _float32_pointer_add
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=12 false.size=0
        ; No 2TEST: true.size=12 false.size=0
        ; 1GOTO: Single test with GOTO
        bcf     __cb0___byte, __cb0___bit
        btfss   __z___byte, __z___bit
        goto    main__16
        bsf     __cb0___byte, __cb0___bit
        ; line_number = 1071
        ; target_bearing := target_bearing + _float32_two_pi
        ;info   1071, 1401
        ; 6.28306 = 81 49 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   main__target_bearing>>1
        call    _float32_pointer_add
        movlw   main__target_bearing>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
main__16:
main__18:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:01=uu=>01)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:01=uu=>0?)
        ; 2GOTO: code final bitstates:(data:00=uu=>01 code:00=uu=>0?)
        ; line_number = 1068
        ;  if target_bearing > _float32_pi done
        ; # Convert {x} back into something useful:
        ; line_number = 1074
        ;  temporary := _float32_signed16_convert(x)
        ;info   1074, 1413
        movlw   main__x>>1
        bsf     __cb0___byte, __cb0___bit
        call    _float32_pointer_load
        movlw   _float32_signed16_convert__from>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _float32_signed16_convert
        movlw   _float32_signed16_convert__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1075
        ;  working[index_x_high] := _signed16_byte_high(temporary)
        ;info   1075, 1427
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_byte_high__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_high
        bcf     __rp1___byte, __rp1___bit
        movwf   working+4
        ; line_number = 1076
        ;  working[index_x_low] := _signed16_byte_low(temporary)
        ;info   1076, 1434
        movlw   temporary>>1
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_byte_low__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_low
        bcf     __rp1___byte, __rp1___bit
        movwf   working+5

        ; # Convert {y} back into something useful:
        ; line_number = 1079
        ;  temporary := _float32_signed16_convert(y)
        ;info   1079, 1442
        movlw   main__y>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   _float32_signed16_convert__from>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _float32_signed16_convert
        movlw   _float32_signed16_convert__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1080
        ;  working[index_y_high] := _signed16_byte_high(temporary)
        ;info   1080, 1458
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_byte_high__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_high
        bcf     __rp1___byte, __rp1___bit
        movwf   working+6
        ; line_number = 1081
        ;  working[index_y_low] := _signed16_byte_low(temporary)
        ;info   1081, 1465
        movlw   temporary>>1
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_byte_low__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_low
        bcf     __rp1___byte, __rp1___bit
        movwf   working+7

        ; # Convert {bearing} back into something useful:
        ; line_number = 1084
        ;  temporary := _float32_signed16_convert(bearing * bearing_convert)
        ;info   1084, 1473
        ; 57.2969 = 84 65 30 10
        movlw   132
        bsf     __rp0___byte, __rp0___bit
        movwf   _float32_aexp
        movlw   101
        movwf   _float32_aargb0
        movlw   48
        movwf   _float32_aargb1
        movlw   16
        movwf   _float32_aargb2
        movlw   main__bearing>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_multiply
        movlw   _float32_signed16_convert__from>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _float32_signed16_convert
        movlw   _float32_signed16_convert__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1085
        ;  working[index_bearing_high] := _signed16_byte_high(temporary)
        ;info   1085, 1497
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_byte_high__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_high
        bcf     __rp1___byte, __rp1___bit
        movwf   working+8
        ; line_number = 1086
        ;  working[index_bearing_low] := _signed16_byte_low(temporary)
        ;info   1086, 1504
        movlw   temporary>>1
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_byte_low__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_low
        bcf     __rp1___byte, __rp1___bit
        movwf   working+9

        ; # Convert {target_bearing} back into something useful:
        ; line_number = 1089
        ;  temporary := _float32_signed16_convert(target_bearing * bearing_convert)
        ;info   1089, 1512
        ; 57.2969 = 84 65 30 10
        movlw   132
        bsf     __rp0___byte, __rp0___bit
        movwf   _float32_aexp
        movlw   101
        movwf   _float32_aargb0
        movlw   48
        movwf   _float32_aargb1
        movlw   16
        movwf   _float32_aargb2
        movlw   main__target_bearing>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_multiply
        movlw   _float32_signed16_convert__from>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _float32_signed16_convert
        movlw   _float32_signed16_convert__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store

        ; line_number = 1091
        ; working[index_target_bearing_high] := _signed16_byte_high(temporary)
        ;info   1091, 1536
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_byte_high__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_high
        bcf     __rp1___byte, __rp1___bit
        movwf   working+10

        ; line_number = 1093
        ; working[index_target_bearing_low] := _signed16_byte_low(temporary)
        ;info   1093, 1543
        movlw   temporary>>1
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_byte_low__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_low
        bcf     __rp1___byte, __rp1___bit
        movwf   working+11

        ; # Convert {target_distance} back into something useful:
        ; line_number = 1096
        ;  temporary := _float32_signed16_convert(target_distance)
        ;info   1096, 1551
        movlw   main__target_distance>>1
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        bsf     __rp0___byte, __rp0___bit
        call    _float32_pointer_load
        movlw   _float32_signed16_convert__from>>1
        call    _float32_pointer_store
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        call    _float32_signed16_convert
        movlw   _float32_signed16_convert__0return>>1
        call    _signed16_pointer_load
        movlw   temporary>>1
        call    _signed16_pointer_store
        ; line_number = 1097
        ;  working[index_target_distance_high] := _signed16_byte_high(temporary)
        ;info   1097, 1567
        movlw   temporary>>1
        call    _signed16_pointer_load
        movlw   _signed16_byte_high__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_high
        bcf     __rp1___byte, __rp1___bit
        movwf   working+12

        ; line_number = 1099
        ; working[index_target_distance_low] := _signed16_byte_low(temporary)
        ;info   1099, 1574
        movlw   temporary>>1
        bsf     __rp1___byte, __rp1___bit
        call    _signed16_pointer_load
        movlw   _signed16_byte_low__number>>1
        call    _signed16_pointer_store
        call    _signed16_byte_low
        bcf     __rp1___byte, __rp1___bit
        movwf   working+13

        ; # Update the count:
        ; line_number = 1102
        ;  working[index_count] := working[index_count] + 1
        ;info   1102, 1582
        movf    working+14,w
        addlw   1
        movwf   working+14

        ; # Now copy {working} up into {stable} with interrupts disabled:
        ; line_number = 1105
        ;  _gie := _false
        ;info   1105, 1585
        bcf     _gie___byte, _gie___bit
        ; line_number = 1106
        ;  stable[index_x_high] := working[index_x_high]
        ;info   1106, 1586
        movf    working+4,w
        movwf   stable+4
        ; line_number = 1107
        ;  stable[index_x_low] := working[index_x_low]
        ;info   1107, 1588
        movf    working+5,w
        movwf   stable+5

        ; line_number = 1109
        ;  stable[index_y_high] := working[index_y_high]
        ;info   1109, 1590
        movf    working+6,w
        movwf   stable+6
        ; line_number = 1110
        ;  stable[index_y_low] := working[index_y_low]
        ;info   1110, 1592
        movf    working+7,w
        movwf   stable+7

        ; line_number = 1112
        ;  stable[index_bearing_high] := working[index_bearing_high]
        ;info   1112, 1594
        movf    working+8,w
        movwf   stable+8
        ; line_number = 1113
        ;  stable[index_bearing_low] := working[index_bearing_low]
        ;info   1113, 1596
        movf    working+9,w
        movwf   stable+9

        ; line_number = 1115
        ;  stable[index_target_bearing_high] := working[index_target_bearing_high]
        ;info   1115, 1598
        movf    working+10,w
        movwf   stable+10

        ; line_number = 1117
        ; stable[index_target_bearing_low] := working[index_target_bearing_low] 
        ;info   1117, 1600
        movf    working+11,w
        movwf   stable+11

        ; line_number = 1120
        ; stable[index_target_distance_high] := working[index_target_distance_high]
        ;info   1120, 1602
        movf    working+12,w
        movwf   stable+12

        ; line_number = 1122
        ; stable[index_target_distance_low] := working[index_target_distance_low] 
        ;info   1122, 1604
        movf    working+13,w
        movwf   stable+13

        ; line_number = 1125
        ; stable[index_count] := working[index_count]
        ;info   1125, 1606
        movf    working+14,w
        movwf   stable+14
        ; line_number = 1126
        ;  _gie := _true
        ;info   1126, 1608
        bsf     _gie___byte, _gie___bit

        ; Recombine size1 = 0 || size2 = 0
main__19:
        ; line_number = 985
        ;  if location_on done
        ; # Keep on looping:


        ; line_number = 932
        ;  loop_forever wrap-up
        bcf     __cb1___byte, __cb1___bit
        goto    main__1
        ; line_number = 932
        ;  loop_forever done
        ; delay after procedure statements=non-uniform
        bsf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit





        ; Appending 3 delayed procedures to code bank 0
        ; buffer = 'rb2bus_pic16f876'
        ; line_number = 28
        ;info   28, 1613
        ; procedure rb2bus_initialize
rb2bus_initialize:
        ; Last argument is sitting in W; save into argument variable
        movwf   rb2bus_initialize__address
        ; delay=4294967295
        ; line_number = 29
        ; argument address byte
rb2bus_initialize__address equ globals___3+2
        ; line_number = 30
        ;  returns_nothing

        ; # This procedure is responsibile for initializing the UART
        ; # connected to the bus.  {address} is the address of this
        ; # slave module.  This code is specific to the PIC16F688.

        ; before procedure statements delay=non-uniform, bit states=(data:11=uu=>11 code:00=uu=>00)
        ; line_number = 36
        ;  rb2bus_address := address
        ;info   36, 1614
        movf    rb2bus_initialize__address,w
        movwf   rb2bus_address

        ; # Warm up the UART:
        ; line_number = 39
        ;  _trisc@7 := _true
        ;info   39, 1616
rb2bus_initialize__select__1___byte equ _trisc
rb2bus_initialize__select__1___bit equ 7
        bcf     __rp1___byte, __rp1___bit
        bsf     rb2bus_initialize__select__1___byte, rb2bus_initialize__select__1___bit
        ; line_number = 40
        ;  _trisc@6 := _true
        ;info   40, 1618
rb2bus_initialize__select__2___byte equ _trisc
rb2bus_initialize__select__2___bit equ 6
        bsf     rb2bus_initialize__select__2___byte, rb2bus_initialize__select__2___bit

        ; # Initialize the {_txsta} register:
        ; line_number = 43
        ;  _txsta := 0
        ;info   43, 1619
        clrf    _txsta
        ; line_number = 44
        ;  _tx9 := _true
        ;info   44, 1620
        bsf     _tx9___byte, _tx9___bit
        ; line_number = 45
        ;  _txen := _true
        ;info   45, 1621
        bsf     _txen___byte, _txen___bit
        ; line_number = 46
        ;  _brgh := _true
        ;info   46, 1622
        bsf     _brgh___byte, _brgh___bit

        ; # Initialize the {_rcsta} register:
        ; line_number = 49
        ;  _rcsta := 0
        ;info   49, 1623
        bcf     __rp0___byte, __rp0___bit
        clrf    _rcsta
        ; line_number = 50
        ;  _spen := _true
        ;info   50, 1625
        bsf     _spen___byte, _spen___bit
        ; line_number = 51
        ;  _rx9 := _true
        ;info   51, 1626
        bsf     _rx9___byte, _rx9___bit
        ; line_number = 52
        ;  _cren := _true
        ;info   52, 1627
        bsf     _cren___byte, _cren___bit
        ; #_adden := _true
        ; line_number = 54
        ;  _adden := _false
        ;info   54, 1628
        bcf     _adden___byte, _adden___bit

        ; # Set up the baud rate generator:
        ; line_number = 57
        ;  _spbrg := spbrg_500k
        ;info   57, 1629
        movlw   1
        bsf     __rp0___byte, __rp0___bit
        movwf   _spbrg

        ; line_number = 59
        ;  rb2bus_selected := _false
        ;info   59, 1632
        bsf     __rp1___byte, __rp1___bit
        bcf     rb2bus_selected___byte, rb2bus_selected___bit
        ; line_number = 60
        ;  rb2bus_error := _true
        ;info   60, 1634
        bsf     rb2bus_error___byte, rb2bus_error___bit
        ; line_number = 61
        ;  rb2bus_index := 0
        ;info   61, 1635
        clrf    rb2bus_index


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




        ; line_number = 66
        ;info   66, 1637
        ; procedure rb2bus_eedata_read
rb2bus_eedata_read:
        ; arguments_none
        ; line_number = 68
        ;  returns byte

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

        ; line_number = 73
        ;  local temp1 byte
rb2bus_eedata_read__temp1 equ globals___3+3
        ; line_number = 74
        ;  local temp2 byte
rb2bus_eedata_read__temp2 equ globals___3+4

        ; # Read the first byte (the address):
        ; before procedure statements delay=non-uniform, bit states=(data:11=uu=>11 code:00=uu=>00)
        ; line_number = 77
        ;  _eecon1 := 0
        ;info   77, 1637
        clrf    _eecon1
        ; line_number = 78
        ;  _eeadr := rb2bus_eedata_address
        ;info   78, 1638
        movlw   254
        bcf     __rp0___byte, __rp0___bit
        movwf   _eeadr
        ; line_number = 79
        ;  _rd := _true
        ;info   79, 1641
        bsf     __rp0___byte, __rp0___bit
        bsf     _rd___byte, _rd___bit
        ; line_number = 80
        ;  temp1 := _eedata
        ;info   80, 1643
        bcf     __rp0___byte, __rp0___bit
        movf    _eedata,w
        bsf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_read__temp1

        ; # Read the second byte (the 1'z complement)
        ; line_number = 83
        ;  _eeadr := _eeadr + 1
        ;info   83, 1647
        bcf     __rp0___byte, __rp0___bit
        incf    _eeadr,f
        ; line_number = 84
        ;  _rd := _true
        ;info   84, 1649
        bsf     __rp0___byte, __rp0___bit
        bsf     _rd___byte, _rd___bit
        ; line_number = 85
        ;  temp2 := _eedata
        ;info   85, 1651
        bcf     __rp0___byte, __rp0___bit
        movf    _eedata,w
        bsf     __rp0___byte, __rp0___bit
        movwf   rb2bus_eedata_read__temp2

        ; # If they are 1's complement of one another, they are valid:
        ; line_number = 88
        ;  if temp1 = (0xff ^ temp2) start
        ;info   88, 1655
        ; 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 = 90
        ;  return temp1 start
        ; line_number = 90
        ;info   90, 1659
        movf    rb2bus_eedata_read__temp1,w
        return  
        ; line_number = 90
        ;  return temp1 done

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


        ; delay after procedure statements=non-uniform




        ; line_number = 96
        ;info   96, 1662
        ; 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 = 97
        ; argument address byte
rb2bus_eedata_write__address equ globals___3+5
        ; line_number = 98
        ;  returns_nothing

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

        ; # Clear out the {_eecon1} register
        ; before procedure statements delay=non-uniform, bit states=(data:11=uu=>11 code:00=uu=>00)
        ; line_number = 104
        ;  _eecon1 := 0
        ;info   104, 1663
        clrf    _eecon1
        ; line_number = 105
        ;  _eeadr := rb2bus_eedata_address
        ;info   105, 1664
        movlw   254
        bcf     __rp0___byte, __rp0___bit
        movwf   _eeadr
        ; line_number = 106
        ;  _eedata := address
        ;info   106, 1667
        bsf     __rp0___byte, __rp0___bit
        movf    rb2bus_eedata_write__address,w
        bcf     __rp0___byte, __rp0___bit
        movwf   _eedata

        ; # Write 2 bytes ({address} followed by {address}^0xff):
        ; line_number = 109
        ;  loop_exactly 2 start
        ;info   109, 1671
rb2bus_eedata_write__1 equ globals___3+67
        movlw   2
        bsf     __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 = 113
        ;  _wren := _true
        ;info   113, 1674
        bsf     _wren___byte, _wren___bit
        ; line_number = 114
        ;  _gie := _false
        ;info   114, 1675
        bcf     _gie___byte, _gie___bit
        ; line_number = 115
        ;  _eecon2 := 0x55
        ;info   115, 1676
        movlw   85
        movwf   _eecon2
        ; line_number = 116
        ;  _eecon2 := 0xaa
        ;info   116, 1678
        movlw   170
        movwf   _eecon2
        ; # Start the write:
        ; line_number = 118
        ;  _wr := _true
        ;info   118, 1680
        bsf     _wr___byte, _wr___bit

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

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

        ; # Prepare the second byte of data:
        ; line_number = 128
        ;  _eeadr := _eeadr + 1
        ;info   128, 1684
        bcf     __rp0___byte, __rp0___bit
        incf    _eeadr,f
        ; line_number = 129
        ;  _eedata := address ^ 0xff
        ;info   129, 1686
        bsf     __rp0___byte, __rp0___bit
        comf    rb2bus_eedata_write__address,w
        bcf     __rp0___byte, __rp0___bit
        movwf   _eedata


        bsf     __rp0___byte, __rp0___bit
        ; line_number = 109
        ;  loop_exactly 2 wrap-up
        decfsz  rb2bus_eedata_write__1,f
        goto    rb2bus_eedata_write__2
        ; line_number = 109
        ;  loop_exactly 2 done
        ; # Disable everything:
        ; line_number = 133
        ;  _eecon1 := 0
        ;info   133, 1693
        clrf    _eecon1

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




        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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:01=uu=>01)
        ; 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




        ; Code bank 2; Start address: 4096; End address: 6143
        org     4096
        ; Appending 22 delayed procedures to code bank 2
        ; buffer = '_signed16'
        ; line_number = 62
        ;info   62, 4096
        ; procedure _signed16_pointer_load
_signed16_pointer_load:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_load__pointer
        ; delay=4294967295
        ; line_number = 63
        ; argument pointer byte
_signed16_pointer_load__pointer equ globals___2+10
        ; line_number = 64
        ;  returns_nothing
        ; line_number = 65
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 69
        ;  assemble
        ;info   69, 4097
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 71
        ;info   71, 4097
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 73
        ;info   73, 4098
        bcf     _irp___byte, _irp___bit
        ; line_number = 74
        ;info   74, 4099
        rlf     _fsr,f
        ; line_number = 75
        ;info   75, 4100
        btfsc   _c___byte, _c___bit
        ; line_number = 76
        ;info   76, 4101
        bsf     _irp___byte, _irp___bit
        ; line_number = 77
        ;info   77, 4102
        bcf     _fsr, 0
        ; # Grab the value and store into {_signed16_a0}:{_signed16_a1}
        ; line_number = 79
        ;info   79, 4103
        movf    _indf,w
        ; line_number = 80
        ;info   80, 4104
        movwf   _signed16_a0
        ; line_number = 81
        ;info   81, 4105
        incf    _fsr,f
        ; line_number = 82
        ;info   82, 4106
        movf    _indf,w
        ; line_number = 83
        ;info   83, 4107
        movwf   _signed16_a1
        ; line_number = 84
        ;info   84, 4108
        return  


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




        ; line_number = 87
        ;info   87, 4109
        ; procedure _signed16_pointer_add
_signed16_pointer_add:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_add__pointer
        ; delay=4294967295
        ; line_number = 88
        ; argument pointer byte
_signed16_pointer_add__pointer equ globals___2+11
        ; line_number = 89
        ;  returns_nothing
        ; line_number = 90
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 95
        ;  assemble
        ;info   95, 4110
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 97
        ;info   97, 4110
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 99
        ;info   99, 4111
        bcf     _irp___byte, _irp___bit
        ; line_number = 100
        ;info   100, 4112
        rlf     _fsr,f
        ; line_number = 101
        ;info   101, 4113
        btfsc   _c___byte, _c___bit
        ; line_number = 102
        ;info   102, 4114
        bsf     _irp___byte, _irp___bit
        ; line_number = 103
        ;info   103, 4115
        bcf     _fsr, 0
        ; # Grab MSB and add it into {_signed16_a0} (MSB):
        ; line_number = 105
        ;info   105, 4116
        movf    _indf,w
        ; line_number = 106
        ;info   106, 4117
        addwf   _signed16_a0,f
        ; line_number = 107
        ;info   107, 4118
        incf    _fsr,f

        ; # Grab LSB and add it into {_signed16_a1} (LSB):
        ; line_number = 110
        ;info   110, 4119
        movf    _indf,w
        ; line_number = 111
        ;info   111, 4120
        addwf   _signed16_a1,f

        ; # If C is 1, increment {_signed16_a0} (MSB):
        ; line_number = 114
        ;info   114, 4121
        btfsc   _c___byte, _c___bit
        ; line_number = 115
        ;info   115, 4122
        incf    _signed16_a0,f
        ; line_number = 116
        ;info   116, 4123
        return  


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




        ; line_number = 119
        ;info   119, 4124
        ; procedure _signed16_pointer_divide
_signed16_pointer_divide:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_divide__pointer
        ; delay=4294967295
        ; line_number = 120
        ; argument pointer byte
_signed16_pointer_divide__pointer equ globals___2+12
        ; line_number = 121
        ;  returns_nothing
        ; line_number = 122
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 127
        ;  assemble
        ;info   127, 4125
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 129
        ;info   129, 4125
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 131
        ;info   131, 4126
        bcf     _irp___byte, _irp___bit
        ; line_number = 132
        ;info   132, 4127
        rlf     _fsr,f
        ; line_number = 133
        ;info   133, 4128
        btfsc   _c___byte, _c___bit
        ; line_number = 134
        ;info   134, 4129
        bsf     _irp___byte, _irp___bit
        ; line_number = 135
        ;info   135, 4130
        bcf     _fsr, 0
        ; # Grab the value and store into {_signed16_b0}:{_signed16_b1}:
        ; line_number = 137
        ;info   137, 4131
        movf    _indf,w
        ; line_number = 138
        ;info   138, 4132
        movwf   _signed16_b0
        ; line_number = 139
        ;info   139, 4133
        incf    _fsr,f
        ; line_number = 140
        ;info   140, 4134
        movf    _indf,w
        ; line_number = 141
        ;info   141, 4135
        movwf   _signed16_b1

        ; # Perform the divide:
        ; line_number = 144
        ;info   144, 4136
        call    _signed16_divide_raw

        ; line_number = 146
        ;info   146, 4137
        return  


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




        ; line_number = 149
        ;info   149, 4138
        ; procedure _signed16_pointer_multiply
_signed16_pointer_multiply:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_multiply__pointer
        ; delay=4294967295
        ; line_number = 150
        ; argument pointer byte
_signed16_pointer_multiply__pointer equ globals___2+13
        ; line_number = 151
        ;  returns_nothing
        ; line_number = 152
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 157
        ;  assemble
        ;info   157, 4139
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 159
        ;info   159, 4139
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 161
        ;info   161, 4140
        bcf     _irp___byte, _irp___bit
        ; line_number = 162
        ;info   162, 4141
        rlf     _fsr,f
        ; line_number = 163
        ;info   163, 4142
        btfsc   _c___byte, _c___bit
        ; line_number = 164
        ;info   164, 4143
        bsf     _irp___byte, _irp___bit
        ; line_number = 165
        ;info   165, 4144
        bcf     _fsr, 0
        ; # Grab the value and store into {_signed16_b0}:{_signed16_b1}:
        ; line_number = 167
        ;info   167, 4145
        movf    _indf,w
        ; line_number = 168
        ;info   168, 4146
        movwf   _signed16_b0
        ; line_number = 169
        ;info   169, 4147
        incf    _fsr,f
        ; line_number = 170
        ;info   170, 4148
        movf    _indf,w
        ; line_number = 171
        ;info   171, 4149
        movwf   _signed16_b1

        ; # The code below came from <http://www.piclist.com/>.
        ; # It is not totally clear who wrote the code.  The names
        ; # Bob Fehrenbac & Scott Dattalo are present, but there is
        ; # no explicit authorship.  The Multiple byte addition routine
        ; # is from Microchip AN617.  As is typical, nobody bothered
        ; # to comment the code.
        ; #
        ; # This multiplies <_signed16_a0:_signed16_a1> by
        ; # <_signed16_b0:_signed16_b1> and store the signed result into
        ; # <_signed16_result0:_signed16_result1:_signed16_result2:_signed16_result3>
        ; # Then we trim the result down and store it back into
        ; # <_signed16_a0:_signed16_a1>.
        ; #
        ; # This multiply routine takes between 134 to 248 cycles.
        ; #
        ; # This program looks at the lsb of _signed16_a1 to decide whether
        ; # to add _signed16_b1 to _signed16_result2.
        ; # and b2 to _signed16_result1, with appropriate carrys
        ; # It then looks at the lsb of _signed16_a0 to decide whether
        ; # to add _signed16_b1 to _signed16_result1 and 
        ; # signed16_b0 to _signed16_result0, again with appropriate carrys.
        ; # The rotates then only have to be done 8 times
        ; #
        ; # This is uses slightly more program but takes a little less time than 
        ; # a routine that performs one 16 bit addition per rotate and 16 rotates

        ; line_number = 199
        ;  assemble
        ;info   199, 4150
        ; line_number = 200
        ;info   200, 4150
        clrf    _signed16_result0
        ; line_number = 201
        ;info   201, 4151
        clrf    _signed16_result1
        ; line_number = 202
        ;info   202, 4152
        clrf    _signed16_result2
        ; line_number = 203
        ;info   203, 4153
        movlw   128
        ; line_number = 204
        ;info   204, 4154
        movwf   _signed16_result3

        ; line_number = 206
        ;info   206, 4155
        clrf    _signed16_neg_flag

        ; line_number = 208
        ;info   208, 4156
        btfss   _signed16_a0, 7
        ; line_number = 209
        ;info   209, 4157
        goto    _signed16_multiply_a_pos
        ; line_number = 210
        ;info   210, 4158
        comf    _signed16_a0,f
        ; line_number = 211
        ;info   211, 4159
        comf    _signed16_a1,f
        ; line_number = 212
        ;info   212, 4160
        incf    _signed16_a1,f
        ; line_number = 213
        ;info   213, 4161
        btfsc   _z___byte, _z___bit
        ; line_number = 214
        ;info   214, 4162
        incf    _signed16_a0,f
        ; line_number = 215
        ;info   215, 4163
        incf    _signed16_neg_flag,f

        ; line_number = 217
_signed16_multiply_a_pos:
        ; line_number = 218
        ;info   218, 4164
        btfss   _signed16_b0, 7
        ; line_number = 219
        ;info   219, 4165
        goto    _signed16_multiply_nextbit
        ; line_number = 220
        ;info   220, 4166
        comf    _signed16_b0,f
        ; line_number = 221
        ;info   221, 4167
        comf    _signed16_b1,f
        ; line_number = 222
        ;info   222, 4168
        incf    _signed16_b1,f
        ; line_number = 223
        ;info   223, 4169
        btfsc   _z___byte, _z___bit
        ; line_number = 224
        ;info   224, 4170
        incf    _signed16_b0,f
        ; line_number = 225
        ;info   225, 4171
        incf    _signed16_neg_flag,f

        ; line_number = 227
_signed16_multiply_nextbit:
        ; line_number = 228
        ;info   228, 4172
        rrf     _signed16_a0,f
        ; line_number = 229
        ;info   229, 4173
        rrf     _signed16_a1,f

        ; line_number = 231
        ;info   231, 4174
        btfss   _c___byte, _c___bit
        ; line_number = 232
        ;info   232, 4175
        goto    _signed16_multiply_nobit_l
        ; line_number = 233
        ;info   233, 4176
        movf    _signed16_b1,w
        ; line_number = 234
        ;info   234, 4177
        addwf   _signed16_result2,f

        ; line_number = 236
        ;info   236, 4178
        movf    _signed16_b0,w
        ; line_number = 237
        ;info   237, 4179
        btfsc   _c___byte, _c___bit
        ; line_number = 238
        ;info   238, 4180
        incfsz  _signed16_b0,w
        ; line_number = 239
        ;info   239, 4181
        addwf   _signed16_result1,f
        ; line_number = 240
        ;info   240, 4182
        btfsc   _c___byte, _c___bit
        ; line_number = 241
        ;info   241, 4183
        incf    _signed16_result0,f
        ; line_number = 242
        ;info   242, 4184
        bcf     _c___byte, _c___bit

        ; line_number = 244
_signed16_multiply_nobit_l:
        ; line_number = 245
        ;info   245, 4185
        btfss   _signed16_a1, 7
        ; line_number = 246
        ;info   246, 4186
        goto    _signed16_multiply_nobit_h
        ; line_number = 247
        ;info   247, 4187
        movf    _signed16_b1,w
        ; line_number = 248
        ;info   248, 4188
        addwf   _signed16_result1,f
        ; line_number = 249
        ;info   249, 4189
        btfsc   _c___byte, _c___bit
        ; line_number = 250
        ;info   250, 4190
        incf    _signed16_result0,f
        ; line_number = 251
        ;info   251, 4191
        movf    _signed16_b0,w
        ; line_number = 252
        ;info   252, 4192
        addwf   _signed16_result0,f

        ; line_number = 254
_signed16_multiply_nobit_h:
        ; line_number = 255
        ;info   255, 4193
        rrf     _signed16_result0,f
        ; line_number = 256
        ;info   256, 4194
        rrf     _signed16_result1,f
        ; line_number = 257
        ;info   257, 4195
        rrf     _signed16_result2,f
        ; line_number = 258
        ;info   258, 4196
        rrf     _signed16_result3,f

        ; line_number = 260
        ;info   260, 4197
        btfss   _c___byte, _c___bit
        ; line_number = 261
        ;info   261, 4198
        goto    _signed16_multiply_nextbit
        ; line_number = 262
        ;info   262, 4199
        btfss   _signed16_neg_flag, 0
        ; line_number = 263
        ;info   263, 4200
        goto    _signed16_mulitply_no_invert

        ; line_number = 265
        ;info   265, 4201
        comf    _signed16_result0,f
        ; line_number = 266
        ;info   266, 4202
        comf    _signed16_result1,f
        ; line_number = 267
        ;info   267, 4203
        comf    _signed16_result2,f
        ; line_number = 268
        ;info   268, 4204
        comf    _signed16_result3,f

        ; line_number = 270
        ;info   270, 4205
        incf    _signed16_result3,f
        ; line_number = 271
        ;info   271, 4206
        btfsc   _z___byte, _z___bit
        ; line_number = 272
        ;info   272, 4207
        incf    _signed16_result2,f
        ; line_number = 273
        ;info   273, 4208
        btfsc   _z___byte, _z___bit
        ; line_number = 274
        ;info   274, 4209
        incf    _signed16_result1,f
        ; line_number = 275
        ;info   275, 4210
        btfsc   _z___byte, _z___bit
        ; line_number = 276
        ;info   276, 4211
        incf    _signed16_result0,f
        ; line_number = 277
_signed16_mulitply_no_invert:

        ; # Store the final result into _signed16_a<0:1>:
        ; line_number = 280
        ;info   280, 4212
        movf    _signed16_result2,w
        ; line_number = 281
        ;info   281, 4213
        movwf   _signed16_a0
        ; line_number = 282
        ;info   282, 4214
        movf    _signed16_result3,w
        ; line_number = 283
        ;info   283, 4215
        movwf   _signed16_a1
        ; line_number = 284
        ;info   284, 4216
        return  


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




        ; line_number = 287
        ;info   287, 4217
        ; procedure _signed16_pointer_subtract
_signed16_pointer_subtract:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_subtract__pointer
        ; delay=4294967295
        ; line_number = 288
        ; argument pointer byte
_signed16_pointer_subtract__pointer equ globals___2+14
        ; line_number = 289
        ;  returns_nothing
        ; line_number = 290
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 295
        ;  assemble
        ;info   295, 4218
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 297
        ;info   297, 4218
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 299
        ;info   299, 4219
        bcf     _irp___byte, _irp___bit
        ; line_number = 300
        ;info   300, 4220
        rlf     _fsr,f
        ; line_number = 301
        ;info   301, 4221
        btfsc   _c___byte, _c___bit
        ; line_number = 302
        ;info   302, 4222
        bsf     _irp___byte, _irp___bit
        ; line_number = 303
        ;info   303, 4223
        bcf     _fsr, 0

        ; # Subtract MSB from {_signed16_a0} (MSB):
        ; line_number = 306
        ;info   306, 4224
        comf    _indf,w
        ; line_number = 307
        ;info   307, 4225
        addwf   _signed16_a0,f
        ; line_number = 308
        ;info   308, 4226
        incf    _fsr,f

        ; # Subtract LSB from {_signed16_a1} (LSB):
        ; line_number = 311
        ;info   311, 4227
        comf    _indf,w
        ; line_number = 312
        ;info   312, 4228
        addlw   1

        ; # If the C bit is set, increment {_signed16_a0} (MSB):
        ; line_number = 315
        ;info   315, 4229
        btfsc   _c___byte, _c___bit
        ; line_number = 316
        ;info   316, 4230
        incf    _signed16_a0,f

        ; # Finish the subtraction:
        ; line_number = 319
        ;info   319, 4231
        addwf   _signed16_a1,f

        ; # If the C bit is set, increment {_signed16_a0} (MSB):
        ; line_number = 322
        ;info   322, 4232
        btfsc   _c___byte, _c___bit
        ; line_number = 323
        ;info   323, 4233
        incf    _signed16_a0,f
        ; line_number = 324
        ;info   324, 4234
        return  


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




        ; line_number = 327
        ;info   327, 4235
        ; procedure _signed16_pointer_store
_signed16_pointer_store:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_store__pointer
        ; delay=4294967295
        ; line_number = 328
        ; argument pointer byte
_signed16_pointer_store__pointer equ globals___2+15
        ; line_number = 329
        ;  returns_nothing
        ; line_number = 330
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 334
        ;  assemble
        ;info   334, 4236
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 336
        ;info   336, 4236
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 338
        ;info   338, 4237
        bcf     _irp___byte, _irp___bit
        ; line_number = 339
        ;info   339, 4238
        rlf     _fsr,f
        ; line_number = 340
        ;info   340, 4239
        btfsc   _c___byte, _c___bit
        ; line_number = 341
        ;info   341, 4240
        bsf     _irp___byte, _irp___bit
        ; line_number = 342
        ;info   342, 4241
        bcf     _fsr, 0
        ; # Grab the value and store into {_signed16_a0}:{_signed16_a1}:
        ; line_number = 344
        ;info   344, 4242
        movf    _signed16_a0,w
        ; line_number = 345
        ;info   345, 4243
        movwf   _indf
        ; line_number = 346
        ;info   346, 4244
        incf    _fsr,f
        ; line_number = 347
        ;info   347, 4245
        movf    _signed16_a1,w
        ; line_number = 348
        ;info   348, 4246
        movwf   _indf
        ; line_number = 349
        ;info   349, 4247
        return  


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




        ; line_number = 352
        ;info   352, 4248
        ; procedure _signed16_negate
_signed16_negate:
        ; arguments_none
        ; line_number = 354
        ;  returns_nothing

        ; # This procedure will negate the signed16 A registers.

        ; # Flip the sign bit:
        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 359
        ;  _signed16_a0 := 0xff ^ _signed16_a0
        ;info   359, 4248
        comf    _signed16_a0,f
        ; line_number = 360
        ;  _signed16_a1 := 0 - _signed16_a1
        ;info   360, 4249
        movf    _signed16_a1,w
        sublw   0
        movwf   _signed16_a1
        ; line_number = 361
        ;  if _c start
        ;info   361, 4252
        ; =>bit_code_emit@symbol(): sym=_c
        ; 1TEST: Single test with code in skip slot
        btfsc   _c___byte, _c___bit
        ; line_number = 362
        ; _signed16_a0 := _signed16_a0 + 1    
        ;info   362, 4253
        incf    _signed16_a0,f


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




        ; line_number = 365
        ;info   365, 4255
        ; procedure _signed16_pointer_swap
_signed16_pointer_swap:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_pointer_swap__pointer
        ; delay=4294967295
        ; line_number = 366
        ; argument pointer byte
_signed16_pointer_swap__pointer equ globals___2+16
        ; line_number = 367
        ;  returns_nothing
        ; line_number = 368
        ;  return_suppress

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 372
        ;  assemble
        ;info   372, 4256
        ; # Pointer is in W; move it to {_fsr}:
        ; line_number = 374
        ;info   374, 4256
        movwf   _fsr
        ; # Set up {_irp} and _{fsr}:
        ; line_number = 376
        ;info   376, 4257
        bcf     _irp___byte, _irp___bit
        ; line_number = 377
        ;info   377, 4258
        rlf     _fsr,f
        ; line_number = 378
        ;info   378, 4259
        btfsc   _c___byte, _c___bit
        ; line_number = 379
        ;info   379, 4260
        bsf     _irp___byte, _irp___bit
        ; line_number = 380
        ;info   380, 4261
        bcf     _fsr, 0

        ; # Swap {pointer} with {_signed16_a0}:
        ; line_number = 383
        ;info   383, 4262
        movf    _indf,w
        ; line_number = 384
        ;info   384, 4263
        xorwf   _signed16_a0,f
        ; line_number = 385
        ;info   385, 4264
        xorwf   _signed16_a0,w
        ; line_number = 386
        ;info   386, 4265
        xorwf   _signed16_a0,f
        ; line_number = 387
        ;info   387, 4266
        movwf   _indf

        ; # Swap {pointer}+1 with {_signed16_a1}:
        ; line_number = 390
        ;info   390, 4267
        incf    _fsr,f
        ; line_number = 391
        ;info   391, 4268
        movf    _indf,w
        ; line_number = 392
        ;info   392, 4269
        xorwf   _signed16_a1,f
        ; line_number = 393
        ;info   393, 4270
        xorwf   _signed16_a1,w
        ; line_number = 394
        ;info   394, 4271
        xorwf   _signed16_a1,f
        ; line_number = 395
        ;info   395, 4272
        movwf   _indf
        ; line_number = 396
        ;info   396, 4273
        return  


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




_signed16_from_byte__0return equ globals___2+18
        ; line_number = 399
        ;info   399, 4274
        ; procedure _signed16_from_byte
_signed16_from_byte:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_from_byte__number
        ; delay=4294967295
        ; line_number = 400
        ; argument number byte
_signed16_from_byte__number equ globals___2+17
        ; line_number = 401
        ;  returns signed16

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 405
        ;  _signed16_a0 := 0
        ;info   405, 4275
        clrf    _signed16_a0
        ; line_number = 406
        ;  _signed16_a1 := number
        ;info   406, 4276
        movf    _signed16_from_byte__number,w
        movwf   _signed16_a1
        ; line_number = 407
        ;  assemble
        ;info   407, 4278
        ; line_number = 408
        ;info   408, 4278
        movlw   _signed16_from_byte__0return>>1
        ; line_number = 409
        ;info   409, 4279
        call    _signed16_pointer_store
        ; line_number = 410
        ;info   410, 4280
        retlw   _signed16_from_byte__0return>>1


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




_signed16_from_byte2__0return equ globals___2+22
        ; line_number = 413
        ;info   413, 4282
        ; procedure _signed16_from_byte2
_signed16_from_byte2:
        ; Last argument is sitting in W; save into argument variable
        movwf   _signed16_from_byte2__byte2
        ; delay=4294967295
        ; line_number = 414
        ; argument byte1 byte
_signed16_from_byte2__byte1 equ globals___2+20
        ; line_number = 415
        ; argument byte2 byte
_signed16_from_byte2__byte2 equ globals___2+21
        ; line_number = 416
        ;  returns signed16

        ; # This procedure will convert {byte1} and {byte2} into a signed16
        ; # and return it.

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 421
        ;  _signed16_a0 := byte1
        ;info   421, 4283
        movf    _signed16_from_byte2__byte1,w
        movwf   _signed16_a0
        ; line_number = 422
        ;  _signed16_a1 := byte2
        ;info   422, 4285
        movf    _signed16_from_byte2__byte2,w
        movwf   _signed16_a1
        ; line_number = 423
        ;  assemble
        ;info   423, 4287
        ; line_number = 424
        ;info   424, 4287
        movlw   _signed16_from_byte2__0return>>1
        ; line_number = 425
        ;info   425, 4288
        call    _signed16_pointer_store
        ; line_number = 426
        ;info   426, 4289
        retlw   _signed16_from_byte2__0return>>1


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




        ; line_number = 429
        ;info   429, 4291
        ; procedure _signed16_to_byte
_signed16_to_byte:
        ; line_number = 430
        ; argument number signed16
_signed16_to_byte__number equ globals___2+24
        ; line_number = 431
        ;  returns byte

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 435
        ;  assemble
        ;info   435, 4291
        ; # Get the argument stored into the signed16 "A" register:
        ; line_number = 437
        ;info   437, 4291
        movlw   _signed16_to_byte__number>>1
        ; line_number = 438
        ;info   438, 4292
        call    _signed16_pointer_load
        ; line_number = 439
        ; return _signed16_a1 start
        ; line_number = 439
        ;info   439, 4293
        movf    _signed16_a1,w
        return  
        ; line_number = 439
        ; return _signed16_a1 done


        ; delay after procedure statements=non-uniform




        ; line_number = 442
        ;info   442, 4295
        ; procedure _signed16_byte_high
_signed16_byte_high:
        ; line_number = 443
        ; argument number signed16
_signed16_byte_high__number equ globals___2+26
        ; line_number = 444
        ;  returns byte

        ; # This procedure will return the high 8 bits of {number}.

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 448
        ;  assemble
        ;info   448, 4295
        ; # Get the argument stored into the signed16 "A" register:
        ; line_number = 450
        ;info   450, 4295
        movlw   _signed16_byte_high__number>>1
        ; line_number = 451
        ;info   451, 4296
        call    _signed16_pointer_load
        ; line_number = 452
        ; return _signed16_a0 start
        ; line_number = 452
        ;info   452, 4297
        movf    _signed16_a0,w
        return  
        ; line_number = 452
        ; return _signed16_a0 done


        ; delay after procedure statements=non-uniform




        ; line_number = 455
        ;info   455, 4299
        ; procedure _signed16_byte_low
_signed16_byte_low:
        ; line_number = 456
        ; argument number signed16
_signed16_byte_low__number equ globals___2+28
        ; line_number = 457
        ;  returns byte

        ; # This procedure will return the low 8 bits of {number}.

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 461
        ;  assemble
        ;info   461, 4299
        ; # Get the argument stored into the signed16 "A" register:
        ; line_number = 463
        ;info   463, 4299
        movlw   _signed16_byte_low__number>>1
        ; line_number = 464
        ;info   464, 4300
        call    _signed16_pointer_load
        ; line_number = 465
        ; return _signed16_a1 start
        ; line_number = 465
        ;info   465, 4301
        movf    _signed16_a1,w
        return  
        ; line_number = 465
        ; return _signed16_a1 done


        ; delay after procedure statements=non-uniform




        ; line_number = 468
        ;info   468, 4303
        ; procedure _signed16_equals
_signed16_equals:
        ; arguments_none
        ; line_number = 470
        ;  returns_nothing

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 474
        ;  assemble
        ;info   474, 4303
        ; line_number = 475
        ;info   475, 4303
        movf    _signed16_a0,w
        ; line_number = 476
        ;info   476, 4304
        iorwf   _signed16_a1,w
        ; # Return is implicit


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




        ; line_number = 480
        ;info   480, 4306
        ; procedure _signed16_not_equal
_signed16_not_equal:
        ; arguments_none
        ; line_number = 482
        ;  returns_nothing

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

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 486
        ;  assemble
        ;info   486, 4306
        ; line_number = 487
        ;info   487, 4306
        movf    _signed16_a0,w
        ; line_number = 488
        ;info   488, 4307
        iorwf   _signed16_a1,w
        ; line_number = 489
        ; if _z start
        ;info   489, 4308
        ; =>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    _signed16_not_equal__1
        ; line_number = 490
        ; _z := _false
        ;info   490, 4310
        bcf     _z___byte, _z___bit
        ; line_number = 491
        ;  return start
        ; line_number = 491
        ;info   491, 4311
        retlw   0
        ; line_number = 491
        ;  return done
        ; Recombine size1 = 0 || size2 = 0
_signed16_not_equal__1:
        ; line_number = 489
        ; if _z done
        ; line_number = 492
        ; _z := _true
        ;info   492, 4312
        bsf     _z___byte, _z___bit
        ; # Return is implicit


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




        ; line_number = 496
        ;info   496, 4314
        ; procedure _signed16_less_than
_signed16_less_than:
        ; arguments_none
        ; line_number = 498
        ;  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:10=uu=>10 code:10=uu=>10)
        ; line_number = 503
        ;  _z := _false
        ;info   503, 4314
        bcf     _z___byte, _z___bit
        ; line_number = 504
        ;  if _signed16_a0@7 start
        ;info   504, 4315
_signed16_less_than__select__1___byte equ _signed16_a0
_signed16_less_than__select__1___bit equ 7
        ; =>bit_code_emit@symbol(): sym=_signed16_less_than__select__1
        ; 1TEST: Single test with code in skip slot
        btfsc   _signed16_less_than__select__1___byte, _signed16_less_than__select__1___bit
        ; line_number = 505
        ; _z := _true
        ;info   505, 4316
        bsf     _z___byte, _z___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 504
        ;  if _signed16_a0@7 done
        ; # Return is implicit


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




        ; line_number = 509
        ;info   509, 4318
        ; procedure _signed16_less_than_or_equal
_signed16_less_than_or_equal:
        ; arguments_none
        ; line_number = 511
        ;  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:10=uu=>10 code:10=uu=>10)
        ; line_number = 515
        ;  assemble
        ;info   515, 4318
        ; line_number = 516
        ;info   516, 4318
        movf    _signed16_a1,w
        ; line_number = 517
        ;info   517, 4319
        iorwf   _signed16_a0,w
        ; line_number = 518
        ; if _z start
        ;info   518, 4320
        ; =>bit_code_emit@symbol(): sym=_z
        ; 1TEST: Single test with code in skip slot
        btfsc   _z___byte, _z___bit
        ; line_number = 519
        ; return start
        ; line_number = 519
        ;info   519, 4321
        retlw   0
        ; line_number = 519
        ; return done
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 518
        ; if _z done
        ; # _z == _false
        ; line_number = 521
        ;  if _signed16_a0@7 start
        ;info   521, 4322
_signed16_less_than_or_equal__select__1___byte equ _signed16_a0
_signed16_less_than_or_equal__select__1___bit equ 7
        ; =>bit_code_emit@symbol(): sym=_signed16_less_than_or_equal__select__1
        ; 1TEST: Single test with code in skip slot
        btfsc   _signed16_less_than_or_equal__select__1___byte, _signed16_less_than_or_equal__select__1___bit
        ; line_number = 522
        ; _z := _true
        ;info   522, 4323
        bsf     _z___byte, _z___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 521
        ;  if _signed16_a0@7 done
        ; # Return is implicit


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




        ; line_number = 526
        ;info   526, 4325
        ; procedure _signed16_greater_than
_signed16_greater_than:
        ; arguments_none
        ; line_number = 528
        ;  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:10=uu=>10 code:10=uu=>10)
        ; line_number = 533
        ;  assemble
        ;info   533, 4325
        ; line_number = 534
        ;info   534, 4325
        movf    _signed16_a0,w
        ; line_number = 535
        ;info   535, 4326
        iorwf   _signed16_a1,w
        ; line_number = 536
        ; if _z start
        ;info   536, 4327
        ; =>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    _signed16_greater_than__1
        ; line_number = 537
        ; _z := _false
        ;info   537, 4329
        bcf     _z___byte, _z___bit
        ; line_number = 538
        ;  return     start
        ; line_number = 538
        ;info   538, 4330
        retlw   0
        ; line_number = 538
        ;  return     done
        ; Recombine size1 = 0 || size2 = 0
_signed16_greater_than__1:
        ; line_number = 536
        ; if _z done
        ; # _z == _false
        ; line_number = 540
        ;  if !(_signed16_a0@7) start
        ;info   540, 4331
_signed16_greater_than__select__2___byte equ _signed16_a0
_signed16_greater_than__select__2___bit equ 7
        ; =>bit_code_emit@symbol(): sym=_signed16_greater_than__select__2
        ; 1TEST: Single test with code in skip slot
        btfss   _signed16_greater_than__select__2___byte, _signed16_greater_than__select__2___bit
        ; line_number = 541
        ; _z := _true
        ;info   541, 4332
        bsf     _z___byte, _z___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 540
        ;  if !(_signed16_a0@7) done
        ; # Return is implicit:


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




        ; line_number = 545
        ;info   545, 4334
        ; procedure _signed16_greater_than_or_equal
_signed16_greater_than_or_equal:
        ; arguments_none
        ; line_number = 547
        ;  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:10=uu=>10 code:10=uu=>10)
        ; line_number = 551
        ;  _z := _true
        ;info   551, 4334
        bsf     _z___byte, _z___bit
        ; line_number = 552
        ;  if _signed16_a0@7 start
        ;info   552, 4335
_signed16_greater_than_or_equal__select__1___byte equ _signed16_a0
_signed16_greater_than_or_equal__select__1___bit equ 7
        ; =>bit_code_emit@symbol(): sym=_signed16_greater_than_or_equal__select__1
        ; 1TEST: Single test with code in skip slot
        btfsc   _signed16_greater_than_or_equal__select__1___byte, _signed16_greater_than_or_equal__select__1___bit
        ; line_number = 553
        ; _z := _false
        ;info   553, 4336
        bcf     _z___byte, _z___bit
        ; Recombine size1 = 0 || size2 = 0
        ; line_number = 552
        ;  if _signed16_a0@7 done
        ; # Return is implicit:


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




        ; line_number = 578
        ;info   578, 4338
        ; procedure _signed16_divide_raw
_signed16_divide_raw:
        ; arguments_none
        ; line_number = 580
        ;  returns_nothing
        ; line_number = 581
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 583
        ;  assemble
        ;info   583, 4338
        ; line_number = 584
        ;info   584, 4338
        call    _signed16_divide_s_sign

        ; #Initialize:
        ; line_number = 587
        ;info   587, 4339
        movlw   16
        ; line_number = 588
        ;info   588, 4340
        movwf   _signed16_count
        ; line_number = 589
        ;info   589, 4341
        movf    _signed16_a0,w
        ; line_number = 590
        ;info   590, 4342
        movwf   _signed16_temp0
        ; line_number = 591
        ;info   591, 4343
        movf    _signed16_a1,w
        ; line_number = 592
        ;info   592, 4344
        movwf   _signed16_temp1
        ; line_number = 593
        ;info   593, 4345
        clrf    _signed16_a0
        ; line_number = 594
        ;info   594, 4346
        clrf    _signed16_a1
        ; line_number = 595
        ;info   595, 4347
        clrf    _signed16_rem0
        ; line_number = 596
        ;info   596, 4348
        clrf    _signed16_rem1
        ; # Loop 16 times usinge {_signed16_count}:
        ; line_number = 598
_signed16_divide_dloop:
        ; line_number = 599
        ;info   599, 4349
        bcf     _c___byte, _c___bit
        ; line_number = 600
        ;info   600, 4350
        rlf     _signed16_temp1,f
        ; line_number = 601
        ;info   601, 4351
        rlf     _signed16_temp0,f
        ; line_number = 602
        ;info   602, 4352
        rlf     _signed16_rem1,f
        ; line_number = 603
        ;info   603, 4353
        rlf     _signed16_rem0,f
        ; line_number = 604
        ;info   604, 4354
        movf    _signed16_b0,w
        ; line_number = 605
        ;info   605, 4355
        subwf   _signed16_rem0,w
        ; line_number = 606
        ;info   606, 4356
        btfss   _z___byte, _z___bit
        ; line_number = 607
        ;info   607, 4357
        goto    _signed16_divide_no_check
        ; line_number = 608
        ;info   608, 4358
        movf    _signed16_b1,w
        ; line_number = 609
        ;info   609, 4359
        subwf   _signed16_rem1,w
        ; line_number = 610
_signed16_divide_no_check:
        ; line_number = 611
        ;info   611, 4360
        btfss   _c___byte, _c___bit
        ; line_number = 612
        ;info   612, 4361
        goto    _signed16_divide_no_go
        ; line_number = 613
        ;info   613, 4362
        movf    _signed16_b1,w
        ; line_number = 614
        ;info   614, 4363
        subwf   _signed16_rem1,f
        ; line_number = 615
        ;info   615, 4364
        btfss   _c___byte, _c___bit
        ; line_number = 616
        ;info   616, 4365
        decf    _signed16_rem0,f
        ; line_number = 617
        ;info   617, 4366
        movf    _signed16_b0,w
        ; line_number = 618
        ;info   618, 4367
        subwf   _signed16_rem0,f
        ; line_number = 619
        ;info   619, 4368
        bsf     _c___byte, _c___bit
        ; line_number = 620
_signed16_divide_no_go:
        ; line_number = 621
        ;info   621, 4369
        rlf     _signed16_a1,f
        ; line_number = 622
        ;info   622, 4370
        rlf     _signed16_a0,f
        ; line_number = 623
        ;info   623, 4371
        decfsz  _signed16_count,f
        ; line_number = 624
        ;info   624, 4372
        goto    _signed16_divide_dloop

        ; line_number = 626
        ;info   626, 4373
        btfss   _signed16_sign, 7
        ; line_number = 627
        ;info   627, 4374
        retlw   0
        ; line_number = 628
        ;info   628, 4375
        goto    _signed16_divide_neg_b

        ; line_number = 630
_signed16_divide_neg_b:
        ; line_number = 631
        ;info   631, 4376
        comf    _signed16_b1,f
        ; line_number = 632
        ;info   632, 4377
        incf    _signed16_b1,f
        ; line_number = 633
        ;info   633, 4378
        btfsc   _z___byte, _z___bit
        ; line_number = 634
        ;info   634, 4379
        decf    _signed16_b0,f
        ; line_number = 635
        ;info   635, 4380
        comf    _signed16_b0,f
        ; line_number = 636
        ;info   636, 4381
        retlw   0

        ; line_number = 638
_signed16_divide_s_sign:
        ; line_number = 639
        ;info   639, 4382
        movf    _signed16_b0,w
        ; line_number = 640
        ;info   640, 4383
        xorwf   _signed16_a0,w
        ; line_number = 641
        ;info   641, 4384
        movwf   _signed16_sign
        ; line_number = 642
        ;info   642, 4385
        btfss   _signed16_a0, 7
        ; line_number = 643
        ;info   643, 4386
        goto    _signed16_divide_check_a

        ; line_number = 645
        ;info   645, 4387
        comf    _signed16_a1,f
        ; line_number = 646
        ;info   646, 4388
        incf    _signed16_a1,f
        ; line_number = 647
        ;info   647, 4389
        btfsc   _z___byte, _z___bit
        ; line_number = 648
        ;info   648, 4390
        decf    _signed16_a0,f
        ; line_number = 649
        ;info   649, 4391
        comf    _signed16_a0,f

        ; line_number = 651
_signed16_divide_check_a:
        ; line_number = 652
        ;info   652, 4392
        btfss   _signed16_b0, 7
        ; line_number = 653
        ;info   653, 4393
        retlw   0
        ; line_number = 654
        ;info   654, 4394
        goto    _signed16_divide_neg_b

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




_signed16_float32_convert__0return equ globals___2+32
        ; buffer = '_float32_signed16'
        ; line_number = 6
        ;info   6, 4395
        ; procedure _signed16_float32_convert
_signed16_float32_convert:
        ; line_number = 7
        ; argument from signed16
_signed16_float32_convert__from equ globals___2+30
        ; line_number = 8
        ;  returns float32
        ; line_number = 9
        ;  return_suppress

        ; # This procedure will convert {from} to a float32 and return it.

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 13
        ;  assemble
        ;info   13, 4395
        ; line_number = 14
        ;info   14, 4395
        movf    _signed16_float32_convert__from,w
        ; line_number = 15
        ;info   15, 4396
        ; databank _signed16_float32_convert, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        ; line_number = 16
        ;info   16, 4398
        movwf   _float32_aargb1

        ; line_number = 18
        ;info   18, 4399
        ; databank _float32_aargb1, _signed16_float32_convert
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 19
        ;info   19, 4401
        movf    _signed16_float32_convert__from+1,w
        ; line_number = 20
        ;info   20, 4402
        ; databank _signed16_float32_convert, _float32_aargb2
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        ; line_number = 21
        ;info   21, 4404
        movwf   _float32_aargb2

        ; # Perform the sign extend for {_float32_aargb0}:
        ; line_number = 24
        ;info   24, 4405
        clrf    _float32_aargb0
        ; line_number = 25
        ;info   25, 4406
        btfsc   _float32_aargb1, 7
        ; line_number = 26
        ;info   26, 4407
        decf    _float32_aargb0,f

        ; # Do the conversion to float32:
        ; line_number = 29
        ;info   29, 4408
        ; databank _float32_aargb2, _float32_from_integer24
        ; line_number = 30
        ;info   30, 4408
        ; codebank _signed16_float32_convert, _float32_from_integer24
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 31
        ;info   31, 4410
        call    _float32_from_integer24

        ; # Result is in the float32 A "register"; now move into 0return:
        ; line_number = 34
        ;info   34, 4411
        movlw   _signed16_float32_convert__0return>>1
        ; line_number = 35
        ;info   35, 4412
        ; databank _float32_from_integer24, _float32_pointer_store
        ; line_number = 36
        ;info   36, 4412
        ; codebank _float32_from_integer24, _float32_pointer_store
        ; line_number = 37
        ;info   37, 4412
        call    _float32_pointer_store

        ; line_number = 39
        ;info   39, 4413
        ; databank _float32_pointer_store, _signed16_float32_convert
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 40
        ;info   40, 4415
        ; codebank _float32_pointer_store, _signed16_float32_convert
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit
        ; line_number = 41
        ;info   41, 4417
        return  


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




_float32_signed16_convert__0return equ globals___2+40
        ; line_number = 44
        ;info   44, 4418
        ; procedure _float32_signed16_convert
_float32_signed16_convert:
        ; line_number = 45
        ; argument from float32
_float32_signed16_convert__from equ globals___2+36
        ; line_number = 46
        ;  returns signed16

        ; # This procedure will convert {from} to a {float32} and return it
        ; # as a {signed16}.

        ; before procedure statements delay=non-uniform, bit states=(data:10=uu=>10 code:10=uu=>10)
        ; line_number = 51
        ;  assemble
        ;info   51, 4418
        ; # Load the correct float32 pointer:
        ; line_number = 53
        ;info   53, 4418
        movlw   _float32_signed16_convert__from>>1
        ; line_number = 54
        ;info   54, 4419
        ; codebank _float32_signed16_convert, _float32_pointer_load
        bsf     __cb0___byte, __cb0___bit
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 55
        ;info   55, 4421
        ; databank _signed16_float32_convert, _float32_pointer_load
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        ; line_number = 56
        ;info   56, 4423
        call    _float32_pointer_load

        ; # Perform the conversion:
        ; line_number = 59
        ;info   59, 4424
        ; codebank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 60
        ;info   60, 4424
        ; databank _float32_pointer_load, _float32_integer24_convert
        ; line_number = 61
        ;info   61, 4424
        call    _float32_integer24_convert
        ; line_number = 62
        ;info   62, 4425
        ; codebank _float32_integer24_convert, _float32_signed16_convert
        bcf     __cb0___byte, __cb0___bit
        bsf     __cb1___byte, __cb1___bit

        ; # The result is sitting in _float32_aargb0,...,_float32_aargb2:
        ; line_number = 65
        ;info   65, 4427
        ; databank _float32_integer24_convert, _float32_aargb2
        ; line_number = 66
        ;info   66, 4427
        movf    _float32_aargb2,w
        ; line_number = 67
        ;info   67, 4428
        ; databank _float32_aargb2, _float32_signed16_convert
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 68
        ;info   68, 4430
        movwf   _float32_signed16_convert__0return+1

        ; line_number = 70
        ;info   70, 4431
        ; databank _float32_signed16_convert, _float32_aargb1
        bsf     __rp0___byte, __rp0___bit
        bcf     __rp1___byte, __rp1___bit
        ; line_number = 71
        ;info   71, 4433
        movf    _float32_aargb1,w
        ; line_number = 72
        ;info   72, 4434
        ; databank _float32_aargb1, _float32_signed16_convert
        bcf     __rp0___byte, __rp0___bit
        bsf     __rp1___byte, __rp1___bit
        ; line_number = 73
        ;info   73, 4436
        movwf   _float32_signed16_convert__0return
        ; line_number = 74
        ;info   74, 4437
        retlw   _float32_signed16_convert__0return>>1


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




        ; Code bank 3; Start address: 6144; End address: 8191
        org     6144
        ; Appending 9 delayed procedures to code bank 3
        ; buffer = '_float32_trig'
        ; line_number = 82
        ;info   82, 6144
        ; procedure _float32_fxm3232u
_float32_fxm3232u:
        ; arguments_none
        ; line_number = 84
        ;  returns_nothing
        ; line_number = 85
        ;  return_suppress

        ; #32x32 Bit Unsigned Fixed Point Multiply 32x32 -> 64
        ; # Input:  32 bit unsigned fixed point multiplicand in _float32_aargb0
        ; #         32 bit unsigned fixed point multiplier in _float32_bargb0
        ; # Use:    CALL    FXM3232U
        ; # Output: 64 bit unsigned fixed point product in _float32_aargb0
        ; # Result: _FLOAT32_AARG  <--  _FLOAT32_AARG x _FLOAT32_BARG
        ; # Max Timing:	12+842+2 = 856 clks
        ; # Min Timing:	12+197 = 209 clks
        ; # PM: 12+155+1 = 168	DM: 17

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 97
        ;  assemble
        ;info   97, 6144
        ; # clear partial product
        ; line_number = 99
        ;info   99, 6144
        clrf    _float32_aargb4
        ; line_number = 100
        ;info   100, 6145
        clrf    _float32_aargb5
        ; line_number = 101
        ;info   101, 6146
        clrf    _float32_aargb7
        ; line_number = 102
        ;info   102, 6147
        clrf    _float32_aargb6
        ; line_number = 103
        ;info   103, 6148
        movf    _float32_aargb0,w
        ; line_number = 104
        ;info   104, 6149
        movwf   _float32_tempb0
        ; line_number = 105
        ;info   105, 6150
        movf    _float32_aargb1,w
        ; line_number = 106
        ;info   106, 6151
        movwf   _float32_tempb1
        ; line_number = 107
        ;info   107, 6152
        movf    _float32_aargb2,w
        ; line_number = 108
        ;info   108, 6153
        movwf   _float32_tempb2
        ; line_number = 109
        ;info   109, 6154
        movf    _float32_aargb3,w
        ; line_number = 110
        ;info   110, 6155
        movwf   _float32_tempb3

        ; line_number = 112
        ;info   112, 6156
        movlw   8
        ; line_number = 113
        ;info   113, 6157
        movwf   _float32_loopcount

        ; line_number = 115
_float32_loopum3232a:
        ; line_number = 116
        ;info   116, 6158
        rrf     _float32_bargb3,f
        ; line_number = 117
        ;info   117, 6159
        btfsc   _float32_status, _float32_c
        ; line_number = 118
        ;info   118, 6160
        goto    _float32_alum3232nap
        ; line_number = 119
        ;info   119, 6161
        decfsz  _float32_loopcount,f
        ; line_number = 120
        ;info   120, 6162
        goto    _float32_loopum3232a

        ; line_number = 122
        ;info   122, 6163
        movwf   _float32_loopcount

        ; line_number = 124
_float32_loopum3232b:
        ; line_number = 125
        ;info   125, 6164
        rrf     _float32_bargb2,f
        ; line_number = 126
        ;info   126, 6165
        btfsc   _float32_status, _float32_c
        ; line_number = 127
        ;info   127, 6166
        goto    _float32_blum3232nap
        ; line_number = 128
        ;info   128, 6167
        decfsz  _float32_loopcount,f
        ; line_number = 129
        ;info   129, 6168
        goto    _float32_loopum3232b

        ; line_number = 131
        ;info   131, 6169
        movwf   _float32_loopcount

        ; line_number = 133
_float32_loopum3232c:
        ; line_number = 134
        ;info   134, 6170
        rrf     _float32_bargb1,f
        ; line_number = 135
        ;info   135, 6171
        btfsc   _float32_status, _float32_c
        ; line_number = 136
        ;info   136, 6172
        goto    _float32_clum3232nap
        ; line_number = 137
        ;info   137, 6173
        decfsz  _float32_loopcount,f
        ; line_number = 138
        ;info   138, 6174
        goto    _float32_loopum3232c

        ; line_number = 140
        ;info   140, 6175
        movwf   _float32_loopcount

        ; line_number = 142
_float32_loopum3232d:
        ; line_number = 143
        ;info   143, 6176
        rrf     _float32_bargb0,f
        ; line_number = 144
        ;info   144, 6177
        btfsc   _float32_status, _float32_c
        ; line_number = 145
        ;info   145, 6178
        goto    _float32_dlum3232nap
        ; line_number = 146
        ;info   146, 6179
        decfsz  _float32_loopcount,f
        ; line_number = 147
        ;info   147, 6180
        goto    _float32_loopum3232d

        ; line_number = 149
        ;info   149, 6181
        clrf    _float32_aargb0
        ; line_number = 150
        ;info   150, 6182
        clrf    _float32_aargb1
        ; line_number = 151
        ;info   151, 6183
        clrf    _float32_aargb2
        ; line_number = 152
        ;info   152, 6184
        clrf    _float32_aargb3
        ; line_number = 153
        ;info   153, 6185
        retlw   0

        ; line_number = 155
_float32_alum3232nap:
        ; line_number = 156
        ;info   156, 6186
        bcf     _float32_status, _float32_c
        ; line_number = 157
        ;info   157, 6187
        goto    _float32_alum3232na

        ; line_number = 159
_float32_blum3232nap:
        ; line_number = 160
        ;info   160, 6188
        bcf     _float32_status, _float32_c
        ; line_number = 161
        ;info   161, 6189
        goto    _float32_blum3232na

        ; line_number = 163
_float32_clum3232nap:
        ; line_number = 164
        ;info   164, 6190
        bcf     _float32_status, _float32_c
        ; line_number = 165
        ;info   165, 6191
        goto    _float32_clum3232na

        ; line_number = 167
_float32_dlum3232nap:
        ; line_number = 168
        ;info   168, 6192
        bcf     _float32_status, _float32_c
        ; line_number = 169
        ;info   169, 6193
        goto    _float32_dlum3232na

        ; line_number = 171
_float32_aloopum3232:
        ; line_number = 172
        ;info   172, 6194
        rrf     _float32_bargb3,f
        ; line_number = 173
        ;info   173, 6195
        btfss   _float32_status, _float32_c
        ; line_number = 174
        ;info   174, 6196
        goto    _float32_alum3232na
        ; line_number = 175
        ;info   175, 6197
        movf    _float32_tempb3,w
        ; line_number = 176
        ;info   176, 6198
        addwf   _float32_aargb3,f
        ; line_number = 177
        ;info   177, 6199
        movf    _float32_tempb2,w
        ; line_number = 178
        ;info   178, 6200
        btfsc   _float32_status, _float32_c
        ; line_number = 179
        ;info   179, 6201
        incfsz  _float32_tempb2,w
        ; line_number = 180
        ;info   180, 6202
        addwf   _float32_aargb2,f
        ; line_number = 181
        ;info   181, 6203
        movf    _float32_tempb1,w
        ; line_number = 182
        ;info   182, 6204
        btfsc   _float32_status, _float32_c
        ; line_number = 183
        ;info   183, 6205
        incfsz  _float32_tempb1,w
        ; line_number = 184
        ;info   184, 6206
        addwf   _float32_aargb1,f
        ; line_number = 185
        ;info   185, 6207
        movf    _float32_tempb0,w
        ; line_number = 186
        ;info   186, 6208
        btfsc   _float32_status, _float32_c
        ; line_number = 187
        ;info   187, 6209
        incfsz  _float32_tempb0,w
        ; line_number = 188
        ;info   188, 6210
        addwf   _float32_aargb0,f

        ; line_number = 190
_float32_alum3232na:
        ; line_number = 191
        ;info   191, 6211
        rrf     _float32_aargb0,f
        ; line_number = 192
        ;info   192, 6212
        rrf     _float32_aargb1,f
        ; line_number = 193
        ;info   193, 6213
        rrf     _float32_aargb2,f
        ; line_number = 194
        ;info   194, 6214
        rrf     _float32_aargb3,f
        ; line_number = 195
        ;info   195, 6215
        rrf     _float32_aargb4,f
        ; line_number = 196
        ;info   196, 6216
        decfsz  _float32_loopcount,f
        ; line_number = 197
        ;info   197, 6217
        goto    _float32_aloopum3232

        ; line_number = 199
        ;info   199, 6218
        movlw   8
        ; line_number = 200
        ;info   200, 6219
        movwf   _float32_loopcount

        ; line_number = 202
_float32_bloopum3232:
        ; line_number = 203
        ;info   203, 6220
        rrf     _float32_bargb2,f
        ; line_number = 204
        ;info   204, 6221
        btfss   _float32_status, _float32_c
        ; line_number = 205
        ;info   205, 6222
        goto    _float32_blum3232na
        ; line_number = 206
        ;info   206, 6223
        movf    _float32_tempb3,w
        ; line_number = 207
        ;info   207, 6224
        addwf   _float32_aargb3,f
        ; line_number = 208
        ;info   208, 6225
        movf    _float32_tempb2,w
        ; line_number = 209
        ;info   209, 6226
        btfsc   _float32_status, _float32_c
        ; line_number = 210
        ;info   210, 6227
        incfsz  _float32_tempb2,w
        ; line_number = 211
        ;info   211, 6228
        addwf   _float32_aargb2,f
        ; line_number = 212
        ;info   212, 6229
        movf    _float32_tempb1,w
        ; line_number = 213
        ;info   213, 6230
        btfsc   _float32_status, _float32_c
        ; line_number = 214
        ;info   214, 6231
        incfsz  _float32_tempb1,w
        ; line_number = 215
        ;info   215, 6232
        addwf   _float32_aargb1,f
        ; line_number = 216
        ;info   216, 6233
        movf    _float32_tempb0,w
        ; line_number = 217
        ;info   217, 6234
        btfsc   _float32_status, _float32_c
        ; line_number = 218
        ;info   218, 6235
        incfsz  _float32_tempb0,w
        ; line_number = 219
        ;info   219, 6236
        addwf   _float32_aargb0,f

        ; line_number = 221
_float32_blum3232na:
        ; line_number = 222
        ;info   222, 6237
        rrf     _float32_aargb0,f
        ; line_number = 223
        ;info   223, 6238
        rrf     _float32_aargb1,f
        ; line_number = 224
        ;info   224, 6239
        rrf     _float32_aargb2,f
        ; line_number = 225
        ;info   225, 6240
        rrf     _float32_aargb3,f
        ; line_number = 226
        ;info   226, 6241
        rrf     _float32_aargb4,f
        ; line_number = 227
        ;info   227, 6242
        rrf     _float32_aargb5,f
        ; line_number = 228
        ;info   228, 6243
        decfsz  _float32_loopcount,f
        ; line_number = 229
        ;info   229, 6244
        goto    _float32_bloopum3232

        ; line_number = 231
        ;info   231, 6245
        movlw   8
        ; line_number = 232
        ;info   232, 6246
        movwf   _float32_loopcount

        ; line_number = 234
_float32_cloopum3232:
        ; line_number = 235
        ;info   235, 6247
        rrf     _float32_bargb1,f
        ; line_number = 236
        ;info   236, 6248
        btfss   _float32_status, _float32_c
        ; line_number = 237
        ;info   237, 6249
        goto    _float32_clum3232na
        ; line_number = 238
        ;info   238, 6250
        movf    _float32_tempb3,w
        ; line_number = 239
        ;info   239, 6251
        addwf   _float32_aargb3,f
        ; line_number = 240
        ;info   240, 6252
        movf    _float32_tempb2,w
        ; line_number = 241
        ;info   241, 6253
        btfsc   _float32_status, _float32_c
        ; line_number = 242
        ;info   242, 6254
        incfsz  _float32_tempb2,w
        ; line_number = 243
        ;info   243, 6255
        addwf   _float32_aargb2,f
        ; line_number = 244
        ;info   244, 6256
        movf    _float32_tempb1,w
        ; line_number = 245
        ;info   245, 6257
        btfsc   _float32_status, _float32_c
        ; line_number = 246
        ;info   246, 6258
        incfsz  _float32_tempb1,w
        ; line_number = 247
        ;info   247, 6259
        addwf   _float32_aargb1,f
        ; line_number = 248
        ;info   248, 6260
        movf    _float32_tempb0,w
        ; line_number = 249
        ;info   249, 6261
        btfsc   _float32_status, _float32_c
        ; line_number = 250
        ;info   250, 6262
        incfsz  _float32_tempb0,w
        ; line_number = 251
        ;info   251, 6263
        addwf   _float32_aargb0,f

        ; line_number = 253
_float32_clum3232na:
        ; line_number = 254
        ;info   254, 6264
        rrf     _float32_aargb0,f
        ; line_number = 255
        ;info   255, 6265
        rrf     _float32_aargb1,f
        ; line_number = 256
        ;info   256, 6266
        rrf     _float32_aargb2,f
        ; line_number = 257
        ;info   257, 6267
        rrf     _float32_aargb3,f
        ; line_number = 258
        ;info   258, 6268
        rrf     _float32_aargb4,f
        ; line_number = 259
        ;info   259, 6269
        rrf     _float32_aargb5,f
        ; line_number = 260
        ;info   260, 6270
        rrf     _float32_aargb6,f
        ; line_number = 261
        ;info   261, 6271
        decfsz  _float32_loopcount,f
        ; line_number = 262
        ;info   262, 6272
        goto    _float32_cloopum3232

        ; line_number = 264
        ;info   264, 6273
        movlw   8
        ; line_number = 265
        ;info   265, 6274
        movwf   _float32_loopcount

        ; line_number = 267
_float32_dloopum3232:
        ; line_number = 268
        ;info   268, 6275
        rrf     _float32_bargb0,f
        ; line_number = 269
        ;info   269, 6276
        btfss   _float32_status, _float32_c
        ; line_number = 270
        ;info   270, 6277
        goto    _float32_dlum3232na
        ; line_number = 271
        ;info   271, 6278
        movf    _float32_tempb3,w
        ; line_number = 272
        ;info   272, 6279
        addwf   _float32_aargb3,f
        ; line_number = 273
        ;info   273, 6280
        movf    _float32_tempb2,w
        ; line_number = 274
        ;info   274, 6281
        btfsc   _float32_status, _float32_c
        ; line_number = 275
        ;info   275, 6282
        incfsz  _float32_tempb2,w
        ; line_number = 276
        ;info   276, 6283
        addwf   _float32_aargb2,f
        ; line_number = 277
        ;info   277, 6284
        movf    _float32_tempb1,w
        ; line_number = 278
        ;info   278, 6285
        btfsc   _float32_status, _float32_c
        ; line_number = 279
        ;info   279, 6286
        incfsz  _float32_tempb1,w
        ; line_number = 280
        ;info   280, 6287
        addwf   _float32_aargb1,f
        ; line_number = 281
        ;info   281, 6288
        movf    _float32_tempb0,w
        ; line_number = 282
        ;info   282, 6289
        btfsc   _float32_status, _float32_c
        ; line_number = 283
        ;info   283, 6290
        incfsz  _float32_tempb0,w
        ; line_number = 284
        ;info   284, 6291
        addwf   _float32_aargb0,f

        ; line_number = 286
_float32_dlum3232na:
        ; line_number = 287
        ;info   287, 6292
        rrf     _float32_aargb0,f
        ; line_number = 288
        ;info   288, 6293
        rrf     _float32_aargb1,f
        ; line_number = 289
        ;info   289, 6294
        rrf     _float32_aargb2,f
        ; line_number = 290
        ;info   290, 6295
        rrf     _float32_aargb3,f
        ; line_number = 291
        ;info   291, 6296
        rrf     _float32_aargb4,f
        ; line_number = 292
        ;info   292, 6297
        rrf     _float32_aargb5,f
        ; line_number = 293
        ;info   293, 6298
        rrf     _float32_aargb6,f
        ; line_number = 294
        ;info   294, 6299
        rrf     _float32_aargb7,f
        ; line_number = 295
        ;info   295, 6300
        decfsz  _float32_loopcount,f
        ; line_number = 296
        ;info   296, 6301
        goto    _float32_dloopum3232

        ; line_number = 298
        ;info   298, 6302
        retlw   0


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




        ; line_number = 301
        ;info   301, 6303
        ; procedure _float32_rnd4032
_float32_rnd4032:
        ; arguments_none
        ; line_number = 303
        ;  returns_nothing
        ; line_number = 304
        ;  return_suppress

        ; # RCS Header _Id: rnd4032.a16 1.1 1997/02/27 01:05:39 F.J.Testa Exp _
        ; # _Revision: 1.1 _

        ; # Nearest neighbor rounding
        ; # Input: 40 bit floating point number in _FLOAT32_AEXP,
        ; #        _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2, _FLOAT32_AARGB3
        ; # Use: call _float32_rnd4032()
        ; # Output: 32 bit floating point number in _FLOAT32_AEXP, _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
        ; # Result: _FLOAT32_AARG  <-- RND( _FLOAT32_AARG )
        ; # Testing on [MINNUM,MAXNUM] from 10000 trials:
        ; #		min	max	mean
        ; # Timing:	3	17		clks
        ; # Error:	0	0	0 	nsb

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 320
        ;  assemble
        ;info   320, 6303
        ; #:_float32_rnd4032
        ; # is MSB < 0x80?
        ; line_number = 323
        ;info   323, 6303
        btfss   _float32_aargb3, _float32_msb
        ; line_number = 324
        ;info   324, 6304
        retlw   0

        ; # set carry for rounding
        ; line_number = 327
        ;info   327, 6305
        bsf     _float32_status, _float32_c
        ; line_number = 328
        ;info   328, 6306
        movlw   127
        ; line_number = 329
        ;info   329, 6307
        andwf   _float32_aargb3,w
        ; line_number = 330
        ;info   330, 6308
        btfsc   _float32_status, _float32_z
        ; # select even if NSB = 0x80
        ; line_number = 332
        ;info   332, 6309
        rrf     _float32_aargb2,w

        ; line_number = 334
        ;info   334, 6310
        movf    _float32_aargb0,w
        ; # save sign
        ; line_number = 336
        ;info   336, 6311
        movwf   _float32_sign
        ; # make MSB explicit
        ; line_number = 338
        ;info   338, 6312
        bsf     _float32_aargb0, _float32_msb

        ; line_number = 340
        ;info   340, 6313
        bcf     _float32_status, _float32_z
        ; # round
        ; line_number = 342
        ;info   342, 6314
        btfsc   _float32_status, _float32_c
        ; line_number = 343
        ;info   343, 6315
        incf    _float32_aargb2,f
        ; line_number = 344
        ;info   344, 6316
        btfsc   _float32_status, _float32_z
        ; line_number = 345
        ;info   345, 6317
        incf    _float32_aargb1,f
        ; line_number = 346
        ;info   346, 6318
        btfsc   _float32_status, _float32_z
        ; line_number = 347
        ;info   347, 6319
        incf    _float32_aargb0,f

        ; # has rounding caused carryout?
        ; line_number = 350
        ;info   350, 6320
        btfss   _float32_status, _float32_z
        ; line_number = 351
        ;info   351, 6321
        goto    _float32_rnd4032ok
        ; # if so, right shift
        ; line_number = 353
        ;info   353, 6322
        rrf     _float32_aargb0,f
        ; line_number = 354
        ;info   354, 6323
        rrf     _float32_aargb1,f
        ; line_number = 355
        ;info   355, 6324
        rrf     _float32_aargb2,f
        ; # test for floating point overflow
        ; line_number = 357
        ;info   357, 6325
        incf    _float32_exp,f
        ; line_number = 358
        ;info   358, 6326
        btfsc   _float32_status, _float32_z
        ; line_number = 359
        ;info   359, 6327
        goto    _float32_setfov32

        ; line_number = 361
_float32_rnd4032ok:
        ; line_number = 362
        ;info   362, 6328
        btfss   _float32_sign, _float32_msb
        ; # clear sign bit if positive
        ; line_number = 364
        ;info   364, 6329
        bcf     _float32_aargb0, _float32_msb
        ; line_number = 365
        ;info   365, 6330
        retlw   0

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




_float32_sqrt__0return equ globals___1+56
        ; line_number = 417
        ;info   417, 6331
        ; procedure _float32_sqrt
_float32_sqrt:
        ; line_number = 418
        ; argument preroot float32
_float32_sqrt__preroot equ globals___1+52
        ; line_number = 419
        ;  returns float32

        ; # This procedure will return the square root of {preroot}.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 423
        ;  assemble
        ;info   423, 6331
        ; line_number = 424
        ;info   424, 6331
        movlw   _float32_sqrt__preroot>>1
        ; line_number = 425
        ;info   425, 6332
        ; codebank _float32_sqrt, _float32_pointer_load
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 426
        ;info   426, 6333
        call    _float32_pointer_load
        ; # Perform the square root operation; result is in float A register:
        ; line_number = 428
        ;info   428, 6334
        ; codebank _float32_pointer_load, _float32_sqrt_base
        bsf     __cb1___byte, __cb1___bit
        ; line_number = 429
        ;info   429, 6335
        call    _float32_sqrt_base
        ; # Now get the result stored into the correct return location:
        ; line_number = 431
        ;info   431, 6336
        movlw   _float32_sqrt__0return>>1
        ; line_number = 432
        ;info   432, 6337
        ; codebank _float32_sqrt_base, _float32_pointer_store
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 433
        ;info   433, 6338
        call    _float32_pointer_store
        ; # Return the pointer to the return value:
        ; line_number = 435
        ;info   435, 6339
        movlw   _float32_sqrt__0return>>1
        ; line_number = 436
        ;info   436, 6340
        ; codebank _float32_pointer_store, _float32_sqrt
        bsf     __cb1___byte, __cb1___bit
        ; line_number = 437
        ;info   437, 6341
        return  


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




        ; line_number = 440
        ;info   440, 6343
        ; procedure _float32_sqrt_base
_float32_sqrt_base:
        ; arguments_none
        ; line_number = 442
        ;  returns_nothing
        ; line_number = 443
        ;  return_suppress

        ; # RCS Header _Id: sqrt32.a16 1.3 1996/10/09 13:22:05 F.J.Testa Exp _
        ; # _Revision: 1.3 _
        ; # Evaluate sqrt(x)
        ; # Input: 32 bit floating point number in _FLOAT32_AEXP, _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
        ; # Use: CALL SQRT32
        ; # Output: 32 bit floating point number in _FLOAT32_AEXP, _FLOAT32_AARGB0, _FLOAT32_AARGB1, _FLOAT32_AARGB2
        ; # Result: AARG  <--  SQRT( AARG )
        ; # Testing on [0,MAXNUM] from 100000 trials:
        ; #		min	max	mean
        ; #	Timing:	7	4966	4290.2 	clks
        ; #		min	max	mean	rms
        ; #	Error:	-0xC7	0xDF	-15.18	37.95	nsb

        ; # Range reduction for the square root function is naturally produced by
        ; # the floating point representation,
        ; #
        ; # 		x = f * 2**e,	where 1 <= f < 2,
        ; #
        ; # leading to the expression
        ; #
        ; #			   |  sqrt(f) * 2**(e/2),		e even
        ; #		sqrt(x) =  |
        ; #			   |  sqrt(f) * sqrt(2) * 2**(e/2),	e odd
        ; #
        ; # With f=1+z, the function sqrt(1+z) is then approximated by a
        ; # minimax rational function on the interval [0,1].

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 472
        ;  assemble
        ;info   472, 6343
        ; # test for negative argument
        ; line_number = 474
        ;info   474, 6343
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 475
        ;info   475, 6344
        goto    _float32_domerr32

        ; # return if argument zero
        ; line_number = 478
        ;info   478, 6345
        clrf    _float32_aargb3
        ; line_number = 479
        ;info   479, 6346
        movf    _float32_aexp,w
        ; line_number = 480
        ;info   480, 6347
        btfsc   _float32_status, _float32_z
        ; line_number = 481
        ;info   481, 6348
        retlw   0

        ; # save exponent in _FLOAT32_CEXP
        ; line_number = 484
        ;info   484, 6349
        movf    _float32_aexp,w
        ; line_number = 485
        ;info   485, 6350
        movwf   _float32_cexp

        ; # save _FLOAT32_RND flag in _FLOAT32_DARGB3
        ; line_number = 488
        ;info   488, 6351
        movf    _float32_fpflags,w
        ; line_number = 489
        ;info   489, 6352
        movwf   _float32_dargb3

        ; # disable rounding
        ; line_number = 492
        ;info   492, 6353
        bcf     _float32_fpflags, _float32_rnd

        ; # compute z
        ; line_number = 495
        ;info   495, 6354
        movlw   _float32_expbias
        ; line_number = 496
        ;info   496, 6355
        movwf   _float32_aexp

        ; line_number = 498
        ;info   498, 6356
        movwf   _float32_bexp
        ; line_number = 499
        ;info   499, 6357
        clrf    _float32_bargb0
        ; line_number = 500
        ;info   500, 6358
        clrf    _float32_bargb1
        ; line_number = 501
        ;info   501, 6359
        clrf    _float32_bargb2
        ; line_number = 502
        ;info   502, 6360
        ; codebank _float32_sqrt_base, _float32_subtract
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 503
        ;info   503, 6361
        call    _float32_subtract

        ; # save z in DARG
        ; line_number = 506
        ;info   506, 6362
        movf    _float32_aexp,w
        ; line_number = 507
        ;info   507, 6363
        movwf   _float32_dexp
        ; line_number = 508
        ;info   508, 6364
        movf    _float32_aargb0,w
        ; line_number = 509
        ;info   509, 6365
        movwf   _float32_dargb0
        ; line_number = 510
        ;info   510, 6366
        movf    _float32_aargb1,w
        ; line_number = 511
        ;info   511, 6367
        movwf   _float32_dargb1
        ; line_number = 512
        ;info   512, 6368
        movf    _float32_aargb2,w
        ; line_number = 513
        ;info   513, 6369
        movwf   _float32_dargb2

        ; # Q(z)
        ; line_number = 516
        ;info   516, 6370
        movlw   _float32_sqrt32q2
        ; line_number = 517
        ;info   517, 6371
        movwf   _float32_bexp
        ; line_number = 518
        ;info   518, 6372
        movlw   _float32_sqrt32q20
        ; line_number = 519
        ;info   519, 6373
        movwf   _float32_bargb0
        ; line_number = 520
        ;info   520, 6374
        movlw   _float32_sqrt32q21
        ; line_number = 521
        ;info   521, 6375
        movwf   _float32_bargb1
        ; line_number = 522
        ;info   522, 6376
        movlw   _float32_sqrt32q22
        ; line_number = 523
        ;info   523, 6377
        movwf   _float32_bargb2

        ; line_number = 525
        ;info   525, 6378
        ; codebank _float32_subtract, _float32_add
        ; line_number = 526
        ;info   526, 6378
        call    _float32_add

        ; line_number = 528
        ;info   528, 6379
        movf    _float32_dexp,w
        ; line_number = 529
        ;info   529, 6380
        movwf   _float32_bexp
        ; line_number = 530
        ;info   530, 6381
        movf    _float32_dargb0,w
        ; line_number = 531
        ;info   531, 6382
        movwf   _float32_bargb0
        ; line_number = 532
        ;info   532, 6383
        movf    _float32_dargb1,w
        ; line_number = 533
        ;info   533, 6384
        movwf   _float32_bargb1
        ; line_number = 534
        ;info   534, 6385
        movf    _float32_dargb2,w
        ; line_number = 535
        ;info   535, 6386
        movwf   _float32_bargb2

        ; line_number = 537
        ;info   537, 6387
        ; codebank _float32_add, _float32_multiply
        ; line_number = 538
        ;info   538, 6387
        call    _float32_multiply

        ; line_number = 540
        ;info   540, 6388
        movlw   _float32_sqrt32q1
        ; line_number = 541
        ;info   541, 6389
        movwf   _float32_bexp
        ; line_number = 542
        ;info   542, 6390
        movlw   _float32_sqrt32q10
        ; line_number = 543
        ;info   543, 6391
        movwf   _float32_bargb0
        ; line_number = 544
        ;info   544, 6392
        movlw   _float32_sqrt32q11
        ; line_number = 545
        ;info   545, 6393
        movwf   _float32_bargb1
        ; line_number = 546
        ;info   546, 6394
        movlw   _float32_sqrt32q12
        ; line_number = 547
        ;info   547, 6395
        movwf   _float32_bargb2

        ; line_number = 549
        ;info   549, 6396
        ; codebank _float32_multiply, _float32_add
        ; line_number = 550
        ;info   550, 6396
        call    _float32_add

        ; line_number = 552
        ;info   552, 6397
        movf    _float32_dexp,w
        ; line_number = 553
        ;info   553, 6398
        movwf   _float32_bexp
        ; line_number = 554
        ;info   554, 6399
        movf    _float32_dargb0,w
        ; line_number = 555
        ;info   555, 6400
        movwf   _float32_bargb0
        ; line_number = 556
        ;info   556, 6401
        movf    _float32_dargb1,w
        ; line_number = 557
        ;info   557, 6402
        movwf   _float32_bargb1
        ; line_number = 558
        ;info   558, 6403
        movf    _float32_dargb2,w
        ; line_number = 559
        ;info   559, 6404
        movwf   _float32_bargb2

        ; line_number = 561
        ;info   561, 6405
        ; codebank _float32_add, _float32_multiply
        ; line_number = 562
        ;info   562, 6405
        call    _float32_multiply

        ; line_number = 564
        ;info   564, 6406
        movlw   _float32_sqrt32q0
        ; line_number = 565
        ;info   565, 6407
        movwf   _float32_bexp
        ; line_number = 566
        ;info   566, 6408
        movlw   _float32_sqrt32q00
        ; line_number = 567
        ;info   567, 6409
        movwf   _float32_bargb0
        ; line_number = 568
        ;info   568, 6410
        movlw   _float32_sqrt32q01
        ; line_number = 569
        ;info   569, 6411
        movwf   _float32_bargb1
        ; line_number = 570
        ;info   570, 6412
        movlw   _float32_sqrt32q02
        ; line_number = 571
        ;info   571, 6413
        movwf   _float32_bargb2

        ; line_number = 573
        ;info   573, 6414
        ; codebank _float32_multiply, _float32_add
        ; line_number = 574
        ;info   574, 6414
        call    _float32_add

        ; # save Q(z) in EARG
        ; line_number = 577
        ;info   577, 6415
        movf    _float32_aexp,w
        ; line_number = 578
        ;info   578, 6416
        movwf   _float32_eexp
        ; line_number = 579
        ;info   579, 6417
        movf    _float32_aargb0,w
        ; line_number = 580
        ;info   580, 6418
        movwf   _float32_eargb0
        ; line_number = 581
        ;info   581, 6419
        movf    _float32_aargb1,w
        ; line_number = 582
        ;info   582, 6420
        movwf   _float32_eargb1
        ; line_number = 583
        ;info   583, 6421
        movf    _float32_aargb2,w
        ; line_number = 584
        ;info   584, 6422
        movwf   _float32_eargb2

        ; # restore z
        ; line_number = 587
        ;info   587, 6423
        movf    _float32_dexp,w
        ; line_number = 588
        ;info   588, 6424
        movwf   _float32_aexp
        ; line_number = 589
        ;info   589, 6425
        movf    _float32_dargb0,w
        ; line_number = 590
        ;info   590, 6426
        movwf   _float32_aargb0
        ; line_number = 591
        ;info   591, 6427
        movf    _float32_dargb1,w
        ; line_number = 592
        ;info   592, 6428
        movwf   _float32_aargb1
        ; line_number = 593
        ;info   593, 6429
        movf    _float32_dargb2,w
        ; line_number = 594
        ;info   594, 6430
        movwf   _float32_aargb2

        ; # P(z)

        ; line_number = 598
        ;info   598, 6431
        movlw   _float32_sqrt32p2
        ; line_number = 599
        ;info   599, 6432
        movwf   _float32_bexp
        ; line_number = 600
        ;info   600, 6433
        movlw   _float32_sqrt32p20
        ; line_number = 601
        ;info   601, 6434
        movwf   _float32_bargb0
        ; line_number = 602
        ;info   602, 6435
        movlw   _float32_sqrt32p21
        ; line_number = 603
        ;info   603, 6436
        movwf   _float32_bargb1
        ; line_number = 604
        ;info   604, 6437
        movlw   _float32_sqrt32p22
        ; line_number = 605
        ;info   605, 6438
        movwf   _float32_bargb2

        ; line_number = 607
        ;info   607, 6439
        ; codebank _float32_add, _float32_multiply
        ; line_number = 608
        ;info   608, 6439
        call    _float32_multiply

        ; line_number = 610
        ;info   610, 6440
        movlw   _float32_sqrt32p1
        ; line_number = 611
        ;info   611, 6441
        movwf   _float32_bexp
        ; line_number = 612
        ;info   612, 6442
        movlw   _float32_sqrt32p10
        ; line_number = 613
        ;info   613, 6443
        movwf   _float32_bargb0
        ; line_number = 614
        ;info   614, 6444
        movlw   _float32_sqrt32p11
        ; line_number = 615
        ;info   615, 6445
        movwf   _float32_bargb1
        ; line_number = 616
        ;info   616, 6446
        movlw   _float32_sqrt32p12
        ; line_number = 617
        ;info   617, 6447
        movwf   _float32_bargb2

        ; line_number = 619
        ;info   619, 6448
        ; codebank _float32_multiply, _float32_add
        ; line_number = 620
        ;info   620, 6448
        call    _float32_add

        ; line_number = 622
        ;info   622, 6449
        movf    _float32_dexp,w
        ; line_number = 623
        ;info   623, 6450
        movwf   _float32_bexp
        ; line_number = 624
        ;info   624, 6451
        movf    _float32_dargb0,w
        ; line_number = 625
        ;info   625, 6452
        movwf   _float32_bargb0
        ; line_number = 626
        ;info   626, 6453
        movf    _float32_dargb1,w
        ; line_number = 627
        ;info   627, 6454
        movwf   _float32_bargb1
        ; line_number = 628
        ;info   628, 6455
        movf    _float32_dargb2,w
        ; line_number = 629
        ;info   629, 6456
        movwf   _float32_bargb2

        ; line_number = 631
        ;info   631, 6457
        ; codebank _float32_add, _float32_multiply
        ; line_number = 632
        ;info   632, 6457
        call    _float32_multiply

        ; line_number = 634
        ;info   634, 6458
        movlw   _float32_sqrt32p0
        ; line_number = 635
        ;info   635, 6459
        movwf   _float32_bexp
        ; line_number = 636
        ;info   636, 6460
        movlw   _float32_sqrt32p00
        ; line_number = 637
        ;info   637, 6461
        movwf   _float32_bargb0
        ; line_number = 638
        ;info   638, 6462
        movlw   _float32_sqrt32p01
        ; line_number = 639
        ;info   639, 6463
        movwf   _float32_bargb1
        ; line_number = 640
        ;info   640, 6464
        movlw   _float32_sqrt32p02
        ; line_number = 641
        ;info   641, 6465
        movwf   _float32_bargb2

        ; line_number = 643
        ;info   643, 6466
        ; codebank _float32_multiply, _float32_add
        ; line_number = 644
        ;info   644, 6466
        call    _float32_add

        ; line_number = 646
        ;info   646, 6467
        movf    _float32_eexp,w
        ; line_number = 647
        ;info   647, 6468
        movwf   _float32_bexp
        ; line_number = 648
        ;info   648, 6469
        movf    _float32_eargb0,w
        ; line_number = 649
        ;info   649, 6470
        movwf   _float32_bargb0
        ; line_number = 650
        ;info   650, 6471
        movf    _float32_eargb1,w
        ; line_number = 651
        ;info   651, 6472
        movwf   _float32_bargb1
        ; line_number = 652
        ;info   652, 6473
        movf    _float32_eargb2,w
        ; line_number = 653
        ;info   653, 6474
        movwf   _float32_bargb2

        ; # P(z)/Q(z)
        ; line_number = 656
        ;info   656, 6475
        ; codebank _float32_add, _float32_divide
        ; line_number = 657
        ;info   657, 6475
        call    _float32_divide

        ; # restore z
        ; line_number = 660
        ;info   660, 6476
        movf    _float32_dexp,w
        ; line_number = 661
        ;info   661, 6477
        movwf   _float32_bexp
        ; line_number = 662
        ;info   662, 6478
        movf    _float32_dargb0,w
        ; line_number = 663
        ;info   663, 6479
        movwf   _float32_bargb0
        ; line_number = 664
        ;info   664, 6480
        movf    _float32_dargb1,w
        ; line_number = 665
        ;info   665, 6481
        movwf   _float32_bargb1
        ; line_number = 666
        ;info   666, 6482
        movf    _float32_dargb2,w
        ; line_number = 667
        ;info   667, 6483
        movwf   _float32_bargb2

        ; # z*P(z)/Q(z)

        ; line_number = 671
        ;info   671, 6484
        ; codebank _float32_divide, _float32_multiply
        ; line_number = 672
        ;info   672, 6484
        call    _float32_multiply

        ; line_number = 674
        ;info   674, 6485
        movlw   _float32_expbias
        ; line_number = 675
        ;info   675, 6486
        movwf   _float32_bexp
        ; line_number = 676
        ;info   676, 6487
        clrf    _float32_bargb0
        ; line_number = 677
        ;info   677, 6488
        clrf    _float32_bargb1
        ; line_number = 678
        ;info   678, 6489
        clrf    _float32_bargb2

        ; # sqrt(1+z)=1+z*P(z)/Q(z)

        ; line_number = 682
        ;info   682, 6490
        ; codebank _float32_multiply, _float32_add
        ; line_number = 683
        ;info   683, 6490
        call    _float32_add

        ; line_number = 685
        ;info   685, 6491
        ; codebank _float32_add, _float32_sqrt_base
        bsf     __cb1___byte, __cb1___bit
        ; line_number = 686
_float32_squrt32ok:
        ; # is CEXP even or odd?
        ; line_number = 688
        ;info   688, 6492
        btfsc   _float32_cexp, _float32_lsb
        ; line_number = 689
        ;info   689, 6493
        goto    _float32_rrsqrtok32

        ; # fixed point multiplication by sqrt(2)
        ; line_number = 692
        ;info   692, 6494
        bsf     _float32_aargb0, _float32_msb

        ; # sqrt(2) = 1.41421356237
        ; line_number = 695
        ;info   695, 6495
        movlw   _float32_sqrt2b0
        ; line_number = 696
        ;info   696, 6496
        movwf   _float32_bargb0
        ; line_number = 697
        ;info   697, 6497
        movlw   _float32_sqrt2b1
        ; line_number = 698
        ;info   698, 6498
        movwf   _float32_bargb1
        ; line_number = 699
        ;info   699, 6499
        movlw   _float32_sqrt2b2
        ; line_number = 700
        ;info   700, 6500
        movwf   _float32_bargb2
        ; line_number = 701
        ;info   701, 6501
        movlw   _float32_sqrt2b3
        ; line_number = 702
        ;info   702, 6502
        movwf   _float32_bargb3

        ; line_number = 704
        ;info   704, 6503
        ; codebank _float32_sqrt_base, _float32_fxm3232u
        ; line_number = 705
        ;info   705, 6503
        call    _float32_fxm3232u
        ; line_number = 706
        ;info   706, 6504
        ; codebank _float32_fxm3232u, _float32_sqrt_base

        ; line_number = 708
        ;info   708, 6504
        incf    _float32_aexp,f

        ; line_number = 710
        ;info   710, 6505
        btfsc   _float32_aargb0, _float32_msb
        ; line_number = 711
        ;info   711, 6506
        goto    _float32_rrsqrtok32
        ; line_number = 712
        ;info   712, 6507
        rlf     _float32_aargb4,f
        ; line_number = 713
        ;info   713, 6508
        rlf     _float32_aargb3,f
        ; line_number = 714
        ;info   714, 6509
        rlf     _float32_aargb2,f
        ; line_number = 715
        ;info   715, 6510
        rlf     _float32_aargb1,f
        ; line_number = 716
        ;info   716, 6511
        rlf     _float32_aargb0,f
        ; line_number = 717
        ;info   717, 6512
        decf    _float32_aexp,f

        ; line_number = 719
_float32_rrsqrtok32:
        ; # make  MSB implicit
        ; line_number = 721
        ;info   721, 6513
        bcf     _float32_aargb0, _float32_msb

        ; # divide exponent by two
        ; line_number = 724
        ;info   724, 6514
        movlw   _float32_expbias
        ; line_number = 725
        ;info   725, 6515
        addwf   _float32_cexp,f
        ; line_number = 726
        ;info   726, 6516
        rrf     _float32_cexp,w
        ; line_number = 727
        ;info   727, 6517
        movwf   _float32_aexp

        ; line_number = 729
        ;info   729, 6518
        btfss   _float32_dargb3, _float32_rnd
        ; line_number = 730
        ;info   730, 6519
        retlw   0
        ; line_number = 731
        ;info   731, 6520
        bsf     _float32_fpflags, _float32_rnd

        ; line_number = 733
        ;info   733, 6521
        ; codebank _float32_sqrt_base, _float32_rnd4032
        ; line_number = 734
        ;info   734, 6521
        call    _float32_rnd4032
        ; line_number = 735
        ;info   735, 6522
        ; codebank _float32_rnd4032, _float32_sqrt_base

        ; line_number = 737
        ;info   737, 6522
        retlw   0

        ; line_number = 739
_float32_domerr32:
        ; # domain error
        ; line_number = 741
        ;info   741, 6523
        bsf     _float32_fpflags, _float32_dom
        ; line_number = 742
        ;info   742, 6524
        retlw   255

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




        ; line_number = 751
        ;info   751, 6525
        ; procedure _float32_tan
_float32_tan:
        ; line_number = 752
        ; argument x float32
        ; line_number = 753
        ;  returns float32
        ; argument_bind
        ; line_number = 755
        ;  return_bind 0 = _float32_trig1

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 757
        ;  _float32_trig2 := _float32_cos(x)
        ;info   757, 6525
        movlw   _float32_trig3>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_cos
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig2>>1
        call    _float32_pointer_store
        ; line_number = 758
        ;  if _float32_trig2 = 0.0 start
        ;info   758, 6537
        movlw   _float32_trig2>>1
        call    _float32_pointer_load
        call    _float32_equals
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=9 false.size=0
        ; No 2TEST: true.size=9 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_tan__1
        ; # Return a big number
        ; line_number = 760
        ;  return 1.0e20 start
        ; line_number = 760
        ;info   760, 6543
        ; _float32_trig1 := 1e+20 (C1 2D 78 EC)
        movlw   193
        movwf   _float32_trig1
        movlw   45
        movwf   _float32_trig1+1
        movlw   120
        movwf   _float32_trig1+2
        movlw   236
        movwf   _float32_trig1+3
        return  
        ; line_number = 760
        ;  return 1.0e20 done

        ; Recombine size1 = 0 || size2 = 0
_float32_tan__1:
        ; line_number = 758
        ;  if _float32_trig2 = 0.0 done
        ; line_number = 762
        ; return _float32_sin(x) / _float32_trig2 start
        ; line_number = 762
        ;info   762, 6552
        movlw   _float32_trig3>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_sin
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig2>>1
        call    _float32_pointer_divide
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        return  
        ; line_number = 762
        ; return _float32_sin(x) / _float32_trig2 done


        ; delay after procedure statements=non-uniform




        ; line_number = 765
        ;info   765, 6568
        ; procedure _float32_sin
_float32_sin:
        ; line_number = 766
        ; argument x float32
        ; line_number = 767
        ;  returns float32
        ; argument_bind
        ; line_number = 769
        ;  return_bind 0 = _float32_trig1
        ; line_number = 770
        ;  return_suppress

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 772
        ;  x := x - _float32_half_pi
        ;info   772, 6568
        ; -1.57076 = 7f c9 0e d1
        movlw   127
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; # Run into cos() procedure:
        ; #return _float32_cos(x)


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




        ; line_number = 792
        ;info   792, 6581
        ; procedure _float32_cos
_float32_cos:
        ; line_number = 793
        ; argument x float32
        ; line_number = 794
        ;  returns float32
        ; argument_bind
        ; line_number = 796
        ;  return_bind 0 = _float32_trig1

        ; # This procedure will return the cosine of {angle}.  It is assumed that
        ; # the domain of {angle} is [-10*pi, 10*pi].
        ; #
        ; # This algorithm first converts {angle} into [-pi, pi].  Next,
        ; # it further reduces {angle} to [0, pi/2], remembering it it needs
        ; # to negate the result. Next it uses a 4th order polynomial to
        ; # compute the cosine.  The polynomial coefficients come from the book
        ; # _Computer_Approximations_ by Hart, et. al. published by Wiley&Sons
        ; # in 1968.  I have a 25+ year photocopy of the book.  Your best bet
        ; # for finding this book is in a college or university library.  Good
        ; # luck!
        ; #
        ; # The polynomial is computed as cos(x) = P(x^2) on page
        ; # 118 using the coefficents for 3502 (4th order polynomial.)

        ; line_number = 813
        ;  local negative bit
_float32_cos__negative___byte equ globals___1+79
_float32_cos__negative___bit equ 0

        ; # First reduce {x} to [-pi, pi] using successive addition or
        ; # subtraction until it is done:
        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 817
        ;  while x > _float32_pi start
_float32_cos__1:
        ;info   817, 6581
        ; -3.14153 = 80 c9 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_add
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=14 false.size=0
        ; No 2TEST: true.size=14 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_cos__2
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 818
        ; x := x - _float32_two_pi
        ;info   818, 6597
        ; -6.28306 = 81 c9 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        goto    _float32_cos__1
        ; Recombine size1 = 0 || size2 = 0
_float32_cos__2:
        ; line_number = 817
        ;  while x > _float32_pi done
        ; line_number = 819
        ; while x < _float32_minus_pi start
_float32_cos__3:
        ;info   819, 6611
        ; 3.14153 = 80 49 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_add
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=14 false.size=0
        ; No 2TEST: true.size=14 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_cos__4
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 820
        ; x := x + _float32_two_pi
        ;info   820, 6627
        ; 6.28306 = 81 49 0e d1
        movlw   129
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        bsf     __cb1___byte, __cb1___bit
        goto    _float32_cos__3
        ; Recombine size1 = 0 || size2 = 0
_float32_cos__4:
        ; line_number = 819
        ; while x < _float32_minus_pi done
        ; # Now reduce the {x} to [0, pi/2]:
        ; line_number = 823
        ;  if x < 0.0 start
        ;info   823, 6641
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=5 false.size=0
        ; No 2TEST: true.size=5 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_cos__5
        bcf     __cb1___byte, __cb1___bit
        ; # {x} is less than zero; Use cosine(x) = cosine(-x) to make it
        ; # positive:
        ; line_number = 826
        ;  x := -x
        ;info   826, 6649
        movlw   _float32_trig1>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; Recombine size1 = 0 || size2 = 0
_float32_cos__5:
        ; line_number = 823
        ;  if x < 0.0 done
        ; line_number = 827
        ; if x > _float32_half_pi start
        ;info   827, 6654
        ; -1.57076 = 7f c9 0e d1
        movlw   127
        movwf   _float32_aexp
        movlw   201
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_add
        call    _float32_greater_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=13 false.size=1
        ; No 2TEST: true.size=13 false.size=1
        bsf     __cb1___byte, __cb1___bit
        ; 2GOTO: Single test with two GOTO's
        btfss   __z___byte, __z___bit
        goto    _float32_cos__6
        bcf     __cb1___byte, __cb1___bit
        ; # {x} > pi/2.  Make {x} < pi/2 by: cos(x) = -cos(pi - x):
        ; line_number = 829
        ;  x := _float32_pi - x
        ;info   829, 6670
        ; 3.14153 = 80 49 0e d1
        movlw   128
        movwf   _float32_aexp
        movlw   73
        movwf   _float32_aargb0
        movlw   14
        movwf   _float32_aargb1
        movlw   209
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_subtract
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; line_number = 830
        ;  negative := _true
        ;info   830, 6682
        bsf     _float32_cos__negative___byte, _float32_cos__negative___bit
        ; Recombine code1_bit_states != code2_bit_states
        bsf     __cb1___byte, __cb1___bit
        goto    _float32_cos__7
        ; 2GOTO: Starting code 2
_float32_cos__6:
        ; # {x} <= pi/2:
        ; line_number = 833
        ;  negative := _false
        ;info   833, 6685
        bcf     _float32_cos__negative___byte, _float32_cos__negative___bit

_float32_cos__7:
        ; 2GOTO: code1 final bitstates:(data:01=uu=>01 code:01=uu=>01)
        ; 2GOTO: code2 final bitstates:(data:01=uu=>01 code:XX=cc=>XX)
        ; 2GOTO: code final bitstates:(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 827
        ; if x > _float32_half_pi done
        ; # Compute cos(x) = P(x^2):
        ; line_number = 836
        ;  x := x * x
        ;info   836, 6686
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; #3502 = 4th order polynomial:
        ; line_number = 839
        ;  x := _float32_cosine_p00 + x * (_float32_cosine_p01 + x * (_float32_cosine_p02 + x * (_float32_cosine_p03 + x * _float32_cosine_p04))) 
        ;info   839, 6693
        ; 2.31539e-05 = 6f 42 3a b1
        movlw   111
        movwf   _float32_aexp
        movlw   66
        movwf   _float32_aargb0
        movlw   58
        movwf   _float32_aargb1
        movlw   177
        movwf   _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        ; -0.00138537 = 75 b5 95 51
        movlw   117
        movwf   _float32_bexp
        movlw   181
        movwf   _float32_bargb0
        movlw   149
        movwf   _float32_bargb1
        movlw   81
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        ; 0.0416636 = 7a 2a a7 6f
        movlw   122
        movwf   _float32_bexp
        movlw   42
        movwf   _float32_bargb0
        movlw   167
        movwf   _float32_bargb1
        movlw   111
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        ; -0.499999 = 7d ff ff e0
        movlw   125
        movwf   _float32_bexp
        movlw   255
        movwf   _float32_bargb0
        movlw   255
        movwf   _float32_bargb1
        movlw   224
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        ; 1 = 7e 7f ff ff
        movlw   126
        movwf   _float32_bexp
        movlw   127
        movwf   _float32_bargb0
        movlw   255
        movwf   _float32_bargb1
        movlw   255
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; #3503 = 5th order polynomial:
        ; #x := _float32_cosine_p00 + x * (_float32_cosine_p01 + x *
        ; #  (_float32_cosine_p02 + x * (_float32_cosine_p03 + x *
        ; #  (_float32_cosine_p04 + x * _float32_cosine_p05))))

        ; # Restore negative sign if needed:
        ; line_number = 849
        ;  if negative start
        ;info   849, 6747
        ; =>bit_code_emit@symbol(): sym=_float32_cos__negative
        ; No 1TEST: true.size=5 false.size=0
        ; No 2TEST: true.size=5 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   _float32_cos__negative___byte, _float32_cos__negative___bit
        goto    _float32_cos__8
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 850
        ; x := -x
        ;info   850, 6751
        movlw   _float32_trig1>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
_float32_cos__8:
        ; line_number = 849
        ;  if negative done
        ; line_number = 852
        ; return x start
        ; line_number = 852
        ;info   852, 6756
        ; Assignment of variable to self (no code needed)
        bsf     __cb1___byte, __cb1___bit
        return  
        ; line_number = 852
        ; return x done


        ; delay after procedure statements=non-uniform




        ; line_number = 861
        ;info   861, 6758
        ; procedure _float32_arcsin
_float32_arcsin:
        ; line_number = 862
        ; argument x float32
        ; line_number = 863
        ;  returns float32
        ; argument_bind
        ; line_number = 865
        ;  return_bind 0 = _float32_trig1

        ; # This algorithm is loosely derived from the e_asinf.c
        ; # routine found in the glibc verion 2.4.  The copyrights
        ; # below are copied verbatim, even though none of the
        ; # original code is left, and hence the copyright no longer
        ; # technically holds.  I do not have the slightest clue
        ; # how the polynomial coefficients were computed; I just
        ; # copied them from the code verbatim.
        ; #
        ; # ====================================================
        ; # Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
        ; #
        ; # Developed at SunPro, a Sun Microsystems, Inc. business.
        ; # Permission to use, copy, modify, and distribute this
        ; # software is freely granted, provided that this notice
        ; # is preserved.
        ; # ====================================================
        ; #
        ; # Single precision expansion contributed by
        ; # Stephen L. Moshier <moshier@na-net.ornl.gov>
        ; #
        ; # For -.5 <= x <= .5:
        ; #
        ; #    arcsin(x) = x + x^3 * P(x^2)
        ; #
        ; # where,
        ; #
        ; #    P(t) = P0 + t * (P1 + t * (P2 + t * (P3 + t * P4)))
        ; #
        ; # and
        ; #
        ; #    P0 = 1.666675248e-1
        ; #    P1 = 7.495297643e-2
        ; #    P2 = 4.547037598e-2
        ; #    P3 = 2.417951451e-2
        ; #    P4 = 4.216630880e-2
        ; #
        ; # For .5 <= |x| <= 1.0, the following identity is used:
        ; #
        ; #    arcsin(x) = pi/2 - 2 * arcsin(sqrt( (1-x)/2 )), -1 <= x <= 1
        ; #
        ; #
        ; # This comes from equation 6.5.25 in section 6.5, The Inverse
        ; # Trigonometric Functions, pages 120-130, in the book Computer
        ; # Approximations by Hart, et. al., 1968, published by John
        ; # Wily & Sons, Inc.  The Library of Congress Card number is
        ; # 67-23326.  ASIN 0471356301.
        ; #
        ; # Actually, I think this equation is slightly wrong and should be:
        ; #
        ; #    arcsin(x) = sgn(x)(pi/2 - 2 * arcsin(sqrt( (1-|x|)/2 ))), -1 <= x <= 1
        ; #
        ; # I only use it for .5 <= x <= 1.0, and correct for the sign
        ; # using the equation arcsin(x) = -arcsin(-x), so it does not
        ; # really matter.

        ; line_number = 922
        ;  local adjust bit
_float32_arcsin__adjust___byte equ globals___1+79
_float32_arcsin__adjust___bit equ 1
        ; line_number = 923
        ;  local negative bit
_float32_arcsin__negative___byte equ globals___1+79
_float32_arcsin__negative___bit equ 2

        ; # Keep track of sign:
        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 926
        ;  negative := _false
        ;info   926, 6758
        bcf     _float32_arcsin__negative___byte, _float32_arcsin__negative___bit
        ; line_number = 927
        ;  if x < 0.0 start
        ;info   927, 6759
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=6 false.size=0
        ; No 2TEST: true.size=6 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_arcsin__1
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 928
        ; x := -x
        ;info   928, 6767
        movlw   _float32_trig1>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; line_number = 929
        ;  negative := _true
        ;info   929, 6772
        bsf     _float32_arcsin__negative___byte, _float32_arcsin__negative___bit

        ; Recombine size1 = 0 || size2 = 0
_float32_arcsin__1:
        ; line_number = 927
        ;  if x < 0.0 done
        ; # Look at exponent to determine whether |x| <= .5 or |x| >= .5:
        ; line_number = 932
        ;  adjust := _false
        ;info   932, 6773
        bcf     _float32_arcsin__adjust___byte, _float32_arcsin__adjust___bit
        ; line_number = 933
        ;  if x >= .5 start
        ;info   933, 6774
        ; -0.5 = 7e 80 00 00
        movlw   126
        movwf   _float32_aexp
        movlw   128
        movwf   _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_add
        call    _float32_greater_than_or_equal
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=23 false.size=0
        ; No 2TEST: true.size=23 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_arcsin__2
        bcf     __cb1___byte, __cb1___bit
        ; # |x| >= .5;  Compute x' := sqrt((1-x)/2):
        ; line_number = 935
        ;  adjust := _true
        ;info   935, 6788
        bsf     _float32_arcsin__adjust___byte, _float32_arcsin__adjust___bit
        ; line_number = 936
        ;  x := _float32_sqrt((1.0 - x) / 2.0)
        ;info   936, 6789
        ; 1 = 7f 00 00 00
        movlw   127
        movwf   _float32_aexp
        clrf    _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_subtract
        ; 0.5 = 7e 00 00 00
        movlw   126
        movwf   _float32_bexp
        clrf    _float32_bargb0
        clrf    _float32_bargb1
        clrf    _float32_bargb2
        call    _float32_multiply
        movlw   _float32_sqrt__preroot>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_sqrt
        movlw   _float32_sqrt__0return>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; # Now |x'| <= .5

        ; Recombine size1 = 0 || size2 = 0
_float32_arcsin__2:
        ; line_number = 933
        ;  if x >= .5 done
        ; # Now we compute arcsin(x) = x + x^3 * P(x^2):
        ; line_number = 940
        ;  _float32_trig2 := x * x
        ;info   940, 6811
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        movlw   _float32_trig2>>1
        call    _float32_pointer_store
        ; line_number = 941
        ;  x := (_float32_arcsine_p0 + _float32_trig2 * (_float32_arcsine_p1 + _float32_trig2 * (_float32_arcsine_p2 + _float32_trig2 * (_float32_arcsine_p3 + _float32_trig2 * _float32_arcsine_p4)))) * _float32_trig2 * x + x 
        ;info   941, 6818
        ; 0.0421663 = 7a 2c b6 94
        movlw   122
        movwf   _float32_aexp
        movlw   44
        movwf   _float32_aargb0
        movlw   182
        movwf   _float32_aargb1
        movlw   148
        movwf   _float32_aargb2
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        ; 0.0241795 = 79 46 14 1e
        movlw   121
        movwf   _float32_bexp
        movlw   70
        movwf   _float32_bargb0
        movlw   20
        movwf   _float32_bargb1
        movlw   30
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        ; 0.0454704 = 7a 3a 3f 25
        movlw   122
        movwf   _float32_bexp
        movlw   58
        movwf   _float32_bargb0
        movlw   63
        movwf   _float32_bargb1
        movlw   37
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        ; 0.074953 = 7b 19 80 f2
        movlw   123
        movwf   _float32_bexp
        movlw   25
        movwf   _float32_bargb0
        movlw   128
        movwf   _float32_bargb1
        movlw   242
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        ; 0.166668 = 7c 2a aa e4
        movlw   124
        movwf   _float32_bexp
        movlw   42
        movwf   _float32_bargb0
        movlw   170
        movwf   _float32_bargb1
        movlw   228
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        movlw   _float32_trig1>>1
        call    _float32_pointer_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; line_number = 946
        ; if adjust start
        ;info   946, 6878
        ; =>bit_code_emit@symbol(): sym=_float32_arcsin__adjust
        ; No 1TEST: true.size=19 false.size=0
        ; No 2TEST: true.size=19 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   _float32_arcsin__adjust___byte, _float32_arcsin__adjust___bit
        goto    _float32_arcsin__3
        bcf     __cb1___byte, __cb1___bit
        ; # arcsin(x) = pi/2 - 2 * arcsin(sqrt( (1-x)/2 )), -1 <= x <= 1
        ; # arcsin(x) = pi/2 - 2 * arcsin(x')

        ; line_number = 950
        ;  x := _float32_half_pi - 2.0 * x
        ;info   950, 6882
        ; 2 = 80 00 00 00
        movlw   128
        movwf   _float32_aexp
        clrf    _float32_aargb0
        clrf    _float32_aargb1
        clrf    _float32_aargb2
        movlw   _float32_trig1>>1
        call    _float32_pointer_multiply
        call    _float32_negate
        ; 1.57076 = 7f 49 0e d1
        movlw   127
        movwf   _float32_bexp
        movlw   73
        movwf   _float32_bargb0
        movlw   14
        movwf   _float32_bargb1
        movlw   209
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
_float32_arcsin__3:
        ; line_number = 946
        ; if adjust done
        ; # If necessary, fix the sign:
        ; line_number = 953
        ;  if negative start
        ;info   953, 6901
        ; =>bit_code_emit@symbol(): sym=_float32_arcsin__negative
        ; No 1TEST: true.size=5 false.size=0
        ; No 2TEST: true.size=5 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   _float32_arcsin__negative___byte, _float32_arcsin__negative___bit
        goto    _float32_arcsin__4
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 954
        ; x := -x
        ;info   954, 6905
        movlw   _float32_trig1>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; Recombine size1 = 0 || size2 = 0
_float32_arcsin__4:
        ; line_number = 953
        ;  if negative done
        ; line_number = 956
        ; return x start
        ; line_number = 956
        ;info   956, 6910
        ; Assignment of variable to self (no code needed)
        bsf     __cb1___byte, __cb1___bit
        return  
        ; line_number = 956
        ; return x done


        ; delay after procedure statements=non-uniform




        ; line_number = 959
        ;info   959, 6912
        ; procedure _float32_arctan2
_float32_arctan2:
        ; line_number = 960
        ; argument x float32
        ; line_number = 961
        ; argument y float32
        ; line_number = 962
        ;  returns float32
        ; argument_bind
        ; argument_bind
        ; line_number = 965
        ;  return_bind 0 = _float32_trig1

        ; # This procedure returns the result of arctan(y/x) using the
        ; # the signs of x and y to get the proper angle sign.  The returned
        ; # angle is in [-pi, pi].
        ; #
        ; # The code for thisprocedure is derived from the vector dot
        ; # product formula:
        ; #
        ; # Y
        ; # ^
        ; # |
        ; # |     * (x,y)=V
        ; # |    /|
        ; # |   / |
        ; # |  /  |
        ; # | /   |
        ; # |/a   |
        ; # O-----*--*----> X
        ; #         (1, 0)=U
        ; #
        ; #    U.V = |U| |V| cos(a)                                      (1)
        ; #
        ; #    (1,0).(x,y) = |(1,0)| |(x,y)| cos(a)                      (2)
        ; #
        ; #    1*x + 0*y = sqrt(1^2 + 0^2) * sqrt(x^2 + y^2) * cos(a)    (3)
        ; #
        ; #    x = sqrt(1 + 0) * sqrt(x*x + y*y) * cos(a)                (4)
        ; #
        ; #    x = sqrt(x*x + y*y) * cos(a)                              (5)
        ; #
        ; #    cos(a) = x/sqrt(x*x + y*y)                                (6)
        ; #
        ; #    a = arccos(x/sqrt(x*x + y*y))                             (7)
        ; #
        ; # In addition, via standard trigonometry:
        ; #
        ; #    tan(a) = y/x                                              (8)
        ; #
        ; #    a = arctan(y/x)                                           (9)
        ; #
        ; # Combining (7) and (9):
        ; #
        ; #    arctan(y/x) = a = arccos(x/sqrt(x*x + y*y))		   (10)
        ; #
        ; # If y<0, the returned angle is negative.
        ; #
        ; # What is nice about this derivation is that it still
        ; # yields an answer when x=0.  It only fails when both
        ; # x=0 and y=0.  Thus, there are no areas of reduced
        ; # accuracy around angle of pi/2 or -pi/2.

        ; before procedure statements delay=non-uniform, bit states=(data:01=uu=>01 code:11=uu=>11)
        ; line_number = 1017
        ;  _float32_trig1 := _float32_sqrt(x * x + y * y)
        ;info   1017, 6912
_float32_arctan2__1 equ globals___1+72
        movlw   _float32_trig2>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig2>>1
        call    _float32_pointer_multiply
        movlw   _float32_arctan2__1>>1
        call    _float32_pointer_store
        movlw   _float32_trig3>>1
        call    _float32_pointer_load
        movlw   _float32_trig3>>1
        call    _float32_pointer_multiply
        movlw   _float32_arctan2__1>>1
        call    _float32_pointer_add
        movlw   _float32_sqrt__preroot>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        call    _float32_sqrt
        movlw   _float32_sqrt__0return>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        ; line_number = 1018
        ;  _float32_trig1 := x / _float32_trig1
        ;info   1018, 6934
        movlw   _float32_trig2>>1
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_divide
        movlw   _float32_trig1>>1
        call    _float32_pointer_store

        ; # arccos(a) = pi/2 - arcsin(a):
        ; line_number = 1021
        ;  _float32_trig2 := _float32_half_pi - _float32_arcsin(_float32_trig1)
        ;info   1021, 6940
        ; Assignment of variable to self (no code needed)
        bsf     __cb1___byte, __cb1___bit
        call    _float32_arcsin
        movlw   _float32_trig1>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        call    _float32_negate
        ; 1.57076 = 7f 49 0e d1
        movlw   127
        movwf   _float32_bexp
        movlw   73
        movwf   _float32_bargb0
        movlw   14
        movwf   _float32_bargb1
        movlw   209
        movwf   _float32_bargb2
        call    _float32_add
        movlw   _float32_trig2>>1
        call    _float32_pointer_store

        ; line_number = 1023
        ;  if y < 0.0 start
        ;info   1023, 6957
        movlw   _float32_trig3>>1
        call    _float32_pointer_load
        call    _float32_less_than
        ; =>bit_code_emit@symbol(): sym=__z
        ; No 1TEST: true.size=5 false.size=0
        ; No 2TEST: true.size=5 false.size=0
        ; 1GOTO: Single test with GOTO
        bsf     __cb1___byte, __cb1___bit
        btfss   __z___byte, __z___bit
        goto    _float32_arctan2__2
        bcf     __cb1___byte, __cb1___bit
        ; line_number = 1024
        ; _float32_trig2 := -_float32_trig2
        ;info   1024, 6964
        movlw   _float32_trig2>>1
        call    _float32_pointer_load
        call    _float32_negate
        movlw   _float32_trig2>>1
        call    _float32_pointer_store
        ; Recombine size1 = 0 || size2 = 0
_float32_arctan2__2:
        ; line_number = 1023
        ;  if y < 0.0 done
        ; line_number = 1025
        ; return _float32_trig2 start
        ; line_number = 1025
        ;info   1025, 6969
        movlw   _float32_trig2>>1
        bcf     __cb1___byte, __cb1___bit
        call    _float32_pointer_load
        movlw   _float32_trig1>>1
        call    _float32_pointer_store
        bsf     __cb1___byte, __cb1___bit
        return  
        ; line_number = 1025
        ; return _float32_trig2 done

        ; delay after procedure statements=non-uniform




        ; Configuration bits
        ; address = 0x2007, fill = 0x1030
        ; cp = off (0x2000)
        ; debug = off (0x800)
        ; wrt = off (0x300)
        ; cpd = off (0x100)
        ; lvp = off (0x0)
        ; boren = off (0x0)
        ; pwrte = off (0x8)
        ; wdte = off (0x0)
        ; fosc = hs (0x2)
        ; 15162 = 0x3b3a
        __config 15162
        ; Define start addresses for data regions
        ; Region="shared___globals" Address=112" Size=16 Bytes=4 Bits=0 Available=12
        ; Region="globals___0" Address=32" Size=80 Bytes=67 Bits=16 Available=11
        ; Region="globals___1" Address=160" Size=80 Bytes=73 Bits=3 Available=6
        ; Region="globals___2" Address=272" Size=96 Bytes=64 Bits=0 Available=32
        ; Region="globals___3" Address=400" Size=112 Bytes=68 Bits=2 Available=43
        end
