basal_fmradio.lst
来自「MP3 整个 SDK」· LST 代码 · 共 984 行 · 第 1/4 页
LST
984 行
\ 0337 016480 LD BC,32868
\ 033A 78 LD A,B
\ 033B AC XOR H
\ 033C 67 LD H,A
\ 033D ED42 SBC HL,BC
\ 033F 3008 JR NC,?0092
\ 0341 ?0091:
179 {
180 m_FMPlaystatus.station=k;
\ 0341 DD7EFA LD A,(IX-6)
\ 0344 322B00 LD (m_FMPlaystatus+3),A
181 break;
\ 0347 1804 JR ?0085
\ 0349 ?0092:
\ 0349 ?0090:
\ 0349 FD23 INC IY
\ 034B 18B2 JR ?0086
\ 034D ?0085:
182 }
183 }
184 }
185 memcpy((fm_play_status_t *)param,&m_FMPlaystatus, sizeof(fm_play_status_t));
\ 034D 010800 LD BC,8
\ 0350 DD5EFE LD E,(IX-2)
\ 0353 DD56FF LD D,(IX-1)
\ 0356 ?0131:
\ 0356 212800 LD HL,m_FMPlaystatus
\ 0359 180C JR ?0121
186 break;
\ 035B ?0093:
187 case MC_GETTABLE:
188 memcpy((WORD *)param,&m_FMStationTab[0], 20);
\ 035B 011400 LD BC,20
\ 035E DD5EFE LD E,(IX-2)
\ 0361 DD56FF LD D,(IX-1)
\ 0364 210000 LD HL,m_FMStationTab
\ 0367 ?0121:
\ 0367 EDB0 LDIR
189 break;
\ 0369 C33104 JP LWRD ?0000
\ 036C ?0094:
190 case MC_DELONE:
191 if(m_FMPlaystatus.station==0)return FALSE;
\ 036C 3A2B00 LD A,(m_FMPlaystatus+3)
\ 036F B7 OR A
\ 0370 2005 JR NZ,?0096
\ 0372 ?0095:
\ 0372 ?0128:
\ 0372 2E00 LD L,0
\ 0374 C33304 JP LWRD ?0114
\ 0377 ?0096:
192 for(k=m_FMPlaystatus.station;k<m_FMPlaystatus.station_count+1;k++)
\ 0377 DD77FA LD (IX-6),A
\ 037A ?0098:
\ 037A ED4B2C00 LD BC,(m_FMPlaystatus+4)
\ 037E 0600 LD B,0
\ 0380 03 INC BC
\ 0381 DD6EFA LD L,(IX-6)
\ 0384 2600 LD H,0
\ 0386 F680 OR 128
\ 0388 ED42 SBC HL,BC
\ 038A E28E03 JP PO,?0116
\ 038D AC XOR H
\ 038E ?0116:
\ 038E F2B203 JP P,?0097
\ 0391 ?0099:
193 {
194 m_FMStationTab[k-1]=m_FMStationTab[k];
\ 0391 DD6EFA LD L,(IX-6)
\ 0394 2600 LD H,0
\ 0396 29 ADD HL,HL
\ 0397 01FEFF LD BC,m_FMStationTab-2
\ 039A 09 ADD HL,BC
\ 039B E5 PUSH HL
\ 039C DD6EFA LD L,(IX-6)
\ 039F 2600 LD H,0
\ 03A1 29 ADD HL,HL
\ 03A2 010000 LD BC,m_FMStationTab
\ 03A5 09 ADD HL,BC
\ 03A6 4E LD C,(HL)
\ 03A7 23 INC HL
\ 03A8 46 LD B,(HL)
\ 03A9 E1 POP HL
\ 03AA 71 LD (HL),C
\ 03AB 23 INC HL
\ 03AC 70 LD (HL),B
\ 03AD DD34FA INC (IX-6)
\ 03B0 18C8 JR ?0098
\ 03B2 ?0097:
195 }
196 m_FMStationTab[m_FMPlaystatus.station_count-1]=0;
\ 03B2 2A2C00 LD HL,(m_FMPlaystatus+4)
\ 03B5 2600 LD H,0
\ 03B7 29 ADD HL,HL
\ 03B8 01FEFF LD BC,m_FMStationTab-2
\ 03BB 09 ADD HL,BC
\ 03BC AF XOR A
\ 03BD 77 LD (HL),A
\ 03BE 23 INC HL
\ 03BF 77 LD (HL),A
197 m_FMPlaystatus.station_count--;
\ 03C0 212C00 LD HL,m_FMPlaystatus+4
\ 03C3 35 DEC (HL)
198 m_FMPlaystatus.station=0;
\ 03C4 ?0135:
\ 03C4 322B00 LD (m_FMPlaystatus+3),A
199 return TRUE;
\ 03C7 1868 JR ?0000
200 case MC_DELALL:
\ 03C9 ?0101:
201 for(i=0;i<20;i++)
\ 03C9 FD210000 LD IY,0
\ 03CD ?0103:
\ 03CD 011480 LD BC,32788
\ 03D0 FDE5 PUSH IY
\ 03D2 E1 POP HL
\ 03D3 78 LD A,B
\ 03D4 AC XOR H
\ 03D5 67 LD H,A
\ 03D6 ED42 SBC HL,BC
\ 03D8 3010 JR NC,?0102
\ 03DA ?0104:
202 {
203 m_FMStationTab[i]=0;
\ 03DA FDE5 PUSH IY
\ 03DC E1 POP HL
\ 03DD 29 ADD HL,HL
\ 03DE 010000 LD BC,m_FMStationTab
\ 03E1 09 ADD HL,BC
\ 03E2 AF XOR A
\ 03E3 77 LD (HL),A
\ 03E4 23 INC HL
\ 03E5 77 LD (HL),A
\ 03E6 FD23 INC IY
\ 03E8 18E3 JR ?0103
\ 03EA ?0102:
204 }
205 m_FMPlaystatus.station=0;
\ 03EA AF XOR A
\ 03EB 322B00 LD (m_FMPlaystatus+3),A
206 m_FMPlaystatus.station_count=0;
\ 03EE 322C00 LD (m_FMPlaystatus+4),A
207 break;
\ 03F1 183E JR ?0000
\ 03F3 ?0106:
208 case MC_MUTE: //静音
209 BankSwitch(address_24_of(FM_MUTE) >> 16);
\ 03F3 210000 LD HL,FM_MUTE
\ 03F6 0E00 LD C,BYTE3 FM_MUTE
\ 03F8 CD4B04 CALL LWRD ?0140
\ 03FB ?0108:
210 while(!(k = FM_MUTE(param)))
\ 03FB DD5EFE LD E,(IX-2)
\ 03FE CD0000 CALL LWRD FM_MUTE
\ 0401 B7 OR A
\ 0402 202D JR NZ,?0000
\ 0404 ?0109:
211 {
212 output8(0x4e,input8(0x4e)|0x8);
\ 0404 DB4E IN A,(78)
\ 0406 CBDF SET 3,A
\ 0408 D34E OUT (78),A
213 FM_GetStatus(&d_FMStatus);
\ 040A 113000 LD DE,d_FMStatus
\ 040D CD0000 CALL LWRD FM_GetStatus
214 }
215
216 break;
\ 0410 18E9 JR ?0108
\ 0412 ?0107:
\ 0412 ?0110:
217 case MC_CLOSE:
218 BankSwitch(address_24_of(FM_Standby) >> 16);
\ 0412 210000 LD HL,FM_Standby
\ 0415 0E00 LD C,BYTE3 FM_Standby
\ 0417 CD4B04 CALL LWRD ?0140
219 FM_Standby();
\ 041A CD0000 CALL LWRD FM_Standby
220 FM_Exit();
\ 041D CD0000 CALL LWRD FM_Exit
221 break;
\ 0420 180F JR ?0000
\ 0422 ?0111:
222 case MC_GETFREQ:
223 *(uint *)param = m_FMPlaystatus.freq;
\ 0422 69 LD L,C
\ 0423 60 LD H,B
\ 0424 ?0137:
\ 0424 ED4B2900 LD BC,(m_FMPlaystatus+1)
\ 0428 71 LD (HL),C
\ 0429 23 INC HL
\ 042A 70 LD (HL),B
224 break;
\ 042B 1804 JR ?0000
\ 042D ?0112:
225 case MC_SETFREQ:
226 m_FMPlaystatus.freq = param;
\ 042D ED432900 LD (m_FMPlaystatus+1),BC
227 break;
\ 0431 ?0113:
228 default:
229 break;
\ 0431 ?0000:
230 }
231
232 return TRUE;
\ 0431 2E01 LD L,1
233 }
\ 0433 ?0114:
\ 0433 DDF9 LD SP,IX
\ 0435 DDE1 POP IX
\ 0437 FDE1 POP IY
\ 0439 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 043C ?0139:
\ 043C 0600 LD B,0
\ 043E 3E10 LD A,16
\ 0440 CD0000 CALL LWRD ?SL_RSH_L03
\ 0443 5D LD E,L
\ 0444 CD0000 CALL LWRD BankSwitch
\ 0447 DD4EFE LD C,(IX-2)
\ 044A C9 RET
\ 044B ?0140:
\ 044B 0600 LD B,0
\ 044D 3E10 LD A,16
\ 044F CD0000 CALL LWRD ?SL_RSH_L03
\ 0452 5D LD E,L
\ 0453 C30000 JP LWRD BankSwitch
234
235
236
\ 0000 RSEG RCODE
\ 0000 m_FMStationTab:
\ 0028 DEFS 40
\ 0028 m_FMPlaystatus:
\ 0030 DEFS 8
\ 0030 d_FMStatus:
\ 0033 DEFS 3
\ 0033 END
Errors: none
Warnings: none
Code size: 1110
Constant size: 0
Static variable size: Data(51) Iram(0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?