📄 mouse.lis
字号:
383:../src/mouse.c **** ENDPR4_A |= 0x02 ; /* Control endpoint */
945 044f 05F802 or @ENDPR4_A,#2
946 .LMM139:
384:../src/mouse.c ****
385:../src/mouse.c **** EP4RxAddr = RxBuffer[ 2] ;
948 0452 BF240010 ldw @EP4RxAddr,#dpr:pof(@RxBuffer+16)
949 .LMM140:
386:../src/mouse.c **** EP4RxCount = MAX_PACKET_SIZE ;
951 0456 BF260008 ldw @EP4RxCount,#8
952 .LMM141:
387:../src/mouse.c **** EP4TxAddr = 0 ; /* Insure there is a valid Tx address in case of a STATUS IN */
954 045a BF200000 ldw @EP4TxAddr,#0
955 .LMM142:
388:../src/mouse.c ****
389:../src/mouse.c **** ENDPR4_A &= ~0x30 ; /* EP4 TX STAT_DISABLED */
957 045e 15F8CF and @ENDPR4_A,#207
958 .LMM143:
390:../src/mouse.c **** ENDPR4_B |= 0x30 ; /* EP4 RX STAT_VALID */
960 0461 05F930 or @ENDPR4_B,#48
961 .LMM144:
391:../src/mouse.c ****
392:../src/mouse.c **** /* INT IN */
393:../src/mouse.c **** ENDPR5_A &= ~0x30 ; /* EP5 TX STAT_DISABLED */
963 0464 15FACF and @ENDPR5_A,#207
964 .LMM145:
394:../src/mouse.c **** ENDPR5_B &= ~0x30 ; /* EP5 RX STAT_DISABLED */
966 0467 15FBCF and @ENDPR5_B,#207
967 .LMM146:
395:../src/mouse.c **** ENDPR5_B |= 0x1 ; /* EP5 is Device 1 Endpoint 1 */
969 046a 05FB01 or @ENDPR5_B,#1
970 .LMM147:
396:../src/mouse.c ****
397:../src/mouse.c **** spp( USB_PG) ;
972 ; #APP
973 046d C73E spp #15
974 ; #NO_APP
975 .LMM148:
398:../src/mouse.c **** DADDR2 = 0 | 0x80 ; /* EP0 default address */
977 046f F5F280 ld @DADDR2,#-128
978 .LMM149:
399:../src/mouse.c **** }
980 0472 46 ret
981 .endproc
982 .Lscope7:
986
987 .globl MOUSE_set_configuration
988
989 .desc MOUSE_set_configuration, near
990 .proc MOUSE_set_configuration
991 MOUSE_set_configuration:
400:../src/mouse.c ****
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 23
401:../src/mouse.c **** void MOUSE_set_configuration( BYTE configuration_status)
402:../src/mouse.c **** {
993 .LMM151:
403:../src/mouse.c **** /* Called in the CTL endpoint context */
404:../src/mouse.c **** if( configuration_status == 0)
995 0473 0200 or r0,r0
996 0475 EB04 jxnz .L214
997 .LMM152:
405:../src/mouse.c **** {
406:../src/mouse.c **** /* device is not configured */
407:../src/mouse.c **** ENDPR5_A &= ~0x30 ; /* Disable Tx */
999 0477 15FACF and @ENDPR5_A,#207
1000 .LMM153:
408:../src/mouse.c **** }
1002 047a 46 ret
1003 .L214:
1004 .LMM154:
409:../src/mouse.c **** else
410:../src/mouse.c **** {
411:../src/mouse.c **** /* device is configured */
412:../src/mouse.c **** ENDPR5_A &= ~0x70 ;
1006 047b 15FA8F and @ENDPR5_A,#143
1007 .LMM155:
413:../src/mouse.c **** ENDPR5_A |= 0x20 ; /* Tx STAT_NAK */
1009 047e 05FA20 or @ENDPR5_A,#32
1010 .LMM156:
414:../src/mouse.c **** }
415:../src/mouse.c **** }
1012 0481 46 ret
1013 .endproc
1014 .Lscope8:
1016
1017 .globl EP4TxCount
1018 .desc EP4TxCount, 16bit register
1019 EP4TxCount= 34
1021
1022 .globl ep4_int
1023
1024 .desc ep4_int, near
1025 .desc ep4_int, interrupt
1026 .proc ep4_int
1027 ep4_int:
416:../src/mouse.c ****
417:../src/mouse.c **** #pragma INTERRUPT ep4_int
418:../src/mouse.c **** void ep4_int( void)
419:../src/mouse.c **** {
1029 0482 66EA push R234
1030 0484 74D6 pushw rr6
1031 0486 74D4 pushw rr4
1032 0488 74D2 pushw rr2
1033 048a 74D0 pushw rr0
1034 048c FE sdm
1035 .LMM158:
420:../src/mouse.c **** spp( 4) ;
1037 ; #APP
1038 048d C712 spp #4
1039 ; #NO_APP
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 24
1040 .LMM159:
421:../src/mouse.c ****
422:../src/mouse.c **** if( ENDPR4_A == 0xEE) /* Correct SETUP received */
1042 048f 95F8EE cp @ENDPR4_A,#238
1043 0492 EB74 jxnz .L217
1044 .LMM160:
423:../src/mouse.c **** {
424:../src/mouse.c **** ENDPR4_B |= 0x80 ; /* By default we expect STATUS_OUT */
1046 0494 05F980 or @ENDPR4_B,#128
1047 .LMM161:
425:../src/mouse.c **** CurDevice = 2 ;
1049 0497 2FF10200 ld dpr:pof(@CurDevice),#2
1049 00
1050 .LMM162:
426:../src/mouse.c **** CurRxBuffer = (BYTE *) EP4RxAddr ;
1052 049c EF24D2 ldw rr2,@EP4RxAddr
1053 049f E2F30000 ldw dpr:pof(@CurRxBuffer),rr2
1054 .LMM163:
427:../src/mouse.c **** fsm_state[ 2] = do_setup() ;
1056 04a3 D20000 call @do_setup
1057 04a6 C5F10002 ld dpr:pof(@fsm_state+2),r1
1058 .LMM164:
428:../src/mouse.c **** switch( fsm_state[ 2])
1060 04aa C4F10002 ld r1,dpr:pof(@fsm_state+2)
1061 04ae 0C00 ld r0,#0
1062 04b0 CFD0 decw rr0
1063 04b2 97D10004 cpw rr0,#4
1064 04b6 BB4C jxugt .L225
1065 04b8 4E00 addw rr0,rr0
1066 04ba EE spm
1067 04bb 86F004C3 ldw rr0,sof(.L226)(rr0)
1067 D0
1068 04c0 FE sdm
1069 04c1 D4D0 jp (rr0)
1070 .L226:
1071 $start_switch_table_226:
1072 04c3 04CD .word sof(.L219)
1073 04c5 04D6 .word sof(.L220)
1074 04c7 0504 .word sof(.L225)
1075 04c9 04FA .word sof(.L224)
1076 04cb 04FA .word sof(.L224)
1077 $end_switch_table_226:
1078 .L219:
1079 .LMM165:
429:../src/mouse.c **** {
430:../src/mouse.c **** case TX_STALL:
431:../src/mouse.c **** ENDPR4_A &= ~0x30 ; /* Clear STAT bits */
1081 04cd 15F8CF and @ENDPR4_A,#207
1082 .LMM166:
432:../src/mouse.c **** ENDPR4_A |= 0x10 ; /* Tx STAT_STALL */
1084 04d0 05F810 or @ENDPR4_A,#16
1085 .LMM167:
433:../src/mouse.c **** break ;
1087 04d3 8D058C jxt .L227
1088 .L220:
1089 .LMM168:
434:../src/mouse.c **** case TX_N:
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 25
435:../src/mouse.c **** EP4TxAddr = data_ptr ;
1091 04d6 E2F20000 ldw rr2,dpr:pof(@data_ptr)
1092 04da EFD220 ldw @EP4TxAddr,rr2
1093 .LMM169:
436:../src/mouse.c **** if( data_size[ 2] >= MAX_PACKET_SIZE)
1095 04dd 2F910700 cp dpr:pof(@data_size+2),#7
1095 02
1096 04e2 3B06 jxule .L221
1097 .LMM170:
437:../src/mouse.c **** {
438:../src/mouse.c **** EP4TxCount = MAX_PACKET_SIZE ;
1099 04e4 BF220008 ldw @EP4TxCount,#8
1100 .LMM171:
439:../src/mouse.c **** }
1102 04e8 8B14 jxt .L244
1103 .L221:
1104 .LMM172:
440:../src/mouse.c **** else
441:../src/mouse.c **** {
442:../src/mouse.c **** EP4TxCount = data_size[ 2] ;
1106 04ea C4F10002 ld r1,dpr:pof(@data_size+2)
1107 04ee 0C00 ld r0,#0
1108 04f0 EFD022 ldw @EP4TxCount,rr0
1109 .LMM173:
443:../src/mouse.c **** fsm_state[ 2] = TX_LAST ;
1111 04f3 2FF10300 ld dpr:pof(@fsm_state+2),#3
1111 02
1112 .LMM174:
444:../src/mouse.c **** }
445:../src/mouse.c ****
446:../src/mouse.c **** ENDPR4_A |= 0x30 ; /* TX STAT_VALID */
447:../src/mouse.c **** break ;
1114 04f8 8B04 jxt .L244
1115 .L224:
1116 .LMM175:
448:../src/mouse.c **** case TX_ACK_ADDR:
449:../src/mouse.c **** case TX_0:
450:../src/mouse.c **** EP4TxCount = 0 ; /* Enable the transmission */
1118 04fa BF220000 ldw @EP4TxCount,#0
1119 .LMM176:
451:../src/mouse.c **** ENDPR4_A |= 0x30 ;
1121 .L244:
1122 04fe 05F830 or @ENDPR4_A,#48
1123 .LMM177:
452:../src/mouse.c **** break ;
1125 0501 8D058C jxt .L227
1126 .L225:
1127 .LMM178:
453:../src/mouse.c **** default:
454:../src/mouse.c **** nop() ;
1129 ; #APP
1130 0504 FF nop
1131 ; #NO_APP
1132 .LMM179:
455:../src/mouse.c **** }
456:../src/mouse.c **** }
1134 0505 8D058C jxt .L227
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 26
1135 .L217:
1136 .LMM180:
457:../src/mouse.c **** else if( (ENDPR4_A & 0xBF) == 0xAA) /* IN (don't care toggle) */
1138 0508 08F8 ld r0,@ENDPR4_A
1139 050a 1FC0 bres r0.6
1140 050c 95D0AA cp r0,#170
1141 050f EB55 jxnz .L228
1142 .LMM181:
458:../src/mouse.c **** {
459:../src/mouse.c **** switch( fsm_state[ 2])
1144 0511 C4F10002 ld r1,dpr:pof(@fsm_state+2)
1145 0515 0C00 ld r0,#0
1146 0517 47D1FFFE addw rr0,#-2
1147 051b 97D10003 cpw rr0,#3
1148 051f BB6B jxugt .L227
1149 0521 4E00 addw rr0,rr0
1150 0523 EE spm
1151 0524 86F0052C ldw rr0,sof(.L235)(rr0)
1151 D0
1152 0529 FE sdm
1153 052a D4D0 jp (rr0)
1154 .L235:
1155 $start_switch_table_235:
1156 052c 0534 .word sof(.L230)
1157 052e 058C .word sof(.L227)
1158 0530 0587 .word sof(.L241)
1159 0532 0558 .word sof(.L233)
1160 $end_switch_table_235:
1161 .L230:
1162 .LMM182:
460:../src/mouse.c **** {
461:../src/mouse.c **** case TX_N: /* after IN( n) => send next */
462:../src/mouse.c **** EP4TxAddr += EP4TxCount ;
1164 0534 EF22D0 ldw rr0,@EP4TxCount
1165 0537 47D020 addw @EP4TxAddr,rr0
1166 .LMM183:
463:../src/mouse.c **** data_size[ 2] -= EP4TxCount ;
1168 053a EF22D0 ldw rr0,@EP4TxCount
1169 053d C5510002 sub dpr:pof(@data_size+2),r1
1170 .LMM184:
464:../src/mouse.c **** if( data_size[ 2] < MAX_PACKET_SIZE)
1172 0541 2F910700 cp dpr:pof(@data_size+2),#7
1172 02
1173 0546 BBB6 jxugt .L244
1174 .LMM185:
465:../src/mouse.c **** {
466:../src/mouse.c **** EP4TxCount = data_size[ 2] ;
1176 0548 C4F10002 ld r1,dpr:pof(@data_size+2)
1177 054c 0C00 ld r0,#0
1178 054e EFD022 ldw @EP4TxCount,rr0
1179 .LMM186:
467:../src/mouse.c **** fsm_state[ 2] = TX_LAST ;
1181 0551 2FF10300 ld dpr:pof(@fsm_state+2),#3
1181 02
1182 .LMM187:
468:../src/mouse.c **** }
469:../src/mouse.c ****
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 27
470:../src/mouse.c **** ENDPR4_A |= 0x30 ; /* Tx STAT_VALID */
471:../src/mouse.c **** break ;
1184 0556 8BA6 jxt .L244
1185 .L233:
1186 .LMM188:
472:../src/mouse.c **** case TX_LAST: /* after a IN( 0) => expect STATUS_OUT */
473:../src/mouse.c **** break ;
474:../src/mouse.c **** case TX_ACK_ADDR:
475:../src/mouse.c **** spp( USB_PG) ;
1188 ; #APP
1189 0558 C73E spp #15
1190 ; #NO_APP
1191 .LMM189:
476:../src/mouse.c **** DADDR2 = 0x80 | address[ 2] ;
1193 055a C4F30002 ld r3,dpr:pof(@address+2)
1194 055e 0FE3 bset r3.7
1195 0560 39F2 ld @DADDR2,r3
1196 .LMM190:
477:../src/mouse.c **** spp( 4) ;
1198 ; #APP
1199 0562 C712 spp #4
1200 ; #NO_APP
1201 .LMM191:
478:../src/mouse.c **** /* Fall Through */
479:../src/mouse.c **** case TX_0: /* STATUS_IN */
480:../src/mouse.c **** fsm_state[ 2] = UNDEFINED ;
481:../src/mouse.c **** break ;
482:../src/mouse.c **** }
483:../src/mouse.c **** }
1203 0564 8B21 jxt .L241
1204 .L228:
1205 .LMM192:
484:../src/mouse.c **** else if( (ENDPR4_A & 0x8F) == 0x82) /* OUT (don't care Tx STAT */
1207 0566 08F8 ld r0,@ENDPR4_A
1208 0568 15D08F and r0,#143
1209 056b 95D082 cp r0,#130
1210 056e EB1C jxnz .L227
1211 .LMM193:
485:../src/mouse.c **** {
486:../src/mouse.c **** switch( fsm_state[ 2])
1213 0570 C4F10002 ld r1,dpr:pof(@fsm_state+2)
1214 0574 0C00 ld r0,#0
1215 0576 97D10002 cpw rr0,#2
1216 057a 6B08 jxz .L240
1217 057c 97D10003 cpw rr0,#3
1218 0580 6B05 jxz .L241
1219 0582 8B08 jxt .L227
1220 .L240:
1221 .LMM194:
487:../src/mouse.c **** {
488:../src/mouse.c **** case TX_N: /* HOST stops transmission */
489:../src/mouse.c **** ENDPR4_A &= ~0x30 ; /* Tx STAT_DISABLE */
1223 0584 15F8CF and @ENDPR4_A,#207
1224 .L241:
1225 .LMM195:
490:../src/mouse.c **** /* Fall Through */
491:../src/mouse.c **** case TX_LAST: /* Status_out following transmission */
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 28
492:../src/mouse.c **** fsm_state[ 2] = UNDEFINED ;
1227 0587 2FF10000 ld dpr:pof(@fsm_state+2),#0
1227 02
1228 .L227:
1229 .LMM196:
493:../src/mouse.c **** }
494:../src/mouse.c **** }
495:../src/mouse.c ****
496:../src/mouse.c **** EP4RxCount = MAX_PACKET_SIZE ;
1231 058c BF260008 ldw @EP4RxCount,#8
1232 .LMM197:
497:../src/mouse.c **** ENDPR4_B |= 0x30 ; /* Rx STAT_VALID */
1234 0590 05F930 or @ENDPR4_B,#48
1235 .LMM198:
498:../src/mouse.c **** ENDPR4_A &= ~0x80 ; /* Reset CTR */
1237 0593 15F87F and @ENDPR4_A,#127
1238 .LMM199:
499:../src/mouse.c **** }
1240 0596 75D0 popw rr0
1241 0598 75D2 popw rr2
1242 059a 75D4 popw rr4
1243 059c 75D6 popw rr6
1244 059e 76EA pop R234
1245 05a0 D3 iret
1246 .endproc
1247 .Lscope9:
1250
1251 .globl ep5_int
1252
1253 .desc ep5_int, near
1254 .desc ep5_int, interrupt
1255 .proc ep5_int
1256 ep5_int:
500:../src/mouse.c ****
501:../src/mouse.c **** #pragma INTERRUPT ep5_int
502:../src/mouse.c **** void ep5_int( void)
503:../src/mouse.c **** {
1258 05a1 66EA push R234
1259 05a3 FE sdm
1260 .LMM201:
504:../src/mouse.c **** spp( 4) ;
1262 ; #APP
1263 05a4 C712 spp #4
1264 ; #NO_APP
1265 .LMM202:
505:../src/mouse.c **** ENDPR5_A &= ~0x80 ; /* Reset CTR bit */
1267 05a6 15FA7F and @ENDPR5_A,#127
1268 .LMM203:
506:../src/mouse.c **** }
1270 05a9 76EA pop R234
1271 05ab D3 iret
1272 .endproc
1273 .Lscope10:
1276
1277 .section .bss
1278
1279 .desc ms_tout, near
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001896.s page 29
1280 .comm ms_tout,2,1
1282
1283 .desc Mouse_Buffer, near
1284 .comm Mouse_Buffer,4,1
1285 .section .text
1287 .Letext:
1288
1289 .end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -