⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_userlist.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ui_userlist(17)
	RSEG	AP_UI_PLAYLIST(0)
	RSEG	CSTR(0)
	RSEG	APD_UI_PLAYLIST(0)
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	EXTERN	FirstOffset
	EXTERN	LastOffset
	PUBLIC	Open_view
	EXTERN	PlaylistCount
	PUBLIC	Process_onePage
	EXTERN	ScrollFlag
	EXTERN	WrHead_PL
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	PUBLIC	disbuff
	PUBLIC	fpview
	EXTERN	g_music_vars
	PUBLIC	ui_Read_Data
	PUBLIC	ui_userplaylist
	EXTERN	ui_viewlist
	EXTERN	user_pl_del
	PUBLIC	vFirstOffset
	PUBLIC	vLastOffset
	PUBLIC	vTotal
	PUBLIC	vbuff
	PUBLIC	vfilename
	PUBLIC	vsave_offset
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?UC_MOD_L01
	EXTERN	?S_LSH_L02
	EXTERN	?US_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?C_V_SWITCH_L06
	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
	RSEG	AP_UI_PLAYLIST
Open_view:
; 1.	#include "ap_music.h"
; 2.	extern void ui_viewlist(char old_active,char new_active,char num,char type,bool scroll_flag);   
; 3.	extern BOOL Clear_PL(void); 
; 4.	extern  char     ScrollFlag;   //滚动标志位  
; 5.	#pragma memory=dataseg(APD_UI_PLAYLIST)
; 6.	char vbuff[512];
; 7.	char disbuff[MENU_GROUP*30];
; 8.	char vfilename[12];
; 9.	handle fpview; 
; 10.	WORD vFirstOffset;
; 11.	WORD vLastOffset;
; 12.	WORD vTotal;
; 13.	WORD vsave_offset;  
; 14.	#pragma memory=default
; 15.	#pragma codeseg(AP_UI_PLAYLIST)
; 16.	BOOL Open_view()
; 17.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 18.	    char IO27;
; 19.	//    char Backbuf[32];
; 20.	    IO27 = input8(0x27);
	IN	A,(39)
	LD	(IX-2),A
; 21.	    memset(vfilename,0x20,12);
	LD	BC,12
	LD	DE,vfilename
	LD	HL,32
	CALL	LWRD ?MEMSET_L11
; 22.	    vfilename[0]='U';
	LD	A,85
	LD	(vfilename),A
; 23.	    vfilename[1]='S';
	LD	A,83
	LD	(vfilename+1),A
; 24.	    vfilename[2]='E';
	LD	A,69
	LD	(vfilename+2),A
; 25.	    vfilename[3]='R';
	LD	A,82
	LD	(vfilename+3),A
; 26.	    vfilename[4]='P';
	LD	A,80
	LD	(vfilename+4),A
; 27.	    vfilename[5]='L';
	LD	A,76
	LD	(vfilename+5),A
; 28.	    vfilename[8]='P';
	LD	A,80
	LD	(vfilename+8),A
; 29.	    vfilename[9]='L';
	LD	A,76
	LD	(vfilename+9),A
; 30.	    vfilename[11]=0;
	XOR	A
	LD	(vfilename+11),A
; 31.	    
; 32.	   
; 33.	//    if(FS_Init()) 
; 34.	//    {
; 35.	     output8(0x27,00);
	OUT	(39),A
; 36.	//     FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
; 37.	     FS_CD(FS_CD_ROOT);
	LD	DE,?0002
	CALL	LWRD FS_CD
; 38.	     fpview=FS_FOpen(vfilename,0);
	LD	C,0
	LD	DE,vfilename
	CALL	LWRD FS_FOpen
	LD	(fpview),HL
; 39.	     if(fpview == NULL)
	LD	A,L
	OR	H
	JR	Z,?0011
?0003:
; 40.	     {
; 41.	//        FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 42.	        output8(0x27,IO27); 
; 43.	        return FALSE;
; 44.	     }
?0004:
; 45.	   
; 46.	    if(FS_FRead(vbuff,1,fpview))
	PUSH	HL
	LD	C,1
	LD	DE,vbuff
	CALL	LWRD FS_FRead
	POP	HL
	OR	A
	JR	Z,?0011
?0005:
; 47.	         {
; 48.	                    if(memcmp(vbuff,vfilename,6)==0)
	LD	BC,6
	LD	DE,vbuff
	LD	HL,vfilename
	CALL	LWRD ?MEMCMP_L11
	LD	A,L
	OR	H
	JR	NZ,?0011
?0007:
; 49.	                    {
; 50.	                        memcpy(&vFirstOffset,vbuff+6,2);
	LD	C,2
	LD	DE,vFirstOffset
	LD	HL,vbuff+6
	LDIR
; 51.	                        memcpy(&vLastOffset,vbuff+6+2,2);
	INC	BC
	INC	BC
	LD	DE,vLastOffset
	LD	HL,vbuff+8
	LDIR
; 52.	                        memcpy(&vTotal,vbuff+6+2+2,2);
	INC	BC
	INC	BC
	LD	DE,vTotal
	LD	HL,vbuff+10
	LDIR
; 53.	                        if(vTotal == 0)
	LD	HL,(vTotal)
	LD	A,L
	OR	H
	JR	NZ,?0010
?0009:
; 54.	                        {
; 55.	                           FS_FClose(fpview);
	LD	DE,(fpview)
	CALL	LWRD FS_FClose
; 56.	                        }
; 57.	                     else
	JR	?0011
?0010:
; 58.	                        {
; 59.	                    //      FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 60.	                          output8(0x27,IO27); 
	LD	A,(IX-2)
	OUT	(39),A
; 61.	                         return TRUE;
	LD	L,1
; 62.	                        }
	JR	?0012
?0011:
?0008:
?0006:
; 63.	                    }
; 64.	            }
; 65.	//    }
; 66.	//FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 67.	output8(0x27,IO27); 
	LD	A,(IX-2)
	OUT	(39),A
; 68.	return FALSE;
	LD	L,0
; 69.	    
; 70.	}
?0012:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
ui_Read_Data:
; 71.	
; 72.	BOOL ui_Read_Data(WORD offset)
; 73.	{
	PUSH	BC
	PUSH	IX
	PUSH	AF
	PUSH	DE
	POP	IX
; 74.	    char IO27;
; 75.	    IO27 = input8(0x27);
	IN	A,(39)
	LD	HL,0
	ADD	HL,SP
	LD	(HL),A
; 76.	    output8(0x27,00);
	XOR	A
	OUT	(39),A
; 77.	     
; 78.	    if(vsave_offset==0xffff)
	LD	HL,(vsave_offset)
	LD	A,L
	AND	H
	INC	A
	JR	Z,?0099
?0013:
; 79.	    {
; 80.	        vsave_offset = offset/4;
; 81.	    }
; 82.	    else
?0014:
; 83.	    {
; 84.	        if(vsave_offset!=(offset/4))
	PUSH	IX
	POP	HL
	SRL	H
	RR	L
	SRL	H
	RR	L
	LD	BC,(vsave_offset)
	AND	A
	SBC	HL,BC
	JR	Z,?0100
?0016:
; 85.	        {
; 86.	             
; 87.	            vsave_offset = offset/4;
?0099:
	PUSH	IX
	POP	HL
	SRL	H
	RR	L
	SRL	H
	RR	L
	LD	(vsave_offset),HL
; 88.	        }
; 89.	        else
?0017:
; 90.	        {
; 91.	           output8(0x27,IO27); 
; 92.	           return TRUE;
; 93.	        }
?0018:
?0015:
; 94.	    }
; 95.	    if(FS_FSeek(1+offset/4,FS_SEEK_FFROMSTART,fpview))
	LD	HL,(fpview)
	PUSH	HL
	LD	C,0
	PUSH	BC
	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,?0020
?0019:
; 96.	        {
; 97.	           FS_FRead(vbuff,1,fpview);
	LD	HL,(fpview)
	PUSH	HL
	LD	C,1
	LD	DE,vbuff
	CALL	LWRD FS_FRead
	POP	HL
; 98.	           output8(0x27,IO27); 
?0100:
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	OUT	(39),A
; 99.	           return TRUE;
	LD	L,1
; 100.	        }
	JR	?0021
?0020:
; 101.	        else
; 102.	        {
; 103.	           output8(0x27,IO27); 
	LD	L,A
	LD	H,A
	ADD	HL,SP
	LD	A,(HL)
	OUT	(39),A
; 104.	           return FALSE;
	LD	L,0
; 105.	        }
?0021:
	POP	AF
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
; 106.	}
Process_onePage:
; 107.	
; 108.	void Process_onePage(WORD *offset,char direct,char last_one)
; 109.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-2
	PUSH	IY
; 110.	      WORD temp;
; 111.	      char i;
; 112.	      ui_Read_Data(*offset);
	CALL	LWRD ?0109
; 113.	      if(direct==0)
	INC	C
	DEC	C
	JR	NZ,?0023
?0022:
; 114.	         i=0;
	LD	(IX-2),C
; 115.	      else 
	JR	?0027
?0023:
; 116.	      {   
; 117.	         if(last_one==0)
	XOR	A
	OR	(IX+10)
	JR	NZ,?0026
?0025:
; 118.	          i=MENU_GROUP-1;
	LD	(IX-2),5
; 119.	         else
	JR	?0027
?0026:
; 120.	          i=last_one-1;  
	ADD	A,255
	LD	(IX-2),A
?0027:
?0024:
?0029:
; 121.	      }
; 122.	      while(1)
; 123.	      {
; 124.	        temp = (*offset%4)*USER_PLAYLIST_SIZE;
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	A,(HL)
	AND	3
	LD	L,A
	LD	H,0
	EX	DE,HL
	LD	B,7
	CALL	LWRD ?S_LSH_L02
	PUSH	DE
	POP	IY
; 125.	        memcpy(disbuff+i*30,vbuff+temp+43,25);
	LD	BC,25
	LD	E,(IX-2)
	LD	D,B
	LD	C,30
	CALL	LWRD ?S_MUL_L02
	LD	HL,disbuff
	ADD	HL,DE
	EX	DE,HL
	LD	HL,vbuff+43
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	BC,25
	LDIR
; 126.	        memcpy(disbuff+i*30+26,vbuff+temp+39,4);
	LD	HL,disbuff+26
	LD	E,(IX-2)
	LD	D,B
	LD	C,30
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	EX	DE,HL
	LD	HL,vbuff+39
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	BC,4
	LDIR
; 127.	        if(direct==0)
	XOR	A
	OR	(IX+4)
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	JR	NZ,?0032
?0031:
; 128.	        {
; 129.	               if(*offset!=vLastOffset)
	LD	BC,(vLastOffset)
	SBC	HL,BC
	JR	Z,?0028
?0033:
; 130.	                  memcpy(offset,vbuff+temp+41,2);
	LD	E,(IX+2)
	LD	D,(IX+3)
	LD	HL,vbuff+41
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	BC,2
	LDIR
; 131.	                else
?0034:
; 132.	                   break;
?0035:
; 133.	               i++;
	INC	(IX-2)
; 134.	         
; 135.	        }
; 136.	        else
	JR	?0036
?0032:
; 137.	        {
; 138.	            if(*offset!=vFirstOffset) 
	LD	BC,(vFirstOffset)
	SBC	HL,BC
	JR	Z,?0028
?0037:
; 139.	                  memcpy(offset,vbuff+temp+39,2);
	LD	E,(IX+2)
	LD	D,(IX+3)
	LD	HL,vbuff+39
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	BC,2
	LDIR
; 140.	                else 
?0038:
; 141.	                   break;
?0039:
; 142.	             i--;
	DEC	(IX-2)
?0036:
; 143.	        }           
; 144.	           if(i>=MENU_GROUP)
	LD	A,(IX-2)
	CP	6
	JR	NC,?0028
?0040:
; 145.	             break;
?0041:
; 146.	           if(i<0)
?0042:
; 147.	            break;                             
?0043:
; 148.	           ui_Read_Data(*offset);
	CALL	LWRD ?0109
; 149.	      }    
; 150.	}
	JP	LWRD ?0027
?0028:
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0109:
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 ui_Read_Data
	LD	HL,LWRD ui_Read_Data
	JP	LWRD ?BANK_CALL_DIRECT_L08
ui_userplaylist:
; 151.	
; 152.	int ui_userplaylist(file_location_t *location,char type)
; 153.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-12
	PUSH	IY
; 154.	    char old_active,new_active;
; 155.	    char key;
; 156.	    WORD g_list_count;
; 157.	    BOOL need_read=TRUE;
; 158.	    BOOL  need_draw=TRUE;
; 159.	    char  direct=0;
; 160.	    char  list_num;  
; 161.	    char  last_list =0; 
; 162.	    WORD CurOffset;
; 163.	    char IO27 = input8(0x27);
	IN	A,(39)
	LD	(IX-9),A
; 164.	    vsave_offset = 0xFFFF;
	LD	HL,65535
	LD	(vsave_offset),HL
; 165.	    if(!Open_view())
	LD	(IX-7),1
	LD	(IX-11),1
	LD	(IX-5),0
	LD	(IX-2),0
	LD	A,BYTE3 Open_view
	LD	HL,LWRD Open_view
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JP	Z,?0104
?0044:
; 166.	       return RESULT_IGNORE;
?0045:
; 167.	    CurOffset = vFirstOffset;
	LD	HL,(vFirstOffset)
	LD	(IX-4),L
	LD	(IX-3),H
; 168.	    new_active=0;
; 169.	    old_active = 0;
; 170.	    g_list_count = 0;
; 171.	    //Process_onePage(&CurOffset,0);
; 172.	    list_num =vTotal-g_list_count;
	LD	A,(vTotal)
	LD	(IX-8),A
	LD	(IX-12),0
	LD	(IX-10),0
	LD	IY,0
?0047:
; 173.	    
; 174.	    while(1)
; 175.	    {
; 176.	        if(need_read)
	XOR	A
	OR	(IX-7)
	JR	Z,?0050
?0049:
; 177.	        {
; 178.	            Process_onePage(&CurOffset,direct,last_list);
	LD	L,(IX-2)
	PUSH	HL
	LD	C,(IX-5)

⌨️ 快捷键说明

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