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

        ; Define start addresses for data regions
shared___globals equ 32
__indf equ 0
__pcl equ 2
__status equ 3
__fsr equ 4
__c___byte equ 3
__c___bit equ 0
__z___byte equ 3
__z___bit equ 2
__rp0___byte equ 3
__rp0___bit equ 5
__rp1___byte equ 3
__rp1___bit equ 6
__irp___byte equ 3
__irp___bit equ 7
__pclath equ 10
__cb0___byte equ 10
__cb0___bit equ 3
__cb1___byte equ 10
__cb1___bit equ 4
        ; # #############################################################################
        ; #
        ; # Copyright (c) 2000-2004 by Wayne C. Gramlich & William T. Benson.
        ; # All rights reserved.
        ; #
        ; # Permission to use, copy, modify, distribute, and sell this software
        ; # for any purpose is hereby granted without fee provided that the above
        ; # copyright notice and this permission are retained.  The author makes
        ; # no representations about the suitability of this software for any purpose.
        ; # It is provided "as is" without express or implied warranty.
        ; #
        ; # This is the code that implements the DualMotor1Amp module.  Basically
        ; # it just waits for commands that come in at 2400 baud and responds
        ; # to them.  See:
        ; #
        ; #   http://gramlich.net/projects/robobricks/dualmotor1amp/index.html
        ; #
        ; # for more details.
        ; #
        ; # #############################################################################

        ; buffer = 'dualmotor1amp'
        ; line_number = 23
        ; library _pic16f630 entered
        ; # Copyright (c) 2004 by Wayne C. Gramlich
        ; # All rights reserved.

        ; buffer = '_pic16f630'
        ; line_number = 5
        ; processor pic16f630
        ; line_number = 6
        ; configure_address 0x2007
        ; line_number = 7
        ;  configure_fill 0x0000
        ; line_number = 8
        ;  configure_option bg: bg11 = 0x3000
        ; line_number = 9
        ;  configure_option bg: bg10 = 0x2000
        ; line_number = 10
        ;  configure_option bg: bg01 = 0x1000
        ; line_number = 11
        ;  configure_option bg: bg00 = 0x0000
        ; line_number = 12
        ;  configure_option cpd: on = 0x000
        ; line_number = 13
        ;  configure_option cpd: off = 0x100
        ; line_number = 14
        ;  configure_option cp: on = 0x00
        ; line_number = 15
        ;  configure_option cp: off = 0x80
        ; line_number = 16
        ;  configure_option boden: on = 0x40
        ; line_number = 17
        ;  configure_option boden: off = 0x00
        ; line_number = 18
        ;  configure_option mclre: on = 0x20
        ; line_number = 19
        ;  configure_option mclre: off = 0x00
        ; line_number = 20
        ;  configure_option pwrte: on = 0x00
        ; line_number = 21
        ;  configure_option pwrte: off = 0x10
        ; line_number = 22
        ;  configure_option wdte: on = 8
        ; line_number = 23
        ;  configure_option wdte: off = 0
        ; line_number = 24
        ;  configure_option fosc: rc_clk = 7
        ; line_number = 25
        ;  configure_option fosc: rc_no_clk = 6
        ; line_number = 26
        ;  configure_option fosc: int_clk = 5
        ; line_number = 27
        ;  configure_option fosc: int_no_clk = 4
        ; line_number = 28
        ;  configure_option fosc: ec = 3
        ; line_number = 29
        ;  configure_option fosc: hs = 2
        ; line_number = 30
        ;  configure_option fosc: xt = 1
        ; line_number = 31
        ;  configure_option fosc: lp = 0
        ; line_number = 32
        ;  code_bank 0x0 : 0x3ff
        ; line_number = 33
        ;  data_bank 0x0 : 0x7f
        ; line_number = 34
        ;  data_bank 0x80 : 0xff
        ; line_number = 35
        ;  shared_region 0x20 : 0x5f
        ; line_number = 36
        ;  interrupts_possible
        ; line_number = 37
        ;  osccal_register_symbol _osccal
        ; line_number = 38
        ;  osccal_at_address 0x3ff
        ; line_number = 39
        ;  packages pdip=14, soic=14, tssop=14
        ; line_number = 40
        ;  pin vdd, power_supply
        ; line_number = 41
        ; pin_bindings pdip=1, soic=1, tssop=1
        ; line_number = 42
        ; pin ra5_in, ra5_out, t1cki, osc1, clkin, ra5_unused
        ; line_number = 43
        ; pin_bindings pdip=2, soic=2, tssop=2
        ; line_number = 44
        ;  bind_to _porta@5
        ; line_number = 45
        ;  or_if ra5_in _trisa 16
        ; line_number = 46
        ;  or_if ra5_out _trisa 0
        ; line_number = 47
        ; pin ra4_in, ra4_out, t1g, osc2, clkout, ra4_unused
        ; line_number = 48
        ; pin_bindings pdip=3, soic=3, tssop=3
        ; line_number = 49
        ;  bind_to _porta@4
        ; line_number = 50
        ;  or_if ra4_in _trisa 8
        ; line_number = 51
        ;  or_if ra4_out _trisa 0
        ; line_number = 52
        ; pin ra3_in, mclr, vpp, ra3_unused
        ; line_number = 53
        ; pin_bindings pdip=4, soic=4, tssop=4
        ; line_number = 54
        ;  bind_to _porta@3
        ; line_number = 55
        ;  or_if ra3_in _trisa 4
        ; line_number = 56
        ; pin rc5_in, rc5_out, rc5_unused
        ; line_number = 57
        ; pin_bindings pdip=5, soic=5, tssop=5
        ; line_number = 58
        ;  bind_to _portc@5
        ; line_number = 59
        ;  or_if rc5_in _trisc 32
        ; line_number = 60
        ;  or_if rc5_out _trisc 0
        ; line_number = 61
        ; pin rc4_in, rc4_out, rc4_unused
        ; line_number = 62
        ; pin_bindings pdip=6, soic=6, tssop=6
        ; line_number = 63
        ;  bind_to _portc@4
        ; line_number = 64
        ;  or_if rc4_in _trisc 16
        ; line_number = 65
        ;  or_if rc4_out _trisc 0
        ; line_number = 66
        ; pin rc3_in, rc3_out, r3_unused
        ; line_number = 67
        ; pin_bindings pdip=7, soic=7, tssop=7
        ; line_number = 68
        ;  bind_to _portc@3
        ; line_number = 69
        ;  or_if rc3_in _trisc 8
        ; line_number = 70
        ;  or_if rc3_out _trisc 0
        ; line_number = 71
        ; pin rc2_in, rc2_out, rc2_unused
        ; line_number = 72
        ; pin_bindings pdip=8, soic=8, tssop=8
        ; line_number = 73
        ;  bind_to _portc@2
        ; line_number = 74
        ;  or_if rc2_in _trisc 4
        ; line_number = 75
        ;  or_if rc2_out _trisc 0
        ; line_number = 76
        ; pin rc1_in, rc1_out, rc1_unused
        ; line_number = 77
        ; pin_bindings pdip=9, soic=9, tssop=9
        ; line_number = 78
        ;  bind_to _portc@1
        ; line_number = 79
        ;  or_if rc1_in _trisc 2
        ; line_number = 80
        ;  or_if rc1_out _trisc 0
        ; line_number = 81
        ; pin rc0_in, rc0_out, rc0_unused
        ; line_number = 82
        ; pin_bindings pdip=10, soic=10, tssop=10
        ; line_number = 83
        ;  bind_to _portc@0
        ; line_number = 84
        ;  or_if rc0_in _trisc 1
        ; line_number = 85
        ;  or_if rc0_out _trisc 0
        ; line_number = 86
        ; pin ra2_in, ra2_out, cout, t0cki, int, ra2_unused
        ; line_number = 87
        ; pin_bindings pdip=11, soic=11, tssop=11
        ; line_number = 88
        ;  bind_to _porta@2
        ; line_number = 89
        ;  or_if ra2_in _trisa 4
        ; line_number = 90
        ;  or_if ra2_out _trisa 0
        ; line_number = 91
        ; pin ra1_in, ra1_out, cin_minus, vref, icspclk, ra1_unused
        ; line_number = 92
        ; pin_bindings pdip=12, soic=12, tssop=12
        ; line_number = 93
        ;  bind_to _porta@1
        ; line_number = 94
        ;  or_if ra1_in _trisa 2
        ; line_number = 95
        ;  or_if ra1_out _trisa 0
        ; line_number = 96
        ; pin ra0_in, ra0_out, cin_plus, icspdat, ra0_unused
        ; line_number = 97
        ; pin_bindings pdip=13, soic=13, tssop=13
        ; line_number = 98
        ;  bind_to _porta@0
        ; line_number = 99
        ;  or_if ra0_in _trisa 1
        ; line_number = 100
        ;  or_if ra0_out _trisa 0
        ; line_number = 101
        ; pin vss, ground
        ; line_number = 102
        ; pin_bindings pdip=14, soic=14, tssop=14


        ; line_number = 107
        ; library _pic16f630_676 entered
        ; # Copyright (c) 2004 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # Shared register definitions for the PIC16F630 and PIC16F676.

        ; buffer = '_pic16f630_676'
        ; line_number = 7
        ; register _indf = 
_indf equ 0

        ; line_number = 9
        ; register _tmr0 = 
_tmr0 equ 1

        ; line_number = 11
        ; register _pcl = 
_pcl equ 2

        ; line_number = 13
        ; register _status = 
_status equ 3
        ; line_number = 14
        ; bind _rp0 = _status@5
_rp0___byte equ _status
_rp0___bit equ 5
        ; line_number = 15
        ; bind _to = _status@4
_to___byte equ _status
_to___bit equ 4
        ; line_number = 16
        ; bind _pd = _status@3
_pd___byte equ _status
_pd___bit equ 3
        ; line_number = 17
        ; bind _z = _status@2
_z___byte equ _status
_z___bit equ 2
        ; line_number = 18
        ; bind _dc = _status@1
_dc___byte equ _status
_dc___bit equ 1
        ; line_number = 19
        ; bind _c = _status@0
_c___byte equ _status
_c___bit equ 0

        ; line_number = 21
        ; register _fsr = 
_fsr equ 4

        ; line_number = 23
        ; register _porta = 
_porta equ 5
        ; line_number = 24
        ; register _ra = 
_ra equ 5
        ; line_number = 25
        ; bind _ra5 = _porta@5
_ra5___byte equ _porta
_ra5___bit equ 5
        ; line_number = 26
        ; bind _ra4 = _porta@4
_ra4___byte equ _porta
_ra4___bit equ 4
        ; line_number = 27
        ; bind _ra3 = _porta@3
_ra3___byte equ _porta
_ra3___bit equ 3
        ; line_number = 28
        ; bind _ra2 = _porta@2
_ra2___byte equ _porta
_ra2___bit equ 2
        ; line_number = 29
        ; bind _ra1 = _porta@1
_ra1___byte equ _porta
_ra1___bit equ 1
        ; line_number = 30
        ; bind _ra0 = _porta@0
_ra0___byte equ _porta
_ra0___bit equ 0

        ; line_number = 32
        ; register _portc = 
_portc equ 7
        ; line_number = 33
        ; register _rc = 
_rc equ 7
        ; line_number = 34
        ; bind _rc5 = _portc@5
_rc5___byte equ _portc
_rc5___bit equ 5
        ; line_number = 35
        ; bind _rc4 = _portc@4
_rc4___byte equ _portc
_rc4___bit equ 4
        ; line_number = 36
        ; bind _rc3 = _portc@3
_rc3___byte equ _portc
_rc3___bit equ 3
        ; line_number = 37
        ; bind _rc2 = _portc@2
_rc2___byte equ _portc
_rc2___bit equ 2
        ; line_number = 38
        ; bind _rc1 = _portc@1
_rc1___byte equ _portc
_rc1___bit equ 1
        ; line_number = 39
        ; bind _rc0 = _portc@0
_rc0___byte equ _portc
_rc0___bit equ 0

        ; line_number = 41
        ; register _pclath = 
_pclath equ 10

        ; line_number = 43
        ; register _intcon = 
_intcon equ 11
        ; line_number = 44
        ; bind _gie = _intcon@7
_gie___byte equ _intcon
_gie___bit equ 7
        ; line_number = 45
        ; bind _peie = _intcon@6
_peie___byte equ _intcon
_peie___bit equ 6
        ; line_number = 46
        ; bind _t0ie = _intcon@5
_t0ie___byte equ _intcon
_t0ie___bit equ 5
        ; line_number = 47
        ; bind _inte = _intcon@4
_inte___byte equ _intcon
_inte___bit equ 4
        ; line_number = 48
        ; bind _raie = _intcon@3
_raie___byte equ _intcon
_raie___bit equ 3
        ; line_number = 49
        ; bind _t0if = _intcon@2
_t0if___byte equ _intcon
_t0if___bit equ 2
        ; line_number = 50
        ; bind _intf = _intcon@1
_intf___byte equ _intcon
_intf___bit equ 1
        ; line_number = 51
        ; bind _raif = _intcon@0
_raif___byte equ _intcon
_raif___bit equ 0

        ; line_number = 53
        ; register _pir1 = 
_pir1 equ 12
        ; line_number = 54
        ; bind _eeif = _pir1@7
_eeif___byte equ _pir1
_eeif___bit equ 7
        ; line_number = 55
        ; bind _cmif = _pir1@3
_cmif___byte equ _pir1
_cmif___bit equ 3
        ; line_number = 56
        ; bind _tmr1if = _pir1@0
_tmr1if___byte equ _pir1
_tmr1if___bit equ 0

        ; line_number = 58
        ; register _tmr1l = 
_tmr1l equ 14

        ; line_number = 60
        ; register _tmr1h = 
_tmr1h equ 15

        ; line_number = 62
        ; register _t1con = 
_t1con equ 16
        ; line_number = 63
        ; bind _t1ge = _t1con@6
_t1ge___byte equ _t1con
_t1ge___bit equ 6
        ; line_number = 64
        ; bind _t1ckps1 = _t1con@5
_t1ckps1___byte equ _t1con
_t1ckps1___bit equ 5
        ; line_number = 65
        ; bind _t1ckps0 = _t1con@4
_t1ckps0___byte equ _t1con
_t1ckps0___bit equ 4
        ; line_number = 66
        ; bind _t1oscen = _t1con@3
_t1oscen___byte equ _t1con
_t1oscen___bit equ 3
        ; line_number = 67
        ; bind _t1sync = _t1con@2
_t1sync___byte equ _t1con
_t1sync___bit equ 2
        ; line_number = 68
        ; bind _tmr1cs = _t1con@1
_tmr1cs___byte equ _t1con
_tmr1cs___bit equ 1
        ; line_number = 69
        ; bind _tmr1on = _t1con@0
_tmr1on___byte equ _t1con
_tmr1on___bit equ 0

        ; line_number = 71
        ; register _cmcon = 
_cmcon equ 25
        ; line_number = 72
        ; bind _cout = _cmcon@6
_cout___byte equ _cmcon
_cout___bit equ 6
        ; line_number = 73
        ; bind _cinv = _cmcon@4
_cinv___byte equ _cmcon
_cinv___bit equ 4
        ; line_number = 74
        ; bind _cis = _cmcon@3
_cis___byte equ _cmcon
_cis___bit equ 3
        ; line_number = 75
        ; bind _cm2 = _cmcon@2
_cm2___byte equ _cmcon
_cm2___bit equ 2
        ; line_number = 76
        ; bind _cm1 = _cmcon@1
_cm1___byte equ _cmcon
_cm1___bit equ 1
        ; line_number = 77
        ; bind _cm0 = _cmcon@0
_cm0___byte equ _cmcon
_cm0___bit equ 0

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

        ; line_number = 81
        ; register _option_reg = 
_option_reg equ 128
        ; line_number = 82
        ; bind _rapu = _option_reg@7
_rapu___byte equ _option_reg
_rapu___bit equ 7
        ; line_number = 83
        ; bind _intedg = _option_reg@6
_intedg___byte equ _option_reg
_intedg___bit equ 6
        ; line_number = 84
        ; bind _t0cs = _option_reg@5
_t0cs___byte equ _option_reg
_t0cs___bit equ 5
        ; line_number = 85
        ; bind _t0se = _option_reg@4
_t0se___byte equ _option_reg
_t0se___bit equ 4
        ; line_number = 86
        ; bind _psa = _option_reg@3
_psa___byte equ _option_reg
_psa___bit equ 3
        ; line_number = 87
        ; bind _ps2 = _option_reg@2
_ps2___byte equ _option_reg
_ps2___bit equ 2
        ; line_number = 88
        ; bind _ps1 = _option_reg@1
_ps1___byte equ _option_reg
_ps1___bit equ 1
        ; line_number = 89
        ; bind _ps0 = _option_reg@0
_ps0___byte equ _option_reg
_ps0___bit equ 0

        ; line_number = 91
        ; register _trisa = 
_trisa equ 133
        ; line_number = 92
        ; bind _trisa5 = _trisa@5
_trisa5___byte equ _trisa
_trisa5___bit equ 5
        ; line_number = 93
        ; bind _trisa4 = _trisa@4
_trisa4___byte equ _trisa
_trisa4___bit equ 4
        ; line_number = 94
        ; bind _trisa3 = _trisa@3
_trisa3___byte equ _trisa
_trisa3___bit equ 3
        ; line_number = 95
        ; bind _trisa2 = _trisa@2
_trisa2___byte equ _trisa
_trisa2___bit equ 2
        ; line_number = 96
        ; bind _trisa1 = _trisa@1
_trisa1___byte equ _trisa
_trisa1___bit equ 1
        ; line_number = 97
        ; bind _trisa0 = _trisa@0
_trisa0___byte equ _trisa
_trisa0___bit equ 0

        ; line_number = 99
        ; register _trisc = 
_trisc equ 135
        ; line_number = 100
        ; bind _trisc5 = _trisc@5
_trisc5___byte equ _trisc
_trisc5___bit equ 5
        ; line_number = 101
        ; bind _trisc4 = _trisc@4
_trisc4___byte equ _trisc
_trisc4___bit equ 4
        ; line_number = 102
        ; bind _trisc3 = _trisc@3
_trisc3___byte equ _trisc
_trisc3___bit equ 3
        ; line_number = 103
        ; bind _trisc2 = _trisc@2
_trisc2___byte equ _trisc
_trisc2___bit equ 2
        ; line_number = 104
        ; bind _trisc1 = _trisc@1
_trisc1___byte equ _trisc
_trisc1___bit equ 1
        ; line_number = 105
        ; bind _trisc0 = _trisc@0
_trisc0___byte equ _trisc
_trisc0___bit equ 0

        ; line_number = 107
        ; register _pie1 = 
_pie1 equ 140
        ; line_number = 108
        ; bind _eeie = _pie1@7
_eeie___byte equ _pie1
_eeie___bit equ 7
        ; line_number = 109
        ; bind _adie = _pie1@6
_adie___byte equ _pie1
_adie___bit equ 6
        ; line_number = 110
        ; bind _cmie = _pie1@3
_cmie___byte equ _pie1
_cmie___bit equ 3
        ; line_number = 111
        ; bind _tmr1ie = _pie1@0
_tmr1ie___byte equ _pie1
_tmr1ie___bit equ 0

        ; line_number = 113
        ; register _pcon = 
_pcon equ 142
        ; line_number = 114
        ; bind _por = _pcon@1
_por___byte equ _pcon
_por___bit equ 1
        ; line_number = 115
        ; bind _bor = _pcon@0
_bor___byte equ _pcon
_bor___bit equ 0

        ; line_number = 117
        ; register _osccal = 
_osccal equ 144
        ; line_number = 118
        ; bind _cal5 = _osccal@7
_cal5___byte equ _osccal
_cal5___bit equ 7
        ; line_number = 119
        ; bind _cal4 = _osccal@6
_cal4___byte equ _osccal
_cal4___bit equ 6
        ; line_number = 120
        ; bind _cal3 = _osccal@5
_cal3___byte equ _osccal
_cal3___bit equ 5
        ; line_number = 121
        ; bind _cal2 = _osccal@4
_cal2___byte equ _osccal
_cal2___bit equ 4
        ; line_number = 122
        ; bind _cal1 = _osccal@3
_cal1___byte equ _osccal
_cal1___bit equ 3
        ; line_number = 123
        ; bind _cal0 = _osccal@2
_cal0___byte equ _osccal
_cal0___bit equ 2
        ; line_number = 124
        ; constant _osccal_lsb = 4
_osccal_lsb equ 4

        ; line_number = 126
        ; register _wpua = 
_wpua equ 149
        ; line_number = 127
        ; bind _wpua5 = _wpua@5
_wpua5___byte equ _wpua
_wpua5___bit equ 5
        ; line_number = 128
        ; bind _wpua4 = _wpua@4
_wpua4___byte equ _wpua
_wpua4___bit equ 4
        ; line_number = 129
        ; bind _wpua2 = _wpua@2
_wpua2___byte equ _wpua
_wpua2___bit equ 2
        ; line_number = 130
        ; bind _wpua1 = _wpua@1
_wpua1___byte equ _wpua
_wpua1___bit equ 1
        ; line_number = 131
        ; bind _wpua0 = _wpua@0
_wpua0___byte equ _wpua
_wpua0___bit equ 0

        ; line_number = 133
        ; register _ioca = 
_ioca equ 150
        ; line_number = 134
        ; bind _ioca5 = _ioca@5
_ioca5___byte equ _ioca
_ioca5___bit equ 5
        ; line_number = 135
        ; bind _ioca4 = _ioca@4
_ioca4___byte equ _ioca
_ioca4___bit equ 4
        ; line_number = 136
        ; bind _ioca3 = _ioca@3
_ioca3___byte equ _ioca
_ioca3___bit equ 3
        ; line_number = 137
        ; bind _ioca2 = _ioca@2
_ioca2___byte equ _ioca
_ioca2___bit equ 2
        ; line_number = 138
        ; bind _ioca1 = _ioca@1
_ioca1___byte equ _ioca
_ioca1___bit equ 1
        ; line_number = 139
        ; bind _ioca0 = _ioca@0
_ioca0___byte equ _ioca
_ioca0___bit equ 0

        ; line_number = 141
        ; register _vrcon = 
_vrcon equ 153
        ; line_number = 142
        ; bind _vren = _vrcon@7
_vren___byte equ _vrcon
_vren___bit equ 7
        ; line_number = 143
        ; bind _vrr = _vrcon@5
_vrr___byte equ _vrcon
_vrr___bit equ 5
        ; line_number = 144
        ; bind _vr3 = _vrcon@3
_vr3___byte equ _vrcon
_vr3___bit equ 3
        ; line_number = 145
        ; bind _vr2 = _vrcon@2
_vr2___byte equ _vrcon
_vr2___bit equ 2
        ; line_number = 146
        ; bind _vr1 = _vrcon@1
_vr1___byte equ _vrcon
_vr1___bit equ 1
        ; line_number = 147
        ; bind _vr0 = _vrcon@0
_vr0___byte equ _vrcon
_vr0___bit equ 0

        ; line_number = 149
        ; register _eedata = 
_eedata equ 154

        ; line_number = 151
        ; register _eeadr = 
_eeadr equ 155

        ; line_number = 153
        ; register _eecon1 = 
_eecon1 equ 156
        ; line_number = 154
        ; bind _wrerr = _eecon1@3
_wrerr___byte equ _eecon1
_wrerr___bit equ 3
        ; line_number = 155
        ; bind _wren = _eecon1@2
_wren___byte equ _eecon1
_wren___bit equ 2
        ; line_number = 156
        ; bind _wr = _eecon1@1
_wr___byte equ _eecon1
_wr___bit equ 1
        ; line_number = 157
        ; bind _rd = _eecon1@0
_rd___byte equ _eecon1
_rd___bit equ 0

        ; line_number = 159
        ; register _eecon2 = 
_eecon2 equ 157


        ; buffer = '_pic16f630'
        ; line_number = 107
        ; library _pic16f630_676 exited


        ; buffer = 'dualmotor1amp'
        ; line_number = 23
        ; library _pic16f630 exited
        ; line_number = 24
        ; library clock4mhz entered
        ; # Copyright (c) 2004 by Wayne C. Gramlich
        ; # All rights reserved.

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

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


        ; buffer = 'dualmotor1amp'
        ; line_number = 24
        ; library clock4mhz exited
        ; line_number = 25
        ; library bit_bang entered
        ; # Copyright (c) 2004 by Wayne C. Gramlich
        ; # All rights reserved.

        ; # This library provides bit bang routines for sending and receiving
        ; # serial data at 2400 baud in 8N1 format (1 start bit, 8 data bits,
        ; # No parity bit, 1 stop stop bit.)
        ; #
        ; # This library requires that the pins {serial_in} and {serial_out}
        ; # be defined.  In addition, the variable {instruction_rate} needs
        ; # to be defined.  Lastly, there needs to be a {delay} procedure
        ; # with an "exact_delay delay_instructions" clause in it.  The {delay}
        ; # routine should invoke "watch_dog_reset" so that the watch dog time
        ; # can be set.

        ; # Define some constants that we will be needing:
        ; buffer = 'bit_bang'
        ; line_number = 17
        ; constant baud_rate = 2400
baud_rate equ 2400
        ; line_number = 18
        ; constant instructions_per_bit = instruction_rate / baud_rate
instructions_per_bit equ 416
        ; line_number = 19
        ; constant delays_per_bit = 3
delays_per_bit equ 3
        ; line_number = 20
        ; constant instructions_per_delay = instructions_per_bit / delays_per_bit
instructions_per_delay equ 138
        ; line_number = 21
        ; constant extra_instructions = 5
extra_instructions equ 5
        ; line_number = 22
        ; constant delay_instructions = instructions_per_delay - extra_instructions
delay_instructions equ 133

        ; # The {receiving} bit is sent when data is being received.
        ; # It gets cleared whenever data gets sent.  It is used to
        ; # determine whether additional delay is needed to turn a
        ; # line around for slow interpretted chips like the Basic
        ; # Stamp 2 and the OOPIC.

        ; line_number = 30
        ; global receiving bit
receiving___byte equ shared___globals+63
receiving___bit equ 0
        ; line_number = 31
        ; global waiting bit
waiting___byte equ shared___globals+63
waiting___bit equ 1

        ; Delaying code generation for procedure  byte_get
        ; Delaying code generation for procedure  byte_put

        ; buffer = 'dualmotor1amp'
        ; line_number = 25
        ; library bit_bang exited

        ; line_number = 27
        ; package pdip
        ; line_number = 28
        ; pin 1 = power_supply
        ; line_number = 29
        ;  pin 2 = ra5_unused
        ; line_number = 30
        ;  pin 3 = ra4_out, name = motor1a, mask = motor1a_mask
motor1a___byte equ _porta
motor1a___bit equ 4
motor1a_mask equ 16
        ; line_number = 31
        ;  pin 4 = ra3_unused
        ; line_number = 32
        ;  pin 5 = rc5_unused, name = debug_out
debug_out___byte equ _portc
debug_out___bit equ 5
        ; line_number = 33
        ;  pin 6 = rc4_unused
        ; line_number = 34
        ;  pin 7 = rc3_out, name = motor1e
motor1e___byte equ _portc
motor1e___bit equ 3
        ; line_number = 35
        ;  pin 8 = rc2_out, name = motor0e
motor0e___byte equ _portc
motor0e___bit equ 2
        ; line_number = 36
        ;  pin 9 = rc1_out, name = serial_out
serial_out___byte equ _portc
serial_out___bit equ 1
        ; line_number = 37
        ;  pin 10 = rc0_out, name = serial_in
serial_in___byte equ _portc
serial_in___bit equ 0
        ; line_number = 38
        ;  pin 11 = ra2_out, name = motor1b, mask = motor1b_mask
motor1b___byte equ _porta
motor1b___bit equ 2
motor1b_mask equ 4
        ; line_number = 39
        ;  pin 12 = ra1_out, name = motor0b, mask = motor0b_mask
motor0b___byte equ _porta
motor0b___bit equ 1
motor0b_mask equ 2
        ; line_number = 40
        ;  pin 13 = ra0_out, name = motor0a, mask = motor0a_mask
motor0a___byte equ _porta
motor0a___bit equ 0
motor0a_mask equ 1
        ; line_number = 41
        ;  pin 14 = ground

        ; # Define duty cycle and motor on/off masks:
        ; line_number = 44
        ; global actual_speed0 byte
actual_speed0 equ shared___globals+4
        ; line_number = 45
        ; global actual_speed1 byte
actual_speed1 equ shared___globals+5
        ; line_number = 46
        ; global motor0_off byte
motor0_off equ shared___globals+6
        ; line_number = 47
        ; global motor0_on byte
motor0_on equ shared___globals+7
        ; line_number = 48
        ; global motor1_off byte
motor1_off equ shared___globals+8
        ; line_number = 49
        ; global motor1_on byte
motor1_on equ shared___globals+9

        ; # Ramp variables:
        ; line_number = 52
        ; global desired_speed0 byte
desired_speed0 equ shared___globals+10
        ; line_number = 53
        ; global desired_speed1 byte
desired_speed1 equ shared___globals+11
        ; line_number = 54
        ; global desired_direction0 bit
desired_direction0___byte equ shared___globals+63
desired_direction0___bit equ 2
        ; line_number = 55
        ; global desired_direction1 bit
desired_direction1___byte equ shared___globals+63
desired_direction1___bit equ 3
        ; line_number = 56
        ; global ramp0 byte
ramp0 equ shared___globals+12
        ; line_number = 57
        ; global ramp1 byte
ramp1 equ shared___globals+13
        ; line_number = 58
        ; global ramp0_delay byte
ramp0_delay equ shared___globals+14
        ; line_number = 59
        ; global ramp1_delay byte
ramp1_delay equ shared___globals+15
        ; line_number = 60
        ; global ramp0_offset byte
ramp0_offset equ shared___globals+16
        ; line_number = 61
        ; global ramp1_offset byte
ramp1_offset equ shared___globals+17

        ; # Fail safe variables:
        ; line_number = 64
        ; global fail_safe byte
fail_safe equ shared___globals+18
        ; line_number = 65
        ; global fail_safe_errors byte
fail_safe_errors equ shared___globals+19
        ; line_number = 66
        ; global fail_safe_high_counter byte
fail_safe_high_counter equ shared___globals+20
        ; line_number = 67
        ; global fail_safe_low_counter byte
fail_safe_low_counter equ shared___globals+21

        ; # Second command stuff for ramped direction change:
        ; line_number = 70
        ; global second_motor0_command bit
second_motor0_command___byte equ shared___globals+63
second_motor0_command___bit equ 4
        ; line_number = 71
        ; global second_motor1_command bit
second_motor1_command___byte equ shared___globals+63
second_motor1_command___bit equ 5
        ; line_number = 72
        ; global second_desired_speed0 byte
second_desired_speed0 equ shared___globals+22
        ; line_number = 73
        ; global second_desired_speed1 byte
second_desired_speed1 equ shared___globals+23
        ; line_number = 74
        ; global second_ramp0_offset byte
second_ramp0_offset equ shared___globals+24
        ; line_number = 75
        ; global second_ramp1_offset byte
second_ramp1_offset equ shared___globals+25
        ; line_number = 76
        ; global second_motor0_on byte
second_motor0_on equ shared___globals+26
        ; line_number = 77
        ; global second_motor1_on byte
second_motor1_on equ shared___globals+27
        ; line_number = 78
        ; global second_motor0_off byte
second_motor0_off equ shared___globals+28
        ; line_number = 79
        ; global second_motor1_off byte
second_motor1_off equ shared___globals+29

        ; line_number = 81
        ; global motor0 byte
motor0 equ shared___globals+30
        ; line_number = 82
        ; global motor1 byte
motor1 equ shared___globals+31

        ; # Mode (pulsed vs. continuous) bits:
        ; line_number = 85
        ; global motor0_mode bit
motor0_mode___byte equ shared___globals+63
motor0_mode___bit equ 6
        ; line_number = 86
        ; global motor1_mode bit
motor1_mode___byte equ shared___globals+63
motor1_mode___bit equ 7
        ; line_number = 87
        ; global motor0_direction bit
motor0_direction___byte equ shared___globals+62
motor0_direction___bit equ 0
        ; line_number = 88
        ; global motor1_direction bit
motor1_direction___byte equ shared___globals+62
motor1_direction___bit equ 1

        ; # Shared command registers and option:
        ; line_number = 91
        ; global glitch byte
glitch equ shared___globals+32
        ; line_number = 92
        ; global id_index byte
id_index equ shared___globals+33
        ; line_number = 93
        ; global spare byte
spare equ shared___globals+34

        ; line_number = 95
        ; global command_previous byte
command_previous equ shared___globals+35
        ; line_number = 96
        ; global command_last byte
command_last equ shared___globals+36
        ; line_number = 97
        ; global sent_previous byte
sent_previous equ shared___globals+37
        ; line_number = 98
        ; global sent_last byte
sent_last equ shared___globals+38

        ; line_number = 100
        ; procedure main
main:
        ; Need to calibrate the oscillator
        call    1023
        bsf     __rp0___byte, __rp0___bit
        movwf   _osccal
        ; Initialize some registers
        clrf    _trisa
        clrf    _trisc
        ; arguments_none
        ; line_number = 102
        ;  returns_nothing

        ; line_number = 104
        ;  local command byte
main__command equ shared___globals+39
        ; line_number = 105
        ;  local temp byte
main__temp equ shared___globals+40

        ; before procedure statements delay=non-uniform, bit states=(data:X0=>X1 code:XX=>XX)
        ; line_number = 107
        ;  call reset()
        bcf     __rp0___byte, __rp0___bit
        call    reset

        ; # Loop waiting for commands:
        ; line_number = 110
        ;  loop_forever start
main__1:
        ; # Get a command byte:
        ; line_number = 112
        ;  command := byte_get()
        call    byte_get
        movwf   main__command

        ; # Dispatch on command:
        ; line_number = 115
        ;  switch command >> 6 start
        movlw   main__97>>8
        movwf   __pclath
main__98 equ shared___globals+43
        swapf   main__command,w
        movwf   main__98
        rrf     main__98,f
        rrf     main__98,w
        andlw   3
        addlw   main__97
        movwf   __pcl
        ; page_group 4
main__97:
        goto    main__93
        goto    main__94
        goto    main__95
        goto    main__96
        ; line_number = 116
        ; case 0
main__93:
        ; # Set Quick (Command = 00hh hhdm):
        ; line_number = 118
        ;  temp := ((command << 2) & 0xf0) | (command >> 2)
main__2 equ shared___globals+42
main__3 equ shared___globals+43
        rlf     main__command,w
        movwf   main__3
        rlf     main__3,w
        andlw   240
        movwf   main__2
main__4 equ shared___globals+43
        rrf     main__command,w
        movwf   main__4
        rrf     main__4,w
        andlw   63
        iorwf   main__2,w
        movwf   main__temp
        ; line_number = 119
        ;  if command@0 start
main__select__7___byte equ main__command
main__select__7___bit equ 0
        ; # Motor :
        ; line_number = 121
        ;  desired_speed1 := temp
        movf    main__temp,w
        ; line_number = 124
        ; desired_speed0 := temp
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=4 false_code_size=4
        btfss   main__select__7___byte, main__select__7___bit
        goto    main__8
        movwf   desired_speed1
        ; line_number = 122
        ;  desired_direction1 := command@1
        bcf     desired_direction1___byte, desired_direction1___bit
main__select__6___byte equ main__command
main__select__6___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__6___byte, main__select__6___bit
        bsf     desired_direction1___byte, desired_direction1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__6 (data:X0=>X0 code:XX=>XX)
        goto    main__9
main__8:
        movwf   desired_speed0
        ; line_number = 125
        ;  desired_direction0 := command@1
        bcf     desired_direction0___byte, desired_direction0___bit
main__select__5___byte equ main__command
main__select__5___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__5___byte, main__select__5___bit
        bsf     desired_direction0___byte, desired_direction0___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__5 (data:X0=>X0 code:XX=>XX)
main__9:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__7 (data:X0=>X0 code:XX=>XX)
        ; line_number = 119
        ;  if command@0 done
        ; line_number = 126
        ; call set_up()
        call    set_up
        goto    main__99
        ; line_number = 127
        ; case 1
main__94:
        ; # Set Low (Command = 01ll lldm):
        ; line_number = 129
        ;  temp := (command >> 2) & 0xf
main__10 equ shared___globals+43
        rrf     main__command,w
        movwf   main__10
        rrf     main__10,w
        andlw   15
        movwf   main__temp
        ; line_number = 130
        ;  if command@0 start
main__select__13___byte equ main__command
main__select__13___bit equ 0
        ; # Motor 1:
        ; line_number = 132
        ;  desired_speed1 := desired_speed1 & 0xf0 | temp
        movlw   240
        ; # Motor 0:
        ; line_number = 136
        ;  desired_speed0 := desired_speed0 & 0xf0 | temp
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=6 false_code_size=6
        btfss   main__select__13___byte, main__select__13___bit
        goto    main__14
        andwf   desired_speed1,w
        iorwf   main__temp,w
        movwf   desired_speed1
        ; line_number = 133
        ;  desired_direction1 := command@1
        bcf     desired_direction1___byte, desired_direction1___bit
main__select__12___byte equ main__command
main__select__12___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__12___byte, main__select__12___bit
        bsf     desired_direction1___byte, desired_direction1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__12 (data:X0=>X0 code:XX=>XX)
        goto    main__15
main__14:
        andwf   desired_speed0,w
        iorwf   main__temp,w
        movwf   desired_speed0
        ; line_number = 137
        ;  desired_direction0 := command@1
        bcf     desired_direction0___byte, desired_direction0___bit
main__select__11___byte equ main__command
main__select__11___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__11___byte, main__select__11___bit
        bsf     desired_direction0___byte, desired_direction0___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__11 (data:X0=>X0 code:XX=>XX)
main__15:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__13 (data:X0=>X0 code:XX=>XX)
        ; line_number = 130
        ;  if command@0 done
        ; line_number = 138
        ; call set_up()
        call    set_up
        goto    main__99
        ; line_number = 139
        ; case 2
main__95:
        ; # Command = 10xx xxxx:
        ; line_number = 141
        ;  switch (command >> 3) & 7 start
        movlw   main__75>>8
        movwf   __pclath
main__76 equ shared___globals+43
        rrf     main__command,w
        movwf   main__76
        rrf     main__76,f
        rrf     main__76,w
        andlw   7
        addlw   main__75
        movwf   __pcl
        ; page_group 8
main__75:
        goto    main__68
        goto    main__69
        goto    main__70
        goto    main__71
        goto    main__72
        goto    main__73
        goto    main__74
        goto    main__74
        ; line_number = 142
        ; case 0
main__68:
        ; # Command = 1000 0xxx:
        ; line_number = 144
        ;  switch command & 7 start
        movlw   main__26>>8
        movwf   __pclath
        movlw   7
        andwf   main__command,w
        addlw   main__26
        movwf   __pcl
        ; page_group 8
main__26:
        goto    main__22
        goto    main__22
        goto    main__23
        goto    main__24
        goto    main__25
        goto    main__25
        goto    main__25
        goto    main__25
        ; line_number = 145
        ; case 0, 1
main__22:
        ; # Set Ramp (Command = 1000 000m):
        ; line_number = 147
        ;  temp := byte_get()
        call    byte_get
        movwf   main__temp
        ; line_number = 148
        ;  if command@0 start
main__select__16___byte equ main__command
main__select__16___bit equ 0
        ; line_number = 149
        ; ramp1 := temp
        movf    main__temp,w
        ; line_number = 151
        ; ramp0 := temp
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   main__select__16___byte, main__select__16___bit
        movwf   ramp1
        btfss   main__select__16___byte, main__select__16___bit
        movwf   ramp0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__16 (data:X0=>X0 code:XX=>XX)
        ; line_number = 148
        ;  if command@0 done
        ; line_number = 152
        ; call set_up()
        call    set_up
        goto    main__27
        ; line_number = 153
        ; case 2
main__23:
        ; # Set Failsafe (Command = 1000 0010):
        ; line_number = 155
        ;  fail_safe := byte_get()
        call    byte_get
        movwf   fail_safe
        ; line_number = 156
        ;  fail_safe_high_counter := fail_safe
        movf    fail_safe,w
        movwf   fail_safe_high_counter
        ; line_number = 157
        ;  fail_safe_low_counter := 0
        movlw   0
        movwf   fail_safe_low_counter
        goto    main__27
        ; line_number = 158
        ; case 3
main__24:
        ; # Reset Failsafe (Command = 1000 0011):
        ; line_number = 160
        ;  fail_safe_high_counter := fail_safe
        movf    fail_safe,w
        movwf   fail_safe_high_counter
        ; line_number = 161
        ;  fail_safe_low_counter := 0
        movlw   0
        movwf   fail_safe_low_counter
        goto    main__27
        ; line_number = 162
        ; case 4, 5, 6, 7
main__25:
        ; # Set Speed (Command = 1000 01dm):
        ; line_number = 164
        ;  temp := byte_get()
        call    byte_get
        movwf   main__temp
        ; line_number = 165
        ;  if command@0 start
main__select__19___byte equ main__command
main__select__19___bit equ 0
        ; # Motor 1:
        ; line_number = 167
        ;  desired_speed1 := temp
        movf    main__temp,w
        ; # Motor 0:
        ; line_number = 171
        ;  desired_speed0 := temp
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=4 false_code_size=4
        btfss   main__select__19___byte, main__select__19___bit
        goto    main__20
        movwf   desired_speed1
        ; line_number = 168
        ;  desired_direction1 := command@1
        bcf     desired_direction1___byte, desired_direction1___bit
main__select__18___byte equ main__command
main__select__18___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__18___byte, main__select__18___bit
        bsf     desired_direction1___byte, desired_direction1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__18 (data:X0=>X0 code:XX=>XX)
        goto    main__21
main__20:
        movwf   desired_speed0
        ; line_number = 172
        ;  desired_direction0 := command@1
        bcf     desired_direction0___byte, desired_direction0___bit
main__select__17___byte equ main__command
main__select__17___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__17___byte, main__select__17___bit
        bsf     desired_direction0___byte, desired_direction0___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__17 (data:X0=>X0 code:XX=>XX)
main__21:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__19 (data:X0=>X0 code:XX=>XX)
        ; line_number = 165
        ;  if command@0 done
        ; line_number = 173
        ; call set_up()
        call    set_up
main__27:
        ; switch end:(data:X0=>X0 code:XX=>XX)
        ; line_number = 144
        ;  switch command & 7 done
        goto    main__77
        ; line_number = 174
        ; case 1
main__69:
        ; # Command = 1000 1xxx:
        ; line_number = 176
        ;  if command@2 start
main__select__38___byte equ main__command
main__select__38___bit equ 2
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=9 false_code_size=9
        btfss   main__select__38___byte, main__select__38___bit
        goto    main__39
        ; # Set direction (Command = 1000 11dm):
        ; line_number = 178
        ;  if command@0 start
main__select__35___byte equ main__command
main__select__35___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=3 false_code_size=3
        btfss   main__select__35___byte, main__select__35___bit
        goto    main__36
        ; # Motor 1:
        ; line_number = 180
        ;  desired_direction1 := command@1
        bcf     desired_direction1___byte, desired_direction1___bit
main__select__34___byte equ main__command
main__select__34___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__34___byte, main__select__34___bit
        bsf     desired_direction1___byte, desired_direction1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__34 (data:X0=>X0 code:XX=>XX)
        goto    main__37
main__36:
        ; # Motor 0:
        ; line_number = 183
        ;  desired_direction0 := command@1
        bcf     desired_direction0___byte, desired_direction0___bit
main__select__33___byte equ main__command
main__select__33___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__33___byte, main__select__33___bit
        bsf     desired_direction0___byte, desired_direction0___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__33 (data:X0=>X0 code:XX=>XX)
main__37:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__35 (data:X0=>X0 code:XX=>XX)
        ; line_number = 178
        ;  if command@0 done
        goto    main__40
main__39:
        ; # Set mode (Command = 1000 10xm):
        ; line_number = 186
        ;  if command@0 start
main__select__30___byte equ main__command
main__select__30___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=3 false_code_size=3
        btfss   main__select__30___byte, main__select__30___bit
        goto    main__31
        ; # Motor 1:
        ; line_number = 188
        ;  motor1_mode := command@1
        bcf     motor1_mode___byte, motor1_mode___bit
main__select__29___byte equ main__command
main__select__29___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__29___byte, main__select__29___bit
        bsf     motor1_mode___byte, motor1_mode___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__29 (data:X0=>X0 code:XX=>XX)
        goto    main__32
main__31:
        ; # Motor 0:
        ; line_number = 191
        ;  motor0_mode := command@1
        bcf     motor0_mode___byte, motor0_mode___bit
main__select__28___byte equ main__command
main__select__28___bit equ 1
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   main__select__28___byte, main__select__28___bit
        bsf     motor0_mode___byte, motor0_mode___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__28 (data:X0=>X0 code:XX=>XX)
main__32:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__30 (data:X0=>X0 code:XX=>XX)
        ; line_number = 186
        ;  if command@0 done
main__40:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__38 (data:X0=>X0 code:XX=>XX)
        ; line_number = 176
        ;  if command@2 done
        ; line_number = 192
        ; call set_up()
        call    set_up
        goto    main__77
        ; line_number = 193
        ; case 2
main__70:
        ; # Set Prescaler (Command = 1001 0ppp):
        ; line_number = 195
        ;  _option_reg := command & 7
        movlw   7
        andwf   main__command,w
        bsf     __rp0___byte, __rp0___bit
        movwf   _option_reg
        ; line_number = 196
        ;  _rapu := 1
        bsf     _rapu___byte, _rapu___bit
        goto    main__77
        ; line_number = 197
        ; case 3
main__71:
        ; # Command = 1001 1xxx:
        ; line_number = 199
        ;  switch command & 7 start
        movlw   main__55>>8
        movwf   __pclath
        movlw   7
        andwf   main__command,w
        addlw   main__55
        movwf   __pcl
        ; page_group 8
main__55:
        goto    main__50
        goto    main__51
        goto    main__52
        goto    main__52
        goto    main__53
        goto    main__53
        goto    main__54
        goto    main__54
        ; line_number = 200
        ; case 0
main__50:
        ; # Read Failsafe (Command = 1001 1000):
        ; line_number = 202
        ;  call byte_put(fail_safe)
        movf    fail_safe,w
        call    byte_put
        goto    main__56
        ; line_number = 203
        ; case 1
main__51:
        ; This case body wants this bit set
        bsf     __rp0___byte, __rp0___bit
        ; # Read Prescaler (Command = 1001 1001):
        ; line_number = 205
        ;  call byte_put(_option_reg & 7)
        movlw   7
        andwf   _option_reg,w
        bcf     __rp0___byte, __rp0___bit
        call    byte_put
        goto    main__56
        ; line_number = 206
        ; case 2, 3
main__52:
        ; # Read Speed (Command = 1001 101m):
        ; line_number = 208
        ;  if command@0 start
main__select__41___byte equ main__command
main__select__41___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   main__select__41___byte, main__select__41___bit
        ; line_number = 209
        ; call byte_put(actual_speed1)
        movf    actual_speed1,w
        btfss   main__select__41___byte, main__select__41___bit
        ; line_number = 211
        ; call byte_put(actual_speed0)
        movf    actual_speed0,w
        ; code.delay=4294967295 back_code.delay=4294967295
        call    byte_put
        ; <=bit_code_emit@symbol; sym=main__select__41 (data:X0=>X0 code:XX=>XX)
        ; line_number = 208
        ;  if command@0 done
        goto    main__56
        ; line_number = 212
        ; case 4, 5
main__53:
        ; # Read Mode/Direction (Command = 1001 110m):
        ; line_number = 214
        ;  temp := 0
        movlw   0
        movwf   main__temp
        ; line_number = 215
        ;  if command@0 start
main__select__46___byte equ main__command
main__select__46___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=4 false_code_size=4
        btfss   main__select__46___byte, main__select__46___bit
        goto    main__47
        ; # Motor 1:
        ; line_number = 217
        ;  if motor1_direction start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor1_direction___byte, motor1_direction___bit
        ; line_number = 218
        ; temp@1 := 1
main__select__44___byte equ main__temp
main__select__44___bit equ 1
        bsf     main__select__44___byte, main__select__44___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor1_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 217
        ;  if motor1_direction done
        ; line_number = 219
        ; if motor1_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor1_mode___byte, motor1_mode___bit
        ; line_number = 220
        ; temp@0 := 1
main__select__45___byte equ main__temp
main__select__45___bit equ 0
        bsf     main__select__45___byte, main__select__45___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor1_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 219
        ; if motor1_mode done
        goto    main__48
main__47:
        ; # Motor 0:
        ; line_number = 223
        ;  if motor0_direction start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor0_direction___byte, motor0_direction___bit
        ; line_number = 224
        ; temp@1 := 1
main__select__42___byte equ main__temp
main__select__42___bit equ 1
        bsf     main__select__42___byte, main__select__42___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor0_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 223
        ;  if motor0_direction done
        ; line_number = 225
        ; if motor0_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor0_mode___byte, motor0_mode___bit
        ; line_number = 226
        ; temp@0 := 1
main__select__43___byte equ main__temp
main__select__43___bit equ 0
        bsf     main__select__43___byte, main__select__43___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor0_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 225
        ; if motor0_mode done
main__48:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=main__select__46 (data:X0=>X0 code:XX=>XX)
        ; line_number = 215
        ;  if command@0 done
        ; line_number = 227
        ; call byte_put(temp)
        movf    main__temp,w
        call    byte_put
        goto    main__56
        ; line_number = 228
        ; case 6, 7
main__54:
        ; # Read Ramp (Command = 1001 101m):
        ; line_number = 230
        ;  if command@0 start
main__select__49___byte equ main__command
main__select__49___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   main__select__49___byte, main__select__49___bit
        ; line_number = 231
        ; temp := ramp1
        movf    ramp1,w
        btfss   main__select__49___byte, main__select__49___bit
        ; line_number = 233
        ; temp := ramp0
        movf    ramp0,w
        ; code.delay=4294967295 back_code.delay=4294967295
        movwf   main__temp
        ; <=bit_code_emit@symbol; sym=main__select__49 (data:X0=>X0 code:XX=>XX)
        ; line_number = 230
        ;  if command@0 done
        ; line_number = 234
        ; call byte_put(temp)
        movf    main__temp,w
        call    byte_put
main__56:
        ; switch end:(data:X0=>X0 code:XX=>XX)
        ; line_number = 199
        ;  switch command & 7 done
        goto    main__77
        ; line_number = 235
        ; case 4
main__72:
        ; # Command = 0110 0xxx:
        ; line_number = 237
        ;  switch command & 7 start
        movlw   main__65>>8
        movwf   __pclath
        movlw   7
        andwf   main__command,w
        addlw   main__65
        movwf   __pcl
        ; page_group 8
main__65:
        goto    main__57
        goto    main__58
        goto    main__59
        goto    main__60
        goto    main__61
        goto    main__62
        goto    main__63
        goto    main__64
        ; line_number = 238
        ; case 0
main__57:
        ; # Read Failsafe Errors (Command = 1010 0000):
        ; line_number = 240
        ;  call byte_put(fail_safe_errors)
        movf    fail_safe_errors,w
        call    byte_put
        ; line_number = 241
        ;  fail_safe_errors := 0
        movlw   0
        movwf   fail_safe_errors
        goto    main__66
        ; line_number = 242
        ; case 1
main__58:
        ; # Read Failsafe Counter (Command = 1010 0001):
        ; line_number = 244
        ;  call byte_put(fail_safe_high_counter)
        movf    fail_safe_high_counter,w
        call    byte_put
        goto    main__66
        ; line_number = 245
        ; case 2
main__59:
        ; # Read Actual Speed 0(Command = 1010 0010):
        ; line_number = 247
        ;  call byte_put(actual_speed0)
        movf    actual_speed0,w
        call    byte_put
        goto    main__66
        ; line_number = 248
        ; case 3
main__60:
        ; # Read Actual Speed 1 (Command = 1010 0011):
        ; line_number = 250
        ;  call byte_put(actual_speed1)
        movf    actual_speed1,w
        call    byte_put
        goto    main__66
        ; line_number = 251
        ; case 4
main__61:
        ; # Set Motor 0 off (Command = 1010 0100):
        ; line_number = 253
        ;  motor0e := 0
        bcf     motor0e___byte, motor0e___bit
        goto    main__66
        ; line_number = 254
        ; case 5
main__62:
        ; # Set Motor 0 on (Command = 1010 0101):
        ; line_number = 256
        ;  motor0e := 1
        bsf     motor0e___byte, motor0e___bit
        goto    main__66
        ; line_number = 257
        ; case 6
main__63:
        ; # Set Motor 1 off (Command = 1010 0110):
        ; line_number = 259
        ;  motor1e := 0
        bcf     motor1e___byte, motor1e___bit
        goto    main__66
        ; line_number = 260
        ; case 7
main__64:
        ; # Set Motor 1 on (Command = 1010 0111):
        ; line_number = 262
        ;  motor1e := 1
        bsf     motor1e___byte, motor1e___bit
main__66:
        ; switch end:(data:X0=>X0 code:XX=>XX)
        ; line_number = 237
        ;  switch command & 7 done
        goto    main__77
        ; line_number = 263
        ; case 5
main__73:
        ; line_number = 264
        ; if command & 3 = 0 start
        ; Left minus Right
        movlw   3
        andwf   main__command,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=3 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   __z___byte, __z___bit
        goto    main__67
        ; # FIXME: Code generator chokes on single call instruction
        ; # in the then clause.  Add 'ramp0 := 0' to work around!!!
        ; line_number = 267
        ;  ramp0 := 0
        movlw   0
        movwf   ramp0
        ; line_number = 268
        ;  call reset()
        call    reset
        ; Recombine size1 = 0 || size2 = 0
main__67:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; line_number = 264
        ; if command & 3 = 0 done
        goto    main__77
        ; line_number = 269
        ; case 6, 7
main__74:
        ; line_number = 270
        ; do_nothing
main__77:
        ; switch end:(data:X0=>X? code:XX=>XX)
        ; line_number = 141
        ;  switch (command >> 3) & 7 done
        goto    main__99
        ; line_number = 271
        ; case 3
main__96:
        ; # Command = 11xx xxxx:
        ; line_number = 273
        ;  switch (command >> 3) & 7 start
        movlw   main__90>>8
        movwf   __pclath
main__91 equ shared___globals+43
        rrf     main__command,w
        movwf   main__91
        rrf     main__91,f
        rrf     main__91,w
        andlw   7
        addlw   main__90
        movwf   __pcl
        ; page_group 8
main__90:
        goto    main__92
        goto    main__92
        goto    main__92
        goto    main__92
        goto    main__92
        goto    main__92
        goto    main__92
        goto    main__89
        ; line_number = 274
        ; case 7
main__89:
        ; # Shared commands (Command = 1111 1ccc):
        ; line_number = 276
        ;  switch command & 7 start
        movlw   main__87>>8
        movwf   __pclath
        movlw   7
        andwf   main__command,w
        addlw   main__87
        movwf   __pcl
        ; page_group 8
main__87:
        goto    main__79
        goto    main__80
        goto    main__81
        goto    main__82
        goto    main__83
        goto    main__84
        goto    main__85
        goto    main__86
        ; line_number = 277
        ; case 0
main__79:
        ; This case body wants this bit set
        bsf     __rp0___byte, __rp0___bit
        ; # Clock Decrement (Command = 1111 1000):
        ; line_number = 279
        ;  _osccal := _osccal - _osccal_lsb
        movlw   252
        addwf   _osccal,f
        goto    main__88
        ; line_number = 280
        ; case 1
main__80:
        ; This case body wants this bit set
        bsf     __rp0___byte, __rp0___bit
        ; # Clock Increment (Command = 1111 1001):
        ; line_number = 282
        ;  _osccal := _osccal + _osccal_lsb
        movlw   4
        addwf   _osccal,f
        goto    main__88
        ; line_number = 283
        ; case 2
main__81:
        ; This case body wants this bit set
        bsf     __rp0___byte, __rp0___bit
        ; # Clock Read (Command = 1111 1010):
        ; line_number = 285
        ;  call byte_put(_osccal)
        movf    _osccal,w
        bcf     __rp0___byte, __rp0___bit
        call    byte_put
        goto    main__88
        ; line_number = 286
        ; case 3
main__82:
        ; # Clock Pulse (Command = 1111 1011):
        ; line_number = 288
        ;  call byte_put(0)
        movlw   0
        call    byte_put
        goto    main__88
        ; line_number = 289
        ; case 4
main__83:
        ; # ID Next (Command = 1111 1100):
        ; line_number = 291
        ;  temp := 0
        movlw   0
        movwf   main__temp
        ; line_number = 292
        ;  if id_index < id.size start
        movlw   52
        subwf   id_index,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true.size=0 && false.size>1
        ; bit_code_emit_helper1: body_code.size=4 true_test=false body_code.delay=0 (non-uniform delay)
        btfsc   __c___byte, __c___bit
        goto    main__78
        ; line_number = 293
        ; temp := id[id_index]
        movf    id_index,w
        call    id
        movwf   main__temp
        ; line_number = 294
        ;  id_index := id_index + 1
        incf    id_index,f
main__78:
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; line_number = 292
        ;  if id_index < id.size done
        ; line_number = 295
        ; call byte_put(temp)
        movf    main__temp,w
        call    byte_put
        goto    main__88
        ; line_number = 296
        ; case 5
main__84:
        ; # ID Reset (Command = 1111 1101):
        ; line_number = 298
        ;  id_index := 0
        movlw   0
        movwf   id_index
        goto    main__88
        ; line_number = 299
        ; case 6
main__85:
        ; # Glitch Read (Command = 1111 1110):
        ; line_number = 301
        ;  call byte_put(glitch)
        movf    glitch,w
        call    byte_put
        ; line_number = 302
        ;  glitch := 0
        movlw   0
        movwf   glitch
        goto    main__88
        ; line_number = 303
        ; case 7
main__86:
        ; # Glitch (Command = 1111 1111):
        ; line_number = 305
        ;  if glitch != 0xff start
        ; Left minus Right
        incf    glitch,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size=0 && false_code.size=1
        btfss   __z___byte, __z___bit
        ; line_number = 306
        ; glitch := glitch + 1
        incf    glitch,f


        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; line_number = 305
        ;  if glitch != 0xff done
main__88:
        ; switch end:(data:X0=>X? code:XX=>XX)
        ; line_number = 276
        ;  switch command & 7 done
main__92:
        ; switch end:(data:X0=>X? code:XX=>XX)
        ; line_number = 273
        ;  switch (command >> 3) & 7 done
main__99:
        ; switch end:(data:X0=>X? code:XX=>XX)
        ; line_number = 115
        ;  switch command >> 6 done
        ; line_number = 110
        ;  loop_forever wrap-up
        ; Need to adjust code banks to match front of loop
        bcf     __rp0___byte, __rp0___bit
        goto    main__1
        ; line_number = 110
        ;  loop_forever done
        ; delay after procedure statements=non-uniform




        ; line_number = 309
        ; procedure set_up
set_up:
        ; arguments_none
        ; line_number = 311
        ;  returns_nothing

        ; # This procedure will arrange for the speed and direction of
        ; # each motor to be set to desired_speed0/1 and desired_direction0/1.
        ; # If ramp0/1 is 0, the speed and direction is changed immediately.
        ; # If ramp0/1 is non-zero, the speed is changed gradually.

        ; line_number = 318
        ;  local temporary byte
set_up__temporary equ shared___globals+41

        ; # Reset failsafe:
        ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
        ; line_number = 321
        ;  fail_safe_low_counter := 0
        movlw   0
        movwf   fail_safe_low_counter
        ; line_number = 322
        ;  fail_safe_high_counter := fail_safe
        movf    fail_safe,w
        movwf   fail_safe_high_counter

        ; # Mode Dir  On   Off
        ; # ==================
        ; #  0    0    A    0
        ; #  0    1    B    0
        ; #  1    0    A    B
        ; #  1    1    B    A

        ; # Motor 0:

        ; # Figure out all the ramping stuff:
        ; line_number = 334
        ;  if ramp0 = 0 start
        ; Left minus Right
        movf    ramp0,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=8 false_code_size=24
        btfss   __z___byte, __z___bit
        goto    set_up__6
        ; # No ramping:
        ; line_number = 336
        ;  actual_speed0 := desired_speed0
        movf    desired_speed0,w
        movwf   actual_speed0
        ; line_number = 337
        ;  motor0_direction := desired_direction0
        bcf     motor0_direction___byte, motor0_direction___bit
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   desired_direction0___byte, desired_direction0___bit
        bsf     motor0_direction___byte, motor0_direction___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=desired_direction0 (data:X0=>X0 code:XX=>XX)
        ; line_number = 338
        ;  ramp0_delay := 0
        movlw   0
        movwf   ramp0_delay
        ; line_number = 339
        ;  ramp0_offset := 0
        movlw   0
        goto    set_up__7
set_up__6:
        ; # We are ramping:

        ; # Figure out if we are changing direction:
        ; line_number = 344
        ;  temporary := 0
        movlw   0
        movwf   set_up__temporary
        ; line_number = 345
        ;  if motor0_direction start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor0_direction___byte, motor0_direction___bit
        ; line_number = 346
        ; temporary@0 := 1
set_up__select__1___byte equ set_up__temporary
set_up__select__1___bit equ 0
        bsf     set_up__select__1___byte, set_up__select__1___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor0_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 345
        ;  if motor0_direction done
        ; line_number = 347
        ; if desired_direction0 start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   desired_direction0___byte, desired_direction0___bit
        goto    set_up__2
        ; line_number = 348
        ; temporary := temporary ^ 1
        movlw   1
        xorwf   set_up__temporary,f

        ; Recombine size1 = 0 || size2 = 0
set_up__2:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=desired_direction0 (data:X0=>X0 code:XX=>XX)
        ; line_number = 347
        ; if desired_direction0 done
        ; line_number = 350
        ; if temporary@0 start
set_up__select__3___byte equ set_up__temporary
set_up__select__3___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=7 false_code_size=5
        btfss   set_up__select__3___byte, set_up__select__3___bit
        goto    set_up__4
        ; # We are changing direction:
        ; line_number = 352
        ;  second_ramp0_offset := 1
        movlw   1
        movwf   second_ramp0_offset
        ; line_number = 353
        ;  second_desired_speed0 := desired_speed0
        movf    desired_speed0,w
        movwf   second_desired_speed0
        ; line_number = 354
        ;  second_motor0_command := 1
        bsf     second_motor0_command___byte, second_motor0_command___bit
        ; line_number = 355
        ;  desired_speed0 := 0
        movlw   0
        movwf   desired_speed0
        ; line_number = 356
        ;  ramp0_offset := 0xff
        goto    set_up__5
set_up__4:
        ; # Direction remains unchanged
        ; line_number = 359
        ;  if desired_speed0 < actual_speed0 start
        movf    actual_speed0,w
        subwf   desired_speed0,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   __c___byte, __c___bit
        ; line_number = 362
        ; ramp0_offset := 1
        movlw   1
        btfss   __c___byte, __c___bit
        ; line_number = 360
        ; ramp0_offset := 0xff
set_up__5:
        ; code.delay=4294967295 back_code.delay=4294967295
        movlw   255
set_up__7:
        ; code.delay=4294967295 back_code.delay=4294967295
        movwf   ramp0_offset
        ; code.delay=4294967295 back_code.delay=4294967295

        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; line_number = 359
        ;  if desired_speed0 < actual_speed0 done
        ; <=bit_code_emit@symbol; sym=set_up__select__3 (data:X0=>X0 code:XX=>XX)
        ; line_number = 350
        ; if temporary@0 done
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; line_number = 334
        ;  if ramp0 = 0 done
        ; # Figure out all the direction stuff:
        ; line_number = 365
        ;  motor0_off := 0
        movlw   0
        movwf   motor0_off
        ; line_number = 366
        ;  second_motor0_off := 0
        movlw   0
        movwf   second_motor0_off
        ; line_number = 367
        ;  if motor0_direction start
        ; # Direction = 1 (Backward):
        ; line_number = 369
        ;  if motor0_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   motor0_mode___byte, motor0_mode___bit
        ; # Direction = 0 (Forward):
        ; line_number = 377
        ;  if motor0_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=8 false_code_size=8
        btfss   motor0_direction___byte, motor0_direction___bit
        goto    set_up__10
        goto    set_up__9
        ; # Mode = 1 (Continuous):
        ; line_number = 371
        ;  motor0_off := motor0a_mask
        movlw   1
        movwf   motor0_off
        ; line_number = 372
        ;  second_motor0_off := motor0b_mask
        movlw   2
        movwf   second_motor0_off
        ; Recombine size1 = 0 || size2 = 0
set_up__9:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor0_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 369
        ;  if motor0_mode done
        ; line_number = 373
        ; motor0_on := motor0b_mask
        movlw   2
        movwf   motor0_on
        ; line_number = 374
        ;  second_motor0_on := motor0a_mask
        movlw   1
        goto    set_up__11
set_up__10:
        goto    set_up__8
        ; # Mode = 1 (Continuous):
        ; line_number = 379
        ;  motor0_off := motor0b_mask
        movlw   2
        movwf   motor0_off
        ; line_number = 380
        ;  second_motor0_off := motor0a_mask
        movlw   1
        movwf   second_motor0_off
        ; Recombine size1 = 0 || size2 = 0
set_up__8:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor0_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 377
        ;  if motor0_mode done
        ; line_number = 381
        ; motor0_on := motor0a_mask
        movlw   1
        movwf   motor0_on
        ; line_number = 382
        ;  second_motor0_on := motor0b_mask
        movlw   2
set_up__11:
        ; code.delay=4294967295 back_code.delay=4294967295
        movwf   second_motor0_on

        ; <=bit_code_emit@symbol; sym=motor0_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 367
        ;  if motor0_direction done
        ; # Motor 1:
        ; line_number = 385
        ;  if ramp1 = 0 start
        ; Left minus Right
        movf    ramp1,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=8 false_code_size=24
        btfss   __z___byte, __z___bit
        goto    set_up__17
        ; # No ramping:
        ; line_number = 387
        ;  actual_speed1 := desired_speed1
        movf    desired_speed1,w
        movwf   actual_speed1
        ; line_number = 388
        ;  motor1_direction := desired_direction1
        bcf     motor1_direction___byte, motor1_direction___bit
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   desired_direction1___byte, desired_direction1___bit
        bsf     motor1_direction___byte, motor1_direction___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=desired_direction1 (data:X0=>X0 code:XX=>XX)
        ; line_number = 389
        ;  ramp1_delay := 0
        movlw   0
        movwf   ramp1_delay
        ; line_number = 390
        ;  ramp1_offset := 0
        movlw   0
        goto    set_up__18
set_up__17:
        ; # We are ramping:

        ; # Figure out if we are changing direction:
        ; line_number = 395
        ;  temporary := 0
        movlw   0
        movwf   set_up__temporary
        ; line_number = 396
        ;  if motor1_direction start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: True.size=1 False.size=0
        btfsc   motor1_direction___byte, motor1_direction___bit
        ; line_number = 397
        ; temporary@0 := 1
set_up__select__12___byte equ set_up__temporary
set_up__select__12___bit equ 0
        bsf     set_up__select__12___byte, set_up__select__12___bit
        ; Recombine size1 = 0 || size2 = 0
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor1_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 396
        ;  if motor1_direction done
        ; line_number = 398
        ; if desired_direction1 start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   desired_direction1___byte, desired_direction1___bit
        goto    set_up__13
        ; line_number = 399
        ; temporary := temporary ^ 1
        movlw   1
        xorwf   set_up__temporary,f

        ; Recombine size1 = 0 || size2 = 0
