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

📄 basal_fmradio.s01

📁 MP3 整个 SDK
💻 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	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.	*  $Id: basal_fmradio.c,v 1.1.1.1 2006/05/22 03:24:00 selina Exp $
; 9.	*******************************************************************************
; 10.	*/ 
; 11.	#include "actos.h"
; 12.	#include "fmradio.h"
; 13.	//-----basal module ----
; 14.	#pragma memory=dataseg(RCODE)
; 15.	WORD                m_FMStationTab[20];           //电台频率对照表(注:频率范围87M-108M 以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
; 16.	fm_play_status_t     m_FMPlaystatus;              //当前电台信息
; 17.	FMStatus_Tab_t         d_FMStatus;                 //从FM硬件读取的当前频率和声道信息
; 18.	#pragma memory=default
; 19.	
; 20.	#pragma codeseg(MOD_BS_FMRADIO)
; 21.	             
; 22.	
; 23.	BOOL fmSendCommand(BYTE cmd, int param)
; 24.	{   
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 25.	    int i;
; 26.	    uchar k; 
; 27.	  
; 28.	    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:
; 29.	       {
; 30.	       case     MC_OPEN:    
; 31.	           BankSwitch(address_24_of(FM_Init) >> 16);                   
	LD	HL,FM_Init
	LD	C,BYTE3 FM_Init
	CALL	LWRD ?0139
; 32.	           return FM_Init(m_FMPlaystatus.mode,(BYTE)param);                
	LD	DE,(m_FMPlaystatus+5)
	CALL	LWRD FM_Init
	JP	LWRD ?0126
; 33.	       case     MC_PLAY:
?0002:
; 34.	           BankSwitch(address_24_of(FM_SetFreq) >> 16);
; 35.	           FM_SetFreq(m_FMPlaystatus.freq);                 
; 36.	           break;                            
?0003:
; 37.	       
; 38.	       case     MC_STEP:
; 39.	           if(m_FMPlaystatus.station_count==0)return FALSE;                                       
	LD	A,(m_FMPlaystatus+4)
	OR	A
	JP	Z,?0128
?0004:
?0005:
; 40.	           k=0;    
	LD	(IX-6),0
; 41.	           switch(param)                
	LD	A,1
	XOR	C
	OR	B
	JR	NZ,?0020
?0007:
; 42.	           {
; 43.	           case UP:                   //找到下一电台频率             
; 44.	               if(m_FMPlaystatus.station==m_FMPlaystatus.station_count)m_FMPlaystatus.station=0;
	LD	A,(m_FMPlaystatus+4)
	LD	B,A
	LD	A,(m_FMPlaystatus+3)
	CP	B
	JR	NZ,?0009
?0008:
	XOR	A
	LD	(m_FMPlaystatus+3),A
?0009:
; 45.	               m_FMPlaystatus.station++;
	LD	HL,m_FMPlaystatus+3
	INC	(HL)
; 46.	               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:
; 47.	               {
; 48.	                   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:
; 49.	                   {
; 50.	                       k++;
	INC	(IX-6)
; 51.	                       if(k==m_FMPlaystatus.station)break;
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-6)
	CP	B
	JR	Z,?0010
?0016:
?0017:
?0015:
	INC	IY
	JR	?0011
?0010:
; 52.	                   }
; 53.	                   
; 54.	               }
; 55.	               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:
; 56.	               {
; 57.	                    m_FMPlaystatus.station_count = k - 1;
	LD	A,(IX-6)
	ADD	A,255
	LD	(m_FMPlaystatus+4),A
; 58.	                    m_FMPlaystatus.station = 1;  
	LD	A,1
	JR	?0129
?0019:
; 59.	               }                                                                                                                    
; 60.	               break;                        
?0020:
	LD	A,C
	OR	B
	JR	NZ,?0032
; 61.	           case DOWN:                    //找到上一电台频率                                
; 62.	               if(m_FMPlaystatus.station==1)m_FMPlaystatus.station=m_FMPlaystatus.station_count+1;
	LD	A,(m_FMPlaystatus+3)
	DEC	A
	JR	NZ,?0022
?0021:
	LD	A,(m_FMPlaystatus+4)
	INC	A
	LD	(m_FMPlaystatus+3),A
?0022:
; 63.	               m_FMPlaystatus.station--;
	LD	HL,m_FMPlaystatus+3
	DEC	(HL)
; 64.	               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:
; 65.	               {
; 66.	                   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:
; 67.	                   {
; 68.	                       k++;
	INC	(IX-6)
; 69.	                       if(k==m_FMPlaystatus.station)break;
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-6)
	CP	B
	JR	Z,?0023
?0029:
?0030:
?0028:
	INC	IY
	JR	?0024
?0023:
; 70.	                   }
; 71.	               }
; 72.	               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:
; 73.	               {
; 74.	                    m_FMPlaystatus.station = m_FMPlaystatus.station_count = k +1; 
	LD	B,(IX-6)
	INC	B
	LD	A,B
	LD	(m_FMPlaystatus+4),A
?0129:
	LD	(m_FMPlaystatus+3),A
?0032:
; 75.	               }                                                                 
; 76.	               break;                                                                              
?0033:
; 77.	           default:
; 78.	               break;
?0006:
; 79.	           }
; 80.	           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
	JP	LWRD ?0118
; 81.	           BankSwitch(address_24_of(FM_SetFreq) >> 16); 
; 82.	           FM_SetFreq(m_FMPlaystatus.freq); 
; 83.	           return TRUE;   
; 84.	       
; 85.	       case   MC_STEPGRID:
?0034:
; 86.	           switch(param)
	LD	A,1
	XOR	C
	OR	B
	JR	NZ,?0047
?0036:
; 87.	           {
; 88.	           case UP: 
; 89.	               if(((m_FMPlaystatus.freq+100)>0xa5e0+20)&&
; 90.	               (m_FMPlaystatus.mode==0))m_FMPlaystatus.freq=0x53d8;
	LD	HL,(m_FMPlaystatus+1)
	LD	BC,100
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,42484
	AND	A
	SBC	HL,BC
	JR	NC,?0038
	LD	A,(m_FMPlaystatus+5)
	OR	A
	JR	NZ,?0038
?0040:
?0039:
?0037:
	LD	HL,21464
	JR	?0118
?0038:
; 91.	               else if(((m_FMPlaystatus.freq+100)>0x5f90+20)&&
; 92.	               (m_FMPlaystatus.mode==1))m_FMPlaystatus.freq=0x28e0;
	LD	HL,(m_FMPlaystatus+1)
	LD	BC,100
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,24484
	AND	A
	SBC	HL,BC
	JR	NC,?0043
	LD	A,(m_FMPlaystatus+5)
	DEC	A
	JR	NZ,?0043
?0045:
?0044:
?0042:
	LD	HL,10464
	JR	?0118
; 93.	               else
?0043:
; 94.	                   m_FMPlaystatus.freq+=100;                                                            
	LD	HL,m_FMPlaystatus+1
	LD	A,(HL)
	ADD	A,100
	LD	(HL),A
	JR	NC,?0057
	INC	HL
	INC	(HL)
?0046:
?0041:
; 95.	               break;                        
	JR	?0057
?0047:
	LD	A,C
	OR	B
	JR	NZ,?0057
; 96.	           case DOWN:
; 97.	               if(((m_FMPlaystatus.freq-100)<0x53d8-20)&&
; 98.	               (m_FMPlaystatus.mode==0))m_FMPlaystatus.freq=0xa5e0;
	LD	HL,(m_FMPlaystatus+1)
	LD	BC,65436
	ADD	HL,BC
	LD	BC,21444
	AND	A
	SBC	HL,BC
	JR	NC,?0049
	LD	A,(m_FMPlaystatus+5)
	OR	A
	JR	NZ,?0049
?0051:
?0050:
?0048:
	LD	HL,42464
	JR	?0118
?0049:
; 99.	               else if(((m_FMPlaystatus.freq-100)<0x28e0-20)&&
; 100.	               (m_FMPlaystatus.mode==1))m_FMPlaystatus.freq=0x5f90;
	LD	HL,(m_FMPlaystatus+1)
	LD	BC,65436
	ADD	HL,BC
	LD	BC,10444
	AND	A
	SBC	HL,BC
	JR	NC,?0054
	LD	A,(m_FMPlaystatus+5)
	DEC	A
	JR	NZ,?0054
?0056:
?0055:
?0053:
	LD	HL,24464
?0118:
	LD	(m_FMPlaystatus+1),HL
; 101.	               else
	JR	?0057
?0054:
; 102.	                   m_FMPlaystatus.freq-=100;                                                                                                                     
	LD	HL,m_FMPlaystatus+1
	LD	A,(HL)
	ADD	A,156
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,255
	LD	(HL),A
?0057:
?0052:
; 103.	               break;                                                                              
?0058:
; 104.	           default:
; 105.	               break;
?0035:
; 106.	           }
; 107.	           BankSwitch(address_24_of(FM_SetFreq) >> 16);
	LD	HL,FM_SetFreq
	LD	C,BYTE3 FM_SetFreq
	CALL	LWRD ?0140
; 108.	           FM_SetFreq(m_FMPlaystatus.freq);                                     
	LD	DE,(m_FMPlaystatus+1)
	CALL	LWRD FM_SetFreq
; 109.	           return TRUE;
	JP	LWRD ?0000
; 110.	           
; 111.	                      
; 112.	       case    MC_SEARCH:
?0059:
; 113.	           FM_MUTE(SetMUTE);  
	LD	E,1
	CALL	LWRD FM_MUTE
; 114.	           BankSwitch(address_24_of(FM_Search) >> 16);
	LD	HL,FM_Search
	LD	C,BYTE3 FM_Search
	CALL	LWRD ?0139
; 115.	           return     FM_Search(m_FMPlaystatus.freq,param);
	LD	DE,(m_FMPlaystatus+1)
	CALL	LWRD FM_Search
?0126:
	LD	L,A
; 116.	       
; 117.	       case    MC_SAVESTATION:
	JP	LWRD ?0114
?0060:
; 118.	           if(m_FMPlaystatus.station!=0)            //当前电台在电台表中有保存的情况
	LD	A,(m_FMPlaystatus+3)
	OR	A
	JR	Z,?0062
?0061:
; 119.	           {
; 120.	               k=0;
; 121.	               for(i=0;i<20;i++)
	LD	(IX-6),0
	LD	IY,0
?0064:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A

⌨️ 快捷键说明

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