📄 mmc.lst
字号:
0001FB B0E2 A 873 CLR R2
0001FD B0E3 A 874 CLR R3
0001FF 89E2FE A 875 LDX -2(RR14),R2
000202 89E3FF A 876 LDX -1(RR14),R3
A 877 ; 137 for(ctr=0;ctr<512;ctr++)TransferSPI(data[ctr]);
A 878 .line 137
000205 8B 28 A 879 JR _6_L_25
000207 A 880 _6_L_23:
000207 884EFE A 881 LDX R4,-2(RR14)
00020A 885EFF A 882 LDX R5,-1(RR14)
00020D 882E08 A 883 LDX R2,8(RR14)
000210 883E09 A 884 LDX R3,9(RR14)
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 18
PC Object I Line Source mmc.src
000213 0235 A 885 ADD R3,R5
000215 1224 A 886 ADC R2,R4
000217 86E2E0 A 887 LDX R0,@RR2
00021A 70E0 A 888 PUSH R0
00021C D6 0000 A 889 CALL _TransferSPI
00021F 50E0 A 890 POP R0
000221 882EFE A 891 LDX R2,-2(RR14)
000224 883EFF A 892 LDX R3,-1(RR14)
000227 A0E2 A 893 INCW RR2
000229 89E2FE A 894 LDX -2(RR14),R2
00022C 89E3FF A 895 LDX -1(RR14),R3
00022F A 896 _6_L_25:
00022F 882EFE A 897 LDX R2,-2(RR14)
000232 883EFF A 898 LDX R3,-1(RR14)
000235 A6E300 A 899 CP R3,#0
000238 1FA6E202 A 900 CPC R2,#2
00023C 7B C9 A 901 JR C,_6_L_23
A 902 ; 138 TransferSPI(0xFF); //16-bit CRC
A 903 .line 138
00023E 1F70FF A 904 PUSH #255
000241 D6 0000 A 905 CALL _TransferSPI
000244 50E0 A 906 POP R0
A 907 ; 139 TransferSPI(0xFF);
A 908 .line 139
000246 1F70FF A 909 PUSH #255
000249 D6 0000 A 910 CALL _TransferSPI
00024C 50E0 A 911 POP R0
A 912 ; 140
A 913 ; 141 //check data response and wait until card is out of busy state
A 914 ; 142 dataresponse=GetDataResponseMMC();
A 915 .line 142
00024E D6 016A A 916 CALL _GetDataResponseMMC
000251 89E0FC A 917 LDX -4(RR14),R0
A 918 ; 143 if(dataresponse!=0x05)err=1;
A 919 .line 143
000254 880EFC A 920 LDX R0,-4(RR14)
000257 A6E005 A 921 CP R0,#5
00025A 6B 05 A 922 JR Z,_6_L_28
00025C 0C01 A 923 LD R0,#1
00025E 89E0FD A 924 LDX -3(RR14),R0
000261 A 925 _6_L_28:
A 926 ; 144 WaitUntilReadyMMC();
A 927 .line 144
000261 D6 018A A 928 CALL _WaitUntilReadyMMC
A 929 ; 145 }
A 930 ; 146 else err=1;
A 931 .line 146
000264 8B 05 A 932 JR _6_L_31
000266 A 933 _6_L_30:
000266 0C01 A 934 LD R0,#1
000268 89E0FD A 935 LDX -3(RR14),R0
00026B A 936 _6_L_31:
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 19
PC Object I Line Source mmc.src
A 937 ; 147
A 938 ; 148 DeassertSS();
A 939 .line 148
00026B D6 0000 A 940 CALL _DeassertSS
A 941 ; 149 return err;
A 942 .line 149
00026E 880EFD A 943 LDX R0,-3(RR14)
A 944 ; 150 }
A 945 .line 150
000271 D6 0000 A 946 CALL __b_framereset
000274 AF A 947 RET
A 948 .endfunc "WriteMMC",150,"_WriteMMC"
A 949 SEGMENT ROM_DATA
A 950
A 951
A 952 ;**************************** _ReadMMC ***************************
A 953 ;Name Addr/Register Size Type
A 954 ;_DeassertSS IMPORT ----- function
A 955 ;_WaitResponseMMC IMPORT ----- function
A 956 ;_CommandMMC IMPORT ----- function
A 957 ;_TransferSPI IMPORT ----- function
A 958 ;_AssertSS IMPORT ----- function
A 959 ;R1 R15-5 0 variable
A 960 ;StartByte R15-4 0 variable
A 961 ;err R15-3 0 variable
A 962 ;ctr R15-2 1 variable
A 963 ;data R15+8 1 parameter
A 964 ;StartAddress R15+4 2 parameter
A 965
A 966
A 967 ; Aggregate Stack Size: -5 (words)
A 968
A 969
A 970 SEGMENT mmc_TEXT
A 971 ; 151
A 972 ; 152
A 973 ; 153 unsigned char ReadMMC(unsigned long StartAddress,unsigned char* data)
A 974 ; 154 //reads a single block:512 bytes from the MMC and saves it as data
A 975 ; 155 {
000275 A 976 _ReadMMC:
A 977 .define "_ReadMMC"
A 978 .value _ReadMMC
A 979 .class 2
A 980 .type 76
A 981 .type 0
A 982 .endef
A 983 .begfunc "ReadMMC",155,"_ReadMMC"
A 984 .define "StartAddress"
A 985 .class 9
A 986 .value 4
A 987 .type 15
A 988 .type 0
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 20
PC Object I Line Source mmc.src
A 989 .endef
A 990 .define "data"
A 991 .class 9
A 992 .value 8
A 993 .type 172
A 994 .type 0
A 995 .endef
A 996 .define "ctr"
A 997 .class 1
A 998 .value -2
A 999 .type 13
A 1000 .type 0
A 1001 .endef
A 1002 .define "err"
A 1003 .class 1
A 1004 .value -3
A 1005 .type 12
A 1006 .type 0
A 1007 .endef
A 1008 .define "StartByte"
A 1009 .class 1
A 1010 .value -4
A 1011 .type 12
A 1012 .type 0
A 1013 .endef
A 1014 .define "R1"
A 1015 .class 1
A 1016 .value -5
A 1017 .type 12
A 1018 .type 0
A 1019 .endef
000275 9C05 A 1020 LD R9,#5
000277 D6 0000 A 1021 CALL __b_frameset0
A 1022 ; 156
A 1023 ; 157 unsigned char R1,StartByte,err=0;
A 1024 .line 157
00027A B0E0 A 1025 CLR R0
00027C 89E0FD A 1026 LDX -3(RR14),R0
A 1027 ; 158 unsigned int ctr;
A 1028 ; 159
A 1029 ; 160 AssertSS();
A 1030 .line 160
00027F D6 0000 A 1031 CALL _AssertSS
A 1032 ; 161 TransferSPI(0xFF);
A 1033 .line 161
000282 1F70FF A 1034 PUSH #255
000285 D6 0000 A 1035 CALL _TransferSPI
000288 50E0 A 1036 POP R0
A 1037 ; 162
A 1038 ; 163 CommandMMC(CMMC_SingleBlockRead,StartAddress);
A 1039 .line 163
00028A 880E04 A 1040 LDX R0,4(RR14)
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 21
PC Object I Line Source mmc.src
00028D 881E05 A 1041 LDX R1,5(RR14)
000290 882E06 A 1042 LDX R2,6(RR14)
000293 883E07 A 1043 LDX R3,7(RR14)
000296 70E3 A 1044 PUSH R3
000298 70E2 A 1045 PUSH R2
00029A 70E1 A 1046 PUSH R1
00029C 70E0 A 1047 PUSH R0
00029E 1F7011 A 1048 PUSH #17
0002A1 D6 0000 A 1049 CALL _CommandMMC
0002A4 50E0 A 1050 POP R0
0002A6 50E0 A 1051 POP R0
0002A8 50E0 A 1052 POP R0
0002AA 50E0 A 1053 POP R0
0002AC 50E0 A 1054 POP R0
A 1055 ; 164 R1=WaitResponseMMC();//command 17 response
A 1056 .line 164
0002AE D6 009C A 1057 CALL _WaitResponseMMC
0002B1 89E0FB A 1058 LDX -5(RR14),R0
A 1059 ; 165
A 1060 ; 166 if(!R1)
A 1061 .line 166
0002B4 880EFB A 1062 LDX R0,-5(RR14)
0002B7 4200 A 1063 OR R0,R0
0002B9 EB 5B A 1064 JR NE,_7_L_40
A 1065 ; 167 {
A 1066 ; 168 StartByte=WaitResponseMMC();
A 1067 .line 168
0002BB D6 009C A 1068 CALL _WaitResponseMMC
0002BE 89E0FC A 1069 LDX -4(RR14),R0
A 1070 ; 169 if(StartByte==0xFE)
A 1071 .line 169
0002C1 880EFC A 1072 LDX R0,-4(RR14)
0002C4 A6E0FE A 1073 CP R0,#254
0002C7 EB 46 A 1074 JR NE,_7_L_38
0002C9 B0E2 A 1075 CLR R2
0002CB B0E3 A 1076 CLR R3
0002CD 89E2FE A 1077 LDX -2(RR14),R2
0002D0 89E3FF A 1078 LDX -1(RR14),R3
A 1079 ; 170 for(ctr=0;ctr<512;ctr++)data[ctr]=TransferSPI(0xFF); //return stored data
A 1080 .line 170
0002D3 8B 29 A 1081 JR _7_L_36
0002D5 A 1082 _7_L_34:
0002D5 1F70FF A 1083 PUSH #255
0002D8 D6 0000 A 1084 CALL _TransferSPI
0002DB 50E1 A 1085 POP R1
0002DD 884EFE A 1086 LDX R4,-2(RR14)
0002E0 885EFF A 1087 LDX R5,-1(RR14)
0002E3 882E08 A 1088 LDX R2,8(RR14)
0002E6 883E09 A 1089 LDX R3,9(RR14)
0002E9 0235 A 1090 ADD R3,R5
0002EB 1224
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -