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

📄 tryplaying.s01

📁 5807收音机模块用于炬力平台
💻 S01
字号:
	NAME	tryplaying(17)
	RSEG	CODE_2(0)
	RSEG	CSTR(0)
	EXTERN	AutoTabNum
	EXTERN	ClearScreen
	EXTERN	FMAutoTab
	EXTERN	FMStatus
	EXTERN	GetBattery
	EXTERN	PutS
	EXTERN	ResShowPic
	EXTERN	SetTextPos
	PUBLIC	TryPlayingHandle
	EXTERN	UpdateScreen
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	fmSendCommand
	EXTERN	g_comval
	EXTERN	m_FMPlaystatus
	EXTERN	radio_param
	EXTERN	slider
	EXTERN	ui_show_batt
	EXTERN	ui_slider
	PUBLIC	volume_callback2
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?US_DIV_L02
	EXTERN	?SS_DIV_L02
	EXTERN	?S_MUL_L02
	EXTERN	?S_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	CODE_2
volume_callback2:
; 1.	/*
; 2.	 *******************************************************************************
; 3.	 *                ACTOS AP
; 4.	 *        main ap of sdk 3.0
; 5.	 *
; 6.	 *        (c) Copyright, Actions Co,Ld.
; 7.	 *             All Right Reserved
; 8.	 *
; 9.	 *******************************************************************************
; 10.	 */
; 11.	
; 12.	#pragma codeseg(CODE_2)
; 13.	
; 14.	#include "ap_radio.h"
; 15.	#include "actos.h"
; 16.	
; 17.	extern slider_t slider;
; 18.	extern comval_t F_comval;
; 19.	extern WORD FMStationTab[40]; // 前20个是US, 后20个是JP.
; 20.	extern fm_play_status_t FMStatus;
; 21.	extern FMRADIO_param_t radio_param;
; 22.	extern fm_play_status_t m_FMPlaystatus;
; 23.	
; 24.	extern WORD FMAutoTab[20]; // 全自动收台,预存台.
; 25.	extern BYTE AutoTabNum; // 预存台数.
; 26.	
; 27.	void volume_callback2(int Vol) //音量设置的CALLBACK函数
; 28.	{
	PUSH	BC
	PUSH	IX
	PUSH	DE
	POP	IX
; 29.	    //实时改变音量的值
; 30.	    FMStatus.vol_display = Vol;
	LD	A,E
	LD	(FMStatus+8),A
; 31.	    FMStatus.volume = Vol * 31 / g_comval.VolumeMax;
	LD	BC,(g_comval+31)
	LD	B,0
	PUSH	BC
	LD	DE,31
	PUSH	IX
	POP	BC
	CALL	LWRD ?S_MUL_L02
	POP	BC
	CALL	LWRD ?SS_DIV_L02
	LD	A,E
	LD	(FMStatus+6),A
; 32.	    fmSendCommand(MC_SETVOLUME, FMStatus.volume);
	LD	C,A
	CALL	LWRD ?0047
; 33.	    if (FMStatus.volume == 0)
	LD	A,(FMStatus+6)
	OR	A
	JR	NZ,?0003
?0002:
; 34.	        fmSendCommand(MC_MUTE, SetMUTE);
	LD	BC,1
	JR	?0040
; 35.	    else
?0003:
; 36.	        fmSendCommand(MC_MUTE, releaseMUTE);
	LD	BC,0
?0040:
	LD	E,12
	CALL	LWRD ?0048
?0004:
; 37.	}
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0047:
	LD	B,0
	LD	E,64
?0048:
	LD	A,BYTE3 fmSendCommand
	LD	HL,LWRD fmSendCommand
	JP	LWRD ?BANK_CALL_DIRECT_L08
TryPlayingHandle:
; 38.	/*
; 39.	 ********************************************************************************
; 40.	 * Description : 试播放5秒钟
; 41.	 *
; 42.	 * Arguments   :
; 43.	 *
; 44.	 * Returns     : RESULT_RADIO:PLAY和MODE键,  RESULT_IGNORE:NEXT和LAST键
; 45.	 其它为热键
; 46.	 *
; 47.	 * Notes       :
; 48.	 *
; 49.	 ********************************************************************************
; 50.	 */
; 51.	int TryPlayingHandle(void)
; 52.	{
	PUSH	BC
	PUSH	DE
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LD	HL,65526
	ADD	HL,SP
	LD	SP,HL
; 53.	    int key, play_time = 12;
; 54.	    int flash_point = 1;
; 55.	    bool loop = TRUE;
; 56.	    int k, i;
; 57.	    if (FMStatus.mode == 0)
	LD	(IX-4),12
	LD	(IX-3),0
	LD	(IX-6),1
	LD	(IX-5),0
	LD	(IX-2),1
?0005:
; 58.	    {
; 59.	        k = (FMStatus.freq) *100/ 200;
; 60.	    }
; 61.	    else
?0006:
; 62.	    {
; 63.	        k = (FMStatus.freq)*100 / 200;
	LD	BC,(FMStatus+1)
	LD	DE,100
	CALL	LWRD ?S_MUL_L02
	LD	BC,200
	CALL	LWRD ?US_DIV_L02
	LD	(IX-10),E
	LD	(IX-9),D
?0007:
; 64.	    }
; 65.	    fmSendCommand(MC_PLAY, 0);
	LD	C,B
	LD	E,4
	CALL	LWRD ?0048
; 66.	    fmSendCommand(MC_SETVOLUME, FMStatus.volume);
	LD	BC,(FMStatus+6)
	CALL	LWRD ?0047
?0009:
; 67.	
; 68.	    while (loop)
	XOR	A
	OR	(IX-2)
	JP	Z,?0008
?0010:
; 69.	    {
; 70.	        key = ap_get_message();
	CALL	LWRD ap_get_message
	LD	C,A
	LD	B,0
	PUSH	BC
	POP	IY
; 71.	        switch (key)
	LD	E,C
	LD	D,B
	CALL	LWRD ?S_V_SWITCH_L06
	DEFW	8
	DEFW	3
	DEFW	4
	DEFW	28
	DEFW	29
	DEFW	33
	DEFW	37
	DEFW	38
	DEFW	39
	DEFW	?0029
	DEFW	?0014
	DEFW	?0013
	DEFW	?0013
	DEFW	?0014
	DEFW	?0009
	DEFW	?0015
	DEFW	?0028
	DEFW	?0028
?0012:
; 72.	        {
; 73.	            case AP_MSG_STANDBY:
; 74.	            //do nothing
; 75.	            break;
?0013:
; 76.	            case AP_KEY_NEXT | AP_KEY_UP:
; 77.	            case AP_KEY_PREV | AP_KEY_UP: // 停止试播
; 78.	            return RESULT_IGNORE;
	LD	HL,48
; 79.	            case AP_KEY_PLAY | AP_KEY_UP:
	JP	LWRD ?0038
?0014:
; 80.	            case AP_KEY_MODE | AP_KEY_UP: // 保存电台, 返回播放界面.
; 81.	            loop = FALSE;
; 82.	            key = RESULT_RADIO;
	LD	(IX-2),B
	LD	IY,5
; 83.	            break;
	JR	?0009
?0015:
; 84.	            case AP_MSG_RTC: // 时间记数,闪烁箭头.
; 85.	            ui_show_batt(GetBattery(), g_comval.BatteryType);
	LD	BC,(g_comval+15)
	CALL	LWRD GetBattery
	LD	E,A
	LD	A,BYTE3 ui_show_batt
	LD	HL,LWRD ui_show_batt
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 86.	            play_time--;
	LD	L,(IX-4)
	LD	H,(IX-3)
	DEC	HL
	LD	(IX-4),L
	LD	(IX-3),H
; 87.	            if (play_time <= 0)
	LD	C,L
	LD	B,H
	LD	HL,0
	OR	128
	SBC	HL,BC
	JP	PO,?0041
	XOR	H
?0041:
	JP	M,?0017
?0016:
; 88.	            {
; 89.	                loop = FALSE;
; 90.	                key = 0;
	LD	(IX-2),0
	LD	IY,0
?0017:
; 91.	            }
; 92.	            if (flash_point) // 箭头闪烁
	LD	A,(IX-6)
	OR	(IX-5)
	LD	A,(FMStatus+5)
	JR	Z,?0019
?0018:
; 93.	            {
; 94.	                if (FMStatus.mode == 0)
	OR	A
	LD	C,16
	PUSH	BC
	LD	A,(IX-10)
	JR	NZ,?0021
?0020:
; 95.	                {
; 96.	                    ResShowPic(DWNARROW, 11 - 5 + k, 16); //显示箭头
	ADD	A,6
	JR	?0044
; 97.	                    //ResShowPic(FQBAR,0,24);                    //显示US频率条
; 98.	                }
; 99.	                else
?0021:
; 100.	                {
; 101.	                    ResShowPic(DWNARROW, 30 - 6 + k, 16); //显示箭头
	ADD	A,24
?0044:
	LD	C,A
	LD	DE,94
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
?0022:
; 102.	                    //ResShowPic(FQBAR2,0,24);                    //显示JP频率条
; 103.	                }
; 104.	                flash_point = 0;
	XOR	A
	LD	(IX-6),A
	LD	(IX-5),A
; 105.	            }
; 106.	            else // 清除箭头
	JR	?0023
?0019:
; 107.	            {
; 108.	                if (FMStatus.mode == 0)
	OR	A
	LD	C,16
	LD	A,(IX-10)
	JR	NZ,?0025
?0024:
; 109.	                {
; 110.	                    SetTextPos(11 - 5 + k, 16);
	ADD	A,6
	JR	?0045
; 111.	                }
; 112.	                else
?0025:
; 113.	                {
; 114.	                    SetTextPos(30 - 6 + k, 16);
	ADD	A,24
?0045:
	LD	E,A
	CALL	LWRD SetTextPos
?0026:
; 115.	                }
; 116.	                PutS("  ", 2);
	LD	C,2
	LD	DE,?0027
	CALL	LWRD PutS
; 117.	                flash_point = 1;
	LD	(IX-6),1
	LD	(IX-5),0
?0023:
; 118.	            }
; 119.	            UpdateScreen(NULL);
	LD	DE,0
	CALL	LWRD UpdateScreen
; 120.	            break;
	JP	LWRD ?0009
?0028:
; 121.	            case AP_KEY_VOLADD: // 音量调节.
; 122.	            case AP_KEY_VOLSUB:
; 123.	            ClearScreen(NULL);
	LD	E,B
	LD	D,B
	CALL	LWRD ClearScreen
; 124.	            ResShowPic(VOLUMEBK, 0, 0);
	LD	C,B
	PUSH	BC
	LD	DE,504
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 125.	            slider.max = g_comval.VolumeMax;
	LD	BC,(g_comval+31)
	LD	B,0
	LD	(slider+2),BC
; 126.	            slider.min = 0;
	LD	L,B
	LD	H,B
	LD	(slider),HL
; 127.	            slider.step = 1;
	INC	HL
	LD	(slider+6),HL
; 128.	            FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
	LD	BC,(FMStatus+8)
	LD	B,H
	LD	DE,31
	CALL	LWRD ?S_MUL_L02
	LD	BC,(g_comval+31)
	LD	B,H
	CALL	LWRD ?SS_DIV_L02
	LD	A,E
	LD	(FMStatus+6),A
; 129.	            slider.value = FMStatus.vol_display;
	LD	BC,(FMStatus+8)
	LD	B,H
	LD	(slider+4),BC
; 130.	            key = ui_slider(&slider, volume_callback2); //音量滚动条显示
	LD	C,BYTE3 volume_callback2
	PUSH	BC
	LD	HL,LWRD volume_callback2
	PUSH	HL
	LD	DE,slider
	LD	A,BYTE3 ui_slider
	LD	HL,LWRD ui_slider
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
	PUSH	HL
	POP	IY
; 131.	            m_FMPlaystatus.vol_display = FMStatus.vol_display;
	LD	A,(FMStatus+8)
	LD	(m_FMPlaystatus+8),A
; 132.	            FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
	LD	C,A
	LD	DE,31
	CALL	LWRD ?S_MUL_L02
	LD	BC,(g_comval+31)
	LD	B,0
	CALL	LWRD ?SS_DIV_L02
	LD	A,E
	LD	(FMStatus+6),A
; 133.	            fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
	LD	BC,FMStatus
	LD	E,131
	CALL	LWRD ?0048
; 134.	            loop = FALSE;
	JR	?0046
; 135.	            break;
?0029:
; 136.	            default: //热键处理
; 137.	            key = ap_handle_hotkey(key);
	PUSH	IY
	POP	HL
	LD	E,L
	CALL	LWRD ap_handle_hotkey
	LD	C,A
	PUSH	BC
	POP	IY
; 138.	            if (key != 0)
	LD	A,C
	OR	A
	JP	Z,?0009
?0030:
; 139.	            {
; 140.	                loop = FALSE;
?0046:
	LD	(IX-2),0
?0031:
?0011:
	JP	LWRD ?0009
?0008:
; 141.	            }
; 142.	        }
; 143.	    }
; 144.	    //fmSendCommand(MC_MUTE,SetMUTE);
; 145.	    fmSendCommand(MC_GETFREQ, (int) &k); // 保存电台
	LD	L,A
	LD	H,A
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,17
	CALL	LWRD ?0048
; 146.	    FMAutoTab[AutoTabNum] = k;
	LD	HL,(AutoTabNum)
	LD	H,0
	ADD	HL,HL
	LD	BC,FMAutoTab
	ADD	HL,BC
	LD	C,(IX-10)
	LD	(HL),C
	LD	B,(IX-9)
	INC	HL
	LD	(HL),B
; 147.	    AutoTabNum++;
	LD	HL,AutoTabNum
	INC	(HL)
; 148.	    for (i = AutoTabNum; i < 20; i++)
	LD	BC,(AutoTabNum)
	LD	B,0
	LD	(IX-8),C
	LD	(IX-7),B
?0033:
	LD	BC,32788
	LD	L,(IX-8)
	LD	H,(IX-7)
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0032
?0034:
; 149.	    {
; 150.	        if (radio_param.param1[i] == k) // 删除重复的电台.
	LD	L,(IX-8)
	LD	H,(IX-7)
	ADD	HL,HL
	LD	BC,(radio_param)
	ADD	HL,BC
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	LD	C,(IX-10)
	LD	B,(IX-9)
	AND	A
	SBC	HL,BC
	JR	NZ,?0037
?0036:
; 151.	        {
; 152.	            radio_param.param1[i] = 0;
	LD	L,(IX-8)
	LD	H,(IX-7)
	ADD	HL,HL
	LD	BC,(radio_param)
	ADD	HL,BC
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
?0037:
	INC	(IX-8)
	JR	NZ,?0033
	INC	(IX-7)
	JR	?0033
?0032:
; 153.	            //  FMStatus.station_count--;
; 154.	        }
; 155.	    }
; 156.	    return key;
	PUSH	IY
	POP	HL
; 157.	}
?0038:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
	RSEG	CSTR
?0027:
	DEFB	'  '
	DEFB	0
	END

⌨️ 快捷键说明

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