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.rst

                                      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)
      000008                        518 _USB_SetupReq::
      000008                        519 	.ds 1
      000009                        520 _USB_SetupTyp::
      000009                        521 	.ds 1
      00000A                        522 _USB_Config::
      00000A                        523 	.ds 1
      00000B                        524 _USB_Addr::
      00000B                        525 	.ds 1
      00000C                        526 _USB_SetupLen::
      00000C                        527 	.ds 2
      00000E                        528 _USB_pDescr::
      00000E                        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)
      000001                        547 _USB_ENUM_OK::
      000001                        548 	.ds 1
      000002                        549 _USB_EP0_SETUP_sloc0_1_0:
      000002                        550 	.ds 1
      000003                        551 _USB_EP0_IN_sloc0_1_0:
      000003                        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 ;	-----------------------------------------
      00149E                        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
      00149E 7E 00            [12]  613 	mov	r6,#_EP0_buffer
      0014A0 7F 00            [12]  614 	mov	r7,#(_EP0_buffer >> 8)
      0014A2 8E EC            [24]  615 	mov	((_UEP0_DMA >> 0) & 0xFF),r6
      0014A4 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
      0014A6 75 DC 02         [24]  618 	mov	_UEP0_CTRL,#0x02
                                    619 ;	src/usb_handler.c:25: UEP0_T_LEN  = 0;                          // must be zero at start
      0014A9 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
      0014AC C2 01            [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: }
      0014AE 02 18 29         [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 ;	-----------------------------------------
      0014B1                        634 _USB_init:
                                    635 ;	src/usb_handler.c:39: | bUC_DMA_EN;                 // DMA enable
      0014B1 75 E2 29         [24]  636 	mov	_USB_CTRL,#0x29
                                    637 ;	src/usb_handler.c:41: | bUD_PORT_EN;                // enable port, full-speed
      0014B4 75 D1 81         [24]  638 	mov	_UDEV_CTRL,#0x81
                                    639 ;	src/usb_handler.c:43: USB_EP_init();                            // setup endpoints
      0014B7 12 14 9E         [24]  640 	lcall	_USB_EP_init
                                    641 ;	src/usb_handler.c:47: | bUIE_BUS_RST;               // enable device mode USB bus reset interrupt
      0014BA 75 E1 07         [24]  642 	mov	_USB_INT_EN,#0x07
                                    643 ;	src/usb_handler.c:49: USB_INT_FG  = 0x1f;                       // clear interrupt flags
      0014BD 75 D8 1F         [24]  644 	mov	_USB_INT_FG,#0x1f
                                    645 ;	src/usb_handler.c:50: IE_USB      = 1;                          // enable USB interrupt
                                    646 ;	assignBit
      0014C0 D2 EA            [12]  647 	setb	_IE_USB
                                    648 ;	src/usb_handler.c:51: EA          = 1;                          // enable global interrupts
                                    649 ;	assignBit
      0014C2 D2 AF            [12]  650 	setb	_EA
                                    651 ;	src/usb_handler.c:52: }
      0014C4 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 ;	-----------------------------------------
      0014C5                        662 _USB_EP0_copyDescr:
                                    663 ;	src/usb_handler.c:81: __endasm;
      0014C5 C0 E0            [24]  664 	push	acc ; acc -> stack
      0014C7 C0 07            [24]  665 	push	ar7 ; r7 -> stack
      0014C9 AF 82            [24]  666 	mov	r7, dpl ; r7 <- len
      0014CB 05 A2            [12]  667 	inc	_XBUS_AUX ; select dptr1
      0014CD 90 00 00         [24]  668 	mov	dptr, #_EP0_buffer ; dptr1 <- EP0_buffer
      0014D0 15 A2            [12]  669 	dec	_XBUS_AUX ; select dptr0
      0014D2 85 0E 82         [24]  670 	mov	dpl, _USB_pDescr ; dptr0 <- *USB_pDescr
      0014D5 85 0F 83         [24]  671 	mov	dph, (_USB_pDescr + 1)
      0014D8                        672 	    01$:
      0014D8 E4               [12]  673 	clr	a ; acc <- #0
      0014D9 93               [24]  674 	movc	a, @a+dptr ; acc <- *USB_pDescr[dptr0]
      0014DA A3               [24]  675 	inc	dptr ; inc dptr0
      0014DB A5                     676 	.db	0xA5 ; acc -> EP0_buffer[dptr1] & inc dptr1
      0014DC DF FA            [24]  677 	djnz	r7, 01$ ; repeat len times
      0014DE 85 82 0E         [24]  678 	mov	_USB_pDescr, dpl ; USB_pDescr += len
      0014E1 85 83 0F         [24]  679 	mov	(_USB_pDescr + 1), dph
      0014E4 D0 07            [24]  680 	pop	ar7 ; r7 <- stack
      0014E6 D0 E0            [24]  681 	pop	acc ; acc <- stack
                                    682 ;	src/usb_handler.c:82: }
      0014E8 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 ;	-----------------------------------------
      0014E9                        693 _USB_EP0_SETUP:
                                    694 ;	src/usb_handler.c:90: uint8_t len = 0;                                // default is success and upload 0 length
      0014E9 7F 00            [12]  695 	mov	r7,#0x00
                                    696 ;	src/usb_handler.c:91: USB_SetupLen = ((uint16_t)USB_SetupBuf->wLengthH<<8) | (USB_SetupBuf->wLengthL);
      0014EB 90 00 07         [24]  697 	mov	dptr,#(_EP0_buffer + 0x0007)
      0014EE E0               [24]  698 	movx	a,@dptr
      0014EF FD               [12]  699 	mov	r5,a
      0014F0 7E 00            [12]  700 	mov	r6,#0x00
      0014F2 90 00 06         [24]  701 	mov	dptr,#(_EP0_buffer + 0x0006)
      0014F5 E0               [24]  702 	movx	a,@dptr
      0014F6 FC               [12]  703 	mov	r4,a
      0014F7 7B 00            [12]  704 	mov	r3,#0x00
      0014F9 4E               [12]  705 	orl	a,r6
      0014FA F5 0C            [12]  706 	mov	_USB_SetupLen,a
      0014FC EB               [12]  707 	mov	a,r3
      0014FD 4D               [12]  708 	orl	a,r5
      0014FE F5 0D            [12]  709 	mov	(_USB_SetupLen + 1),a
                                    710 ;	src/usb_handler.c:92: USB_SetupReq = USB_SetupBuf->bRequest;
      001500 90 00 01         [24]  711 	mov	dptr,#(_EP0_buffer + 0x0001)
      001503 E0               [24]  712 	movx	a,@dptr
      001504 F5 08            [12]  713 	mov	_USB_SetupReq,a
                                    714 ;	src/usb_handler.c:93: USB_SetupTyp = USB_SetupBuf->bRequestType;
      001506 90 00 00         [24]  715 	mov	dptr,#_EP0_buffer
      001509 E0               [24]  716 	movx	a,@dptr
      00150A F5 09            [12]  717 	mov	_USB_SetupTyp,a
                                    718 ;	src/usb_handler.c:95: if((USB_SetupTyp & USB_REQ_TYP_MASK) == USB_REQ_TYP_STANDARD) {
      00150C E5 09            [12]  719 	mov	a,_USB_SetupTyp
      00150E 54 60            [12]  720 	anl	a,#0x60
      001510 60 03            [24]  721 	jz	00289$
      001512 02 17 2C         [24]  722 	ljmp	00171$
      001515                        723 00289$:
                                    724 ;	src/usb_handler.c:96: switch(USB_SetupReq) {                        // request type
      001515 E5 08            [12]  725 	mov	a,_USB_SetupReq
      001517 FE               [12]  726 	mov	r6,a
      001518 24 F4            [12]  727 	add	a,#0xff - 0x0b
      00151A 50 03            [24]  728 	jnc	00290$
      00151C 02 17 28         [24]  729 	ljmp	00168$
      00151F                        730 00290$:
      00151F EE               [12]  731 	mov	a,r6
      001520 F5 F0            [12]  732 	mov	b,a
      001522 24 0B            [12]  733 	add	a,#(00291$-3-.)
      001524 83               [24]  734 	movc	a,@a+pc
      001525 F5 82            [12]  735 	mov	dpl,a
      001527 E5 F0            [12]  736 	mov	a,b
      001529 24 10            [12]  737 	add	a,#(00292$-3-.)
      00152B 83               [24]  738 	movc	a,@a+pc
      00152C F5 83            [12]  739 	mov	dph,a
      00152E E4               [12]  740 	clr	a
      00152F 73               [24]  741 	jmp	@a+dptr
      001530                        742 00291$:
      001530 4F                     743 	.db	00129$
      001531 6F                     744 	.db	00132$
      001532 28                     745 	.db	00168$
      001533 C7                     746 	.db	00149$
      001534 28                     747 	.db	00168$
      001535 1E                     748 	.db	00122$
      001536 48                     749 	.db	00101$
      001537 28                     750 	.db	00168$
      001538 27                     751 	.db	00123$
      001539 44                     752 	.db	00126$
      00153A 2E                     753 	.db	00172$
      00153B 2E                     754 	.db	00172$
      00153C                        755 00292$:
      00153C 16                     756 	.db	00129$>>8
      00153D 16                     757 	.db	00132$>>8
      00153E 17                     758 	.db	00168$>>8
      00153F 16                     759 	.db	00149$>>8
      001540 17                     760 	.db	00168$>>8
      001541 16                     761 	.db	00122$>>8
      001542 15                     762 	.db	00101$>>8
      001543 17                     763 	.db	00168$>>8
      001544 16                     764 	.db	00123$>>8
      001545 16                     765 	.db	00126$>>8
      001546 17                     766 	.db	00172$>>8
      001547 17                     767 	.db	00172$>>8
                                    768 ;	src/usb_handler.c:97: case USB_GET_DESCRIPTOR:
      001548                        769 00101$:
                                    770 ;	src/usb_handler.c:98: switch(USB_SetupBuf->wValueH) {
      001548 90 00 03         [24]  771 	mov	dptr,#(_EP0_buffer + 0x0003)
      00154B E0               [24]  772 	movx	a,@dptr
      00154C FE               [12]  773 	mov	r6,a
      00154D BE 01 02         [24]  774 	cjne	r6,#0x01,00293$
      001550 80 12            [24]  775 	sjmp	00102$
      001552                        776 00293$:
      001552 BE 02 02         [24]  777 	cjne	r6,#0x02,00294$
      001555 80 17            [24]  778 	sjmp	00103$
      001557                        779 00294$:
      001557 BE 03 02         [24]  780 	cjne	r6,#0x03,00295$
      00155A 80 1C            [24]  781 	sjmp	00104$
      00155C                        782 00295$:
      00155C BE 22 02         [24]  783 	cjne	r6,#0x22,00296$
      00155F 80 69            [24]  784 	sjmp	00112$
      001561                        785 00296$:
      001561 02 15 E2         [24]  786 	ljmp	00116$
                                    787 ;	src/usb_handler.c:100: case USB_DESCR_TYP_DEVICE:              // Device Descriptor
      001564                        788 00102$:
                                    789 ;	src/usb_handler.c:101: USB_pDescr = (uint8_t*)&DevDescr;     // put descriptor into out buffer
      001564 75 0E 48         [24]  790 	mov	_USB_pDescr,#_DevDescr
      001567 75 0F 19         [24]  791 	mov	(_USB_pDescr + 1),#(_DevDescr >> 8)
                                    792 ;	src/usb_handler.c:102: len = sizeof(DevDescr);               // descriptor length
      00156A 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
      00156C 80 76            [24]  796 	sjmp	00117$
      00156E                        797 00103$:
                                    798 ;	src/usb_handler.c:106: USB_pDescr = (uint8_t*)&CfgDescr;     // put descriptor into out buffer
      00156E 75 0E 5A         [24]  799 	mov	_USB_pDescr,#_CfgDescr
      001571 75 0F 19         [24]  800 	mov	(_USB_pDescr + 1),#(_CfgDescr >> 8)
                                    801 ;	src/usb_handler.c:107: len = sizeof(CfgDescr);               // descriptor length
      001574 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:
      001576 80 6C            [24]  805 	sjmp	00117$
      001578                        806 00104$:
                                    807 ;	src/usb_handler.c:111: switch(USB_SetupBuf->wValueL) {       // String Descriptor Index
      001578 90 00 02         [24]  808 	mov	dptr,#(_EP0_buffer + 0x0002)
      00157B E0               [24]  809 	movx	a,@dptr
      00157C FE               [12]  810 	mov  r6,a
      00157D 24 FB            [12]  811 	add	a,#0xff - 0x04
      00157F 40 38            [24]  812 	jc	00110$
      001581 EE               [12]  813 	mov	a,r6
      001582 2E               [12]  814 	add	a,r6
                                    815 ;	src/usb_handler.c:112: case 0:   USB_pDescr = USB_STR_DESCR_i0; break;
      001583 90 15 87         [24]  816 	mov	dptr,#00298$
      001586 73               [24]  817 	jmp	@a+dptr
      001587                        818 00298$:
      001587 80 08            [24]  819 	sjmp	00105$
      001589 80 0E            [24]  820 	sjmp	00106$
      00158B 80 14            [24]  821 	sjmp	00107$
      00158D 80 1A            [24]  822 	sjmp	00108$
      00158F 80 20            [24]  823 	sjmp	00109$
      001591                        824 00105$:
      001591 75 0E 9C         [24]  825 	mov	_USB_pDescr,#_LangDescr
      001594 75 0F 19         [24]  826 	mov	(_USB_pDescr + 1),#(_LangDescr >> 8)
                                    827 ;	src/usb_handler.c:113: case 1:   USB_pDescr = USB_STR_DESCR_i1; break;
      001597 80 26            [24]  828 	sjmp	00111$
      001599                        829 00106$:
      001599 75 0E A0         [24]  830 	mov	_USB_pDescr,#_ManufDescr
      00159C 75 0F 19         [24]  831 	mov	(_USB_pDescr + 1),#(_ManufDescr >> 8)
                                    832 ;	src/usb_handler.c:114: case 2:   USB_pDescr = USB_STR_DESCR_i2; break;
      00159F 80 1E            [24]  833 	sjmp	00111$
      0015A1                        834 00107$:
      0015A1 75 0E B8         [24]  835 	mov	_USB_pDescr,#_ProdDescr
      0015A4 75 0F 19         [24]  836 	mov	(_USB_pDescr + 1),#(_ProdDescr >> 8)
                                    837 ;	src/usb_handler.c:115: case 3:   USB_pDescr = USB_STR_DESCR_i3; break;
      0015A7 80 16            [24]  838 	sjmp	00111$
      0015A9                        839 00108$:
      0015A9 75 0E E0         [24]  840 	mov	_USB_pDescr,#_SerDescr
      0015AC 75 0F 19         [24]  841 	mov	(_USB_pDescr + 1),#(_SerDescr >> 8)
                                    842 ;	src/usb_handler.c:117: case 4:   USB_pDescr = USB_STR_DESCR_i4; break;
      0015AF 80 0E            [24]  843 	sjmp	00111$
      0015B1                        844 00109$:
      0015B1 75 0E EC         [24]  845 	mov	_USB_pDescr,#_InterfDescr
      0015B4 75 0F 19         [24]  846 	mov	(_USB_pDescr + 1),#(_InterfDescr >> 8)
                                    847 ;	src/usb_handler.c:137: default:  USB_pDescr = USB_STR_DESCR_ix; break;
      0015B7 80 06            [24]  848 	sjmp	00111$
      0015B9                        849 00110$:
      0015B9 75 0E E0         [24]  850 	mov	_USB_pDescr,#_SerDescr
      0015BC 75 0F 19         [24]  851 	mov	(_USB_pDescr + 1),#(_SerDescr >> 8)
                                    852 ;	src/usb_handler.c:138: }
      0015BF                        853 00111$:
                                    854 ;	src/usb_handler.c:139: len = USB_pDescr[0];                  // descriptor length
      0015BF 85 0E 82         [24]  855 	mov	dpl,_USB_pDescr
      0015C2 85 0F 83         [24]  856 	mov	dph,(_USB_pDescr + 1)
      0015C5 E4               [12]  857 	clr	a
      0015C6 93               [24]  858 	movc	a,@a+dptr
      0015C7 FF               [12]  859 	mov	r7,a
                                    860 ;	src/usb_handler.c:140: break;
                                    861 ;	src/usb_handler.c:143: case USB_DESCR_TYP_REPORT:
      0015C8 80 1A            [24]  862 	sjmp	00117$
      0015CA                        863 00112$:
                                    864 ;	src/usb_handler.c:144: if(USB_SetupBuf->wValueL == 0) {
      0015CA 90 00 02         [24]  865 	mov	dptr,#(_EP0_buffer + 0x0002)
      0015CD E0               [24]  866 	movx	a,@dptr
      0015CE 70 0E            [24]  867 	jnz	00114$
                                    868 ;	src/usb_handler.c:145: USB_pDescr = USB_REPORT_DESCR;
      0015D0 75 0E 83         [24]  869 	mov	_USB_pDescr,#_ReportDescr
      0015D3 75 0F 19         [24]  870 	mov	(_USB_pDescr + 1),#(_ReportDescr >> 8)
                                    871 ;	src/usb_handler.c:146: len = USB_REPORT_DESCR_LEN;
      0015D6 90 19 9B         [24]  872 	mov	dptr,#_ReportDescrLen
      0015D9 E4               [12]  873 	clr	a
      0015DA 93               [24]  874 	movc	a,@a+dptr
      0015DB FF               [12]  875 	mov	r7,a
      0015DC 80 06            [24]  876 	sjmp	00117$
      0015DE                        877 00114$:
                                    878 ;	src/usb_handler.c:148: else len = 0xff;
      0015DE 7F FF            [12]  879 	mov	r7,#0xff
                                    880 ;	src/usb_handler.c:149: break;
                                    881 ;	src/usb_handler.c:152: default:
      0015E0 80 02            [24]  882 	sjmp	00117$
      0015E2                        883 00116$:
                                    884 ;	src/usb_handler.c:153: len = 0xff;                           // unsupported descriptors or error
      0015E2 7F FF            [12]  885 	mov	r7,#0xff
                                    886 ;	src/usb_handler.c:155: }
      0015E4                        887 00117$:
                                    888 ;	src/usb_handler.c:157: if(len != 0xff) {
      0015E4 BF FF 03         [24]  889 	cjne	r7,#0xff,00300$
      0015E7 02 17 2E         [24]  890 	ljmp	00172$
      0015EA                        891 00300$:
                                    892 ;	src/usb_handler.c:158: if(USB_SetupLen > len) USB_SetupLen = len;    // limit length
      0015EA 8F 05            [24]  893 	mov	ar5,r7
      0015EC 7E 00            [12]  894 	mov	r6,#0x00
      0015EE C3               [12]  895 	clr	c
      0015EF ED               [12]  896 	mov	a,r5
      0015F0 95 0C            [12]  897 	subb	a,_USB_SetupLen
      0015F2 EE               [12]  898 	mov	a,r6
      0015F3 95 0D            [12]  899 	subb	a,(_USB_SetupLen + 1)
      0015F5 50 04            [24]  900 	jnc	00119$
      0015F7 8D 0C            [24]  901 	mov	_USB_SetupLen,r5
      0015F9 8E 0D            [24]  902 	mov	(_USB_SetupLen + 1),r6
      0015FB                        903 00119$:
                                    904 ;	src/usb_handler.c:159: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
      0015FB AD 0C            [24]  905 	mov	r5,_USB_SetupLen
      0015FD AE 0D            [24]  906 	mov	r6,(_USB_SetupLen + 1)
      0015FF C3               [12]  907 	clr	c
      001600 ED               [12]  908 	mov	a,r5
      001601 94 08            [12]  909 	subb	a,#0x08
      001603 EE               [12]  910 	mov	a,r6
      001604 94 00            [12]  911 	subb	a,#0x00
      001606 92 02            [24]  912 	mov	_USB_EP0_SETUP_sloc0_1_0,c
      001608 40 06            [24]  913 	jc	00178$
      00160A 7D 08            [12]  914 	mov	r5,#0x08
      00160C 7E 00            [12]  915 	mov	r6,#0x00
      00160E 80 04            [24]  916 	sjmp	00179$
      001610                        917 00178$:
      001610 AD 0C            [24]  918 	mov	r5,_USB_SetupLen
      001612 AE 0D            [24]  919 	mov	r6,(_USB_SetupLen + 1)
      001614                        920 00179$:
      001614 8D 07            [24]  921 	mov	ar7,r5
                                    922 ;	src/usb_handler.c:160: USB_EP0_copyDescr(len);                 // copy descriptor to EP0
      001616 8F 82            [24]  923 	mov	dpl,r7
      001618 12 14 C5         [24]  924 	lcall	_USB_EP0_copyDescr
                                    925 ;	src/usb_handler.c:162: break;
      00161B 02 17 2E         [24]  926 	ljmp	00172$
                                    927 ;	src/usb_handler.c:164: case USB_SET_ADDRESS:
      00161E                        928 00122$:
                                    929 ;	src/usb_handler.c:165: USB_Addr = USB_SetupBuf->wValueL;        // save the assigned address
      00161E 90 00 02         [24]  930 	mov	dptr,#(_EP0_buffer + 0x0002)
      001621 E0               [24]  931 	movx	a,@dptr
      001622 F5 0B            [12]  932 	mov	_USB_Addr,a
                                    933 ;	src/usb_handler.c:166: break;
      001624 02 17 2E         [24]  934 	ljmp	00172$
                                    935 ;	src/usb_handler.c:168: case USB_GET_CONFIGURATION:
      001627                        936 00123$:
                                    937 ;	src/usb_handler.c:169: EP0_buffer[0] = USB_Config;
      001627 90 00 00         [24]  938 	mov	dptr,#_EP0_buffer
      00162A E5 0A            [12]  939 	mov	a,_USB_Config
      00162C F0               [24]  940 	movx	@dptr,a
                                    941 ;	src/usb_handler.c:170: if(USB_SetupLen > 1) USB_SetupLen = 1;
      00162D AD 0C            [24]  942 	mov	r5,_USB_SetupLen
      00162F AE 0D            [24]  943 	mov	r6,(_USB_SetupLen + 1)
      001631 C3               [12]  944 	clr	c
      001632 74 01            [12]  945 	mov	a,#0x01
      001634 9D               [12]  946 	subb	a,r5
      001635 E4               [12]  947 	clr	a
      001636 9E               [12]  948 	subb	a,r6
      001637 50 06            [24]  949 	jnc	00125$
      001639 75 0C 01         [24]  950 	mov	_USB_SetupLen,#0x01
      00163C 75 0D 00         [24]  951 	mov	(_USB_SetupLen + 1),#0x00
      00163F                        952 00125$:
                                    953 ;	src/usb_handler.c:171: len = USB_SetupLen;
      00163F AF 0C            [24]  954 	mov	r7,_USB_SetupLen
                                    955 ;	src/usb_handler.c:172: break;
      001641 02 17 2E         [24]  956 	ljmp	00172$
                                    957 ;	src/usb_handler.c:174: case USB_SET_CONFIGURATION:
      001644                        958 00126$:
                                    959 ;	src/usb_handler.c:175: USB_Config  = USB_SetupBuf->wValueL;
      001644 90 00 02         [24]  960 	mov	dptr,#(_EP0_buffer + 0x0002)
      001647 E0               [24]  961 	movx	a,@dptr
      001648 F5 0A            [12]  962 	mov	_USB_Config,a
                                    963 ;	src/usb_handler.c:176: USB_ENUM_OK = 1;
                                    964 ;	assignBit
      00164A D2 01            [12]  965 	setb	_USB_ENUM_OK
                                    966 ;	src/usb_handler.c:177: break;
      00164C 02 17 2E         [24]  967 	ljmp	00172$
                                    968 ;	src/usb_handler.c:185: case USB_GET_STATUS:
      00164F                        969 00129$:
                                    970 ;	src/usb_handler.c:186: EP0_buffer[0] = 0x00;
      00164F 90 00 00         [24]  971 	mov	dptr,#_EP0_buffer
      001652 E4               [12]  972 	clr	a
      001653 F0               [24]  973 	movx	@dptr,a
                                    974 ;	src/usb_handler.c:187: EP0_buffer[1] = 0x00;
      001654 90 00 01         [24]  975 	mov	dptr,#(_EP0_buffer + 0x0001)
      001657 F0               [24]  976 	movx	@dptr,a
                                    977 ;	src/usb_handler.c:188: if(USB_SetupLen > 2) USB_SetupLen = 2;
      001658 AD 0C            [24]  978 	mov	r5,_USB_SetupLen
      00165A AE 0D            [24]  979 	mov	r6,(_USB_SetupLen + 1)
      00165C C3               [12]  980 	clr	c
      00165D 74 02            [12]  981 	mov	a,#0x02
      00165F 9D               [12]  982 	subb	a,r5
      001660 E4               [12]  983 	clr	a
      001661 9E               [12]  984 	subb	a,r6
      001662 50 06            [24]  985 	jnc	00131$
      001664 75 0C 02         [24]  986 	mov	_USB_SetupLen,#0x02
      001667 75 0D 00         [24]  987 	mov	(_USB_SetupLen + 1),#0x00
      00166A                        988 00131$:
                                    989 ;	src/usb_handler.c:189: len = USB_SetupLen;
      00166A AF 0C            [24]  990 	mov	r7,_USB_SetupLen
                                    991 ;	src/usb_handler.c:190: break;
      00166C 02 17 2E         [24]  992 	ljmp	00172$
                                    993 ;	src/usb_handler.c:192: case USB_CLEAR_FEATURE:
      00166F                        994 00132$:
                                    995 ;	src/usb_handler.c:193: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
      00166F E5 09            [12]  996 	mov	a,_USB_SetupTyp
      001671 54 1F            [12]  997 	anl	a,#0x1f
      001673 70 1E            [24]  998 	jnz	00147$
                                    999 ;	src/usb_handler.c:194: if(USB_SetupBuf->wValueL == 0x01) {
      001675 90 00 02         [24] 1000 	mov	dptr,#(_EP0_buffer + 0x0002)
      001678 E0               [24] 1001 	movx	a,@dptr
      001679 FE               [12] 1002 	mov	r6,a
      00167A BE 01 11         [24] 1003 	cjne	r6,#0x01,00137$
                                   1004 ;	src/usb_handler.c:195: if(((uint8_t*)&CfgDescr)[7] & 0x20) {
      00167D 90 19 61         [24] 1005 	mov	dptr,#(_CfgDescr + 0x0007)
      001680 E4               [12] 1006 	clr	a
      001681 93               [24] 1007 	movc	a,@a+dptr
      001682 FE               [12] 1008 	mov	r6,a
      001683 30 E5 03         [24] 1009 	jnb	acc.5,00309$
      001686 02 17 2E         [24] 1010 	ljmp	00172$
      001689                       1011 00309$:
                                   1012 ;	src/usb_handler.c:198: else len = 0xff;               // failed
      001689 7F FF            [12] 1013 	mov	r7,#0xff
      00168B 02 17 2E         [24] 1014 	ljmp	00172$
      00168E                       1015 00137$:
                                   1016 ;	src/usb_handler.c:200: else len = 0xff;                 // failed
      00168E 7F FF            [12] 1017 	mov	r7,#0xff
      001690 02 17 2E         [24] 1018 	ljmp	00172$
      001693                       1019 00147$:
                                   1020 ;	src/usb_handler.c:202: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
      001693 AD 09            [24] 1021 	mov	r5,_USB_SetupTyp
      001695 53 05 1F         [24] 1022 	anl	ar5,#0x1f
      001698 7E 00            [12] 1023 	mov	r6,#0x00
      00169A BD 02 26         [24] 1024 	cjne	r5,#0x02,00144$
      00169D BE 00 23         [24] 1025 	cjne	r6,#0x00,00144$
                                   1026 ;	src/usb_handler.c:203: switch(USB_SetupBuf->wIndexL) {
      0016A0 90 00 04         [24] 1027 	mov	dptr,#(_EP0_buffer + 0x0004)
      0016A3 E0               [24] 1028 	movx	a,@dptr
      0016A4 FE               [12] 1029 	mov	r6,a
      0016A5 BE 01 02         [24] 1030 	cjne	r6,#0x01,00312$
      0016A8 80 05            [24] 1031 	sjmp	00139$
      0016AA                       1032 00312$:
                                   1033 ;	src/usb_handler.c:205: case 0x01:
      0016AA BE 81 12         [24] 1034 	cjne	r6,#0x81,00141$
      0016AD 80 06            [24] 1035 	sjmp	00140$
      0016AF                       1036 00139$:
                                   1037 ;	src/usb_handler.c:206: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_R_TOG | MASK_UEP_R_RES)) | UEP_R_RES_ACK;
      0016AF 53 D2 73         [24] 1038 	anl	_UEP1_CTRL,#0x73
                                   1039 ;	src/usb_handler.c:207: break;
      0016B2 02 17 2E         [24] 1040 	ljmp	00172$
                                   1041 ;	src/usb_handler.c:210: case 0x81:
      0016B5                       1042 00140$:
                                   1043 ;	src/usb_handler.c:211: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_T_TOG | MASK_UEP_T_RES)) | UEP_T_RES_NAK;
      0016B5 74 BC            [12] 1044 	mov	a,#0xbc
      0016B7 55 D2            [12] 1045 	anl	a,_UEP1_CTRL
      0016B9 44 02            [12] 1046 	orl	a,#0x02
      0016BB F5 D2            [12] 1047 	mov	_UEP1_CTRL,a
                                   1048 ;	src/usb_handler.c:212: break;
                                   1049 ;	src/usb_handler.c:244: default:
      0016BD 80 6F            [24] 1050 	sjmp	00172$
      0016BF                       1051 00141$:
                                   1052 ;	src/usb_handler.c:245: len = 0xff;                 // unsupported endpoint
      0016BF 7F FF            [12] 1053 	mov	r7,#0xff
                                   1054 ;	src/usb_handler.c:247: }
      0016C1 80 6B            [24] 1055 	sjmp	00172$
      0016C3                       1056 00144$:
                                   1057 ;	src/usb_handler.c:249: else len = 0xff;                  // unsupported for non-endpoint
      0016C3 7F FF            [12] 1058 	mov	r7,#0xff
                                   1059 ;	src/usb_handler.c:250: break;
                                   1060 ;	src/usb_handler.c:252: case USB_SET_FEATURE:
      0016C5 80 67            [24] 1061 	sjmp	00172$
      0016C7                       1062 00149$:
                                   1063 ;	src/usb_handler.c:253: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
      0016C7 E5 09            [12] 1064 	mov	a,_USB_SetupTyp
      0016C9 54 1F            [12] 1065 	anl	a,#0x1f
      0016CB 70 19            [24] 1066 	jnz	00166$
                                   1067 ;	src/usb_handler.c:254: if(USB_SetupBuf->wValueL == 0x01) {
      0016CD 90 00 02         [24] 1068 	mov	dptr,#(_EP0_buffer + 0x0002)
      0016D0 E0               [24] 1069 	movx	a,@dptr
      0016D1 FE               [12] 1070 	mov	r6,a
      0016D2 BE 01 0D         [24] 1071 	cjne	r6,#0x01,00153$
                                   1072 ;	src/usb_handler.c:255: if( !(((uint8_t*)&CfgDescr)[7] & 0x20) ) len = 0xff;  // failed
      0016D5 90 19 61         [24] 1073 	mov	dptr,#(_CfgDescr + 0x0007)
      0016D8 E4               [12] 1074 	clr	a
      0016D9 93               [24] 1075 	movc	a,@a+dptr
      0016DA FE               [12] 1076 	mov	r6,a
      0016DB 20 E5 50         [24] 1077 	jb	acc.5,00172$
      0016DE 7F FF            [12] 1078 	mov	r7,#0xff
      0016E0 80 4C            [24] 1079 	sjmp	00172$
      0016E2                       1080 00153$:
                                   1081 ;	src/usb_handler.c:257: else len = 0xff;                                        // failed
      0016E2 7F FF            [12] 1082 	mov	r7,#0xff
      0016E4 80 48            [24] 1083 	sjmp	00172$
      0016E6                       1084 00166$:
                                   1085 ;	src/usb_handler.c:259: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
      0016E6 AD 09            [24] 1086 	mov	r5,_USB_SetupTyp
      0016E8 53 05 1F         [24] 1087 	anl	ar5,#0x1f
      0016EB 7E 00            [12] 1088 	mov	r6,#0x00
      0016ED BD 02 34         [24] 1089 	cjne	r5,#0x02,00163$
      0016F0 BE 00 31         [24] 1090 	cjne	r6,#0x00,00163$
                                   1091 ;	src/usb_handler.c:260: if(USB_SetupBuf->wValueL == 0x00) {
      0016F3 90 00 02         [24] 1092 	mov	dptr,#(_EP0_buffer + 0x0002)
      0016F6 E0               [24] 1093 	movx	a,@dptr
      0016F7 70 27            [24] 1094 	jnz	00160$
                                   1095 ;	src/usb_handler.c:261: switch(USB_SetupBuf->wIndexL) {
      0016F9 90 00 04         [24] 1096 	mov	dptr,#(_EP0_buffer + 0x0004)
      0016FC E0               [24] 1097 	movx	a,@dptr
      0016FD FE               [12] 1098 	mov	r6,a
      0016FE BE 01 02         [24] 1099 	cjne	r6,#0x01,00322$
      001701 80 05            [24] 1100 	sjmp	00155$
      001703                       1101 00322$:
                                   1102 ;	src/usb_handler.c:263: case 0x01:
      001703 BE 81 16         [24] 1103 	cjne	r6,#0x81,00157$
      001706 80 0A            [24] 1104 	sjmp	00156$
      001708                       1105 00155$:
                                   1106 ;	src/usb_handler.c:264: UEP1_CTRL = (UEP1_CTRL & ~bUEP_R_TOG) | UEP_R_RES_STALL;
      001708 74 7F            [12] 1107 	mov	a,#0x7f
      00170A 55 D2            [12] 1108 	anl	a,_UEP1_CTRL
      00170C 44 0C            [12] 1109 	orl	a,#0x0c
      00170E F5 D2            [12] 1110 	mov	_UEP1_CTRL,a
                                   1111 ;	src/usb_handler.c:265: break;
                                   1112 ;	src/usb_handler.c:268: case 0x81:
      001710 80 1C            [24] 1113 	sjmp	00172$
      001712                       1114 00156$:
                                   1115 ;	src/usb_handler.c:269: UEP1_CTRL = (UEP1_CTRL & ~bUEP_T_TOG) | UEP_T_RES_STALL;
      001712 74 BF            [12] 1116 	mov	a,#0xbf
      001714 55 D2            [12] 1117 	anl	a,_UEP1_CTRL
      001716 44 03            [12] 1118 	orl	a,#0x03
      001718 F5 D2            [12] 1119 	mov	_UEP1_CTRL,a
                                   1120 ;	src/usb_handler.c:270: break;
                                   1121 ;	src/usb_handler.c:302: default:
      00171A 80 12            [24] 1122 	sjmp	00172$
      00171C                       1123 00157$:
                                   1124 ;	src/usb_handler.c:303: len = 0xff;               // failed
      00171C 7F FF            [12] 1125 	mov	r7,#0xff
                                   1126 ;	src/usb_handler.c:305: }
      00171E 80 0E            [24] 1127 	sjmp	00172$
      001720                       1128 00160$:
                                   1129 ;	src/usb_handler.c:307: else len = 0xff;                // failed
      001720 7F FF            [12] 1130 	mov	r7,#0xff
      001722 80 0A            [24] 1131 	sjmp	00172$
      001724                       1132 00163$:
                                   1133 ;	src/usb_handler.c:309: else len = 0xff;                  // failed
      001724 7F FF            [12] 1134 	mov	r7,#0xff
                                   1135 ;	src/usb_handler.c:310: break;
                                   1136 ;	src/usb_handler.c:312: default:
      001726 80 06            [24] 1137 	sjmp	00172$
      001728                       1138 00168$:
                                   1139 ;	src/usb_handler.c:313: len = 0xff;                       // failed
      001728 7F FF            [12] 1140 	mov	r7,#0xff
                                   1141 ;	src/usb_handler.c:315: }
      00172A 80 02            [24] 1142 	sjmp	00172$
      00172C                       1143 00171$:
                                   1144 ;	src/usb_handler.c:330: else len = 0xff;
      00172C 7F FF            [12] 1145 	mov	r7,#0xff
      00172E                       1146 00172$:
                                   1147 ;	src/usb_handler.c:332: if(len == 0xff) {                         // stall
      00172E BF FF 07         [24] 1148 	cjne	r7,#0xff,00174$
                                   1149 ;	src/usb_handler.c:333: USB_SetupReq = 0xff;
      001731 75 08 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
      001734 75 DC CF         [24] 1152 	mov	_UEP0_CTRL,#0xcf
      001737 22               [24] 1153 	ret
      001738                       1154 00174$:
                                   1155 ;	src/usb_handler.c:337: USB_SetupLen -= len;
      001738 8F 05            [24] 1156 	mov	ar5,r7
      00173A 7E 00            [12] 1157 	mov	r6,#0x00
      00173C AB 0C            [24] 1158 	mov	r3,_USB_SetupLen
      00173E AC 0D            [24] 1159 	mov	r4,(_USB_SetupLen + 1)
      001740 EB               [12] 1160 	mov	a,r3
      001741 C3               [12] 1161 	clr	c
      001742 9D               [12] 1162 	subb	a,r5
      001743 FB               [12] 1163 	mov	r3,a
      001744 EC               [12] 1164 	mov	a,r4
      001745 9E               [12] 1165 	subb	a,r6
      001746 FC               [12] 1166 	mov	r4,a
      001747 8B 0C            [24] 1167 	mov	_USB_SetupLen,r3
      001749 8C 0D            [24] 1168 	mov	(_USB_SetupLen + 1),r4
                                   1169 ;	src/usb_handler.c:338: UEP0_T_LEN    = len;
      00174B 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;
      00174D 75 DC C0         [24] 1172 	mov	_UEP0_CTRL,#0xc0
                                   1173 ;	src/usb_handler.c:341: }
      001750 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 ;	-----------------------------------------
      001751                       1184 _USB_EP0_IN:
                                   1185 ;	src/usb_handler.c:361: switch(USB_SetupReq) {
      001751 AF 08            [24] 1186 	mov	r7,_USB_SetupReq
      001753 BF 05 02         [24] 1187 	cjne	r7,#0x05,00121$
      001756 80 3A            [24] 1188 	sjmp	00102$
      001758                       1189 00121$:
      001758 BF 06 45         [24] 1190 	cjne	r7,#0x06,00103$
                                   1191 ;	src/usb_handler.c:363: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
      00175B AE 0C            [24] 1192 	mov	r6,_USB_SetupLen
      00175D AF 0D            [24] 1193 	mov	r7,(_USB_SetupLen + 1)
      00175F C3               [12] 1194 	clr	c
      001760 EE               [12] 1195 	mov	a,r6
      001761 94 08            [12] 1196 	subb	a,#0x08
      001763 EF               [12] 1197 	mov	a,r7
      001764 94 00            [12] 1198 	subb	a,#0x00
      001766 92 03            [24] 1199 	mov	_USB_EP0_IN_sloc0_1_0,c
      001768 40 06            [24] 1200 	jc	00107$
      00176A 7E 08            [12] 1201 	mov	r6,#0x08
      00176C 7F 00            [12] 1202 	mov	r7,#0x00
      00176E 80 04            [24] 1203 	sjmp	00108$
      001770                       1204 00107$:
      001770 AE 0C            [24] 1205 	mov	r6,_USB_SetupLen
      001772 AF 0D            [24] 1206 	mov	r7,(_USB_SetupLen + 1)
      001774                       1207 00108$:
                                   1208 ;	src/usb_handler.c:364: USB_EP0_copyDescr(len);                     // copy descriptor to EP0                                
      001774 8E 82            [24] 1209 	mov	dpl,r6
      001776 12 14 C5         [24] 1210 	lcall	_USB_EP0_copyDescr
                                   1211 ;	src/usb_handler.c:365: USB_SetupLen -= len;
      001779 8E 05            [24] 1212 	mov	ar5,r6
      00177B 7F 00            [12] 1213 	mov	r7,#0x00
      00177D AB 0C            [24] 1214 	mov	r3,_USB_SetupLen
      00177F AC 0D            [24] 1215 	mov	r4,(_USB_SetupLen + 1)
      001781 EB               [12] 1216 	mov	a,r3
      001782 C3               [12] 1217 	clr	c
      001783 9D               [12] 1218 	subb	a,r5
      001784 FB               [12] 1219 	mov	r3,a
      001785 EC               [12] 1220 	mov	a,r4
      001786 9F               [12] 1221 	subb	a,r7
      001787 FC               [12] 1222 	mov	r4,a
      001788 8B 0C            [24] 1223 	mov	_USB_SetupLen,r3
      00178A 8C 0D            [24] 1224 	mov	(_USB_SetupLen + 1),r4
                                   1225 ;	src/usb_handler.c:366: UEP0_T_LEN    = len;
      00178C 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
      00178E 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:
      001791 22               [24] 1231 	ret
      001792                       1232 00102$:
                                   1233 ;	src/usb_handler.c:371: USB_DEV_AD = USB_DEV_AD & bUDA_GP_BIT | USB_Addr;
      001792 E5 E3            [12] 1234 	mov	a,_USB_DEV_AD
      001794 54 80            [12] 1235 	anl	a,#0x80
      001796 FF               [12] 1236 	mov	r7,a
      001797 E5 0B            [12] 1237 	mov	a,_USB_Addr
      001799 4F               [12] 1238 	orl	a,r7
      00179A 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;
      00179C 75 DC 82         [24] 1241 	mov	_UEP0_CTRL,#0x82
                                   1242 ;	src/usb_handler.c:373: break;
                                   1243 ;	src/usb_handler.c:375: default:
      00179F 22               [24] 1244 	ret
      0017A0                       1245 00103$:
                                   1246 ;	src/usb_handler.c:376: UEP0_CTRL  = bUEP_R_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
      0017A0 75 DC 82         [24] 1247 	mov	_UEP0_CTRL,#0x82
                                   1248 ;	src/usb_handler.c:378: }
                                   1249 ;	src/usb_handler.c:379: }
      0017A3 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 ;	-----------------------------------------
      0017A4                       1258 _USB_EP0_OUT:
                                   1259 ;	src/usb_handler.c:397: UEP0_CTRL  = bUEP_T_TOG | UEP_T_RES_ACK | UEP_R_RES_ACK;
      0017A4 75 DC 40         [24] 1260 	mov	_UEP0_CTRL,#0x40
                                   1261 ;	src/usb_handler.c:398: }
      0017A7 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 ;	-----------------------------------------
      0017A8                       1272 _USB_interrupt:
                                   1273 ;	src/usb_handler.c:408: if(UIF_TRANSFER) {
      0017A8 30 D9 4F         [24] 1274 	jnb	_UIF_TRANSFER,00114$
                                   1275 ;	src/usb_handler.c:410: uint8_t callIndex = USB_INT_ST & MASK_UIS_ENDP;
      0017AB E5 D9            [12] 1276 	mov	a,_USB_INT_ST
      0017AD 54 0F            [12] 1277 	anl	a,#0x0f
      0017AF FF               [12] 1278 	mov	r7,a
                                   1279 ;	src/usb_handler.c:411: switch (USB_INT_ST & MASK_UIS_TOKEN) {
      0017B0 AD D9            [24] 1280 	mov	r5,_USB_INT_ST
      0017B2 53 05 30         [24] 1281 	anl	ar5,#0x30
      0017B5 7E 00            [12] 1282 	mov	r6,#0x00
      0017B7 BD 00 05         [24] 1283 	cjne	r5,#0x00,00168$
      0017BA BE 00 02         [24] 1284 	cjne	r6,#0x00,00168$
      0017BD 80 27            [24] 1285 	sjmp	00107$
      0017BF                       1286 00168$:
      0017BF BD 20 05         [24] 1287 	cjne	r5,#0x20,00169$
      0017C2 BE 00 02         [24] 1288 	cjne	r6,#0x00,00169$
      0017C5 80 0B            [24] 1289 	sjmp	00102$
      0017C7                       1290 00169$:
      0017C7 BD 30 2E         [24] 1291 	cjne	r5,#0x30,00112$
      0017CA BE 00 2B         [24] 1292 	cjne	r6,#0x00,00112$
                                   1293 ;	src/usb_handler.c:414: EP0_SETUP_callback();
      0017CD 12 14 E9         [24] 1294 	lcall	_USB_EP0_SETUP
                                   1295 ;	src/usb_handler.c:415: break;
                                   1296 ;	src/usb_handler.c:417: case UIS_TOKEN_IN:
      0017D0 80 26            [24] 1297 	sjmp	00112$
      0017D2                       1298 00102$:
                                   1299 ;	src/usb_handler.c:418: switch (callIndex) {
      0017D2 BF 00 02         [24] 1300 	cjne	r7,#0x00,00172$
      0017D5 80 05            [24] 1301 	sjmp	00103$
      0017D7                       1302 00172$:
                                   1303 ;	src/usb_handler.c:419: case 0: EP0_IN_callback(); break;
      0017D7 BF 01 1E         [24] 1304 	cjne	r7,#0x01,00112$
      0017DA 80 05            [24] 1305 	sjmp	00104$
      0017DC                       1306 00103$:
      0017DC 12 17 51         [24] 1307 	lcall	_USB_EP0_IN
                                   1308 ;	src/usb_handler.c:421: case 1: EP1_IN_callback(); break;
      0017DF 80 17            [24] 1309 	sjmp	00112$
      0017E1                       1310 00104$:
      0017E1 12 18 42         [24] 1311 	lcall	_HID_EP1_IN
                                   1312 ;	src/usb_handler.c:436: case UIS_TOKEN_OUT:
      0017E4 80 12            [24] 1313 	sjmp	00112$
      0017E6                       1314 00107$:
                                   1315 ;	src/usb_handler.c:437: switch (callIndex) {
      0017E6 BF 00 02         [24] 1316 	cjne	r7,#0x00,00174$
      0017E9 80 05            [24] 1317 	sjmp	00108$
      0017EB                       1318 00174$:
                                   1319 ;	src/usb_handler.c:438: case 0: EP0_OUT_callback(); break;
      0017EB BF 01 0A         [24] 1320 	cjne	r7,#0x01,00112$
      0017EE 80 05            [24] 1321 	sjmp	00109$
      0017F0                       1322 00108$:
      0017F0 12 17 A4         [24] 1323 	lcall	_USB_EP0_OUT
                                   1324 ;	src/usb_handler.c:440: case 1: EP1_OUT_callback(); break;
      0017F3 80 03            [24] 1325 	sjmp	00112$
      0017F5                       1326 00109$:
      0017F5 12 18 4D         [24] 1327 	lcall	_HID_EP1_OUT
                                   1328 ;	src/usb_handler.c:454: }
      0017F8                       1329 00112$:
                                   1330 ;	src/usb_handler.c:455: UIF_TRANSFER = 0;                       // clear interrupt flag
                                   1331 ;	assignBit
      0017F8 C2 D9            [12] 1332 	clr	_UIF_TRANSFER
      0017FA                       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
      0017FA 10 DA 02         [24] 1337 	jbc	_UIF_SUSPEND,00176$
      0017FD 80 1A            [24] 1338 	sjmp	00118$
      0017FF                       1339 00176$:
                                   1340 ;	src/usb_handler.c:462: if(USB_MIS_ST & bUMS_SUSPEND) {
      0017FF E5 DA            [12] 1341 	mov	a,_USB_MIS_ST
      001801 30 E2 15         [24] 1342 	jnb	acc.2,00118$
                                   1343 ;	src/usb_handler.c:463: SAFE_MOD   = 0x55;
      001804 75 A1 55         [24] 1344 	mov	_SAFE_MOD,#0x55
                                   1345 ;	src/usb_handler.c:464: SAFE_MOD   = 0xAA;
      001807 75 A1 AA         [24] 1346 	mov	_SAFE_MOD,#0xaa
                                   1347 ;	src/usb_handler.c:465: WAKE_CTRL |= bWAK_BY_USB;             // enable wakeup by USB
      00180A 43 A9 80         [24] 1348 	orl	_WAKE_CTRL,#0x80
                                   1349 ;	src/usb_handler.c:466: USB_SUSPEND_handler();                // custom suspend handler (PCON |= PD;)
      00180D 12 00 AE         [24] 1350 	lcall	_ring_probe_release
                                   1351 ;	src/usb_handler.c:467: SAFE_MOD   = 0x55;
      001810 75 A1 55         [24] 1352 	mov	_SAFE_MOD,#0x55
                                   1353 ;	src/usb_handler.c:468: SAFE_MOD   = 0xAA;
      001813 75 A1 AA         [24] 1354 	mov	_SAFE_MOD,#0xaa
                                   1355 ;	src/usb_handler.c:469: WAKE_CTRL &= ~bWAK_BY_USB;            // disable wakeup by USB
      001816 53 A9 7F         [24] 1356 	anl	_WAKE_CTRL,#0x7f
      001819                       1357 00118$:
                                   1358 ;	src/usb_handler.c:475: if(UIF_BUS_RST) {
      001819 30 D8 0C         [24] 1359 	jnb	_UIF_BUS_RST,00121$
                                   1360 ;	src/usb_handler.c:477: USB_RESET_handler();                    // custom reset handler
      00181C 12 00 AE         [24] 1361 	lcall	_ring_probe_release
                                   1362 ;	src/usb_handler.c:479: USB_EP_init();                          // reset endpoints
      00181F 12 14 9E         [24] 1363 	lcall	_USB_EP_init
                                   1364 ;	src/usb_handler.c:480: USB_DEV_AD = 0x00;                      // reset device address
      001822 75 E3 00         [24] 1365 	mov	_USB_DEV_AD,#0x00
                                   1366 ;	src/usb_handler.c:481: USB_INT_FG = 0x1f;                      // clear all interrupt flags
      001825 75 D8 1F         [24] 1367 	mov	_USB_INT_FG,#0x1f
      001828                       1368 00121$:
                                   1369 ;	src/usb_handler.c:483: }
      001828 22               [24] 1370 	ret
                                   1371 	.area CSEG    (CODE)
                                   1372 	.area CONST   (CODE)
                                   1373 	.area CABS    (ABS,CODE)