1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:53 2012 5 ;-------------------------------------------------------- 6 .module usb_common 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _epcs 13 .globl _plausible_endpoint 14 .globl _EIPX6 15 .globl _EIPX5 16 .globl _EIPX4 17 .globl _PI2C 18 .globl _PUSB 19 .globl _EIEX6 20 .globl _EIEX5 21 .globl _EIEX4 22 .globl _EI2C 23 .globl _EIUSB 24 .globl _SMOD1 25 .globl _ERESI 26 .globl _RESI 27 .globl _INT6 28 .globl _CY 29 .globl _AC 30 .globl _F0 31 .globl _RS1 32 .globl _RS0 33 .globl _OV 34 .globl _FL 35 .globl _P 36 .globl _TF2 37 .globl _EXF2 38 .globl _RCLK 39 .globl _TCLK 40 .globl _EXEN2 41 .globl _TR2 42 .globl _C_T2 43 .globl _CP_RL2 44 .globl _SM01 45 .globl _SM11 46 .globl _SM21 47 .globl _REN1 48 .globl _TB81 49 .globl _RB81 50 .globl _TI1 51 .globl _RI1 52 .globl _PS1 53 .globl _PT2 54 .globl _PS0 55 .globl _PT1 56 .globl _PX1 57 .globl _PT0 58 .globl _PX0 59 .globl _D7 60 .globl _D6 61 .globl _D5 62 .globl _D4 63 .globl _D3 64 .globl _D2 65 .globl _D1 66 .globl _D0 67 .globl _EA 68 .globl _ES1 69 .globl _ET2 70 .globl _ES0 71 .globl _ET1 72 .globl _EX1 73 .globl _ET0 74 .globl _EX0 75 .globl _SM0 76 .globl _SM1 77 .globl _SM2 78 .globl _REN 79 .globl _TB8 80 .globl _RB8 81 .globl _TI 82 .globl _RI 83 .globl _TF1 84 .globl _TR1 85 .globl _TF0 86 .globl _TR0 87 .globl _IE1 88 .globl _IT1 89 .globl _IE0 90 .globl _IT0 91 .globl _SEL 92 .globl _A7 93 .globl _A6 94 .globl _A5 95 .globl _A4 96 .globl _A3 97 .globl _A2 98 .globl _A1 99 .globl _A0 100 .globl _EIP 101 .globl _B 102 .globl _EIE 103 .globl _ACC 104 .globl _EICON 105 .globl _PSW 106 .globl _TH2 107 .globl _TL2 108 .globl _RCAP2H 109 .globl _RCAP2L 110 .globl _T2CON 111 .globl _SBUF1 112 .globl _SCON1 113 .globl _GPIFSGLDATLNOX 114 .globl _GPIFSGLDATLX 115 .globl _GPIFSGLDATH 116 .globl _GPIFTRIG 117 .globl _EP01STAT 118 .globl _IP 119 .globl _OEE 120 .globl _OED 121 .globl _OEC 122 .globl _OEB 123 .globl _OEA 124 .globl _IOE 125 .globl _IOD 126 .globl _AUTOPTRSETUP 127 .globl _EP68FIFOFLGS 128 .globl _EP24FIFOFLGS 129 .globl _EP2468STAT 130 .globl _IE 131 .globl _INT4CLR 132 .globl _INT2CLR 133 .globl _IOC 134 .globl _AUTODAT2 135 .globl _AUTOPTRL2 136 .globl _AUTOPTRH2 137 .globl _AUTODAT1 138 .globl _APTR1L 139 .globl _APTR1H 140 .globl _SBUF0 141 .globl _SCON0 142 .globl _MPAGE 143 .globl _EXIF 144 .globl _IOB 145 .globl _CKCON 146 .globl _TH1 147 .globl _TH0 148 .globl _TL1 149 .globl _TL0 150 .globl _TMOD 151 .globl _TCON 152 .globl _PCON 153 .globl _DPS 154 .globl _DPH1 155 .globl _DPL1 156 .globl _DPH 157 .globl _DPL 158 .globl _SP 159 .globl _IOA 160 .globl _EP8FIFOBUF 161 .globl _EP6FIFOBUF 162 .globl _EP4FIFOBUF 163 .globl _EP2FIFOBUF 164 .globl _EP1INBUF 165 .globl _EP1OUTBUF 166 .globl _EP0BUF 167 .globl _CT4 168 .globl _CT3 169 .globl _CT2 170 .globl _CT1 171 .globl _USBTEST 172 .globl _TESTCFG 173 .globl _DBUG 174 .globl _UDMACRCQUAL 175 .globl _UDMACRCL 176 .globl _UDMACRCH 177 .globl _GPIFHOLDAMOUNT 178 .globl _FLOWSTBHPERIOD 179 .globl _FLOWSTBEDGE 180 .globl _FLOWSTB 181 .globl _FLOWHOLDOFF 182 .globl _FLOWEQ1CTL 183 .globl _FLOWEQ0CTL 184 .globl _FLOWLOGIC 185 .globl _FLOWSTATE 186 .globl _GPIFABORT 187 .globl _GPIFREADYSTAT 188 .globl _GPIFREADYCFG 189 .globl _XGPIFSGLDATLNOX 190 .globl _XGPIFSGLDATLX 191 .globl _XGPIFSGLDATH 192 .globl _EP8GPIFTRIG 193 .globl _EP8GPIFPFSTOP 194 .globl _EP8GPIFFLGSEL 195 .globl _EP6GPIFTRIG 196 .globl _EP6GPIFPFSTOP 197 .globl _EP6GPIFFLGSEL 198 .globl _EP4GPIFTRIG 199 .globl _EP4GPIFPFSTOP 200 .globl _EP4GPIFFLGSEL 201 .globl _EP2GPIFTRIG 202 .globl _EP2GPIFPFSTOP 203 .globl _EP2GPIFFLGSEL 204 .globl _GPIFTCB0 205 .globl _GPIFTCB1 206 .globl _GPIFTCB2 207 .globl _GPIFTCB3 208 .globl _GPIFADRL 209 .globl _GPIFADRH 210 .globl _GPIFCTLCFG 211 .globl _GPIFIDLECTL 212 .globl _GPIFIDLECS 213 .globl _GPIFWFSELECT 214 .globl _SETUPDAT 215 .globl _SUDPTRCTL 216 .globl _SUDPTRL 217 .globl _SUDPTRH 218 .globl _EP8FIFOBCL 219 .globl _EP8FIFOBCH 220 .globl _EP6FIFOBCL 221 .globl _EP6FIFOBCH 222 .globl _EP4FIFOBCL 223 .globl _EP4FIFOBCH 224 .globl _EP2FIFOBCL 225 .globl _EP2FIFOBCH 226 .globl _EP8FIFOFLGS 227 .globl _EP6FIFOFLGS 228 .globl _EP4FIFOFLGS 229 .globl _EP2FIFOFLGS 230 .globl _EP8CS 231 .globl _EP6CS 232 .globl _EP4CS 233 .globl _EP2CS 234 .globl _EP1INCS 235 .globl _EP1OUTCS 236 .globl _EP0CS 237 .globl _EP8BCL 238 .globl _EP8BCH 239 .globl _EP6BCL 240 .globl _EP6BCH 241 .globl _EP4BCL 242 .globl _EP4BCH 243 .globl _EP2BCL 244 .globl _EP2BCH 245 .globl _EP1INBC 246 .globl _EP1OUTBC 247 .globl _EP0BCL 248 .globl _EP0BCH 249 .globl _FNADDR 250 .globl _MICROFRAME 251 .globl _USBFRAMEL 252 .globl _USBFRAMEH 253 .globl _TOGCTL 254 .globl _WAKEUPCS 255 .globl _SUSPEND 256 .globl _USBCS 257 .globl _XAUTODAT2 258 .globl _XAUTODAT1 259 .globl _I2CTL 260 .globl _I2DAT 261 .globl _I2CS 262 .globl _PORTECFG 263 .globl _PORTCCFG 264 .globl _PORTACFG 265 .globl _INTSETUP 266 .globl _INT4IVEC 267 .globl _INT2IVEC 268 .globl _CLRERRCNT 269 .globl _ERRCNTLIM 270 .globl _USBERRIRQ 271 .globl _USBERRIE 272 .globl _GPIFIRQ 273 .globl _GPIFIE 274 .globl _EPIRQ 275 .globl _EPIE 276 .globl _USBIRQ 277 .globl _USBIE 278 .globl _NAKIRQ 279 .globl _NAKIE 280 .globl _IBNIRQ 281 .globl _IBNIE 282 .globl _EP8FIFOIRQ 283 .globl _EP8FIFOIE 284 .globl _EP6FIFOIRQ 285 .globl _EP6FIFOIE 286 .globl _EP4FIFOIRQ 287 .globl _EP4FIFOIE 288 .globl _EP2FIFOIRQ 289 .globl _EP2FIFOIE 290 .globl _OUTPKTEND 291 .globl _INPKTEND 292 .globl _EP8ISOINPKTS 293 .globl _EP6ISOINPKTS 294 .globl _EP4ISOINPKTS 295 .globl _EP2ISOINPKTS 296 .globl _EP8FIFOPFL 297 .globl _EP8FIFOPFH 298 .globl _EP6FIFOPFL 299 .globl _EP6FIFOPFH 300 .globl _EP4FIFOPFL 301 .globl _EP4FIFOPFH 302 .globl _EP2FIFOPFL 303 .globl _EP2FIFOPFH 304 .globl _EP8AUTOINLENL 305 .globl _EP8AUTOINLENH 306 .globl _EP6AUTOINLENL 307 .globl _EP6AUTOINLENH 308 .globl _EP4AUTOINLENL 309 .globl _EP4AUTOINLENH 310 .globl _EP2AUTOINLENL 311 .globl _EP2AUTOINLENH 312 .globl _EP8FIFOCFG 313 .globl _EP6FIFOCFG 314 .globl _EP4FIFOCFG 315 .globl _EP2FIFOCFG 316 .globl _EP8CFG 317 .globl _EP6CFG 318 .globl _EP4CFG 319 .globl _EP2CFG 320 .globl _EP1INCFG 321 .globl _EP1OUTCFG 322 .globl _REVCTL 323 .globl _REVID 324 .globl _FIFOPINPOLAR 325 .globl _UART230 326 .globl _BPADDRL 327 .globl _BPADDRH 328 .globl _BREAKPT 329 .globl _FIFORESET 330 .globl _PINFLAGSCD 331 .globl _PINFLAGSAB 332 .globl _IFCONFIG 333 .globl _CPUCS 334 .globl _RES_WAVEDATA_END 335 .globl _GPIF_WAVE_DATA 336 .globl __usb_rx_overrun 337 .globl __usb_got_SUDAV 338 .globl _other_config_descr 339 .globl _current_config_descr 340 .globl _current_devqual_descr 341 .globl _current_device_descr 342 .globl __usb_alt_setting 343 .globl __usb_config 344 .globl _usb_install_handlers 345 .globl _usb_handle_setup_packet 346 ;-------------------------------------------------------- 347 ; special function registers 348 ;-------------------------------------------------------- 349 .area RSEG (DATA) 0080 350 _IOA = 0x0080 0081 351 _SP = 0x0081 0082 352 _DPL = 0x0082 0083 353 _DPH = 0x0083 0084 354 _DPL1 = 0x0084 0085 355 _DPH1 = 0x0085 0086 356 _DPS = 0x0086 0087 357 _PCON = 0x0087 0088 358 _TCON = 0x0088 0089 359 _TMOD = 0x0089 008A 360 _TL0 = 0x008a 008B 361 _TL1 = 0x008b 008C 362 _TH0 = 0x008c 008D 363 _TH1 = 0x008d 008E 364 _CKCON = 0x008e 0090 365 _IOB = 0x0090 0091 366 _EXIF = 0x0091 0092 367 _MPAGE = 0x0092 0098 368 _SCON0 = 0x0098 0099 369 _SBUF0 = 0x0099 009A 370 _APTR1H = 0x009a 009B 371 _APTR1L = 0x009b 009C 372 _AUTODAT1 = 0x009c 009D 373 _AUTOPTRH2 = 0x009d 009E 374 _AUTOPTRL2 = 0x009e 009F 375 _AUTODAT2 = 0x009f 00A0 376 _IOC = 0x00a0 00A1 377 _INT2CLR = 0x00a1 00A2 378 _INT4CLR = 0x00a2 00A8 379 _IE = 0x00a8 00AA 380 _EP2468STAT = 0x00aa 00AB 381 _EP24FIFOFLGS = 0x00ab 00AC 382 _EP68FIFOFLGS = 0x00ac 00AF 383 _AUTOPTRSETUP = 0x00af 00B0 384 _IOD = 0x00b0 00B1 385 _IOE = 0x00b1 00B2 386 _OEA = 0x00b2 00B3 387 _OEB = 0x00b3 00B4 388 _OEC = 0x00b4 00B5 389 _OED = 0x00b5 00B6 390 _OEE = 0x00b6 00B8 391 _IP = 0x00b8 00BA 392 _EP01STAT = 0x00ba 00BB 393 _GPIFTRIG = 0x00bb 00BD 394 _GPIFSGLDATH = 0x00bd 00BE 395 _GPIFSGLDATLX = 0x00be 00BF 396 _GPIFSGLDATLNOX = 0x00bf 00C0 397 _SCON1 = 0x00c0 00C1 398 _SBUF1 = 0x00c1 00C8 399 _T2CON = 0x00c8 00CA 400 _RCAP2L = 0x00ca 00CB 401 _RCAP2H = 0x00cb 00CC 402 _TL2 = 0x00cc 00CD 403 _TH2 = 0x00cd 00D0 404 _PSW = 0x00d0 00D8 405 _EICON = 0x00d8 00E0 406 _ACC = 0x00e0 00E8 407 _EIE = 0x00e8 00F0 408 _B = 0x00f0 00F8 409 _EIP = 0x00f8 410 ;-------------------------------------------------------- 411 ; special function bits 412 ;-------------------------------------------------------- 413 .area RSEG (DATA) 0080 414 _A0 = 0x0080 0081 415 _A1 = 0x0081 0082 416 _A2 = 0x0082 0083 417 _A3 = 0x0083 0084 418 _A4 = 0x0084 0085 419 _A5 = 0x0085 0086 420 _A6 = 0x0086 0087 421 _A7 = 0x0087 0086 422 _SEL = 0x0086 0088 423 _IT0 = 0x0088 0089 424 _IE0 = 0x0089 008A 425 _IT1 = 0x008a 008B 426 _IE1 = 0x008b 008C 427 _TR0 = 0x008c 008D 428 _TF0 = 0x008d 008E 429 _TR1 = 0x008e 008F 430 _TF1 = 0x008f 0098 431 _RI = 0x0098 0099 432 _TI = 0x0099 009A 433 _RB8 = 0x009a 009B 434 _TB8 = 0x009b 009C 435 _REN = 0x009c 009D 436 _SM2 = 0x009d 009E 437 _SM1 = 0x009e 009F 438 _SM0 = 0x009f 00A8 439 _EX0 = 0x00a8 00A9 440 _ET0 = 0x00a9 00AA 441 _EX1 = 0x00aa 00AB 442 _ET1 = 0x00ab 00AC 443 _ES0 = 0x00ac 00AD 444 _ET2 = 0x00ad 00AE 445 _ES1 = 0x00ae 00AF 446 _EA = 0x00af 00B0 447 _D0 = 0x00b0 00B1 448 _D1 = 0x00b1 00B2 449 _D2 = 0x00b2 00B3 450 _D3 = 0x00b3 00B4 451 _D4 = 0x00b4 00B5 452 _D5 = 0x00b5 00B6 453 _D6 = 0x00b6 00B7 454 _D7 = 0x00b7 00B8 455 _PX0 = 0x00b8 00B9 456 _PT0 = 0x00b9 00BA 457 _PX1 = 0x00ba 00BB 458 _PT1 = 0x00bb 00BC 459 _PS0 = 0x00bc 00BD 460 _PT2 = 0x00bd 00BE 461 _PS1 = 0x00be 00C0 462 _RI1 = 0x00c0 00C1 463 _TI1 = 0x00c1 00C2 464 _RB81 = 0x00c2 00C3 465 _TB81 = 0x00c3 00C4 466 _REN1 = 0x00c4 00C5 467 _SM21 = 0x00c5 00C6 468 _SM11 = 0x00c6 00C7 469 _SM01 = 0x00c7 00C8 470 _CP_RL2 = 0x00c8 00C9 471 _C_T2 = 0x00c9 00CA 472 _TR2 = 0x00ca 00CB 473 _EXEN2 = 0x00cb 00CC 474 _TCLK = 0x00cc 00CD 475 _RCLK = 0x00cd 00CE 476 _EXF2 = 0x00ce 00CF 477 _TF2 = 0x00cf 00D0 478 _P = 0x00d0 00D1 479 _FL = 0x00d1 00D2 480 _OV = 0x00d2 00D3 481 _RS0 = 0x00d3 00D4 482 _RS1 = 0x00d4 00D5 483 _F0 = 0x00d5 00D6 484 _AC = 0x00d6 00D7 485 _CY = 0x00d7 00DB 486 _INT6 = 0x00db 00DC 487 _RESI = 0x00dc 00DD 488 _ERESI = 0x00dd 00DF 489 _SMOD1 = 0x00df 00E8 490 _EIUSB = 0x00e8 00E9 491 _EI2C = 0x00e9 00EA 492 _EIEX4 = 0x00ea 00EB 493 _EIEX5 = 0x00eb 00EC 494 _EIEX6 = 0x00ec 00F8 495 _PUSB = 0x00f8 00F9 496 _PI2C = 0x00f9 00FA 497 _EIPX4 = 0x00fa 00FB 498 _EIPX5 = 0x00fb 00FC 499 _EIPX6 = 0x00fc 500 ;-------------------------------------------------------- 501 ; overlayable register banks 502 ;-------------------------------------------------------- 503 .area REG_BANK_0 (REL,OVR,DATA) 0000 504 .ds 8 505 ;-------------------------------------------------------- 506 ; overlayable bit register bank 507 ;-------------------------------------------------------- 508 .area BIT_BANK (REL,OVR,DATA) 0000 509 bits: 0000 510 .ds 1 8000 511 b0 = bits[0] 8100 512 b1 = bits[1] 8200 513 b2 = bits[2] 8300 514 b3 = bits[3] 8400 515 b4 = bits[4] 8500 516 b5 = bits[5] 8600 517 b6 = bits[6] 8700 518 b7 = bits[7] 519 ;-------------------------------------------------------- 520 ; internal ram data 521 ;-------------------------------------------------------- 522 .area DSEG (DATA) 0000 523 __usb_config:: 0000 524 .ds 1 0001 525 __usb_alt_setting:: 0001 526 .ds 1 0002 527 _current_device_descr:: 0002 528 .ds 2 0004 529 _current_devqual_descr:: 0004 530 .ds 2 0006 531 _current_config_descr:: 0006 532 .ds 2 0008 533 _other_config_descr:: 0008 534 .ds 2 535 ;-------------------------------------------------------- 536 ; overlayable items in internal ram 537 ;-------------------------------------------------------- 538 .area OSEG (OVR,DATA) 539 .area OSEG (OVR,DATA) 540 ;-------------------------------------------------------- 541 ; indirectly addressable internal ram data 542 ;-------------------------------------------------------- 543 .area ISEG (DATA) 544 ;-------------------------------------------------------- 545 ; absolute internal ram data 546 ;-------------------------------------------------------- 547 .area IABS (ABS,DATA) 548 .area IABS (ABS,DATA) 549 ;-------------------------------------------------------- 550 ; bit data 551 ;-------------------------------------------------------- 552 .area BSEG (BIT) 0000 553 __usb_got_SUDAV:: 0000 554 .ds 1 0001 555 __usb_rx_overrun:: 0001 556 .ds 1 557 ;-------------------------------------------------------- 558 ; paged external ram data 559 ;-------------------------------------------------------- 560 .area PSEG (PAG,XDATA) 561 ;-------------------------------------------------------- 562 ; external ram data 563 ;-------------------------------------------------------- 564 .area XSEG (XDATA) E400 565 _GPIF_WAVE_DATA = 0xe400 E480 566 _RES_WAVEDATA_END = 0xe480 E600 567 _CPUCS = 0xe600 E601 568 _IFCONFIG = 0xe601 E602 569 _PINFLAGSAB = 0xe602 E603 570 _PINFLAGSCD = 0xe603 E604 571 _FIFORESET = 0xe604 E605 572 _BREAKPT = 0xe605 E606 573 _BPADDRH = 0xe606 E607 574 _BPADDRL = 0xe607 E608 575 _UART230 = 0xe608 E609 576 _FIFOPINPOLAR = 0xe609 E60A 577 _REVID = 0xe60a E60B 578 _REVCTL = 0xe60b E610 579 _EP1OUTCFG = 0xe610 E611 580 _EP1INCFG = 0xe611 E612 581 _EP2CFG = 0xe612 E613 582 _EP4CFG = 0xe613 E614 583 _EP6CFG = 0xe614 E615 584 _EP8CFG = 0xe615 E618 585 _EP2FIFOCFG = 0xe618 E619 586 _EP4FIFOCFG = 0xe619 E61A 587 _EP6FIFOCFG = 0xe61a E61B 588 _EP8FIFOCFG = 0xe61b E620 589 _EP2AUTOINLENH = 0xe620 E621 590 _EP2AUTOINLENL = 0xe621 E622 591 _EP4AUTOINLENH = 0xe622 E623 592 _EP4AUTOINLENL = 0xe623 E624 593 _EP6AUTOINLENH = 0xe624 E625 594 _EP6AUTOINLENL = 0xe625 E626 595 _EP8AUTOINLENH = 0xe626 E627 596 _EP8AUTOINLENL = 0xe627 E630 597 _EP2FIFOPFH = 0xe630 E631 598 _EP2FIFOPFL = 0xe631 E632 599 _EP4FIFOPFH = 0xe632 E633 600 _EP4FIFOPFL = 0xe633 E634 601 _EP6FIFOPFH = 0xe634 E635 602 _EP6FIFOPFL = 0xe635 E636 603 _EP8FIFOPFH = 0xe636 E637 604 _EP8FIFOPFL = 0xe637 E640 605 _EP2ISOINPKTS = 0xe640 E641 606 _EP4ISOINPKTS = 0xe641 E642 607 _EP6ISOINPKTS = 0xe642 E643 608 _EP8ISOINPKTS = 0xe643 E648 609 _INPKTEND = 0xe648 E649 610 _OUTPKTEND = 0xe649 E650 611 _EP2FIFOIE = 0xe650 E651 612 _EP2FIFOIRQ = 0xe651 E652 613 _EP4FIFOIE = 0xe652 E653 614 _EP4FIFOIRQ = 0xe653 E654 615 _EP6FIFOIE = 0xe654 E655 616 _EP6FIFOIRQ = 0xe655 E656 617 _EP8FIFOIE = 0xe656 E657 618 _EP8FIFOIRQ = 0xe657 E658 619 _IBNIE = 0xe658 E659 620 _IBNIRQ = 0xe659 E65A 621 _NAKIE = 0xe65a E65B 622 _NAKIRQ = 0xe65b E65C 623 _USBIE = 0xe65c E65D 624 _USBIRQ = 0xe65d E65E 625 _EPIE = 0xe65e E65F 626 _EPIRQ = 0xe65f E660 627 _GPIFIE = 0xe660 E661 628 _GPIFIRQ = 0xe661 E662 629 _USBERRIE = 0xe662 E663 630 _USBERRIRQ = 0xe663 E664 631 _ERRCNTLIM = 0xe664 E665 632 _CLRERRCNT = 0xe665 E666 633 _INT2IVEC = 0xe666 E667 634 _INT4IVEC = 0xe667 E668 635 _INTSETUP = 0xe668 E670 636 _PORTACFG = 0xe670 E671 637 _PORTCCFG = 0xe671 E672 638 _PORTECFG = 0xe672 E678 639 _I2CS = 0xe678 E679 640 _I2DAT = 0xe679 E67A 641 _I2CTL = 0xe67a E67B 642 _XAUTODAT1 = 0xe67b E67C 643 _XAUTODAT2 = 0xe67c E680 644 _USBCS = 0xe680 E681 645 _SUSPEND = 0xe681 E682 646 _WAKEUPCS = 0xe682 E683 647 _TOGCTL = 0xe683 E684 648 _USBFRAMEH = 0xe684 E685 649 _USBFRAMEL = 0xe685 E686 650 _MICROFRAME = 0xe686 E687 651 _FNADDR = 0xe687 E68A 652 _EP0BCH = 0xe68a E68B 653 _EP0BCL = 0xe68b E68D 654 _EP1OUTBC = 0xe68d E68F 655 _EP1INBC = 0xe68f E690 656 _EP2BCH = 0xe690 E691 657 _EP2BCL = 0xe691 E694 658 _EP4BCH = 0xe694 E695 659 _EP4BCL = 0xe695 E698 660 _EP6BCH = 0xe698 E699 661 _EP6BCL = 0xe699 E69C 662 _EP8BCH = 0xe69c E69D 663 _EP8BCL = 0xe69d E6A0 664 _EP0CS = 0xe6a0 E6A1 665 _EP1OUTCS = 0xe6a1 E6A2 666 _EP1INCS = 0xe6a2 E6A3 667 _EP2CS = 0xe6a3 E6A4 668 _EP4CS = 0xe6a4 E6A5 669 _EP6CS = 0xe6a5 E6A6 670 _EP8CS = 0xe6a6 E6A7 671 _EP2FIFOFLGS = 0xe6a7 E6A8 672 _EP4FIFOFLGS = 0xe6a8 E6A9 673 _EP6FIFOFLGS = 0xe6a9 E6AA 674 _EP8FIFOFLGS = 0xe6aa E6AB 675 _EP2FIFOBCH = 0xe6ab E6AC 676 _EP2FIFOBCL = 0xe6ac E6AD 677 _EP4FIFOBCH = 0xe6ad E6AE 678 _EP4FIFOBCL = 0xe6ae E6AF 679 _EP6FIFOBCH = 0xe6af E6B0 680 _EP6FIFOBCL = 0xe6b0 E6B1 681 _EP8FIFOBCH = 0xe6b1 E6B2 682 _EP8FIFOBCL = 0xe6b2 E6B3 683 _SUDPTRH = 0xe6b3 E6B4 684 _SUDPTRL = 0xe6b4 E6B5 685 _SUDPTRCTL = 0xe6b5 E6B8 686 _SETUPDAT = 0xe6b8 E6C0 687 _GPIFWFSELECT = 0xe6c0 E6C1 688 _GPIFIDLECS = 0xe6c1 E6C2 689 _GPIFIDLECTL = 0xe6c2 E6C3 690 _GPIFCTLCFG = 0xe6c3 E6C4 691 _GPIFADRH = 0xe6c4 E6C5 692 _GPIFADRL = 0xe6c5 E6CE 693 _GPIFTCB3 = 0xe6ce E6CF 694 _GPIFTCB2 = 0xe6cf E6D0 695 _GPIFTCB1 = 0xe6d0 E6D1 696 _GPIFTCB0 = 0xe6d1 E6D2 697 _EP2GPIFFLGSEL = 0xe6d2 E6D3 698 _EP2GPIFPFSTOP = 0xe6d3 E6D4 699 _EP2GPIFTRIG = 0xe6d4 E6DA 700 _EP4GPIFFLGSEL = 0xe6da E6DB 701 _EP4GPIFPFSTOP = 0xe6db E6DC 702 _EP4GPIFTRIG = 0xe6dc E6E2 703 _EP6GPIFFLGSEL = 0xe6e2 E6E3 704 _EP6GPIFPFSTOP = 0xe6e3 E6E4 705 _EP6GPIFTRIG = 0xe6e4 E6EA 706 _EP8GPIFFLGSEL = 0xe6ea E6EB 707 _EP8GPIFPFSTOP = 0xe6eb E6EC 708 _EP8GPIFTRIG = 0xe6ec E6F0 709 _XGPIFSGLDATH = 0xe6f0 E6F1 710 _XGPIFSGLDATLX = 0xe6f1 E6F2 711 _XGPIFSGLDATLNOX = 0xe6f2 E6F3 712 _GPIFREADYCFG = 0xe6f3 E6F4 713 _GPIFREADYSTAT = 0xe6f4 E6F5 714 _GPIFABORT = 0xe6f5 E6C6 715 _FLOWSTATE = 0xe6c6 E6C7 716 _FLOWLOGIC = 0xe6c7 E6C8 717 _FLOWEQ0CTL = 0xe6c8 E6C9 718 _FLOWEQ1CTL = 0xe6c9 E6CA 719 _FLOWHOLDOFF = 0xe6ca E6CB 720 _FLOWSTB = 0xe6cb E6CC 721 _FLOWSTBEDGE = 0xe6cc E6CD 722 _FLOWSTBHPERIOD = 0xe6cd E60C 723 _GPIFHOLDAMOUNT = 0xe60c E67D 724 _UDMACRCH = 0xe67d E67E 725 _UDMACRCL = 0xe67e E67F 726 _UDMACRCQUAL = 0xe67f E6F8 727 _DBUG = 0xe6f8 E6F9 728 _TESTCFG = 0xe6f9 E6FA 729 _USBTEST = 0xe6fa E6FB 730 _CT1 = 0xe6fb E6FC 731 _CT2 = 0xe6fc E6FD 732 _CT3 = 0xe6fd E6FE 733 _CT4 = 0xe6fe E740 734 _EP0BUF = 0xe740 E780 735 _EP1OUTBUF = 0xe780 E7C0 736 _EP1INBUF = 0xe7c0 F000 737 _EP2FIFOBUF = 0xf000 F400 738 _EP4FIFOBUF = 0xf400 F800 739 _EP6FIFOBUF = 0xf800 FC00 740 _EP8FIFOBUF = 0xfc00 741 ;-------------------------------------------------------- 742 ; absolute external ram data 743 ;-------------------------------------------------------- 744 .area XABS (ABS,XDATA) 745 ;-------------------------------------------------------- 746 ; external initialized ram data 747 ;-------------------------------------------------------- 748 .area HOME (CODE) 749 .area GSINIT0 (CODE) 750 .area GSINIT1 (CODE) 751 .area GSINIT2 (CODE) 752 .area GSINIT3 (CODE) 753 .area GSINIT4 (CODE) 754 .area GSINIT5 (CODE) 755 .area GSINIT (CODE) 756 .area GSFINAL (CODE) 757 .area CSEG (CODE) 758 ;-------------------------------------------------------- 759 ; global & static initialisations 760 ;-------------------------------------------------------- 761 .area HOME (CODE) 762 .area GSINIT (CODE) 763 .area GSFINAL (CODE) 764 .area GSINIT (CODE) 765 ; usb_common.c:72: unsigned char _usb_config = 0; 0000 75*00 00 766 mov __usb_config,#0x00 767 ; usb_common.c:73: unsigned char _usb_alt_setting = 0; // FIXME really 1/interface 0003 75*01 00 768 mov __usb_alt_setting,#0x00 769 ;-------------------------------------------------------- 770 ; Home 771 ;-------------------------------------------------------- 772 .area HOME (CODE) 773 .area HOME (CODE) 774 ;-------------------------------------------------------- 775 ; code 776 ;-------------------------------------------------------- 777 .area CSEG (CODE) 778 ;------------------------------------------------------------ 779 ;Allocation info for local variables in function 'setup_descriptors' 780 ;------------------------------------------------------------ 781 ;------------------------------------------------------------ 782 ; usb_common.c:81: setup_descriptors (void) 783 ; ----------------------------------------- 784 ; function setup_descriptors 785 ; ----------------------------------------- 0000 786 _setup_descriptors: 0002 787 ar2 = 0x02 0003 788 ar3 = 0x03 0004 789 ar4 = 0x04 0005 790 ar5 = 0x05 0006 791 ar6 = 0x06 0007 792 ar7 = 0x07 0000 793 ar0 = 0x00 0001 794 ar1 = 0x01 795 ; usb_common.c:83: if (USBCS & bmHSM){ // high speed mode 0000 90 E6 80 796 mov dptr,#_USBCS 0003 E0 797 movx a,@dptr 0004 FA 798 mov r2,a 0005 30 E7 19 799 jnb acc.7,00102$ 800 ; usb_common.c:84: current_device_descr = high_speed_device_descr; 0008 75*02r00 801 mov _current_device_descr,#_high_speed_device_descr 000B 75*03s00 802 mov (_current_device_descr + 1),#(_high_speed_device_descr >> 8) 803 ; usb_common.c:85: current_devqual_descr = high_speed_devqual_descr; 000E 75*04r00 804 mov _current_devqual_descr,#_high_speed_devqual_descr 0011 75*05s00 805 mov (_current_devqual_descr + 1),#(_high_speed_devqual_descr >> 8) 806 ; usb_common.c:86: current_config_descr = high_speed_config_descr; 0014 75*06r00 807 mov _current_config_descr,#_high_speed_config_descr 0017 75*07s00 808 mov (_current_config_descr + 1),#(_high_speed_config_descr >> 8) 809 ; usb_common.c:87: other_config_descr = full_speed_config_descr; 001A 75*08r00 810 mov _other_config_descr,#_full_speed_config_descr 001D 75*09s00 811 mov (_other_config_descr + 1),#(_full_speed_config_descr >> 8) 0020 22 812 ret 0021 813 00102$: 814 ; usb_common.c:90: current_device_descr = full_speed_device_descr; 0021 75*02r00 815 mov _current_device_descr,#_full_speed_device_descr 0024 75*03s00 816 mov (_current_device_descr + 1),#(_full_speed_device_descr >> 8) 817 ; usb_common.c:91: current_devqual_descr = full_speed_devqual_descr; 0027 75*04r00 818 mov _current_devqual_descr,#_full_speed_devqual_descr 002A 75*05s00 819 mov (_current_devqual_descr + 1),#(_full_speed_devqual_descr >> 8) 820 ; usb_common.c:92: current_config_descr = full_speed_config_descr; 002D 75*06r00 821 mov _current_config_descr,#_full_speed_config_descr 0030 75*07s00 822 mov (_current_config_descr + 1),#(_full_speed_config_descr >> 8) 823 ; usb_common.c:93: other_config_descr = high_speed_config_descr; 0033 75*08r00 824 mov _other_config_descr,#_high_speed_config_descr 0036 75*09s00 825 mov (_other_config_descr + 1),#(_high_speed_config_descr >> 8) 0039 22 826 ret 827 ;------------------------------------------------------------ 828 ;Allocation info for local variables in function 'isr_SUDAV' 829 ;------------------------------------------------------------ 830 ;------------------------------------------------------------ 831 ; usb_common.c:103: isr_SUDAV (void) interrupt 832 ; ----------------------------------------- 833 ; function isr_SUDAV 834 ; ----------------------------------------- 003A 835 _isr_SUDAV: 836 ; usb_common.c:105: clear_usb_irq (); 003A 53 91 EF 837 anl _EXIF,#0xEF 003D 75 A1 00 838 mov _INT2CLR,#0x00 839 ; usb_common.c:106: _usb_got_SUDAV = 1; 0040 D2*00 840 setb __usb_got_SUDAV 0042 32 841 reti 842 ; eliminated unneeded push/pop psw 843 ; eliminated unneeded push/pop dpl 844 ; eliminated unneeded push/pop dph 845 ; eliminated unneeded push/pop b 846 ; eliminated unneeded push/pop acc 847 ;------------------------------------------------------------ 848 ;Allocation info for local variables in function 'isr_USBRESET' 849 ;------------------------------------------------------------ 850 ;------------------------------------------------------------ 851 ; usb_common.c:111: isr_USBRESET (void) interrupt 852 ; ----------------------------------------- 853 ; function isr_USBRESET 854 ; ----------------------------------------- 0043 855 _isr_USBRESET: 0043 C0*00 856 push bits 0045 C0 E0 857 push acc 0047 C0 F0 858 push b 0049 C0 82 859 push dpl 004B C0 83 860 push dph 004D C0 02 861 push (0+2) 004F C0 03 862 push (0+3) 0051 C0 04 863 push (0+4) 0053 C0 05 864 push (0+5) 0055 C0 06 865 push (0+6) 0057 C0 07 866 push (0+7) 0059 C0 00 867 push (0+0) 005B C0 01 868 push (0+1) 005D C0 D0 869 push psw 005F 75 D0 00 870 mov psw,#0x00 871 ; usb_common.c:113: clear_usb_irq (); 0062 53 91 EF 872 anl _EXIF,#0xEF 0065 75 A1 00 873 mov _INT2CLR,#0x00 874 ; usb_common.c:114: setup_descriptors (); 0068 12s00r00 875 lcall _setup_descriptors 006B D0 D0 876 pop psw 006D D0 01 877 pop (0+1) 006F D0 00 878 pop (0+0) 0071 D0 07 879 pop (0+7) 0073 D0 06 880 pop (0+6) 0075 D0 05 881 pop (0+5) 0077 D0 04 882 pop (0+4) 0079 D0 03 883 pop (0+3) 007B D0 02 884 pop (0+2) 007D D0 83 885 pop dph 007F D0 82 886 pop dpl 0081 D0 F0 887 pop b 0083 D0 E0 888 pop acc 0085 D0*00 889 pop bits 0087 32 890 reti 891 ;------------------------------------------------------------ 892 ;Allocation info for local variables in function 'isr_HIGHSPEED' 893 ;------------------------------------------------------------ 894 ;------------------------------------------------------------ 895 ; usb_common.c:118: isr_HIGHSPEED (void) interrupt 896 ; ----------------------------------------- 897 ; function isr_HIGHSPEED 898 ; ----------------------------------------- 0088 899 _isr_HIGHSPEED: 0088 C0*00 900 push bits 008A C0 E0 901 push acc 008C C0 F0 902 push b 008E C0 82 903 push dpl 0090 C0 83 904 push dph 0092 C0 02 905 push (0+2) 0094 C0 03 906 push (0+3) 0096 C0 04 907 push (0+4) 0098 C0 05 908 push (0+5) 009A C0 06 909 push (0+6) 009C C0 07 910 push (0+7) 009E C0 00 911 push (0+0) 00A0 C0 01 912 push (0+1) 00A2 C0 D0 913 push psw 00A4 75 D0 00 914 mov psw,#0x00 915 ; usb_common.c:120: clear_usb_irq (); 00A7 53 91 EF 916 anl _EXIF,#0xEF 00AA 75 A1 00 917 mov _INT2CLR,#0x00 918 ; usb_common.c:121: setup_descriptors (); 00AD 12s00r00 919 lcall _setup_descriptors 00B0 D0 D0 920 pop psw 00B2 D0 01 921 pop (0+1) 00B4 D0 00 922 pop (0+0) 00B6 D0 07 923 pop (0+7) 00B8 D0 06 924 pop (0+6) 00BA D0 05 925 pop (0+5) 00BC D0 04 926 pop (0+4) 00BE D0 03 927 pop (0+3) 00C0 D0 02 928 pop (0+2) 00C2 D0 83 929 pop dph 00C4 D0 82 930 pop dpl 00C6 D0 F0 931 pop b 00C8 D0 E0 932 pop acc 00CA D0*00 933 pop bits 00CC 32 934 reti 935 ;------------------------------------------------------------ 936 ;Allocation info for local variables in function 'usb_install_handlers' 937 ;------------------------------------------------------------ 938 ;------------------------------------------------------------ 939 ; usb_common.c:125: usb_install_handlers (void) 940 ; ----------------------------------------- 941 ; function usb_install_handlers 942 ; ----------------------------------------- 00CD 943 _usb_install_handlers: 944 ; usb_common.c:127: setup_descriptors (); // ensure that they're set before use 00CD 12s00r00 945 lcall _setup_descriptors 946 ; usb_common.c:129: hook_uv (UV_SUDAV, (unsigned short) isr_SUDAV); 00D0 75*00r3A 947 mov _hook_uv_PARM_2,#_isr_SUDAV 00D3 75*01s00 948 mov (_hook_uv_PARM_2 + 1),#(_isr_SUDAV >> 8) 00D6 75 82 00 949 mov dpl,#0x00 00D9 12s00r00 950 lcall _hook_uv 951 ; usb_common.c:130: hook_uv (UV_USBRESET, (unsigned short) isr_USBRESET); 00DC 75*00r43 952 mov _hook_uv_PARM_2,#_isr_USBRESET 00DF 75*01s00 953 mov (_hook_uv_PARM_2 + 1),#(_isr_USBRESET >> 8) 00E2 75 82 10 954 mov dpl,#0x10 00E5 12s00r00 955 lcall _hook_uv 956 ; usb_common.c:131: hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED); 00E8 75*00r88 957 mov _hook_uv_PARM_2,#_isr_HIGHSPEED 00EB 75*01s00 958 mov (_hook_uv_PARM_2 + 1),#(_isr_HIGHSPEED >> 8) 00EE 75 82 14 959 mov dpl,#0x14 00F1 12s00r00 960 lcall _hook_uv 961 ; usb_common.c:133: USBIE = bmSUDAV | bmURES | bmHSGRANT; 00F4 90 E6 5C 962 mov dptr,#_USBIE 00F7 74 31 963 mov a,#0x31 00F9 F0 964 movx @dptr,a 00FA 22 965 ret 966 ;------------------------------------------------------------ 967 ;Allocation info for local variables in function 'plausible_endpoint' 968 ;------------------------------------------------------------ 969 ;ep Allocated to registers r2 970 ;------------------------------------------------------------ 971 ; usb_common.c:140: plausible_endpoint (unsigned char ep) 972 ; ----------------------------------------- 973 ; function plausible_endpoint 974 ; ----------------------------------------- 00FB 975 _plausible_endpoint: 976 ; usb_common.c:142: ep &= ~0x80; // ignore direction bit 977 ; usb_common.c:144: if (ep > 8) 00FB E5 82 978 mov a,dpl 00FD 54 7F 979 anl a,#0x7F 00FF FA 980 mov r2,a 0100 24 F7 981 add a,#0xff - 0x08 0102 50 04 982 jnc 00102$ 983 ; usb_common.c:145: return 0; 0104 75 82 00 984 mov dpl,#0x00 0107 22 985 ret 0108 986 00102$: 987 ; usb_common.c:147: if (ep == 1) 0108 BA 01 04 988 cjne r2,#0x01,00104$ 989 ; usb_common.c:148: return 1; 010B 75 82 01 990 mov dpl,#0x01 010E 22 991 ret 010F 992 00104$: 993 ; usb_common.c:150: return (ep & 0x1) == 0; // must be even 010F 53 02 01 994 anl ar2,#0x01 0112 E4 995 clr a 0113 BA 00 01 996 cjne r2,#0x00,00112$ 0116 04 997 inc a 0117 998 00112$: 0117 F5 82 999 mov dpl,a 0119 22 1000 ret 1001 ;------------------------------------------------------------ 1002 ;Allocation info for local variables in function 'epcs' 1003 ;------------------------------------------------------------ 1004 ;ep Allocated to registers r2 1005 ;------------------------------------------------------------ 1006 ; usb_common.c:157: epcs (unsigned char ep) 1007 ; ----------------------------------------- 1008 ; function epcs 1009 ; ----------------------------------------- 011A 1010 _epcs: 011A AA 82 1011 mov r2,dpl 1012 ; usb_common.c:159: if (ep == 0x01) // ep1 has different in and out CS regs 011C BA 01 0C 1013 cjne r2,#0x01,00102$ 1014 ; usb_common.c:160: return EP1OUTCS; 011F 90 E6 A1 1015 mov dptr,#_EP1OUTCS 0122 E0 1016 movx a,@dptr 0123 FB 1017 mov r3,a 0124 7C 00 1018 mov r4,#0x00 0126 8B 82 1019 mov dpl,r3 0128 8C 83 1020 mov dph,r4 012A 22 1021 ret 012B 1022 00102$: 1023 ; usb_common.c:162: if (ep == 0x81) 012B BA 81 0C 1024 cjne r2,#0x81,00104$ 1025 ; usb_common.c:163: return EP1INCS; 012E 90 E6 A2 1026 mov dptr,#_EP1INCS 0131 E0 1027 movx a,@dptr 0132 FB 1028 mov r3,a 0133 7C 00 1029 mov r4,#0x00 0135 8B 82 1030 mov dpl,r3 0137 8C 83 1031 mov dph,r4 0139 22 1032 ret 013A 1033 00104$: 1034 ; usb_common.c:165: ep &= ~0x80; // ignore direction bit 013A 53 02 7F 1035 anl ar2,#0x7F 1036 ; usb_common.c:167: if (ep == 0x00) // ep0 013D EA 1037 mov a,r2 013E 70 0C 1038 jnz 00106$ 1039 ; usb_common.c:168: return EP0CS; 0140 90 E6 A0 1040 mov dptr,#_EP0CS 0143 E0 1041 movx a,@dptr 0144 FB 1042 mov r3,a 0145 7C 00 1043 mov r4,#0x00 0147 8B 82 1044 mov dpl,r3 0149 8C 83 1045 mov dph,r4 014B 22 1046 ret 014C 1047 00106$: 1048 ; usb_common.c:170: return EP2CS + (ep >> 1); // 2, 4, 6, 8 are consecutive 014C 90 E6 A3 1049 mov dptr,#_EP2CS 014F E0 1050 movx a,@dptr 0150 FB 1051 mov r3,a 0151 7C 00 1052 mov r4,#0x00 0153 EA 1053 mov a,r2 0154 C3 1054 clr c 0155 13 1055 rrc a 0156 FA 1056 mov r2,a 0157 7D 00 1057 mov r5,#0x00 0159 EA 1058 mov a,r2 015A 2B 1059 add a,r3 015B FB 1060 mov r3,a 015C ED 1061 mov a,r5 015D 3C 1062 addc a,r4 015E 8B 82 1063 mov dpl,r3 0160 F5 83 1064 mov dph,a 0162 22 1065 ret 1066 ;------------------------------------------------------------ 1067 ;Allocation info for local variables in function 'usb_handle_setup_packet' 1068 ;------------------------------------------------------------ 1069 ;p Allocated to registers r2 r3 1070 ;__00060000 Allocated to registers r2 r3 1071 ;__00050001 Allocated to registers r2 r3 1072 ;------------------------------------------------------------ 1073 ; usb_common.c:174: usb_handle_setup_packet (void) 1074 ; ----------------------------------------- 1075 ; function usb_handle_setup_packet 1076 ; ----------------------------------------- 0163 1077 _usb_handle_setup_packet: 1078 ; usb_common.c:176: _usb_got_SUDAV = 0; 0163 C2*00 1079 clr __usb_got_SUDAV 1080 ; usb_common.c:180: switch (bRequestType & bmRT_TYPE_MASK){ 0165 90 E6 B8 1081 mov dptr,#_SETUPDAT 0168 E0 1082 movx a,@dptr 0169 FA 1083 mov r2,a 016A 53 02 60 1084 anl ar2,#0x60 016D BA 00 02 1085 cjne r2,#0x00,00206$ 0170 80 28 1086 sjmp 00106$ 0172 1087 00206$: 0172 BA 20 02 1088 cjne r2,#0x20,00207$ 0175 80 0D 1089 sjmp 00102$ 0177 1090 00207$: 0177 BA 40 02 1091 cjne r2,#0x40,00208$ 017A 80 0E 1092 sjmp 00103$ 017C 1093 00208$: 017C BA 60 02 1094 cjne r2,#0x60,00209$ 017F 80 03 1095 sjmp 00210$ 0181 1096 00209$: 0181 02s04r1C 1097 ljmp 00175$ 0184 1098 00210$: 1099 ; usb_common.c:183: case bmRT_TYPE_RESERVED: 0184 1100 00102$: 1101 ; usb_common.c:184: fx2_stall_ep0 (); // we don't handle these. indicate error 0184 12s00r00 1102 lcall _fx2_stall_ep0 1103 ; usb_common.c:185: break; 0187 02s04r1C 1104 ljmp 00175$ 1105 ; usb_common.c:187: case bmRT_TYPE_VENDOR: 018A 1106 00103$: 1107 ; usb_common.c:191: if (!app_vendor_cmd ()) 018A 12s00r00 1108 lcall _app_vendor_cmd 018D E5 82 1109 mov a,dpl 018F 60 03 1110 jz 00211$ 0191 02s04r1C 1111 ljmp 00175$ 0194 1112 00211$: 1113 ; usb_common.c:192: fx2_stall_ep0 (); 0194 12s00r00 1114 lcall _fx2_stall_ep0 1115 ; usb_common.c:193: break; 0197 02s04r1C 1116 ljmp 00175$ 1117 ; usb_common.c:195: case bmRT_TYPE_STD: 019A 1118 00106$: 1119 ; usb_common.c:198: if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){ 019A 90 E6 B8 1120 mov dptr,#_SETUPDAT 019D E0 1121 movx a,@dptr 019E FA 1122 mov r2,a 019F 53 02 80 1123 anl ar2,#0x80 01A2 BA 80 02 1124 cjne r2,#0x80,00212$ 01A5 80 03 1125 sjmp 00213$ 01A7 1126 00212$: 01A7 02s03r1D 1127 ljmp 00173$ 01AA 1128 00213$: 1129 ; usb_common.c:204: switch (bRequest){ 01AA 90 E6 B9 1130 mov dptr,#(_SETUPDAT + 0x0001) 01AD E0 1131 movx a,@dptr 01AE FA 1132 mov r2,a 01AF BA 00 03 1133 cjne r2,#0x00,00214$ 01B2 02s02r9B 1134 ljmp 00128$ 01B5 1135 00214$: 01B5 BA 06 02 1136 cjne r2,#0x06,00215$ 01B8 80 35 1137 sjmp 00109$ 01BA 1138 00215$: 01BA BA 08 02 1139 cjne r2,#0x08,00216$ 01BD 80 08 1140 sjmp 00107$ 01BF 1141 00216$: 01BF BA 0A 02 1142 cjne r2,#0x0A,00217$ 01C2 80 17 1143 sjmp 00108$ 01C4 1144 00217$: 01C4 02s03r17 1145 ljmp 00138$ 1146 ; usb_common.c:206: case RQ_GET_CONFIG: 01C7 1147 00107$: 1148 ; usb_common.c:207: EP0BUF[0] = _usb_config; // FIXME app should handle 01C7 90 E7 40 1149 mov dptr,#_EP0BUF 01CA E5*00 1150 mov a,__usb_config 01CC F0 1151 movx @dptr,a 1152 ; usb_common.c:208: EP0BCH = 0; 01CD 90 E6 8A 1153 mov dptr,#_EP0BCH 01D0 E4 1154 clr a 01D1 F0 1155 movx @dptr,a 1156 ; usb_common.c:209: EP0BCL = 1; 01D2 90 E6 8B 1157 mov dptr,#_EP0BCL 01D5 74 01 1158 mov a,#0x01 01D7 F0 1159 movx @dptr,a 1160 ; usb_common.c:210: break; 01D8 02s04r1C 1161 ljmp 00175$ 1162 ; usb_common.c:214: case RQ_GET_INTERFACE: 01DB 1163 00108$: 1164 ; usb_common.c:215: EP0BUF[0] = _usb_alt_setting; // FIXME app should handle 01DB 90 E7 40 1165 mov dptr,#_EP0BUF 01DE E5*01 1166 mov a,__usb_alt_setting 01E0 F0 1167 movx @dptr,a 1168 ; usb_common.c:216: EP0BCH = 0; 01E1 90 E6 8A 1169 mov dptr,#_EP0BCH 01E4 E4 1170 clr a 01E5 F0 1171 movx @dptr,a 1172 ; usb_common.c:217: EP0BCL = 1; 01E6 90 E6 8B 1173 mov dptr,#_EP0BCL 01E9 74 01 1174 mov a,#0x01 01EB F0 1175 movx @dptr,a 1176 ; usb_common.c:218: break; 01EC 02s04r1C 1177 ljmp 00175$ 1178 ; usb_common.c:222: case RQ_GET_DESCR: 01EF 1179 00109$: 1180 ; usb_common.c:223: switch (wValueH){ 01EF 90 E6 BB 1181 mov dptr,#(_SETUPDAT + 0x0003) 01F2 E0 1182 movx a,@dptr 01F3 FA 1183 mov r2,a 01F4 BA 01 02 1184 cjne r2,#0x01,00218$ 01F7 80 17 1185 sjmp 00110$ 01F9 1186 00218$: 01F9 BA 02 02 1187 cjne r2,#0x02,00219$ 01FC 80 38 1188 sjmp 00114$ 01FE 1189 00219$: 01FE BA 03 02 1190 cjne r2,#0x03,00220$ 0201 80 59 1191 sjmp 00122$ 0203 1192 00220$: 0203 BA 06 02 1193 cjne r2,#0x06,00221$ 0206 80 1B 1194 sjmp 00111$ 0208 1195 00221$: 0208 BA 07 02 1196 cjne r2,#0x07,00222$ 020B 80 3C 1197 sjmp 00119$ 020D 1198 00222$: 020D 02s02r95 1199 ljmp 00126$ 1200 ; usb_common.c:225: case DT_DEVICE: 0210 1201 00110$: 1202 ; usb_common.c:226: SUDPTRH = MSB (current_device_descr); 0210 AA*02 1203 mov r2,_current_device_descr 0212 AB*03 1204 mov r3,(_current_device_descr + 1) 0214 90 E6 B3 1205 mov dptr,#_SUDPTRH 0217 EB 1206 mov a,r3 0218 F0 1207 movx @dptr,a 1208 ; usb_common.c:227: SUDPTRL = LSB (current_device_descr); 0219 7B 00 1209 mov r3,#0x00 021B 90 E6 B4 1210 mov dptr,#_SUDPTRL 021E EA 1211 mov a,r2 021F F0 1212 movx @dptr,a 1213 ; usb_common.c:228: break; 0220 02s04r1C 1214 ljmp 00175$ 1215 ; usb_common.c:230: case DT_DEVQUAL: 0223 1216 00111$: 1217 ; usb_common.c:231: SUDPTRH = MSB (current_devqual_descr); 0223 AA*04 1218 mov r2,_current_devqual_descr 0225 AB*05 1219 mov r3,(_current_devqual_descr + 1) 0227 90 E6 B3 1220 mov dptr,#_SUDPTRH 022A EB 1221 mov a,r3 022B F0 1222 movx @dptr,a 1223 ; usb_common.c:232: SUDPTRL = LSB (current_devqual_descr); 022C 7B 00 1224 mov r3,#0x00 022E 90 E6 B4 1225 mov dptr,#_SUDPTRL 0231 EA 1226 mov a,r2 0232 F0 1227 movx @dptr,a 1228 ; usb_common.c:233: break; 0233 02s04r1C 1229 ljmp 00175$ 1230 ; usb_common.c:237: fx2_stall_ep0 (); 0236 1231 00114$: 1232 ; usb_common.c:239: SUDPTRH = MSB (current_config_descr); 0236 AA*06 1233 mov r2,_current_config_descr 0238 AB*07 1234 mov r3,(_current_config_descr + 1) 023A 90 E6 B3 1235 mov dptr,#_SUDPTRH 023D EB 1236 mov a,r3 023E F0 1237 movx @dptr,a 1238 ; usb_common.c:240: SUDPTRL = LSB (current_config_descr); 023F 7B 00 1239 mov r3,#0x00 0241 90 E6 B4 1240 mov dptr,#_SUDPTRL 0244 EA 1241 mov a,r2 0245 F0 1242 movx @dptr,a 1243 ; usb_common.c:242: break; 0246 02s04r1C 1244 ljmp 00175$ 1245 ; usb_common.c:246: fx2_stall_ep0 (); 0249 1246 00119$: 1247 ; usb_common.c:248: SUDPTRH = MSB (other_config_descr); 0249 AA*08 1248 mov r2,_other_config_descr 024B AB*09 1249 mov r3,(_other_config_descr + 1) 024D 90 E6 B3 1250 mov dptr,#_SUDPTRH 0250 EB 1251 mov a,r3 0251 F0 1252 movx @dptr,a 1253 ; usb_common.c:249: SUDPTRL = LSB (other_config_descr); 0252 7B 00 1254 mov r3,#0x00 0254 90 E6 B4 1255 mov dptr,#_SUDPTRL 0257 EA 1256 mov a,r2 0258 F0 1257 movx @dptr,a 1258 ; usb_common.c:251: break; 0259 02s04r1C 1259 ljmp 00175$ 1260 ; usb_common.c:253: case DT_STRING: 025C 1261 00122$: 1262 ; usb_common.c:254: if (wValueL >= nstring_descriptors) 025C 90 E6 BA 1263 mov dptr,#(_SETUPDAT + 0x0002) 025F E0 1264 movx a,@dptr 0260 FA 1265 mov r2,a 0261 90s00r00 1266 mov dptr,#_nstring_descriptors 0264 E0 1267 movx a,@dptr 0265 FB 1268 mov r3,a 0266 C3 1269 clr c 0267 EA 1270 mov a,r2 0268 9B 1271 subb a,r3 0269 40 06 1272 jc 00124$ 1273 ; usb_common.c:255: fx2_stall_ep0 (); 026B 12s00r00 1274 lcall _fx2_stall_ep0 026E 02s04r1C 1275 ljmp 00175$ 0271 1276 00124$: 1277 ; usb_common.c:257: xdata char *p = string_descriptors[wValueL]; 0271 90 E6 BA 1278 mov dptr,#(_SETUPDAT + 0x0002) 0274 E0 1279 movx a,@dptr 0275 75 F0 02 1280 mov b,#0x02 0278 A4 1281 mul ab 0279 24r00 1282 add a,#_string_descriptors 027B F5 82 1283 mov dpl,a 027D 74s00 1284 mov a,#(_string_descriptors >> 8) 027F 35 F0 1285 addc a,b 0281 F5 83 1286 mov dph,a 0283 E0 1287 movx a,@dptr 0284 FA 1288 mov r2,a 0285 A3 1289 inc dptr 0286 E0 1290 movx a,@dptr 1291 ; usb_common.c:258: SUDPTRH = MSB (p); 0287 90 E6 B3 1292 mov dptr,#_SUDPTRH 028A F0 1293 movx @dptr,a 1294 ; usb_common.c:259: SUDPTRL = LSB (p); 028B 7B 00 1295 mov r3,#0x00 028D 90 E6 B4 1296 mov dptr,#_SUDPTRL 0290 EA 1297 mov a,r2 0291 F0 1298 movx @dptr,a 1299 ; usb_common.c:261: break; 0292 02s04r1C 1300 ljmp 00175$ 1301 ; usb_common.c:263: default: 0295 1302 00126$: 1303 ; usb_common.c:264: fx2_stall_ep0 (); // invalid request 0295 12s00r00 1304 lcall _fx2_stall_ep0 1305 ; usb_common.c:267: break; 0298 02s04r1C 1306 ljmp 00175$ 1307 ; usb_common.c:271: case RQ_GET_STATUS: 029B 1308 00128$: 1309 ; usb_common.c:272: switch (bRequestType & bmRT_RECIP_MASK){ 029B 90 E6 B8 1310 mov dptr,#_SETUPDAT 029E E0 1311 movx a,@dptr 029F FA 1312 mov r2,a 02A0 53 02 1F 1313 anl ar2,#0x1F 02A3 BA 00 02 1314 cjne r2,#0x00,00224$ 02A6 80 0A 1315 sjmp 00129$ 02A8 1316 00224$: 02A8 BA 01 02 1317 cjne r2,#0x01,00225$ 02AB 80 1C 1318 sjmp 00130$ 02AD 1319 00225$: 1320 ; usb_common.c:273: case bmRT_RECIP_DEVICE: 02AD BA 02 64 1321 cjne r2,#0x02,00135$ 02B0 80 2C 1322 sjmp 00131$ 02B2 1323 00129$: 1324 ; usb_common.c:274: EP0BUF[0] = bmGSDA_SELF_POWERED; // FIXME app should handle 02B2 90 E7 40 1325 mov dptr,#_EP0BUF 02B5 74 01 1326 mov a,#0x01 02B7 F0 1327 movx @dptr,a 1328 ; usb_common.c:275: EP0BUF[1] = 0; 02B8 90 E7 41 1329 mov dptr,#(_EP0BUF + 0x0001) 1330 ; usb_common.c:276: EP0BCH = 0; 02BB E4 1331 clr a 02BC F0 1332 movx @dptr,a 02BD 90 E6 8A 1333 mov dptr,#_EP0BCH 02C0 F0 1334 movx @dptr,a 1335 ; usb_common.c:277: EP0BCL = 2; 02C1 90 E6 8B 1336 mov dptr,#_EP0BCL 02C4 74 02 1337 mov a,#0x02 02C6 F0 1338 movx @dptr,a 1339 ; usb_common.c:278: break; 1340 ; usb_common.c:280: case bmRT_RECIP_INTERFACE: 02C7 80 4E 1341 sjmp 00138$ 02C9 1342 00130$: 1343 ; usb_common.c:281: EP0BUF[0] = 0; 02C9 90 E7 40 1344 mov dptr,#_EP0BUF 1345 ; usb_common.c:282: EP0BUF[1] = 0; 1346 ; usb_common.c:283: EP0BCH = 0; 02CC E4 1347 clr a 02CD F0 1348 movx @dptr,a 02CE 90 E7 41 1349 mov dptr,#(_EP0BUF + 0x0001) 02D1 F0 1350 movx @dptr,a 02D2 90 E6 8A 1351 mov dptr,#_EP0BCH 02D5 F0 1352 movx @dptr,a 1353 ; usb_common.c:284: EP0BCL = 2; 02D6 90 E6 8B 1354 mov dptr,#_EP0BCL 02D9 74 02 1355 mov a,#0x02 02DB F0 1356 movx @dptr,a 1357 ; usb_common.c:285: break; 1358 ; usb_common.c:287: case bmRT_RECIP_ENDPOINT: 02DC 80 39 1359 sjmp 00138$ 02DE 1360 00131$: 1361 ; usb_common.c:288: if (plausible_endpoint (wIndexL)){ 02DE 90 E6 BC 1362 mov dptr,#(_SETUPDAT + 0x0004) 02E1 E0 1363 movx a,@dptr 02E2 F5 82 1364 mov dpl,a 02E4 12s00rFB 1365 lcall _plausible_endpoint 02E7 E5 82 1366 mov a,dpl 02E9 60 24 1367 jz 00133$ 1368 ; usb_common.c:289: EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL; 02EB 90 E6 BC 1369 mov dptr,#(_SETUPDAT + 0x0004) 02EE E0 1370 movx a,@dptr 02EF F5 82 1371 mov dpl,a 02F1 12s01r1A 1372 lcall _epcs 02F4 E0 1373 movx a,@dptr 02F5 FA 1374 mov r2,a 02F6 53 02 01 1375 anl ar2,#0x01 02F9 90 E7 40 1376 mov dptr,#_EP0BUF 02FC EA 1377 mov a,r2 02FD F0 1378 movx @dptr,a 1379 ; usb_common.c:290: EP0BUF[1] = 0; 02FE 90 E7 41 1380 mov dptr,#(_EP0BUF + 0x0001) 1381 ; usb_common.c:291: EP0BCH = 0; 0301 E4 1382 clr a 0302 F0 1383 movx @dptr,a 0303 90 E6 8A 1384 mov dptr,#_EP0BCH 0306 F0 1385 movx @dptr,a 1386 ; usb_common.c:292: EP0BCL = 2; 0307 90 E6 8B 1387 mov dptr,#_EP0BCL 030A 74 02 1388 mov a,#0x02 030C F0 1389 movx @dptr,a 030D 80 08 1390 sjmp 00138$ 030F 1391 00133$: 1392 ; usb_common.c:295: fx2_stall_ep0 (); 030F 12s00r00 1393 lcall _fx2_stall_ep0 1394 ; usb_common.c:296: break; 1395 ; usb_common.c:298: default: 0312 80 03 1396 sjmp 00138$ 0314 1397 00135$: 1398 ; usb_common.c:299: fx2_stall_ep0 (); 0314 12s00r00 1399 lcall _fx2_stall_ep0 1400 ; usb_common.c:306: default: 0317 1401 00138$: 1402 ; usb_common.c:307: fx2_stall_ep0 (); 0317 12s00r00 1403 lcall _fx2_stall_ep0 1404 ; usb_common.c:309: } 031A 02s04r1C 1405 ljmp 00175$ 031D 1406 00173$: 1407 ; usb_common.c:318: switch (bRequest){ 031D 90 E6 B9 1408 mov dptr,#(_SETUPDAT + 0x0001) 0320 E0 1409 movx a,@dptr 0321 FA 1410 mov r2,a 0322 24 F4 1411 add a,#0xff - 0x0B 0324 50 03 1412 jnc 00228$ 0326 02s04r19 1413 ljmp 00170$ 0329 1414 00228$: 0329 EA 1415 mov a,r2 032A 2A 1416 add a,r2 032B 2A 1417 add a,r2 032C 90s03r30 1418 mov dptr,#00229$ 032F 73 1419 jmp @a+dptr 0330 1420 00229$: 0330 02s04r19 1421 ljmp 00170$ 0333 02s03r66 1422 ljmp 00142$ 0336 02s03rE1 1423 ljmp 00161$ 0339 02s03rC2 1424 ljmp 00154$ 033C 02s04r19 1425 ljmp 00170$ 033F 02s04r19 1426 ljmp 00168$ 0342 02s04r19 1427 ljmp 00170$ 0345 02s04r19 1428 ljmp 00169$ 0348 02s04r19 1429 ljmp 00170$ 034B 02s03r54 1430 ljmp 00140$ 034E 02s04r19 1431 ljmp 00170$ 0351 02s03r5D 1432 ljmp 00141$ 1433 ; usb_common.c:320: case RQ_SET_CONFIG: 0354 1434 00140$: 1435 ; usb_common.c:321: _usb_config = wValueL; // FIXME app should handle 0354 90 E6 BA 1436 mov dptr,#(_SETUPDAT + 0x0002) 0357 E0 1437 movx a,@dptr 0358 F5*00 1438 mov __usb_config,a 1439 ; usb_common.c:322: break; 035A 02s04r1C 1440 ljmp 00175$ 1441 ; usb_common.c:324: case RQ_SET_INTERFACE: 035D 1442 00141$: 1443 ; usb_common.c:325: _usb_alt_setting = wValueL; // FIXME app should handle 035D 90 E6 BA 1444 mov dptr,#(_SETUPDAT + 0x0002) 0360 E0 1445 movx a,@dptr 0361 F5*01 1446 mov __usb_alt_setting,a 1447 ; usb_common.c:326: break; 0363 02s04r1C 1448 ljmp 00175$ 1449 ; usb_common.c:330: case RQ_CLEAR_FEATURE: 0366 1450 00142$: 1451 ; usb_common.c:331: switch (bRequestType & bmRT_RECIP_MASK){ 0366 90 E6 B8 1452 mov dptr,#_SETUPDAT 0369 E0 1453 movx a,@dptr 036A FA 1454 mov r2,a 036B 53 02 1F 1455 anl ar2,#0x1F 036E BA 00 02 1456 cjne r2,#0x00,00230$ 0371 80 05 1457 sjmp 00143$ 0373 1458 00230$: 1459 ; usb_common.c:333: case bmRT_RECIP_DEVICE: 0373 BA 02 47 1460 cjne r2,#0x02,00152$ 0376 80 0A 1461 sjmp 00147$ 0378 1462 00143$: 1463 ; usb_common.c:334: switch (wValueL){ 0378 90 E6 BA 1464 mov dptr,#(_SETUPDAT + 0x0002) 037B E0 1465 movx a,@dptr 1466 ; usb_common.c:337: fx2_stall_ep0 (); 037C 12s00r00 1467 lcall _fx2_stall_ep0 1468 ; usb_common.c:339: break; 037F 02s04r1C 1469 ljmp 00175$ 1470 ; usb_common.c:341: case bmRT_RECIP_ENDPOINT: 0382 1471 00147$: 1472 ; usb_common.c:342: if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){ 0382 90 E6 BA 1473 mov dptr,#(_SETUPDAT + 0x0002) 0385 E0 1474 movx a,@dptr 0386 70 30 1475 jnz 00149$ 0388 90 E6 BC 1476 mov dptr,#(_SETUPDAT + 0x0004) 038B E0 1477 movx a,@dptr 038C F5 82 1478 mov dpl,a 038E 12s00rFB 1479 lcall _plausible_endpoint 0391 E5 82 1480 mov a,dpl 0393 60 23 1481 jz 00149$ 1482 ; usb_common.c:343: *epcs (wIndexL) &= ~bmEPSTALL; 0395 90 E6 BC 1483 mov dptr,#(_SETUPDAT + 0x0004) 0398 E0 1484 movx a,@dptr 0399 F5 82 1485 mov dpl,a 039B 12s01r1A 1486 lcall _epcs 039E AA 82 1487 mov r2,dpl 03A0 AB 83 1488 mov r3,dph 03A2 E0 1489 movx a,@dptr 03A3 FC 1490 mov r4,a 03A4 53 04 FE 1491 anl ar4,#0xFE 03A7 8A 82 1492 mov dpl,r2 03A9 8B 83 1493 mov dph,r3 03AB EC 1494 mov a,r4 03AC F0 1495 movx @dptr,a 1496 ; usb_common.c:344: fx2_reset_data_toggle (wIndexL); 03AD 90 E6 BC 1497 mov dptr,#(_SETUPDAT + 0x0004) 03B0 E0 1498 movx a,@dptr 03B1 F5 82 1499 mov dpl,a 03B3 12s00r00 1500 lcall _fx2_reset_data_toggle 03B6 80 64 1501 sjmp 00175$ 03B8 1502 00149$: 1503 ; usb_common.c:347: fx2_stall_ep0 (); 03B8 12s00r00 1504 lcall _fx2_stall_ep0 1505 ; usb_common.c:348: break; 1506 ; usb_common.c:350: default: 03BB 80 5F 1507 sjmp 00175$ 03BD 1508 00152$: 1509 ; usb_common.c:351: fx2_stall_ep0 (); 03BD 12s00r00 1510 lcall _fx2_stall_ep0 1511 ; usb_common.c:354: break; 1512 ; usb_common.c:358: case RQ_SET_FEATURE: 03C0 80 5A 1513 sjmp 00175$ 03C2 1514 00154$: 1515 ; usb_common.c:359: switch (bRequestType & bmRT_RECIP_MASK){ 03C2 90 E6 B8 1516 mov dptr,#_SETUPDAT 03C5 E0 1517 movx a,@dptr 03C6 FA 1518 mov r2,a 03C7 53 02 1F 1519 anl ar2,#0x1F 03CA BA 00 4F 1520 cjne r2,#0x00,00175$ 1521 ; usb_common.c:362: switch (wValueL){ 03CD 90 E6 BA 1522 mov dptr,#(_SETUPDAT + 0x0002) 03D0 E0 1523 movx a,@dptr 03D1 FA 1524 mov r2,a 03D2 BA 01 02 1525 cjne r2,#0x01,00236$ 03D5 80 05 1526 sjmp 00158$ 03D7 1527 00236$: 03D7 BA 02 02 1528 cjne r2,#0x02,00237$ 03DA 80 40 1529 sjmp 00175$ 03DC 1530 00237$: 1531 ; usb_common.c:368: default: 03DC 1532 00158$: 1533 ; usb_common.c:369: fx2_stall_ep0 (); 03DC 12s00r00 1534 lcall _fx2_stall_ep0 1535 ; usb_common.c:373: break; 1536 ; usb_common.c:375: case bmRT_RECIP_ENDPOINT: 03DF 80 3B 1537 sjmp 00175$ 03E1 1538 00161$: 1539 ; usb_common.c:376: switch (wValueL){ 03E1 90 E6 BA 1540 mov dptr,#(_SETUPDAT + 0x0002) 03E4 E0 1541 movx a,@dptr 03E5 FA 1542 mov r2,a 03E6 70 2C 1543 jnz 00166$ 1544 ; usb_common.c:378: if (plausible_endpoint (wIndexL)) 03E8 90 E6 BC 1545 mov dptr,#(_SETUPDAT + 0x0004) 03EB E0 1546 movx a,@dptr 03EC F5 82 1547 mov dpl,a 03EE 12s00rFB 1548 lcall _plausible_endpoint 03F1 E5 82 1549 mov a,dpl 03F3 60 1A 1550 jz 00164$ 1551 ; usb_common.c:379: *epcs (wIndexL) |= bmEPSTALL; 03F5 90 E6 BC 1552 mov dptr,#(_SETUPDAT + 0x0004) 03F8 E0 1553 movx a,@dptr 03F9 F5 82 1554 mov dpl,a 03FB 12s01r1A 1555 lcall _epcs 03FE AA 82 1556 mov r2,dpl 0400 AB 83 1557 mov r3,dph 0402 E0 1558 movx a,@dptr 0403 FC 1559 mov r4,a 0404 43 04 01 1560 orl ar4,#0x01 0407 8A 82 1561 mov dpl,r2 0409 8B 83 1562 mov dph,r3 040B EC 1563 mov a,r4 040C F0 1564 movx @dptr,a 040D 80 0D 1565 sjmp 00175$ 040F 1566 00164$: 1567 ; usb_common.c:381: fx2_stall_ep0 (); 040F 12s00r00 1568 lcall _fx2_stall_ep0 1569 ; usb_common.c:382: break; 1570 ; usb_common.c:384: default: 0412 80 08 1571 sjmp 00175$ 0414 1572 00166$: 1573 ; usb_common.c:385: fx2_stall_ep0 (); 0414 12s00r00 1574 lcall _fx2_stall_ep0 1575 ; usb_common.c:388: break; 1576 ; usb_common.c:392: case RQ_SET_ADDRESS: // handled by fx2 hardware 0417 80 03 1577 sjmp 00175$ 0419 1578 00168$: 1579 ; usb_common.c:393: case RQ_SET_DESCR: // not implemented 0419 1580 00169$: 1581 ; usb_common.c:394: default: 0419 1582 00170$: 1583 ; usb_common.c:395: fx2_stall_ep0 (); 0419 12s00r00 1584 lcall _fx2_stall_ep0 1585 ; usb_common.c:401: } // bmRT_TYPE_MASK 041C 1586 00175$: 1587 ; usb_common.c:404: EP0CS |= bmHSNAK; 041C 90 E6 A0 1588 mov dptr,#_EP0CS 041F E0 1589 movx a,@dptr 0420 44 80 1590 orl a,#0x80 0422 F0 1591 movx @dptr,a 0423 22 1592 ret 1593 .area CSEG (CODE) 1594 .area CONST (CODE) 1595 .area CABS (ABS,CODE)