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

📄 fx2_ata.cod

📁 Cy68013的应用——USB2.0接口转IDE、CF卡接口
💻 COD
📖 第 1 页 / 共 5 页
字号:
0B1E F168              ACALL   IDEPrepareForXfer
  168:             stuffLBAandSector(1);
0B20 D223              SETB    ?stuffLBAandSector?BIT
0B22 316D              ACALL   stuffLBAandSector
  169:             writePIO8(ATAPI_COMMAND_REG, ATA_COMMAND_SEEK);
0B24 7D70              MOV     R5,#070H
0B26 3149              ACALL   ?L?COM000F
  170:             if(waitForBusyBit() == USBS_FAILED)
0B28 1174              ACALL   waitForBusyBit
0B2A 5007              JNC     ?C0022?IDE
  171:                {
  172:                loadSensePtrFromErrorRegister(1);
0B2C D223              SETB    ?loadSensePtrFromErrorRegister?BIT
0B2E 121018            LCALL   loadSensePtrFromErrorRegister
  173:                return(USBS_FAILED);
0B31 D3                SETB    C
0B32 22                RET     
  174:                }
0B33         ?C0022?IDE:
  175:             else
  176:                return(USBS_PASSED);
0B33 C3                CLR     C
0B34 22                RET     
  177:             }
0B35         ?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


0B35         
0B35 D169              ACALL   ?L?COM000B
  182: 
  183:             failedIn();         
  184:             return(USBS_FAILED);
0B37 A1AF              AJMP    ?C0271?IDE
  185:             }
  186:       }                
  187: 
  188:       case READ_FORMAT_CAPACITIES:
  189:       case READ_CAPACITY:
0B39         ?C0026?IDE:
  190:       {
  191:          BYTE num_bytes = 8;
0B39 755E08            MOV     num_bytes,#08H
  192: 
  193:          // relinquish control of the bulk buffer occupied by the CBW
  194:          EP2BCL = 0x80;     
0B3C D169              ACALL   ?L?COM000B
  195:          
  196:          sensePtr = senseOk;
0B3E F1AF              ACALL   ?L?COM0022
  197:          checkForMedia(1);
0B40 D223              SETB    ?checkForMedia?BIT
0B42 12003E            LCALL   checkForMedia
  198:                  
  199:          waitForInBuffer();
0B45 F138              ACALL   waitForInBuffer
  200:          if (sensePtr == senseOk)
0B47 7434              MOV     A,#LOW senseOk
0B49 6509              XRL     A,sensePtr+01H
0B4B 7004              JNZ     ?C0242?IDE
0B4D 7407              MOV     A,#HIGH senseOk
0B4F 6508              XRL     A,sensePtr
0B51         ?C0242?IDE:
0B51 7046              JNZ     ?C0027?IDE
  201:          {
  202:             AUTOPTRL2 = LSB(EP8FIFOBUF);
0B53 F59E              MOV     AUTOPTRL2,A
  203:             if(cmd == READ_FORMAT_CAPACITIES) // add 4 byte capacity list header
0B55 E55D              MOV     A,cmd
0B57 B4230D            CJNE    A,#023H,?C0028?IDE
  204:             {
  205:                XAUTODAT2 = 0x0;
0B5A 90E67C            MOV     DPTR,#0E67CH
0B5D E4                CLR     A
0B5E F0                MOVX    @DPTR,A
  206:                XAUTODAT2 = 0x0;
0B5F F0                MOVX    @DPTR,A
  207:                XAUTODAT2 = 0x0;
0B60 F0                MOVX    @DPTR,A
  208:                XAUTODAT2 = 0x08;
0B61 7408              MOV     A,#08H
0B63 F0                MOVX    @DPTR,A
  209:                num_bytes = 12;
0B64 755E0C            MOV     num_bytes,#0CH
  210:             }
0B67         ?C0028?IDE:
  211:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[0];
0B67 90E67C            MOV     DPTR,#0E67CH
0B6A E534              MOV     A,ActiveLunConfigData+06H
0B6C F0                MOVX    @DPTR,A
  212:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[1];
0B6D E535              MOV     A,ActiveLunConfigData+07H
0B6F F0                MOVX    @DPTR,A
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 12


  213:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[2];
0B70 E536              MOV     A,ActiveLunConfigData+08H
0B72 F0                MOVX    @DPTR,A
  214:             XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[3];
0B73 E537              MOV     A,ActiveLunConfigData+09H
0B75 F0                MOVX    @DPTR,A
  215:             if(cmd == READ_FORMAT_CAPACITIES) 
0B76 E55D              MOV     A,cmd
0B78 B42305            CJNE    A,#023H,?C0029?IDE
  216:                XAUTODAT2 = ((ATA_SECTOR_SIZE >> 24) & 0xff) | 2;     // Report media type -- Formatted
0B7B 7402              MOV     A,#02H
0B7D F0                MOVX    @DPTR,A
0B7E 8005              SJMP    ?C0030?IDE
0B80         ?C0029?IDE:
  217:             else
  218:                XAUTODAT2 = (ATA_SECTOR_SIZE >> 24) & 0xff;
0B80 90E67C            MOV     DPTR,#0E67CH
0B83 E4                CLR     A
0B84 F0                MOVX    @DPTR,A
0B85         ?C0030?IDE:
  219:             XAUTODAT2 = (ATA_SECTOR_SIZE >> 16) & 0xff;
0B85 90E67C            MOV     DPTR,#0E67CH
0B88 E4                CLR     A
0B89 F0                MOVX    @DPTR,A
  220:             XAUTODAT2 = (ATA_SECTOR_SIZE >>  8) & 0xff;
0B8A 7402              MOV     A,#02H
0B8C F0                MOVX    @DPTR,A
  221:             XAUTODAT2 = (ATA_SECTOR_SIZE >>  0) & 0xff;
0B8D E4                CLR     A
0B8E F0                MOVX    @DPTR,A
  222: 
  223:             loadEP8BC(num_bytes);
0B8F AF5E              MOV     R7,num_bytes
0B91 FE                MOV     R6,A
0B92 121799            LCALL   _loadEP8BC
  224:             status = USBS_PASSED;
0B95 C222              CLR     status
  225:          }
0B97 8005              SJMP    ?C0031?IDE
0B99         ?C0027?IDE:
  226:          else
  227:          {
  228:             failedIn();
0B99 1207F7            LCALL   failedIn
  229:             status = USBS_FAILED;
0B9C D222              SETB    status
  230:          }
0B9E         ?C0031?IDE:
  231: 
  232:          return(status);
0B9E A222              MOV     C,status
0BA0 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:
0BA1         ?C0033?IDE:
  239:       {
  240:       // relinquish control of the bulk buffer occupied by the CBW
  241:          EP2BCL = 0x80;     
0BA1 D114              ACALL   ?L?COM0007
0BA3 B50907            CJNE    A,sensePtr+01H,?C0034?IDE
LX51 LINKER/LOCATER V3.30                                                             08/23/2002  14:36:35  PAGE 13


0BA6 7407              MOV     A,#HIGH senseOk
0BA8 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);
0BAB C3                CLR     C
0BAC 22                RET     
0BAD         ?C0034?IDE:
  249:          else
  250:             return(USBS_FAILED);
0BAD D3                SETB    C
0BAE 22                RET     
  251:       }                
  252: 
  253:       case TEST_UNIT_READY:
  254:       case FORMAT_UNIT:
0BAF         ?C0037?IDE:
  255:       {
  256:       // relinquish control of the bulk buffer occupied by the CBW
  257:          EP2BCL = 0x80;     
0BAF F19C              ACALL   ?L?COM0001
0BB1 6003              JZ      ?C0038?IDE
  258:          
  259:          if (dataTransferLen)    // This command shouldn't have any data!
  260:             failedIn();         
0BB3 1207F7            LCALL   failedIn
0BB6         ?C0038?IDE:
  261:          
  262:          sensePtr = senseOk;
0BB6 D11A              ACALL   ?L?COM0008
0BB8 B50907            CJNE    A,sensePtr+01H,?C0039?IDE
0BBB 7407              MOV     A,#HIGH senseOk
0BBD B50802            CJNE    A,sensePtr,?C0039?IDE
  263:          checkForMedia(1);
  264:          
  265:          if (sensePtr == senseOk)
  266:             return(USBS_PASSED);
0BC0 C3                CLR     C
0BC1 22                RET     
0BC2         ?C0039?IDE:
  267:          else
  268:             return(USBS_FAILED);
0BC2 D3                SETB    C
0BC3 22                RET     
  269:       }                
  270:       case REQUEST_SENSE:
0BC4         ?C0041?IDE:
  271:       {
  272:          // relinquish control of the bulk buffer occupied by the CBW
  273:          EP2BCL = 0x80;     
0BC4 D169              ACALL   ?L?COM000B
  274:    
  275:          waitForInBuffer();
0BC6 F138              ACALL   waitForInBuffer
  276: 
  277:          AUTOPTRL2 = LSB(EP8FIFOBUF);
0BC8 E4                CLR     A
0BC9 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


0BCB 90E67C            MOV     DPTR,#0E67CH
0BCE 7470              MOV     A,#070H
0BD0 F0                MOVX    @DPTR,A
  281:          XAUTODAT2 = 0x00;
0BD1 E4                CLR     A
0BD2 F0                MOVX    @DPTR,A
  282:          // Clear the rest of the buffer
  283:          mymemmovexx(EP8FIFOBUF+2, EP8FIFOBUF+1, 18-2);
0BD3 7B10              MOV     R3,#010H
0BD5 FA                MOV     R2,A
0BD6 7D01              MOV     R5,#01H
0BD8 7CFC              MOV     R4,#0FCH
0BDA 7F02              MOV     R7,#02H
0BDC 7EFC              MOV     R6,#0FCH
0BDE 120758            LCALL   _mymemmovexx
  284:          XAUTODAT2 = sensePtr[0];
0BE1 F174              ACALL   ?L?COM0029
0BE3 E4                CLR     A
0BE4 93                MOVC    A,@A+DPTR
0BE5 90E67C            MOV     DPTR,#0E67CH
0BE8 F0                MOVX    @DPTR,A
  285: 
  286:          AUTOPTRL2 = 7;
0BE9 759E07            MOV     AUTOPTRL2,#07H
  287:          XAUTODAT2 = 18-8;    // Length of data following this byte
0BEC 740A              MOV     A,#0AH
0BEE F0                MOVX    @DPTR,A
  288: 
  289:          AUTOPTRL2 = 12;
0BEF 759E0C            MOV     AUTOPTRL2,#0CH
  290:          XAUTODAT2 = sensePtr[1];
0BF2 F174              ACALL   ?L?COM0029
0BF4 7401              MOV     A,#01H
0BF6 93                MOVC    A,@A+DPTR
0BF7 90E67C            MOV     DPTR,#0E67CH
0BFA F0                MOVX    @DPTR,A
  291:          XAUTODAT2 = sensePtr[2];
0BFB F174              ACALL   ?L?COM0029
0BFD 7402              MOV     A,#02H
0BFF 93                MOVC    A,@A+DPTR
0C00 90E67C            MOV     DPTR,#0E67CH
0C03 F0                MOVX    @DPTR,A
  292: 
  293:          loadEP8BC(18);
0C04 7F12              MOV     R7,#012H
0C06         
0C06 7E00              MOV     R6,#00H
  294:          sensePtr = senseOk;
  295:          return(USBS_PASSED);
0C08 A1A4              AJMP    ?C0266?IDE
  296:       }
  297:       case STOP_START_UNIT:
  298:       case PREVENT_ALLOW_MEDIUM_REMOVAL:
0C0A         ?C0043?IDE:
  299:          {
  300:          BYTE options;
  301: 
  302:          options = EP2FIFOBUF[CBW_DATA_START+4];
0C0A 90F013            MOV     DPTR,#0F013H
0C0D E0                MOVX    A,@DPTR
0C0E F55E              MOV     options,A
  303:          // relinquish control of the bulk buffer occupied by the CBW
  304:          EP2BCL = 0x80;     
0C10 F19C              ACALL   ?L?COM0001
0C12 6003              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();
0C14 1207F7            LCALL   failedIn
0C17         ?C0044?IDE:
  308:          
  309:          if (bCompactFlash)
0C17 300521            JNB     bCompactFlash,?C0045?IDE
  310:             {
  311:             if ((cmd == PREVENT_ALLOW_MEDIUM_REMOVAL && (options & 1)) ||  // media_lock
0C1A E55D              MOV     A,cmd
0C1C B41E05            CJNE    A,#01EH,?C0048?IDE
0C1F E55E              MOV     A,options
0C21 20E00D            JB      ACC.0,?C0047?IDE
0C24         ?C0048?IDE:
0C24 E55D              MOV     A,cmd
0C26 B41B10            CJNE    A,#01BH,?C0046?IDE
0C29 E55E              MOV     A,options
0C2B 5403              ANL     A,#03H
0C2D FF                MOV     R7,A
0C2E BF0208            CJNE    R7,#02H,?C0046?IDE
0C31         ?C0047?IDE:

⌨️ 快捷键说明

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