set_up__13:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=desired_direction1 (data:X0=>X0 code:XX=>XX)
        ; line_number = 398
        ; if desired_direction1 done
        ; line_number = 401
        ; if temporary@0 start
set_up__select__14___byte equ set_up__temporary
set_up__select__14___bit equ 0
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=7 false_code_size=5
        btfss   set_up__select__14___byte, set_up__select__14___bit
        goto    set_up__15
        ; # We are changing direction:
        ; line_number = 403
        ;  second_ramp1_offset := 1
        movlw   1
        movwf   second_ramp1_offset
        ; line_number = 404
        ;  second_desired_speed1 := desired_speed1
        movf    desired_speed1,w
        movwf   second_desired_speed1
        ; line_number = 405
        ;  second_motor1_command := 1
        bsf     second_motor1_command___byte, second_motor1_command___bit
        ; line_number = 406
        ;  desired_speed1 := 0
        movlw   0
        movwf   desired_speed1
        ; line_number = 407
        ;  ramp1_offset := 0xff
        goto    set_up__16
set_up__15:
        ; # We are not changing direction:
        ; line_number = 410
        ;  if desired_speed1 < actual_speed1 start
        movf    actual_speed1,w
        subwf   desired_speed1,w
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   __c___byte, __c___bit
        ; line_number = 413
        ; ramp1_offset := 1
        movlw   1
        btfss   __c___byte, __c___bit
        ; line_number = 411
        ; ramp1_offset := 0xff
set_up__16:
        ; code.delay=4294967295 back_code.delay=4294967295
        movlw   255
set_up__18:
        ; code.delay=4294967295 back_code.delay=4294967295
        movwf   ramp1_offset
        ; code.delay=4294967295 back_code.delay=4294967295

        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; line_number = 410
        ;  if desired_speed1 < actual_speed1 done
        ; <=bit_code_emit@symbol; sym=set_up__select__14 (data:X0=>X0 code:XX=>XX)
        ; line_number = 401
        ; if temporary@0 done
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; line_number = 385
        ;  if ramp1 = 0 done
        ; line_number = 415
        ; motor1_off := 0
        movlw   0
        movwf   motor1_off
        ; line_number = 416
        ;  second_motor1_off := 0
        movlw   0
        movwf   second_motor1_off
        ; line_number = 417
        ;  if motor1_direction start
        ; # Direction = 1 (Backward):
        ; line_number = 419
        ;  if motor1_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   motor1_mode___byte, motor1_mode___bit
        ; # Direction = 0 (Forward):
        ; line_number = 427
        ;  if motor1_mode start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=8 false_code_size=8
        btfss   motor1_direction___byte, motor1_direction___bit
        goto    set_up__21
        goto    set_up__20
        ; # Mode = 1 (Continuous):
        ; line_number = 421
        ;  motor1_off := motor1a_mask
        movlw   16
        movwf   motor1_off
        ; line_number = 422
        ;  second_motor1_off := motor1b_mask
        movlw   4
        movwf   second_motor1_off
        ; Recombine size1 = 0 || size2 = 0
set_up__20:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor1_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 419
        ;  if motor1_mode done
        ; line_number = 423
        ; motor1_on := motor1b_mask
        movlw   4
        movwf   motor1_on
        ; line_number = 424
        ;  second_motor1_on := motor1a_mask
        movlw   16
        goto    set_up__22
set_up__21:
        goto    set_up__19
        ; # Mode = 1 (Continuous):
        ; line_number = 429
        ;  motor1_off := motor1b_mask
        movlw   4
        movwf   motor1_off
        ; line_number = 430
        ;  second_motor1_off := motor1a_mask
        movlw   16
        movwf   second_motor1_off
        ; Recombine size1 = 0 || size2 = 0
set_up__19:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=motor1_mode (data:X0=>X0 code:XX=>XX)
        ; line_number = 427
        ;  if motor1_mode done
        ; line_number = 431
        ; motor1_on := motor1a_mask
        movlw   16
        movwf   motor1_on
        ; line_number = 432
        ;  second_motor1_on := motor1b_mask
        movlw   4
set_up__22:
        ; code.delay=4294967295 back_code.delay=4294967295
        movwf   second_motor1_on


        ; <=bit_code_emit@symbol; sym=motor1_direction (data:X0=>X0 code:XX=>XX)
        ; line_number = 417
        ;  if motor1_direction done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; line_number = 435
        ; procedure reset
reset:
        ; arguments_none
        ; line_number = 437
        ;  returns_nothing

        ; # Initialize everything else:
        ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
        ; line_number = 440
        ;  motor0e := 1
        bsf     motor0e___byte, motor0e___bit
        ; line_number = 441
        ;  motor1e := 1
        bsf     motor1e___byte, motor1e___bit
        ; line_number = 442
        ;  _intcon := 0
        movlw   0
        movwf   _intcon
        ; line_number = 443
        ;  _option_reg := 0
        movlw   0
        bsf     __rp0___byte, __rp0___bit
        movwf   _option_reg
        ; line_number = 444
        ;  _wpua := 0
        movlw   0
        movwf   _wpua
        ; line_number = 445
        ;  actual_speed0 := 0
        movlw   0
        bcf     __rp0___byte, __rp0___bit
        movwf   actual_speed0
        ; line_number = 446
        ;  actual_speed1 := 0
        movlw   0
        movwf   actual_speed1
        ; line_number = 447
        ;  motor0_off := 0
        movlw   0
        movwf   motor0_off
        ; line_number = 448
        ;  motor0_on := 0
        movlw   0
        movwf   motor0_on
        ; line_number = 449
        ;  motor1_off := 0
        movlw   0
        movwf   motor1_off
        ; line_number = 450
        ;  motor1_on := 0
        movlw   0
        movwf   motor1_on
        ; line_number = 451
        ;  desired_direction0 := 0
        bcf     desired_direction0___byte, desired_direction0___bit
        ; line_number = 452
        ;  desired_direction1 := 0
        bcf     desired_direction1___byte, desired_direction1___bit
        ; line_number = 453
        ;  desired_speed0 := 0
        movlw   0
        movwf   desired_speed0
        ; line_number = 454
        ;  desired_speed1 := 0
        movlw   0
        movwf   desired_speed1
        ; line_number = 455
        ;  ramp0 := 0
        movlw   0
        movwf   ramp0
        ; line_number = 456
        ;  ramp1 := 0
        movlw   0
        movwf   ramp1
        ; line_number = 457
        ;  ramp0_delay := 0
        movlw   0
        movwf   ramp0_delay
        ; line_number = 458
        ;  ramp1_delay := 0
        movlw   0
        movwf   ramp1_delay
        ; line_number = 459
        ;  ramp0_offset := 0
        movlw   0
        movwf   ramp0_offset
        ; line_number = 460
        ;  ramp1_offset := 0
        movlw   0
        movwf   ramp1_offset
        ; line_number = 461
        ;  motor0_direction := 0
        bcf     motor0_direction___byte, motor0_direction___bit
        ; line_number = 462
        ;  motor1_direction := 0
        bcf     motor1_direction___byte, motor1_direction___bit
        ; line_number = 463
        ;  motor0_mode := 0
        bcf     motor0_mode___byte, motor0_mode___bit
        ; line_number = 464
        ;  motor1_mode := 0
        bcf     motor1_mode___byte, motor1_mode___bit
        ; line_number = 465
        ;  second_motor0_command := 0
        bcf     second_motor0_command___byte, second_motor0_command___bit
        ; line_number = 466
        ;  second_motor1_command := 0
        bcf     second_motor1_command___byte, second_motor1_command___bit
        ; line_number = 467
        ;  fail_safe := 0
        movlw   0
        movwf   fail_safe
        ; line_number = 468
        ;  fail_safe_errors := 0
        movlw   0
        movwf   fail_safe_errors
        ; line_number = 469
        ;  fail_safe_high_counter := 0
        movlw   0
        movwf   fail_safe_high_counter
        ; line_number = 470
        ;  fail_safe_low_counter := 0
        movlw   0
        movwf   fail_safe_low_counter
        ; line_number = 471
        ;  glitch := 0
        movlw   0
        movwf   glitch
        ; line_number = 472
        ;  id_index := 0
        movlw   0
        movwf   id_index


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




        ; line_number = 475
        ; procedure delay
delay:
        ; arguments_none
        ; line_number = 477
        ;  returns_nothing
        ; line_number = 478
        ;  exact_delay delay_instructions

        ; # Delay for 1/3 of a bit time.

        ; # Kick the dog:
        ; before procedure statements delay=0, bit states=(data:X0=>X0 code:XX=>XX)
        ; line_number = 483
        ;  watch_dog_reset done
        ; Delay at watch_dog_reset is 0
        clrwdt  

        ; # This is the first probe of TMR0:
        ; line_number = 486
        ;  if _tmr0 < actual_speed0 start
        ; Delay at if is 1
        movf    actual_speed0,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__1
        ; line_number = 489
        ; motor0 := motor0_off
        ; Delay at assignment is 0
        movf    motor0_off,w
        movwf   motor0
        goto    delay__2
delay__1:
        ; line_number = 487
        ; motor0 := motor0_on
        ; Delay at assignment is 0
        movf    motor0_on,w
        movwf   motor0
        nop     
delay__2:
        ; code.delay=9 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=9
        ; line_number = 486
        ;  if _tmr0 < actual_speed0 done
        ; line_number = 490
        ; if _tmr0 < actual_speed1 start
        ; Delay at if is 9
        movf    actual_speed1,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__3
        ; line_number = 493
        ; motor1 := motor1_off
        ; Delay at assignment is 0
        movf    motor1_off,w
        movwf   motor1
        goto    delay__4
delay__3:
        ; line_number = 491
        ; motor1 := motor1_on
        ; Delay at assignment is 0
        movf    motor1_on,w
        movwf   motor1
        nop     
delay__4:
        ; code.delay=17 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=17
        ; line_number = 490
        ; if _tmr0 < actual_speed1 done
        ; line_number = 494
        ; _porta := motor0 | motor1
        ; Delay at assignment is 17
        movf    motor0,w
        iorwf   motor1,w
        movwf   _porta

        ; # First check out {fail_safe_counter}:
        ; line_number = 497
        ;  fail_safe_low_counter := fail_safe_low_counter - 1
        ; Delay at assignment is 20
        decf    fail_safe_low_counter,f
        ; line_number = 498
        ;  if _z start
        ; Delay at if is 21
        ; (after recombine) true_delay=25, false_delay=0 uniform_delay=true
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=33 true_test=true body_code.delay=25 (uniform delay)
        btfsc   _z___byte, _z___bit
        goto    delay__11
        ; Delay 24 cycles
        ; Delay loop takes 6 * 4 = 24 cycles
        movlw   6
delay__13:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__13
        goto    delay__12
delay__11:
        ; line_number = 499
        ; fail_safe_high_counter := fail_safe_high_counter - 1
        ; Delay at assignment is 0
        decf    fail_safe_high_counter,f
        ; line_number = 500
        ;  if _z start
        ; Delay at if is 1
        ; (after recombine) true_delay=21, false_delay=0 uniform_delay=true
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=25 true_test=true body_code.delay=21 (uniform delay)
        btfsc   _z___byte, _z___bit
        goto    delay__8
        ; Delay 20 cycles
        ; Delay loop takes 5 * 4 = 20 cycles
        movlw   5
delay__10:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__10
        goto    delay__9
delay__8:
        ; line_number = 501
        ; if fail_safe != 0 start
        ; Delay at if is 0
        ; Left minus Right
        movf    fail_safe,w
        ; (after recombine) true_delay=0, false_delay=17 uniform_delay=true
        ; CASE: true.size=0 && false.size>1
        ; bit_code_emit_helper1: body_code.size=17 true_test=false body_code.delay=17 (uniform delay)
        btfss   __z___byte, __z___bit
        goto    delay__5
        ; Delay 16 cycles
        ; Delay loop takes 4 * 4 = 16 cycles
        movlw   4
delay__7:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__7
        goto    delay__6
delay__5:
        ; # Turn the motors off:
        ; line_number = 503
        ;  motor0_on := 0
        ; Delay at assignment is 0
        movlw   0
        movwf   motor0_on
        ; line_number = 504
        ;  motor0_off := 0
        ; Delay at assignment is 2
        movlw   0
        movwf   motor0_off
        ; line_number = 505
        ;  motor1_on := 0
        ; Delay at assignment is 4
        movlw   0
        movwf   motor1_on
        ; line_number = 506
        ;  motor1_off := 0
        ; Delay at assignment is 6
        movlw   0
        movwf   motor1_off
        ; line_number = 507
        ;  desired_speed0 := 0
        ; Delay at assignment is 8
        movlw   0
        movwf   desired_speed0
        ; line_number = 508
        ;  desired_speed1 := 0
        ; Delay at assignment is 10
        movlw   0
        movwf   desired_speed1
        ; line_number = 509
        ;  actual_speed0 := 0
        ; Delay at assignment is 12
        movlw   0
        movwf   actual_speed0
        ; line_number = 510
        ;  actual_speed1 := 0
        ; Delay at assignment is 14
        movlw   0
        movwf   actual_speed1
        ; line_number = 511
        ;  fail_safe_errors := fail_safe_errors + 1
        ; Delay at assignment is 16
        incf    fail_safe_errors,f

delay__6:
        ; code.delay=21 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=17 false delay=0 code delay=21
        ; line_number = 501
        ; if fail_safe != 0 done
