select_music_list.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 316 行

S01
316
字号
	NAME	select_music_list(17)
	RSEG	AP_SELECT_LIST(0)
	RSEG	CSTR(0)
	RSEG	APC_SELECT_LIST(0)
	RSEG	APD_SELECT_LIST(0)
	PUBLIC	Backbuf
	EXTERN	DisplayErrMsg
	PUBLIC	FILENAMELSIT2
	EXTERN	FS_Backup
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	EXTERN	FS_Restore
	PUBLIC	SelectListBuffer
	PUBLIC	TALBFileName2
	PUBLIC	TIT2FileName2
	PUBLIC	TPE1FileName2
	EXTERN	g_file_list_total
	EXTERN	g_music_vars
	PUBLIC	select_music_list
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?US_DIV_L02
	EXTERN	?US_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?C_S_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	RSEG	AP_SELECT_LIST
select_music_list:
; 1.	/******************************************************************************
; 2.	           ACTOS AP
; 3.	*        This program demostrates how to build an AP
; 4.	*
; 5.	*        (c) Copyright Actions Co,Ld.
; 6.	*
; 7.	*  $Id: music_list_menu.c,v 1.1.1.1 2007/03/08 16:30:22 mars Exp $
; 8.	*******************************************************************************
; 9.	*/
; 10.	#include "ap_music.h"
; 11.	#define   OneLocationBYTE    41      //sizeof(location) 
; 12.	#pragma memory=constseg(APC_SELECT_LIST)
; 13.	const char TIT2FileName2[] = "TIT2    BIN" ;      //标题
; 14.	const char TPE1FileName2[] = "TPE1    BIN" ;     //艺术家
; 15.	const char TALBFileName2[] = "TALB    BIN" ;     //专辑 
; 16.	const char FILENAMELSIT2[] = "FILENAMEBIN" ;     //文件名   
; 17.	
; 18.	#pragma memory=dataseg(APD_SELECT_LIST)   
; 19.	char  SelectListBuffer[512];
; 20.	char Backbuf[32];
; 21.	#pragma memory=default
; 22.	
; 23.	#pragma codeseg(AP_SELECT_LIST)
; 24.	
; 25.	/////////////////////////////////////////////////////////////////////////////////////
; 26.	/****************************************************************************************
; 27.	*             Music_type_t CheckMusicType(char *filename)
; 28.	*
; 29.	* Description : 切换播放列表文件
; 30.	*
; 31.	* Arguments   : BYTE Direct  切换方向
; 32.	*
; 33.	* Returns     : TRUE: 切换成功,FALSE 失败
; 34.	*
; 35.	* Notes       :
; 36.	*
; 37.	********************************************************************************
; 38.	*/
; 39.	int  select_music_list(BYTE Direct)
; 40.	{        
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-6
	PUSH	IY
; 41.	   long CurrentSeekNum = 0; 
; 42.	//  long ListTotalSector;   //列表文件总扇区数 
; 43.	    handle  list_fp; 
; 44.	    unsigned int  list_num;
; 45.	    // output8(0x27,IO27Bak&0xfe);            //关DSP中断 
; 46.	  FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份  
	LD	HL,0
	PUSH	HL
	LD	C,2
	LD	DE,Backbuf
	CALL	LWRD FS_Backup
	POP	HL
; 47.	  FS_CD(":");           //返回根目录查找列表  
	LD	DE,?0002
	CALL	LWRD FS_CD
; 48.	  switch(g_music_vars.file_list_type)
	XOR	A
	LD	DE,(g_music_vars+92)
	CALL	LWRD ?C_S_SWITCH_L06
	DEFB	0
	DEFW	4
	DEFW	?0003
	DEFW	?0004
	DEFW	?0005
	DEFW	?0006
	DEFW	?0007
?0004:
; 49.	    {
; 50.	     case 0:
; 51.	      list_fp = FS_FOpen(TIT2FileName2,FS_OPEN_NORMAL); 
	LD	C,A
	LD	DE,TIT2FileName2
	JR	?0026
; 52.	      break;    
?0005:
; 53.	     case 1:
; 54.	      list_fp = FS_FOpen(TPE1FileName2,FS_OPEN_NORMAL);          
	LD	C,A
	LD	DE,TPE1FileName2
	JR	?0026
; 55.	      break;
?0006:
; 56.	     case 2:
; 57.	       list_fp = FS_FOpen(TALBFileName2,FS_OPEN_NORMAL);         
	LD	C,A
	LD	DE,TALBFileName2
	JR	?0026
; 58.	        break;
?0007:
; 59.	     case 3:
; 60.	      list_fp = FS_FOpen(FILENAMELSIT2,FS_OPEN_NORMAL);         
	LD	C,A
	LD	DE,FILENAMELSIT2
?0026:
	CALL	LWRD FS_FOpen
	PUSH	HL
	POP	IY
; 61.	      break;
?0008:
; 62.	     default:
; 63.	      break;
?0003:
; 64.	   } 
; 65.	//  output8(0x27,IO27Bak);  
; 66.	  if(NULL==list_fp)    //列表没找到
	PUSH	IY
	POP	HL
	LD	A,L
	OR	H
	JR	NZ,?0010
?0009:
; 67.	  {
; 68.	//   FS_FClose(list_fp); 
; 69.	   DisplayErrMsg(NOLIST); 
	LD	DE,417
	LD	A,BYTE3 DisplayErrMsg
	LD	HL,LWRD DisplayErrMsg
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 70.	   FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复    
	LD	HL,0
	PUSH	HL
	CALL	LWRD ?0036
	POP	HL
; 71.	   return RESULT_LIST_ERR;   
	LD	HL,106
; 72.	  }
	JP	LWRD ?0023
?0010:
; 73.	  
; 74.	  if(Direct==Music_Next)
	LD	A,(IX+2)
	CP	3
	JR	NZ,?0012
?0011:
; 75.	  {
; 76.	      if(g_music_vars.file_list_num==g_file_list_total-1)
	LD	HL,(g_music_vars+90)
	PUSH	HL
	LD	HL,65535
	LD	BC,(g_file_list_total)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	POP	HL
	AND	A
	SBC	HL,BC
	JR	Z,?0028
?0013:
; 77.	       g_music_vars.file_list_num = 0;                               //最后一个文件读头
; 78.	      else 
?0014:
; 79.	     g_music_vars.file_list_num++;         
	LD	HL,(g_music_vars+90)
	INC	HL
	JR	?0028
?0015:
?0012:
; 80.	  }
; 81.	  
; 82.	  else if(Direct==Music_Prev) 
	CP	4
	JR	NZ,?0018
?0017:
; 83.	  {
; 84.	      if(g_music_vars.file_list_num==0)
	LD	HL,(g_music_vars+90)
	LD	A,L
	OR	H
	JR	NZ,?0020
?0019:
; 85.	        g_music_vars.file_list_num = g_file_list_total-1; //从头跳到最后  
	LD	HL,65535
	LD	BC,(g_file_list_total)
	ADD	HL,BC
	JR	?0028
; 86.	      else
?0020:
; 87.	       g_music_vars.file_list_num--;                            
	DEC	HL
?0028:
	LD	(g_music_vars+90),HL
?0021:
; 88.	   }
; 89.	   else                                                 //只有在选择上一首和下一首歌时才需要选择读列表文件
	JR	?0022
?0018:
; 90.	   {
; 91.	
; 92.	     FS_FClose(list_fp); 
	PUSH	IY
	POP	DE
	CALL	LWRD FS_FClose
; 93.	     FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复     
	LD	HL,0
	PUSH	HL
	CALL	LWRD ?0036
	POP	HL
; 94.	     return FALSE;   
	LD	HL,0
; 95.	   }
	JR	?0023
?0022:
?0016:
; 96.	//  ListTotalSector =  FS_GetFileLen(list_fp) ;   //列表文件总扇区数;
; 97.	    CurrentSeekNum  = (long) (g_music_vars.file_list_num/7);  //取下一个列表文件偏移
	LD	E,L
	LD	D,H
	LD	BC,7
	CALL	LWRD ?US_DIV_L02
	EX	DE,HL
	LD	C,B
; 98.	  FS_FSeek( CurrentSeekNum, SEEK_SET, list_fp);   //Seek 到要取文件的位置
	PUSH	IY
	LD	E,B
	PUSH	DE
	EX	DE,HL
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
; 99.	  FS_FRead(SelectListBuffer,1,list_fp); 
	PUSH	IY
	LD	C,1
	LD	DE,SelectListBuffer
	CALL	LWRD FS_FRead
	POP	HL
; 100.	  list_num = g_music_vars.file_list_num%7;                  //取文件在列表中的偏移
	LD	DE,(g_music_vars+90)
	LD	BC,7
	CALL	LWRD ?US_MOD_L02
; 101.	  memcpy(&g_music_vars.location,&SelectListBuffer[list_num*71+30],OneLocationBYTE); 
	LD	HL,SelectListBuffer+30
	LD	C,71
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	LD	DE,g_music_vars+7
	LD	C,41
	LDIR
; 102.	  FS_FClose(list_fp); 
	PUSH	IY
	POP	DE
	CALL	LWRD FS_FClose
; 103.	  FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复  
	PUSH	BC
	CALL	LWRD ?0036
	POP	HL
; 104.	  return TRUE;         
	LD	HL,1
; 105.	                     
; 106.	}
?0023:
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0036:
	LD	C,2
	LD	DE,Backbuf
	JP	LWRD FS_Restore
	RSEG	CSTR
?0002:
	DEFB	':'
	DEFB	0
	RSEG	APC_SELECT_LIST
TIT2FileName2:
	DEFB	'TIT2    BIN'
	DEFB	0
TPE1FileName2:
	DEFB	'TPE1    BIN'
	DEFB	0
TALBFileName2:
	DEFB	'TALB    BIN'
	DEFB	0
FILENAMELSIT2:
	DEFB	'FILENAMEBIN'
	DEFB	0
	RSEG	APD_SELECT_LIST
SelectListBuffer:
	DEFS	512
Backbuf:
	DEFS	32
	END

⌨️ 快捷键说明

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