;--------------------------------------------------------
; File Created by SDCC : free open source ANSI-C Compiler
; Version 3.1.0 #7066 (Feb 26 2012) (Linux)
; This file was generated Mon Nov 11 18:21:14 2013
;--------------------------------------------------------
	.module usb
	.optsdcc -mmcs51 --model-small
	
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
	.globl _ep_num_check
	.globl _ep_to_cs
	.globl _vendor_cmd_handler
	.globl _reset_toggle
	.globl _JTAG_TDO
	.globl _JTAG_TDI
	.globl _JTAG_TMS
	.globl _JTAG_TCK
	.globl _EIPX6
	.globl _EIPX5
	.globl _EIPX4
	.globl _PI2C
	.globl _PUSB
	.globl _EIEX6
	.globl _EIEX5
	.globl _EIEX4
	.globl _EI2C
	.globl _EIUSB
	.globl _SMOD1
	.globl _ERESI
	.globl _RESI
	.globl _EINT6
	.globl _CY
	.globl _AC
	.globl _F0
	.globl _RS1
	.globl _RS0
	.globl _OV
	.globl _F1
	.globl _P
	.globl _TF2
	.globl _EXF2
	.globl _RCLK
	.globl _TCLK
	.globl _EXEN2
	.globl _TR2
	.globl _C_T2
	.globl _CP_RL2
	.globl _SM01
	.globl _SM11
	.globl _SM21
	.globl _REN1
	.globl _TB81
	.globl _RB81
	.globl _TI1
	.globl _RI1
	.globl _PS1
	.globl _PT2
	.globl _PS0
	.globl _PT1
	.globl _PX1
	.globl _PT0
	.globl _PX0
	.globl _IOD7
	.globl _IOD6
	.globl _IOD5
	.globl _IOD4
	.globl _IOD3
	.globl _IOD2
	.globl _IOD1
	.globl _IOD0
	.globl _EA
	.globl _ES1
	.globl _ET2
	.globl _ES0
	.globl _ET1
	.globl _EX1
	.globl _ET0
	.globl _EX0
	.globl _IOC7
	.globl _IOC6
	.globl _IOC5
	.globl _IOC4
	.globl _IOC3
	.globl _IOC2
	.globl _IOC1
	.globl _IOC0
	.globl _SM0
	.globl _SM1
	.globl _SM2
	.globl _REN
	.globl _TB8
	.globl _RB8
	.globl _TI
	.globl _RI
	.globl _IOB7
	.globl _IOB6
	.globl _IOB5
	.globl _IOB4
	.globl _IOB3
	.globl _IOB2
	.globl _IOB1
	.globl _IOB0
	.globl _TF1
	.globl _TR1
	.globl _TF0
	.globl _TR0
	.globl _IE1
	.globl _IT1
	.globl _IE0
	.globl _IT0
	.globl _IOA7
	.globl _IOA6
	.globl _IOA5
	.globl _IOA4
	.globl _IOA3
	.globl _IOA2
	.globl _IOA1
	.globl _IOA0
	.globl __XPAGE
	.globl _EIP
	.globl _B
	.globl _EIE
	.globl _ACC
	.globl _EICON
	.globl _PSW
	.globl _TH2
	.globl _TL2
	.globl _RCAP2H
	.globl _RCAP2L
	.globl _T2CON
	.globl _SBUF1
	.globl _SCON1
	.globl _GPIFSGLDATLNOX
	.globl _GPIFSGLDATLX
	.globl _GPIFSGLDATH
	.globl _GPIFTRIG
	.globl _EP01STAT
	.globl _IP
	.globl _OEE
	.globl _OED
	.globl _OEC
	.globl _OEB
	.globl _OEA
	.globl _IOE
	.globl _IOD
	.globl _AUTOPTRSETUP
	.globl _EP68FIFOFLGS
	.globl _EP24FIFOFLGS
	.globl _EP2468STAT
	.globl _IE
	.globl _INT4CLR
	.globl _INT2CLR
	.globl _IOC
	.globl _AUTODAT2
	.globl _AUTOPTRL2
	.globl _AUTOPTRH2
	.globl _AUTODAT1
	.globl _AUTOPTRL1
	.globl _AUTOPTRH1
	.globl _SBUF0
	.globl _SCON0
	.globl _MPAGE
	.globl _EXIF
	.globl _IOB
	.globl _CKCON
	.globl _TH1
	.globl _TH0
	.globl _TL1
	.globl _TL0
	.globl _TMOD
	.globl _TCON
	.globl _PCON
	.globl _DPS
	.globl _DPH1
	.globl _DPL1
	.globl _DPH
	.globl _DPL
	.globl _SP
	.globl _IOA
	.globl _EP8FIFOBUF
	.globl _EP6FIFOBUF
	.globl _EP4FIFOBUF
	.globl _EP2FIFOBUF
	.globl _EP1INBUF
	.globl _EP1OUTBUF
	.globl _EP0BUF
	.globl _GPIFABORT
	.globl _GPIFREADYSTAT
	.globl _GPIFREADYCFG
	.globl _XGPIFSGLDATLNOX
	.globl _XGPIFSGLDATLX
	.globl _XGPIFSGLDATH
	.globl _EP8GPIFTRIG
	.globl _EP8GPIFPFSTOP
	.globl _EP8GPIFFLGSEL
	.globl _EP6GPIFTRIG
	.globl _EP6GPIFPFSTOP
	.globl _EP6GPIFFLGSEL
	.globl _EP4GPIFTRIG
	.globl _EP4GPIFPFSTOP
	.globl _EP4GPIFFLGSEL
	.globl _EP2GPIFTRIG
	.globl _EP2GPIFPFSTOP
	.globl _EP2GPIFFLGSEL
	.globl _GPIFTCB0
	.globl _GPIFTCB1
	.globl _GPIFTCB2
	.globl _GPIFTCB3
	.globl _FLOWSTBHPERIOD
	.globl _FLOWSTBEDGE
	.globl _FLOWSTB
	.globl _FLOWHOLDOFF
	.globl _FLOWEQ1CTL
	.globl _FLOWEQ0CTL
	.globl _FLOWLOGIC
	.globl _FLOWSTATE
	.globl _GPIFADRL
	.globl _GPIFADRH
	.globl _GPIFCTLCFG
	.globl _GPIFIDLECTL
	.globl _GPIFIDLECS
	.globl _GPIFWFSELECT
	.globl _SETUPDAT
	.globl _SUDPTRCTL
	.globl _SUDPTRL
	.globl _SUDPTRH
	.globl _EP8FIFOBCL
	.globl _EP8FIFOBCH
	.globl _EP6FIFOBCL
	.globl _EP6FIFOBCH
	.globl _EP4FIFOBCL
	.globl _EP4FIFOBCH
	.globl _EP2FIFOBCL
	.globl _EP2FIFOBCH
	.globl _EP8FIFOFLGS
	.globl _EP6FIFOFLGS
	.globl _EP4FIFOFLGS
	.globl _EP2FIFOFLGS
	.globl _EP8CS
	.globl _EP6CS
	.globl _EP4CS
	.globl _EP2CS
	.globl _EP1INCS
	.globl _EP1OUTCS
	.globl _EP0CS
	.globl _EP8BCL
	.globl _EP8BCH
	.globl _EP6BCL
	.globl _EP6BCH
	.globl _EP4BCL
	.globl _EP4BCH
	.globl _EP2BCL
	.globl _EP2BCH
	.globl _EP1INBC
	.globl _EP1OUTBC
	.globl _EP0BCL
	.globl _EP0BCH
	.globl _FNADDR
	.globl _MICROFRAME
	.globl _USBFRAMEL
	.globl _USBFRAMEH
	.globl _TOGCTL
	.globl _WAKEUPCS
	.globl _SUSPEND
	.globl _USBCS
	.globl _UDMACRCQUAL
	.globl _UDMACRCL
	.globl _UDMACRCH
	.globl _XAUTODAT2
	.globl _XAUTODAT1
	.globl _I2CTL
	.globl _I2DAT
	.globl _I2CS
	.globl _PORTECFG
	.globl _PORTCCFG
	.globl _PORTACFG
	.globl _INTSETUP
	.globl _INT4IVEC
	.globl _INT2IVEC
	.globl _CLRERRCNT
	.globl _ERRCNTLIM
	.globl _USBERRIRQ
	.globl _USBERRIE
	.globl _GPIFIRQ
	.globl _GPIFIE
	.globl _EPIRQ
	.globl _EPIE
	.globl _USBIRQ
	.globl _USBIE
	.globl _NAKIRQ
	.globl _NAKIE
	.globl _IBNIRQ
	.globl _IBNIE
	.globl _EP8FIFOIRQ
	.globl _EP8FIFOIE
	.globl _EP6FIFOIRQ
	.globl _EP6FIFOIE
	.globl _EP4FIFOIRQ
	.globl _EP4FIFOIE
	.globl _EP2FIFOIRQ
	.globl _EP2FIFOIE
	.globl _OUTPKTEND
	.globl _INPKTEND
	.globl _EP8ISOINPKTS
	.globl _EP6ISOINPKTS
	.globl _EP4ISOINPKTS
	.globl _EP2ISOINPKTS
	.globl _EP8FIFOPFL
	.globl _EP8FIFOPFH
	.globl _EP6FIFOPFL
	.globl _EP6FIFOPFH
	.globl _EP4FIFOPFL
	.globl _EP4FIFOPFH
	.globl _EP2FIFOPFL
	.globl _EP2FIFOPFH
	.globl _EP8AUTOINLENL
	.globl _EP8AUTOINLENH
	.globl _EP6AUTOINLENL
	.globl _EP6AUTOINLENH
	.globl _EP4AUTOINLENL
	.globl _EP4AUTOINLENH
	.globl _EP2AUTOINLENL
	.globl _EP2AUTOINLENH
	.globl _EP8FIFOCFG
	.globl _EP6FIFOCFG
	.globl _EP4FIFOCFG
	.globl _EP2FIFOCFG
	.globl _EP8CFG
	.globl _EP6CFG
	.globl _EP4CFG
	.globl _EP2CFG
	.globl _EP1INCFG
	.globl _EP1OUTCFG
	.globl _GPIFHOLDTIME
	.globl _REVCTL
	.globl _REVID
	.globl _FIFOPINPOLAR
	.globl _UART230
	.globl _BPADDRL
	.globl _BPADDRH
	.globl _BREAKPT
	.globl _FIFORESET
	.globl _PINFLAGSCD
	.globl _PINFLAGSAB
	.globl _IFCONFIG
	.globl _CPUCS
	.globl _WAVEDATA
	.globl _descr_other
	.globl _descr_config
	.globl _usb_alt_sel
	.globl _usb_config_sel
	.globl _usb_update_descriptors
	.globl _usb_setup_handler
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
	.area RSEG    (ABS,DATA)
	.org 0x0000
_IOA	=	0x0080
_SP	=	0x0081
_DPL	=	0x0082
_DPH	=	0x0083
_DPL1	=	0x0084
_DPH1	=	0x0085
_DPS	=	0x0086
_PCON	=	0x0087
_TCON	=	0x0088
_TMOD	=	0x0089
_TL0	=	0x008a
_TL1	=	0x008b
_TH0	=	0x008c
_TH1	=	0x008d
_CKCON	=	0x008e
_IOB	=	0x0090
_EXIF	=	0x0091
_MPAGE	=	0x0092
_SCON0	=	0x0098
_SBUF0	=	0x0099
_AUTOPTRH1	=	0x009a
_AUTOPTRL1	=	0x009b
_AUTODAT1	=	0x009c
_AUTOPTRH2	=	0x009d
_AUTOPTRL2	=	0x009e
_AUTODAT2	=	0x009f
_IOC	=	0x00a0
_INT2CLR	=	0x00a1
_INT4CLR	=	0x00a2
_IE	=	0x00a8
_EP2468STAT	=	0x00aa
_EP24FIFOFLGS	=	0x00ab
_EP68FIFOFLGS	=	0x00ac
_AUTOPTRSETUP	=	0x00af
_IOD	=	0x00b0
_IOE	=	0x00b1
_OEA	=	0x00b2
_OEB	=	0x00b3
_OEC	=	0x00b4
_OED	=	0x00b5
_OEE	=	0x00b6
_IP	=	0x00b8
_EP01STAT	=	0x00ba
_GPIFTRIG	=	0x00bb
_GPIFSGLDATH	=	0x00bd
_GPIFSGLDATLX	=	0x00be
_GPIFSGLDATLNOX	=	0x00bf
_SCON1	=	0x00c0
_SBUF1	=	0x00c1
_T2CON	=	0x00c8
_RCAP2L	=	0x00ca
_RCAP2H	=	0x00cb
_TL2	=	0x00cc
_TH2	=	0x00cd
_PSW	=	0x00d0
_EICON	=	0x00d8
_ACC	=	0x00e0
_EIE	=	0x00e8
_B	=	0x00f0
_EIP	=	0x00f8
__XPAGE	=	0x0092
;--------------------------------------------------------
; special function bits
;--------------------------------------------------------
	.area RSEG    (ABS,DATA)
	.org 0x0000
_IOA0	=	0x0080
_IOA1	=	0x0081
_IOA2	=	0x0082
_IOA3	=	0x0083
_IOA4	=	0x0084
_IOA5	=	0x0085
_IOA6	=	0x0086
_IOA7	=	0x0087
_IT0	=	0x0088
_IE0	=	0x0089
_IT1	=	0x008a
_IE1	=	0x008b
_TR0	=	0x008c
_TF0	=	0x008d
_TR1	=	0x008e
_TF1	=	0x008f
_IOB0	=	0x0090
_IOB1	=	0x0091
_IOB2	=	0x0092
_IOB3	=	0x0093
_IOB4	=	0x0094
_IOB5	=	0x0095
_IOB6	=	0x0096
_IOB7	=	0x0097
_RI	=	0x0098
_TI	=	0x0099
_RB8	=	0x009a
_TB8	=	0x009b
_REN	=	0x009c
_SM2	=	0x009d
_SM1	=	0x009e
_SM0	=	0x009f
_IOC0	=	0x00a0
_IOC1	=	0x00a1
_IOC2	=	0x00a2
_IOC3	=	0x00a3
_IOC4	=	0x00a4
_IOC5	=	0x00a5
_IOC6	=	0x00a6
_IOC7	=	0x00a7
_EX0	=	0x00a8
_ET0	=	0x00a9
_EX1	=	0x00aa
_ET1	=	0x00ab
_ES0	=	0x00ac
_ET2	=	0x00ad
_ES1	=	0x00ae
_EA	=	0x00af
_IOD0	=	0x00b0
_IOD1	=	0x00b1
_IOD2	=	0x00b2
_IOD3	=	0x00b3
_IOD4	=	0x00b4
_IOD5	=	0x00b5
_IOD6	=	0x00b6
_IOD7	=	0x00b7
_PX0	=	0x00b8
_PT0	=	0x00b9
_PX1	=	0x00ba
_PT1	=	0x00bb
_PS0	=	0x00bc
_PT2	=	0x00bd
_PS1	=	0x00be
_RI1	=	0x00c0
_TI1	=	0x00c1
_RB81	=	0x00c2
_TB81	=	0x00c3
_REN1	=	0x00c4
_SM21	=	0x00c5
_SM11	=	0x00c6
_SM01	=	0x00c7
_CP_RL2	=	0x00c8
_C_T2	=	0x00c9
_TR2	=	0x00ca
_EXEN2	=	0x00cb
_TCLK	=	0x00cc
_RCLK	=	0x00cd
_EXF2	=	0x00ce
_TF2	=	0x00cf
_P	=	0x00d0
_F1	=	0x00d1
_OV	=	0x00d2
_RS0	=	0x00d3
_RS1	=	0x00d4
_F0	=	0x00d5
_AC	=	0x00d6
_CY	=	0x00d7
_EINT6	=	0x00db
_RESI	=	0x00dc
_ERESI	=	0x00dd
_SMOD1	=	0x00df
_EIUSB	=	0x00e8
_EI2C	=	0x00e9
_EIEX4	=	0x00ea
_EIEX5	=	0x00eb
_EIEX6	=	0x00ec
_PUSB	=	0x00f8
_PI2C	=	0x00f9
_EIPX4	=	0x00fa
_EIPX5	=	0x00fb
_EIPX6	=	0x00fc
_JTAG_TCK	=	0x0080
_JTAG_TMS	=	0x0081
_JTAG_TDI	=	0x0083
_JTAG_TDO	=	0x0087
;--------------------------------------------------------
; overlayable register banks
;--------------------------------------------------------
	.area REG_BANK_0	(REL,OVR,DATA)
	.ds 8
;--------------------------------------------------------
; internal ram data
;--------------------------------------------------------
	.area DSEG    (DATA)
_usb_config_sel::
	.ds 1
_usb_alt_sel::
	.ds 1
_descr_config::
	.ds 2
_descr_other::
	.ds 2
;--------------------------------------------------------
; overlayable items in internal ram 
;--------------------------------------------------------
	.area	OSEG    (OVR,DATA)
	.area	OSEG    (OVR,DATA)
;--------------------------------------------------------
; indirectly addressable internal ram data
;--------------------------------------------------------
	.area ISEG    (DATA)
;--------------------------------------------------------
; absolute internal ram data
;--------------------------------------------------------
	.area IABS    (ABS,DATA)
	.area IABS    (ABS,DATA)
;--------------------------------------------------------
; bit data
;--------------------------------------------------------
	.area BSEG    (BIT)
;--------------------------------------------------------
; paged external ram data
;--------------------------------------------------------
	.area PSEG    (PAG,XDATA)
;--------------------------------------------------------
; external ram data
;--------------------------------------------------------
	.area XSEG    (XDATA)
_WAVEDATA	=	0xe400
_CPUCS	=	0xe600
_IFCONFIG	=	0xe601
_PINFLAGSAB	=	0xe602
_PINFLAGSCD	=	0xe603
_FIFORESET	=	0xe604
_BREAKPT	=	0xe605
_BPADDRH	=	0xe606
_BPADDRL	=	0xe607
_UART230	=	0xe608
_FIFOPINPOLAR	=	0xe609
_REVID	=	0xe60a
_REVCTL	=	0xe60b
_GPIFHOLDTIME	=	0xe60c
_EP1OUTCFG	=	0xe610
_EP1INCFG	=	0xe611
_EP2CFG	=	0xe612
_EP4CFG	=	0xe613
_EP6CFG	=	0xe614
_EP8CFG	=	0xe615
_EP2FIFOCFG	=	0xe618
_EP4FIFOCFG	=	0xe619
_EP6FIFOCFG	=	0xe61a
_EP8FIFOCFG	=	0xe61b
_EP2AUTOINLENH	=	0xe620
_EP2AUTOINLENL	=	0xe621
_EP4AUTOINLENH	=	0xe622
_EP4AUTOINLENL	=	0xe623
_EP6AUTOINLENH	=	0xe624
_EP6AUTOINLENL	=	0xe625
_EP8AUTOINLENH	=	0xe626
_EP8AUTOINLENL	=	0xe627
_EP2FIFOPFH	=	0xe630
_EP2FIFOPFL	=	0xe631
_EP4FIFOPFH	=	0xe632
_EP4FIFOPFL	=	0xe633
_EP6FIFOPFH	=	0xe634
_EP6FIFOPFL	=	0xe635
_EP8FIFOPFH	=	0xe636
_EP8FIFOPFL	=	0xe637
_EP2ISOINPKTS	=	0xe640
_EP4ISOINPKTS	=	0xe641
_EP6ISOINPKTS	=	0xe642
_EP8ISOINPKTS	=	0xe643
_INPKTEND	=	0xe648
_OUTPKTEND	=	0xe649
_EP2FIFOIE	=	0xe650
_EP2FIFOIRQ	=	0xe651
_EP4FIFOIE	=	0xe652
_EP4FIFOIRQ	=	0xe653
_EP6FIFOIE	=	0xe654
_EP6FIFOIRQ	=	0xe655
_EP8FIFOIE	=	0xe656
_EP8FIFOIRQ	=	0xe657
_IBNIE	=	0xe658
_IBNIRQ	=	0xe659
_NAKIE	=	0xe65a
_NAKIRQ	=	0xe65b
_USBIE	=	0xe65c
_USBIRQ	=	0xe65d
_EPIE	=	0xe65e
_EPIRQ	=	0xe65f
_GPIFIE	=	0xe660
_GPIFIRQ	=	0xe661
_USBERRIE	=	0xe662
_USBERRIRQ	=	0xe663
_ERRCNTLIM	=	0xe664
_CLRERRCNT	=	0xe665
_INT2IVEC	=	0xe666
_INT4IVEC	=	0xe667
_INTSETUP	=	0xe668
_PORTACFG	=	0xe670
_PORTCCFG	=	0xe671
_PORTECFG	=	0xe672
_I2CS	=	0xe678
_I2DAT	=	0xe679
_I2CTL	=	0xe67a
_XAUTODAT1	=	0xe67b
_XAUTODAT2	=	0xe67c
_UDMACRCH	=	0xe67d
_UDMACRCL	=	0xe67e
_UDMACRCQUAL	=	0xe67f
_USBCS	=	0xe680
_SUSPEND	=	0xe681
_WAKEUPCS	=	0xe682
_TOGCTL	=	0xe683
_USBFRAMEH	=	0xe684
_USBFRAMEL	=	0xe685
_MICROFRAME	=	0xe686
_FNADDR	=	0xe687
_EP0BCH	=	0xe68a
_EP0BCL	=	0xe68b
_EP1OUTBC	=	0xe68d
_EP1INBC	=	0xe68f
_EP2BCH	=	0xe690
_EP2BCL	=	0xe691
_EP4BCH	=	0xe694
_EP4BCL	=	0xe695
_EP6BCH	=	0xe698
_EP6BCL	=	0xe699
_EP8BCH	=	0xe69c
_EP8BCL	=	0xe69d
_EP0CS	=	0xe6a0
_EP1OUTCS	=	0xe6a1
_EP1INCS	=	0xe6a2
_EP2CS	=	0xe6a3
_EP4CS	=	0xe6a4
_EP6CS	=	0xe6a5
_EP8CS	=	0xe6a6
_EP2FIFOFLGS	=	0xe6a7
_EP4FIFOFLGS	=	0xe6a8
_EP6FIFOFLGS	=	0xe6a9
_EP8FIFOFLGS	=	0xe6aa
_EP2FIFOBCH	=	0xe6ab
_EP2FIFOBCL	=	0xe6ac
_EP4FIFOBCH	=	0xe6ad
_EP4FIFOBCL	=	0xe6ae
_EP6FIFOBCH	=	0xe6af
_EP6FIFOBCL	=	0xe6b0
_EP8FIFOBCH	=	0xe6b1
_EP8FIFOBCL	=	0xe6b2
_SUDPTRH	=	0xe6b3
_SUDPTRL	=	0xe6b4
_SUDPTRCTL	=	0xe6b5
_SETUPDAT	=	0xe6b8
_GPIFWFSELECT	=	0xe6c0
_GPIFIDLECS	=	0xe6c1
_GPIFIDLECTL	=	0xe6c2
_GPIFCTLCFG	=	0xe6c3
_GPIFADRH	=	0xe6c4
_GPIFADRL	=	0xe6c5
_FLOWSTATE	=	0xe6c6
_FLOWLOGIC	=	0xe6c7
_FLOWEQ0CTL	=	0xe6c8
_FLOWEQ1CTL	=	0xe6c9
_FLOWHOLDOFF	=	0xe6ca
_FLOWSTB	=	0xe6cb
_FLOWSTBEDGE	=	0xe6cc
_FLOWSTBHPERIOD	=	0xe6cd
_GPIFTCB3	=	0xe6ce
_GPIFTCB2	=	0xe6cf
_GPIFTCB1	=	0xe6d0
_GPIFTCB0	=	0xe6d1
_EP2GPIFFLGSEL	=	0xe6d2
_EP2GPIFPFSTOP	=	0xe6d3
_EP2GPIFTRIG	=	0xe6d4
_EP4GPIFFLGSEL	=	0xe6da
_EP4GPIFPFSTOP	=	0xe6db
_EP4GPIFTRIG	=	0xe6dc
_EP6GPIFFLGSEL	=	0xe6e2
_EP6GPIFPFSTOP	=	0xe6e3
_EP6GPIFTRIG	=	0xe6e4
_EP8GPIFFLGSEL	=	0xe6ea
_EP8GPIFPFSTOP	=	0xe6eb
_EP8GPIFTRIG	=	0xe6ec
_XGPIFSGLDATH	=	0xe6f0
_XGPIFSGLDATLX	=	0xe6f1
_XGPIFSGLDATLNOX	=	0xe6f2
_GPIFREADYCFG	=	0xe6f3
_GPIFREADYSTAT	=	0xe6f4
_GPIFABORT	=	0xe6f5
_EP0BUF	=	0xe740
_EP1OUTBUF	=	0xe780
_EP1INBUF	=	0xe7c0
_EP2FIFOBUF	=	0xf000
_EP4FIFOBUF	=	0xf400
_EP6FIFOBUF	=	0xf800
_EP8FIFOBUF	=	0xfc00
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
	.area XABS    (ABS,XDATA)
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
	.area XISEG   (XDATA)
	.area HOME    (CODE)
	.area GSINIT0 (CODE)
	.area GSINIT1 (CODE)
	.area GSINIT2 (CODE)
	.area GSINIT3 (CODE)
	.area GSINIT4 (CODE)
	.area GSINIT5 (CODE)
	.area GSINIT  (CODE)
	.area GSFINAL (CODE)
	.area CSEG    (CODE)
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
	.area HOME    (CODE)
	.area GSINIT  (CODE)
	.area GSFINAL (CODE)
	.area GSINIT  (CODE)
;	usb.c:33: uchar usb_config_sel = 0;
	mov	_usb_config_sel,#0x00
;	usb.c:34: uchar usb_alt_sel    = 0;
	mov	_usb_alt_sel,#0x00
;--------------------------------------------------------
; Home
;--------------------------------------------------------
	.area HOME    (CODE)
	.area HOME    (CODE)
;--------------------------------------------------------
; code
;--------------------------------------------------------
	.area CSEG    (CODE)
;------------------------------------------------------------
;Allocation info for local variables in function 'usb_update_descriptors'
;------------------------------------------------------------
;	usb.c:47: void usb_update_descriptors(void)
;	-----------------------------------------
;	 function usb_update_descriptors
;	-----------------------------------------
_usb_update_descriptors:
	ar7 = 0x07
	ar6 = 0x06
	ar5 = 0x05
	ar4 = 0x04
	ar3 = 0x03
	ar2 = 0x02
	ar1 = 0x01
	ar0 = 0x00
;	usb.c:49: if (USBCS & bmHSM) /* High-speed setup */
	mov	dptr,#_USBCS
	movx	a,@dptr
	mov	r7,a
	jnb	acc.7,00102$
;	usb.c:51: descr_config    = &hs_descr_config;
	mov	_descr_config,#_hs_descr_config
	mov	(_descr_config + 1),#(_hs_descr_config >> 8)
;	usb.c:52: descr_other     = &fs_descr_config;
	mov	_descr_other,#_fs_descr_config
	mov	(_descr_other + 1),#(_fs_descr_config >> 8)
	ret
00102$:
;	usb.c:56: descr_config    = &fs_descr_config;
	mov	_descr_config,#_fs_descr_config
	mov	(_descr_config + 1),#(_fs_descr_config >> 8)
;	usb.c:57: descr_other     = &hs_descr_config;
	mov	_descr_other,#_hs_descr_config
	mov	(_descr_other + 1),#(_hs_descr_config >> 8)
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'ep_to_cs'
;------------------------------------------------------------
;ep                        Allocated to registers r7 
;------------------------------------------------------------
;	usb.c:62: __xdata volatile uchar *ep_to_cs(uchar ep)
;	-----------------------------------------
;	 function ep_to_cs
;	-----------------------------------------
_ep_to_cs:
	mov	r7,dpl
;	usb.c:64: if (ep == 1)
	cjne	r7,#0x01,00102$
;	usb.c:65: return EP1OUTCS;
	mov	dptr,#_EP1OUTCS
	movx	a,@dptr
	mov	r6,a
	mov	r5,#0x00
	mov	dpl,r6
	mov	dph,r5
	ret
00102$:
;	usb.c:67: if (ep == 0x81)
	cjne	r7,#0x81,00104$
;	usb.c:68: return EP1INCS;
	mov	dptr,#_EP1INCS
	movx	a,@dptr
	mov	r6,a
	mov	r5,#0x00
	mov	dpl,r6
	mov	dph,r5
	ret
00104$:
;	usb.c:70: ep = ep & USB_ENDPOINT_NUMBER_MASK;
	anl	ar7,#0x0F
;	usb.c:72: if (ep == 0)
	mov	a,r7
	jnz	00106$
;	usb.c:73: return EP0CS;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	mov	r5,#0x00
	mov	dpl,r6
	mov	dph,r5
	ret
00106$:
;	usb.c:75: return EP2CS + (ep >> 1);
	mov	dptr,#_EP2CS
	movx	a,@dptr
	mov	r6,a
	mov	r5,#0x00
	mov	a,r7
	clr	c
	rrc	a
	mov	r4,#0x00
	add	a,r6
	mov	r6,a
	mov	a,r4
	addc	a,r5
	mov	dpl,r6
	mov	dph,a
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'ep_num_check'
;------------------------------------------------------------
;ep                        Allocated to registers r7 
;------------------------------------------------------------
;	usb.c:81: uchar ep_num_check(uchar ep)
;	-----------------------------------------
;	 function ep_num_check
;	-----------------------------------------
_ep_num_check:
	mov	r7,dpl
;	usb.c:84: ep = ep & USB_ENDPOINT_NUMBER_MASK;
	anl	ar7,#0x0F
;	usb.c:86: if (ep == 1) return 1;
	cjne	r7,#0x01,00102$
	mov	dpl,#0x01
	ret
00102$:
;	usb.c:88: if (ep > 8) return 0;
	mov	a,r7
	add	a,#0xff - 0x08
	jnc	00104$
	mov	dpl,#0x00
	ret
00104$:
;	usb.c:90: return (ep % 2 == 0);
	anl	ar7,#0x01
	clr	a
	cjne	r7,#0x00,00112$
	inc	a
00112$:
	mov	dpl,a
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'usb_setup_handler'
;------------------------------------------------------------
;setup                     Allocated to registers 
;ptr                       Allocated to registers r5 r6 
;__00060000                Allocated to registers r5 r6 
;__00050001                Allocated to registers r6 r7 
;------------------------------------------------------------
;	usb.c:93: void usb_setup_handler(void)
;	-----------------------------------------
;	 function usb_setup_handler
;	-----------------------------------------
_usb_setup_handler:
;	usb.c:95: setupdata *setup = (setupdata *)SETUPDAT;
;	usb.c:98: SUDAV_service = 0;
	clr	_SUDAV_service
;	usb.c:100: switch (setup->bmRequestType & USB_TYPE_MASK)
	mov	dptr,#_SETUPDAT
	movx	a,@dptr
	mov	r7,a
	mov	a,#0x60
	anl	a,r7
	mov	r6,a
	jz	00101$
	cjne	r6,#0x20,00216$
	ljmp	00169$
00216$:
	cjne	r6,#0x40,00217$
	ljmp	00170$
00217$:
	cjne	r6,#0x60,00218$
	ljmp	00169$
00218$:
	ljmp	00173$
;	usb.c:102: case USB_TYPE_STANDARD:
00101$:
;	usb.c:104: if ((setup->bmRequestType & USB_DIR_IN) == USB_DIR_IN)
	mov	a,#0x80
	anl	a,r7
	mov	r6,a
	cjne	r6,#0x80,00219$
	sjmp	00220$
00219$:
	ljmp	00166$
00220$:
;	usb.c:107: switch (setup->bmRequest)
	mov	dptr,#(_SETUPDAT + 0x0001)
	mov	b,#0x00
	lcall	__gptrget
	mov	r6,a
	jz	00102$
	cjne	r6,#0x06,00222$
	ljmp	00111$
00222$:
	cjne	r6,#0x08,00223$
	ljmp	00128$
00223$:
	cjne	r6,#0x0A,00224$
	ljmp	00129$
00224$:
	ljmp	00131$
;	usb.c:109: case USB_REQ_GET_STATUS:
00102$:
;	usb.c:110: switch (setup->bmRequestType & USB_RECIP_MASK)
	mov	a,#0x1F
	anl	a,r7
	mov	r6,a
	jz	00103$
	cjne	r6,#0x01,00226$
	sjmp	00104$
00226$:
;	usb.c:113: case USB_RECIP_DEVICE:
	cjne	r6,#0x02,00109$
	sjmp	00105$
00103$:
;	usb.c:114: EP0BUF[0] = 1 << USB_DEVICE_SELF_POWERED;
	mov	dptr,#_EP0BUF
	mov	a,#0x01
	movx	@dptr,a
;	usb.c:115: EP0BUF[1] = 0;
	mov	dptr,#(_EP0BUF + 0x0001)
;	usb.c:116: EP0BCH    = 0;
	clr	a
	movx	@dptr,a
	mov	dptr,#_EP0BCH
	movx	@dptr,a
;	usb.c:117: EP0BCL    = 2;
	mov	dptr,#_EP0BCL
	mov	a,#0x02
	movx	@dptr,a
;	usb.c:118: break;
	ljmp	00173$
;	usb.c:120: case USB_RECIP_INTERFACE:
00104$:
;	usb.c:121: EP0BUF[0] = 0;
	mov	dptr,#_EP0BUF
;	usb.c:122: EP0BUF[1] = 0;
;	usb.c:123: EP0BCH    = 0;
	clr	a
	movx	@dptr,a
	mov	dptr,#(_EP0BUF + 0x0001)
	movx	@dptr,a
	mov	dptr,#_EP0BCH
	movx	@dptr,a
;	usb.c:124: EP0BCL    = 2;
	mov	dptr,#_EP0BCL
	mov	a,#0x02
	movx	@dptr,a
;	usb.c:125: break;
	ljmp	00173$
;	usb.c:127: case USB_RECIP_ENDPOINT:
00105$:
;	usb.c:128: if (ep_num_check(setup->wIndexL))
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,#0x00
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_num_check
	mov	a,dpl
	jz	00107$
;	usb.c:130: EP0BUF[0] = *ep_to_cs(setup->wIndexL) & bmEPSTALL;
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,#0x00
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_to_cs
	movx	a,@dptr
	mov	r6,a
	anl	ar6,#0x01
	mov	dptr,#_EP0BUF
	mov	a,r6
	movx	@dptr,a
;	usb.c:131: EP0BUF[1] = 0;
	mov	dptr,#(_EP0BUF + 0x0001)
;	usb.c:132: EP0BCH    = 0;
	clr	a
	movx	@dptr,a
	mov	dptr,#_EP0BCH
	movx	@dptr,a
;	usb.c:133: EP0BCL    = 2;
	mov	dptr,#_EP0BCL
	mov	a,#0x02
	movx	@dptr,a
	ljmp	00173$
00107$:
;	usb.c:137: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:138: break;
	ljmp	00173$
;	usb.c:139: default:
00109$:
;	usb.c:140: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:142: break;
	ljmp	00173$
;	usb.c:143: case USB_REQ_GET_DESCRIPTOR:
00111$:
;	usb.c:144: switch (setup->wValueH)
	mov	dptr,#(_SETUPDAT + 0x0003)
	mov	b,#0x00
	lcall	__gptrget
	mov	r6,a
	cjne	r6,#0x01,00229$
	sjmp	00112$
00229$:
	cjne	r6,#0x02,00230$
	sjmp	00114$
00230$:
	cjne	r6,#0x03,00231$
	sjmp	00118$
00231$:
	cjne	r6,#0x06,00232$
	sjmp	00113$
00232$:
	cjne	r6,#0x07,00233$
	ljmp	00122$
00233$:
	ljmp	00126$
;	usb.c:147: case USB_DT_DEVICE:
00112$:
;	usb.c:148: SUDPTRH = ((ushort)&descr_device) >> 8;
	mov	r5,#_descr_device
	mov	r6,#(_descr_device >> 8)
	mov	dptr,#_SUDPTRH
	mov	a,r6
	movx	@dptr,a
;	usb.c:149: SUDPTRL = ((ushort)&descr_device) & 0xff;
	mov	r5,#_descr_device
	mov	r6,#(_descr_device >> 8)
	mov	r6,#0x00
	mov	dptr,#_SUDPTRL
	mov	a,r5
	movx	@dptr,a
;	usb.c:150: break;
	ljmp	00173$
;	usb.c:152: case USB_DT_DEVICE_QUALIFIER:
00113$:
;	usb.c:153: SUDPTRH = ((ushort)&descr_qualifier) >> 8;
	mov	r5,#_descr_qualifier
	mov	r6,#(_descr_qualifier >> 8)
	mov	dptr,#_SUDPTRH
	mov	a,r6
	movx	@dptr,a
;	usb.c:154: SUDPTRL = ((ushort)&descr_qualifier) & 0xff;
	mov	r5,#_descr_qualifier
	mov	r6,#(_descr_qualifier >> 8)
	mov	r6,#0x00
	mov	dptr,#_SUDPTRL
	mov	a,r5
	movx	@dptr,a
;	usb.c:155: break;
	ljmp	00173$
;	usb.c:157: case USB_DT_CONFIG:
00114$:
;	usb.c:158: if (setup->wValueL != 0)
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	jz	00116$
;	usb.c:159: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
	ljmp	00173$
00116$:
;	usb.c:162: SUDPTRH = (ushort)descr_config >> 8;
	mov	r5,_descr_config
	mov	r6,(_descr_config + 1)
	mov	dptr,#_SUDPTRH
	mov	a,r6
	movx	@dptr,a
;	usb.c:163: SUDPTRL = (ushort)descr_config & 0xff;
	mov	r6,#0x00
	mov	dptr,#_SUDPTRL
	mov	a,r5
	movx	@dptr,a
;	usb.c:165: break;
	ljmp	00173$
;	usb.c:167: case USB_DT_STRING:
00118$:
;	usb.c:168: if (setup->wValueL >= N_DESC_STRINGS)
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	mov	r6,a
	cjne	r6,#0x08,00235$
00235$:
	jc	00120$
;	usb.c:169: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r5,a
	orl	a,#0x01
	movx	@dptr,a
	ljmp	00173$
00120$:
;	usb.c:172: __xdata usb_string *ptr = string_ptrs[setup->wValueL];
	mov	a,r6
	mov	b,#0x02
	mul	ab
	add	a,#_string_ptrs
	mov	dpl,a
	mov	a,#(_string_ptrs >> 8)
	addc	a,b
	mov	dph,a
	movx	a,@dptr
	mov	r5,a
	inc	dptr
	movx	a,@dptr
;	usb.c:173: SUDPTRH = (ushort)ptr >> 8;
	mov	dptr,#_SUDPTRH
	movx	@dptr,a
;	usb.c:174: SUDPTRL = (ushort)ptr & 0xff;
	mov	r6,#0x00
	mov	dptr,#_SUDPTRL
	mov	a,r5
	movx	@dptr,a
;	usb.c:176: break;
	ljmp	00173$
;	usb.c:178: case USB_DT_OTHER_SPEED_CONFIG:
00122$:
;	usb.c:179: if (setup->wValueL != 0)
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	jz	00124$
;	usb.c:180: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
	ljmp	00173$
00124$:
;	usb.c:183: SUDPTRH = (ushort)descr_other >> 8;
	mov	r5,_descr_other
	mov	r6,(_descr_other + 1)
	mov	dptr,#_SUDPTRH
	mov	a,r6
	movx	@dptr,a
;	usb.c:184: SUDPTRL = (ushort)descr_other & 0xff;
	mov	r6,#0x00
	mov	dptr,#_SUDPTRL
	mov	a,r5
	movx	@dptr,a
;	usb.c:186: break;
	ljmp	00173$
;	usb.c:187: default:
00126$:
;	usb.c:188: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:190: break;
	ljmp	00173$
;	usb.c:192: case USB_REQ_GET_CONFIGURATION:
00128$:
;	usb.c:193: EP0BUF[0] = usb_config_sel;
	mov	dptr,#_EP0BUF
	mov	a,_usb_config_sel
	movx	@dptr,a
;	usb.c:194: EP0BCH    = 0;
	mov	dptr,#_EP0BCH
	clr	a
	movx	@dptr,a
;	usb.c:195: EP0BCL    = 1;
	mov	dptr,#_EP0BCL
	mov	a,#0x01
	movx	@dptr,a
;	usb.c:196: break;
	ljmp	00173$
;	usb.c:198: case USB_REQ_GET_INTERFACE:
00129$:
;	usb.c:199: EP0BUF[0] = usb_alt_sel;
	mov	dptr,#_EP0BUF
	mov	a,_usb_alt_sel
	movx	@dptr,a
;	usb.c:200: EP0BCH    = 0;
	mov	dptr,#_EP0BCH
	clr	a
	movx	@dptr,a
;	usb.c:201: EP0BCL    = 1;
	mov	dptr,#_EP0BCL
	mov	a,#0x01
	movx	@dptr,a
;	usb.c:202: break;
	ljmp	00173$
;	usb.c:204: default:
00131$:
;	usb.c:205: EP0CS |= bmEPSTALL; /* Not implemented */
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:207: }
	ljmp	00173$
00166$:
;	usb.c:211: switch (setup->bmRequest)
	mov	dptr,#(_SETUPDAT + 0x0001)
	mov	b,#0x00
	lcall	__gptrget
	mov	r6,a
	cjne	r6,#0x01,00238$
	sjmp	00133$
00238$:
	cjne	r6,#0x03,00239$
	ljmp	00142$
00239$:
	cjne	r6,#0x05,00240$
	ljmp	00163$
00240$:
	cjne	r6,#0x07,00241$
	ljmp	00163$
00241$:
	cjne	r6,#0x09,00242$
	ljmp	00153$
00242$:
	cjne	r6,#0x0B,00243$
	ljmp	00157$
00243$:
	ljmp	00163$
;	usb.c:214: case USB_REQ_CLEAR_FEATURE:
00133$:
;	usb.c:215: switch (setup->bmRequestType & USB_RECIP_MASK)
	mov	a,#0x1F
	anl	a,r7
	mov	r6,a
	jz	00134$
;	usb.c:217: case USB_RECIP_DEVICE:
	cjne	r6,#0x02,00140$
	sjmp	00135$
00134$:
;	usb.c:220: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:221: break;
	ljmp	00173$
;	usb.c:222: case USB_RECIP_ENDPOINT:
00135$:
;	usb.c:223: if (setup->wValueL == 0 && ep_num_check(setup->wIndexL))
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	jnz	00137$
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,a
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_num_check
	mov	a,dpl
	jz	00137$
;	usb.c:226: * ep_to_cs(setup->wIndexL) &= ~bmEPSTALL;
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,#0x00
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_to_cs
	mov	r5,dpl
	mov  r6,dph
	movx	a,@dptr
	mov	r4,a
	anl	ar4,#0xFE
	mov	dpl,r5
	mov	dph,r6
	mov	a,r4
	movx	@dptr,a
;	usb.c:227: reset_toggle(setup->wIndexL);
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,#0x00
	lcall	__gptrget
	mov	dpl,a
	lcall	_reset_toggle
	ljmp	00173$
00137$:
;	usb.c:230: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:231: break;
	ljmp	00173$
;	usb.c:232: default:
00140$:
;	usb.c:233: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r6,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:235: break;
	ljmp	00173$
;	usb.c:237: case USB_REQ_SET_FEATURE:
00142$:
;	usb.c:238: switch (setup->bmRequestType & USB_RECIP_MASK)
	anl	ar7,#0x1F
	cjne	r7,#0x00,00248$
	sjmp	00143$
00248$:
;	usb.c:240: case USB_RECIP_DEVICE:
	cjne	r7,#0x02,00151$
	sjmp	00146$
00143$:
;	usb.c:241: if (setup->wValueL == 1) /* Set remote wakeup - not valid */
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	mov	r7,a
	cjne	r7,#0x01,00250$
	sjmp	00251$
00250$:
	ljmp	00173$
00251$:
;	usb.c:242: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:243: break;
	ljmp	00173$
;	usb.c:244: case USB_RECIP_ENDPOINT:
00146$:
;	usb.c:245: if (setup->wValueL == 0 && ep_num_check(setup->wIndexL))
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	jnz	00148$
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,a
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_num_check
	mov	a,dpl
	jz	00148$
;	usb.c:247: * ep_to_cs(setup->wIndexL) |= bmEPSTALL;
	mov	dptr,#(_SETUPDAT + 0x0004)
	mov	b,#0x00
	lcall	__gptrget
	mov	dpl,a
	lcall	_ep_to_cs
	mov	r6,dpl
	mov  r7,dph
	movx	a,@dptr
	mov	r5,a
	orl	ar5,#0x01
	mov	dpl,r6
	mov	dph,r7
	mov	a,r5
	movx	@dptr,a
	ljmp	00173$
00148$:
;	usb.c:249: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:250: break;
	ljmp	00173$
;	usb.c:251: default:
00151$:
;	usb.c:252: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:254: break;
	ljmp	00173$
;	usb.c:256: case USB_REQ_SET_CONFIGURATION:
00153$:
;	usb.c:257: usb_config_sel = setup->wValueL;
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
	mov	_usb_config_sel,a
;	usb.c:258: if (usb_alt_sel == 0) /* Only EP0 (IN/OUT) and EP8 (OUT) */
	mov	a,_usb_alt_sel
;	usb.c:260: reset_toggle(0);
	jnz	00155$
	mov	dpl,a
	lcall	_reset_toggle
;	usb.c:261: reset_toggle(8);
	mov	dpl,#0x08
	lcall	_reset_toggle
;	usb.c:262: reset_toggle(USB_ENDPOINT_DIR_MASK);
	mov	dpl,#0x80
	lcall	_reset_toggle
	sjmp	00173$
00155$:
;	usb.c:267: reset_toggle(2);
	mov	dpl,#0x02
	lcall	_reset_toggle
;	usb.c:268: reset_toggle(USB_ENDPOINT_DIR_MASK | 6);
	mov	dpl,#0x86
	lcall	_reset_toggle
;	usb.c:270: break;
;	usb.c:272: case USB_REQ_SET_INTERFACE:
	sjmp	00173$
00157$:
;	usb.c:273: usb_alt_sel = setup->wValueL;
	mov	dptr,#(_SETUPDAT + 0x0002)
	mov	b,#0x00
	lcall	__gptrget
;	usb.c:274: if (usb_alt_sel == 0) /* EP0 (IN/OUT) and EP8 (OUT) */
	mov	_usb_alt_sel,a
;	usb.c:276: reset_toggle(0);
	jnz	00159$
	mov	dpl,a
	lcall	_reset_toggle
;	usb.c:277: reset_toggle(8);
	mov	dpl,#0x08
	lcall	_reset_toggle
;	usb.c:278: reset_toggle(USB_ENDPOINT_DIR_MASK);
	mov	dpl,#0x80
	lcall	_reset_toggle
	sjmp	00173$
00159$:
;	usb.c:283: reset_toggle(2);
	mov	dpl,#0x02
	lcall	_reset_toggle
;	usb.c:284: reset_toggle(USB_ENDPOINT_DIR_MASK | 6);
	mov	dpl,#0x86
	lcall	_reset_toggle
;	usb.c:286: break;
;	usb.c:289: default:
	sjmp	00173$
00163$:
;	usb.c:290: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:293: break;
;	usb.c:295: case USB_TYPE_RESERVED:
	sjmp	00173$
00169$:
;	usb.c:296: EP0CS |= bmEPSTALL;	/* Drop on the floor, not handled */
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:297: break;
;	usb.c:299: case USB_TYPE_VENDOR:
	sjmp	00173$
00170$:
;	usb.c:301: if (!vendor_cmd_handler())
	lcall	_vendor_cmd_handler
	mov	a,dpl
	jnz	00173$
;	usb.c:302: EP0CS |= bmEPSTALL;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	mov	r7,a
	orl	a,#0x01
	movx	@dptr,a
;	usb.c:304: }
00173$:
;	usb.c:307: EP0CS |= bmHSNAK;
	mov	dptr,#_EP0CS
	movx	a,@dptr
	orl	a,#0x80
	movx	@dptr,a
	ret
	.area CSEG    (CODE)
	.area CONST   (CODE)
	.area XINIT   (CODE)
	.area CABS    (ABS,CODE)
