📄 usb.lis
字号:
774 0103 26 .byte 38
775 0104 00CE .word JOY_StringProduct
776
777 .section .text
779
780 .desc GetStringDescriptor, near
781 .proc GetStringDescriptor
782 GetStringDescriptor:
304:../src/usb.c ****
305:../src/usb.c **** #define LENGTH_STRING_DESCRIPTOR 4
306:../src/usb.c **** static const BYTE Comm_StringDescriptor[ LENGTH_STRING_DESCRIPTOR] = {
307:../src/usb.c **** LENGTH_STRING_DESCRIPTOR,
308:../src/usb.c **** 0x03,
309:../src/usb.c **** 0x09,
310:../src/usb.c **** 0x04 /* LangID = 0x0409: U.S. English */
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 18
311:../src/usb.c **** };
312:../src/usb.c ****
313:../src/usb.c **** #define LENGTH_STRING_VENDOR 16
314:../src/usb.c **** static const BYTE StringVendor[ LENGTH_STRING_VENDOR] = {
315:../src/usb.c **** LENGTH_STRING_VENDOR, /* Size of manufaturer string */
316:../src/usb.c **** 0x03, /* bDescriptorType = String descriptor */
317:../src/usb.c **** /* Manufacturer: "Fanatec" */
318:../src/usb.c **** 'F', 0, 'a', 0, 'n', 0, 'a', 0, 't', 0, 'e', 0, 'c', 0
319:../src/usb.c **** };
320:../src/usb.c ****
321:../src/usb.c **** #define HUB_LENGTH_STRING_PRODUCT 28
322:../src/usb.c **** static const BYTE HUB_StringProduct[ HUB_LENGTH_STRING_PRODUCT] = {
323:../src/usb.c **** HUB_LENGTH_STRING_PRODUCT,
324:../src/usb.c **** 0x03,
325:../src/usb.c **** /* Product name: "GameBoard Hub" */
326:../src/usb.c **** 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0,
327:../src/usb.c **** 'H', 0, 'u', 0, 'b', 0
328:../src/usb.c **** } ;
329:../src/usb.c ****
330:../src/usb.c **** #define KBD_LENGTH_STRING_PRODUCT 38
331:../src/usb.c **** static const BYTE KBD_StringProduct[ KBD_LENGTH_STRING_PRODUCT] = {
332:../src/usb.c **** KBD_LENGTH_STRING_PRODUCT,
333:../src/usb.c **** 0x03,
334:../src/usb.c **** /* Product name: "GameBoard Keyboard" */
335:../src/usb.c **** 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'B', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0,
336:../src/usb.c **** 'K', 0, 'e', 0, 'y', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0
337:../src/usb.c **** } ;
338:../src/usb.c ****
339:../src/usb.c **** #define MS_LENGTH_STRING_PRODUCT 32
340:../src/usb.c **** static const BYTE MOUSE_StringProduct[ MS_LENGTH_STRING_PRODUCT] = {
341:../src/usb.c **** MS_LENGTH_STRING_PRODUCT,
342:../src/usb.c **** 0x03,
343:../src/usb.c **** /* Product name: "GameBoard Mouse" */
344:../src/usb.c **** 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'B', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0,
345:../src/usb.c **** 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0
346:../src/usb.c **** } ;
347:../src/usb.c ****
348:../src/usb.c **** #define JOY_LENGTH_STRING_PRODUCT 38
349:../src/usb.c **** static const BYTE JOY_StringProduct[ JOY_LENGTH_STRING_PRODUCT] = {
350:../src/usb.c **** JOY_LENGTH_STRING_PRODUCT,
351:../src/usb.c **** 0x03,
352:../src/usb.c **** /* Product name: "GameBoard Joystick" */
353:../src/usb.c **** 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'B', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0,
354:../src/usb.c **** 'J', 0, 'o', 0, 'y', 0, 's', 0, 't', 0, 'i', 0, 'c', 0, 'k', 0
355:../src/usb.c **** } ;
356:../src/usb.c ****
357:../src/usb.c **** static const struct {
358:../src/usb.c **** BYTE size ;
359:../src/usb.c **** const BYTE *string ;
360:../src/usb.c **** } UsbString[] = {
361:../src/usb.c **** { sizeof Comm_StringDescriptor, Comm_StringDescriptor},
362:../src/usb.c **** { sizeof StringVendor, StringVendor},
363:../src/usb.c **** { sizeof HUB_StringProduct, HUB_StringProduct},
364:../src/usb.c **** { sizeof KBD_StringProduct, KBD_StringProduct},
365:../src/usb.c **** { sizeof MOUSE_StringProduct, MOUSE_StringProduct},
366:../src/usb.c **** { sizeof JOY_StringProduct, JOY_StringProduct}
367:../src/usb.c **** } ;
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 19
368:../src/usb.c ****
369:../src/usb.c **** static BYTE GetStringDescriptor( void)
370:../src/usb.c **** {
784 .LMM73:
371:../src/usb.c **** BYTE val ;
786 .LBB4:
787 .LMM74:
372:../src/usb.c ****
373:../src/usb.c **** val = CurRxBuffer[ USB_wValue] ;
789 0113 E2F00000 ldw rr0,dpr:pof(@CurRxBuffer)
790 0117 7FF102D3 ld r3,2(rr0)
791 .LMM75:
374:../src/usb.c **** if( val < (sizeof UsbString / sizeof UsbString[ 0]))
793 011b 95D305 cp r3,#5
794 011e 3B03 jxule .L26
795 .LMM76:
375:../src/usb.c **** {
376:../src/usb.c **** data_size[ CurDevice] = UsbString[ val].size ;
377:../src/usb.c **** data_ptr = (BYTE *)UsbString[ val].string ;
378:../src/usb.c **** return control_read() ;
379:../src/usb.c **** }
380:../src/usb.c **** else
381:../src/usb.c **** {
382:../src/usb.c **** return TX_STALL ;
797 0120 1C01 ld r1,#1
798 0122 46 ret
799 .L26:
800 .LMM77:
802 0123 C4F10000 ld r1,dpr:pof(@CurDevice)
803 0127 0C00 ld r0,#0
804 0129 2C03 ld r2,#3
805 012b 58D3 ld r5,r3
806 012d 4F42 mul rr4,r2
807 012f 7FF400F4 ld r4,dpr:pof(@UsbString)(rr4)
807 D4
808 0134 26F00000 ld dpr:pof(@data_size)(rr0),r4
808 D4
809 .LMM78:
811 0139 78D3 ld r7,r3
812 013b 4F62 mul rr6,r2
813 013d 86F600F5 ldw rr6,dpr:pof(@UsbString+1)(rr6)
813 D6
814 0142 E2F70000 ldw dpr:pof(@data_ptr),rr6
815 .LMM79:
817 0146 D200E2 call @control_read
818 .LMM80:
383:../src/usb.c **** }
384:../src/usb.c **** }
820 .LBE4:
821 0149 46 ret
822 .endproc
826 .Lscope3:
829
830 .desc get_descriptor, near
831 .proc get_descriptor
832 get_descriptor:
385:../src/usb.c ****
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 20
386:../src/usb.c **** static BYTE get_descriptor( void)
387:../src/usb.c **** {
834 014a D4DFF7 link rr14,#8
835 014d 74DC pushw rr12
836 014f 74DA pushw rr10
837 0151 74D8 pushw rr8
838 .LMM82:
388:../src/usb.c **** switch( CurRxBuffer[ USB_wValueHi])
840 0153 E2F00000 ldw rr0,dpr:pof(@CurRxBuffer)
841 0157 7FF103D3 ld r3,3(rr0)
842 015b 2C00 ld r2,#0
843 015d CFD2 decw rr2
844 015f E302 ldw rr0,rr2
845 0161 97D10021 cpw rr0,#33
846 0165 BD0293 jxugt .L36
847 0168 4E00 addw rr0,rr0
848 016a EE spm
849 016b 86F00173 ldw rr0,sof(.L37)(rr0)
849 D0
850 0170 FE sdm
851 0171 D4D0 jp (rr0)
852 .L37:
853 $start_switch_table_37:
854 0173 01B7 .word sof(.L31)
855 0175 01F0 .word sof(.L32)
856 0177 0228 .word sof(.L33)
857 0179 0293 .word sof(.L36)
858 017b 0293 .word sof(.L36)
859 017d 0293 .word sof(.L36)
860 017f 0293 .word sof(.L36)
861 0181 0293 .word sof(.L36)
862 0183 0293 .word sof(.L36)
863 0185 0293 .word sof(.L36)
864 0187 0293 .word sof(.L36)
865 0189 0293 .word sof(.L36)
866 018b 0293 .word sof(.L36)
867 018d 0293 .word sof(.L36)
868 018f 0293 .word sof(.L36)
869 0191 0293 .word sof(.L36)
870 0193 0293 .word sof(.L36)
871 0195 0293 .word sof(.L36)
872 0197 0293 .word sof(.L36)
873 0199 0293 .word sof(.L36)
874 019b 0293 .word sof(.L36)
875 019d 0293 .word sof(.L36)
876 019f 0293 .word sof(.L36)
877 01a1 0293 .word sof(.L36)
878 01a3 0293 .word sof(.L36)
879 01a5 0293 .word sof(.L36)
880 01a7 0293 .word sof(.L36)
881 01a9 0293 .word sof(.L36)
882 01ab 0293 .word sof(.L36)
883 01ad 0293 .word sof(.L36)
884 01af 0293 .word sof(.L36)
885 01b1 0293 .word sof(.L36)
886 01b3 022D .word sof(.L34)
887 01b5 0259 .word sof(.L35)
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 21
888 $end_switch_table_37:
889 .L31:
890 .LMM83:
389:../src/usb.c **** {
390:../src/usb.c **** case 0x01: /* USB_DEVICE */
391:../src/usb.c **** data_size[ CurDevice] = UsbDeviceDesc[ CurDevice].size ;
892 01b7 C4F10000 ld r1,dpr:pof(@CurDevice)
893 01bb 0C00 ld r0,#0
894 01bd C4F30000 ld r3,dpr:pof(@CurDevice)
895 01c1 26FFFBD3 ld -5(rr14),r3
896 01c5 86FFFAD6 ldw rr6,-6(rr14)
897 01c9 2C03 ld r2,#3
898 01cb 4F62 mul rr6,r2
899 01cd 86FFFAD7 ldw -6(rr14),rr6
900 01d1 7FF60012 ld r3,dpr:pof(@UsbDeviceDesc)(rr6)
900 D3
901 01d6 26F00000 ld dpr:pof(@data_size)(rr0),r3
901 D3
902 .LMM84:
392:../src/usb.c **** data_ptr = (BYTE *) UsbDeviceDesc[ CurDevice].desc ;
904 01db C4FB0000 ld r11,dpr:pof(@CurDevice)
905 01df 4FA2 mul rr10,r2
906 01e1 86FA0013 ldw rr10,dpr:pof(@UsbDeviceDesc+1)(rr10)
906 DA
907 01e6 E2FB0000 ldw dpr:pof(@data_ptr),rr10
908 .LMM85:
393:../src/usb.c **** return control_read() ;
910 01ea D200E2 call @control_read
911 01ed 8D0295 jxt .L38
912 .L32:
913 .LMM86:
394:../src/usb.c **** break ;
395:../src/usb.c **** case 2: /* USB_CONFIGURATION */
396:../src/usb.c **** data_size[ CurDevice] = UsbConfigDesc[ CurDevice].size ;
915 01f0 C4F10000 ld r1,dpr:pof(@CurDevice)
916 01f4 0C00 ld r0,#0
917 01f6 C4F40000 ld r4,dpr:pof(@CurDevice)
918 01fa 26FFF9D4 ld -7(rr14),r4
919 01fe 86FFF8D6 ldw rr6,-8(rr14)
920 0202 2C03 ld r2,#3
921 0204 4F62 mul rr6,r2
922 0206 86FFF8D7 ldw -8(rr14),rr6
923 020a 7FF60037 ld r3,dpr:pof(@UsbConfigDesc)(rr6)
923 D3
924 020f 26F00000 ld dpr:pof(@data_size)(rr0),r3
924 D3
925 .LMM87:
397:../src/usb.c **** data_ptr = (BYTE *) UsbConfigDesc[ CurDevice].desc ;
927 0214 C4FD0000 ld r13,dpr:pof(@CurDevice)
928 0218 4FC2 mul rr12,r2
929 021a 86FC0038 ldw rr12,dpr:pof(@UsbConfigDesc+1)(rr12)
929 DC
930 021f E2FD0000 ldw dpr:pof(@data_ptr),rr12
931 .LMM88:
398:../src/usb.c **** return control_read() ;
933 0223 D200E2 call @control_read
934 0226 8B6D jxt .L38
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 22
935 .L33:
936 .LMM89:
399:../src/usb.c **** break ;
400:../src/usb.c **** case 3: /* USB_STRING */
401:../src/usb.c **** return GetStringDescriptor() ;
938 0228 D20113 call @GetStringDescriptor
939 022b 8B68 jxt .L38
940 .L34:
941 .LMM90:
402:../src/usb.c **** break ;
403:../src/usb.c **** case 0x21: /* USB_HID (useless for HUB)*/
404:../src/usb.c **** data_size[ CurDevice] = 9 ;
943 022d C4F10000 ld r1,dpr:pof(@CurDevice)
944 0231 0C00 ld r0,#0
945 0233 4C09 ld r4,#9
946 0235 26F00000 ld dpr:pof(@data_size)(rr0),r4
946 D4
947 .LMM91:
405:../src/usb.c **** data_ptr = (BYTE *) &UsbConfigDesc[ CurDevice].desc[ 18] ;
949 023a 0C03 ld r0,#3
950 023c C4F60000 ld r6,dpr:pof(@CurDevice)
951 0240 26FFFFD6 ld -1(rr14),r6
952 0244 86FFFED2 ldw rr2,-2(rr14)
953 0248 4F20 mul rr2,r0
954 024a 86FFFED3 ldw -2(rr14),rr2
955 024e 86F20038 ldw rr6,dpr:pof(@UsbConfigDesc+1)(rr2)
955 D6
956 0253 47D70012 addw rr6,#18
957 .LMM92:
406:../src/usb.c **** return control_read() ;
959 0257 8B31 jxt .L39
960 .L35:
961 .LMM93:
407:../src/usb.c **** break ;
408:../src/usb.c **** case 0x22: /* USB_REPORT */
409:../src/usb.c **** // data_size = sizeof hid_report_descriptor ;
410:../src/usb.c **** // data_ptr = hid_report_descriptor ;
411:../src/usb.c **** // control_read() ;
412:../src/usb.c **** data_size[ CurDevice] = UsbReportDesc[ CurDevice].size ;
963 0259 C4F10000 ld r1,dpr:pof(@CurDevice)
964 025d 0C00 ld r0,#0
965 025f C4F90000 ld r9,dpr:pof(@CurDevice)
966 0263 7C03 ld r7,#3
967 0265 4F87 mul rr8,r7
968 0267 7FF8004C ld r8,dpr:pof(@UsbReportDesc)(rr8)
968 D8
969 026c 26F00000 ld dpr:pof(@data_size)(rr0),r8
969 D8
970 .LMM94:
413:../src/usb.c **** data_ptr = (BYTE *) UsbReportDesc[ CurDevice].desc ;
972 0271 C4F20000 ld r2,dpr:pof(@CurDevice)
973 0275 26FFFDD2 ld -3(rr14),r2
974 0279 86FFFCD6 ldw rr6,-4(rr14)
975 027d 2C03 ld r2,#3
976 027f 4F62 mul rr6,r2
977 0281 86FFFCD7 ldw -4(rr14),rr6
978 0285 86F6004D ldw rr6,dpr:pof(@UsbReportDesc+1)(rr6)
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 23
978 D6
979 .L39:
980 028a E2F70000 ldw dpr:pof(@data_ptr),rr6
981 .LMM95:
414:../src/usb.c **** return control_read() ;
983 028e D200E2 call @control_read
984 0291 8B02 jxt .L38
985 .L36:
986 .LMM96:
415:../src/usb.c **** break ;
416:../src/usb.c **** // case 0x23: /* USB_PHYSICAL */
417:../src/usb.c **** // send_stall() ;
418:../src/usb.c **** // break ;
419:../src/usb.c **** default:
420:../src/usb.c **** return TX_STALL ;
988 0293 1C01 ld r1,#1
989 .L38:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -