userlist_add.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 906 行 · 第 1/2 页

S01
906
字号
	IN	A,(39)
	LD	(IX-2),A
; 136.	    if(PlaylistCount>100)
	LD	BC,(PlaylistCount)
	LD	HL,100
	AND	A
	SBC	HL,BC
	JR	C,?0071
?0037:
; 137.	        return FALSE;
?0038:
; 138.	    need_WPL=TRUE;
	LD	A,1
	LD	(need_WPL),A
; 139.	    save_offset=0xffff;
	LD	HL,65535
	LD	(save_offset),HL
; 140.	    memset(buffer_list,0,512);
	LD	BC,512
	LD	DE,buffer_list
	INC	HL
	CALL	LWRD ?MEMSET_L11
; 141.	    memset(file,0x20,12);
	LD	BC,12
	LD	DE,file
	LD	L,32
	CALL	LWRD ?0073
; 142.	    file[0]='U';
; 143.	    file[1]='S';
; 144.	    file[2]='E';
; 145.	    file[3]='R';
; 146.	    file[4]='P';
; 147.	    file[5]='L';
; 148.	    file[8]='P';
; 149.	    file[9]='L';
; 150.	    file[11]=0;
; 151.	    output8(0x27,0x00);
	OUT	(39),A
; 152.	    FS_CD(FS_CD_ROOT);
	CALL	LWRD ?0074
; 153.	    fp=FS_FOpen(file,0);
; 154.	    if(fp==NULL)
	JR	NZ,?0040
?0039:
; 155.	    {
; 156.	      output8(0x27,IO27);
	LD	A,(IX-2)
	OUT	(39),A
; 157.	      return FALSE ;
?0071:
	LD	L,0
; 158.	               
; 159.	    }
	JP	LWRD ?0050
?0040:
; 160.	
; 161.	    if(PlaylistCount==0)
	LD	HL,(PlaylistCount)
	LD	A,L
	OR	H
	INC	HL
	LD	(PlaylistCount),HL
	JR	NZ,?0042
?0041:
; 162.	    {
; 163.	        PlaylistCount++;
; 164.	        FirstOffset = 0;
	LD	L,A
	LD	H,A
	LD	(FirstOffset),HL
; 165.	        LastOffset = 1;
	INC	HL
	LD	(LastOffset),HL
; 166.	        if(Read_DataA(0))
	LD	E,H
	LD	D,H
	CALL	LWRD ?0079
	INC	L
	DEC	L
	JR	Z,?0044
?0043:
; 167.	        {
; 168.	             
; 169.	            buffer_list[0]=1;  //flag
	LD	A,1
	LD	(buffer_list),A
; 170.	            memcpy(buffer_list+1,location,38);  //location
	LD	BC,38
	LD	DE,buffer_list+1
	LD	L,(IX+2)
	LD	H,(IX+3)
	LDIR
; 171.	            memcpy(buffer_list+43,g_TagInfoBuf,64);
	LD	C,64
	LD	DE,buffer_list+43
	LD	HL,g_TagInfoBuf
	LDIR
; 172.	            memcpy(buffer_list+38+1,&FirstOffset,2);  //prev
	INC	BC
	INC	BC
	LD	DE,buffer_list+39
	LD	HL,FirstOffset
	LDIR
; 173.	            memcpy(buffer_list+38+2+1,&LastOffset,2); //next
	INC	BC
	INC	BC
	LD	DE,buffer_list+41
	LD	HL,LastOffset
	LDIR
; 174.	            LastOffset = 0;
	LD	(LastOffset),BC
?0044:
; 175.	           
; 176.	        }
; 177.	        
; 178.	    }
; 179.	    else
	JP	LWRD ?0047
?0042:
; 180.	    {
; 181.	    
; 182.	         
; 183.	         PlaylistCount++;
; 184.	         Offset = (LastOffset%4)*USER_PLAYLIST_SIZE;
	LD	HL,(LastOffset)
	LD	A,L
	AND	3
	LD	L,A
	LD	H,0
	EX	DE,HL
; 185.	         if(Read_DataA(LastOffset))
	CALL	LWRD ?0080
	INC	L
	DEC	L
	JP	Z,?0047
?0046:
; 186.	         {
; 187.	             //处理最后item
; 188.	             memcpy(&next,buffer_list+Offset+38+2+1,2); //next
	LD	HL,2
	ADD	HL,SP
	EX	DE,HL
	LD	HL,buffer_list+41
	LD	C,(IX-8)
	LD	B,(IX-7)
	ADD	HL,BC
	LD	BC,2
	LDIR
; 189.	             //添加item
; 190.	             prev = LastOffset;
	LD	HL,(LastOffset)
	LD	(IX-4),L
	LD	(IX-3),H
; 191.	             LastOffset = next;
	LD	C,(IX-6)
	LD	B,(IX-5)
	LD	(LastOffset),BC
; 192.	             Offset = (LastOffset%4)*USER_PLAYLIST_SIZE;
	LD	A,C
	AND	3
	LD	E,A
	LD	D,0
; 193.	             //添加item
; 194.	             Read_DataA(LastOffset);
	CALL	LWRD ?0080
; 195.	            memcpy(buffer_list+1+Offset,location,38);  //location
	LD	BC,38
	LD	HL,buffer_list+1
	LD	E,(IX-8)
	LD	D,(IX-7)
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX+2)
	LD	H,(IX+3)
	LDIR
; 196.	            memcpy(buffer_list+43+Offset,g_TagInfoBuf,64);
	LD	C,64
	LD	HL,buffer_list+43
	LD	E,(IX-8)
	LD	D,(IX-7)
	ADD	HL,DE
	EX	DE,HL
	LD	HL,g_TagInfoBuf
	LDIR
; 197.	            memcpy(buffer_list+38+1+Offset,&prev,2);  //prev
	INC	BC
	INC	BC
	LD	HL,buffer_list+39
	LD	E,(IX-8)
	LD	D,(IX-7)
	ADD	HL,DE
	EX	DE,HL
	LD	HL,4
	ADD	HL,SP
	LDIR
; 198.	             if(buffer_list[Offset]!=2) //==2 表示之前已用过
	LD	HL,buffer_list
	LD	C,(IX-8)
	LD	B,(IX-7)
	ADD	HL,BC
	LD	B,(HL)
	DEC	B
	DEC	B
	JR	Z,?0049
?0048:
; 199.	             {
; 200.	                 next++;
	INC	(IX-6)
	JR	NZ,?0070
	INC	(IX-5)
?0070:
; 201.	                 memcpy(buffer_list+38+1+Offset+2,&next,2);  //prev
	LD	BC,2
	LD	HL,buffer_list+41
	LD	E,(IX-8)
	LD	D,(IX-7)
	ADD	HL,DE
	EX	DE,HL
	LD	L,C
	LD	H,B
	ADD	HL,SP
	LDIR
?0049:
; 202.	             }
; 203.	             buffer_list[Offset]=1;
	LD	HL,buffer_list
	LD	C,(IX-8)
	LD	B,(IX-7)
	ADD	HL,BC
	LD	(HL),1
?0047:
?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);
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
; 211.	    
; 212.	    FS_FClose(fp);
	CALL	LWRD ?0077
; 213.	    output8(0x27,IO27);
	LD	A,(IX-2)
	OUT	(39),A
; 214.	    return TRUE;
	LD	L,1
; 215.	}
?0050:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
WrHead_PL:
; 216.	
; 217.	BOOL WrHead_PL(char ClearFlag)
; 218.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 219.	     char i;
; 220.	    char IO27;
; 221.	    IO27 = input8(0x27);
	IN	A,(39)
	LD	(IX-1),A
; 222.	    output8(0x27,00);
	XOR	A
	OUT	(39),A
; 223.	    memset(file,0x20,12);
	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);
	CALL	LWRD ?0074
; 235.	    fp=FS_FOpen(file,0);
; 236.	    if(fp!=NULL)
	JR	Z,?0056
?0051:
; 237.	    {
; 238.	         if(FS_FRead(buffer_list,1,fp))
	PUSH	HL
	CALL	LWRD ?0075
	POP	HL
	OR	A
	JR	Z,?0056
?0053:
; 239.	         {
; 240.	                    if(memcmp(buffer_list,file,6)==0)
	CALL	LWRD ?0076
	LD	A,L
	OR	H
	JR	NZ,?0056
?0055:
; 241.	                    {
; 242.	                        memcpy(buffer_list+6,&FirstOffset,2);
	LD	C,2
	LD	DE,buffer_list+6
	LD	HL,FirstOffset
	LDIR
; 243.	                        memcpy(buffer_list+6+2,&LastOffset,2);
	INC	BC
	INC	BC
	LD	DE,buffer_list+8
	LD	HL,LastOffset
	LDIR
; 244.	                        memcpy(buffer_list+6+2+2,&PlaylistCount,2);
	INC	BC
	INC	BC
	LD	DE,buffer_list+10
	LD	HL,PlaylistCount
	LDIR
; 245.	                        FS_FWrite(buffer_list,1,fp);                         
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
; 246.	                        if(ClearFlag)
	XOR	A
	OR	(IX+2)
	JR	Z,?0059
?0057:
; 247.	                        {
; 248.	                          memset(buffer_list,0,512);   
	LD	BC,512
	LD	DE,buffer_list
	LD	L,C
	CALL	LWRD ?MEMSET_L11
; 249.	                          FS_FSeek(1,FS_SEEK_FFROMSTART,fp);   //读写之后要先seek
	LD	HL,(fp)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	B,C
	LD	DE,1
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
; 250.	                          for(i=0;i<USERPL_NUM/8+1;i++)
	LD	(IX-2),0
?0060:
	LD	A,(IX-2)
	CP	102
	JR	NC,?0059
?0061:
; 251.	                          {  
; 252.	                           output8(0x4e,input8(0x4e)|0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 253.	                           FS_FWrite(buffer_list,1,fp);              ;
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
	INC	(IX-2)
; 254.	                          }
; 255.	                        }                         
	JR	?0060
?0059:
?0058:
; 256.	                        FS_FClose(fp);
	CALL	LWRD ?0077
; 257.	                        output8(0x27,IO27);
	LD	A,(IX-1)
	OUT	(39),A
; 258.	                        return TRUE;
	LD	L,1
; 259.	                    }
	JR	?0063
?0056:
?0054:
?0052:
; 260.	          }
; 261.	    }
; 262.	    FS_FClose(fp);
	CALL	LWRD ?0077
; 263.	    output8(0x27,IO27);
	LD	A,(IX-1)
	OUT	(39),A
; 264.	    return FALSE;       
	LD	L,0
; 265.	         
; 266.	} 
?0063:
	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
	RSEG	CSTR
?0004:
	DEFB	':'
	DEFB	0
	RSEG	APD_USERPL
buffer_list:
	DEFS	512
file:
	DEFS	12
fp:
	DEFS	2
save_offset:
	DEFS	2
temp_list:
	DEFS	43
	END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?