⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fx2_ata_revc.cod

📁 Cy68013的应用——USB2.0接口转IDE、CF卡接口
💻 COD
📖 第 1 页 / 共 5 页
字号:
0B1D F163              ACALL   IDEPrepareForXfer
  168:             stuffLBAandSector(1);
0B1F D223              SETB    ?stuffLBAandSector?BIT
0B21 316D              ACALL   stuffLBAandSector
  169:             writePIO8(ATAPI_COMMAND_REG, ATA_COMMAND_SEEK);
0B23 7D70              MOV     R5,#070H
0B25 3149              ACALL   ?L?COM000F
  170:             if(waitForBusyBit() == USBS_FAILED)
0B27 1173              ACALL   waitForBusyBit
0B29 5007              JNC     ?C0022?IDE
  171:                {
  172:                loadSensePtrFromErrorRegister(1);
0B2B D223              SETB    ?loadSensePtrFromErrorRegister?BIT
0B2D 1213F2            LCALL   loadSensePtrFromErrorRegister
  173:                return(USBS_FAILED);
0B30 D3                SETB    C
0B31 22                RET     
  174:                }
0B32         ?C0022?IDE:
  175:             else
  176:                return(USBS_PASSED);
0B32 C3                CLR     C
0B33 22                RET     
  177:             }
0B34         ?C0021?IDE:
  178:          else
  179:             {
  180: 	         // relinquish control of the bulk buffer occupied by the CBW
  181: 	         EP2BCL = 0x80;     
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 11


0B34         
0B34 D164              ACALL   ?L?COM000B
  182: 
  183:             failedIn();         
  184:             return(USBS_FAILED);
0B36 A1AC              AJMP    ?C0271?IDE
  185:             }
  186:       }                
  187: 
  188:       case READ_FORMAT_CAPACITIES:
  189:       case READ_CAPACITY:
0B38         ?C0026?IDE:
  190:       {
  191:          BYTE num_bytes = 8;
0B38 755E08            MOV     num_bytes,#08H
  192: 
  193:          // relinquish control of the bulk buffer occupied by the CBW
  194:          EP2BCL = 0x80;     
0B3B D164              ACALL   ?L?COM000B
  195:          
  196:          sensePtr = senseOk;
0B3D F1AA              ACALL   ?L?COM0022
  197:          checkForMedia(1);
0B3F D223              SETB    ?checkForMedia?BIT
0B41 12003E            LCALL   checkForMedia
  198:                  
  199:          waitForInBuffer();
0B44 F133              ACALL   waitForInBuffer
  200:          if (sensePtr == senseOk)
0B46 742E              MOV     A,#LOW senseOk
0B48 6509              XRL     A,sensePtr+01H
0B4A 7004              JNZ     ?C0242?IDE
0B4C 7407              MOV     A,#HIGH senseOk
0B4E 6508              XRL     A,sensePtr
0B50         ?C0242?IDE:
0B50 7046              JNZ     ?C0027?IDE
  201:          {
  202:             AUTOPTRL2 = LSB(EP8FIFOBUF);
0B52 F59E              MOV     AUTOPTRL2,A
  203:             if(cmd == READ_FORMAT_CAPACITIES) // add 4 byte capacity list header
0B54 E55D              MOV     A,cmd
0B56 B4230D            CJNE    A,#023H,?C0028?IDE
  204:             {
  205:                XAUTODAT2 = 0x0;
0B59 90E67C            MOV     DPTR,#0E67CH
0B5C E4                CLR     A
0B5D F0                MOVX    @DPTR,A
  206:                XAUTODAT2 = 0x0;
0B5E F0                MOVX    @DPTR,A
  207:                XAUTODAT2 = 0x0;
0B5F F0                MOVX    @DPTR,A
  208:                XAUTODAT2 = 0x08;
0B60 7408              MOV     A,#08H
0B62 F0                MOVX    @DPTR,A
  209:                num_bytes = 12;
0B63 755E0C            MOV     num_bytes,#0CH
  210:             }
0B66         ?C0028?IDE:
  211:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[0];
0B66 90E67C            MOV     DPTR,#0E67CH
0B69 E534              MOV     A,ActiveLunConfigData+06H
0B6B F0                MOVX    @DPTR,A
  212:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[1];
0B6C E535              MOV     A,ActiveLunConfigData+07H
0B6E F0                MOVX    @DPTR,A
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 12


  213:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[2];
0B6F E536              MOV     A,ActiveLunConfigData+08H
0B71 F0                MOVX    @DPTR,A
  214:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[3];
0B72 E537              MOV     A,ActiveLunConfigData+09H
0B74 F0                MOVX    @DPTR,A
  215:             if(cmd == READ_FORMAT_CAPACITIES) 
0B75 E55D              MOV     A,cmd
0B77 B42305            CJNE    A,#023H,?C0029?IDE
  216:                XAUTODAT2 = ((ATA_SECTOR_SIZE >> 24) & 0xff) | 2;     // Report media type -- Formatted
0B7A 7402              MOV     A,#02H
0B7C F0                MOVX    @DPTR,A
0B7D 8005              SJMP    ?C0030?IDE
0B7F         ?C0029?IDE:
  217:             else
  218:                XAUTODAT2 = (ATA_SECTOR_SIZE >> 24) & 0xff;
0B7F 90E67C            MOV     DPTR,#0E67CH
0B82 E4                CLR     A
0B83 F0                MOVX    @DPTR,A
0B84         ?C0030?IDE:
  219:             XAUTODAT2 = (ATA_SECTOR_SIZE >> 16) & 0xff;
0B84 90E67C            MOV     DPTR,#0E67CH
0B87 E4                CLR     A
0B88 F0                MOVX    @DPTR,A
  220:             XAUTODAT2 = (ATA_SECTOR_SIZE >>  8) & 0xff;
0B89 7402              MOV     A,#02H
0B8B F0                MOVX    @DPTR,A
  221:             XAUTODAT2 = (ATA_SECTOR_SIZE >>  0) & 0xff;
0B8C E4                CLR     A
0B8D F0                MOVX    @DPTR,A
  222: 
  223:             loadEP8BC(num_bytes);
0B8E AF5E              MOV     R7,num_bytes
0B90 FE                MOV     R6,A
0B91 1217A6            LCALL   _loadEP8BC
  224:             status = USBS_PASSED;
0B94 C222              CLR     status
  225:          }
0B96 8004              SJMP    ?C0031?IDE
0B98         ?C0027?IDE:
  226:          else
  227:          {
  228:             failedIn();
0B98 1116              ACALL   failedIn
  229:             status = USBS_FAILED;
0B9A D222              SETB    status
  230:          }
0B9C         ?C0031?IDE:
  231: 
  232:          return(status);
0B9C A222              MOV     C,status
0B9E 22                RET     
  233:       }
  234: 
  235:       ///////////////////////////////////////////////////////////
  236:       // Spoofed commands
  237:       case MODE_SELECT_06:    // Note that these are in BOTH the read and write areas in case they are sent with 
