abse/smart-ring-flex

A tscircuit package created by abse.

Version
0.0.24
License
unset
Stars
0

firmware/onboard-programmer/ring-service-candidate/usb_handler.lst

                                      1 ;--------------------------------------------------------
                                      2 ; File Created by SDCC : free open source ANSI-C Compiler
                                      3 ; Version 4.2.0 #13081 (Linux)
                                      4 ;--------------------------------------------------------
                                      5 	.module usb_handler
                                      6 	.optsdcc -mmcs51 --model-small
                                      7 	
                                      8 ;--------------------------------------------------------
                                      9 ; Public variables in this module
                                     10 ;--------------------------------------------------------
                                     11 	.globl _USB_EP0_OUT
                                     12 	.globl _USB_EP0_IN
                                     13 	.globl _USB_EP0_SETUP
                                     14 	.globl _USB_EP_init
                                     15 	.globl _HID_EP1_OUT
                                     16 	.globl _HID_EP1_IN
                                     17 	.globl _HID_EP_init
                                     18 	.globl _ring_probe_release
                                     19 	.globl _UIF_BUS_RST
                                     20 	.globl _UIF_DETECT
                                     21 	.globl _UIF_TRANSFER
                                     22 	.globl _UIF_SUSPEND
                                     23 	.globl _UIF_HST_SOF
                                     24 	.globl _UIF_FIFO_OV
                                     25 	.globl _U_SIE_FREE
                                     26 	.globl _U_TOG_OK
                                     27 	.globl _U_IS_NAK
                                     28 	.globl _ADC_CHAN0
                                     29 	.globl _ADC_CHAN1
                                     30 	.globl _CMP_CHAN
                                     31 	.globl _ADC_START
                                     32 	.globl _ADC_IF
                                     33 	.globl _CMP_IF
                                     34 	.globl _CMPO
                                     35 	.globl _U1RI
                                     36 	.globl _U1TI
                                     37 	.globl _U1RB8
                                     38 	.globl _U1TB8
                                     39 	.globl _U1REN
                                     40 	.globl _U1SMOD
                                     41 	.globl _U1SM0
                                     42 	.globl _S0_R_FIFO
                                     43 	.globl _S0_T_FIFO
                                     44 	.globl _S0_FREE
                                     45 	.globl _S0_IF_BYTE
                                     46 	.globl _S0_IF_FIRST
                                     47 	.globl _S0_IF_OV
                                     48 	.globl _S0_FST_ACT
                                     49 	.globl _CP_RL2
                                     50 	.globl _C_T2
                                     51 	.globl _TR2
                                     52 	.globl _EXEN2
                                     53 	.globl _TCLK
                                     54 	.globl _RCLK
                                     55 	.globl _EXF2
                                     56 	.globl _CAP1F
                                     57 	.globl _TF2
                                     58 	.globl _RI
                                     59 	.globl _TI
                                     60 	.globl _RB8
                                     61 	.globl _TB8
                                     62 	.globl _REN
                                     63 	.globl _SM2
                                     64 	.globl _SM1
                                     65 	.globl _SM0
                                     66 	.globl _IT0
                                     67 	.globl _IE0
                                     68 	.globl _IT1
                                     69 	.globl _IE1
                                     70 	.globl _TR0
                                     71 	.globl _TF0
                                     72 	.globl _TR1
                                     73 	.globl _TF1
                                     74 	.globl _RXD
                                     75 	.globl _PWM1_
                                     76 	.globl _TXD
                                     77 	.globl _PWM2_
                                     78 	.globl _AIN3
                                     79 	.globl _VBUS1
                                     80 	.globl _INT0
                                     81 	.globl _TXD1_
                                     82 	.globl _INT1
                                     83 	.globl _T0
                                     84 	.globl _RXD1_
                                     85 	.globl _PWM2
                                     86 	.globl _T1
                                     87 	.globl _UDP
                                     88 	.globl _UDM
                                     89 	.globl _TIN0
                                     90 	.globl _CAP1
                                     91 	.globl _T2
                                     92 	.globl _AIN0
                                     93 	.globl _VBUS2
                                     94 	.globl _TIN1
                                     95 	.globl _CAP2
                                     96 	.globl _T2EX
                                     97 	.globl _RXD_
                                     98 	.globl _TXD_
                                     99 	.globl _AIN1
                                    100 	.globl _UCC1
                                    101 	.globl _TIN2
                                    102 	.globl _SCS
                                    103 	.globl _CAP1_
                                    104 	.globl _T2_
                                    105 	.globl _AIN2
                                    106 	.globl _UCC2
                                    107 	.globl _TIN3
                                    108 	.globl _PWM1
                                    109 	.globl _MOSI
                                    110 	.globl _TIN4
                                    111 	.globl _RXD1
                                    112 	.globl _MISO
                                    113 	.globl _TIN5
                                    114 	.globl _TXD1
                                    115 	.globl _SCK
                                    116 	.globl _IE_SPI0
                                    117 	.globl _IE_TKEY
                                    118 	.globl _IE_USB
                                    119 	.globl _IE_ADC
                                    120 	.globl _IE_UART1
                                    121 	.globl _IE_PWMX
                                    122 	.globl _IE_GPIO
                                    123 	.globl _IE_WDOG
                                    124 	.globl _PX0
                                    125 	.globl _PT0
                                    126 	.globl _PX1
                                    127 	.globl _PT1
                                    128 	.globl _PS
                                    129 	.globl _PT2
                                    130 	.globl _PL_FLAG
                                    131 	.globl _PH_FLAG
                                    132 	.globl _EX0
                                    133 	.globl _ET0
                                    134 	.globl _EX1
                                    135 	.globl _ET1
                                    136 	.globl _ES
                                    137 	.globl _ET2
                                    138 	.globl _E_DIS
                                    139 	.globl _EA
                                    140 	.globl _P
                                    141 	.globl _F1
                                    142 	.globl _OV
                                    143 	.globl _RS0
                                    144 	.globl _RS1
                                    145 	.globl _F0
                                    146 	.globl _AC
                                    147 	.globl _CY
                                    148 	.globl _UEP1_DMA_H
                                    149 	.globl _UEP1_DMA_L
                                    150 	.globl _UEP1_DMA
                                    151 	.globl _UEP0_DMA_H
                                    152 	.globl _UEP0_DMA_L
                                    153 	.globl _UEP0_DMA
                                    154 	.globl _UEP2_3_MOD
                                    155 	.globl _UEP4_1_MOD
                                    156 	.globl _UEP3_DMA_H
                                    157 	.globl _UEP3_DMA_L
                                    158 	.globl _UEP3_DMA
                                    159 	.globl _UEP2_DMA_H
                                    160 	.globl _UEP2_DMA_L
                                    161 	.globl _UEP2_DMA
                                    162 	.globl _USB_DEV_AD
                                    163 	.globl _USB_CTRL
                                    164 	.globl _USB_INT_EN
                                    165 	.globl _UEP4_T_LEN
                                    166 	.globl _UEP4_CTRL
                                    167 	.globl _UEP0_T_LEN
                                    168 	.globl _UEP0_CTRL
                                    169 	.globl _USB_RX_LEN
                                    170 	.globl _USB_MIS_ST
                                    171 	.globl _USB_INT_ST
                                    172 	.globl _USB_INT_FG
                                    173 	.globl _UEP3_T_LEN
                                    174 	.globl _UEP3_CTRL
                                    175 	.globl _UEP2_T_LEN
                                    176 	.globl _UEP2_CTRL
                                    177 	.globl _UEP1_T_LEN
                                    178 	.globl _UEP1_CTRL
                                    179 	.globl _UDEV_CTRL
                                    180 	.globl _USB_C_CTRL
                                    181 	.globl _TKEY_DATH
                                    182 	.globl _TKEY_DATL
                                    183 	.globl _TKEY_DAT
                                    184 	.globl _TKEY_CTRL
                                    185 	.globl _ADC_DATA
                                    186 	.globl _ADC_CFG
                                    187 	.globl _ADC_CTRL
                                    188 	.globl _SBAUD1
                                    189 	.globl _SBUF1
                                    190 	.globl _SCON1
                                    191 	.globl _SPI0_SETUP
                                    192 	.globl _SPI0_CK_SE
                                    193 	.globl _SPI0_CTRL
                                    194 	.globl _SPI0_DATA
                                    195 	.globl _SPI0_STAT
                                    196 	.globl _PWM_CK_SE
                                    197 	.globl _PWM_CTRL
                                    198 	.globl _PWM_DATA1
                                    199 	.globl _PWM_DATA2
                                    200 	.globl _T2CAP1H
                                    201 	.globl _T2CAP1L
                                    202 	.globl _T2CAP1
                                    203 	.globl _TH2
                                    204 	.globl _TL2
                                    205 	.globl _T2COUNT
                                    206 	.globl _RCAP2H
                                    207 	.globl _RCAP2L
                                    208 	.globl _RCAP2
                                    209 	.globl _T2MOD
                                    210 	.globl _T2CON
                                    211 	.globl _SBUF
                                    212 	.globl _SCON
                                    213 	.globl _TH1
                                    214 	.globl _TH0
                                    215 	.globl _TL1
                                    216 	.globl _TL0
                                    217 	.globl _TMOD
                                    218 	.globl _TCON
                                    219 	.globl _XBUS_AUX
                                    220 	.globl _PIN_FUNC
                                    221 	.globl _P3_DIR_PU
                                    222 	.globl _P3_MOD_OC
                                    223 	.globl _P3
                                    224 	.globl _P2
                                    225 	.globl _P1_DIR_PU
                                    226 	.globl _P1_MOD_OC
                                    227 	.globl _P1
                                    228 	.globl _ROM_CTRL
                                    229 	.globl _ROM_DATA_H
                                    230 	.globl _ROM_DATA_L
                                    231 	.globl _ROM_DATA
                                    232 	.globl _ROM_ADDR_H
                                    233 	.globl _ROM_ADDR_L
                                    234 	.globl _ROM_ADDR
                                    235 	.globl _GPIO_IE
                                    236 	.globl _IP_EX
                                    237 	.globl _IE_EX
                                    238 	.globl _IP
                                    239 	.globl _IE
                                    240 	.globl _WDOG_COUNT
                                    241 	.globl _RESET_KEEP
                                    242 	.globl _WAKE_CTRL
                                    243 	.globl _CLOCK_CFG
                                    244 	.globl _PCON
                                    245 	.globl _GLOBAL_CFG
                                    246 	.globl _SAFE_MOD
                                    247 	.globl _DPH
                                    248 	.globl _DPL
                                    249 	.globl _SP
                                    250 	.globl _B
                                    251 	.globl _ACC
                                    252 	.globl _PSW
                                    253 	.globl _EP1_buffer
                                    254 	.globl _EP0_buffer
                                    255 	.globl _USB_ENUM_OK
                                    256 	.globl _USB_pDescr
                                    257 	.globl _USB_SetupLen
                                    258 	.globl _USB_Addr
                                    259 	.globl _USB_Config
                                    260 	.globl _USB_SetupTyp
                                    261 	.globl _USB_SetupReq
                                    262 	.globl _USB_init
                                    263 	.globl _USB_EP0_copyDescr
                                    264 	.globl _USB_interrupt
                                    265 ;--------------------------------------------------------
                                    266 ; special function registers
                                    267 ;--------------------------------------------------------
                                    268 	.area RSEG    (ABS,DATA)
      000000                        269 	.org 0x0000
                           0000D0   270 _PSW	=	0x00d0
                           0000E0   271 _ACC	=	0x00e0
                           0000F0   272 _B	=	0x00f0
                           000081   273 _SP	=	0x0081
                           000082   274 _DPL	=	0x0082
                           000083   275 _DPH	=	0x0083
                           0000A1   276 _SAFE_MOD	=	0x00a1
                           0000B1   277 _GLOBAL_CFG	=	0x00b1
                           000087   278 _PCON	=	0x0087
                           0000B9   279 _CLOCK_CFG	=	0x00b9
                           0000A9   280 _WAKE_CTRL	=	0x00a9
                           0000FE   281 _RESET_KEEP	=	0x00fe
                           0000FF   282 _WDOG_COUNT	=	0x00ff
                           0000A8   283 _IE	=	0x00a8
                           0000B8   284 _IP	=	0x00b8
                           0000E8   285 _IE_EX	=	0x00e8
                           0000E9   286 _IP_EX	=	0x00e9
                           0000C7   287 _GPIO_IE	=	0x00c7
                           008584   288 _ROM_ADDR	=	0x8584
                           000084   289 _ROM_ADDR_L	=	0x0084
                           000085   290 _ROM_ADDR_H	=	0x0085
                           008F8E   291 _ROM_DATA	=	0x8f8e
                           00008E   292 _ROM_DATA_L	=	0x008e
                           00008F   293 _ROM_DATA_H	=	0x008f
                           000086   294 _ROM_CTRL	=	0x0086
                           000090   295 _P1	=	0x0090
                           000092   296 _P1_MOD_OC	=	0x0092
                           000093   297 _P1_DIR_PU	=	0x0093
                           0000A0   298 _P2	=	0x00a0
                           0000B0   299 _P3	=	0x00b0
                           000096   300 _P3_MOD_OC	=	0x0096
                           000097   301 _P3_DIR_PU	=	0x0097
                           0000C6   302 _PIN_FUNC	=	0x00c6
                           0000A2   303 _XBUS_AUX	=	0x00a2
                           000088   304 _TCON	=	0x0088
                           000089   305 _TMOD	=	0x0089
                           00008A   306 _TL0	=	0x008a
                           00008B   307 _TL1	=	0x008b
                           00008C   308 _TH0	=	0x008c
                           00008D   309 _TH1	=	0x008d
                           000098   310 _SCON	=	0x0098
                           000099   311 _SBUF	=	0x0099
                           0000C8   312 _T2CON	=	0x00c8
                           0000C9   313 _T2MOD	=	0x00c9
                           00CBCA   314 _RCAP2	=	0xcbca
                           0000CA   315 _RCAP2L	=	0x00ca
                           0000CB   316 _RCAP2H	=	0x00cb
                           00CDCC   317 _T2COUNT	=	0xcdcc
                           0000CC   318 _TL2	=	0x00cc
                           0000CD   319 _TH2	=	0x00cd
                           00CFCE   320 _T2CAP1	=	0xcfce
                           0000CE   321 _T2CAP1L	=	0x00ce
                           0000CF   322 _T2CAP1H	=	0x00cf
                           00009B   323 _PWM_DATA2	=	0x009b
                           00009C   324 _PWM_DATA1	=	0x009c
                           00009D   325 _PWM_CTRL	=	0x009d
                           00009E   326 _PWM_CK_SE	=	0x009e
                           0000F8   327 _SPI0_STAT	=	0x00f8
                           0000F9   328 _SPI0_DATA	=	0x00f9
                           0000FA   329 _SPI0_CTRL	=	0x00fa
                           0000FB   330 _SPI0_CK_SE	=	0x00fb
                           0000FC   331 _SPI0_SETUP	=	0x00fc
                           0000C0   332 _SCON1	=	0x00c0
                           0000C1   333 _SBUF1	=	0x00c1
                           0000C2   334 _SBAUD1	=	0x00c2
                           000080   335 _ADC_CTRL	=	0x0080
                           00009A   336 _ADC_CFG	=	0x009a
                           00009F   337 _ADC_DATA	=	0x009f
                           0000C3   338 _TKEY_CTRL	=	0x00c3
                           00C5C4   339 _TKEY_DAT	=	0xc5c4
                           0000C4   340 _TKEY_DATL	=	0x00c4
                           0000C5   341 _TKEY_DATH	=	0x00c5
                           000091   342 _USB_C_CTRL	=	0x0091
                           0000D1   343 _UDEV_CTRL	=	0x00d1
                           0000D2   344 _UEP1_CTRL	=	0x00d2
                           0000D3   345 _UEP1_T_LEN	=	0x00d3
                           0000D4   346 _UEP2_CTRL	=	0x00d4
                           0000D5   347 _UEP2_T_LEN	=	0x00d5
                           0000D6   348 _UEP3_CTRL	=	0x00d6
                           0000D7   349 _UEP3_T_LEN	=	0x00d7
                           0000D8   350 _USB_INT_FG	=	0x00d8
                           0000D9   351 _USB_INT_ST	=	0x00d9
                           0000DA   352 _USB_MIS_ST	=	0x00da
                           0000DB   353 _USB_RX_LEN	=	0x00db
                           0000DC   354 _UEP0_CTRL	=	0x00dc
                           0000DD   355 _UEP0_T_LEN	=	0x00dd
                           0000DE   356 _UEP4_CTRL	=	0x00de
                           0000DF   357 _UEP4_T_LEN	=	0x00df
                           0000E1   358 _USB_INT_EN	=	0x00e1
                           0000E2   359 _USB_CTRL	=	0x00e2
                           0000E3   360 _USB_DEV_AD	=	0x00e3
                           00E5E4   361 _UEP2_DMA	=	0xe5e4
                           0000E4   362 _UEP2_DMA_L	=	0x00e4
                           0000E5   363 _UEP2_DMA_H	=	0x00e5
                           00E7E6   364 _UEP3_DMA	=	0xe7e6
                           0000E6   365 _UEP3_DMA_L	=	0x00e6
                           0000E7   366 _UEP3_DMA_H	=	0x00e7
                           0000EA   367 _UEP4_1_MOD	=	0x00ea
                           0000EB   368 _UEP2_3_MOD	=	0x00eb
                           00EDEC   369 _UEP0_DMA	=	0xedec
                           0000EC   370 _UEP0_DMA_L	=	0x00ec
                           0000ED   371 _UEP0_DMA_H	=	0x00ed
                           00EFEE   372 _UEP1_DMA	=	0xefee
                           0000EE   373 _UEP1_DMA_L	=	0x00ee
                           0000EF   374 _UEP1_DMA_H	=	0x00ef
                                    375 ;--------------------------------------------------------
                                    376 ; special function bits
                                    377 ;--------------------------------------------------------
                                    378 	.area RSEG    (ABS,DATA)
      000000                        379 	.org 0x0000
                           0000D7   380 _CY	=	0x00d7
                           0000D6   381 _AC	=	0x00d6
                           0000D5   382 _F0	=	0x00d5
                           0000D4   383 _RS1	=	0x00d4
                           0000D3   384 _RS0	=	0x00d3
                           0000D2   385 _OV	=	0x00d2
                           0000D1   386 _F1	=	0x00d1
                           0000D0   387 _P	=	0x00d0
                           0000AF   388 _EA	=	0x00af
                           0000AE   389 _E_DIS	=	0x00ae
                           0000AD   390 _ET2	=	0x00ad
                           0000AC   391 _ES	=	0x00ac
                           0000AB   392 _ET1	=	0x00ab
                           0000AA   393 _EX1	=	0x00aa
                           0000A9   394 _ET0	=	0x00a9
                           0000A8   395 _EX0	=	0x00a8
                           0000BF   396 _PH_FLAG	=	0x00bf
                           0000BE   397 _PL_FLAG	=	0x00be
                           0000BD   398 _PT2	=	0x00bd
                           0000BC   399 _PS	=	0x00bc
                           0000BB   400 _PT1	=	0x00bb
                           0000BA   401 _PX1	=	0x00ba
                           0000B9   402 _PT0	=	0x00b9
                           0000B8   403 _PX0	=	0x00b8
                           0000EF   404 _IE_WDOG	=	0x00ef
                           0000EE   405 _IE_GPIO	=	0x00ee
                           0000ED   406 _IE_PWMX	=	0x00ed
                           0000EC   407 _IE_UART1	=	0x00ec
                           0000EB   408 _IE_ADC	=	0x00eb
                           0000EA   409 _IE_USB	=	0x00ea
                           0000E9   410 _IE_TKEY	=	0x00e9
                           0000E8   411 _IE_SPI0	=	0x00e8
                           000097   412 _SCK	=	0x0097
                           000097   413 _TXD1	=	0x0097
                           000097   414 _TIN5	=	0x0097
                           000096   415 _MISO	=	0x0096
                           000096   416 _RXD1	=	0x0096
                           000096   417 _TIN4	=	0x0096
                           000095   418 _MOSI	=	0x0095
                           000095   419 _PWM1	=	0x0095
                           000095   420 _TIN3	=	0x0095
                           000095   421 _UCC2	=	0x0095
                           000095   422 _AIN2	=	0x0095
                           000094   423 _T2_	=	0x0094
                           000094   424 _CAP1_	=	0x0094
                           000094   425 _SCS	=	0x0094
                           000094   426 _TIN2	=	0x0094
                           000094   427 _UCC1	=	0x0094
                           000094   428 _AIN1	=	0x0094
                           000093   429 _TXD_	=	0x0093
                           000092   430 _RXD_	=	0x0092
                           000091   431 _T2EX	=	0x0091
                           000091   432 _CAP2	=	0x0091
                           000091   433 _TIN1	=	0x0091
                           000091   434 _VBUS2	=	0x0091
                           000091   435 _AIN0	=	0x0091
                           000090   436 _T2	=	0x0090
                           000090   437 _CAP1	=	0x0090
                           000090   438 _TIN0	=	0x0090
                           0000B7   439 _UDM	=	0x00b7
                           0000B6   440 _UDP	=	0x00b6
                           0000B5   441 _T1	=	0x00b5
                           0000B4   442 _PWM2	=	0x00b4
                           0000B4   443 _RXD1_	=	0x00b4
                           0000B4   444 _T0	=	0x00b4
                           0000B3   445 _INT1	=	0x00b3
                           0000B2   446 _TXD1_	=	0x00b2
                           0000B2   447 _INT0	=	0x00b2
                           0000B2   448 _VBUS1	=	0x00b2
                           0000B2   449 _AIN3	=	0x00b2
                           0000B1   450 _PWM2_	=	0x00b1
                           0000B1   451 _TXD	=	0x00b1
                           0000B0   452 _PWM1_	=	0x00b0
                           0000B0   453 _RXD	=	0x00b0
                           00008F   454 _TF1	=	0x008f
                           00008E   455 _TR1	=	0x008e
                           00008D   456 _TF0	=	0x008d
                           00008C   457 _TR0	=	0x008c
                           00008B   458 _IE1	=	0x008b
                           00008A   459 _IT1	=	0x008a
                           000089   460 _IE0	=	0x0089
                           000088   461 _IT0	=	0x0088
                           00009F   462 _SM0	=	0x009f
                           00009E   463 _SM1	=	0x009e
                           00009D   464 _SM2	=	0x009d
                           00009C   465 _REN	=	0x009c
                           00009B   466 _TB8	=	0x009b
                           00009A   467 _RB8	=	0x009a
                           000099   468 _TI	=	0x0099
                           000098   469 _RI	=	0x0098
                           0000CF   470 _TF2	=	0x00cf
                           0000CF   471 _CAP1F	=	0x00cf
                           0000CE   472 _EXF2	=	0x00ce
                           0000CD   473 _RCLK	=	0x00cd
                           0000CC   474 _TCLK	=	0x00cc
                           0000CB   475 _EXEN2	=	0x00cb
                           0000CA   476 _TR2	=	0x00ca
                           0000C9   477 _C_T2	=	0x00c9
                           0000C8   478 _CP_RL2	=	0x00c8
                           0000FF   479 _S0_FST_ACT	=	0x00ff
                           0000FE   480 _S0_IF_OV	=	0x00fe
                           0000FD   481 _S0_IF_FIRST	=	0x00fd
                           0000FC   482 _S0_IF_BYTE	=	0x00fc
                           0000FB   483 _S0_FREE	=	0x00fb
                           0000FA   484 _S0_T_FIFO	=	0x00fa
                           0000F8   485 _S0_R_FIFO	=	0x00f8
                           0000C7   486 _U1SM0	=	0x00c7
                           0000C5   487 _U1SMOD	=	0x00c5
                           0000C4   488 _U1REN	=	0x00c4
                           0000C3   489 _U1TB8	=	0x00c3
                           0000C2   490 _U1RB8	=	0x00c2
                           0000C1   491 _U1TI	=	0x00c1
                           0000C0   492 _U1RI	=	0x00c0
                           000087   493 _CMPO	=	0x0087
                           000086   494 _CMP_IF	=	0x0086
                           000085   495 _ADC_IF	=	0x0085
                           000084   496 _ADC_START	=	0x0084
                           000083   497 _CMP_CHAN	=	0x0083
                           000081   498 _ADC_CHAN1	=	0x0081
                           000080   499 _ADC_CHAN0	=	0x0080
                           0000DF   500 _U_IS_NAK	=	0x00df
                           0000DE   501 _U_TOG_OK	=	0x00de
                           0000DD   502 _U_SIE_FREE	=	0x00dd
                           0000DC   503 _UIF_FIFO_OV	=	0x00dc
                           0000DB   504 _UIF_HST_SOF	=	0x00db
                           0000DA   505 _UIF_SUSPEND	=	0x00da
                           0000D9   506 _UIF_TRANSFER	=	0x00d9
                           0000D8   507 _UIF_DETECT	=	0x00d8
                           0000D8   508 _UIF_BUS_RST	=	0x00d8
                                    509 ;--------------------------------------------------------
                                    510 ; overlayable register banks
                                    511 ;--------------------------------------------------------
                                    512 	.area REG_BANK_0	(REL,OVR,DATA)
      000000                        513 	.ds 8
                                    514 ;--------------------------------------------------------
                                    515 ; internal ram data
                                    516 ;--------------------------------------------------------
                                    517 	.area DSEG    (DATA)
      000000                        518 _USB_SetupReq::
      000000                        519 	.ds 1
      000001                        520 _USB_SetupTyp::
      000001                        521 	.ds 1
      000002                        522 _USB_Config::
      000002                        523 	.ds 1
      000003                        524 _USB_Addr::
      000003                        525 	.ds 1
      000004                        526 _USB_SetupLen::
      000004                        527 	.ds 2
      000006                        528 _USB_pDescr::
      000006                        529 	.ds 2
                                    530 ;--------------------------------------------------------
                                    531 ; overlayable items in internal ram
                                    532 ;--------------------------------------------------------
                                    533 	.area	OSEG    (OVR,DATA)
                                    534 ;--------------------------------------------------------
                                    535 ; indirectly addressable internal ram data
                                    536 ;--------------------------------------------------------
                                    537 	.area ISEG    (DATA)
                                    538 ;--------------------------------------------------------
                                    539 ; absolute internal ram data
                                    540 ;--------------------------------------------------------
                                    541 	.area IABS    (ABS,DATA)
                                    542 	.area IABS    (ABS,DATA)
                                    543 ;--------------------------------------------------------
                                    544 ; bit data
                                    545 ;--------------------------------------------------------
                                    546 	.area BSEG    (BIT)
      000000                        547 _USB_ENUM_OK::
      000000                        548 	.ds 1
      000001                        549 _USB_EP0_SETUP_sloc0_1_0:
      000001                        550 	.ds 1
      000002                        551 _USB_EP0_IN_sloc0_1_0:
      000002                        552 	.ds 1
                                    553 ;--------------------------------------------------------
                                    554 ; paged external ram data
                                    555 ;--------------------------------------------------------
                                    556 	.area PSEG    (PAG,XDATA)
                                    557 ;--------------------------------------------------------
                                    558 ; external ram data
                                    559 ;--------------------------------------------------------
                                    560 	.area XSEG    (XDATA)
                           000000   561 _EP0_buffer	=	0x0000
                           00000A   562 _EP1_buffer	=	0x000a
                                    563 ;--------------------------------------------------------
                                    564 ; absolute external ram data
                                    565 ;--------------------------------------------------------
                                    566 	.area XABS    (ABS,XDATA)
                                    567 ;--------------------------------------------------------
                                    568 ; external initialized ram data
                                    569 ;--------------------------------------------------------
                                    570 	.area HOME    (CODE)
                                    571 	.area GSINIT0 (CODE)
                                    572 	.area GSINIT1 (CODE)
                                    573 	.area GSINIT2 (CODE)
                                    574 	.area GSINIT3 (CODE)
                                    575 	.area GSINIT4 (CODE)
                                    576 	.area GSINIT5 (CODE)
                                    577 	.area GSINIT  (CODE)
                                    578 	.area GSFINAL (CODE)
                                    579 	.area CSEG    (CODE)
                                    580 ;--------------------------------------------------------
                                    581 ; global & static initialisations
                                    582 ;--------------------------------------------------------
                                    583 	.area HOME    (CODE)
                                    584 	.area GSINIT  (CODE)
                                    585 	.area GSFINAL (CODE)
                                    586 	.area GSINIT  (CODE)
                                    587 ;--------------------------------------------------------
                                    588 ; Home
                                    589 ;--------------------------------------------------------
                                    590 	.area HOME    (CODE)
                                    591 	.area HOME    (CODE)
                                    592 ;--------------------------------------------------------
                                    593 ; code
                                    594 ;--------------------------------------------------------
                                    595 	.area CSEG    (CODE)
                                    596 ;------------------------------------------------------------
                                    597 ;Allocation info for local variables in function 'USB_EP_init'
                                    598 ;------------------------------------------------------------
                                    599 ;	src/usb_handler.c:21: void USB_EP_init(void) {
                                    600 ;	-----------------------------------------
                                    601 ;	 function USB_EP_init
                                    602 ;	-----------------------------------------
      000000                        603 _USB_EP_init:
                           000007   604 	ar7 = 0x07
                           000006   605 	ar6 = 0x06
                           000005   606 	ar5 = 0x05
                           000004   607 	ar4 = 0x04
                           000003   608 	ar3 = 0x03
                           000002   609 	ar2 = 0x02
                           000001   610 	ar1 = 0x01
                           000000   611 	ar0 = 0x00
                                    612 ;	src/usb_handler.c:22: UEP0_DMA    = (uint16_t)EP0_buffer;       // EP0 data transfer address
      000000 7E 00            [12]  613 	mov	r6,#_EP0_buffer
      000002 7F 00            [12]  614 	mov	r7,#(_EP0_buffer >> 8)
      000004 8E EC            [24]  615 	mov	((_UEP0_DMA >> 0) & 0xFF),r6
      000006 8F ED            [24]  616 	mov	((_UEP0_DMA >> 8) & 0xFF),r7
                                    617 ;	src/usb_handler.c:24: | UEP_T_RES_NAK;              // EP0 IN transaction returns NAK
      000008 75 DC 02         [24]  618 	mov	_UEP0_CTRL,#0x02
                                    619 ;	src/usb_handler.c:25: UEP0_T_LEN  = 0;                          // must be zero at start
      00000B 75 DD 00         [24]  620 	mov	_UEP0_T_LEN,#0x00
                                    621 ;	src/usb_handler.c:26: USB_ENUM_OK = 0;                          // reset ENUM flag
                                    622 ;	assignBit
      00000E C2*00            [12]  623 	clr	_USB_ENUM_OK
                                    624 ;	src/usb_handler.c:29: USB_INIT_endpoints();                     // custom EP init handler
                                    625 ;	src/usb_handler.c:31: }
      000010 02r00r00         [24]  626 	ljmp	_HID_EP_init
                                    627 ;------------------------------------------------------------
                                    628 ;Allocation info for local variables in function 'USB_init'
                                    629 ;------------------------------------------------------------
                                    630 ;	src/usb_handler.c:36: void USB_init(void) {
                                    631 ;	-----------------------------------------
                                    632 ;	 function USB_init
                                    633 ;	-----------------------------------------
      000013                        634 _USB_init:
                                    635 ;	src/usb_handler.c:39: | bUC_DMA_EN;                 // DMA enable
      000013 75 E2 29         [24]  636 	mov	_USB_CTRL,#0x29
                                    637 ;	src/usb_handler.c:41: | bUD_PORT_EN;                // enable port, full-speed
      000016 75 D1 81         [24]  638 	mov	_UDEV_CTRL,#0x81
                                    639 ;	src/usb_handler.c:43: USB_EP_init();                            // setup endpoints
      000019 12r00r00         [24]  640 	lcall	_USB_EP_init
                                    641 ;	src/usb_handler.c:47: | bUIE_BUS_RST;               // enable device mode USB bus reset interrupt
      00001C 75 E1 07         [24]  642 	mov	_USB_INT_EN,#0x07
                                    643 ;	src/usb_handler.c:49: USB_INT_FG  = 0x1f;                       // clear interrupt flags
      00001F 75 D8 1F         [24]  644 	mov	_USB_INT_FG,#0x1f
                                    645 ;	src/usb_handler.c:50: IE_USB      = 1;                          // enable USB interrupt
                                    646 ;	assignBit
      000022 D2 EA            [12]  647 	setb	_IE_USB
                                    648 ;	src/usb_handler.c:51: EA          = 1;                          // enable global interrupts
                                    649 ;	assignBit
      000024 D2 AF            [12]  650 	setb	_EA
                                    651 ;	src/usb_handler.c:52: }
      000026 22               [24]  652 	ret
                                    653 ;------------------------------------------------------------
                                    654 ;Allocation info for local variables in function 'USB_EP0_copyDescr'
                                    655 ;------------------------------------------------------------
                                    656 ;len                       Allocated to registers 
                                    657 ;------------------------------------------------------------
                                    658 ;	src/usb_handler.c:60: void USB_EP0_copyDescr(uint8_t len) {
                                    659 ;	-----------------------------------------
                                    660 ;	 function USB_EP0_copyDescr
                                    661 ;	-----------------------------------------
      000027                        662 _USB_EP0_copyDescr:
                                    663 ;	src/usb_handler.c:81: __endasm;
      000027 C0 E0            [24]  664 	push	acc ; acc -> stack
      000029 C0 07            [24]  665 	push	ar7 ; r7 -> stack
      00002B AF 82            [24]  666 	mov	r7, dpl ; r7 <- len
      00002D 05 A2            [12]  667 	inc	_XBUS_AUX ; select dptr1
      00002F 90 00 00         [24]  668 	mov	dptr, #_EP0_buffer ; dptr1 <- EP0_buffer
      000032 15 A2            [12]  669 	dec	_XBUS_AUX ; select dptr0
      000034 85*06 82         [24]  670 	mov	dpl, _USB_pDescr ; dptr0 <- *USB_pDescr
      000037 85*07 83         [24]  671 	mov	dph, (_USB_pDescr + 1)
      00003A                        672 	    01$:
      00003A E4               [12]  673 	clr	a ; acc <- #0
      00003B 93               [24]  674 	movc	a, @a+dptr ; acc <- *USB_pDescr[dptr0]
      00003C A3               [24]  675 	inc	dptr ; inc dptr0
      00003D A5                     676 	.db	0xA5 ; acc -> EP0_buffer[dptr1] & inc dptr1
      00003E DF FA            [24]  677 	djnz	r7, 01$ ; repeat len times
      000040 85 82*06         [24]  678 	mov	_USB_pDescr, dpl ; USB_pDescr += len
      000043 85 83*07         [24]  679 	mov	(_USB_pDescr + 1), dph
      000046 D0 07            [24]  680 	pop	ar7 ; r7 <- stack
      000048 D0 E0            [24]  681 	pop	acc ; acc <- stack
                                    682 ;	src/usb_handler.c:82: }
      00004A 22               [24]  683 	ret
                                    684 ;------------------------------------------------------------
                                    685 ;Allocation info for local variables in function 'USB_EP0_SETUP'
                                    686 ;------------------------------------------------------------
                                    687 ;len                       Allocated to registers r7 
                                    688 ;------------------------------------------------------------
                                    689 ;	src/usb_handler.c:89: void USB_EP0_SETUP(void) {
                                    690 ;	-----------------------------------------
                                    691 ;	 function USB_EP0_SETUP
                                    692 ;	-----------------------------------------
      00004B                        693 _USB_EP0_SETUP:
                                    694 ;	src/usb_handler.c:90: uint8_t len = 0;                                // default is success and upload 0 length
      00004B 7F 00            [12]  695 	mov	r7,#0x00
                                    696 ;	src/usb_handler.c:91: USB_SetupLen = ((uint16_t)USB_SetupBuf->wLengthH<<8) | (USB_SetupBuf->wLengthL);
      00004D 90 00 07         [24]  697 	mov	dptr,#(_EP0_buffer + 0x0007)
      000050 E0               [24]  698 	movx	a,@dptr
      000051 FD               [12]  699 	mov	r5,a
      000052 7E 00            [12]  700 	mov	r6,#0x00
      000054 90 00 06         [24]  701 	mov	dptr,#(_EP0_buffer + 0x0006)
      000057 E0               [24]  702 	movx	a,@dptr
      000058 FC               [12]  703 	mov	r4,a
      000059 7B 00            [12]  704 	mov	r3,#0x00
      00005B 4E               [12]  705 	orl	a,r6
      00005C F5*04            [12]  706 	mov	_USB_SetupLen,a
      00005E EB               [12]  707 	mov	a,r3
      00005F 4D               [12]  708 	orl	a,r5
      000060 F5*05            [12]  709 	mov	(_USB_SetupLen + 1),a
                                    710 ;	src/usb_handler.c:92: USB_SetupReq = USB_SetupBuf->bRequest;
      000062 90 00 01         [24]  711 	mov	dptr,#(_EP0_buffer + 0x0001)
      000065 E0               [24]  712 	movx	a,@dptr
      000066 F5*00            [12]  713 	mov	_USB_SetupReq,a
                                    714 ;	src/usb_handler.c:93: USB_SetupTyp = USB_SetupBuf->bRequestType;
      000068 90 00 00         [24]  715 	mov	dptr,#_EP0_buffer
      00006B E0               [24]  716 	movx	a,@dptr
      00006C F5*01            [12]  717 	mov	_USB_SetupTyp,a
                                    718 ;	src/usb_handler.c:95: if((USB_SetupTyp & USB_REQ_TYP_MASK) == USB_REQ_TYP_STANDARD) {
      00006E E5*01            [12]  719 	mov	a,_USB_SetupTyp
      000070 54 60            [12]  720 	anl	a,#0x60
      000072 60 03            [24]  721 	jz	00289$
      000074 02r02r8E         [24]  722 	ljmp	00171$
      000077                        723 00289$:
                                    724 ;	src/usb_handler.c:96: switch(USB_SetupReq) {                        // request type
      000077 E5*00            [12]  725 	mov	a,_USB_SetupReq
      000079 FE               [12]  726 	mov	r6,a
      00007A 24 F4            [12]  727 	add	a,#0xff - 0x0b
      00007C 50 03            [24]  728 	jnc	00290$
      00007E 02r02r8A         [24]  729 	ljmp	00168$
      000081                        730 00290$:
      000081 EE               [12]  731 	mov	a,r6
      000082 F5 F0            [12]  732 	mov	b,a
      000084 24 0B            [12]  733 	add	a,#(00291$-3-.)
      000086 83               [24]  734 	movc	a,@a+pc
      000087 F5 82            [12]  735 	mov	dpl,a
      000089 E5 F0            [12]  736 	mov	a,b
      00008B 24 10            [12]  737 	add	a,#(00292$-3-.)
      00008D 83               [24]  738 	movc	a,@a+pc
      00008E F5 83            [12]  739 	mov	dph,a
      000090 E4               [12]  740 	clr	a
      000091 73               [24]  741 	jmp	@a+dptr
      000092                        742 00291$:
      000092rB1                     743 	.db	00129$
      000093rD1                     744 	.db	00132$
      000094r8A                     745 	.db	00168$
      000095r29                     746 	.db	00149$
      000096r8A                     747 	.db	00168$
      000097r80                     748 	.db	00122$
      000098rAA                     749 	.db	00101$
      000099r8A                     750 	.db	00168$
      00009Ar89                     751 	.db	00123$
      00009BrA6                     752 	.db	00126$
      00009Cr90                     753 	.db	00172$
      00009Dr90                     754 	.db	00172$
      00009E                        755 00292$:
      00009Es01                     756 	.db	00129$>>8
      00009Fs01                     757 	.db	00132$>>8
      0000A0s02                     758 	.db	00168$>>8
      0000A1s02                     759 	.db	00149$>>8
      0000A2s02                     760 	.db	00168$>>8
      0000A3s01                     761 	.db	00122$>>8
      0000A4s00                     762 	.db	00101$>>8
      0000A5s02                     763 	.db	00168$>>8
      0000A6s01                     764 	.db	00123$>>8
      0000A7s01                     765 	.db	00126$>>8
      0000A8s02                     766 	.db	00172$>>8
      0000A9s02                     767 	.db	00172$>>8
                                    768 ;	src/usb_handler.c:97: case USB_GET_DESCRIPTOR:
      0000AA                        769 00101$:
                                    770 ;	src/usb_handler.c:98: switch(USB_SetupBuf->wValueH) {
      0000AA 90 00 03         [24]  771 	mov	dptr,#(_EP0_buffer + 0x0003)
      0000AD E0               [24]  772 	movx	a,@dptr
      0000AE FE               [12]  773 	mov	r6,a
      0000AF BE 01 02         [24]  774 	cjne	r6,#0x01,00293$
      0000B2 80 12            [24]  775 	sjmp	00102$
      0000B4                        776 00293$:
      0000B4 BE 02 02         [24]  777 	cjne	r6,#0x02,00294$
      0000B7 80 17            [24]  778 	sjmp	00103$
      0000B9                        779 00294$:
      0000B9 BE 03 02         [24]  780 	cjne	r6,#0x03,00295$
      0000BC 80 1C            [24]  781 	sjmp	00104$
      0000BE                        782 00295$:
      0000BE BE 22 02         [24]  783 	cjne	r6,#0x22,00296$
      0000C1 80 69            [24]  784 	sjmp	00112$
      0000C3                        785 00296$:
      0000C3 02r01r44         [24]  786 	ljmp	00116$
                                    787 ;	src/usb_handler.c:100: case USB_DESCR_TYP_DEVICE:              // Device Descriptor
      0000C6                        788 00102$:
                                    789 ;	src/usb_handler.c:101: USB_pDescr = (uint8_t*)&DevDescr;     // put descriptor into out buffer
      0000C6 75*06r00         [24]  790 	mov	_USB_pDescr,#_DevDescr
      0000C9 75*07s00         [24]  791 	mov	(_USB_pDescr + 1),#(_DevDescr >> 8)
                                    792 ;	src/usb_handler.c:102: len = sizeof(DevDescr);               // descriptor length
      0000CC 7F 12            [12]  793 	mov	r7,#0x12
                                    794 ;	src/usb_handler.c:103: break;
                                    795 ;	src/usb_handler.c:105: case USB_DESCR_TYP_CONFIG:              // Configuration Descriptor
      0000CE 80 76            [24]  796 	sjmp	00117$
      0000D0                        797 00103$:
                                    798 ;	src/usb_handler.c:106: USB_pDescr = (uint8_t*)&CfgDescr;     // put descriptor into out buffer
      0000D0 75*06r00         [24]  799 	mov	_USB_pDescr,#_CfgDescr
      0000D3 75*07s00         [24]  800 	mov	(_USB_pDescr + 1),#(_CfgDescr >> 8)
                                    801 ;	src/usb_handler.c:107: len = sizeof(CfgDescr);               // descriptor length
      0000D6 7F 29            [12]  802 	mov	r7,#0x29
                                    803 ;	src/usb_handler.c:108: break;
                                    804 ;	src/usb_handler.c:110: case USB_DESCR_TYP_STRING:
      0000D8 80 6C            [24]  805 	sjmp	00117$
      0000DA                        806 00104$:
                                    807 ;	src/usb_handler.c:111: switch(USB_SetupBuf->wValueL) {       // String Descriptor Index
      0000DA 90 00 02         [24]  808 	mov	dptr,#(_EP0_buffer + 0x0002)
      0000DD E0               [24]  809 	movx	a,@dptr
      0000DE FE               [12]  810 	mov  r6,a
      0000DF 24 FB            [12]  811 	add	a,#0xff - 0x04
      0000E1 40 38            [24]  812 	jc	00110$
      0000E3 EE               [12]  813 	mov	a,r6
      0000E4 2E               [12]  814 	add	a,r6
                                    815 ;	src/usb_handler.c:112: case 0:   USB_pDescr = USB_STR_DESCR_i0; break;
      0000E5 90r00rE9         [24]  816 	mov	dptr,#00298$
      0000E8 73               [24]  817 	jmp	@a+dptr
      0000E9                        818 00298$:
      0000E9 80 08            [24]  819 	sjmp	00105$
      0000EB 80 0E            [24]  820 	sjmp	00106$
      0000ED 80 14            [24]  821 	sjmp	00107$
      0000EF 80 1A            [24]  822 	sjmp	00108$
      0000F1 80 20            [24]  823 	sjmp	00109$
      0000F3                        824 00105$:
      0000F3 75*06r00         [24]  825 	mov	_USB_pDescr,#_LangDescr
      0000F6 75*07s00         [24]  826 	mov	(_USB_pDescr + 1),#(_LangDescr >> 8)
                                    827 ;	src/usb_handler.c:113: case 1:   USB_pDescr = USB_STR_DESCR_i1; break;
      0000F9 80 26            [24]  828 	sjmp	00111$
      0000FB                        829 00106$:
      0000FB 75*06r00         [24]  830 	mov	_USB_pDescr,#_ManufDescr
      0000FE 75*07s00         [24]  831 	mov	(_USB_pDescr + 1),#(_ManufDescr >> 8)
                                    832 ;	src/usb_handler.c:114: case 2:   USB_pDescr = USB_STR_DESCR_i2; break;
      000101 80 1E            [24]  833 	sjmp	00111$
      000103                        834 00107$:
      000103 75*06r00         [24]  835 	mov	_USB_pDescr,#_ProdDescr
      000106 75*07s00         [24]  836 	mov	(_USB_pDescr + 1),#(_ProdDescr >> 8)
                                    837 ;	src/usb_handler.c:115: case 3:   USB_pDescr = USB_STR_DESCR_i3; break;
      000109 80 16            [24]  838 	sjmp	00111$
      00010B                        839 00108$:
      00010B 75*06r00         [24]  840 	mov	_USB_pDescr,#_SerDescr
      00010E 75*07s00         [24]  841 	mov	(_USB_pDescr + 1),#(_SerDescr >> 8)
                                    842 ;	src/usb_handler.c:117: case 4:   USB_pDescr = USB_STR_DESCR_i4; break;
      000111 80 0E            [24]  843 	sjmp	00111$
      000113                        844 00109$:
      000113 75*06r00         [24]  845 	mov	_USB_pDescr,#_InterfDescr
      000116 75*07s00         [24]  846 	mov	(_USB_pDescr + 1),#(_InterfDescr >> 8)
                                    847 ;	src/usb_handler.c:137: default:  USB_pDescr = USB_STR_DESCR_ix; break;
      000119 80 06            [24]  848 	sjmp	00111$
      00011B                        849 00110$:
      00011B 75*06r00         [24]  850 	mov	_USB_pDescr,#_SerDescr
      00011E 75*07s00         [24]  851 	mov	(_USB_pDescr + 1),#(_SerDescr >> 8)
                                    852 ;	src/usb_handler.c:138: }
      000121                        853 00111$:
                                    854 ;	src/usb_handler.c:139: len = USB_pDescr[0];                  // descriptor length
      000121 85*06 82         [24]  855 	mov	dpl,_USB_pDescr
      000124 85*07 83         [24]  856 	mov	dph,(_USB_pDescr + 1)
      000127 E4               [12]  857 	clr	a
      000128 93               [24]  858 	movc	a,@a+dptr
      000129 FF               [12]  859 	mov	r7,a
                                    860 ;	src/usb_handler.c:140: break;
                                    861 ;	src/usb_handler.c:143: case USB_DESCR_TYP_REPORT:
      00012A 80 1A            [24]  862 	sjmp	00117$
      00012C                        863 00112$:
                                    864 ;	src/usb_handler.c:144: if(USB_SetupBuf->wValueL == 0) {
      00012C 90 00 02         [24]  865 	mov	dptr,#(_EP0_buffer + 0x0002)
      00012F E0               [24]  866 	movx	a,@dptr
      000130 70 0E            [24]  867 	jnz	00114$
                                    868 ;	src/usb_handler.c:145: USB_pDescr = USB_REPORT_DESCR;
      000132 75*06r00         [24]  869 	mov	_USB_pDescr,#_ReportDescr
      000135 75*07s00         [24]  870 	mov	(_USB_pDescr + 1),#(_ReportDescr >> 8)
                                    871 ;	src/usb_handler.c:146: len = USB_REPORT_DESCR_LEN;
      000138 90r00r00         [24]  872 	mov	dptr,#_ReportDescrLen
      00013B E4               [12]  873 	clr	a
      00013C 93               [24]  874 	movc	a,@a+dptr
      00013D FF               [12]  875 	mov	r7,a
      00013E 80 06            [24]  876 	sjmp	00117$
      000140                        877 00114$:
                                    878 ;	src/usb_handler.c:148: else len = 0xff;
      000140 7F FF            [12]  879 	mov	r7,#0xff
                                    880 ;	src/usb_handler.c:149: break;
                                    881 ;	src/usb_handler.c:152: default:
      000142 80 02            [24]  882 	sjmp	00117$
      000144                        883 00116$:
                                    884 ;	src/usb_handler.c:153: len = 0xff;                           // unsupported descriptors or error
      000144 7F FF            [12]  885 	mov	r7,#0xff
                                    886 ;	src/usb_handler.c:155: }
      000146                        887 00117$:
                                    888 ;	src/usb_handler.c:157: if(len != 0xff) {
      000146 BF FF 03         [24]  889 	cjne	r7,#0xff,00300$
      000149 02r02r90         [24]  890 	ljmp	00172$
      00014C                        891 00300$:
                                    892 ;	src/usb_handler.c:158: if(USB_SetupLen > len) USB_SetupLen = len;    // limit length
      00014C 8F 05            [24]  893 	mov	ar5,r7
      00014E 7E 00            [12]  894 	mov	r6,#0x00
      000150 C3               [12]  895 	clr	c
      000151 ED               [12]  896 	mov	a,r5
      000152 95*04            [12]  897 	subb	a,_USB_SetupLen
      000154 EE               [12]  898 	mov	a,r6
      000155 95*05            [12]  899 	subb	a,(_USB_SetupLen + 1)
      000157 50 04            [24]  900 	jnc	00119$
      000159 8D*04            [24]  901 	mov	_USB_SetupLen,r5
      00015B 8E*05            [24]  902 	mov	(_USB_SetupLen + 1),r6
      00015D                        903 00119$:
                                    904 ;	src/usb_handler.c:159: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
      00015D AD*04            [24]  905 	mov	r5,_USB_SetupLen
      00015F AE*05            [24]  906 	mov	r6,(_USB_SetupLen + 1)
      000161 C3               [12]  907 	clr	c
      000162 ED               [12]  908 	mov	a,r5
      000163 94 08            [12]  909 	subb	a,#0x08
      000165 EE               [12]  910 	mov	a,r6
      000166 94 00            [12]  911 	subb	a,#0x00
      000168 92*01            [24]  912 	mov	_USB_EP0_SETUP_sloc0_1_0,c
      00016A 40 06            [24]  913 	jc	00178$
      00016C 7D 08            [12]  914 	mov	r5,#0x08
      00016E 7E 00            [12]  915 	mov	r6,#0x00
      000170 80 04            [24]  916 	sjmp	00179$
      000172                        917 00178$:
      000172 AD*04            [24]  918 	mov	r5,_USB_SetupLen
      000174 AE*05            [24]  919 	mov	r6,(_USB_SetupLen + 1)
      000176                        920 00179$:
      000176 8D 07            [24]  921 	mov	ar7,r5
                                    922 ;	src/usb_handler.c:160: USB_EP0_copyDescr(len);                 // copy descriptor to EP0
      000178 8F 82            [24]  923 	mov	dpl,r7
      00017A 12r00r27         [24]  924 	lcall	_USB_EP0_copyDescr
                                    925 ;	src/usb_handler.c:162: break;
      00017D 02r02r90         [24]  926 	ljmp	00172$
                                    927 ;	src/usb_handler.c:164: case USB_SET_ADDRESS:
      000180                        928 00122$:
                                    929 ;	src/usb_handler.c:165: USB_Addr = USB_SetupBuf->wValueL;        // save the assigned address
      000180 90 00 02         [24]  930 	mov	dptr,#(_EP0_buffer + 0x0002)
      000183 E0               [24]  931 	movx	a,@dptr
      000184 F5*03            [12]  932 	mov	_USB_Addr,a
                                    933 ;	src/usb_handler.c:166: break;
      000186 02r02r90         [24]  934 	ljmp	00172$
                                    935 ;	src/usb_handler.c:168: case USB_GET_CONFIGURATION:
      000189                        936 00123$:
                                    937 ;	src/usb_handler.c:169: EP0_buffer[0] = USB_Config;
      000189 90 00 00         [24]  938 	mov	dptr,#_EP0_buffer
      00018C E5*02            [12]  939 	mov	a,_USB_Config
      00018E F0               [24]  940 	movx	@dptr,a
                                    941 ;	src/usb_handler.c:170: if(USB_SetupLen > 1) USB_SetupLen = 1;
      00018F AD*04            [24]  942 	mov	r5,_USB_SetupLen
      000191 AE*05            [24]  943 	mov	r6,(_USB_SetupLen + 1)
      000193 C3               [12]  944 	clr	c
      000194 74 01            [12]  945 	mov	a,#0x01
      000196 9D               [12]  946 	subb	a,r5
      000197 E4               [12]  947 	clr	a
      000198 9E               [12]  948 	subb	a,r6
      000199 50 06            [24]  949 	jnc	00125$
      00019B 75*04 01         [24]  950 	mov	_USB_SetupLen,#0x01
      00019E 75*05 00         [24]  951 	mov	(_USB_SetupLen + 1),#0x00
      0001A1                        952 00125$:
                                    953 ;	src/usb_handler.c:171: len = USB_SetupLen;
      0001A1 AF*04            [24]  954 	mov	r7,_USB_SetupLen
                                    955 ;	src/usb_handler.c:172: break;
      0001A3 02r02r90         [24]  956 	ljmp	00172$
                                    957 ;	src/usb_handler.c:174: case USB_SET_CONFIGURATION:
      0001A6                        958 00126$:
                                    959 ;	src/usb_handler.c:175: USB_Config  = USB_SetupBuf->wValueL;
      0001A6 90 00 02         [24]  960 	mov	dptr,#(_EP0_buffer + 0x0002)
      0001A9 E0               [24]  961 	movx	a,@dptr
      0001AA F5*02            [12]  962 	mov	_USB_Config,a
                                    963 ;	src/usb_handler.c:176: USB_ENUM_OK = 1;
                                    964 ;	assignBit
      0001AC D2*00            [12]  965 	setb	_USB_ENUM_OK
                                    966 ;	src/usb_handler.c:177: break;
      0001AE 02r02r90         [24]  967 	ljmp	00172$
                                    968 ;	src/usb_handler.c:185: case USB_GET_STATUS:
      0001B1                        969 00129$:
                                    970 ;	src/usb_handler.c:186: EP0_buffer[0] = 0x00;
      0001B1 90 00 00         [24]  971 	mov	dptr,#_EP0_buffer
      0001B4 E4               [12]  972 	clr	a
      0001B5 F0               [24]  973 	movx	@dptr,a
                                    974 ;	src/usb_handler.c:187: EP0_buffer[1] = 0x00;
      0001B6 90 00 01         [24]  975 	mov	dptr,#(_EP0_buffer + 0x0001)
      0001B9 F0               [24]  976 	movx	@dptr,a
                                    977 ;	src/usb_handler.c:188: if(USB_SetupLen > 2) USB_SetupLen = 2;
      0001BA AD*04            [24]  978 	mov	r5,_USB_SetupLen
      0001BC AE*05            [24]  979 	mov	r6,(_USB_SetupLen + 1)
      0001BE C3               [12]  980 	clr	c
      0001BF 74 02            [12]  981 	mov	a,#0x02
      0001C1 9D               [12]  982 	subb	a,r5
      0001C2 E4               [12]  983 	clr	a
      0001C3 9E               [12]  984 	subb	a,r6
      0001C4 50 06            [24]  985 	jnc	00131$
      0001C6 75*04 02         [24]  986 	mov	_USB_SetupLen,#0x02
      0001C9 75*05 00         [24]  987 	mov	(_USB_SetupLen + 1),#0x00
      0001CC                        988 00131$:
                                    989 ;	src/usb_handler.c:189: len = USB_SetupLen;
      0001CC AF*04            [24]  990 	mov	r7,_USB_SetupLen
                                    991 ;	src/usb_handler.c:190: break;
      0001CE 02r02r90         [24]  992 	ljmp	00172$
                                    993 ;	src/usb_handler.c:192: case USB_CLEAR_FEATURE:
      0001D1                        994 00132$:
                                    995 ;	src/usb_handler.c:193: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
      0001D1 E5*01            [12]  996 	mov	a,_USB_SetupTyp
      0001D3 54 1F            [12]  997 	anl	a,#0x1f
      0001D5 70 1E            [24]  998 	jnz	00147$
                                    999 ;	src/usb_handler.c:194: if(USB_SetupBuf->wValueL == 0x01) {
      0001D7 90 00 02         [24] 1000 	mov	dptr,#(_EP0_buffer + 0x0002)
      0001DA E0               [24] 1001 	movx	a,@dptr
      0001DB FE               [12] 1002 	mov	r6,a
      0001DC BE 01 11         [24] 1003 	cjne	r6,#0x01,00137$
                                   1004 ;	src/usb_handler.c:195: if(((uint8_t*)&CfgDescr)[7] & 0x20) {
      0001DF 90r00r07         [24] 1005 	mov	dptr,#(_CfgDescr + 0x0007)
      0001E2 E4               [12] 1006 	clr	a
      0001E3 93               [24] 1007 	movc	a,@a+dptr
      0001E4 FE               [12] 1008 	mov	r6,a
      0001E5 30 E5 03         [24] 1009 	jnb	acc.5,00309$
      0001E8 02r02r90         [24] 1010 	ljmp	00172$
      0001EB                       1011 00309$:
                                   1012 ;	src/usb_handler.c:198: else len = 0xff;               // failed
      0001EB 7F FF            [12] 1013 	mov	r7,#0xff
      0001ED 02r02r90         [24] 1014 	ljmp	00172$
      0001F0                       1015 00137$:
                                   1016 ;	src/usb_handler.c:200: else len = 0xff;                 // failed
      0001F0 7F FF            [12] 1017 	mov	r7,#0xff
      0001F2 02r02r90         [24] 1018 	ljmp	00172$
      0001F5                       1019 00147$:
                                   1020 ;	src/usb_handler.c:202: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
      0001F5 AD*01            [24] 1021 	mov	r5,_USB_SetupTyp
      0001F7 53 05 1F         [24] 1022 	anl	ar5,#0x1f
      0001FA 7E 00            [12] 1023 	mov	r6,#0x00
      0001FC BD 02 26         [24] 1024 	cjne	r5,#0x02,00144$
      0001FF BE 00 23         [24] 1025 	cjne	r6,#0x00,00144$
                                   1026 ;	src/usb_handler.c:203: switch(USB_SetupBuf->wIndexL) {
      000202 90 00 04         [24] 1027 	mov	dptr,#(_EP0_buffer + 0x0004)
      000205 E0               [24] 1028 	movx	a,@dptr
      000206 FE               [12] 1029 	mov	r6,a
      000207 BE 01 02         [24] 1030 	cjne	r6,#0x01,00312$
      00020A 80 05            [24] 1031 	sjmp	00139$
      00020C                       1032 00312$:
                                   1033 ;	src/usb_handler.c:205: case 0x01:
      00020C BE 81 12         [24] 1034 	cjne	r6,#0x81,00141$
      00020F 80 06            [24] 1035 	sjmp	00140$
      000211                       1036 00139$:
                                   1037 ;	src/usb_handler.c:206: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_R_TOG | MASK_UEP_R_RES)) | UEP_R_RES_ACK;
      000211 53 D2 73         [24] 1038 	anl	_UEP1_CTRL,#0x73
                                   1039 ;	src/usb_handler.c:207: break;
      000214 02r02r90         [24] 1040 	ljmp	00172$
                                   1041 ;	src/usb_handler.c:210: case 0x81:
      000217                       1042 00140$:
                                   1043 ;	src/usb_handler.c:211: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_T_TOG | MASK_UEP_T_RES)) | UEP_T_RES_NAK;
      000217 74 BC            [12] 1044 	mov	a,#0xbc
      000219 55 D2            [12] 1045 	anl	a,_UEP1_CTRL
      00021B 44 02            [12] 1046 	orl	a,#0x02
      00021D F5 D2            [12] 1047 	mov	_UEP1_CTRL,a
                                   1048 ;	src/usb_handler.c:212: break;
                                   1049 ;	src/usb_handler.c:244: default:
      00021F 80 6F            [24] 1050 	sjmp	00172$
      000221                       1051 00141$:
                                   1052 ;	src/usb_handler.c:245: len = 0xff;                 // unsupported endpoint
      000221 7F FF            [12] 1053 	mov	r7,#0xff
                                   1054 ;	src/usb_handler.c:247: }
      000223 80 6B            [24] 1055 	sjmp	00172$
      000225                       1056 00144$:
                                   1057 ;	src/usb_handler.c:249: else len = 0xff;                  // unsupported for non-endpoint
      000225 7F FF            [12] 1058 	mov	r7,#0xff
                                   1059 ;	src/usb_handler.c:250: break;
                                   1060 ;	src/usb_handler.c:252: case USB_SET_FEATURE:
      000227 80 67            [24] 1061 	sjmp	00172$
      000229                       1062 00149$:
                                   1063 ;	src/usb_handler.c:253: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
      000229 E5*01            [12] 1064 	mov	a,_USB_SetupTyp
      00022B 54 1F            [12] 1065 	anl	a,#0x1f
      00022D 70 19            [24] 1066 	jnz	00166$
                                   1067 ;	src/usb_handler.c:254: if(USB_SetupBuf->wValueL == 0x01) {
      00022F 90 00 02         [24] 1068 	mov	dptr,#(_EP0_buffer + 0x0002)
      000232 E0               [24] 1069 	movx	a,@dptr
      000233 FE               [12] 1070 	mov	r6,a
      000234 BE 01 0D         [24] 1071 	cjne	r6,#0x01,00153$
                                   1072 ;	src/usb_handler.c:255: if( !(((uint8_t*)&CfgDescr)[7] & 0x20) ) len = 0xff;  // failed
      000237 90r00r07         [24] 1073 	mov	dptr,#(_CfgDescr + 0x0007)
      00023A E4               [12] 1074 	clr	a
      00023B 93               [24] 1075 	movc	a,@a+dptr
      00023C FE               [12] 1076 	mov	r6,a
      00023D 20 E5 50         [24] 1077 	jb	acc.5,00172$
      000240 7F FF            [12] 1078 	mov	r7,#0xff
      000242 80 4C            [24] 1079 	sjmp	00172$
      000244                       1080 00153$:
                                   1081 ;	src/usb_handler.c:257: else len = 0xff;                                        // failed
      000244 7F FF            [12] 1082 	mov	r7,#0xff
      000246 80 48            [24] 1083 	sjmp	00172$
      000248                       1084 00166$:
                                   1085 ;	src/usb_handler.c:259: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
      000248 AD*01            [24] 1086 	mov	r5,_USB_SetupTyp
      00024A 53 05 1F         [24] 1087 	anl	ar5,#0x1f
      00024D 7E 00            [12] 1088 	mov	r6,#0x00
      00024F BD 02 34         [24] 1089 	cjne	r5,#0x02,00163$
      000252 BE 00 31         [24] 1090 	cjne	r6,#0x00,00163$
                                   1091 ;	src/usb_handler.c:260: if(USB_SetupBuf->wValueL == 0x00) {
      000255 90 00 02         [24] 1092 	mov	dptr,#(_EP0_buffer + 0x0002)
      000258 E0               [24] 1093 	movx	a,@dptr
      000259 70 27            [24] 1094 	jnz	00160$
                                   1095 ;	src/usb_handler.c:261: switch(USB_SetupBuf->wIndexL) {
      00025B 90 00 04         [24] 1096 	mov	dptr,#(_EP0_buffer + 0x0004)
      00025E E0               [24] 1097 	movx	a,@dptr
      00025F FE               [12] 1098 	mov	r6,a
      000260 BE 01 02         [24] 1099 	cjne	r6,#0x01,00322$
      000263 80 05            [24] 1100 	sjmp	00155$
      000265                       1101 00322$:
                                   1102 ;	src/usb_handler.c:263: case 0x01:
      000265 BE 81 16         [24] 1103 	cjne	r6,#0x81,00157$
      000268 80 0A            [24] 1104 	sjmp	00156$
      00026A                       1105 00155$:
                                   1106 ;	src/usb_handler.c:264: UEP1_CTRL = (UEP1_CTRL & ~bUEP_R_TOG) | UEP_R_RES_STALL;
      00026A 74 7F            [12] 1107 	mov	a,#0x7f
      00026C 55 D2            [12] 1108 	anl	a,_UEP1_CTRL
      00026E 44 0C            [12] 1109 	orl	a,#0x0c
      000270 F5 D2            [12] 1110 	mov	_UEP1_CTRL,a
                                   1111 ;	src/usb_handler.c:265: break;
                                   1112 ;	src/usb_handler.c:268: case 0x81:
      000272 80 1C            [24] 1113 	sjmp	00172$
      000274                       1114 00156$:
                                   1115 ;	src/usb_handler.c:269: UEP1_CTRL = (UEP1_CTRL & ~bUEP_T_TOG) | UEP_T_RES_STALL;
      000274 74 BF            [12] 1116 	mov	a,#0xbf
      000276 55 D2            [12] 1117 	anl	a,_UEP1_CTRL
      000278 44 03            [12] 1118 	orl	a,#0x03
      00027A F5 D2            [12] 1119 	mov	_UEP1_CTRL,a
                                   1120 ;	src/usb_handler.c:270: break;
                                   1121 ;	src/usb_handler.c:302: default:
      00027C 80 12            [24] 1122 	sjmp	00172$
      00027E                       1123 00157$:
                                   1124 ;	src/usb_handler.c:303: len = 0xff;               // failed
      00027E 7F FF            [12] 1125 	mov	r7,#0xff
                                   1126 ;	src/usb_handler.c:305: }
      000280 80 0E            [24] 1127 	sjmp	00172$
      000282                       1128 00160$:
                                   1129 ;	src/usb_handler.c:307: else len = 0xff;                // failed
      000282 7F FF            [12] 1130 	mov	r7,#0xff
      000284 80 0A            [24] 1131 	sjmp	00172$
      000286                       1132 00163$:
                                   1133 ;	src/usb_handler.c:309: else len = 0xff;                  // failed
      000286 7F FF            [12] 1134 	mov	r7,#0xff
                                   1135 ;	src/usb_handler.c:310: break;
                                   1136 ;	src/usb_handler.c:312: default:
      000288 80 06            [24] 1137 	sjmp	00172$
      00028A                       1138 00168$:
                                   1139 ;	src/usb_handler.c:313: len = 0xff;                       // failed
      00028A 7F FF            [12] 1140 	mov	r7,#0xff
                                   1141 ;	src/usb_handler.c:315: }
      00028C 80 02            [24] 1142 	sjmp	00172$
      00028E                       1143 00171$:
                                   1144 ;	src/usb_handler.c:330: else len = 0xff;
      00028E 7F FF            [12] 1145 	mov	r7,#0xff
      000290                       1146 00172$:
                                   1147 ;	src/usb_handler.c:332: if(len == 0xff) {                         // stall
      000290 BF FF 07         [24] 1148 	cjne	r7,#0xff,00174$
                                   1149 ;	src/usb_handler.c:333: USB_SetupReq = 0xff;
      000293 75*00 FF         [24] 1150 	mov	_USB_SetupReq,#0xff
                                   1151 ;	src/usb_handler.c:334: UEP0_CTRL  = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_STALL | UEP_T_RES_STALL; // STALL
      000296 75 DC CF         [24] 1152 	mov	_UEP0_CTRL,#0xcf
      000299 22               [24] 1153 	ret
      00029A                       1154 00174$:
                                   1155 ;	src/usb_handler.c:337: USB_SetupLen -= len;
      00029A 8F 05            [24] 1156 	mov	ar5,r7
      00029C 7E 00            [12] 1157 	mov	r6,#0x00
      00029E AB*04            [24] 1158 	mov	r3,_USB_SetupLen
      0002A0 AC*05            [24] 1159 	mov	r4,(_USB_SetupLen + 1)
      0002A2 EB               [12] 1160 	mov	a,r3
      0002A3 C3               [12] 1161 	clr	c
      0002A4 9D               [12] 1162 	subb	a,r5
      0002A5 FB               [12] 1163 	mov	r3,a
      0002A6 EC               [12] 1164 	mov	a,r4
      0002A7 9E               [12] 1165 	subb	a,r6
      0002A8 FC               [12] 1166 	mov	r4,a
      0002A9 8B*04            [24] 1167 	mov	_USB_SetupLen,r3
      0002AB 8C*05            [24] 1168 	mov	(_USB_SetupLen + 1),r4
                                   1169 ;	src/usb_handler.c:338: UEP0_T_LEN    = len;
      0002AD 8F DD            [24] 1170 	mov	_UEP0_T_LEN,r7
                                   1171 ;	src/usb_handler.c:339: UEP0_CTRL     = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_ACK | UEP_T_RES_ACK;
      0002AF 75 DC C0         [24] 1172 	mov	_UEP0_CTRL,#0xc0
                                   1173 ;	src/usb_handler.c:341: }
      0002B2 22               [24] 1174 	ret
                                   1175 ;------------------------------------------------------------
                                   1176 ;Allocation info for local variables in function 'USB_EP0_IN'
                                   1177 ;------------------------------------------------------------
                                   1178 ;len                       Allocated to registers r6 
                                   1179 ;------------------------------------------------------------
                                   1180 ;	src/usb_handler.c:344: void USB_EP0_IN(void) {
                                   1181 ;	-----------------------------------------
                                   1182 ;	 function USB_EP0_IN
                                   1183 ;	-----------------------------------------
      0002B3                       1184 _USB_EP0_IN:
                                   1185 ;	src/usb_handler.c:361: switch(USB_SetupReq) {
      0002B3 AF*00            [24] 1186 	mov	r7,_USB_SetupReq
      0002B5 BF 05 02         [24] 1187 	cjne	r7,#0x05,00121$
      0002B8 80 3A            [24] 1188 	sjmp	00102$
      0002BA                       1189 00121$:
      0002BA BF 06 45         [24] 1190 	cjne	r7,#0x06,00103$
                                   1191 ;	src/usb_handler.c:363: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
      0002BD AE*04            [24] 1192 	mov	r6,_USB_SetupLen
      0002BF AF*05            [24] 1193 	mov	r7,(_USB_SetupLen + 1)
      0002C1 C3               [12] 1194 	clr	c
      0002C2 EE               [12] 1195 	mov	a,r6
      0002C3 94 08            [12] 1196 	subb	a,#0x08
      0002C5 EF               [12] 1197 	mov	a,r7
      0002C6 94 00            [12] 1198 	subb	a,#0x00
      0002C8 92*02            [24] 1199 	mov	_USB_EP0_IN_sloc0_1_0,c
      0002CA 40 06            [24] 1200 	jc	00107$
      0002CC 7E 08            [12] 1201 	mov	r6,#0x08
      0002CE 7F 00            [12] 1202 	mov	r7,#0x00
      0002D0 80 04            [24] 1203 	sjmp	00108$
      0002D2                       1204 00107$:
      0002D2 AE*04            [24] 1205 	mov	r6,_USB_SetupLen
      0002D4 AF*05            [24] 1206 	mov	r7,(_USB_SetupLen + 1)
      0002D6                       1207 00108$:
                                   1208 ;	src/usb_handler.c:364: USB_EP0_copyDescr(len);                     // copy descriptor to EP0                                
      0002D6 8E 82            [24] 1209 	mov	dpl,r6
      0002D8 12r00r27         [24] 1210 	lcall	_USB_EP0_copyDescr
                                   1211 ;	src/usb_handler.c:365: USB_SetupLen -= len;
      0002DB 8E 05            [24] 1212 	mov	ar5,r6
      0002DD 7F 00            [12] 1213 	mov	r7,#0x00
      0002DF AB*04            [24] 1214 	mov	r3,_USB_SetupLen
      0002E1 AC*05            [24] 1215 	mov	r4,(_USB_SetupLen + 1)
      0002E3 EB               [12] 1216 	mov	a,r3
      0002E4 C3               [12] 1217 	clr	c
      0002E5 9D               [12] 1218 	subb	a,r5
      0002E6 FB               [12] 1219 	mov	r3,a
      0002E7 EC               [12] 1220 	mov	a,r4
      0002E8 9F               [12] 1221 	subb	a,r7
      0002E9 FC               [12] 1222 	mov	r4,a
      0002EA 8B*04            [24] 1223 	mov	_USB_SetupLen,r3
      0002EC 8C*05            [24] 1224 	mov	(_USB_SetupLen + 1),r4
                                   1225 ;	src/usb_handler.c:366: UEP0_T_LEN    = len;
      0002EE 8E DD            [24] 1226 	mov	_UEP0_T_LEN,r6
                                   1227 ;	src/usb_handler.c:367: UEP0_CTRL    ^= bUEP_T_TOG;                 // switch between DATA0 and DATA1
      0002F0 63 DC 40         [24] 1228 	xrl	_UEP0_CTRL,#0x40
                                   1229 ;	src/usb_handler.c:368: break;
                                   1230 ;	src/usb_handler.c:370: case USB_SET_ADDRESS:
      0002F3 22               [24] 1231 	ret
      0002F4                       1232 00102$:
                                   1233 ;	src/usb_handler.c:371: USB_DEV_AD = USB_DEV_AD & bUDA_GP_BIT | USB_Addr;
      0002F4 E5 E3            [12] 1234 	mov	a,_USB_DEV_AD
      0002F6 54 80            [12] 1235 	anl	a,#0x80
      0002F8 FF               [12] 1236 	mov	r7,a
      0002F9 E5*03            [12] 1237 	mov	a,_USB_Addr
      0002FB 4F               [12] 1238 	orl	a,r7
      0002FC F5 E3            [12] 1239 	mov	_USB_DEV_AD,a
                                   1240 ;	src/usb_handler.c:372: UEP0_CTRL  = bUEP_R_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
      0002FE 75 DC 82         [24] 1241 	mov	_UEP0_CTRL,#0x82
                                   1242 ;	src/usb_handler.c:373: break;
                                   1243 ;	src/usb_handler.c:375: default:
      000301 22               [24] 1244 	ret
      000302                       1245 00103$:
                                   1246 ;	src/usb_handler.c:376: UEP0_CTRL  = bUEP_R_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
      000302 75 DC 82         [24] 1247 	mov	_UEP0_CTRL,#0x82
                                   1248 ;	src/usb_handler.c:378: }
                                   1249 ;	src/usb_handler.c:379: }
      000305 22               [24] 1250 	ret
                                   1251 ;------------------------------------------------------------
                                   1252 ;Allocation info for local variables in function 'USB_EP0_OUT'
                                   1253 ;------------------------------------------------------------
                                   1254 ;	src/usb_handler.c:382: void USB_EP0_OUT(void) {
                                   1255 ;	-----------------------------------------
                                   1256 ;	 function USB_EP0_OUT
                                   1257 ;	-----------------------------------------
      000306                       1258 _USB_EP0_OUT:
                                   1259 ;	src/usb_handler.c:397: UEP0_CTRL  = bUEP_T_TOG | UEP_T_RES_ACK | UEP_R_RES_ACK;
      000306 75 DC 40         [24] 1260 	mov	_UEP0_CTRL,#0x40
                                   1261 ;	src/usb_handler.c:398: }
      000309 22               [24] 1262 	ret
                                   1263 ;------------------------------------------------------------
                                   1264 ;Allocation info for local variables in function 'USB_interrupt'
                                   1265 ;------------------------------------------------------------
                                   1266 ;callIndex                 Allocated to registers r7 
                                   1267 ;------------------------------------------------------------
                                   1268 ;	src/usb_handler.c:405: void USB_interrupt(void) {
                                   1269 ;	-----------------------------------------
                                   1270 ;	 function USB_interrupt
                                   1271 ;	-----------------------------------------
      00030A                       1272 _USB_interrupt:
                                   1273 ;	src/usb_handler.c:408: if(UIF_TRANSFER) {
      00030A 30 D9 4F         [24] 1274 	jnb	_UIF_TRANSFER,00114$
                                   1275 ;	src/usb_handler.c:410: uint8_t callIndex = USB_INT_ST & MASK_UIS_ENDP;
      00030D E5 D9            [12] 1276 	mov	a,_USB_INT_ST
      00030F 54 0F            [12] 1277 	anl	a,#0x0f
      000311 FF               [12] 1278 	mov	r7,a
                                   1279 ;	src/usb_handler.c:411: switch (USB_INT_ST & MASK_UIS_TOKEN) {
      000312 AD D9            [24] 1280 	mov	r5,_USB_INT_ST
      000314 53 05 30         [24] 1281 	anl	ar5,#0x30
      000317 7E 00            [12] 1282 	mov	r6,#0x00
      000319 BD 00 05         [24] 1283 	cjne	r5,#0x00,00168$
      00031C BE 00 02         [24] 1284 	cjne	r6,#0x00,00168$
      00031F 80 27            [24] 1285 	sjmp	00107$
      000321                       1286 00168$:
      000321 BD 20 05         [24] 1287 	cjne	r5,#0x20,00169$
      000324 BE 00 02         [24] 1288 	cjne	r6,#0x00,00169$
      000327 80 0B            [24] 1289 	sjmp	00102$
      000329                       1290 00169$:
      000329 BD 30 2E         [24] 1291 	cjne	r5,#0x30,00112$
      00032C BE 00 2B         [24] 1292 	cjne	r6,#0x00,00112$
                                   1293 ;	src/usb_handler.c:414: EP0_SETUP_callback();
      00032F 12r00r4B         [24] 1294 	lcall	_USB_EP0_SETUP
                                   1295 ;	src/usb_handler.c:415: break;
                                   1296 ;	src/usb_handler.c:417: case UIS_TOKEN_IN:
      000332 80 26            [24] 1297 	sjmp	00112$
      000334                       1298 00102$:
                                   1299 ;	src/usb_handler.c:418: switch (callIndex) {
      000334 BF 00 02         [24] 1300 	cjne	r7,#0x00,00172$
      000337 80 05            [24] 1301 	sjmp	00103$
      000339                       1302 00172$:
                                   1303 ;	src/usb_handler.c:419: case 0: EP0_IN_callback(); break;
      000339 BF 01 1E         [24] 1304 	cjne	r7,#0x01,00112$
      00033C 80 05            [24] 1305 	sjmp	00104$
      00033E                       1306 00103$:
      00033E 12r02rB3         [24] 1307 	lcall	_USB_EP0_IN
                                   1308 ;	src/usb_handler.c:421: case 1: EP1_IN_callback(); break;
      000341 80 17            [24] 1309 	sjmp	00112$
      000343                       1310 00104$:
      000343 12r00r00         [24] 1311 	lcall	_HID_EP1_IN
                                   1312 ;	src/usb_handler.c:436: case UIS_TOKEN_OUT:
      000346 80 12            [24] 1313 	sjmp	00112$
      000348                       1314 00107$:
                                   1315 ;	src/usb_handler.c:437: switch (callIndex) {
      000348 BF 00 02         [24] 1316 	cjne	r7,#0x00,00174$
      00034B 80 05            [24] 1317 	sjmp	00108$
      00034D                       1318 00174$:
                                   1319 ;	src/usb_handler.c:438: case 0: EP0_OUT_callback(); break;
      00034D BF 01 0A         [24] 1320 	cjne	r7,#0x01,00112$
      000350 80 05            [24] 1321 	sjmp	00109$
      000352                       1322 00108$:
      000352 12r03r06         [24] 1323 	lcall	_USB_EP0_OUT
                                   1324 ;	src/usb_handler.c:440: case 1: EP1_OUT_callback(); break;
      000355 80 03            [24] 1325 	sjmp	00112$
      000357                       1326 00109$:
      000357 12r00r00         [24] 1327 	lcall	_HID_EP1_OUT
                                   1328 ;	src/usb_handler.c:454: }
      00035A                       1329 00112$:
                                   1330 ;	src/usb_handler.c:455: UIF_TRANSFER = 0;                       // clear interrupt flag
                                   1331 ;	assignBit
      00035A C2 D9            [12] 1332 	clr	_UIF_TRANSFER
      00035C                       1333 00114$:
                                   1334 ;	src/usb_handler.c:459: if(UIF_SUSPEND) {
                                   1335 ;	src/usb_handler.c:460: UIF_SUSPEND = 0;                        // clear interrupt flag
                                   1336 ;	assignBit
      00035C 10 DA 02         [24] 1337 	jbc	_UIF_SUSPEND,00176$
      00035F 80 1A            [24] 1338 	sjmp	00118$
      000361                       1339 00176$:
                                   1340 ;	src/usb_handler.c:462: if(USB_MIS_ST & bUMS_SUSPEND) {
      000361 E5 DA            [12] 1341 	mov	a,_USB_MIS_ST
      000363 30 E2 15         [24] 1342 	jnb	acc.2,00118$
                                   1343 ;	src/usb_handler.c:463: SAFE_MOD   = 0x55;
      000366 75 A1 55         [24] 1344 	mov	_SAFE_MOD,#0x55
                                   1345 ;	src/usb_handler.c:464: SAFE_MOD   = 0xAA;
      000369 75 A1 AA         [24] 1346 	mov	_SAFE_MOD,#0xaa
                                   1347 ;	src/usb_handler.c:465: WAKE_CTRL |= bWAK_BY_USB;             // enable wakeup by USB
      00036C 43 A9 80         [24] 1348 	orl	_WAKE_CTRL,#0x80
                                   1349 ;	src/usb_handler.c:466: USB_SUSPEND_handler();                // custom suspend handler (PCON |= PD;)
      00036F 12r00r00         [24] 1350 	lcall	_ring_probe_release
                                   1351 ;	src/usb_handler.c:467: SAFE_MOD   = 0x55;
      000372 75 A1 55         [24] 1352 	mov	_SAFE_MOD,#0x55
                                   1353 ;	src/usb_handler.c:468: SAFE_MOD   = 0xAA;
      000375 75 A1 AA         [24] 1354 	mov	_SAFE_MOD,#0xaa
                                   1355 ;	src/usb_handler.c:469: WAKE_CTRL &= ~bWAK_BY_USB;            // disable wakeup by USB
      000378 53 A9 7F         [24] 1356 	anl	_WAKE_CTRL,#0x7f
      00037B                       1357 00118$:
                                   1358 ;	src/usb_handler.c:475: if(UIF_BUS_RST) {
      00037B 30 D8 0C         [24] 1359 	jnb	_UIF_BUS_RST,00121$
                                   1360 ;	src/usb_handler.c:477: USB_RESET_handler();                    // custom reset handler
      00037E 12r00r00         [24] 1361 	lcall	_ring_probe_release
                                   1362 ;	src/usb_handler.c:479: USB_EP_init();                          // reset endpoints
      000381 12r00r00         [24] 1363 	lcall	_USB_EP_init
                                   1364 ;	src/usb_handler.c:480: USB_DEV_AD = 0x00;                      // reset device address
      000384 75 E3 00         [24] 1365 	mov	_USB_DEV_AD,#0x00
                                   1366 ;	src/usb_handler.c:481: USB_INT_FG = 0x1f;                      // clear all interrupt flags
      000387 75 D8 1F         [24] 1367 	mov	_USB_INT_FG,#0x1f
      00038A                       1368 00121$:
                                   1369 ;	src/usb_handler.c:483: }
      00038A 22               [24] 1370 	ret
                                   1371 	.area CSEG    (CODE)
                                   1372 	.area CONST   (CODE)
                                   1373 	.area CABS    (ABS,CODE)