delay__9:
        ; code.delay=25 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=_z (data:X0=>X0 code:XX=>XX)
        ; if final true delay=21 false delay=0 code delay=25
        ; line_number = 500
        ;  if _z done
delay__12:
        ; code.delay=49 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=_z (data:X0=>X0 code:XX=>XX)
        ; if final true delay=25 false delay=0 code delay=49
        ; line_number = 498
        ;  if _z done
        ; # This is the second probe of TMR0:
        ; line_number = 514
        ;  if _tmr0 < actual_speed0 start
        ; Delay at if is 49
        movf    actual_speed0,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__14
        ; line_number = 517
        ; motor0 := motor0_off
        ; Delay at assignment is 0
        movf    motor0_off,w
        movwf   motor0
        goto    delay__15
delay__14:
        ; line_number = 515
        ; motor0 := motor0_on
        ; Delay at assignment is 0
        movf    motor0_on,w
        movwf   motor0
        nop     
delay__15:
        ; code.delay=57 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=57
        ; line_number = 514
        ;  if _tmr0 < actual_speed0 done
        ; line_number = 518
        ; if _tmr0 < actual_speed1 start
        ; Delay at if is 57
        movf    actual_speed1,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__16
        ; line_number = 521
        ; motor1 := motor1_off
        ; Delay at assignment is 0
        movf    motor1_off,w
        movwf   motor1
        goto    delay__17
delay__16:
        ; line_number = 519
        ; motor1 := motor1_on
        ; Delay at assignment is 0
        movf    motor1_on,w
        movwf   motor1
        nop     
delay__17:
        ; code.delay=65 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=65
        ; line_number = 518
        ; if _tmr0 < actual_speed1 done
        ; line_number = 522
        ; _porta := motor0 | motor1
        ; Delay at assignment is 65
        movf    motor0,w
        iorwf   motor1,w
        movwf   _porta

        ; # Do {ramp0} management:
        ; line_number = 525
        ;  ramp0_delay := ramp0_delay - 1
        ; Delay at assignment is 68
        decf    ramp0_delay,f
        ; line_number = 526
        ;  if _z start
        ; Delay at if is 69
        ; (after recombine) true_delay=9, false_delay=0 uniform_delay=true
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=34 true_test=true body_code.delay=9 (uniform delay)
        btfsc   _z___byte, _z___bit
        goto    delay__25
        ; Delay 8 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
delay__27:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__27
        goto    delay__26
delay__25:
        ; line_number = 527
        ; ramp0_delay := ramp0
        ; Delay at assignment is 0
        movf    ramp0,w
        movwf   ramp0_delay
        ; line_number = 528
        ;  if actual_speed0 != desired_speed0 start
        ; Delay at if is 2
        ; Left minus Right
        movf    desired_speed0,w
        subwf   actual_speed0,w
        ; (after recombine) true_delay=15, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=21 false_code_size=2
        btfsc   __z___byte, __z___bit
        goto    delay__22
        ; Delay 12 cycles
        ; Delay loop takes 3 * 4 = 12 cycles
        movlw   3
delay__24:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__24
        ; line_number = 529
        ; actual_speed0 := actual_speed0 + ramp0_offset
        ; Delay at assignment is 0
        movf    ramp0_offset,w
        addwf   actual_speed0,f
        goto    delay__23
delay__22:
        ; line_number = 530
        ; (after recombine) true_delay=12, false_delay=0 uniform_delay=true
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=12 true_test=true body_code.delay=12 (uniform delay)
        btfsc   second_motor0_command___byte, second_motor0_command___bit
        goto    delay__18
        ; Delay 11 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
delay__20:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__20
        goto    delay__21
delay__21:
        nop     
        goto    delay__19
delay__18:
        ; line_number = 531
        ; second_motor0_command := 0
        ; Delay at assignment is 0
        bcf     second_motor0_command___byte, second_motor0_command___bit
        ; line_number = 532
        ;  desired_speed0 := second_desired_speed0
        ; Delay at assignment is 1
        movf    second_desired_speed0,w
        movwf   desired_speed0
        ; line_number = 533
        ;  ramp0_offset := second_ramp0_offset
        ; Delay at assignment is 3
        movf    second_ramp0_offset,w
        movwf   ramp0_offset
        ; line_number = 534
        ;  motor0_on := second_motor0_on
        ; Delay at assignment is 5
        movf    second_motor0_on,w
        movwf   motor0_on
        ; line_number = 535
        ;  motor0_off := second_motor0_off
        ; Delay at assignment is 7
        movf    second_motor0_off,w
        movwf   motor0_off
        ; line_number = 536
        ;  motor0_direction := desired_direction0
        ; Delay at assignment is 9
        bcf     motor0_direction___byte, motor0_direction___bit
        ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
        ; CASE: True.size=1 False.size=0
        btfsc   desired_direction0___byte, desired_direction0___bit
        bsf     motor0_direction___byte, motor0_direction___bit
        ; code.delay=12 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=desired_direction0 (data:XX=>X0 code:XX=>XX)

delay__19:
        ; code.delay=15 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=second_motor0_command (data:X0=>X0 code:XX=>XX)
delay__23:
        ; code.delay=9 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=15 code delay=9
        ; line_number = 528
        ;  if actual_speed0 != desired_speed0 done
delay__26:
        ; code.delay=81 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=_z (data:X0=>X0 code:XX=>XX)
        ; if final true delay=9 false delay=0 code delay=81
        ; line_number = 526
        ;  if _z done
        ; # This is the third probe of TMR0:
        ; line_number = 539
        ;  if _tmr0 < actual_speed0 start
        ; Delay at if is 81
        movf    actual_speed0,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__28
        ; line_number = 542
        ; motor0 := motor0_off
        ; Delay at assignment is 0
        movf    motor0_off,w
        movwf   motor0

        goto    delay__29
delay__28:
        ; line_number = 540
        ; motor0 := motor0_on
        ; Delay at assignment is 0
        movf    motor0_on,w
        movwf   motor0
        nop     
delay__29:
        ; code.delay=89 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=89
        ; line_number = 539
        ;  if _tmr0 < actual_speed0 done
        ; line_number = 544
        ; if _tmr0 < actual_speed1 start
        ; Delay at if is 89
        movf    actual_speed1,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__30
        ; line_number = 547
        ; motor1 := motor1_off
        ; Delay at assignment is 0
        movf    motor1_off,w
        movwf   motor1
        goto    delay__31
delay__30:
        ; line_number = 545
        ; motor1 := motor1_on
        ; Delay at assignment is 0
        movf    motor1_on,w
        movwf   motor1
        nop     
delay__31:
        ; code.delay=97 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=97
        ; line_number = 544
        ; if _tmr0 < actual_speed1 done
        ; line_number = 548
        ; _porta := motor0 | motor1
        ; Delay at assignment is 97
        movf    motor0,w
        iorwf   motor1,w
        movwf   _porta

        ; # Do {ramp1} management:
        ; line_number = 551
        ;  ramp1_delay := ramp1_delay - 1
        ; Delay at assignment is 100
        decf    ramp1_delay,f
        ; line_number = 552
        ;  if _z start
        ; Delay at if is 101
        ; (after recombine) true_delay=9, false_delay=19 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=34 false_code_size=23
        btfss   _z___byte, _z___bit
        goto    delay__43
        ; line_number = 553
        ; ramp1_delay := ramp1
        ; Delay at assignment is 0
        movf    ramp1,w
        movwf   ramp1_delay
        ; line_number = 554
        ;  if actual_speed1 != desired_speed1 start
        ; Delay at if is 2
        ; Left minus Right
        movf    desired_speed1,w
        subwf   actual_speed1,w
        ; (after recombine) true_delay=15, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=21 false_code_size=2
        btfsc   __z___byte, __z___bit
        goto    delay__40
        ; Delay 12 cycles
        ; Delay loop takes 3 * 4 = 12 cycles
        movlw   3
delay__42:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__42
        ; line_number = 555
        ; actual_speed1 := actual_speed1 + ramp1_offset
        ; Delay at assignment is 0
        movf    ramp1_offset,w
        addwf   actual_speed1,f
        goto    delay__41
delay__40:
        ; line_number = 556
        ; (after recombine) true_delay=12, false_delay=0 uniform_delay=true
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=12 true_test=true body_code.delay=12 (uniform delay)
        btfsc   second_motor1_command___byte, second_motor1_command___bit
        goto    delay__36
        ; Delay 11 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
delay__38:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__38
        goto    delay__39
delay__39:
        nop     
        goto    delay__37
delay__36:
        ; line_number = 557
        ; second_motor1_command := 0
        ; Delay at assignment is 0
        bcf     second_motor1_command___byte, second_motor1_command___bit
        ; line_number = 558
        ;  desired_speed1 := second_desired_speed1
        ; Delay at assignment is 1
        movf    second_desired_speed1,w
        movwf   desired_speed1
        ; line_number = 559
        ;  ramp1_offset := second_ramp1_offset
        ; Delay at assignment is 3
        movf    second_ramp1_offset,w
        movwf   ramp1_offset
        ; line_number = 560
        ;  motor1_on := second_motor1_on
        ; Delay at assignment is 5
        movf    second_motor1_on,w
        movwf   motor1_on
        ; line_number = 561
        ;  motor1_off := second_motor1_off
        ; Delay at assignment is 7
        movf    second_motor1_off,w
        movwf   motor1_off
        ; line_number = 562
        ;  motor1_direction := desired_direction1
        ; Delay at assignment is 9
        bcf     motor1_direction___byte, motor1_direction___bit
        ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
        ; CASE: True.size=1 False.size=0
        btfsc   desired_direction1___byte, desired_direction1___bit
        bsf     motor1_direction___byte, motor1_direction___bit
        ; code.delay=12 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=desired_direction1 (data:XX=>X0 code:XX=>XX)
delay__37:
        ; code.delay=15 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=second_motor1_command (data:X0=>X0 code:XX=>XX)
