📄 basal_fmradio.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Feb/109 14:18:02 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d95f\ap\ap_radio\basal_fmradio.c #
# List file = d:\case_i_d95f\ap\ap_radio\list\basal_fmradio.lst #
# Object file = d:\case_i_d95f\ap\ap_radio\obj\basal_fmradio.r01 #
# ASM file = d:\case_i_d95f\ap\ap_radio\list\basal_fmradio.s01 #
# Command line = -v0 -mb -OD:\case_i_d95f\ap\ap_radio\Obj\ -e -K -w #
# -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d95f\ap\ap_radio\List\ -q -t8 #
# -AD:\case_i_d95f\ap\ap_radio\List\ #
# -Id:\sdk_i_95f\inc\ -Id:\case_i_d95f\inc\ #
# d:\case_i_d95f\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 disable_hosc
\ 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 *******************************************************************************
9 */
10 #include "actos.h"
11 #include "fmradio.h"
12 //#include "chip_cfg.h"
13 //#include "../inc/typeext.h"
14 //#include "../inc/mmcmd.h"
15 //---公共变量区
16
17
18 //extern WORD FMStationTab[20];
19 //WORD G_FMStationTab[20];
20 //fm_play_status_t G_FMPlaystatus;
21
22
23 //-----basal module ----
24 #pragma memory=dataseg(RCODE)
25
26 //电台频率对照表(注:频率范围87M-108M 以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
27
28 WORD m_FMStationTab[20];
29 fm_play_status_t m_FMPlaystatus; //当前电台信息
30 FMStatus_Tab_t d_FMStatus; //从FM硬件读取的当前频率和声道信息
31 char disable_hosc;
32
33
34 #pragma memory=default
35 //extern WORD SearchFreq;
36 //extern WORD SetFreq;
37
38 #pragma codeseg(MOD_BS_FMRADIO)
39
40 BOOL fmSendCommand(BYTE cmd, int param)
41 {
\ 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
\ 000D F5 PUSH AF
42 int i;
43 uchar k;
44 uint Tempfreq;
45
46 // if( (0x7f34 < m_FMPlaystatus.freq) && ( m_FMPlaystatus.freq < 0x80c4) ) disable_hosc = 1;
47 // else disable_hosc = 0;
48 //
49
50 switch (cmd)
\ 000E CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 0011 1200 DEFW 18
\ 0013 01 DEFB 1
\ 0014 02 DEFB 2
\ 0015 04 DEFB 4
\ 0016 07 DEFB 7
\ 0017 09 DEFB 9
\ 0018 0A DEFB 10
\ 0019 0B DEFB 11
\ 001A 0C DEFB 12
\ 001B 11 DEFB 17
\ 001C 12 DEFB 18
\ 001D 40 DEFB 64
\ 001E 44 DEFB 68
\ 001F 45 DEFB 69
\ 0020 53 DEFB 83
\ 0021 55 DEFB 85
\ 0022 56 DEFB 86
\ 0023 83 DEFB 131
\ 0024 84 DEFB 132
\ 0025 0104 DEFW ?0000
\ 0027 2B03 DEFW ?0093
\ 0029 AD02 DEFW ?0084
\ 002B 9903 DEFW ?0101
\ 002D 3C03 DEFW ?0094
\ 002F 4802 DEFW ?0080
\ 0031 8702 DEFW ?0083
\ 0033 6602 DEFW ?0082
\ 0035 4F02 DEFW ?0081
\ 0037 FD03 DEFW ?0112
\ 0039 F203 DEFW ?0111
\ 003B C303 DEFW ?0106
\ 003D BE01 DEFW ?0060
\ 003F A601 DEFW ?0059
\ 0041 3501 DEFW ?0034
\ 0043 6000 DEFW ?0003
\ 0045 9701 DEFW ?0057
\ 0047 E203 DEFW ?0110
\ 0049 4B00 DEFW ?0001
\ 004B ?0001:
51 {
52 case MC_OPEN:
53 BankSwitch(address_24_of(FM_Init) >> 16);
\ 004B 210000 LD HL,FM_Init
\ 004E 0E00 LD C,BYTE3 FM_Init
\ 0050 CD2504 CALL LWRD ?0141
54 return FM_Init(m_FMPlaystatus.mode, (BYTE) param);
\ 0053 DD4EFE LD C,(IX-2)
\ 0056 ED5B2D00 LD DE,(m_FMPlaystatus+5)
\ 005A CD0000 CALL LWRD FM_Init
\ 005D C3BA01 JP LWRD ?0126
55 case MC_PLAY:
\ 0060 ?0002:
56 BankSwitch(address_24_of(FM_SetFreq) >> 16);
57 Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
58 FM_SetFreq(Tempfreq);
59 break;
\ 0060 ?0003:
60
61 case MC_STEP:
62 if (m_FMPlaystatus.station_count == 0)
\ 0060 3A2C00 LD A,(m_FMPlaystatus+4)
\ 0063 B7 OR A
\ 0064 CA4203 JP Z,?0128
\ 0067 ?0004:
63 return FALSE;
\ 0067 ?0005:
64 k = 0;
\ 0067 DD36F800 LD (IX-8),0
65 switch (param)
\ 006B 3E01 LD A,1
\ 006D A9 XOR C
\ 006E B0 OR B
\ 006F 205A JR NZ,?0020
\ 0071 ?0007:
66 {
67 case UP: //找到下一电台频率
68 if (m_FMPlaystatus.station == m_FMPlaystatus.station_count)
\ 0071 3A2C00 LD A,(m_FMPlaystatus+4)
\ 0074 47 LD B,A
\ 0075 3A2B00 LD A,(m_FMPlaystatus+3)
\ 0078 B8 CP B
\ 0079 2004 JR NZ,?0009
\ 007B ?0008:
69 m_FMPlaystatus.station = 0;
\ 007B AF XOR A
\ 007C 322B00 LD (m_FMPlaystatus+3),A
\ 007F ?0009:
70 m_FMPlaystatus.station++;
\ 007F 212B00 LD HL,m_FMPlaystatus+3
\ 0082 34 INC (HL)
71 for (i = 0; i < 20; i++)
\ 0083 FD210000 LD IY,0
\ 0087 ?0011:
\ 0087 011480 LD BC,32788
\ 008A FDE5 PUSH IY
\ 008C E1 POP HL
\ 008D 78 LD A,B
\ 008E AC XOR H
\ 008F 67 LD H,A
\ 0090 ED42 SBC HL,BC
\ 0092 301E JR NC,?0010
\ 0094 ?0012:
72 {
73 if (m_FMStationTab[i] != 0)
\ 0094 FDE5 PUSH IY
\ 0096 E1 POP HL
\ 0097 29 ADD HL,HL
\ 0098 010000 LD BC,m_FMStationTab
\ 009B 09 ADD HL,BC
\ 009C 7E LD A,(HL)
\ 009D 23 INC HL
\ 009E B6 OR (HL)
\ 009F 280D JR Z,?0017
\ 00A1 ?0014:
74 {
75 k++;
\ 00A1 DD34F8 INC (IX-8)
76 if (k == m_FMPlaystatus.station)
\ 00A4 3A2B00 LD A,(m_FMPlaystatus+3)
\ 00A7 47 LD B,A
\ 00A8 DD7EF8 LD A,(IX-8)
\ 00AB B8 CP B
\ 00AC 2804 JR Z,?0010
\ 00AE ?0016:
77 break;
\ 00AE ?0017:
\ 00AE ?0015:
\ 00AE FD23 INC IY
\ 00B0 18D5 JR ?0011
\ 00B2 ?0010:
78 }
79
80 }
81 if (i >= 20) // 如没有找到电台,重新设置电台数
\ 00B2 011480 LD BC,32788
\ 00B5 FDE5 PUSH IY
\ 00B7 E1 POP HL
\ 00B8 78 LD A,B
\ 00B9 AC XOR H
\ 00BA 67 LD H,A
\ 00BB ED42 SBC HL,BC
\ 00BD 3868 JR C,?0032
\ 00BF ?0018:
82 {
83 m_FMPlaystatus.station_count = k - 1;
\ 00BF DD7EF8 LD A,(IX-8)
\ 00C2 C6FF ADD A,255
\ 00C4 322C00 LD (m_FMPlaystatus+4),A
84 m_FMPlaystatus.station = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -