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