⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ap_common2.lst

📁 5807收音机模块用于炬力平台
💻 LST
📖 第 1 页 / 共 2 页
字号:
##############################################################################
#                                                                            #
# IAR Z80/64180 C-Compiler V4.04B/WIN                                        #
# Front End V4.20N                                       23/Feb/109  09:16:19 #
# Global Optimizer V1.05D                                                    #
#                                                                            #
#       Target option =  Z80                                                 #
#       Memory model  =  banked                                              #
#       Source file   =  d:\case_i_d95f\ap\common\ap_common2.c               #
#       List file     =  d:\case_i_d95f\ap\ap_radio\list\ap_common2.lst      #
#       Object file   =  d:\case_i_d95f\ap\ap_radio\obj\ap_common2.r01       #
#       ASM file      =  d:\case_i_d95f\ap\ap_radio\list\ap_common2.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\common\ap_common2.c               #
#                                                                            #
#                                             (c) Copyright IAR Systems 1996 #
##############################################################################

   \   0000                    NAME    ap_common2(17)
   \   0000                    RSEG    COM_RES(0)
   \   0000                    RSEG    CONST(0)
   \   0000                    EXTERN  PutS
   \   0000                    PUBLIC  ResShowMultiString
   \   0000                    PUBLIC  ResShowString
   \   0000                    EXTERN  SD_FRead
   \   0000                    EXTERN  SD_FSeek
   \   0000                    EXTERN  SetAsciiFont
   \   0000                    EXTERN  SetTextPos
   \   0000                    EXTERN  UpdateScreen
   \   0000                    PUBLIC  get_large_text_width
   \   0000                    PUBLIC  get_text_width
   \   0000                    PUBLIC  music_ext
   \   0000                    EXTERN  res_entry
   \   0000                    EXTERN  res_fp
   \   0000                    EXTERN  ui_auto_update
   \   0000                    PUBLIC  voice_ext
   \   0000                    EXTERN  ?CLZ80B_4_04_L00
   \   0000                    EXTERN  ?SS_DIV_L02
   \   0000                    EXTERN  ?L_LSH_L03
   \   0000                    EXTERN  ?BANK_CALL_DIRECT_L08
   \   0000                    EXTERN  ?BANK_FAST_LEAVE_L08
   \   0000                    EXTERN  ?STRLEN_L11
   \   0000                    RSEG    COM_RES
   \   0000            get_text_width:
      1          /*
      2          *******************************************************************************
      3          *                ACTOS AP
      4          *        ap common lib file, part 2
      5          *
      6          *        (c) Copyright, Actions Co,Ld.                             
      7          *             All Right Reserved                          
      8          *
      9          *******************************************************************************
     10          */ 
     11          #pragma codeseg(COM_RES)
     12          
     13          #include "ap_common.h"
     14          
     15          //========== global field ===============
     16          
     17          extern res_entry_t res_entry;
     18          
     19          //========== const field ===============
     20          #ifdef __OGG_SUPPORT
     21              const char music_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "OGG", "APE"};
     22          #else
     23              const char music_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "APE"};
     24          #endif
     25          const char voice_ext[][4] = {"WAV", "ACT"};
     26          
     27          //do not use printf
     28          //const char mychar[] = "0123456789";
     29          
     30          /*
     31          ********************************************************************************
     32          * Description : 获得字符串的显示宽度
     33          *
     34          * Arguments   : 
     35          *               
     36          *
     37          * Returns     : 
     38          *
     39          * Notes       : 能够识别 \r \n, 中文作为2个TCHAR 识别
     40          *
     41          ********************************************************************************
     42          */
     43          
     44          int get_text_width(const char *string)
     45          {
   \   0000  C5                PUSH    BC
   \   0001  FDE5              PUSH    IY
   \   0003  DDE5              PUSH    IX
   \   0005  D5                PUSH    DE
   \   0006  DDE1              POP     IX
     46                  int w=0;
   \   0008  FD210000          LD      IY,0
   \   000C            ?0003:
     47          
     48                  ASSERT(string != NULL);
     49                  
     50                  while(*string != 0)
   \   000C  AF                XOR     A
   \   000D  DDB600            OR      (IX+0)
   \   0010  2823              JR      Z,?0002
   \   0012            ?0004:
     51                  {
     52                          if(*string == '\r'|| *string == '\n') {;}       //不计算回车换行
   \   0012  DD7E00            LD      A,(IX+0)
   \   0015  FE0D              CP      13
   \   0017  2818              JR      Z,?0012
   \   0019  DD7E00            LD      A,(IX+0)
   \   001C  FE0A              CP      10
   \   001E  2811              JR      Z,?0012
   \   0020            ?0007:
   \   0020            ?0008:
   \   0020            ?0005:
   \   0020            ?0006:
     53                          else if(*string < 0x80) w += CHAR_WIDTH;
   \   0020  DD7E00            LD      A,(IX+0)
   \   0023  FE80              CP      128
   \   0025  3005              JR      NC,?0011
   \   0027            ?0010:
   \   0027  010600            LD      BC,6
   \   002A  1803              JR      ?0039
   \   002C            ?0011:
     54                          else w += TCHAR_WIDTH;
   \   002C  010800            LD      BC,8
   \   002F            ?0039:
   \   002F  FD09              ADD     IY,BC
   \   0031            ?0012:
   \   0031            ?0009:
     55                          
     56                          string++;
   \   0031  DD23              INC     IX
   \   0033  18D7              JR      ?0003
   \   0035            ?0002:
     57                  }
     58                  return w;
   \   0035  FDE5              PUSH    IY
   \   0037  E1                POP     HL
     59          }
   \   0038  DDE1              POP     IX
   \   003A  FDE1              POP     IY
   \   003C  C1                POP     BC
   \   003D  C30000            JP      LWRD ?BANK_FAST_LEAVE_L08
   \   0040            get_large_text_width:
     60          
     61          /*
     62          ********************************************************************************
     63          * Description : 获得大字体字符串的显示宽度
     64          *
     65          * Arguments   : 
     66          *               
     67          *
     68          * Returns     : 
     69          *
     70          * Notes       : 能够识别 \r \n, 中文作为2个TCHAR 识别
     71          *
     72          ********************************************************************************
     73          */
     74          
     75          int get_large_text_width(const char *string)
     76          {
   \   0040  C5                PUSH    BC
   \   0041  D5                PUSH    DE
     77          //注意: 如果 LARGE_CHAR_WIDTH != TCHAR_WIDTH, 请使用注释起来的代码
     78          
     79                  ASSERT(LARGE_CHAR_WIDTH == TCHAR_WIDTH);
     80                  return strlen(string) * LARGE_CHAR_WIDTH;
   \   0042  6B                LD      L,E
   \   0043  62                LD      H,D
   \   0044  CD0000            CALL    LWRD ?STRLEN_L11
   \   0047  29                ADD     HL,HL
   \   0048  29                ADD     HL,HL
   \   0049  29                ADD     HL,HL
     81                  
     82          /*      
     83                  int w=0;
     84          
     85                  ASSERT(string != NULL);
     86                  
     87                  while(*string != 0)
     88                  {
     89                          if(*string == '\r'|| *string == '\n') {;}       //不计算回车换行
     90                          else if(*string < 0x80) w += LARGE_CHAR_WIDTH;
     91                          else w += TCHAR_WIDTH;
     92                          
     93                          string++;
     94                  }
     95                  return w;
     96          */      
     97          }
   \   004A  F1                POP     AF
   \   004B  C1                POP     BC
   \   004C  C30000            JP      LWRD ?BANK_FAST_LEAVE_L08
   \   004F            ResShowString:
     98          
     99          /*
    100          ********************************************************************************
    101          * Description : 在指定位置显示字符串
    102          *
    103          * Arguments   : id, 资源代号
    104                          x, y, 屏幕坐标, x=255 表示x方向居中
    105          *
    106          * Returns     : 成功, 1
    107                          失败, 0
    108          *
    109          * Notes       : 
    110                          资源的类型可以是 RES_TYPE_STRING 或者 RES_TYPE_MSTRING
    111          *
    112          ********************************************************************************
    113          */
    114          int ResShowString(WORD id, uchar x, uchar y)
    115          {
   \   004F  DDE5              PUSH    IX
   \   0051  DD210000          LD      IX,0
   \   0055  DD39              ADD     IX,SP
   \   0057  C5                PUSH    BC
   \   0058  D5                PUSH    DE
   \   0059  21CEFF            LD      HL,65486
   \   005C  39                ADD     HL,SP
   \   005D  F9                LD      SP,HL
    116                  //需要动态申请 string 的空间
    117          //      char *buf = NULL;
    118                  char buf[50];
    119          
    120                  ASSERT(id <= UIID_MAX);
    121          
    122                  //读entry
    123                  SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
   \   005E  EB                EX      DE,HL
   \   005F  010000            LD      BC,0
   \   0062  3E04              LD      A,4
   \   0064  CD0000            CALL    LWRD ?L_LSH_L03
   \   0067  C5                PUSH    BC
   \   0068  E5                PUSH    HL
   \   0069  CDF700            CALL    LWRD ?0044
   \   006C  E1                POP     HL
   \   006D  E1                POP     HL
    124                  SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
   \   006E  211000            LD      HL,16
   \   0071  E5                PUSH    HL
   \   0072  010000            LD      BC,res_entry
   \   0075  ED5B0000          LD      DE,(res_fp)
   \   0079  CD0000            CALL    LWRD SD_FRead
   \   007C  F1                POP     AF
    125                  if(res_entry.type != RES_TYPE_STRING && 
    126                          res_entry.type != RES_TYPE_MSTRING) return 0;
   \   007D  3A0600            LD      A,(res_entry+6)
   \   0080  3D                DEC     A
   \   0081  3D                DEC     A
   \   0082  280C              JR      Z,?0014
   \   0084  3A0600            LD      A,(res_entry+6)
   \   0087  FE03              CP      3
   \   0089  2805              JR      Z,?0014
   \   008B            ?0016:
   \   008B            ?0015:
   \   008B            ?0013:
   \   008B  210000            LD      HL,0
    127          
    128                  //realloc buf = res_entry.length
    129          //      buf = (char *)BufAlloc(res_entry.length);
    130          //      ASSERT(buf != NULL);
    131                  ASSERT(res_entry.length <= sizeof(buf));
   \   008E  1860              JR      ?0022
   \   0090            ?0014:
    132          
    133                  //读数据
    134                  SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
   \   0090  2A0200            LD      HL,(res_entry+2)
   \   0093  E5                PUSH    HL
   \   0094  2A0000            LD      HL,(res_entry)
   \   0097  E5                PUSH    HL
   \   0098  CDF700            CALL    LWRD ?0044
   \   009B  E1                POP     HL
   \   009C  E1                POP     HL
    135                  SD_FRead(res_fp, buf, res_entry.length);
   \   009D  210400            LD      HL,res_entry+4
   \   00A0  4E                LD      C,(HL)
   \   00A1  23                INC     HL
   \   00A2  46                LD      B,(HL)
   \   00A3  C5                PUSH    BC
   \   00A4  210200            LD      HL,2
   \   00A7  39                ADD     HL,SP
   \   00A8  4D                LD      C,L
   \   00A9  44                LD      B,H
   \   00AA  ED5B0000          LD      DE,(res_fp)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -