sub_function1.s01

来自「MP3 整个 SDK」· S01 代码 · 共 381 行

S01
381
字号
	NAME	sub_function1(17)
	RSEG	AP_UI_PLY(0)
	EXTERN	BankSwitch
	PUBLIC	ChangeMusic
	EXTERN	CheckMusicType
	EXTERN	ClearTimePara
	PUBLIC	DealMusicFileEnd
	EXTERN	GetInformation
	EXTERN	PlayStatus
	PUBLIC	SelectCurMusic
	EXTERN	ToNextMusic
	EXTERN	ap_get_message
	EXTERN	fselGetLocation
	EXTERN	fselGetNextFile
	EXTERN	fselGetNo
	EXTERN	fselGetPrevFile
	EXTERN	fselGetTotal
	EXTERN	fselInit
	EXTERN	fselSetMode
	EXTERN	g_TagInfoBuf
	EXTERN	g_amv_vars
	EXTERN	g_currentMusicType
	EXTERN	g_musicamount
	EXTERN	g_musicsequence
	EXTERN	g_result
	EXTERN	make_dirname
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?C_S_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	AP_UI_PLY
DealMusicFileEnd:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        This program demostrates how to build an AP
; 5.	*
; 6.	*        (c) Copyright Actions Co,Ld.
; 7.	*
; 8.	*  $Id: sub_function1.c,v 1.1.1.1 2006/05/22 03:24:02 selina Exp $
; 9.	*******************************************************************************
; 10.	*/
; 11.	#include "ap_amv.h"
; 12.	
; 13.	#pragma codeseg(AP_UI_PLY)
; 14.	
; 15.	extern void make_dirname(void);
; 16.	
; 17.	
; 18.	//===========[放到文件尾时的处理]===============
; 19.	int DealMusicFileEnd( char DisMod)
; 20.	{
	PUSH	DE
; 21.	
; 22.	        if (PlayStatus == FBPlaySta)
	LD	A,(PlayStatus)
	CP	4
	JR	NZ,?0003
?0002:
?0005:
; 23.	        {
; 24.	            while ( ap_get_message() != (AP_KEY_PREV | AP_KEY_UP) );
	CALL	LWRD ap_get_message
	CP	37
	JR	NZ,?0002
?0006:
?0004:
; 25.	            SelectCurMusic();
	LD	A,BYTE3 SelectCurMusic
	LD	HL,LWRD SelectCurMusic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	JR	?0017
?0003:
; 26.	
; 27.	        }
; 28.	        else if (PlayStatus == FFPlaySta)
	CP	3
	JR	NZ,?0009
?0008:
?0011:
; 29.	        {
; 30.	            while ( ap_get_message() != (AP_KEY_NEXT | AP_KEY_UP) );
	CALL	LWRD ap_get_message
	CP	38
	JR	NZ,?0008
?0012:
?0010:
; 31.	            g_result = ToNextMusic(Play_key);
	LD	E,2
	LD	A,BYTE3 ToNextMusic
	LD	HL,LWRD ToNextMusic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	(g_result),HL
; 32.	            if(g_result == RESULT_UI_STOP) return g_result;
	LD	A,102
	XOR	L
	OR	H
	JR	NZ,?0017
?0013:
	JR	?0018
; 33.	        }
?0014:
; 34.	
; 35.	        else
?0009:
; 36.	        {
; 37.	            g_result = ToNextMusic(Play_play);
	LD	E,1
	LD	A,BYTE3 ToNextMusic
	LD	HL,LWRD ToNextMusic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	(g_result),HL
; 38.	            if(g_result == RESULT_UI_STOP) return g_result;
	LD	A,102
	XOR	L
	OR	H
	JR	Z,?0018
?0016:
; 39.	        }
?0017:
?0015:
?0007:
; 40.	
; 41.	        return NULL;
	LD	HL,0
; 42.	}
?0018:
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
ChangeMusic:
; 43.	//================================================
; 44.	
; 45.	
; 46.	/*
; 47.	*******************************************************************************
; 48.	* Description : 换曲时要做的选曲,初始化动作
; 49.	* Arguments  :
; 50.	* Returns     :真时表示可继续放,假时表示要停止放(播放状态)
; 51.	* Notes       :
; 52.	*******************************************************************************
; 53.	*/
; 54.	bool ChangeMusic( BYTE Direct, Music_sel_mod_t mod )
; 55.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 56.	    bool result;
; 57.	
; 58.	   //清 WATCH_DOG
; 59.	    output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 60.	
; 61.	    ClearTimePara();
	LD	A,BYTE3 ClearTimePara
	LD	HL,LWRD ClearTimePara
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 62.	    g_TagInfoBuf[0] = 0x0;
	XOR	A
	LD	(g_TagInfoBuf),A
; 63.	    BankSwitch((unsigned long)FSELInit >> 16);
	LD	B,A
	LD	E,BYTE3 fselInit
	LD	C,B
	CALL	LWRD BankSwitch
; 64.	
; 65.	    if (mod == Play_key)
	LD	HL,4
	ADD	HL,SP
	LD	B,(HL)
	DEC	B
	DEC	B
	JR	NZ,?0020
?0019:
; 66.	    {//play 按键的情况
; 67.	        switch (g_amv_vars.repeat_mode)
	LD	A,(g_amv_vars+3)
	CP	3
	JR	C,?0051
	CP	6
	JR	NZ,?0026
?0022:
; 68.	        {
; 69.	        case FSEL_ALL_REPEATONE:
; 70.	        case FSEL_ALL_SEQUENCE:
; 71.	        case FSEL_DIR_SEQUENCE:
; 72.	        case FSEL_DIR_INTRO:
; 73.	            FSELSetMode( FSEL_ALL_REPEATALL );//PLAY 时按键
	JR	?0051
; 74.	            break;
?0023:
; 75.	
; 76.	
; 77.	        default:
; 78.	            FSELSetMode(g_amv_vars.repeat_mode);//
; 79.	            break;
?0021:
?0020:
; 80.	        }
; 81.	    }
; 82.	    else if (mod == Stop_key)
	XOR	A
	OR	(HL)
	JR	NZ,?0026
?0025:
; 83.	    {//
; 84.	        FSELSetMode(FSEL_ALL_REPEATALL);//STOP时按键
?0051:
	LD	E,4
	JR	?0047
; 85.	    }
; 86.	    else
?0026:
; 87.	    {//正常播放的情况
; 88.	        FSELSetMode(g_amv_vars.repeat_mode);
	LD	DE,(g_amv_vars+3)
?0047:
	LD	A,BYTE3 fselSetMode
	LD	HL,LWRD fselSetMode
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0027:
?0024:
; 89.	    }
; 90.	
; 91.	    switch (Direct)
	LD	HL,2
	ADD	HL,SP
	LD	E,(HL)
	CALL	LWRD ?C_S_SWITCH_L06
	DEFB	0
	DEFW	5
	DEFW	?0034
	DEFW	?0028
	DEFW	?0028
	DEFW	?0031
	DEFW	?0032
	DEFW	?0033
?0029:
; 92.	    {
; 93.	        case Music_Reset_Head:
; 94.	            break;
?0030:
; 95.	
; 96.	        case Music_Reset_End:
; 97.	            break;
?0031:
; 98.	
; 99.	        case Music_Cur:
; 100.	            result = TRUE;
	DEC	HL
	DEC	HL
	LD	(HL),1
; 101.	            break;
	JR	?0028
?0032:
; 102.	
; 103.	        case Music_Next:
; 104.	            result = FSELGetNext(g_amv_vars.location.filename);
	LD	DE,g_amv_vars+31
	LD	A,BYTE3 fselGetNextFile
	LD	HL,LWRD fselGetNextFile
	JR	?0048
; 105.	            break;
?0033:
; 106.	
; 107.	        case Music_Prev:
; 108.	            result = FSELGetPrev(g_amv_vars.location.filename);
	LD	DE,g_amv_vars+31
	LD	A,BYTE3 fselGetPrevFile
	LD	HL,LWRD fselGetPrevFile
?0048:
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	PUSH	HL
	LD	HL,2
	ADD	HL,SP
	POP	BC
	LD	(HL),C
; 109.	            break;
	JR	?0028
?0034:
; 110.	
; 111.	        default:
; 112.	            return FALSE;
	LD	L,C
; 113.	    }
	JR	?0037
?0028:
; 114.	
; 115.	    if (!result)
	LD	HL,0
	ADD	HL,SP
	XOR	A
	OR	(HL)
	JR	NZ,?0036
?0035:
; 116.	    {
; 117.	        return result;
	LD	L,A
; 118.	    }
	JR	?0037
?0036:
; 119.	    //取当前歌曲数状态
; 120.	    g_musicamount = (WORD)FSELGetTotal();
	LD	A,BYTE3 fselGetTotal
	LD	HL,LWRD fselGetTotal
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	A,L
	LD	(g_musicamount),A
; 121.	    g_musicsequence = (WORD)FSELGetNo();
	LD	A,BYTE3 fselGetNo
	LD	HL,LWRD fselGetNo
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	A,L
	LD	(g_musicsequence),A
; 122.	    FSELSetMode(g_amv_vars.repeat_mode);
	LD	DE,(g_amv_vars+3)
	LD	A,BYTE3 fselSetMode
	LD	HL,LWRD fselSetMode
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 123.	
; 124.	    //确保选择器与AP的目录对应
; 125.	    fselGetLocation(& g_amv_vars.location);
	LD	DE,g_amv_vars+5
	LD	A,BYTE3 fselGetLocation
	LD	HL,LWRD fselGetLocation
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 126.	    //获取目录的长名
; 127.	    make_dirname();
	LD	A,BYTE3 make_dirname
	LD	HL,LWRD make_dirname
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 128.	
; 129.	    //检测Music的类型
; 130.	    g_currentMusicType = CheckMusicType(g_amv_vars.location.filename);
	LD	DE,g_amv_vars+31
	LD	A,BYTE3 CheckMusicType
	LD	HL,LWRD CheckMusicType
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	A,L
	LD	(g_currentMusicType),A
; 131.	    //找歌词文件并打开
; 132.	
; 133.	   //清 WATCH_DOG
; 134.	    output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 135.	
; 136.	    return TRUE;
	LD	L,1
; 137.	}
?0037:
	POP	AF
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
SelectCurMusic:
; 138.	
; 139.	//===================重选当前歌曲=========================
; 140.	void SelectCurMusic(void)
; 141.	{
	PUSH	BC
	PUSH	DE
; 142.	        ChangeMusic(Music_Cur, Play_play); //播放当前歌曲
	LD	C,1
	LD	E,2
	LD	A,BYTE3 ChangeMusic
	LD	HL,LWRD ChangeMusic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 143.	        GetInformation();          //取文件信息
	LD	A,BYTE3 GetInformation
	LD	HL,LWRD GetInformation
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 144.	}
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
; 145.	//========================================================
	END

⌨️ 快捷键说明

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