>> no data     
  238:       case MODE_SELECT_10:
0B9F         ?C0033?IDE:
  239:       {
  240:       // relinquish control of the bulk buffer occupied by the CBW
  241:          EP2BCL = 0x80;     
0B9F D10F              ACALL   ?L?COM0007
0BA1 B50907            CJNE    A,sensePtr+01H,?C0034?IDE
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 13


0BA4 7407              MOV     A,#HIGH senseOk
0BA6 B50802            CJNE    A,sensePtr,?C0034?IDE
  242:          
  243:       // This command is allowed to have data.         
  244:          sensePtr = senseOk;
  245:          checkForMedia(1);
  246:          
  247:          if (sensePtr == senseOk)
  248:             return(USBS_PASSED);
0BA9 C3                CLR     C
0BAA 22                RET     
0BAB         ?C0034?IDE:
  249:          else
  250:             return(USBS_FAILED);
0BAB D3                SETB    C
0BAC 22                RET     
  251:       }                
  252: 
  253:       case TEST_UNIT_READY:
  254:       case FORMAT_UNIT:
0BAD         ?C0037?IDE:
  255:       {
  256:       // relinquish control of the bulk buffer occupied by the CBW
  257:          EP2BCL = 0x80;     
0BAD F197              ACALL   ?L?COM0001
0BAF 6002              JZ      ?C0038?IDE
  258:          
  259:          if (dataTransferLen)    // This command shouldn't have any data!
  260:             failedIn();         
0BB1 1116              ACALL   failedIn
0BB3         ?C0038?IDE:
  261:          
  262:          sensePtr = senseOk;
0BB3 D115              ACALL   ?L?COM0008
0BB5 B50907            CJNE    A,sensePtr+01H,?C0039?IDE
0BB8 7407              MOV     A,#HIGH senseOk
0BBA B50802            CJNE    A,sensePtr,?C0039?IDE
  263:          checkForMedia(1);
  264:          
  265:          if (sensePtr == senseOk)
  266:             return(USBS_PASSED);
0BBD C3                CLR     C
0BBE 22                RET     
0BBF         ?C0039?IDE:
  267:          else
  268:             return(USBS_FAILED);
0BBF D3                SETB    C
0BC0 22                RET     
  269:       }                
  270:       case REQUEST_SENSE:
0BC1         ?C0041?IDE:
  271:       {
  272:          // relinquish control of the bulk buffer occupied by the CBW
  273:          EP2BCL = 0x80;     
0BC1 D164              ACALL   ?L?COM000B
  274:    
  275:          waitForInBuffer();
0BC3 F133              ACALL   waitForInBuffer
  276: 
  277:          AUTOPTRL2 = LSB(EP8FIFOBUF);
0BC5 E4                CLR     A
0BC6 F59E              MOV     AUTOPTRL2,A
  278: 
  279:          // First two bytes are 0x70 and 0x00
  280:          XAUTODAT2 = 0x70;
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 14


0BC8 90E67C            MOV     DPTR,#0E67CH
0BCB 7470              MOV     A,#070H
0BCD F0                MOVX    @DPTR,A
  281:          XAUTODAT2 = 0x00;
0BCE E4                CLR     A
0BCF F0                MOVX    @DPTR,A
  282:          // Clear the rest of the buffer
  283:          mymemmovexx(EP8FIFOBUF+2, EP8FIFOBUF+1, 18-2);
0BD0 7B10              MOV     R3,#010H
0BD2 FA                MOV     R2,A
0BD3 7D01              MOV     R5,#01H
0BD5 7CFC              MOV     R4,#0FCH
0BD7 7F02              MOV     R7,#02H
0BD9 7EFC              MOV     R6,#0FCH
0BDB 120752            LCALL   _mymemmovexx
  284:          XAUTODAT2 = sensePtr[0];
0BDE F16F              ACALL   ?L?COM0029
0BE0 E4                CLR     A
0BE1 93                MOVC    A,@A+DPTR
0BE2 90E67C            MOV     DPTR,#0E67CH
0BE5 F0                MOVX    @DPTR,A
  285: 
  286:          AUTOPTRL2 = 7;
0BE6 759E07            MOV     AUTOPTRL2,#07H
  287:          XAUTODAT2 = 18-8;    // Length of data following this byte
0BE9 740A              MOV     A,#0AH
0BEB F0                MOVX    @DPTR,A
  288: 
  289:          AUTOPTRL2 = 12;
0BEC 759E0C            MOV     AUTOPTRL2,#0CH
  290:          XAUTODAT2 = sensePtr[1];
0BEF F16F              ACALL   ?L?COM0029
0BF1 7401              MOV     A,#01H
0BF3 93                MOVC    A,@A+DPTR
0BF4 90E67C            MOV     DPTR,#0E67CH
0BF7 F0                MOVX    @DPTR,A
  291:          XAUTODAT2 = sensePtr[2];
0BF8 F16F              ACALL   ?L?COM0029
0BFA 7402              MOV     A,#02H
0BFC 93                MOVC    A,@A+DPTR
0BFD 90E67C            MOV     DPTR,#0E67CH
0C00 F0                MOVX    @DPTR,A
  292: 
  293:          loadEP8BC(18);
0C01 7F12              MOV     R7,#012H
0C03         
0C03 7E00              MOV     R6,#00H
  294:          sensePtr = senseOk;
  295:          return(USBS_PASSED);
0C05 A1A0              AJMP    ?C0266?IDE
  296:       }
  297:       case STOP_START_UNIT:
  298:       case PREVENT_ALLOW_MEDIUM_REMOVAL:
0C07         ?C0043?IDE:
  299:          {
  300:          BYTE options;
  301: 
  302:          options = EP2FIFOBUF[CBW_DATA_START+4];
0C07 90F013            MOV     DPTR,#0F013H
0C0A E0                MOVX    A,@DPTR
0C0B F55E              MOV     options,A
  303:          // relinquish control of the bulk buffer occupied by the CBW
  304:          EP2BCL = 0x80;     
0C0D F197              ACALL   ?L?COM0001
0C0F 6002              JZ      ?C0044?IDE
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 15


  305:          
  306:          if (dataTransferLen)    // This command shouldn't have any data!
  307:             failedIn();
0C11 1116              ACALL   failedIn
0C13         ?C0044?IDE:
  308:          
  309:          if (bCompactFlash)
0C13 300521            JNB     bCompactFlash,?C0045?IDE
  310:             {
  311:             if ((cmd == PREVENT_ALLOW_MEDIUM_REMOVAL && (options & 1)) ||  // media_lock
0C16 E55D              MOV     A,cmd
0C18 B41E05            CJNE    A,#01EH,?C0048?IDE
0C1B E55E              MOV     A,options
0C1D 20E00D            JB      ACC.0,?C0047?IDE
0C20         ?C0048?IDE:
0C20 E55D              MOV     A,cmd
0C22 B41B10            CJNE    A,#01BH,?C0046?IDE
0C25 E55E              MOV     A,options
0C27 5403              ANL     A,#03H
0C29 FF                MOV     R7,A
0C2A BF0208            CJNE    R7,#02H,?C0046?IDE
0C2D         ?C0047?IDE:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -