📄 mmc.lst
字号:
....................
.................... }
.................... }
.................... else printf("\n\r read_BLOCK failed");
....................
.................... }
....................
....................
.................... #separate
.................... int32 cluster_addr(int fnbr,int mode){
.................... int32 address;
.................... char buff[2]; //// buffer for 2 byte ptrs
.................... ///// returns the physical address in the data area of the data pointed to by either the
.................... ///// root cluster or the next cluster in the chain
.................... /////
.................... ///// if ROOT_CLUSTER is called then this routine returns the address of the first cluster
.................... ///// and assigns this_cluster_ptr and next_cluster_ptr
.................... /////
.................... ///// if NEXT_CLUSTER is called then this routine returns the address of the next cluster
.................... ///// using the existing next_cluster ptr number
.................... ///// and moves the existing next_cluster ptr number into this_cluster
.................... ///// and assigns the new next cluster ptr number (FFFF) if at the end of chain
.................... ///// if NEXT_CLUSTER is called and the next_cluster_ptr number is FFFF
.................... ///// an address of FFFFFFFF is returned
....................
.................... ///// uses the globals cluster_size_bytes,data_area_address
.................... //// file struct has the base=root cluster ptr, current=this cluster ptr ,next =cluster chain ptr
....................
.................... //// !!!! a call with NEXT_cluster must have a valid next_cluster_ptr value
.................... //// !!!! a call to THIS CLUSTER must have a valid this_cluster_ptr
....................
.................... //// !!!! Fopen logic considers the cluster prt in the directory tile
.................... //// to be a next=next_cluster_ptr so NEXT_CLUSTER is used to calc the physical address
.................... //// of the first root cluster this also assigns the current=this_cluster_ptr
.................... /// and fetches the next cluster prt
.................... ////
.................... #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
.................... if (mode==NEXT_CLUSTER){
0878: MOVLB 1
087A: DECFSZ x55,W
087C: BRA 0A9E
.................... ///access the next cluster in the chain
.................... /// requires a valid this_cluster_ptr number and a valid next_cluster_ptr number
....................
.................... if(file[fnbr].next_cluster_ptr==0xFFFF){
087E: MOVF x54,W
0880: MULLW 3D
0882: MOVF FF3,W
0884: CLRF x5D
0886: MOVWF x5C
0888: MOVLW 29
088A: ADDWF x5C,W
088C: MOVWF 01
088E: MOVLW 00
0890: ADDWFC x5D,W
0892: MOVWF 03
0894: MOVF 01,W
0896: ADDLW 22
0898: MOVWF FE9
089A: MOVLW 00
089C: ADDWFC 03,W
089E: MOVWF FEA
08A0: MOVFF FEC,15F
08A4: MOVF FED,F
08A6: MOVFF FEF,15E
08AA: INCFSZ x5E,W
08AC: BRA 08BE
08AE: INCFSZ x5F,W
08B0: BRA 08BE
.................... #IF MMC_CLUSTER_TRACE // if true prints to serial port
.................... printf("last cluster");
.................... #ENDIF
.................... address=0XFFFFFFFF;
08B2: MOVLW FF
08B4: MOVWF x59
08B6: MOVWF x58
08B8: MOVWF x57
08BA: MOVWF x56
.................... }
.................... else{
08BC: BRA 0A9E
.................... if(set_BLOCKLEN((int32)2)==false) return(35); /// set up to read 2 bytes
08BE: CLRF x63
08C0: CLRF x62
08C2: CLRF x61
08C4: MOVLW 02
08C6: MOVWF x60
08C8: MOVLB 0
08CA: RCALL 02A6
08CC: MOVF 01,F
08CE: BNZ 08DC
08D0: MOVLW 23
08D2: MOVWF 00
08D4: CLRF 01
08D6: CLRF 02
08D8: CLRF 03
08DA: BRA 0CE8
.................... if(read_BLOCK(fat1_address+(file[fnbr].next_cluster_ptr)*2,buff)==false) return(33);
08DC: MOVLB 1
08DE: MOVF x54,W
08E0: MULLW 3D
08E2: MOVF FF3,W
08E4: CLRF x5D
08E6: MOVWF x5C
08E8: MOVLW 29
08EA: ADDWF x5C,W
08EC: MOVWF 01
08EE: MOVLW 00
08F0: ADDWFC x5D,W
08F2: MOVWF 03
08F4: MOVF 01,W
08F6: ADDLW 22
08F8: MOVWF FE9
08FA: MOVLW 00
08FC: ADDWFC 03,W
08FE: MOVWF FEA
0900: MOVFF FEC,15F
0904: MOVF FED,F
0906: MOVFF FEF,15E
090A: BCF FD8.0
090C: RLCF x5E,W
090E: MOVWF 02
0910: RLCF x5F,W
0912: MOVWF 03
0914: MOVF 02,W
0916: ADDWF 08,W
0918: MOVWF x60
091A: MOVF 03,W
091C: ADDWFC 09,W
091E: MOVWF x61
0920: MOVLW 00
0922: ADDWFC 0A,W
0924: MOVWF x62
0926: MOVLW 00
0928: ADDWFC 0B,W
092A: MOVWF x63
092C: MOVWF x67
092E: MOVFF 162,166
0932: MOVFF 161,165
0936: MOVFF 160,164
093A: MOVLW 01
093C: MOVWF x69
093E: MOVLW 5A
0940: MOVWF x68
0942: MOVLB 0
0944: RCALL 02FC
0946: MOVF 01,F
0948: BNZ 0956
094A: MOVLW 21
094C: MOVWF 00
094E: CLRF 01
0950: CLRF 02
0952: CLRF 03
0954: BRA 0CE8
.................... file[fnbr].this_cluster_ptr=file[fnbr].next_cluster_ptr; // update current with prev next in chain
0956: MOVLB 1
0958: MOVF x54,W
095A: MULLW 3D
095C: MOVF FF3,W
095E: CLRF x5D
0960: MOVWF x5C
0962: MOVLW 27
0964: ADDWF x5C,W
0966: MOVWF 01
0968: MOVLW 00
096A: ADDWFC x5D,W
096C: MOVWF 03
096E: MOVF 01,W
0970: ADDLW 22
0972: MOVWF 01
0974: MOVLW 00
0976: ADDWFC 03,F
0978: MOVFF 01,15E
097C: MOVFF 03,15F
0980: MOVF x54,W
0982: MULLW 3D
0984: MOVF FF3,W
0986: CLRF x61
0988: MOVWF x60
098A: MOVLW 29
098C: ADDWF x60,W
098E: MOVWF 01
0990: MOVLW 00
0992: ADDWFC x61,W
0994: MOVWF 03
0996: MOVF 01,W
0998: ADDLW 22
099A: MOVWF FE9
099C: MOVLW 00
099E: ADDWFC 03,W
09A0: MOVWF FEA
09A2: MOVFF FEC,03
09A6: MOVF FED,F
09A8: MOVFF FEF,162
09AC: MOVFF 15F,FEA
09B0: MOVFF 15E,FE9
09B4: MOVFF 03,FEC
09B8: MOVF FED,F
09BA: MOVFF 162,FEF
.................... file[fnbr].next_cluster_ptr=make16(buff[1],buff[0]); /// update next in chain
09BE: MOVF x54,W
09C0: MULLW 3D
09C2: MOVF FF3,W
09C4: CLRF x5D
09C6: MOVWF x5C
09C8: MOVLW 29
09CA: ADDWF x5C,W
09CC: MOVWF 01
09CE: MOVLW 00
09D0: ADDWFC x5D,W
09D2: MOVWF 03
09D4: MOVF 01,W
09D6: ADDLW 22
09D8: MOVWF FE9
09DA: MOVLW 00
09DC: ADDWFC 03,W
09DE: MOVWF FEA
09E0: MOVFF 15B,FEC
09E4: MOVF FED,F
09E6: MOVFF 15A,FEF
....................
.................... address=((int32)file[fnbr].this_cluster_ptr-(int32)2)*(int32)cluster_size_bytes+
.................... data_area_address;
09EA: MOVF x54,W
09EC: MULLW 3D
09EE: MOVF FF3,W
09F0: CLRF x5D
09F2: MOVWF x5C
09F4: MOVLW 27
09F6: ADDWF x5C,W
09F8: MOVWF 01
09FA: MOVLW 00
09FC: ADDWFC x5D,W
09FE: MOVWF 03
0A00: MOVF 01,W
0A02: ADDLW 22
0A04: MOVWF FE9
0A06: MOVLW 00
0A08: ADDWFC 03,W
0A0A: MOVWF FEA
0A0C: MOVFF FEC,03
0A10: MOVF FED,F
0A12: MOVFF FEF,15E
0A16: MOVFF 03,15F
0A1A: CLRF x60
0A1C: CLRF x61
0A1E: MOVLW 02
0A20: SUBWF x5E,W
0A22: MOVWF x62
0A24: MOVLW 00
0A26: SUBWFB 03,W
0A28: MOVWF x63
0A2A: MOVLW 00
0A2C: SUBWFB x60,W
0A2E: MOVWF x64
0A30: MOVLW 00
0A32: SUBWFB x61,W
0A34: MOVWF x65
0A36: MOVFF 06,00
0A3A: MOVFF 07,01
0A3E: CLRF 02
0A40: CLRF 03
0A42: MOVFF 03,169
0A46: MOVFF 02,168
0A4A: MOVFF 07,167
0A4E: MOVFF 06,166
0A52: MOVFF FEA,16B
0A56: MOVFF FE9,16A
0A5A: MOVWF x6F
0A5C: MOVFF 164,16E
0A60: MOVFF 163,16D
0A64: MOVFF 162,16C
0A68: MOVFF 03,173
0A6C: MOVFF 02,172
0A70: MOVFF 07,171
0A74: MOVFF 06,170
0A78: MOVLB 0
0A7A: RCALL 03E8
0A7C: MOVFF 16B,FEA
0A80: MOVFF 16A,FE9
0A84: MOVF 14,W
0A86: MOVLB 1
0A88: ADDWF 00,W
0A8A: MOVWF x56
0A8C: MOVF 15,W
0A8E: ADDWFC 01,W
0A90: MOVWF x57
0A92: MOVF 16,W
0A94: ADDWFC 02,W
0A96: MOVWF x58
0A98: MOVF 17,W
0A9A: ADDWFC 03,W
0A9C: MOVWF x59
....................
.................... }
.................... }
.................... if (mode==ROOT_CLUSTER){
0A9E: MOVF x55,F
0AA0: BTFSS FD8.2
0AA2: BRA 0C8A
.................... //// root_cluster_ptr was assigned from the file tile in fopen
.................... file[fnbr].this_cluster_ptr=file[fnbr].root_cluster_ptr;
0AA4: MOVF x54,W
0AA6: MULLW 3D
0AA8: MOVF FF3,W
0AAA: CLRF x5D
0AAC: MOVWF x5C
0AAE: MOVLW 27
0AB0: ADDWF x5C,W
0AB2: MOVWF 01
0AB4: MOVLW 00
0AB6: ADDWFC x5D,W
0AB8: MOVWF 03
0ABA: MOVF 01,W
0ABC: ADDLW 22
0ABE: MOVWF 01
0AC0: MOVLW 00
0AC2: ADDWFC 03,F
0AC4: MOVFF 01,15E
0AC8: MOVFF 03,15F
0ACC: MOVF x54,W
0ACE: MULLW 3D
0AD0: MOVF FF3,W
0AD2: CLRF x61
0AD4: MOVWF x60
0AD6: MOVLW 25
0AD8: ADDWF x60,W
0ADA: MOVWF 01
0ADC: MOVLW 00
0ADE: ADDWFC x61,W
0AE0: MOVWF 03
0AE2: MOVF 01,W
0AE4: ADDLW 22
0AE6: MOVWF FE9
0AE8: MOVLW 00
0AEA: ADDWFC 03,W
0AEC: MOVWF FEA
0AEE: MOVFF FEC,03
0AF2: MOVF FED,F
0AF4: MOVFF FEF,162
0AF8: MOVFF 15F,FEA
0AFC: MOVFF 15E,FE9
0B00: MOVFF 03,FEC
0B04: MOVF FED,F
0B06: MOVFF 162,FEF
.................... if(set_BLOCKLEN((int32)2)==false) return(35); /// set up to read 2 bytes
0B0A: CLRF x63
0B0C: CLRF x62
0B0E: CLRF x61
0B10: MOVLW 02
0B12: MOVWF x60
0B14: MOVLB 0
0B16: CALL 02A6
0B1A: MOVF 01,F
0B1C: BNZ 0B2A
0B1E: MOVLW 23
0B20: MOVWF 00
0B22: CLRF 01
0B24: CLRF 02
0B26: CLRF 03
0B28: BRA 0CE8
.................... if(read_BLOCK(fat1_address+(file[fnbr].this_cluster_ptr)*2,buff)==false) return(33);
0B2A: MOVLB 1
0B2C: MOVF x54,W
0B2E: MULLW 3D
0B30: MOVF FF3,W
0B32: CLRF x5D
0B34: MOVWF x5C
0B36: MOVLW 27
0B38: ADDWF x5C,W
0B3A: MOVWF 01
0B3C: MOVLW 00
0B3E: ADDWFC x5D,W
0B40: MOVWF 03
0B42: MOVF 01,W
0B44: ADDLW 22
0B46: MOVWF FE9
0B48: MOVLW 00
0B4A: ADDWFC 03,W
0B4C: MOVWF FEA
0B4E: MOVFF FEC,15F
0B52: MOVF FED,F
0B54: MOVFF FEF,15E
0B58: BCF FD8.0
0B5A: RLCF x5E,W
0B5C: MOVWF 02
0B5E: RLCF x5F,W
0B60: MOVWF 03
0B62: MOVF 02,W
0B64: ADDWF 08,W
0B66: MOVWF x60
0B68: MOVF 03,W
0B6A: ADDWFC 09,W
0B6C: MOVWF x61
0B6E: MOVLW 00
0B70: ADDWFC 0A,W
0B72: MOVWF x62
0B74: MOVLW 00
0B76: ADDWFC 0B,W
0B78: MOVWF x63
0B7A: MOVWF x67
0B7C: MOVFF 162,166
0B80: MOVFF 161,165
0B84: MOVFF 160,164
0B88: MOVLW 01
0B8A: MOVWF x69
0B8C: MOVLW 5A
0B8E: MOVWF x68
0B90: MOVLB 0
0B92: CALL 02FC
0B96: MOVF 01,F
0B98: BNZ 0BA6
0B9A: MOVLW 21
0B9C: MOVWF 00
0B9E: CLRF 01
0BA0: CLRF 02
0BA2: CLRF 03
0BA4: BRA 0CE8
.................... file[fnbr].next_cluster_ptr=make16(buff[1],buff[0]); /// update next in chain
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -