📄 sub_function1.lst
字号:
125 if (FSELInit(FSEL_TYPE_VOICE, FSEL_ALL_SEQUENCE, FSEL_TYPE_COMMONDIR, 'H'))
\ 00DE 4F LD C,A
\ 00DF C5 PUSH BC
\ 00E0 0E00 LD C,0
\ 00E2 C5 PUSH BC
\ 00E3 CD0A01 CALL LWRD ?0195
\ 00E6 F1 POP AF
\ 00E7 F1 POP AF
\ 00E8 2C INC L
\ 00E9 2D DEC L
\ 00EA 2805 JR Z,?0037
\ 00EC ?0036:
126 {
127 return 1;
\ 00EC ?0128:
\ 00EC 210100 LD HL,1
128 }
\ 00EF 1813 JR ?0040
\ 00F1 ?0037:
129 result = FSELGetErrID();
\ 00F1 CD1401 CALL LWRD ?0196
130 if (FSELGetErrID() != 0)
\ 00F4 CD1401 CALL LWRD ?0196
\ 00F7 2C INC L
\ 00F8 2D DEC L
\ 00F9 2806 JR Z,?0033
\ 00FB ?0038:
131 {
132 DisplayErrInfor(CFILEOUT);//显示卡无文件
\ 00FB 117502 LD DE,629
\ 00FE ?0129:
\ 00FE CD1F01 CALL LWRD ?0197
133 return 0;
134 }
\ 0101 ?0039:
135 return 0;//非法
136 }
\ 0101 ?0033:
137 else
138 {
139 return 0;//没卡退出
\ 0101 210000 LD HL,0
140 }
\ 0104 ?0040:
\ 0104 F1 POP AF
\ 0105 D1 POP DE
\ 0106 C1 POP BC
\ 0107 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 010A ?0195:
\ 010A 1E01 LD E,1
\ 010C 3E00 LD A,BYTE3 fselInit
\ 010E 210000 LD HL,LWRD fselInit
\ 0111 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 0114 ?0196:
\ 0114 3E00 LD A,BYTE3 fselGetErrID
\ 0116 210000 LD HL,LWRD fselGetErrID
\ 0119 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 011C ?0198:
\ 011C 117402 LD DE,628
\ 011F ?0197:
\ 011F 3E00 LD A,BYTE3 DisplayErrInfor
\ 0121 210000 LD HL,LWRD DisplayErrInfor
\ 0124 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
141
142 }
143
144 }
\ 0127 UpdateFileSelector:
145
146
147 /******************************************************************************
148 ** 名字:
149 ** 接口: int UpdateFileSelector(void)
150 ** 描述: 更新文件选择器
151 ** 输入参数: void
152 ** 输出参数:
153 0: 更新不成功,要退出AP
154 1: 更新成功,已可用
155 ** 使用说明:
156 ********************************************************************************/
157 int UpdateFileSelector(void)
158 {
\ 0127 C5 PUSH BC
\ 0128 D5 PUSH DE
\ 0129 F5 PUSH AF
159
160 BYTE result;
161 output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
\ 012A DB4E IN A,(78)
\ 012C CBDF SET 3,A
\ 012E D34E OUT (78),A
162 // BankSwitch((unsigned long)FSELSetLocation >> 16);
163
164 result = FSELSetLocation(& g_voice_vars.location);
\ 0130 110600 LD DE,g_voice_vars+6
\ 0133 3E00 LD A,BYTE3 fselSetLocation
\ 0135 210000 LD HL,LWRD fselSetLocation
\ 0138 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 013B E5 PUSH HL
\ 013C 210200 LD HL,2
\ 013F 39 ADD HL,SP
\ 0140 C1 POP BC
\ 0141 71 LD (HL),C
165
166 if (result == 1)
\ 0142 41 LD B,C
\ 0143 05 DEC B
\ 0144 2014 JR NZ,?0042
\ 0146 ?0041:
167 {
168 if (g_voice_vars.location.filename[0] != '\0')
\ 0146 3A2000 LD A,(g_voice_vars+32)
\ 0149 B7 OR A
\ 014A 201F JR NZ,?0050
\ 014C ?0043:
169 {
170 return 1;
171 }
\ 014C ?0044:
172
173 //找到目录的第一个文件
174 if (StartFileSelector() == 0)
\ 014C 3E00 LD A,BYTE3 StartFileSelector
\ 014E 21C501 LD HL,LWRD StartFileSelector
\ 0151 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0154 7D LD A,L
\ 0155 B4 OR H
\ 0156 2013 JR NZ,?0050
\ 0158 ?0045:
175 {
176 return 0;
\ 0158 185A JR ?0141
177 }
\ 015A ?0046:
178 return 1;
179 }
\ 015A ?0042:
180 else if (result == 2) // == 2 表示该目录是空
\ 015A 46 LD B,(HL)
\ 015B 05 DEC B
\ 015C 05 DEC B
\ 015D 2011 JR NZ,?0048
\ 015F ?0047:
181 {
182 //找到目录的第一个文件
183 if (StartFileSelector() == 0)
\ 015F 3E00 LD A,BYTE3 StartFileSelector
\ 0161 21C501 LD HL,LWRD StartFileSelector
\ 0164 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0167 7D LD A,L
\ 0168 B4 OR H
\ 0169 2849 JR Z,?0141
\ 016B ?0049:
184 {
185 return 0;
186 }
\ 016B ?0050:
187 return 1;
\ 016B 210100 LD HL,1
188
189 }
\ 016E 184F JR ?0060
\ 0170 ?0048:
190
191 need_restore=FALSE;//时间断点参数从0开始
\ 0170 AF XOR A
\ 0171 320000 LD (need_restore),A
192
193 g_voice_vars.location.filename[0] = '\0';//找不到对应文件时要回到目录第一个文件
\ 0174 322000 LD (g_voice_vars+32),A
194 output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
\ 0177 DB4E IN A,(78)
\ 0179 CBDF SET 3,A
\ 017B D34E OUT (78),A
195
196 result = FSELSetLocation(& g_voice_vars.location);
\ 017D 110600 LD DE,g_voice_vars+6
\ 0180 3E00 LD A,BYTE3 fselSetLocation
\ 0182 210000 LD HL,LWRD fselSetLocation
\ 0185 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0188 E5 PUSH HL
\ 0189 C1 POP BC
197
198 if (result != 0)//set 目录
\ 018A AF XOR A
\ 018B B1 OR C
\ 018C 280E JR Z,?0052
\ 018E ?0051:
199 {
200 //找到目录的第一个文件
201 if (StartFileSelector() == 0)
\ 018E 3E00 LD A,BYTE3 StartFileSelector
\ 0190 21C501 LD HL,LWRD StartFileSelector
\ 0193 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0196 7D LD A,L
\ 0197 B4 OR H
\ 0198 201F JR NZ,?0059
\ 019A ?0053:
202 {
203 return 0;
\ 019A 1818 JR ?0141
204 }
\ 019C ?0054:
205 }
206
207 else
\ 019C ?0052:
208 {
209 // 初始化文件选择器
210 if (InitFileSelector() == 0)
\ 019C 3E00 LD A,BYTE3 InitFileSelector
\ 019E 212C00 LD HL,LWRD InitFileSelector
\ 01A1 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01A4 7D LD A,L
\ 01A5 B4 OR H
\ 01A6 280C JR Z,?0141
\ 01A8 ?0056:
211 {
212 return 0;
213 }
\ 01A8 ?0057:
214 //找到目录的第一个文件
215 if (StartFileSelector() == 0)
\ 01A8 3E00 LD A,BYTE3 StartFileSelector
\ 01AA 21C501 LD HL,LWRD StartFileSelector
\ 01AD CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01B0 7D LD A,L
\ 01B1 B4 OR H
\ 01B2 2005 JR NZ,?0059
\ 01B4 ?0058:
216 {
217 return 0;
\ 01B4 ?0141:
\ 01B4 210000 LD HL,0
218 }
\ 01B7 1806 JR ?0060
\ 01B9 ?0059:
\ 01B9 ?0055:
219 }
220
221 output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
\ 01B9 DB4E IN A,(78)
\ 01BB CBDF SET 3,A
\ 01BD D34E OUT (78),A
222 }
\ 01BF ?0060:
\ 01BF F1 POP AF
\ 01C0 D1 POP DE
\ 01C1 C1 POP BC
\ 01C2 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 01C5 StartFileSelector:
223
224
225
226 /******************************************************************************
227 ** 名字:
228 ** 接口:
229 ** 描述:
230 ** 输入参数:
231 ** 输出参数:
232 ** 使用说明: //注,这函数是在初始化完文件选择器或set 完目录后调用的
233 ********************************************************************************/
234 int StartFileSelector(void)
235 {
\ 01C5 C5 PUSH BC
\ 01C6 D5 PUSH DE
\ 01C7 DDE5 PUSH IX
236 int result;
237
238 if (g_voice_vars.location.disk == 'C')
\ 01C9 3A0600 LD A,(g_voice_vars+6)
\ 01CC FE43 CP 67
\ 01CE 112000 LD DE,g_voice_vars+32
\ 01D1 3E00 LD A,BYTE3 fselGetNextFile
\ 01D3 210000 LD HL,LWRD fselGetNextFile
\ 01D6 2072 JR NZ,?0062
\ 01D8 ?0061:
239 {
240 if (FSELGetNext(g_voice_vars.location.filename) != 0)
\ 01D8 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01DB 2C INC L
\ 01DC 2D DEC L
\ 01DD C2AD02 JP NZ,?0186
\ 01E0 ?0063:
241 {
242 return 1;
243 }
\ 01E0 ?0064:
244
245 if (FSELGetErrID() == 0)
\ 01E0 CD1401 CALL LWRD ?0196
\ 01E3 2C INC L
\ 01E4 2D DEC L
\ 01E5 CAC102 JP Z,?0106
\ 01E8 ?0065:
246 {
247 return 0;//非法
248 }
\ 01E8 ?0066:
249 //再查一次,因为可能这目录前面还有文件
250 if (InitFileSelector() == 0)
\ 01E8 3E00 LD A,BYTE3 InitFileSelector
\ 01EA 212C00 LD HL,LWRD InitFileSelector
\ 01ED CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01F0 7D LD A,L
\ 01F1 B4 OR H
\ 01F2 CAC102 JP Z,?0106
\ 01F5 ?0067:
251 {
252 return 0;
253 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -