📄 f34x_msd_cmd.src
字号:
; SOURCE LINE # 83
MOV R1,A
MOV DPTR,#Token
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; Sect_Print();
; SOURCE LINE # 84
LCALL Sect_Print
; printf("MMC Shell version 1.0" ENDLINE);
; SOURCE LINE # 85
MOV R3,#0FFH
MOV R2,#HIGH (?SC_0)
MOV R1,#LOW (?SC_0)
LCALL _printf
; write_current_dir();
; SOURCE LINE # 86
LCALL write_current_dir
; putchar(PROMPT);
; SOURCE LINE # 87
MOV R7,#03EH
LJMP _putchar
; END OF Cmd_Init
; }
;
; //----------------------------------------------------------------------------
; // Cmd_Match
; //----------------------------------------------------------------------------
; //
; // This function checks the syntax of command and converts all leters to
; // lowercase if it's uppercase.
; //
; // Parameters : str - command string
; // Return Value : TRUE if command string and received string are similar
; //----------------------------------------------------------------------------
;
; BYTE Cmd_Match(char* str)
RSEG ?PR?_Cmd_Match?F34X_MSD_CMD
_Cmd_Match:
USING 0
; SOURCE LINE # 101
MOV DPTR,#str?140
LCALL L?0086
; {
; SOURCE LINE # 102
; xdata char* xdata s=Token;
; SOURCE LINE # 103
MOV DPTR,#Token
LCALL L?0097
MOV DPTR,#s?141
XCH A,R1
LCALL L?0087
; for(;*s;s++) *s=tolower(*s);
; SOURCE LINE # 104
?C0002:
MOV DPTR,#s?141
LCALL L?0082
LCALL ?C?CLDPTR
MOV R7,A
JZ ?C0003
LCALL _tolower
MOV DPTR,#s?141
LCALL L?0082
MOV A,R7
LCALL ?C?CSTPTR
MOV DPTR,#s?141+01H
CLR A
MOV B,#01H
LCALL ?C?IILDX
SJMP ?C0002
?C0003:
; return !strncmp(Token,str,MAX_LEN);
; SOURCE LINE # 105
MOV DPTR,#str?140
LCALL L?0097
MOV DPTR,#?_strncmp?BYTE+03H
XCH A,R1
LCALL L?0087
INC DPTR
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,#020H
MOVX @DPTR,A
MOV DPTR,#Token
LCALL L?0082
LCALL _strncmp
MOV A,R7
JNZ ?C0005
MOV R7,#01H
SJMP ?C0006
?C0005:
MOV R7,#00H
?C0006:
; }
; SOURCE LINE # 106
?C0007:
RET
; END OF _Cmd_Match
;
; //----------------------------------------------------------------------------
; // Cmd_Dir
; //----------------------------------------------------------------------------
; //
; // Function sends list of all directories and files in actual directory.
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Cmd_Dir(void)
RSEG ?PR?Cmd_Dir?F34X_MSD_CMD
Cmd_Dir:
USING 0
; SOURCE LINE # 118
; {
; SOURCE LINE # 119
; xdata BYTE i;
; find_info xdata findinfo;
; if(!findfirst(&findinfo,0)) {
; SOURCE LINE # 122
MOV R3,#01H
MOV R2,#HIGH (findinfo?243)
MOV R1,#LOW (findinfo?243)
CLR A
MOV R5,A
LCALL _findfirst
MOV A,R7
JNZ ?C0012
; printf("."ENDLINE);
; SOURCE LINE # 123
MOV R3,#0FFH
MOV R2,#HIGH (?SC_24)
MOV R1,#LOW (?SC_24)
LJMP _printf
; return;
; }
; SOURCE LINE # 125
?C0012:
; do {
; SOURCE LINE # 126
; for(i=0;i<8;i++) {
; SOURCE LINE # 127
CLR A
MOV DPTR,#i?242
MOVX @DPTR,A
?C0013:
MOV DPTR,#i?242
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#08H
JNC ?C0014
; putchar(tolower(findinfo.direntry->sfn.name[i]));
; SOURCE LINE # 128
LCALL L?0080
; }
; SOURCE LINE # 129
LCALL L?0092
SJMP ?C0013
?C0014:
; if(findinfo.direntry->sfn.name[i]>' ')
; SOURCE LINE # 130
LCALL L?0080
MOV DPTR,#i?242
MOVX A,@DPTR
MOV DPL,A
MOV DPH,#00H
LCALL ?C?CLDOPTR
SETB C
XRL A,#080H
SUBB A,#0A0H
JC ?C0016
; putchar('.');
; SOURCE LINE # 131
MOV R7,#02EH
LCALL _putchar
?C0016:
; for(i=8;i<11;i++) {
; SOURCE LINE # 132
MOV DPTR,#i?242
MOV A,#08H
MOVX @DPTR,A
?C0017:
MOV DPTR,#i?242
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#0BH
JNC ?C0018
; putchar(tolower(findinfo.direntry->sfn.name[i]));
; SOURCE LINE # 133
LCALL L?0081
; }
; SOURCE LINE # 134
LCALL L?0092
SJMP ?C0017
?C0018:
;
; if(!(findinfo.direntry->sfn.attrib & (ATTRIB_LABEL|ATTRIB_SUBDIR))) {
; SOURCE LINE # 136
LCALL L?0081
LCALL L?0101
ANL A,#018H
JNZ ?C0020
; printf("\t%lu bytes",ntohl(findinfo.direntry->sfn.filesize));
; SOURCE LINE # 137
MOV DPTR,#01CH
LCALL ?C?LLDOPTR
LCALL _htonl
LCALL L?0103
MOV R3,#0FFH
MOV R2,#HIGH (?SC_28)
MOV R1,#LOW (?SC_28)
LCALL _printf
; }
; SOURCE LINE # 138
?C0020:
;
; if(findinfo.direntry->sfn.attrib & ATTRIB_LABEL)
; SOURCE LINE # 140
LCALL L?0081
LCALL L?0101
JNB ACC.3,?C0021
; printf("\t<LABEL>");
; SOURCE LINE # 141
MOV R3,#0FFH
MOV R2,#HIGH (?SC_39)
MOV R1,#LOW (?SC_39)
LCALL _printf
?C0021:
; if(findinfo.direntry->sfn.attrib & ATTRIB_SUBDIR)
; SOURCE LINE # 142
LCALL L?0081
LCALL L?0102
JNB ACC.4,?C0022
; printf("\t<DIR>");
; SOURCE LINE # 143
MOV R3,#0FFH
MOV R2,#HIGH (?SC_48)
MOV R1,#LOW (?SC_48)
LCALL _printf
?C0022:
; printf(ENDLINE);
; SOURCE LINE # 144
LCALL L?0094
LCALL _printf
;
; } while(findnext(&findinfo));
; SOURCE LINE # 146
MOV R3,#01H
MOV R2,#HIGH (findinfo?243)
MOV R1,#LOW (findinfo?243)
LCALL _findnext
MOV A,R7
JZ $ + 5H
LJMP ?C0012
; }
; SOURCE LINE # 147
?C0009:
RET
L?0092:
MOV DPL,R7
MOV DPH,#00H
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _tolower
LCALL _putchar
MOV DPTR,#i?242
MOVX A,@DPTR
INC A
MOVX @DPTR,A
RET
; END OF Cmd_Dir
;
; //----------------------------------------------------------------------------
; // Cmd_Type
; //----------------------------------------------------------------------------
; //
; // This function sends via UART the content of file which is defiened with
; // "type" command.
; //
; // Parameters : filename - pointer to file name
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Cmd_Type(char* filename)
RSEG ?PR?_Cmd_Type?F34X_MSD_CMD
_Cmd_Type:
USING 0
; SOURCE LINE # 160
MOV DPTR,#filename?344
LCALL L?0086
; {
; SOURCE LINE # 161
; FILE xdata f;unsigned xdata bytesread,i;
;
; if(!fopen(&f,filename,"r")) {
; SOURCE LINE # 164
MOV DPTR,#filename?344
LCALL L?0098
MOV DPTR,#?_fopen?BYTE+03H
XCH A,R1
LCALL L?0087
INC DPTR
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (?SC_58)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (?SC_58)
LCALL L?0099
LCALL _fopen
MOV A,R7
ORL A,R6
JNZ ?C0025
; printf("File not found"ENDLINE);
; SOURCE LINE # 165
MOV R3,#0FFH
MOV R2,#HIGH (?SC_60)
MOV R1,#LOW (?SC_60)
SJMP ?C0073
; return;
; }
; SOURCE LINE # 167
?C0025:
;
; while(bytesread=fread(&f,Scratch,Sect_Block_Size())) {
; SOURCE LINE # 169
MOV DPTR,#?_fread?BYTE+03H
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (Scratch)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (Scratch)
MOVX @DPTR,A
INC DPTR
MOV A,#02H
MOVX @DPTR,A
INC DPTR
CLR A
LCALL L?0099
LCALL _fread
MOV DPTR,#bytesread?346
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
ORL A,R6
JZ ?C0026
; if(key_available()) {
; SOURCE LINE # 170
LCALL key_available
MOV A,R7
JNZ ?C0026
; break;
; SOURCE LINE # 171
; }
; SOURCE LINE # 172
?C0027:
; for(i=0;i<bytesread;i++) {
; SOURCE LINE # 173
CLR A
MOV DPTR,#i?347
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0028:
MOV DPTR,#bytesread?346
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0025
; putchar(Scratch[i]);
; SOURCE LINE # 174
MOV A,#LOW (Scratch)
ADD A,R5
MOV DPL,A
MOV A,#HIGH (Scratch)
ADDC A,R4
MOV DPH,A
MOVX A,@DPTR
MOV R7,A
LCALL _putchar
; }
; SOURCE LINE # 175
MOV DPTR,#i?347+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0028
MOV DPTR,#i?347
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0071:
SJMP ?C0028
; }
; SOURCE LINE # 176
?C0026:
;
; fclose(&f);
; SOURCE LINE # 178
LCALL L?0100
LCALL _fclose
;
;
; printf(ENDLINE);
; SOURCE LINE # 181
LCALL L?0094
?C0073:
LCALL _printf
; }
; SOURCE LINE # 182
?C0024:
RET
; END OF _Cmd_Type
;
; //----------------------------------------------------------------------------
; // Cmd_Help
; //----------------------------------------------------------------------------
; //
; // Function sends via UART the list of known commands. This list contains all
; // commands allowed for normal user. List is printing when system doesn't
; // recognize the last sent command.
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Cmd_Help(void)
RSEG ?PR?Cmd_Help?F34X_MSD_CMD
Cmd_Help:
USING 0
; SOURCE LINE # 196
; {
; SOURCE LINE # 197
; printf("calibrate VALUE"ENDLINE"cd"ENDLINE"chkdsk"ENDLINE"cls"ENDLINE"del FILE"ENDLINE"dir"
; SOURCE LINE # 198
MOV R3,#0FFH
MOV R2,#HIGH (?SC_77)
MOV R1,#LOW (?SC_77)
LJMP _printf
; END OF Cmd_Help
; ENDLINE"format"ENDLINE"log FILE"ENDLINE"md"ENDLINE"rd"
; ENDLINE"s NNNNN"ENDLINE"templog FILE"ENDLINE"type FILE"ENDLINE);
; }
;
; //----------------------------------------------------------------------------
; // Cmd_Exec
; //----------------------------------------------------------------------------
; //
; // This function is used to executing commands. It recognizes the command and
; // prepares reaction, answer.
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Cmd_Exec()
RSEG ?PR?Cmd_Exec?F34X_MSD_CMD
Cmd_Exec:
USING 0
; SOURCE LINE # 214
; {
; SOURCE LINE # 215
; int xdata i;BYTE xdata j;char xdata ch;DWORD xdata dw;
;
; Token = Str_Token(Cmd);
; SOURCE LINE # 218
MOV R3,#01H
MOV R2,#HIGH (Cmd)
MOV R1,#LOW (Cmd)
LCALL _Str_Token
LCALL L?0084
;
; if(!Token)
; SOURCE LINE # 220
ORL A,R2
ORL A,R3
JNZ $ + 5H
LJMP ?C0033
?C0032:
; return;
;
; printf(ENDLINE);
; SOURCE LINE # 223
LCALL L?0095
LCALL _printf
;
;
; if(n_of_sect == 0)
; SOURCE LINE # 226
MOV DPTR,#n_of_sect
LCALL L?0090
MOV A,R4
ORL A,R5
ORL A,R6
ORL A,R7
JNZ ?C0034
; n_of_sect = ntohl(bootrecord->total_sectors);
; SOURCE LINE # 227
INC DPTR
LCALL L?0082
MOV DPTR,#020H
LCALL ?C?LLDOPTR
LCALL _htonl
MOV DPTR,#n_of_sect
LCALL ?C?LSTXDATA
?C0034:
;
; if(format_flag == 1)
; SOURCE LINE # 229
MOV DPTR,#format_flag
MOVX A,@DPTR
XRL A,#01H
JNZ ?C0035
; {
; SOURCE LINE # 230
; if(Cmd_Match("y"))
; SOURCE LINE # 231
MOV R2,#HIGH (?SC_187)
MOV R1,#LOW (?SC_187)
LCALL L?0091
JZ ?C0036
; {
; SOURCE LINE # 232
; format_flag = 0;
; SOURCE LINE # 233
CLR A
MOV DPTR,#format_flag
MOVX @DPTR,A
; Format_Disk();
; SOURCE LINE # 234
LJMP Format_Disk
; return;
; }
; SOURCE LINE # 236
?C0036:
; if(Cmd_Match("n"))
; SOURCE LINE # 237
MOV R2,#HIGH (?SC_189)
MOV R1,#LOW (?SC_189)
LCALL L?0091
JZ ?C0037
; format_flag = 0;
; SOURCE LINE # 238
CLR A
MOV DPTR,#format_flag
MOVX @DPTR,A
RET
?C0037:
; else
; printf("Are you sure (y/n)?"ENDLINE);
; SOURCE LINE # 240
MOV R3,#0FFH
MOV R2,#HIGH (?SC_191)
MOV R1,#LOW (?SC_191)
LJMP ?C0077
; return;
; }
; SOURCE LINE # 242
?C0035:
; if(Cmd_Match("cls")) {
; SOURCE LINE # 243
MOV R2,#HIGH (?SC_213)
MOV R1,#LOW (?SC_213)
LCALL L?0093
JZ ?C0039
; putchar(CLS);
; SOURCE LINE # 244
MOV R7,#0CH
LJMP _putchar
; return;
; }
; SOURCE LINE # 246
?C0039:
;
; if(Cmd_Match("del")) {
; SOURCE LINE # 248
MOV R2,#HIGH (?SC_217)
MOV R1,#LOW (?SC_217)
LCALL L?0093
JZ ?C0040
; Token = Str_Token(0);
; SOURCE LINE # 249
LCALL L?0083
; if(Token) {
; SOURCE LINE # 250
ORL A,R2
ORL A,R3
JZ ?C0041
; if(!fdelete(Token))
; SOURCE LINE # 251
MOV DPTR,#Token
LCALL L?0082
LCALL _fdelete
MOV A,R7
ORL A,R6
JZ $ + 5H
LJMP ?C0033
; printf("File not found"ENDLINE);
; SOURCE LINE # 252
MOV R3,#0FFH
MOV R2,#HIGH (?SC_60)
MOV R1,#LOW (?SC_60)
?C0074:
; } else {
; SOURCE LINE # 253
LJMP ?C0077
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -