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

📄 basal_fmradio.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	basal_fmradio(17)
	RSEG	MOD_BS_FMRADIO(0)
	RSEG	RCODE(0)
	EXTERN	BankSwitch
	EXTERN	FM_Exit
	EXTERN	FM_GetStatus
	EXTERN	FM_Init
	EXTERN	FM_MUTE
	EXTERN	FM_Search
	EXTERN	FM_SetFreq
	EXTERN	FM_Standby
	EXTERN	FM_VolumeSet
	EXTERN	abs
	PUBLIC	d_FMStatus
	PUBLIC	disable_hosc
	PUBLIC	fmSendCommand
	PUBLIC	m_FMPlaystatus
	PUBLIC	m_FMStationTab
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SL_RSH_L03
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	MOD_BS_FMRADIO
fmSendCommand:
; 1.	/*
; 2.	 *******************************************************************************
; 3.	 *                ACTOS AP
; 4.	 *        FM tunner basal module implementation
; 5.	 *
; 6.	 *        (c) Copyright Actions Co,Ld.
; 7.	 *
; 8.	 *******************************************************************************
; 9.	 */
; 10.	#include "actos.h"
; 11.	#include "fmradio.h"     
; 12.	//#include "chip_cfg.h" 
; 13.	//#include "../inc/typeext.h"
; 14.	//#include "../inc/mmcmd.h"
; 15.	//---公共变量区
; 16.	
; 17.	
; 18.	//extern WORD FMStationTab[20];
; 19.	//WORD            G_FMStationTab[20];
; 20.	//fm_play_status_t    G_FMPlaystatus;
; 21.	
; 22.	
; 23.	//-----basal module ----
; 24.	#pragma memory=dataseg(RCODE)
; 25.	
; 26.	//电台频率对照表(注:频率范围87M-108M 以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
; 27.	
; 28.	WORD m_FMStationTab[20]; 
; 29.	fm_play_status_t m_FMPlaystatus; //当前电台信息
; 30.	FMStatus_Tab_t d_FMStatus; //从FM硬件读取的当前频率和声道信息
; 31.	char disable_hosc;
; 32.	
; 33.	
; 34.	#pragma memory=default
; 35.	//extern WORD SearchFreq;
; 36.	//extern WORD SetFreq;
; 37.	
; 38.	#pragma codeseg(MOD_BS_FMRADIO)
; 39.	
; 40.	BOOL fmSendCommand(BYTE cmd, int param)
; 41.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
; 42.	    int i;
; 43.	    uchar k;
; 44.	    uint Tempfreq; 
; 45.	
; 46.	//    if( (0x7f34 < m_FMPlaystatus.freq) && ( m_FMPlaystatus.freq < 0x80c4) ) disable_hosc = 1;
; 47.	//    else disable_hosc = 0;
; 48.	//    
; 49.	
; 50.	    switch (cmd)
	CALL	LWRD ?C_V_SWITCH_L06
	DEFW	18
	DEFB	1
	DEFB	2
	DEFB	4
	DEFB	7
	DEFB	9
	DEFB	10
	DEFB	11
	DEFB	12
	DEFB	17
	DEFB	18
	DEFB	64
	DEFB	68
	DEFB	69
	DEFB	83
	DEFB	85
	DEFB	86
	DEFB	131
	DEFB	132
	DEFW	?0000
	DEFW	?0093
	DEFW	?0084
	DEFW	?0101
	DEFW	?0094
	DEFW	?0080
	DEFW	?0083
	DEFW	?0082
	DEFW	?0081
	DEFW	?0112
	DEFW	?0111
	DEFW	?0106
	DEFW	?0060
	DEFW	?0059
	DEFW	?0034
	DEFW	?0003
	DEFW	?0057
	DEFW	?0110
	DEFW	?0001
?0001:
; 51.	    {
; 52.	        case MC_OPEN:
; 53.	        BankSwitch(address_24_of(FM_Init) >> 16);
	LD	HL,FM_Init
	LD	C,BYTE3 FM_Init
	CALL	LWRD ?0141
; 54.	        return FM_Init(m_FMPlaystatus.mode, (BYTE) param);
	LD	C,(IX-2)
	LD	DE,(m_FMPlaystatus+5)
	CALL	LWRD FM_Init
	JP	LWRD ?0126
; 55.	        case MC_PLAY:
?0002:
; 56.	        BankSwitch(address_24_of(FM_SetFreq) >> 16);
; 57.	           Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 58.	           FM_SetFreq(Tempfreq);                 
; 59.	        break;
?0003:
; 60.	
; 61.	        case MC_STEP:
; 62.	        if (m_FMPlaystatus.station_count == 0)
	LD	A,(m_FMPlaystatus+4)
	OR	A
	JP	Z,?0128
?0004:
; 63.	            return FALSE;
?0005:
; 64.	        k = 0;
	LD	(IX-8),0
; 65.	        switch (param)
	LD	A,1
	XOR	C
	OR	B
	JR	NZ,?0020
?0007:
; 66.	        {
; 67.	            case UP: //找到下一电台频率
; 68.	            if (m_FMPlaystatus.station == m_FMPlaystatus.station_count)
	LD	A,(m_FMPlaystatus+4)
	LD	B,A
	LD	A,(m_FMPlaystatus+3)
	CP	B
	JR	NZ,?0009
?0008:
; 69.	                m_FMPlaystatus.station = 0;
	XOR	A
	LD	(m_FMPlaystatus+3),A
?0009:
; 70.	            m_FMPlaystatus.station++;
	LD	HL,m_FMPlaystatus+3
	INC	(HL)
; 71.	            for (i = 0; i < 20; i++)
	LD	IY,0
?0011:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0010
?0012:
; 72.	            {
; 73.	                if (m_FMStationTab[i] != 0)
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	LD	A,(HL)
	INC	HL
	OR	(HL)
	JR	Z,?0017
?0014:
; 74.	                {
; 75.	                    k++;
	INC	(IX-8)
; 76.	                    if (k == m_FMPlaystatus.station)
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-8)
	CP	B
	JR	Z,?0010
?0016:
; 77.	                        break;
?0017:
?0015:
	INC	IY
	JR	?0011
?0010:
; 78.	                }
; 79.	
; 80.	            }
; 81.	            if (i >= 20) // 如没有找到电台,重新设置电台数
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0032
?0018:
; 82.	            {
; 83.	                m_FMPlaystatus.station_count = k - 1;
	LD	A,(IX-8)
	ADD	A,255
	LD	(m_FMPlaystatus+4),A
; 84.	                m_FMPlaystatus.station = 1;
	LD	A,1
	JR	?0129
?0019:
; 85.	            }
; 86.	            break;
?0020:
	LD	A,C
	OR	B
	JR	NZ,?0032
; 87.	            case DOWN: //找到上一电台频率
; 88.	            if (m_FMPlaystatus.station == 1)
	LD	A,(m_FMPlaystatus+3)
	DEC	A
	JR	NZ,?0022
?0021:
; 89.	                m_FMPlaystatus.station = m_FMPlaystatus.station_count + 1;
	LD	A,(m_FMPlaystatus+4)
	INC	A
	LD	(m_FMPlaystatus+3),A
?0022:
; 90.	            m_FMPlaystatus.station--;
	LD	HL,m_FMPlaystatus+3
	DEC	(HL)
; 91.	            for (i = 0; i < 20; i++)
	LD	IY,0
?0024:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0023
?0025:
; 92.	            {
; 93.	                if (m_FMStationTab[i] != 0)
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	LD	A,(HL)
	INC	HL
	OR	(HL)
	JR	Z,?0030
?0027:
; 94.	                {
; 95.	                    k++;
	INC	(IX-8)
; 96.	                    if (k == m_FMPlaystatus.station)
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-8)
	CP	B
	JR	Z,?0023
?0029:
; 97.	                        break;
?0030:
?0028:
	INC	IY
	JR	?0024
?0023:
; 98.	                }
; 99.	            }
; 100.	            if (i >= 20) // 如没有找到电台,重新设置电台数
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0032
?0031:
; 101.	            {
; 102.	                m_FMPlaystatus.station = m_FMPlaystatus.station_count = k + 1;
	LD	B,(IX-8)
	INC	B
	LD	A,B
	LD	(m_FMPlaystatus+4),A
?0129:
	LD	(m_FMPlaystatus+3),A
?0032:
; 103.	            }
; 104.	            break;
?0033:
; 105.	            default:
; 106.	            break;
?0006:
; 107.	        }
; 108.	            m_FMPlaystatus.freq = m_FMStationTab[i];
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	JR	?0118
; 109.	        BankSwitch(address_24_of(FM_SetFreq) >> 16);
; 110.	           Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 111.	           FM_SetFreq(Tempfreq); 
; 112.	        return TRUE;
; 113.	
; 114.	        case MC_STEPGRID:
?0034:
; 115.	        switch (param)
	LD	A,1
	XOR	C
	OR	B
	JR	NZ,?0047
?0036:
; 116.	        {
; 117.	            case UP:
; 118.	               if(((m_FMPlaystatus.freq+1)>210)&&(m_FMPlaystatus.mode==0))
	LD	BC,(m_FMPlaystatus+1)
	INC	BC
	LD	HL,210
	SBC	HL,BC
	JR	NC,?0038
	LD	A,(m_FMPlaystatus+5)
	OR	A
	JR	Z,?0130
?0040:
?0039:
?0037:
; 119.	                   m_FMPlaystatus.freq=0;
?0038:
; 120.	               else if(((m_FMPlaystatus.freq+1)>140)&&(m_FMPlaystatus.mode==1))
	LD	HL,140
	AND	A
	SBC	HL,BC
	JR	NC,?0043
	LD	A,(m_FMPlaystatus+5)
	DEC	A
	JR	NZ,?0043
?0045:
?0044:
?0042:
; 121.	               m_FMPlaystatus.freq=0;
?0130:
	LD	L,A
	LD	H,A
	JR	?0118
; 122.	            else
?0043:
; 123.	               {
; 124.	                   m_FMPlaystatus.freq += 1;
	LD	L,C
	LD	H,B
	JR	?0118
?0046:
?0041:
; 125.	               }                                                            
; 126.	            break;
?0047:
	LD	A,C
	OR	B
	JR	NZ,?0057
; 127.	            case DOWN:
; 128.	               if((m_FMPlaystatus.freq == 0)&&(m_FMPlaystatus.mode==0))m_FMPlaystatus.freq=210;
	LD	HL,(m_FMPlaystatus+1)
	LD	A,L
	OR	H
	JR	NZ,?0049
	LD	A,(m_FMPlaystatus+5)
	OR	A
	JR	NZ,?0049
?0051:
?0050:
?0048:
	LD	HL,210
	JR	?0118
?0049:
; 129.	               else if((m_FMPlaystatus.freq==0)&&(m_FMPlaystatus.mode==1))m_FMPlaystatus.freq=140;
	LD	A,L
	OR	H
	JR	NZ,?0054
	LD	A,(m_FMPlaystatus+5)
	DEC	A
	JR	NZ,?0054
?0056:
?0055:
?0053:
	LD	HL,140
?0118:
	LD	(m_FMPlaystatus+1),HL
; 130.	                   
; 131.	//               if(((m_FMPlaystatus.freq-1)<0)&&
; 132.	               else
	JR	?0057
?0054:
; 133.	               {
; 134.	                   m_FMPlaystatus.freq-=1; 
	LD	HL,m_FMPlaystatus+1
	LD	A,(HL)
	ADD	A,255
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,255
	LD	(HL),A
?0057:
?0052:
; 135.	                }                                                                                                                   
; 136.	            break;
?0058:
; 137.	            default:
; 138.	            break;
?0035:
; 139.	        }
; 140.	        BankSwitch(address_24_of(FM_SetFreq) >> 16);
	LD	HL,FM_SetFreq
	LD	C,BYTE3 FM_SetFreq
	CALL	LWRD ?0140
; 141.	          Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 142.	          //SetFreq = m_FMPlaystatus.freq;
; 143.	           FM_SetFreq(Tempfreq);                                     
	EX	DE,HL
	CALL	LWRD FM_SetFreq
; 144.	        return TRUE;
	JP	LWRD ?0000
; 145.	
; 146.	        case MC_SEARCH:
?0059:
; 147.	        FM_MUTE(SetMUTE);
	LD	E,1
	CALL	LWRD FM_MUTE
; 148.	        BankSwitch(address_24_of(FM_Search) >> 16);
	LD	HL,FM_Search
	LD	C,BYTE3 FM_Search
	CALL	LWRD ?0140
; 149.	           Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 150.	           //SearchFreq = m_FMPlaystatus.freq ;
; 151.	           return     FM_Search(Tempfreq,param);
	LD	C,(IX-2)
	EX	DE,HL
	CALL	LWRD FM_Search
?0126:
	LD	L,A
; 152.	
; 153.	        case MC_SAVESTATION:
	JP	LWRD ?0114
?0060:
; 154.	        if (m_FMPlaystatus.station != 0) //当前电台在电台表中有保存的情况
	LD	A,(m_FMPlaystatus+3)
	OR	A
	JR	Z,?0062
?0061:
; 155.	        {
; 156.	            k = 0;
; 157.	            for (i = 0; i < 20; i++)
	LD	(IX-8),0
	LD	IY,0
?0064:
	LD	BC,32788
	PUSH	IY
	POP	HL

⌨️ 快捷键说明

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