basal_fmradio.lst
来自「MP3 整个 SDK」· LST 代码 · 共 984 行 · 第 1/4 页
LST
984 行
\ 01F8 FD210000 LD IY,0
\ 01FC ?0064:
\ 01FC 011480 LD BC,32788
\ 01FF FDE5 PUSH IY
\ 0201 E1 POP HL
\ 0202 78 LD A,B
\ 0203 AC XOR H
\ 0204 67 LD H,A
\ 0205 ED42 SBC HL,BC
\ 0207 D23104 JP NC,?0000
\ 020A ?0065:
122 {
123 if(m_FMStationTab[i]!=0)k++;
\ 020A FDE5 PUSH IY
\ 020C E1 POP HL
\ 020D 29 ADD HL,HL
\ 020E 010000 LD BC,m_FMStationTab
\ 0211 09 ADD HL,BC
\ 0212 7E LD A,(HL)
\ 0213 23 INC HL
\ 0214 B6 OR (HL)
\ 0215 2803 JR Z,?0068
\ 0217 ?0067:
\ 0217 DD34FA INC (IX-6)
\ 021A ?0068:
124 if(k==m_FMPlaystatus.station)
\ 021A 3A2B00 LD A,(m_FMPlaystatus+3)
\ 021D 47 LD B,A
\ 021E DD7EFA LD A,(IX-6)
\ 0221 B8 CP B
\ 0222 200B JR NZ,?0070
\ 0224 ?0069:
125 {
126 m_FMStationTab[i]=m_FMPlaystatus.freq;
\ 0224 FDE5 PUSH IY
\ 0226 E1 POP HL
\ 0227 29 ADD HL,HL
\ 0228 010000 LD BC,m_FMStationTab
\ 022B 09 ADD HL,BC
\ 022C C32404 JP LWRD ?0137
127 break;
\ 022F ?0070:
128 }
129 }
130 }
\ 022F FD23 INC IY
\ 0231 18C9 JR ?0064
\ 0233 ?0063:
\ 0233 ?0062:
131 else if(m_FMPlaystatus.station_count>19)return FALSE;
\ 0233 3A2C00 LD A,(m_FMPlaystatus+4)
\ 0236 47 LD B,A
\ 0237 3E13 LD A,19
\ 0239 B8 CP B
\ 023A DA7203 JP C,?0128
\ 023D ?0072:
132 else //新的电台频率保存到电台表
\ 023D ?0073:
133 {
134 m_FMPlaystatus.station_count++;
\ 023D 212C00 LD HL,m_FMPlaystatus+4
\ 0240 34 INC (HL)
135 for(i=0;i<20;i++)
\ 0241 FD210000 LD IY,0
\ 0245 ?0075:
\ 0245 011480 LD BC,32788
\ 0248 FDE5 PUSH IY
\ 024A E1 POP HL
\ 024B 78 LD A,B
\ 024C AC XOR H
\ 024D 67 LD H,A
\ 024E ED42 SBC HL,BC
\ 0250 D23104 JP NC,?0000
\ 0253 ?0076:
136 {
137 if(m_FMStationTab[i]==0)
\ 0253 FDE5 PUSH IY
\ 0255 E1 POP HL
\ 0256 29 ADD HL,HL
\ 0257 010000 LD BC,m_FMStationTab
\ 025A 09 ADD HL,BC
\ 025B 7E LD A,(HL)
\ 025C 23 INC HL
\ 025D B6 OR (HL)
\ 025E 2014 JR NZ,?0079
\ 0260 ?0078:
138 {
139 m_FMStationTab[i]=m_FMPlaystatus.freq;
\ 0260 FDE5 PUSH IY
\ 0262 E1 POP HL
\ 0263 29 ADD HL,HL
\ 0264 09 ADD HL,BC
\ 0265 ED4B2900 LD BC,(m_FMPlaystatus+1)
\ 0269 71 LD (HL),C
\ 026A 23 INC HL
\ 026B 70 LD (HL),B
140 m_FMPlaystatus.station=i+1;
\ 026C FDE5 PUSH IY
\ 026E E1 POP HL
\ 026F 2C INC L
\ 0270 7D LD A,L
\ 0271 C3C403 JP LWRD ?0135
141 break;
\ 0274 ?0079:
142 }
143 }
144 }
\ 0274 FD23 INC IY
\ 0276 18CD JR ?0075
\ 0278 ?0074:
\ 0278 ?0071:
145
146 return TRUE;
147 case MC_SETMODE:
\ 0278 ?0080:
148 m_FMPlaystatus.mode=(Station_bank_t)param;
\ 0278 79 LD A,C
\ 0279 322D00 LD (m_FMPlaystatus+5),A
149 break;
\ 027C C33104 JP LWRD ?0000
\ 027F ?0081:
150 case MC_SETVOLUME:
151 BankSwitch(address_24_of(FM_VolumeSet) >> 16);
\ 027F 210000 LD HL,FM_VolumeSet
\ 0282 0E00 LD C,BYTE3 FM_VolumeSet
\ 0284 CD4B04 CALL LWRD ?0140
152 FM_VolumeSet((BYTE)param);
\ 0287 DD5EFE LD E,(IX-2)
\ 028A CD0000 CALL LWRD FM_VolumeSet
153 m_FMPlaystatus.volume=(BYTE)param;
\ 028D DD7EFE LD A,(IX-2)
\ 0290 322E00 LD (m_FMPlaystatus+6),A
154 break;
\ 0293 C33104 JP LWRD ?0000
\ 0296 ?0082:
155 case MC_BACKUP:
156 memcpy((void *)(*(WORD *)param),m_FMStationTab, 40);
\ 0296 012800 LD BC,40
\ 0299 DD6EFE LD L,(IX-2)
\ 029C DD66FF LD H,(IX-1)
\ 029F 5E LD E,(HL)
\ 02A0 23 INC HL
\ 02A1 56 LD D,(HL)
\ 02A2 210000 LD HL,m_FMStationTab
\ 02A5 EDB0 LDIR
157 memcpy((void *)(*(WORD *)(param+2)),&m_FMPlaystatus, sizeof(fm_play_status_t));
\ 02A7 0E08 LD C,8
\ 02A9 DD6EFE LD L,(IX-2)
\ 02AC DD66FF LD H,(IX-1)
\ 02AF 23 INC HL
\ 02B0 23 INC HL
\ 02B1 5E LD E,(HL)
\ 02B2 23 INC HL
\ 02B3 56 LD D,(HL)
\ 02B4 C35603 JP LWRD ?0131
158 break;
\ 02B7 ?0083:
159
160 case MC_RESTORE:
161 memcpy(m_FMStationTab, (void *)(*(WORD *)param), 40);
\ 02B7 012800 LD BC,40
\ 02BA 110000 LD DE,m_FMStationTab
\ 02BD DD6EFE LD L,(IX-2)
\ 02C0 DD66FF LD H,(IX-1)
\ 02C3 7E LD A,(HL)
\ 02C4 23 INC HL
\ 02C5 66 LD H,(HL)
\ 02C6 6F LD L,A
\ 02C7 EDB0 LDIR
162 memcpy(&m_FMPlaystatus,(void *)(*(WORD *)(param+2)), sizeof(fm_play_status_t));
\ 02C9 0E08 LD C,8
\ 02CB 112800 LD DE,m_FMPlaystatus
\ 02CE DD6EFE LD L,(IX-2)
\ 02D1 DD66FF LD H,(IX-1)
\ 02D4 23 INC HL
\ 02D5 23 INC HL
\ 02D6 7E LD A,(HL)
\ 02D7 23 INC HL
\ 02D8 66 LD H,(HL)
\ 02D9 6F LD L,A
\ 02DA C36703 JP LWRD ?0121
163 break;
\ 02DD ?0084:
164
165 case MC_GETSTATUS:
166 BankSwitch(address_24_of(FM_GetStatus) >> 16);
\ 02DD 210000 LD HL,FM_GetStatus
\ 02E0 0E00 LD C,BYTE3 FM_GetStatus
\ 02E2 CD4B04 CALL LWRD ?0140
167 FM_GetStatus(&d_FMStatus);
\ 02E5 113000 LD DE,d_FMStatus
\ 02E8 CD0000 CALL LWRD FM_GetStatus
168 m_FMPlaystatus.freq=d_FMStatus.FM_CurrentFreq;
\ 02EB 2A3100 LD HL,(d_FMStatus+1)
\ 02EE 222900 LD (m_FMPlaystatus+1),HL
169 m_FMPlaystatus.stereo_status=d_FMStatus.FM_Stereo_Status;
\ 02F1 3A3000 LD A,(d_FMStatus)
\ 02F4 322F00 LD (m_FMPlaystatus+7),A
170 k=0;
171 //当前电台频率值和电台表中某一频率差距小于150KHZ,此电台和此电台表对应
172 for(i=0;i<20;i++)
\ 02F7 DD36FA00 LD (IX-6),0
\ 02FB FD210000 LD IY,0
\ 02FF ?0086:
\ 02FF 011480 LD BC,32788
\ 0302 FDE5 PUSH IY
\ 0304 E1 POP HL
\ 0305 78 LD A,B
\ 0306 AC XOR H
\ 0307 67 LD H,A
\ 0308 ED42 SBC HL,BC
\ 030A 3041 JR NC,?0085
\ 030C ?0087:
173 {
174 m_FMPlaystatus.station=0;
\ 030C AF XOR A
\ 030D 322B00 LD (m_FMPlaystatus+3),A
175 if(m_FMStationTab[i]!=0)
\ 0310 FDE5 PUSH IY
\ 0312 E1 POP HL
\ 0313 29 ADD HL,HL
\ 0314 010000 LD BC,m_FMStationTab
\ 0317 09 ADD HL,BC
\ 0318 7E LD A,(HL)
\ 0319 23 INC HL
\ 031A B6 OR (HL)
\ 031B 282C JR Z,?0092
\ 031D ?0089:
176 {
177 k++;
\ 031D DD34FA INC (IX-6)
178 if(abs(m_FMPlaystatus.freq-m_FMStationTab[i])<100)
\ 0320 FDE5 PUSH IY
\ 0322 E1 POP HL
\ 0323 29 ADD HL,HL
\ 0324 09 ADD HL,BC
\ 0325 4E LD C,(HL)
\ 0326 23 INC HL
\ 0327 46 LD B,(HL)
\ 0328 2A2900 LD HL,(m_FMPlaystatus+1)
\ 032B A7 AND A
\ 032C ED42 SBC HL,BC
\ 032E EB EX DE,HL
\ 032F 3E00 LD A,BYTE3 abs
\ 0331 210000 LD HL,LWRD abs
\ 0334 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?