📄 ui_scroll_string.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 27/Sep/107 17:30:54 #
# 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_browser\list\ui_scroll_string.lst#
# Object file = d:\case_i_d913f\ap\ap_browser\obj\ui_scroll_string.r01#
# ASM file = d:\case_i_d913f\ap\ap_browser\list\ui_scroll_string.s01#
# Command line = -v0 -mb -OD:\case_i_d913f\ap\ap_browser\Obj\ -e -K #
# -w -gA -s9 -RCODE -r0 -DNAPDEBUG -DAMV_JPG_TXT #
# -LD:\case_i_d913f\ap\ap_browser\List\ -q -t8 #
# -AD:\case_i_d913f\ap\ap_browser\List\ #
# -ND:\case_i_d913f\ap\ap_browser\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 ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 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 C5 PUSH BC
\ 0001 D5 PUSH DE
29 if (mode)
\ 0002 AF XOR A
\ 0003 B1 OR C
\ 0004 210A00 LD HL,10
\ 0007 39 ADD HL,SP
\ 0008 4E LD C,(HL)
\ 0009 23 INC HL
\ 000A 46 LD B,(HL)
\ 000B C5 PUSH BC
\ 000C 2B DEC HL
\ 000D 2B DEC HL
\ 000E 2B DEC HL
\ 000F 4E LD C,(HL)
\ 0010 280A JR Z,?0003
\ 0012 ?0002:
30 {
31 //初始化滚屏(第一次调用时先显示一串字符)
32 ScrollStringInit(scrollstr,language,scroll);
\ 0012 3E00 LD A,BYTE3 ScrollStringInit
\ 0014 212C00 LD HL,LWRD ScrollStringInit
\ 0017 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 001A 180A JR ?0051
33 return;
34 }
\ 001C ?0003:
35 HoriScrollString(1,language,scroll);
\ 001C 1E01 LD E,1
\ 001E 3E00 LD A,BYTE3 HoriScrollString
\ 0020 21F600 LD HL,LWRD HoriScrollString
\ 0023 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0026 ?0051:
\ 0026 E1 POP HL
36 }
\ 0027 ?0004:
\ 0027 E1 POP HL
\ 0028 E1 POP HL
\ 0029 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 002C ScrollStringInit:
37
38 void ScrollStringInit(char *str,char language,region_t *scroll)
39 {
\ 002C FDE5 PUSH IY
\ 002E DDE5 PUSH IX
\ 0030 DD210000 LD IX,0
\ 0034 DD39 ADD IX,SP
\ 0036 C5 PUSH BC
\ 0037 D5 PUSH DE
\ 0038 21F6FF LD HL,65526
\ 003B 39 ADD HL,SP
\ 003C F9 LD SP,HL
\ 003D DD6E08 LD L,(IX+8)
\ 0040 DD6609 LD H,(IX+9)
\ 0043 E5 PUSH HL
\ 0044 FDE1 POP IY
40 int code;
41 int count;
42 bool result;
43 region_t kregion;//余下部分区域
44 scroll_cnt = 0;
\ 0046 AF XOR A
\ 0047 320000 LD (scroll_cnt),A
45
46 SetTextPos(scroll->x, scroll->y);
\ 004A FD4E01 LD C,(IY+1)
\ 004D FD5E00 LD E,(IY+0)
\ 0050 CD0000 CALL LWRD SetTextPos
47 strhead_pt = str_pt = str;
\ 0053 DD6EFC LD L,(IX-4)
\ 0056 DD66FD LD H,(IX-3)
\ 0059 220000 LD (str_pt),HL
\ 005C 220000 LD (strhead_pt),HL
48 //tmpstr = str;
49 count=CountString(str_pt,language,scroll);
\ 005F FDE5 PUSH IY
\ 0061 DD4EFE LD C,(IX-2)
\ 0064 EB EX DE,HL
\ 0065 3E00 LD A,BYTE3 CountString
\ 0067 21E001 LD HL,LWRD CountString
\ 006A CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 006D F1 POP AF
50 str_pt = PutS(str_pt, count);
\ 006E 4D LD C,L
\ 006F ED5B0000 LD DE,(str_pt)
\ 0073 CD0000 CALL LWRD PutS
\ 0076 220000 LD (str_pt),HL
51
52
53
54 if(*str_pt!=0)
\ 0079 AF XOR A
\ 007A B6 OR (HL)
\ 007B 286A JR Z,?0006
\ 007D ?0005:
55 {
56 GetTextPos(&kregion.x, &kregion.y);
\ 007D 210000 LD HL,0
\ 0080 39 ADD HL,SP
\ 0081 010100 LD BC,1
\ 0084 09 ADD HL,BC
\ 0085 4D LD C,L
\ 0086 44 LD B,H
\ 0087 2B DEC HL
\ 0088 EB EX DE,HL
\ 0089 CD0000 CALL LWRD GetTextPos
57 kregion.width = scroll->width+scroll->x - kregion.x;
\ 008C FD7E00 LD A,(IY+0)
\ 008F FD8602 ADD A,(IY+2)
\ 0092 DD96F2 SUB (IX-14)
\ 0095 DD77F4 LD (IX-12),A
58 kregion.height = scroll->height;
\ 0098 FD4603 LD B,(IY+3)
\ 009B DD70F5 LD (IX-11),B
59 //汉字和ASCII的不同处理
60 if ((*str_pt >= FirstSectionCode)&&(language!=1))
\ 009E 2A0000 LD HL,(str_pt)
\ 00A1 7E LD A,(HL)
\ 00A2 FEA1 CP 161
\ 00A4 3811 JR C,?0008
\ 00A6 DD46FE LD B,(IX-2)
\ 00A9 05 DEC B
\ 00AA 280B JR Z,?0008
\ 00AC ?0010:
\ 00AC ?0009:
\ 00AC ?0007:
61 {//汉字
62 code = *(int *)str_pt;
\ 00AC 46 LD B,(HL)
\ 00AD DD70F6 LD (IX-10),B
\ 00B0 23 INC HL
\ 00B1 66 LD H,(HL)
\ 00B2 DD74F7 LD (IX-9),H
63 }
64 else
\ 00B5 1809 JR ?0011
\ 00B7 ?0008:
65 {//ASCII
66 code = *str_pt;
\ 00B7 4E LD C,(HL)
\ 00B8 DD71F6 LD (IX-10),C
\ 00BB 0600 LD B,0
\ 00BD DD70F7 LD (IX-9),B
\ 00C0 ?0011:
67 }
68
69 //输出最后一个字
70 result = CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt);
\ 00C0 3A0000 LD A,(scroll_cnt)
\ 00C3 4F LD C,A
\ 00C4 C5 PUSH BC
\ 00C5 210200 LD HL,2
\ 00C8 39 ADD HL,SP
\ 00C9 E5 PUSH HL
\ 00CA 2A0000 LD HL,(str_pt)
\ 00CD 23 INC HL
\ 00CE 4E LD C,(HL)
\ 00CF 0600 LD B,0
\ 00D1 DD5EF6 LD E,(IX-10)
\ 00D4 DD56F7 LD D,(IX-9)
\ 00D7 CD0000 CALL LWRD CharOutRect
\ 00DA E1 POP HL
\ 00DB E1 POP HL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -