userlist_add.s01

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

S01
906
字号
	NAME	userlist_add(17)
	RSEG	APC_USERPL(0)
	RSEG	CSTR(0)
	RSEG	APD_USERPL(0)
	PUBLIC	Add_UserPL
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FCreate
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FRemove
	EXTERN	FS_FSeek
	EXTERN	FS_FWrite
	EXTERN	FS_Init
	EXTERN	FirstOffset
	EXTERN	LastOffset
	EXTERN	PlaylistCount
	PUBLIC	Read_DataA
	PUBLIC	Reset_USERPL
	PUBLIC	WrHead_PL
	PUBLIC	buffer_list
	PUBLIC	check_playlist
	PUBLIC	file
	PUBLIC	fp
	EXTERN	g_TagInfoBuf
	EXTERN	need_WPL
	PUBLIC	save_offset
	PUBLIC	temp_list
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?S_LSH_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	EXTERN	?MEMSET_L11
	EXTERN	?MEMCMP_L11
	EXTERN	?STRCMP_L11
	RSEG	APC_USERPL
Reset_USERPL:
; 1.	#include "ap_music.h"
; 2.	#ifdef ACTIVE_USERPL
; 3.	#pragma memory=dataseg(APD_USERPL)
; 4.	char buffer_list[512];
; 5.	char file[12];
; 6.	handle fp; 
; 7.	WORD save_offset;
; 8.	user_playlist_t temp_list;
; 9.	#pragma memory=default
; 10.	#pragma codeseg(APC_USERPL)
; 11.	
; 12.	void Reset_USERPL()
; 13.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 14.	    
; 15.	     
; 16.	    char i;
; 17.	    
; 18.	    memset(file,0x20,12);
	CALL	LWRD ?0072
; 19.	    file[0]='U';
; 20.	    file[1]='S';
; 21.	    file[2]='E';
; 22.	    file[3]='R';
; 23.	    file[4]='P';
; 24.	    file[5]='L';
; 25.	    file[8]='P';
; 26.	    file[9]='L';
; 27.	    file[11]=0;
; 28.	    
; 29.	    FirstOffset=0; //第一个偏移量
	LD	L,H
	LD	(FirstOffset),HL
; 30.	    LastOffset=0;  //空族偏移量
	LD	(LastOffset),HL
; 31.	    PlaylistCount=0; //Item总数
	LD	(PlaylistCount),HL
; 32.	    if(FS_Init()) 
	CALL	LWRD FS_Init
	OR	A
	JP	Z,?0003
?0002:
; 33.	        {
; 34.	            FS_CD(FS_CD_ROOT);
	CALL	LWRD ?0074
; 35.	            fp=FS_FOpen(file,0);
; 36.	            if(fp!=NULL)
	JR	Z,?0008
?0005:
; 37.	            {
; 38.	                if(FS_FRead(buffer_list,1,fp))
	PUSH	HL
	CALL	LWRD ?0075
	POP	HL
	OR	A
	JR	Z,?0008
?0007:
; 39.	                {
; 40.	                    if(memcmp(buffer_list,file,6)==0)
	CALL	LWRD ?0076
	LD	A,L
	OR	H
	JR	NZ,?0010
?0009:
; 41.	                    {
; 42.	                        memcpy(&FirstOffset,buffer_list+6,2);
	LD	C,2
	LD	DE,FirstOffset
	LD	HL,buffer_list+6
	LDIR
; 43.	                        memcpy(&LastOffset,buffer_list+6+2,2);
	INC	BC
	INC	BC
	LD	DE,LastOffset
	LD	HL,buffer_list+8
	LDIR
; 44.	                        memcpy(&PlaylistCount,buffer_list+6+2+2,2);
	INC	BC
	INC	BC
	LD	DE,PlaylistCount
	LD	HL,buffer_list+10
	LDIR
; 45.	                        FS_FClose(fp);
	JR	?0013
; 46.	                        return ;
; 47.	                    }
?0010:
; 48.	                       FS_FClose(fp);
	CALL	LWRD ?0077
?0008:
?0006:
; 49.	                }
; 50.	            }
; 51.	            
; 52.	            FS_FRemove(file);
	LD	DE,file
	CALL	LWRD FS_FRemove
; 53.	            memset(buffer_list,0,512);
	LD	BC,512
	LD	DE,buffer_list
	LD	L,C
	CALL	LWRD ?MEMSET_L11
; 54.	            memcpy(buffer_list,file,6);
	LD	BC,6
	LD	HL,file
	LDIR
; 55.	            fp=FS_FCreate(file);
	LD	DE,file
	CALL	LWRD FS_FCreate
	LD	(fp),HL
; 56.	            if(fp==NULL)
	LD	A,L
	OR	H
	JR	Z,?0003
?0011:
?0012:
; 57.	               return ;   
; 58.	            FS_FWrite(buffer_list,1,fp);
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
; 59.	            memset(buffer_list,0,512);
	LD	BC,512
	LD	DE,buffer_list
	LD	L,C
	LD	H,C
	CALL	LWRD ?MEMSET_L11
; 60.	            
; 61.	            for(i=0;i<USERPL_NUM/8+1;i++)
	LD	(IX-2),H
?0014:
	LD	A,(IX-2)
	CP	102
	JR	NC,?0013
?0015:
; 62.	                FS_FWrite(buffer_list,1,fp);
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
	INC	(IX-2)
	JR	?0014
?0013:
; 63.	               
; 64.	             
; 65.	            FS_FClose(fp);
	CALL	LWRD ?0077
?0003:
; 66.	            
; 67.	        }
; 68.	}
?0017:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0072:
	LD	BC,12
	LD	DE,file
	LD	HL,32
?0073:
	CALL	LWRD ?MEMSET_L11
	LD	A,85
	LD	(file),A
	LD	A,83
	LD	(file+1),A
	LD	A,69
	LD	(file+2),A
	LD	A,82
	LD	(file+3),A
	LD	A,80
	LD	(file+4),A
	LD	A,76
	LD	(file+5),A
	LD	A,80
	LD	(file+8),A
	LD	A,76
	LD	(file+9),A
	XOR	A
	LD	(file+11),A
	RET
?0074:
	LD	DE,?0004
	CALL	LWRD FS_CD
	LD	C,0
	LD	DE,file
	CALL	LWRD FS_FOpen
	LD	(fp),HL
	LD	A,L
	OR	H
	RET
?0075:
	LD	C,1
	LD	DE,buffer_list
	JP	LWRD FS_FRead
?0076:
	LD	BC,6
	LD	DE,buffer_list
	LD	HL,file
	JP	LWRD ?MEMCMP_L11
?0077:
	LD	DE,(fp)
	JP	LWRD FS_FClose
?0078:
	LD	C,1
	LD	DE,buffer_list
	JP	LWRD FS_FWrite
Read_DataA:
; 69.	BOOL Read_DataA(WORD offset)
; 70.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 71.	    char IO27;
; 72.	    IO27 = input8(0x27);
	IN	A,(39)
	LD	(IX-2),A
; 73.	    output8(0x27,00);
	XOR	A
	OUT	(39),A
; 74.	    if(save_offset==0xffff)
	LD	HL,(save_offset)
	LD	A,L
	AND	H
	INC	A
	JR	Z,?0066
?0018:
; 75.	    {
; 76.	        save_offset = offset/4;
; 77.	    }
; 78.	    else
?0019:
; 79.	    {
; 80.	        if(save_offset!=(offset/4))
	LD	L,(IX+2)
	LD	H,(IX+3)
	SRL	H
	RR	L
	SRL	H
	RR	L
	LD	BC,(save_offset)
	AND	A
	SBC	HL,BC
	JR	Z,?0067
?0021:
; 81.	        {
; 82.	            FS_FWrite(buffer_list,1,fp);
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0078
	POP	HL
; 83.	            save_offset = offset/4;
?0066:
	LD	L,(IX+2)
	LD	H,(IX+3)
	SRL	H
	RR	L
	SRL	H
	RR	L
	LD	(save_offset),HL
; 84.	        }
; 85.	        else
?0022:
; 86.	        {
; 87.	           output8(0x27,IO27);
; 88.	           return TRUE;
; 89.	        }
?0023:
?0020:
; 90.	    }
; 91.	    if(FS_FSeek(1+offset/4,FS_SEEK_FFROMSTART,fp))
	LD	HL,(fp)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	E,(IX+2)
	LD	D,(IX+3)
	SRL	D
	RR	E
	SRL	D
	RR	E
	INC	DE
	LD	B,C
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
	OR	A
	JR	Z,?0025
?0024:
; 92.	        {
; 93.	           FS_FRead(buffer_list,1,fp);
	LD	HL,(fp)
	PUSH	HL
	CALL	LWRD ?0075
	POP	HL
; 94.	           output8(0x27,IO27);
?0067:
	LD	A,(IX-2)
	OUT	(39),A
; 95.	           return TRUE;
	LD	L,1
; 96.	        }
	JR	?0026
?0025:
; 97.	        else
; 98.	        {
; 99.	           output8(0x27,IO27);
	LD	A,(IX-2)
	OUT	(39),A
; 100.	           return FALSE;
	LD	L,0
; 101.	        }
?0026:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
; 102.	}    
check_playlist:
; 103.	
; 104.	BOOL check_playlist(file_location_t *location)
; 105.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	0
	PUSH	IY
; 106.	    WORD next;
; 107.	    next = FirstOffset;
	LD	IY,(FirstOffset)
?0029:
; 108.	    do
; 109.	    {
; 110.	        if(Read_DataA(next))
	PUSH	IY
	POP	DE
	CALL	LWRD ?0079
	INC	L
	DEC	L
	JR	Z,?0029
?0030:
; 111.	        {
; 112.	            memcpy(&temp_list,buffer_list+(next%8)*64,2);  //prev
	LD	BC,2
	PUSH	IY
	POP	HL
	LD	A,L
	AND	7
	LD	E,A
	XOR	A
	LD	D,A
	LD	B,6
	CALL	LWRD ?S_LSH_L02
	LD	HL,buffer_list
	ADD	HL,DE
	LD	DE,temp_list
	LD	B,A
	LDIR
; 113.	            
; 114.	            if(strcmp(temp_list.filename,location->filename)==0)
	LD	DE,temp_list+27
	LD	HL,26
	LD	C,(IX+2)
	LD	B,(IX+3)
	ADD	HL,BC
	CALL	LWRD ?STRCMP_L11
	LD	A,L
	OR	H
	JR	NZ,?0033
?0032:
; 115.	            {
; 116.	                return TRUE;
	LD	L,1
; 117.	            }
	JR	?0036
?0033:
; 118.	            if(next==LastOffset)
	LD	HL,(LastOffset)
	PUSH	IY
	POP	BC
	SBC	HL,BC
	JR	NZ,?0035
?0034:
; 119.	               return FALSE;
	LD	L,0
	JR	?0036
?0035:
; 120.	            next = temp_list.NextOffset;
	LD	IY,(temp_list+41)
?0031:
; 121.	        }
; 122.	    }while(1);
	JR	?0029
; 123.	    return FALSE;
; 124.	    
; 125.	} 
?0036:
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0080:
	LD	B,7
	CALL	LWRD ?S_LSH_L02
	LD	(IX-8),E
	LD	(IX-7),D
	LD	DE,(LastOffset)
?0079:
	LD	A,BYTE3 Read_DataA
	LD	HL,LWRD Read_DataA
	JP	LWRD ?BANK_CALL_DIRECT_L08
Add_UserPL:
; 126.	
; 127.	BOOL Add_UserPL(file_location_t *location)
; 128.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65528
; 129.	     
; 130.	    
; 131.	     
; 132.	    WORD next;
; 133.	    WORD prev;
; 134.	    WORD Offset; 
; 135.	    char IO27 = input8(0x27);   

⌨️ 快捷键说明

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