basal_fmradio.lst
来自「MP3 整个 SDK」· LST 代码 · 共 984 行 · 第 1/4 页
LST
984 行
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 17:01:39 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\ap_radio\basal_fmradio.c #
# List file = d:\case_i_d90f\ap\ap_radio\list\basal_fmradio.lst #
# Object file = d:\case_i_d90f\ap\ap_radio\obj\basal_fmradio.r01 #
# ASM file = d:\case_i_d90f\ap\ap_radio\list\basal_fmradio.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_radio\Obj\ -e -K -w #
# -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d90f\ap\ap_radio\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_radio\List\ #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# D:\CASE_I_D90F\AP\AP_RADIO\basal_fmradio.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME basal_fmradio(17)
\ 0000 RSEG MOD_BS_FMRADIO(0)
\ 0000 RSEG RCODE(0)
\ 0000 EXTERN BankSwitch
\ 0000 EXTERN FM_Exit
\ 0000 EXTERN FM_GetStatus
\ 0000 EXTERN FM_Init
\ 0000 EXTERN FM_MUTE
\ 0000 EXTERN FM_Search
\ 0000 EXTERN FM_SetFreq
\ 0000 EXTERN FM_Standby
\ 0000 EXTERN FM_VolumeSet
\ 0000 EXTERN abs
\ 0000 PUBLIC d_FMStatus
\ 0000 PUBLIC fmSendCommand
\ 0000 PUBLIC m_FMPlaystatus
\ 0000 PUBLIC m_FMStationTab
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SL_RSH_L03
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG MOD_BS_FMRADIO
\ 0000 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 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B D5 PUSH DE
\ 000C F5 PUSH AF
25 int i;
26 uchar k;
27
28 switch(cmd)
\ 000D CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 0010 1200 DEFW 18
\ 0012 01 DEFB 1
\ 0013 02 DEFB 2
\ 0014 04 DEFB 4
\ 0015 07 DEFB 7
\ 0016 09 DEFB 9
\ 0017 0A DEFB 10
\ 0018 0B DEFB 11
\ 0019 0C DEFB 12
\ 001A 11 DEFB 17
\ 001B 12 DEFB 18
\ 001C 40 DEFB 64
\ 001D 44 DEFB 68
\ 001E 45 DEFB 69
\ 001F 53 DEFB 83
\ 0020 55 DEFB 85
\ 0021 56 DEFB 86
\ 0022 83 DEFB 131
\ 0023 84 DEFB 132
\ 0024 3104 DEFW ?0000
\ 0026 5B03 DEFW ?0093
\ 0028 DD02 DEFW ?0084
\ 002A C903 DEFW ?0101
\ 002C 6C03 DEFW ?0094
\ 002E 7802 DEFW ?0080
\ 0030 B702 DEFW ?0083
\ 0032 9602 DEFW ?0082
\ 0034 7F02 DEFW ?0081
\ 0036 2D04 DEFW ?0112
\ 0038 2204 DEFW ?0111
\ 003A F303 DEFW ?0106
\ 003C EE01 DEFW ?0060
\ 003E D601 DEFW ?0059
\ 0040 3201 DEFW ?0034
\ 0042 5C00 DEFW ?0003
\ 0044 C401 DEFW ?0057
\ 0046 1204 DEFW ?0110
\ 0048 4A00 DEFW ?0001
\ 004A ?0001:
29 {
30 case MC_OPEN:
31 BankSwitch(address_24_of(FM_Init) >> 16);
\ 004A 210000 LD HL,FM_Init
\ 004D 0E00 LD C,BYTE3 FM_Init
\ 004F CD3C04 CALL LWRD ?0139
32 return FM_Init(m_FMPlaystatus.mode,(BYTE)param);
\ 0052 ED5B2D00 LD DE,(m_FMPlaystatus+5)
\ 0056 CD0000 CALL LWRD FM_Init
\ 0059 C3EA01 JP LWRD ?0126
33 case MC_PLAY:
\ 005C ?0002:
34 BankSwitch(address_24_of(FM_SetFreq) >> 16);
35 FM_SetFreq(m_FMPlaystatus.freq);
36 break;
\ 005C ?0003:
37
38 case MC_STEP:
39 if(m_FMPlaystatus.station_count==0)return FALSE;
\ 005C 3A2C00 LD A,(m_FMPlaystatus+4)
\ 005F B7 OR A
\ 0060 CA7203 JP Z,?0128
\ 0063 ?0004:
\ 0063 ?0005:
40 k=0;
\ 0063 DD36FA00 LD (IX-6),0
41 switch(param)
\ 0067 3E01 LD A,1
\ 0069 A9 XOR C
\ 006A B0 OR B
\ 006B 205A JR NZ,?0020
\ 006D ?0007:
42 {
43 case UP: //找到下一电台频率
44 if(m_FMPlaystatus.station==m_FMPlaystatus.station_count)m_FMPlaystatus.station=0;
\ 006D 3A2C00 LD A,(m_FMPlaystatus+4)
\ 0070 47 LD B,A
\ 0071 3A2B00 LD A,(m_FMPlaystatus+3)
\ 0074 B8 CP B
\ 0075 2004 JR NZ,?0009
\ 0077 ?0008:
\ 0077 AF XOR A
\ 0078 322B00 LD (m_FMPlaystatus+3),A
\ 007B ?0009:
45 m_FMPlaystatus.station++;
\ 007B 212B00 LD HL,m_FMPlaystatus+3
\ 007E 34 INC (HL)
46 for(i=0;i<20;i++)
\ 007F FD210000 LD IY,0
\ 0083 ?0011:
\ 0083 011480 LD BC,32788
\ 0086 FDE5 PUSH IY
\ 0088 E1 POP HL
\ 0089 78 LD A,B
\ 008A AC XOR H
\ 008B 67 LD H,A
\ 008C ED42 SBC HL,BC
\ 008E 301E JR NC,?0010
\ 0090 ?0012:
47 {
48 if(m_FMStationTab[i]!=0)
\ 0090 FDE5 PUSH IY
\ 0092 E1 POP HL
\ 0093 29 ADD HL,HL
\ 0094 010000 LD BC,m_FMStationTab
\ 0097 09 ADD HL,BC
\ 0098 7E LD A,(HL)
\ 0099 23 INC HL
\ 009A B6 OR (HL)
\ 009B 280D JR Z,?0017
\ 009D ?0014:
49 {
50 k++;
\ 009D DD34FA INC (IX-6)
51 if(k==m_FMPlaystatus.station)break;
\ 00A0 3A2B00 LD A,(m_FMPlaystatus+3)
\ 00A3 47 LD B,A
\ 00A4 DD7EFA LD A,(IX-6)
\ 00A7 B8 CP B
\ 00A8 2804 JR Z,?0010
\ 00AA ?0016:
\ 00AA ?0017:
\ 00AA ?0015:
\ 00AA FD23 INC IY
\ 00AC 18D5 JR ?0011
\ 00AE ?0010:
52 }
53
54 }
55 if(i>=20) // 如没有找到电台,重新设置电台数
\ 00AE 011480 LD BC,32788
\ 00B1 FDE5 PUSH IY
\ 00B3 E1 POP HL
\ 00B4 78 LD A,B
\ 00B5 AC XOR H
\ 00B6 67 LD H,A
\ 00B7 ED42 SBC HL,BC
\ 00B9 3868 JR C,?0032
\ 00BB ?0018:
56 {
57 m_FMPlaystatus.station_count = k - 1;
\ 00BB DD7EFA LD A,(IX-6)
\ 00BE C6FF ADD A,255
\ 00C0 322C00 LD (m_FMPlaystatus+4),A
58 m_FMPlaystatus.station = 1;
\ 00C3 3E01 LD A,1
\ 00C5 1859 JR ?0129
\ 00C7 ?0019:
59 }
60 break;
\ 00C7 ?0020:
\ 00C7 79 LD A,C
\ 00C8 B0 OR B
\ 00C9 2058 JR NZ,?0032
61 case DOWN: //找到上一电台频率
62 if(m_FMPlaystatus.station==1)m_FMPlaystatus.station=m_FMPlaystatus.station_count+1;
\ 00CB 3A2B00 LD A,(m_FMPlaystatus+3)
\ 00CE 3D DEC A
\ 00CF 2007 JR NZ,?0022
\ 00D1 ?0021:
\ 00D1 3A2C00 LD A,(m_FMPlaystatus+4)
\ 00D4 3C INC A
\ 00D5 322B00 LD (m_FMPlaystatus+3),A
\ 00D8 ?0022:
63 m_FMPlaystatus.station--;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?