delay__41:
        ; code.delay=9 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__z (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=15 code delay=9
        ; line_number = 554
        ;  if actual_speed1 != desired_speed1 done
        ; Delay 9 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
delay__45:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__45
        nop     
        goto    delay__44
delay__43:
        ; # This is the forth probe of TMR0:
        ; line_number = 565
        ;  if _tmr0 < actual_speed0 start
        ; Delay at if is 0
        movf    actual_speed0,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__32
        ; line_number = 568
        ; motor0 := motor0_off
        ; Delay at assignment is 0
        movf    motor0_off,w
        movwf   motor0
        goto    delay__33
delay__32:
        ; line_number = 566
        ; motor0 := motor0_on
        ; Delay at assignment is 0
        movf    motor0_on,w
        movwf   motor0
        nop     
delay__33:
        ; code.delay=8 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=8
        ; line_number = 565
        ;  if _tmr0 < actual_speed0 done
        ; line_number = 569
        ; if _tmr0 < actual_speed1 start
        ; Delay at if is 8
        movf    actual_speed1,w
        subwf   _tmr0,w
        ; (after recombine) true_delay=2, false_delay=2 uniform_delay=true
        ; CASE: true_code_size > 1 && false_code_size > 1
        ; true_code_size=2 false_code_size=2
        btfss   __c___byte, __c___bit
        goto    delay__34
        ; line_number = 572
        ; motor1 := motor1_off
        ; Delay at assignment is 0
        movf    motor1_off,w
        movwf   motor1
        goto    delay__35
delay__34:
        ; line_number = 570
        ; motor1 := motor1_on
        ; Delay at assignment is 0
        movf    motor1_on,w
        movwf   motor1
        nop     
delay__35:
        ; code.delay=16 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=__c (data:X0=>X0 code:XX=>XX)
        ; Uniform delay broke in relation_code_emit
        ; if final true delay=2 false delay=2 code delay=16
        ; line_number = 569
        ; if _tmr0 < actual_speed1 done
        ; line_number = 573
        ; _porta := motor0 | motor1
        ; Delay at assignment is 16
        movf    motor0,w
        iorwf   motor1,w
        movwf   _porta


delay__44:
        ; code.delay=123 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=_z (data:X0=>X0 code:XX=>XX)
        ; if final true delay=9 false delay=19 code delay=123
        ; line_number = 552
        ;  if _z done
        ; delay after procedure statements=123
        ; Delay 8 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
delay__46:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    delay__46
        ; Implied return
        retlw   0
        ; Final delay = 133




        ; line_number = 576
        ; constant zero8 = "\0,0,0,0,0,0,0,0\"
        ; zero8 = '\0,0,0,0,0,0,0,0\'
        ; line_number = 577
        ; constant module_name = "\13\DualMotor1Amp"
        ; module_name = '\13\DualMotor1Amp'
        ; line_number = 578
        ; constant vendor_name = "\13\Mondo-tronics"
        ; vendor_name = '\13\Mondo-tronics'

        ; line_number = 580
        ; string id = "\1,0,14,2,0,0,0,0\" ~ zero8 ~ zero8 ~ module_name ~ vendor_name start
        ; id = '\1,0,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13\DualMotor1Amp\13\Mondo-tronics'
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 52
        ; Add 12 NOP's until start of new page 
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
        nop     
id___base:
        retlw   1
        retlw   0
        retlw   14
        retlw   2
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   0
        retlw   13
        retlw   68
        retlw   117
        retlw   97
        retlw   108
        retlw   77
        retlw   111
        retlw   116
        retlw   111
        retlw   114
        retlw   49
        retlw   65
        retlw   109
        retlw   112
        retlw   13
        retlw   77
        retlw   111
        retlw   110
        retlw   100
        retlw   111
        retlw   45
        retlw   116
        retlw   114
        retlw   111
        retlw   110
        retlw   105
        retlw   99
        retlw   115
        ; line_number = 580
        ; string id = "\1,0,14,2,0,0,0,0\" ~ zero8 ~ zero8 ~ module_name ~ vendor_name start

        ; Appending 2 delayed procedures to code bank 0
        ; buffer = 'bit_bang'
        ; line_number = 33
        ; procedure byte_get
byte_get:
        ; arguments_none
        ; line_number = 35
        ;  returns byte

        ; # This procedure will wait for a byte to be received from
        ; # serial_in_bit.  It calls the delay procedure for all delays.
        ; # This procedure will keep calling the {delay} routine until
        ; # data is received.

        ; line_number = 42
        ;  local count byte
byte_get__count equ shared___globals
        ; line_number = 43
        ;  local byte byte
byte_get__byte equ shared___globals+1

        ; # Why does the delay procedure wait for a third of bit?  Well, it
        ; # has to do with the loop immediately below.  If we catch the
        ; # start bit at the beginning of a 1/3 bit time, we will be
        ; # sampling data at approximately 1/3 of the way into each bit.
        ; # Conversely, if we catch the start near the end of a 1/3 bit
        ; # bit time, we will be sampling data at approximately 2/3 of the
        ; # way into each bit.  So, what this means is that our bit sample
        ; # times will be somewhere between 1/3 and 2/3 of bit (i.e. in
        ; # the middle of the bit.

        ; # It would be nice to tweak the code to shorter delay times
        ; # (1/4 bit, 1/5 bit, etc.) but then it gets too hard to get
        ; # the bookeeping done in the delay routine.  A PIC running at
        ; # 4MHz (=1MIPS), only has 138 instructions available for the
        ; # delay routine when at 1/3 of bit.

        ; # Wait for a start bit:
        ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
        ; line_number = 62
        ;  waiting := 1
        bsf     waiting___byte, waiting___bit
        ; line_number = 63
        ;  receiving := 1
        bsf     receiving___byte, receiving___bit
        ; line_number = 64
        ;  while serial_in start
byte_get__1:
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=2 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   serial_in___byte, serial_in___bit
        goto    byte_get__2
        ; line_number = 65
        ; delay instructions_per_delay - 3 start
        ; Delay expression evaluates to 135
        ; line_number = 66
        ; call delay()
        ; Delay at call is 0
        call    delay
        ; line_number = 65
        ; delay instructions_per_delay - 3 done
        goto    byte_get__1
        ; Recombine size1 = 0 || size2 = 0
byte_get__2:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
        ; line_number = 64
        ;  while serial_in done
        ; line_number = 67
        ; waiting := 0
        bcf     waiting___byte, waiting___bit

        ; # Clear out any preceeding interrupt condition:
        ; line_number = 70
        ;  serial_out := 1
        bsf     serial_out___byte, serial_out___bit

        ; # Skip over start bit:
        ; line_number = 73
        ;  delay instructions_per_bit - 2 start
        ; Delay expression evaluates to 414
        ; # There are two instructions of set-up for following loop_exactly:
        ; line_number = 75
        ;  call delay()
        ; Delay at call is 0
        call    delay
        ; line_number = 76
        ;  call delay()
        ; Delay at call is 135
        call    delay
        ; line_number = 77
        ;  call delay()
        ; Delay at call is 270
        call    delay
        ; line_number = 78
        ;  byte := 0
        ; Delay at assignment is 405
        movlw   0
        movwf   byte_get__byte

        ; Delay 7 cycles
        goto    byte_get__3
byte_get__3:
        goto    byte_get__4
byte_get__4:
        goto    byte_get__5
byte_get__5:
        nop     
        ; line_number = 73
        ;  delay instructions_per_bit - 2 done
        ; # Read in 8 bits of data:
        ; line_number = 81
        ;  loop_exactly 8 start
byte_get__6 equ shared___globals+44
        movlw   8
        movwf   byte_get__6
byte_get__7:
        ; # There are 3 instrucitons of loop_exactly overhead:
        ; line_number = 83
        ;  delay instructions_per_bit - 3 start
        ; Delay expression evaluates to 413
        ; line_number = 84
        ; call delay()
        ; Delay at call is 0
        call    delay
        ; line_number = 85
        ;  byte := byte >> 1
        ; Delay at assignment is 135
        ; Assignment of variable to self (no code needed)
        rrf     byte_get__byte,f
        bcf     byte_get__byte, 7
        ; line_number = 86
        ;  if serial_in start
        ; Delay at if is 137
        ; (after recombine) true_delay=1, false_delay=0 uniform_delay=true
        ; CASE: True.size=1 False.size=0
        btfsc   serial_in___byte, serial_in___bit
        ; line_number = 87
        ; byte@7 := 1
        ; Delay at assignment is 0
byte_get__select__8___byte equ byte_get__byte
byte_get__select__8___bit equ 7
        bsf     byte_get__select__8___byte, byte_get__select__8___bit
        ; code.delay=139 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=serial_in (data:X0=>X0 code:XX=>XX)
        ; if final true delay=1 false delay=0 code delay=139
        ; line_number = 86
        ;  if serial_in done
        ; line_number = 88
        ; call delay()
        ; Delay at call is 139
        call    delay
        ; line_number = 89
        ;  call delay()
        ; Delay at call is 274
        call    delay

        ; Delay 4 cycles
        goto    byte_get__9
byte_get__9:
        goto    byte_get__10
byte_get__10:
        ; line_number = 83
        ;  delay instructions_per_bit - 3 done
        ; line_number = 81
        ;  loop_exactly 8 wrap-up
        decfsz  byte_get__6,f
        goto    byte_get__7
        ; line_number = 81
        ;  loop_exactly 8 done
        ; # Skip over 2/3's of stop bit; 3 cycles for return:
        ; line_number = 92
        ;  delay instructions_per_delay*2 - 3 start
        ; Delay expression evaluates to 273
        ; line_number = 93
        ; call delay()
        ; Delay at call is 0
        call    delay
        ; line_number = 94
        ;  call delay()
        ; Delay at call is 135
        call    delay
        ; Delay 3 cycles
        goto    byte_get__11
byte_get__11:
        nop     
        ; line_number = 92
        ;  delay instructions_per_delay*2 - 3 done
        ; line_number = 95
        ; command_previous := command_last
        movf    command_last,w
        movwf   command_previous
        ; line_number = 96
        ;  command_last := byte
        movf    byte_get__byte,w
        movwf   command_last
        ; line_number = 97
        ;  serial_out := 1
        bsf     serial_out___byte, serial_out___bit
        ; line_number = 98
        ;  return byte start
        ; line_number = 98
        movf    byte_get__byte,w
        return  
        ; line_number = 98
        ;  return byte done


        ; delay after procedure statements=non-uniform




        ; line_number = 101
        ; procedure byte_put
byte_put:
        ; Last argument is sitting in W; save into argument variable
        movwf   byte_put__byte
        ; delay=4294967295
        ; line_number = 102
        ; argument byte byte
byte_put__byte equ shared___globals+3
        ; line_number = 103
        ;  returns_nothing

        ; # This procedure will send {byte} to {serial_out} pin.  The {delay}
        ; # procedure is called to provide the appropriate bit timing.

        ; line_number = 108
        ;  local count byte
byte_put__count equ shared___globals+2

        ; # {receiving} will be 1 if the last get/put routine was a get.
        ; # Before we start transmitting a response back, we want to ensure
        ; # that there has been enough time to turn the line around.
        ; # We delay the first 1/3 of a bit to pad out the 9-2/3 bits
        ; # from get_byte to 10 bits.  We delay another 3 bits just to
        ; # ensure that slow interpreters do not get overrun.
        ; before procedure statements delay=non-uniform, bit states=(data:X0=>X0 code:XX=>XX)
        ; line_number = 116
        ;  sent_previous := sent_last
        movf    sent_last,w
        movwf   sent_previous
        ; line_number = 117
        ;  sent_last := byte
        movf    byte_put__byte,w
        movwf   sent_last
        ; line_number = 118
        ;  if receiving start
        ; (after recombine) true_delay=non-uniform, false_delay=non-uniform
        ; CASE: true_code.size = 0 && false_code.size > 1
        ; bit_code_emit_helper1: body_code.size=4 true_test=true body_code.delay=0 (non-uniform delay)
        btfss   receiving___byte, receiving___bit
        goto    byte_put__3
        ; line_number = 119
        ; receiving := 0
        bcf     receiving___byte, receiving___bit
        ; # 10 = 1 + 3*3 = 3-1/3 extra bits of delay:
        ; line_number = 121
        ;  loop_exactly 10 start
byte_put__1 equ shared___globals+45
        movlw   10
        movwf   byte_put__1
byte_put__2:
        ; line_number = 122
        ; call delay()
        call    delay

        ; line_number = 121
        ;  loop_exactly 10 wrap-up
        decfsz  byte_put__1,f
        goto    byte_put__2
        ; line_number = 121
        ;  loop_exactly 10 done
        ; Recombine size1 = 0 || size2 = 0
byte_put__3:
        ; code.delay=4294967295 back_code.delay=4294967295
        ; <=bit_code_emit@symbol; sym=receiving (data:X0=>X0 code:XX=>XX)
        ; line_number = 118
        ;  if receiving done
        ; # Send the start bit:
        ; line_number = 125
        ;  delay instructions_per_bit - 2 start
        ; Delay expression evaluates to 414
        ; # The loop_exactly setup after this is 2 instructions:
        ; line_number = 127
        ;  serial_out := 0
        ; Delay at assignment is 0
        bcf     serial_out___byte, serial_out___bit
        ; line_number = 128
        ;  call delay()
        ; Delay at call is 1
        call    delay
        ; line_number = 129
        ;  call delay()
        ; Delay at call is 136
        call    delay
        ; line_number = 130
        ;  call delay()
        ; Delay at call is 271
        call    delay

        ; Delay 8 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
byte_put__4:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    byte_put__4
        ; line_number = 125
        ;  delay instructions_per_bit - 2 done
        ; # Send the data:
        ; line_number = 133
        ;  loop_exactly 8 start
byte_put__5 equ shared___globals+45
        movlw   8
        movwf   byte_put__5
byte_put__6:
        ; # Loop_exactly overhead is 3 instructions:
        ; line_number = 135
        ;  delay instructions_per_bit - 3 start
        ; Delay expression evaluates to 413
        ; line_number = 136
        ; if byte@0 start
        ; Delay at if is 0
byte_put__select__7___byte equ byte_put__byte
byte_put__select__7___bit equ 0
        ; (after recombine) true_delay=1, false_delay=1 uniform_delay=true
        ; CASE: true_size=1 && false_size=1
        ; SUBCASE: Double test; true, then false
        btfsc   byte_put__select__7___byte, byte_put__select__7___bit
        ; line_number = 137
        ; serial_out := 1
        ; Delay at assignment is 0
        bsf     serial_out___byte, serial_out___bit
        btfss   byte_put__select__7___byte, byte_put__select__7___bit
        ; line_number = 139
        ; serial_out := 0
        ; Delay at assignment is 0
        bcf     serial_out___byte, serial_out___bit
        ; code.delay=4 back_code.delay=0
        ; <=bit_code_emit@symbol; sym=byte_put__select__7 (data:X0=>X0 code:XX=>XX)
        ; if final true delay=1 false delay=1 code delay=4
        ; line_number = 136
        ; if byte@0 done
        ; line_number = 140
        ; byte := byte >> 1
        ; Delay at assignment is 4
        ; Assignment of variable to self (no code needed)
        rrf     byte_put__byte,f
        bcf     byte_put__byte, 7
        ; line_number = 141
        ;  call delay()
        ; Delay at call is 6
        call    delay
        ; line_number = 142
        ;  call delay()
        ; Delay at call is 141
        call    delay
        ; line_number = 143
        ;  call delay()
        ; Delay at call is 276
        call    delay

        ; Delay 2 cycles
        goto    byte_put__8
byte_put__8:
        ; line_number = 135
        ;  delay instructions_per_bit - 3 done
        ; line_number = 133
        ;  loop_exactly 8 wrap-up
        decfsz  byte_put__5,f
        goto    byte_put__6
        ; line_number = 133
        ;  loop_exactly 8 done
        ; # Send the stop bit:
        ; line_number = 146
        ;  delay instructions_per_bit start
        ; Delay expression evaluates to 416
        ; line_number = 147
        ; serial_out := 1
        ; Delay at assignment is 0
        bsf     serial_out___byte, serial_out___bit
        ; line_number = 148
        ;  call delay()
        ; Delay at call is 1
        call    delay
        ; line_number = 149
        ;  call delay()
        ; Delay at call is 136
        call    delay
        ; line_number = 150
        ;  call delay()
        ; Delay at call is 271
        call    delay


        ; Delay 10 cycles
        ; Delay loop takes 2 * 4 = 8 cycles
        movlw   2
byte_put__9:
        addlw   255
        btfss   __z___byte, __z___bit
        goto    byte_put__9
        goto    byte_put__10
byte_put__10:
        ; line_number = 146
        ;  delay instructions_per_bit done
        ; delay after procedure statements=non-uniform
        ; Implied return
        retlw   0




        ; Configuration bits
        ; fill = 0x0
        ; bg = bg11 (0x3000)
        ; cpd = off (0x100)
        ; cp = off (0x80)
        ; boden = off (0x0)
        ; mclre = off (0x0)
        ; pwrte = off (0x10)
        ; wdte = off (0x0)
        ; fosc = int_no_clk (0x4)
        ; 12692 = 0x3194
        __config 12692
        ; Define start addresses for data regions
        ; Region="shared___globals" Address=32" Size=64 Bytes=46 Bits=10 Available=16
        ; Region="shared___globals" Address=32" Size=64 Bytes=46 Bits=10 Available=16
        ; Region="shared___globals" Address=32" Size=64 Bytes=46 Bits=10 Available=16
        end
