📄 userlist_add.lst
字号:
189 //添加item
190 prev = LastOffset;
\ 02CB 2A0000 LD HL,(LastOffset)
\ 02CE DD75FC LD (IX-4),L
\ 02D1 DD74FD LD (IX-3),H
191 LastOffset = next;
\ 02D4 DD4EFA LD C,(IX-6)
\ 02D7 DD46FB LD B,(IX-5)
\ 02DA ED430000 LD (LastOffset),BC
192 Offset = (LastOffset%4)*USER_PLAYLIST_SIZE;
\ 02DE 79 LD A,C
\ 02DF E603 AND 3
\ 02E1 5F LD E,A
\ 02E2 1600 LD D,0
193 //添加item
194 Read_DataA(LastOffset);
\ 02E4 CDF201 CALL LWRD ?0080
195 memcpy(buffer_list+1+Offset,location,38); //location
\ 02E7 012600 LD BC,38
\ 02EA 210100 LD HL,buffer_list+1
\ 02ED DD5EF8 LD E,(IX-8)
\ 02F0 DD56F9 LD D,(IX-7)
\ 02F3 19 ADD HL,DE
\ 02F4 EB EX DE,HL
\ 02F5 DD6E02 LD L,(IX+2)
\ 02F8 DD6603 LD H,(IX+3)
\ 02FB EDB0 LDIR
196 memcpy(buffer_list+43+Offset,g_TagInfoBuf,64);
\ 02FD 0E40 LD C,64
\ 02FF 212B00 LD HL,buffer_list+43
\ 0302 DD5EF8 LD E,(IX-8)
\ 0305 DD56F9 LD D,(IX-7)
\ 0308 19 ADD HL,DE
\ 0309 EB EX DE,HL
\ 030A 210000 LD HL,g_TagInfoBuf
\ 030D EDB0 LDIR
197 memcpy(buffer_list+38+1+Offset,&prev,2); //prev
\ 030F 03 INC BC
\ 0310 03 INC BC
\ 0311 212700 LD HL,buffer_list+39
\ 0314 DD5EF8 LD E,(IX-8)
\ 0317 DD56F9 LD D,(IX-7)
\ 031A 19 ADD HL,DE
\ 031B EB EX DE,HL
\ 031C 210400 LD HL,4
\ 031F 39 ADD HL,SP
\ 0320 EDB0 LDIR
198 if(buffer_list[Offset]!=2) //==2 表示之前已用过
\ 0322 210000 LD HL,buffer_list
\ 0325 DD4EF8 LD C,(IX-8)
\ 0328 DD46F9 LD B,(IX-7)
\ 032B 09 ADD HL,BC
\ 032C 46 LD B,(HL)
\ 032D 05 DEC B
\ 032E 05 DEC B
\ 032F 281B JR Z,?0049
\ 0331 ?0048:
199 {
200 next++;
\ 0331 DD34FA INC (IX-6)
\ 0334 2003 JR NZ,?0070
\ 0336 DD34FB INC (IX-5)
\ 0339 ?0070:
201 memcpy(buffer_list+38+1+Offset+2,&next,2); //prev
\ 0339 010200 LD BC,2
\ 033C 212900 LD HL,buffer_list+41
\ 033F DD5EF8 LD E,(IX-8)
\ 0342 DD56F9 LD D,(IX-7)
\ 0345 19 ADD HL,DE
\ 0346 EB EX DE,HL
\ 0347 69 LD L,C
\ 0348 60 LD H,B
\ 0349 39 ADD HL,SP
\ 034A EDB0 LDIR
\ 034C ?0049:
202 }
203 buffer_list[Offset]=1;
\ 034C 210000 LD HL,buffer_list
\ 034F DD4EF8 LD C,(IX-8)
\ 0352 DD46F9 LD B,(IX-7)
\ 0355 09 ADD HL,BC
\ 0356 3601 LD (HL),1
\ 0358 ?0047:
\ 0358 ?0045:
204 // FS_FWrite(buffer_list,1,fp);
205 }
206
207 }
208 // IO27 = input8(0x27);
209 // output8(0x27,00);
210 FS_FWrite(buffer_list,1,fp);
\ 0358 2A0C02 LD HL,(fp)
\ 035B E5 PUSH HL
\ 035C CD0A01 CALL LWRD ?0078
\ 035F E1 POP HL
211
212 FS_FClose(fp);
\ 0360 CD0301 CALL LWRD ?0077
213 output8(0x27,IO27);
\ 0363 DD7EFE LD A,(IX-2)
\ 0366 D327 OUT (39),A
214 return TRUE;
\ 0368 2E01 LD L,1
215 }
\ 036A ?0050:
\ 036A C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 036D WrHead_PL:
216
217 BOOL WrHead_PL(char ClearFlag)
218 {
\ 036D CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 0370 FEFF DEFW 65534
219 char i;
220 char IO27;
221 IO27 = input8(0x27);
\ 0372 DB27 IN A,(39)
\ 0374 DD77FF LD (IX-1),A
222 output8(0x27,00);
\ 0377 AF XOR A
\ 0378 D327 OUT (39),A
223 memset(file,0x20,12);
\ 037A CDA200 CALL LWRD ?0072
224 file[0]='U';
225 file[1]='S';
226 file[2]='E';
227 file[3]='R';
228 file[4]='P';
229 file[5]='L';
230 file[8]='P';
231 file[9]='L';
232 file[11]=0;
233
234 FS_CD(FS_CD_ROOT);
\ 037D CDDB00 CALL LWRD ?0074
235 fp=FS_FOpen(file,0);
236 if(fp!=NULL)
\ 0380 287F JR Z,?0056
\ 0382 ?0051:
237 {
238 if(FS_FRead(buffer_list,1,fp))
\ 0382 E5 PUSH HL
\ 0383 CDEF00 CALL LWRD ?0075
\ 0386 E1 POP HL
\ 0387 B7 OR A
\ 0388 2877 JR Z,?0056
\ 038A ?0053:
239 {
240 if(memcmp(buffer_list,file,6)==0)
\ 038A CDF700 CALL LWRD ?0076
\ 038D 7D LD A,L
\ 038E B4 OR H
\ 038F 2070 JR NZ,?0056
\ 0391 ?0055:
241 {
242 memcpy(buffer_list+6,&FirstOffset,2);
\ 0391 0E02 LD C,2
\ 0393 110600 LD DE,buffer_list+6
\ 0396 210000 LD HL,FirstOffset
\ 0399 EDB0 LDIR
243 memcpy(buffer_list+6+2,&LastOffset,2);
\ 039B 03 INC BC
\ 039C 03 INC BC
\ 039D 110800 LD DE,buffer_list+8
\ 03A0 210000 LD HL,LastOffset
\ 03A3 EDB0 LDIR
244 memcpy(buffer_list+6+2+2,&PlaylistCount,2);
\ 03A5 03 INC BC
\ 03A6 03 INC BC
\ 03A7 110A00 LD DE,buffer_list+10
\ 03AA 210000 LD HL,PlaylistCount
\ 03AD EDB0 LDIR
245 FS_FWrite(buffer_list,1,fp);
\ 03AF 2A0C02 LD HL,(fp)
\ 03B2 E5 PUSH HL
\ 03B3 CD0A01 CALL LWRD ?0078
\ 03B6 E1 POP HL
246 if(ClearFlag)
\ 03B7 AF XOR A
\ 03B8 DDB602 OR (IX+2)
\ 03BB 2838 JR Z,?0059
\ 03BD ?0057:
247 {
248 memset(buffer_list,0,512);
\ 03BD 010002 LD BC,512
\ 03C0 110000 LD DE,buffer_list
\ 03C3 69 LD L,C
\ 03C4 CD0000 CALL LWRD ?MEMSET_L11
249 FS_FSeek(1,FS_SEEK_FFROMSTART,fp); //读写之后要先seek
\ 03C7 2A0C02 LD HL,(fp)
\ 03CA E5 PUSH HL
\ 03CB 0E00 LD C,0
\ 03CD C5 PUSH BC
\ 03CE 41 LD B,C
\ 03CF 110100 LD DE,1
\ 03D2 CD0000 CALL LWRD FS_FSeek
\ 03D5 E1 POP HL
\ 03D6 E1 POP HL
250 for(i=0;i<USERPL_NUM/8+1;i++)
\ 03D7 DD36FE00 LD (IX-2),0
\ 03DB ?0060:
\ 03DB DD7EFE LD A,(IX-2)
\ 03DE FE66 CP 102
\ 03E0 3013 JR NC,?0059
\ 03E2 ?0061:
251 {
252 output8(0x4e,input8(0x4e)|0x08);
\ 03E2 DB4E IN A,(78)
\ 03E4 CBDF SET 3,A
\ 03E6 D34E OUT (78),A
253 FS_FWrite(buffer_list,1,fp); ;
\ 03E8 2A0C02 LD HL,(fp)
\ 03EB E5 PUSH HL
\ 03EC CD0A01 CALL LWRD ?0078
\ 03EF E1 POP HL
\ 03F0 DD34FE INC (IX-2)
254 }
255 }
\ 03F3 18E6 JR ?0060
\ 03F5 ?0059:
\ 03F5 ?0058:
256 FS_FClose(fp);
\ 03F5 CD0301 CALL LWRD ?0077
257 output8(0x27,IO27);
\ 03F8 DD7EFF LD A,(IX-1)
\ 03FB D327 OUT (39),A
258 return TRUE;
\ 03FD 2E01 LD L,1
259 }
\ 03FF 180A JR ?0063
\ 0401 ?0056:
\ 0401 ?0054:
\ 0401 ?0052:
260 }
261 }
262 FS_FClose(fp);
\ 0401 CD0301 CALL LWRD ?0077
263 output8(0x27,IO27);
\ 0404 DD7EFF LD A,(IX-1)
\ 0407 D327 OUT (39),A
264 return FALSE;
\ 0409 2E00 LD L,0
265
266 }
\ 040B ?0063:
\ 040B C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
267 /*
268 BOOL Clear_PL(void)
269 {
270 char i;
271 char IO27;
272 IO27 = input8(0x27);
273 output8(0x27,00);
274 memset(file,0x20,12);
275 file[0]='U';
276 file[1]='S';
277 file[2]='E';
278 file[3]='R';
279 file[4]='P';
280 file[5]='L';
281 file[8]='P';
282 file[9]='L';
283 file[11]=0;
284 FS_CD(FS_CD_ROOT);
285 fp=FS_FOpen(file,0);
286 if(fp!=NULL)
287 {
288 memset(buffer_list,0,512);
289 memcpy(buffer_list,file,6);
290 FS_FWrite(buffer_list,1,fp);
291 memset(buffer_list,0,512);
292 FS_FWrite(buffer_list,1,fp);
293
294 for(i=0;i<USERPL_NUM/8+1;i++)
295 {
296 output8(0x4e,input8(0x4e)|0x08);
297 FS_FWrite(buffer_list,1,fp); ;
298 }
299 FS_FClose(fp);
300 output8(0x27,IO27);
301 return TRUE;
302 }
303 FS_FClose(fp);
304 output8(0x27,IO27);
305 return FALSE;
306
307 }
308 */
309 #endif
\ 0000 RSEG CSTR
\ 0000 ?0004:
\ 0000 3A DEFB ':'
\ 0001 00 DEFB 0
\ 0000 RSEG APD_USERPL
\ 0000 buffer_list:
\ 0200 DEFS 512
\ 0200 file:
\ 020C DEFS 12
\ 020C fp:
\ 020E DEFS 2
\ 020E save_offset:
\ 0210 DEFS 2
\ 0210 temp_list:
\ 023B DEFS 43
\ 023B END
Errors: none
Warnings: none
Code size: 1038
Constant size: 2
Static variable size: Data(571) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -