ui_scroll_string.lst

来自「炬力方案176*132软件源码,适用于AK1025」· LST 代码 · 共 628 行 · 第 1/2 页

LST
628
字号
##############################################################################
#                                                                            #
# IAR Z80/64180 C-Compiler V4.04B/WIN                                        #
# Front End V4.20N                                       18/Nov/107  22:56:56 #
# Global Optimizer V1.05D                                                    #
#                                                                            #
#       Target option =  Z80                                                 #
#       Memory model  =  banked                                              #
#       Source file   =  d:\case_i_d913f\ap\common\ui_scroll_string.c        #
#       List file     =  d:\case_i_d913f\ap\ap_music\list\ui_scroll_string.lst#
#       Object file   =  d:\case_i_d913f\ap\ap_music\obj\ui_scroll_string.r01#
#       ASM file      =  d:\case_i_d913f\ap\ap_music\list\ui_scroll_string.s01#
#       Command line  =  -v0 -mb -OD:\case_i_d913f\ap\ap_music\Obj\ -e -K    #
#                        -w -gA -z9 -RCODE -r0 -DNAPDEBUG                    #
#                        -LD:\case_i_d913f\ap\ap_music\List\ -q -t8          #
#                        -AD:\case_i_d913f\ap\ap_music\List\                 #
#                        -ND:\case_i_d913f\ap\ap_music\List\ -X              #
#                        -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\         #
#                        D:\CASE_I_D913F\AP\COMMON\ui_scroll_string.c        #
#                                                                            #
#                                             (c) Copyright IAR Systems 1996 #
##############################################################################

   \   0000                    NAME    ui_scroll_string(17)
   \   0000                    RSEG    COM_RES(0)
   \   0000                    RSEG    UDATA0(0)
   \   0000                    EXTERN  CharOutRect
   \   0000                    PUBLIC  CountString
   \   0000                    PUBLIC  Count_Byte
   \   0000                    EXTERN  GetTextPos
   \   0000                    PUBLIC  HoriScrollString
   \   0000                    EXTERN  PutS
   \   0000                    EXTERN  RegionCopy
   \   0000                    PUBLIC  ScrollFlag
   \   0000                    PUBLIC  ScrollString
   \   0000                    PUBLIC  ScrollStringInit
   \   0000                    EXTERN  SetTextPos
   \   0000                    PUBLIC  region_scroll
   \   0000                    PUBLIC  scroll_buf
   \   0000                    EXTERN  scroll_cnt
   \   0000                    EXTERN  str_pt
   \   0000                    EXTERN  strhead_pt
   \   0000                    EXTERN  ?CLZ80B_4_04_L00
   \   0000                    EXTERN  ?SS_CMP_L02
   \   0000                    EXTERN  ?BANK_CALL_DIRECT_L08
   \   0000                    EXTERN  ?BANK_LEAVE_DIRECT_L08
   \   0000                    EXTERN  ?BANK_FAST_LEAVE_L08
   \   0000                    EXTERN  ?ENT_PARM_DIRECT_L09
   \   0000                    EXTERN  ?ENT_AUTO_DIRECT_L09
   \   0000                    RSEG    COM_RES
   \   0000            ScrollString:
      1          /*
      2          *******************************************************************************
      3          *                ACTOS AP
      4          *        wma player basal module implementation
      5          *
      6          *        (c) Copyright Actions Co,Ld.
      7          *
      8          *  $Id: ui_scroll.c,v 1.1.1.1 2006/04/21 08:22:43 selina Exp $
      9          *******************************************************************************
     10          */
     11          /*
     12          这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL
     13          */
     14          #pragma codeseg(COM_RES)
     15          #include "actos.h"
     16          #include "ap_common.h"     
     17          #define  DISPLAYWIDTH  128      //显示一行字符的宽度 
     18          region_t  region_scroll; 
     19          char  scroll_buf[32];
     20          char  ScrollFlag;
     21           
     22          void ScrollStringInit(char *str,char language,region_t *scroll);
     23          void HoriScrollString(signed char step,char language,region_t *scroll);
     24          int CountString(char *str,char language,region_t *scroll);
     25          
     26          /* (字符串首址,是否初始化true为要初始化) */
     27          void ScrollString( char * scrollstr, bool mode ,char language,region_t *scroll)
     28          {
   \   0000  CD0000            CALL    LWRD ?ENT_PARM_DIRECT_L09
     29              if (mode)
   \   0003  0C                INC     C
   \   0004  0D                DEC     C
   \   0005  DD6E0C            LD      L,(IX+12)
   \   0008  DD660D            LD      H,(IX+13)
   \   000B  E5                PUSH    HL
   \   000C  DD4E0A            LD      C,(IX+10)
   \   000F  280A              JR      Z,?0003
   \   0011            ?0002:
     30              {
     31                  //初始化滚屏(第一次调用时先显示一串字符)
     32                  ScrollStringInit(scrollstr,language,scroll);
   \   0011  3E00              LD      A,BYTE3 ScrollStringInit
   \   0013  212900            LD      HL,LWRD ScrollStringInit
   \   0016  CD0000            CALL    LWRD ?BANK_CALL_DIRECT_L08
   \   0019  180A              JR      ?0050
     33                  return;
     34              }
   \   001B            ?0003:
     35              HoriScrollString(1,language,scroll);
   \   001B  1E01              LD      E,1
   \   001D  3E00              LD      A,BYTE3 HoriScrollString
   \   001F  21E500            LD      HL,LWRD HoriScrollString
   \   0022  CD0000            CALL    LWRD ?BANK_CALL_DIRECT_L08
   \   0025            ?0050:
   \   0025  E1                POP     HL
     36          }
   \   0026            ?0004:
   \   0026  C30000            JP      LWRD ?BANK_LEAVE_DIRECT_L08
   \   0029            ScrollStringInit:
     37          
     38          void ScrollStringInit(char *str,char language,region_t *scroll)
     39          {
   \   0029  CD0000            CALL    LWRD ?ENT_AUTO_DIRECT_L09
   \   002C  F6FF              DEFW    65526
   \   002E  FDE5              PUSH    IY
   \   0030  DD6E0A            LD      L,(IX+10)
   \   0033  DD660B            LD      H,(IX+11)
   \   0036  E5                PUSH    HL
   \   0037  FDE1              POP     IY
     40              int code;
     41              int count;
     42              bool result;
     43              region_t kregion;//余下部分区域                      
     44              scroll_cnt = 0;
   \   0039  AF                XOR     A
   \   003A  320000            LD      (scroll_cnt),A
     45           
     46              SetTextPos(scroll->x, scroll->y);
   \   003D  FD4E01            LD      C,(IY+1)
   \   0040  FD5E00            LD      E,(IY+0)
   \   0043  CD0000            CALL    LWRD SetTextPos
     47              strhead_pt = str_pt = str;
   \   0046  DD6E02            LD      L,(IX+2)
   \   0049  DD6603            LD      H,(IX+3)
   \   004C  220000            LD      (str_pt),HL
   \   004F  220000            LD      (strhead_pt),HL
     48              //tmpstr = str;
     49              count=CountString(str_pt,language,scroll); 
   \   0052  FDE5              PUSH    IY
   \   0054  DD4E04            LD      C,(IX+4)
   \   0057  EB                EX      DE,HL
   \   0058  3E00              LD      A,BYTE3 CountString
   \   005A  21CE01            LD      HL,LWRD CountString
   \   005D  CD0000            CALL    LWRD ?BANK_CALL_DIRECT_L08
   \   0060  F1                POP     AF
     50              str_pt = PutS(str_pt, count);
   \   0061  4D                LD      C,L
   \   0062  ED5B0000          LD      DE,(str_pt)
   \   0066  CD0000            CALL    LWRD PutS
   \   0069  220000            LD      (str_pt),HL
     51           
     52           
     53          
     54                if(*str_pt!=0)
   \   006C  AF                XOR     A
   \   006D  B6                OR      (HL)
   \   006E  286A              JR      Z,?0006
   \   0070            ?0005:
     55                {
     56                  GetTextPos(&kregion.x, &kregion.y);
   \   0070  210200            LD      HL,2
   \   0073  39                ADD     HL,SP
   \   0074  010100            LD      BC,1
   \   0077  09                ADD     HL,BC
   \   0078  4D                LD      C,L
   \   0079  44                LD      B,H
   \   007A  2B                DEC     HL
   \   007B  EB                EX      DE,HL
   \   007C  CD0000            CALL    LWRD GetTextPos
     57                  kregion.width = scroll->width+scroll->x - kregion.x;
   \   007F  FD7E00            LD      A,(IY+0)
   \   0082  FD8602            ADD     A,(IY+2)
   \   0085  DD96F6            SUB     (IX-10)
   \   0088  DD77F8            LD      (IX-8),A
     58                  kregion.height = scroll->height;
   \   008B  FD4603            LD      B,(IY+3)
   \   008E  DD70F9            LD      (IX-7),B
     59                  //汉字和ASCII的不同处理
     60                  if ((*str_pt >= FirstSectionCode)&&(language!=1))
   \   0091  2A0000            LD      HL,(str_pt)
   \   0094  7E                LD      A,(HL)
   \   0095  FEA1              CP      161
   \   0097  3811              JR      C,?0008
   \   0099  DD4604            LD      B,(IX+4)
   \   009C  05                DEC     B
   \   009D  280B              JR      Z,?0008
   \   009F            ?0010:
   \   009F            ?0009:
   \   009F            ?0007:
     61                    {//汉字
     62                      code = *(int *)str_pt;
   \   009F  46                LD      B,(HL)
   \   00A0  DD70FA            LD      (IX-6),B
   \   00A3  23                INC     HL
   \   00A4  66                LD      H,(HL)
   \   00A5  DD74FB            LD      (IX-5),H
     63                    }
     64                  else
   \   00A8  1809              JR      ?0011
   \   00AA            ?0008:
     65                    {//ASCII
     66                       code = *str_pt;
   \   00AA  4E                LD      C,(HL)
   \   00AB  DD71FA            LD      (IX-6),C
   \   00AE  0600              LD      B,0
   \   00B0  DD70FB            LD      (IX-5),B
   \   00B3            ?0011:
     67                    }
     68          
     69                  //输出最后一个字
     70                  result = CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt);
   \   00B3  3A0000            LD      A,(scroll_cnt)
   \   00B6  4F                LD      C,A
   \   00B7  C5                PUSH    BC
   \   00B8  210400            LD      HL,4
   \   00BB  39                ADD     HL,SP
   \   00BC  E5                PUSH    HL
   \   00BD  2A0000            LD      HL,(str_pt)
   \   00C0  23                INC     HL
   \   00C1  4E                LD      C,(HL)
   \   00C2  0600              LD      B,0
   \   00C4  DD5EFA            LD      E,(IX-6)
   \   00C7  DD56FB            LD      D,(IX-5)
   \   00CA  CD0000            CALL    LWRD CharOutRect
   \   00CD  E1                POP     HL
   \   00CE  E1                POP     HL
     71                  if (!result)
   \   00CF  B7                OR      A
   \   00D0  280E              JR      Z,?0014
   \   00D2            ?0012:
     72                    {
     73                      return;
     74                    }
   \   00D2            ?0013:
     75                  //scroll_cnt = kregion.width-1;
     76              scroll_cnt = kregion.width;
   \   00D2  DD7EF8            LD      A,(IX-8)
   \   00D5  320000            LD      (scroll_cnt),A
     77          
     78              }
     79              else
   \   00D8  1806              JR      ?0014
   \   00DA            ?0006:
     80              {
     81                  str_pt = strhead_pt;
   \   00DA  2A0000            LD      HL,(strhead_pt)
   \   00DD  220000            LD      (str_pt),HL
     82                  return;
     83              }
   \   00E0            ?0014:
     84          
     85          }
   \   00E0            ?0015:
   \   00E0  FDE1              POP     IY
   \   00E2  C30000            JP      LWRD ?BANK_LEAVE_DIRECT_L08
   \   00E5            HoriScrollString:
     86          
     87          //==========================================================
     88          /*
     89          滚动屏幕
     90          */
     91          void HoriScrollString(signed char step,char language,region_t *scroll)
     92          {
   \   00E5  CD0000            CALL    LWRD ?ENT_AUTO_DIRECT_L09
   \   00E8  F0FF              DEFW    65520
   \   00EA  FDE5              PUSH    IY
   \   00EC  DD6E0A            LD      L,(IX+10)
   \   00EF  DD660B            LD      H,(IX+11)
   \   00F2  E5                PUSH    HL
   \   00F3  FDE1              POP     IY
     93              int code;
     94              char *tmpstrpt;
     95              region_t tregion;
     96              region_t sregion;
     97              region_t kregion;//余下部分区域
     98          
     99              tmpstrpt = str_pt;
   \   00F5  2A0000            LD      HL,(str_pt)
   \   00F8  DD75F0            LD      (IX-16),L
   \   00FB  DD74F1            LD      (IX-15),H
    100          
    101              //余下部分区域
    102              kregion.x = scroll->x + scroll->width - step;
   \   00FE  FD7E02            LD      A,(IY+2)
   \   0101  FD8600            ADD     A,(IY+0)
   \   0104  DD9602            SUB     (IX+2)
   \   0107  DD77F2            LD      (IX-14),A
    103              kregion.y = scroll->y;
   \   010A  FD4601            LD      B,(IY+1)
   \   010D  DD70F3            LD      (IX-13),B
    104              kregion.width = step;
   \   0110  DD4602            LD      B,(IX+2)
   \   0113  DD70F4            LD      (IX-12),B
    105              kregion.height = scroll->height;
   \   0116  FD4603            LD      B,(IY+3)
   \   0119  DD70F5            LD      (IX-11),B
    106          
    107              //设定移动的源,目标区域
    108              sregion.x = scroll->x + step;//暂时未考虑为负数的情况
   \   011C  FD7E00            LD      A,(IY+0)
   \   011F  DD8602            ADD     A,(IX+2)
   \   0122  DD77F6            LD      (IX-10),A
    109              tregion.x = scroll->x;
   \   0125  FD4600            LD      B,(IY+0)
   \   0128  DD70FA            LD      (IX-6),B
    110              tregion.y = sregion.y = scroll->y;
   \   012B  FD4601            LD      B,(IY+1)
   \   012E  DD70F7            LD      (IX-9),B
   \   0131  DD70FB            LD      (IX-5),B
    111              sregion.width = scroll->width - step;
   \   0134  FD7E02            LD      A,(IY+2)
   \   0137  DD9602            SUB     (IX+2)
   \   013A  DD77F8            LD      (IX-8),A

⌨️ 快捷键说明

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