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

📄 basal_fmradio.s01

📁 MP3 整个 SDK
💻 S01
📖 第 1 页 / 共 2 页
字号:
	SBC	HL,BC
	JP	NC,?0000
?0065:
; 122.	               {
; 123.	                   if(m_FMStationTab[i]!=0)k++;
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	LD	A,(HL)
	INC	HL
	OR	(HL)
	JR	Z,?0068
?0067:
	INC	(IX-6)
?0068:
; 124.	                   if(k==m_FMPlaystatus.station)
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-6)
	CP	B
	JR	NZ,?0070
?0069:
; 125.	                   {
; 126.	                       m_FMStationTab[i]=m_FMPlaystatus.freq;
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	JP	LWRD ?0137
; 127.	                       break;
?0070:
; 128.	                   }
; 129.	               }
; 130.	           }                    
	INC	IY
	JR	?0064
?0063:
?0062:
; 131.	           else if(m_FMPlaystatus.station_count>19)return    FALSE;
	LD	A,(m_FMPlaystatus+4)
	LD	B,A
	LD	A,19
	CP	B
	JP	C,?0128
?0072:
; 132.	           else                                    //新的电台频率保存到电台表
?0073:
; 133.	           {
; 134.	               m_FMPlaystatus.station_count++;
	LD	HL,m_FMPlaystatus+4
	INC	(HL)
; 135.	               for(i=0;i<20;i++)
	LD	IY,0
?0075:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JP	NC,?0000
?0076:
; 136.	               {
; 137.	                   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	NZ,?0079
?0078:
; 138.	                   {
; 139.	                       m_FMStationTab[i]=m_FMPlaystatus.freq;
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,BC
	LD	BC,(m_FMPlaystatus+1)
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 140.	                       m_FMPlaystatus.station=i+1;
	PUSH	IY
	POP	HL
	INC	L
	LD	A,L
	JP	LWRD ?0135
; 141.	                       break;
?0079:
; 142.	                   }
; 143.	               }
; 144.	           }
	INC	IY
	JR	?0075
?0074:
?0071:
; 145.	           
; 146.	           return TRUE;
; 147.	       case    MC_SETMODE:
?0080:
; 148.	           m_FMPlaystatus.mode=(Station_bank_t)param;                
	LD	A,C
	LD	(m_FMPlaystatus+5),A
; 149.	           break;
	JP	LWRD ?0000
?0081:
; 150.	       case    MC_SETVOLUME:              
; 151.	           BankSwitch(address_24_of(FM_VolumeSet) >> 16);
	LD	HL,FM_VolumeSet
	LD	C,BYTE3 FM_VolumeSet
	CALL	LWRD ?0140
; 152.	           FM_VolumeSet((BYTE)param);
	LD	E,(IX-2)
	CALL	LWRD FM_VolumeSet
; 153.	           m_FMPlaystatus.volume=(BYTE)param;
	LD	A,(IX-2)
	LD	(m_FMPlaystatus+6),A
; 154.	           break;               
	JP	LWRD ?0000
?0082:
; 155.	       case    MC_BACKUP:
; 156.	           memcpy((void *)(*(WORD *)param),m_FMStationTab, 40);                
	LD	BC,40
	LD	L,(IX-2)
	LD	H,(IX-1)
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	HL,m_FMStationTab
	LDIR
; 157.	           memcpy((void *)(*(WORD *)(param+2)),&m_FMPlaystatus, sizeof(fm_play_status_t));
	LD	C,8
	LD	L,(IX-2)
	LD	H,(IX-1)
	INC	HL
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	JP	LWRD ?0131
; 158.	           break;
?0083:
; 159.	       
; 160.	       case    MC_RESTORE:
; 161.	           memcpy(m_FMStationTab, (void *)(*(WORD *)param), 40);
	LD	BC,40
	LD	DE,m_FMStationTab
	LD	L,(IX-2)
	LD	H,(IX-1)
	LD	A,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,A
	LDIR
; 162.	           memcpy(&m_FMPlaystatus,(void *)(*(WORD *)(param+2)), sizeof(fm_play_status_t));
	LD	C,8
	LD	DE,m_FMPlaystatus
	LD	L,(IX-2)
	LD	H,(IX-1)
	INC	HL
	INC	HL
	LD	A,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,A
	JP	LWRD ?0121
; 163.	           break;
?0084:
; 164.	       
; 165.	       case    MC_GETSTATUS:
; 166.	           BankSwitch(address_24_of(FM_GetStatus) >> 16);
	LD	HL,FM_GetStatus
	LD	C,BYTE3 FM_GetStatus
	CALL	LWRD ?0140
; 167.	           FM_GetStatus(&d_FMStatus);
	LD	DE,d_FMStatus
	CALL	LWRD FM_GetStatus
; 168.	           m_FMPlaystatus.freq=d_FMStatus.FM_CurrentFreq;
	LD	HL,(d_FMStatus+1)
	LD	(m_FMPlaystatus+1),HL
; 169.	           m_FMPlaystatus.stereo_status=d_FMStatus.FM_Stereo_Status;
	LD	A,(d_FMStatus)
	LD	(m_FMPlaystatus+7),A
; 170.	           k=0; 
; 171.	           //当前电台频率值和电台表中某一频率差距小于150KHZ,此电台和此电台表对应         
; 172.	           for(i=0;i<20;i++)
	LD	(IX-6),0
	LD	IY,0
?0086:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0085
?0087:
; 173.	           {
; 174.	               m_FMPlaystatus.station=0;
	XOR	A
	LD	(m_FMPlaystatus+3),A
; 175.	               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,?0092
?0089:
; 176.	               {
; 177.	                   k++;
	INC	(IX-6)
; 178.	                   if(abs(m_FMPlaystatus.freq-m_FMStationTab[i])<100)
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	LD	HL,(m_FMPlaystatus+1)
	AND	A
	SBC	HL,BC
	EX	DE,HL
	LD	A,BYTE3 abs
	LD	HL,LWRD abs
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	BC,32868
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0092
?0091:
; 179.	                   {
; 180.	                       m_FMPlaystatus.station=k;
	LD	A,(IX-6)
	LD	(m_FMPlaystatus+3),A
; 181.	                       break;
	JR	?0085
?0092:
?0090:
	INC	IY
	JR	?0086
?0085:
; 182.	                   }
; 183.	               }
; 184.	           }                             
; 185.	           memcpy((fm_play_status_t *)param,&m_FMPlaystatus, sizeof(fm_play_status_t));                                                        
	LD	BC,8
	LD	E,(IX-2)
	LD	D,(IX-1)
?0131:
	LD	HL,m_FMPlaystatus
	JR	?0121
; 186.	           break; 
?0093:
; 187.	       case    MC_GETTABLE:
; 188.	           memcpy((WORD *)param,&m_FMStationTab[0], 20);                
	LD	BC,20
	LD	E,(IX-2)
	LD	D,(IX-1)
	LD	HL,m_FMStationTab
?0121:
	LDIR
; 189.	           break;        
	JP	LWRD ?0000
?0094:
; 190.	       case MC_DELONE:
; 191.	           if(m_FMPlaystatus.station==0)return    FALSE;
	LD	A,(m_FMPlaystatus+3)
	OR	A
	JR	NZ,?0096
?0095:
?0128:
	LD	L,0
	JP	LWRD ?0114
?0096:
; 192.	               for(k=m_FMPlaystatus.station;k<m_FMPlaystatus.station_count+1;k++)
	LD	(IX-6),A
?0098:
	LD	BC,(m_FMPlaystatus+4)
	LD	B,0
	INC	BC
	LD	L,(IX-6)
	LD	H,0
	OR	128
	SBC	HL,BC
	JP	PO,?0116
	XOR	H
?0116:
	JP	P,?0097
?0099:
; 193.	               {
; 194.	                   m_FMStationTab[k-1]=m_FMStationTab[k];
	LD	L,(IX-6)
	LD	H,0
	ADD	HL,HL
	LD	BC,m_FMStationTab-2
	ADD	HL,BC
	PUSH	HL
	LD	L,(IX-6)
	LD	H,0
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	POP	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
	INC	(IX-6)
	JR	?0098
?0097:
; 195.	           }
; 196.	           m_FMStationTab[m_FMPlaystatus.station_count-1]=0;        
	LD	HL,(m_FMPlaystatus+4)
	LD	H,0
	ADD	HL,HL
	LD	BC,m_FMStationTab-2
	ADD	HL,BC
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
; 197.	               m_FMPlaystatus.station_count--;
	LD	HL,m_FMPlaystatus+4
	DEC	(HL)
; 198.	               m_FMPlaystatus.station=0;
?0135:
	LD	(m_FMPlaystatus+3),A
; 199.	               return     TRUE;                                
	JR	?0000
; 200.	       case MC_DELALL:
?0101:
; 201.	           for(i=0;i<20;i++)
	LD	IY,0
?0103:
	LD	BC,32788
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0102
?0104:
; 202.	           {
; 203.	               m_FMStationTab[i]=0;
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
	INC	IY
	JR	?0103
?0102:
; 204.	           }       
; 205.	           m_FMPlaystatus.station=0;
	XOR	A
	LD	(m_FMPlaystatus+3),A
; 206.	           m_FMPlaystatus.station_count=0;           
	LD	(m_FMPlaystatus+4),A
; 207.	           break;
	JR	?0000
?0106:
; 208.	       case MC_MUTE:            //静音
; 209.	           BankSwitch(address_24_of(FM_MUTE) >> 16);
	LD	HL,FM_MUTE
	LD	C,BYTE3 FM_MUTE
	CALL	LWRD ?0140
?0108:
; 210.	           while(!(k = FM_MUTE(param)))
	LD	E,(IX-2)
	CALL	LWRD FM_MUTE
	OR	A
	JR	NZ,?0000
?0109:
; 211.	           {
; 212.	                output8(0x4e,input8(0x4e)|0x8);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 213.	                FM_GetStatus(&d_FMStatus);
	LD	DE,d_FMStatus
	CALL	LWRD FM_GetStatus
; 214.	           }     
; 215.	          
; 216.	           break;
	JR	?0108
?0107:
?0110:
; 217.	       case MC_CLOSE:
; 218.	           BankSwitch(address_24_of(FM_Standby) >> 16);
	LD	HL,FM_Standby
	LD	C,BYTE3 FM_Standby
	CALL	LWRD ?0140
; 219.	           FM_Standby();
	CALL	LWRD FM_Standby
; 220.	           FM_Exit();
	CALL	LWRD FM_Exit
; 221.	           break;
	JR	?0000
?0111:
; 222.	       case MC_GETFREQ:
; 223.	               *(uint *)param = m_FMPlaystatus.freq;
	LD	L,C
	LD	H,B
?0137:
	LD	BC,(m_FMPlaystatus+1)
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 224.	               break;
	JR	?0000
?0112:
; 225.	           case MC_SETFREQ:
; 226.	               m_FMPlaystatus.freq = param;
	LD	(m_FMPlaystatus+1),BC
; 227.	               break;        
?0113:
; 228.	       default:
; 229.	        break;
?0000:
; 230.	    } 
; 231.	    
; 232.	    return    TRUE;   
	LD	L,1
; 233.	}
?0114:
	LD	SP,IX
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0139:
	LD	B,0
	LD	A,16
	CALL	LWRD ?SL_RSH_L03
	LD	E,L
	CALL	LWRD BankSwitch
	LD	C,(IX-2)
	RET
?0140:
	LD	B,0
	LD	A,16
	CALL	LWRD ?SL_RSH_L03
	LD	E,L
	JP	LWRD BankSwitch
; 234.	
; 235.	
; 236.	 
	RSEG	RCODE
m_FMStationTab:
	DEFS	40
m_FMPlaystatus:
	DEFS	8
d_FMStatus:
	DEFS	3
	END

⌨️ 快捷键说明

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