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 + -
显示快捷键?