📄 mmc.lst
字号:
0BA6: MOVLB 1
0BA8: MOVF x54,W
0BAA: MULLW 3D
0BAC: MOVF FF3,W
0BAE: CLRF x5D
0BB0: MOVWF x5C
0BB2: MOVLW 29
0BB4: ADDWF x5C,W
0BB6: MOVWF 01
0BB8: MOVLW 00
0BBA: ADDWFC x5D,W
0BBC: MOVWF 03
0BBE: MOVF 01,W
0BC0: ADDLW 22
0BC2: MOVWF FE9
0BC4: MOVLW 00
0BC6: ADDWFC 03,W
0BC8: MOVWF FEA
0BCA: MOVFF 15B,FEC
0BCE: MOVF FED,F
0BD0: MOVFF 15A,FEF
.................... address=((int32)file[fnbr].this_cluster_ptr-(int32)2)*(int32)cluster_size_bytes+
.................... data_area_address;
0BD4: MOVF x54,W
0BD6: MULLW 3D
0BD8: MOVF FF3,W
0BDA: CLRF x5D
0BDC: MOVWF x5C
0BDE: MOVLW 27
0BE0: ADDWF x5C,W
0BE2: MOVWF 01
0BE4: MOVLW 00
0BE6: ADDWFC x5D,W
0BE8: MOVWF 03
0BEA: MOVF 01,W
0BEC: ADDLW 22
0BEE: MOVWF FE9
0BF0: MOVLW 00
0BF2: ADDWFC 03,W
0BF4: MOVWF FEA
0BF6: MOVFF FEC,03
0BFA: MOVF FED,F
0BFC: MOVFF FEF,15E
0C00: MOVFF 03,15F
0C04: CLRF x60
0C06: CLRF x61
0C08: MOVLW 02
0C0A: SUBWF x5E,W
0C0C: MOVWF x62
0C0E: MOVLW 00
0C10: SUBWFB 03,W
0C12: MOVWF x63
0C14: MOVLW 00
0C16: SUBWFB x60,W
0C18: MOVWF x64
0C1A: MOVLW 00
0C1C: SUBWFB x61,W
0C1E: MOVWF x65
0C20: MOVFF 06,00
0C24: MOVFF 07,01
0C28: CLRF 02
0C2A: CLRF 03
0C2C: MOVFF 03,169
0C30: MOVFF 02,168
0C34: MOVFF 07,167
0C38: MOVFF 06,166
0C3C: MOVFF FEA,16B
0C40: MOVFF FE9,16A
0C44: MOVWF x6F
0C46: MOVFF 164,16E
0C4A: MOVFF 163,16D
0C4E: MOVFF 162,16C
0C52: MOVFF 03,173
0C56: MOVFF 02,172
0C5A: MOVFF 07,171
0C5E: MOVFF 06,170
0C62: MOVLB 0
0C64: CALL 03E8
0C68: MOVFF 16B,FEA
0C6C: MOVFF 16A,FE9
0C70: MOVF 14,W
0C72: MOVLB 1
0C74: ADDWF 00,W
0C76: MOVWF x56
0C78: MOVF 15,W
0C7A: ADDWFC 01,W
0C7C: MOVWF x57
0C7E: MOVF 16,W
0C80: ADDWFC 02,W
0C82: MOVWF x58
0C84: MOVF 17,W
0C86: ADDWFC 03,W
0C88: MOVWF x59
....................
.................... }
....................
.................... // printf("clust addr call fnbr=%u blk_size=%lu",fnbr,file[fnbr].rec_size);
....................
.................... if(set_BLOCKLEN(file[fnbr].rec_size)==false) return(37); /// reset to original rec_size
0C8A: MOVF x54,W
0C8C: MULLW 3D
0C8E: MOVF FF3,W
0C90: CLRF x5D
0C92: MOVWF x5C
0C94: MOVLW 3B
0C96: ADDWF x5C,W
0C98: MOVWF 01
0C9A: MOVLW 00
0C9C: ADDWFC x5D,W
0C9E: MOVWF 03
0CA0: MOVF 01,W
0CA2: ADDLW 22
0CA4: MOVWF FE9
0CA6: MOVLW 00
0CA8: ADDWFC 03,W
0CAA: MOVWF FEA
0CAC: MOVFF FEC,15F
0CB0: MOVF FED,F
0CB2: MOVFF FEF,15E
0CB6: CLRF x63
0CB8: CLRF x62
0CBA: MOVFF 15F,161
0CBE: MOVFF 15E,160
0CC2: MOVLB 0
0CC4: CALL 02A6
0CC8: MOVF 01,F
0CCA: BNZ 0CD8
0CCC: MOVLW 25
0CCE: MOVWF 00
0CD0: CLRF 01
0CD2: CLRF 02
0CD4: CLRF 03
0CD6: BRA 0CE8
....................
.................... #IF MMC_CLUSTER_TRACE // if true prints to serial port
.................... printf("\n\r cluster addr>> next_cluster_ptr*= %lu this_cluster*=%lu \r\n",file[fnbr].next_cluster_ptr,file[fnbr].this_cluster_ptr);
.................... #ENDIF return(address);
0CD8: MOVFF 156,00
0CDC: MOVFF 157,01
0CE0: MOVFF 158,02
0CE4: MOVFF 159,03
.................... }
0CE8: RETLW 00
....................
....................
.................... ///////////////////////////////////////////////////////////////////////////////////
.................... ///////////////////////// OPEN FILE ///////////////////////////////////////////
.................... ///////////////////////////////////////////////////////////////////////////////////
.................... #separate
.................... int open_file(int fnbr,char *fname,int16 rec_length){
.................... int32 dir_addr_ptr;
.................... int16 bytes_read;
.................... int i,ptr1,ptr2,lnf_tiles,j;
.................... char file_name[12];
.................... int attribute,directory,archive;
.................... char tmp;
.................... char buff[32]; //// buffer for 32 byte tiles
....................
.................... int level; /// level in the directory structure 0 is top
.................... /////// directory is searched and if file is found
....................
.................... //////
.................... ////// init_MMC(tries) must be called first
.................... ////// uses globals root_dir_address
....................
.................... //start by searching the root directory for folder or file
....................
.................... /// assign an inital next_cluster_ptr in the root directory
.................... file[fnbr].next_cluster_ptr=0;
*
0D88: MOVLB 1
0D8A: MOVF x0F,W
0D8C: MULLW 3D
0D8E: MOVF FF3,W
0D90: CLRF x51
0D92: MOVWF x50
0D94: MOVLW 29
0D96: ADDWF x50,W
0D98: MOVWF 01
0D9A: MOVLW 00
0D9C: ADDWFC x51,W
0D9E: MOVWF 03
0DA0: MOVF 01,W
0DA2: ADDLW 22
0DA4: MOVWF FE9
0DA6: MOVLW 00
0DA8: ADDWFC 03,W
0DAA: MOVWF FEA
0DAC: CLRF FEC
0DAE: MOVF FED,F
0DB0: CLRF FEF
.................... file[fnbr].this_cluster_ptr=0;
0DB2: MOVF x0F,W
0DB4: MULLW 3D
0DB6: MOVF FF3,W
0DB8: CLRF x51
0DBA: MOVWF x50
0DBC: MOVLW 27
0DBE: ADDWF x50,W
0DC0: MOVWF 01
0DC2: MOVLW 00
0DC4: ADDWFC x51,W
0DC6: MOVWF 03
0DC8: MOVF 01,W
0DCA: ADDLW 22
0DCC: MOVWF FE9
0DCE: MOVLW 00
0DD0: ADDWFC 03,W
0DD2: MOVWF FEA
0DD4: CLRF FEC
0DD6: MOVF FED,F
0DD8: CLRF FEF
....................
.................... dir_addr_ptr=root_dir_address;
0DDA: MOVFF 13,117
0DDE: MOVFF 12,116
0DE2: MOVFF 11,115
0DE6: MOVFF 10,114
.................... file_name[11]=0;
0DEA: CLRF x2A
.................... level=0;
0DEC: CLRF x4F
.................... ptr1=0;
0DEE: CLRF x1B
.................... ptr2=0;
0DF0: CLRF x1C
.................... bytes_read=0; //// byte read so far in this cluster
0DF2: CLRF x19
0DF4: CLRF x18
....................
.................... read_directory:
.................... /// extract the directory levels(folders)
.................... while ((fname[ptr2]!='/') && (fname[ptr2]!='\\') && (fname[ptr2]!='\0') && (fname[ptr2]!='.') ){
0DF6: CLRF 03
0DF8: MOVF x1C,W
0DFA: ADDWF x10,W
0DFC: MOVWF FE9
0DFE: MOVF x11,W
0E00: ADDWFC 03,W
0E02: MOVWF FEA
0E04: MOVF FEF,W
0E06: SUBLW 2F
0E08: BZ 0E56
0E0A: CLRF 03
0E0C: MOVF x1C,W
0E0E: ADDWF x10,W
0E10: MOVWF FE9
0E12: MOVF x11,W
0E14: ADDWFC 03,W
0E16: MOVWF FEA
0E18: MOVF FEF,W
0E1A: SUBLW 5C
0E1C: BZ 0E56
0E1E: CLRF 03
0E20: MOVF x1C,W
0E22: ADDWF x10,W
0E24: MOVWF FE9
0E26: MOVF x11,W
0E28: ADDWFC 03,W
0E2A: MOVWF FEA
0E2C: MOVF FEF,F
0E2E: BZ 0E56
0E30: CLRF 03
0E32: MOVF x1C,W
0E34: ADDWF x10,W
0E36: MOVWF FE9
0E38: MOVF x11,W
0E3A: ADDWFC 03,W
0E3C: MOVWF FEA
0E3E: MOVF FEF,W
0E40: SUBLW 2E
0E42: BZ 0E56
.................... // a dos directory (folder) name can not exceed 8 chars
.................... if ((ptr2-ptr1)>7) return (20);
0E44: MOVF x1B,W
0E46: SUBWF x1C,W
0E48: SUBLW 07
0E4A: BC 0E52
0E4C: MOVLW 14
0E4E: MOVWF 01
0E50: BRA 13BE
.................... ptr2++;
0E52: INCF x1C,F
.................... }
.................... #IF MMC_OPEN_TRACE
0E54: BRA 0DF6
.................... printf("\n\r fopen ptr1=%u ptr2=%u ",ptr1,ptr2);
.................... #ENDIF
....................
.................... if (ptr2==0){ ptr2=1;ptr1=1;goto read_directory;} /// skip a leading '/' or '\'
0E56: MOVF x1C,F
0E58: BNZ 0E62
0E5A: MOVLW 01
0E5C: MOVWF x1C
0E5E: MOVWF x1B
0E60: BRA 0DF6
.................... if ((ptr2-ptr1)==0) return (21);
0E62: MOVF x1B,W
0E64: SUBWF x1C,W
0E66: BNZ 0E6E
0E68: MOVLW 15
0E6A: MOVWF 01
0E6C: BRA 13BE
....................
.................... // ptr1 is the chars processed so far
.................... // ptr2 is the position of '/' or '\' or '.' or '\0'
.................... // prepare the file or directory name fomat is cccccccceee
.................... // c is a valid letter or blank eee is extension or blank
.................... // a directory name is 'cccccccc ' a file 'cccccccceee' always 11 chars
.................... for(i=0;i<11;i++)file_name[i]=32;//blank
0E6E: CLRF x1A
0E70: MOVF x1A,W
0E72: SUBLW 0A
0E74: BNC 0E8C
0E76: CLRF 03
0E78: MOVF x1A,W
0E7A: ADDLW 1F
0E7C: MOVWF FE9
0E7E: MOVLW 01
0E80: ADDWFC 03,W
0E82: MOVWF FEA
0E84: MOVLW 20
0E86: MOVWF FEF
0E88: INCF x1A,F
0E8A: BRA 0E70
.................... file_name[11]=0;
0E8C: CLRF x2A
.................... i=0;
0E8E: CLRF x1A
.................... while(ptr1<ptr2){
0E90: MOVF x1C,W
0E92: SUBWF x1B,W
0E94: BC 0ED6
.................... // extract the name
....................
.................... tmp=fname[ptr1];
0E96: CLRF 03
0E98: MOVF x1B,W
0E9A: ADDWF x10,W
0E9C: MOVWF FE9
0E9E: MOVF x11,W
0EA0: ADDWFC 03,W
0EA2: MOVWF FEA
0EA4: MOVFF FEF,12E
.................... tmp=TOUPPER(tmp);
0EA8: MOVF x2E,W
0EAA: SUBLW 60
0EAC: BC 0EBA
0EAE: MOVF x2E,W
0EB0: SUBLW 7A
0EB2: BNC 0EBA
0EB4: MOVF x2E,W
0EB6: ANDLW DF
0EB8: BRA 0EBC
0EBA: MOVF x2E,W
0EBC: MOVWF x2E
.................... file_name[i]=tmp;
0EBE: CLRF 03
0EC0: MOVF x1A,W
0EC2: ADDLW 1F
0EC4: MOVWF FE9
0EC6: MOVLW 01
0EC8: ADDWFC 03,W
0ECA: MOVWF FEA
0ECC: MOVFF 12E,FEF
.................... ptr1++;i++;
0ED0: INCF x1B,F
0ED2: INCF x1A,F
.................... }
0ED4: BRA 0E90
.................... if(fname[ptr2]=='.'){
0ED6: CLRF 03
0ED8: MOVF x1C,W
0EDA: ADDWF x10,W
0EDC: MOVWF FE9
0EDE: MOVF x11,W
0EE0: ADDWFC 03,W
0EE2: MOVWF FEA
0EE4: MOVF FEF,W
0EE6: SUBLW 2E
0EE8: BNZ 0F42
.................... // extract the extension
.................... i=8;
0EEA: MOVLW 08
0EEC: MOVWF x1A
.................... while((fname[ptr1]!='\0') && (i<12)){
0EEE: CLRF 03
0EF0: MOVF x1B,W
0EF2: ADDWF x10,W
0EF4: MOVWF FE9
0EF6: MOVF x11,W
0EF8: ADDWFC 03,W
0EFA: MOVWF FEA
0EFC: MOVF FEF,F
0EFE: BZ 0F42
0F00: MOVF x1A,W
0F02: SUBLW 0B
0F04: BNC 0F42
.................... ptr1++;
0F06: INCF x1B,F
.................... tmp=fname[ptr1];
0F08: CLRF 03
0F0A: MOVF x1B,W
0F0C: ADDWF x10,W
0F0E: MOVWF FE9
0F10: MOVF x11,W
0F12: ADDWFC 03,W
0F14: MOVWF FEA
0F16: MOVFF FEF,12E
.................... file_name[i]=TOUPPER(tmp);
0F1A: CLRF 03
0F1C: MOVF x1A,W
0F1E: ADDLW 1F
0F20: MOVWF FE9
0F22: MOVLW 01
0F24: ADDWFC 03,W
0F26: MOVW
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -