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

📄 basal_fmradio.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JP	NC,?0000
?0065:
; 158.	            {
; 159.	                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,?0068
?0067:
; 160.	                    k++;
	INC	(IX-8)
?0068:
; 161.	                if (k == m_FMPlaystatus.station)
	LD	A,(m_FMPlaystatus+3)
	LD	B,A
	LD	A,(IX-8)
	CP	B
	JR	NZ,?0070
?0069:
; 162.	                {
; 163.	                    m_FMStationTab[i] = m_FMPlaystatus.freq;
	PUSH	IY
	POP	HL
	ADD	HL,HL
	LD	BC,m_FMStationTab
	ADD	HL,BC
	JP	LWRD ?0138
; 164.	                    break;
?0070:
; 165.	                }
; 166.	            }
; 167.	        }
	INC	IY
	JR	?0064
?0063:
?0062:
; 168.	        else if (m_FMPlaystatus.station_count > 19)
	LD	A,(m_FMPlaystatus+4)
	LD	B,A
	LD	A,19
	CP	B
	JP	C,?0128
?0072:
; 169.	            return FALSE;
; 170.	        else //新的电台频率保存到电台表
?0073:
; 171.	        {
; 172.	            m_FMPlaystatus.station_count++;
	LD	HL,m_FMPlaystatus+4
	INC	(HL)
; 173.	            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:
; 174.	            {
; 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	NZ,?0079
?0078:
; 176.	                {
; 177.	                    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
; 178.	                    m_FMPlaystatus.station = i + 1;
	PUSH	IY
	POP	HL
	INC	L
	LD	A,L
	JP	LWRD ?0136
; 179.	                    break;
?0079:
; 180.	                }
; 181.	            }
; 182.	        }
	INC	IY
	JR	?0075
?0074:
?0071:
; 183.	
; 184.	        return TRUE;
; 185.	        case MC_SETMODE:
?0080:
; 186.	        m_FMPlaystatus.mode = (Station_bank_t) param;
	LD	A,C
	LD	(m_FMPlaystatus+5),A
; 187.	        break;
	JP	LWRD ?0000
?0081:
; 188.	        case MC_SETVOLUME:
; 189.	        BankSwitch(address_24_of(FM_VolumeSet) >> 16);
	LD	HL,FM_VolumeSet
	LD	C,BYTE3 FM_VolumeSet
	CALL	LWRD ?0141
; 190.	        FM_VolumeSet((BYTE) param);
	LD	E,(IX-2)
	CALL	LWRD FM_VolumeSet
; 191.	        m_FMPlaystatus.volume = (BYTE) param;
	LD	A,(IX-2)
	LD	(m_FMPlaystatus+6),A
; 192.	        break;
	JP	LWRD ?0000
?0082:
; 193.	        case MC_BACKUP:
; 194.	        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
; 195.	        memcpy((void *) (*(WORD *) (param + 2)), &m_FMPlaystatus, sizeof(fm_play_status_t));
	LD	C,9
	LD	L,(IX-2)
	LD	H,(IX-1)
	INC	HL
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	JP	LWRD ?0132
; 196.	        break;
?0083:
; 197.	
; 198.	        case MC_RESTORE:
; 199.	        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
; 200.	        memcpy(&m_FMPlaystatus, (void *) (*(WORD *) (param + 2)), sizeof(fm_play_status_t));
	LD	C,9
	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
; 201.	        break;
?0084:
; 202.	
; 203.	        case MC_GETSTATUS:
; 204.	        BankSwitch(address_24_of(FM_GetStatus) >> 16);
	LD	HL,FM_GetStatus
	LD	C,BYTE3 FM_GetStatus
	CALL	LWRD ?0141
; 205.	        FM_GetStatus(&d_FMStatus);
	LD	DE,d_FMStatus
	CALL	LWRD FM_GetStatus
; 206.	        m_FMPlaystatus.freq=d_FMStatus.FM_CurrentFreq;  //rda chenggangdeng
	LD	HL,(d_FMStatus+1)
	LD	(m_FMPlaystatus+1),HL
; 207.	        m_FMPlaystatus.stereo_status = d_FMStatus.FM_Stereo_Status;
	LD	A,(d_FMStatus)
	LD	(m_FMPlaystatus+7),A
; 208.	           k=0; 
; 209.	           //当前电台频率值和电台表中某一频率差距小于150KHZ,此电台和此电台表对应         
; 210.	           for(i=0;i<20;i++)
	LD	(IX-8),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:
; 211.	           {
; 212.	               m_FMPlaystatus.station=0;
	XOR	A
	LD	(m_FMPlaystatus+3),A
; 213.	               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:
; 214.	               {
; 215.	                   k++;
	INC	(IX-8)
; 216.	                   if(abs(m_FMPlaystatus.freq-m_FMStationTab[i])<1)
	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,32769
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0092
?0091:
; 217.	                   {
; 218.	                       m_FMPlaystatus.station=k;
	LD	A,(IX-8)
	LD	(m_FMPlaystatus+3),A
; 219.	                       break;
	JR	?0085
?0092:
?0090:
	INC	IY
	JR	?0086
?0085:
; 220.	                   }
; 221.	               }
; 222.	           }                             
; 223.	        memcpy((fm_play_status_t *) param, &m_FMPlaystatus, sizeof(fm_play_status_t));
	LD	BC,9
	LD	E,(IX-2)
	LD	D,(IX-1)
?0132:
	LD	HL,m_FMPlaystatus
	JR	?0121
; 224.	        break;
?0093:
; 225.	        case MC_GETTABLE:
; 226.	        memcpy((WORD *) param, &m_FMStationTab[0], 20);
	LD	BC,20
	LD	E,(IX-2)
	LD	D,(IX-1)
	LD	HL,m_FMStationTab
?0121:
	LDIR
; 227.	        break;
	JP	LWRD ?0000
?0094:
; 228.	        case MC_DELONE:
; 229.	        if (m_FMPlaystatus.station == 0)
	LD	A,(m_FMPlaystatus+3)
	OR	A
	JR	NZ,?0096
?0095:
; 230.	            return FALSE;
?0128:
	LD	L,0
	JP	LWRD ?0114
?0096:
; 231.	        //m_FMStationTab[m_FMPlaystatus.station-1]=0;
; 232.	        for (k = m_FMPlaystatus.station; k < m_FMPlaystatus.station_count + 1; k++)
	LD	(IX-8),A
?0098:
	LD	BC,(m_FMPlaystatus+4)
	LD	B,0
	INC	BC
	LD	L,(IX-8)
	LD	H,0
	OR	128
	SBC	HL,BC
	JP	PO,?0115
	XOR	H
?0115:
	JP	P,?0097
?0099:
; 233.	        {
; 234.	            m_FMStationTab[k - 1] = m_FMStationTab[k];
	LD	L,(IX-8)
	LD	H,0
	ADD	HL,HL
	LD	BC,m_FMStationTab-2
	ADD	HL,BC
	PUSH	HL
	LD	L,(IX-8)
	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-8)
	JR	?0098
?0097:
; 235.	        }
; 236.	        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
; 237.	        m_FMPlaystatus.station_count--;
	LD	HL,m_FMPlaystatus+4
	DEC	(HL)
; 238.	        m_FMPlaystatus.station = 0;
?0136:
	LD	(m_FMPlaystatus+3),A
; 239.	        return TRUE;
	JR	?0000
; 240.	        case MC_DELALL:
?0101:
; 241.	        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:
; 242.	        {
; 243.	            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:
; 244.	        }
; 245.	        m_FMPlaystatus.station = 0;
	XOR	A
	LD	(m_FMPlaystatus+3),A
; 246.	        m_FMPlaystatus.station_count = 0;
	LD	(m_FMPlaystatus+4),A
; 247.	        break;
	JR	?0000
?0106:
; 248.	        case MC_MUTE: //静音
; 249.	        BankSwitch(address_24_of(FM_MUTE) >> 16);
	LD	HL,FM_MUTE
	LD	C,BYTE3 FM_MUTE
	CALL	LWRD ?0141
?0108:
; 250.	        while (!(k = FM_MUTE(param)))
	LD	E,(IX-2)
	CALL	LWRD FM_MUTE
	OR	A
	JR	NZ,?0000
?0109:
; 251.	        {
; 252.	            output8(0x4e, input8(0x4e) | 0x8);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 253.	            FM_GetStatus(&d_FMStatus);
	LD	DE,d_FMStatus
	CALL	LWRD FM_GetStatus
; 254.	        }
; 255.	
; 256.	        break;
	JR	?0108
?0107:
?0110:
; 257.	        case MC_CLOSE:
; 258.	        BankSwitch(address_24_of(FM_Standby) >> 16);
	LD	HL,FM_Standby
	LD	C,BYTE3 FM_Standby
	CALL	LWRD ?0141
; 259.	           FM_Exit();                //防止退出FM菜单,POP声
	CALL	LWRD FM_Exit
; 260.	           FM_Standby();
	CALL	LWRD FM_Standby
; 261.	//           FM_Exit();
; 262.	        break;
	JR	?0000
?0111:
; 263.	        case MC_GETFREQ:
; 264.	        *(uint *) param = m_FMPlaystatus.freq;
	LD	L,C
	LD	H,B
?0138:
	LD	BC,(m_FMPlaystatus+1)
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 265.	        break;
	JR	?0000
?0112:
; 266.	        case MC_SETFREQ:
; 267.	        m_FMPlaystatus.freq = param;
	LD	(m_FMPlaystatus+1),BC
; 268.	        break;
?0113:
; 269.	        default:
; 270.	        break;
?0000:
; 271.	    }
; 272.	
; 273.	    return TRUE;
	LD	L,1
; 274.	}
?0114:
	LD	SP,IX
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0140:
	LD	B,0
	LD	A,16
	CALL	LWRD ?SL_RSH_L03
	LD	E,L
	CALL	LWRD BankSwitch
	LD	HL,(m_FMPlaystatus+1)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,16
	ADD	HL,BC
	RET
?0141:
	LD	B,0
	LD	A,16
	CALL	LWRD ?SL_RSH_L03
	LD	E,L
	CALL	LWRD BankSwitch
	RET
; 275.	
	RSEG	RCODE
m_FMStationTab:
	DEFS	40
m_FMPlaystatus:
	DEFS	9
d_FMStatus:
	DEFS	3
disable_hosc:
	DEFS	1
	END

⌨️ 快捷键说明

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