📄 ui_scroll.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 17:00:35 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\common\ui_scroll.c #
# List file = d:\case_i_d90f\ap\ap_music\list\ui_scroll.lst #
# Object file = d:\case_i_d90f\ap\ap_music\obj\ui_scroll.r01 #
# ASM file = d:\case_i_d90f\ap\ap_music\list\ui_scroll.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_music\Obj\ -e -K -w #
# -gA -z9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d90f\ap\ap_music\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_music\List\ #
# -ND:\case_i_d90f\ap\ap_music\List\ -X #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# D:\CASE_I_D90F\AP\COMMON\ui_scroll.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_scroll(17)
\ 0000 RSEG COM_SCROLL(0)
\ 0000 RSEG UDATA0(0)
\ 0000 EXTERN CharOutRect
\ 0000 PUBLIC Count
\ 0000 EXTERN GetTextPos
\ 0000 PUBLIC HoriScroll
\ 0000 EXTERN PutS
\ 0000 EXTERN RegionCopy
\ 0000 PUBLIC Scroll
\ 0000 PUBLIC ScrollInit
\ 0000 EXTERN SetTextPos
\ 0000 PUBLIC scroll_cnt
\ 0000 PUBLIC str_pt
\ 0000 PUBLIC 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_SCROLL
\ 0000 Scroll:
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/05/22 03:23:59 selina Exp $
9 *******************************************************************************
10 */
11 /*
12 这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL
13 */
14 #pragma codeseg(COM_SCROLL)
15 #include "actos.h"
16 //#include "ap_music.h"
17 #include "ap_common.h"
18
19 char *str_pt;//字符串当前指针
20 char *strhead_pt;//字串首址记录
21 BYTE scroll_cnt;
22
23
24 void ScrollInit(char *str,char language);
25 void HoriScroll(signed char step,char language);
26 int Count(char *str,char language);
27
28 /* (字符串首址,是否初始化true为要初始化) */
29 void Scroll( char * scrollstr, bool mode ,char language)
30 {
\ 0000 CD0000 CALL LWRD ?ENT_PARM_DIRECT_L09
31 if (mode)
\ 0003 0C INC C
\ 0004 0D DEC C
\ 0005 DD4E0A LD C,(IX+10)
\ 0008 280A JR Z,?0003
\ 000A ?0002:
32 {
33 //初始化滚屏(第一次调用时先显示一串字符)
34 ScrollInit(scrollstr,language);
\ 000A 3E00 LD A,BYTE3 ScrollInit
\ 000C 212100 LD HL,LWRD ScrollInit
\ 000F CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
35 return;
36 }
\ 0012 180A JR ?0004
\ 0014 ?0003:
37 HoriScroll(1,language);
\ 0014 1E01 LD E,1
\ 0016 3E00 LD A,BYTE3 HoriScroll
\ 0018 21CC00 LD HL,LWRD HoriScroll
\ 001B CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
38 }
\ 001E ?0004:
\ 001E C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 0021 ScrollInit:
39
40
41 void ScrollInit(char *str,char language)
42 {
\ 0021 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 0024 F8FF DEFW -8
\ 0026 FDE5 PUSH IY
43 int code;
44 int count;
45 bool result;
46 region_t kregion;//余下部分区域
47 scroll_cnt = 0;
\ 0028 AF XOR A
\ 0029 320400 LD (scroll_cnt),A
48
49 SetTextPos(scrollregionx_def, scrollregiony_def);
\ 002C 0E6E LD C,110
\ 002E 1E2D LD E,45
\ 0030 CD0000 CALL LWRD SetTextPos
50 strhead_pt = str_pt = str;
\ 0033 DD6E02 LD L,(IX+2)
\ 0036 DD6603 LD H,(IX+3)
\ 0039 220000 LD (str_pt),HL
\ 003C 220200 LD (strhead_pt),HL
51 //tmpstr = str;
52 count=Count(str_pt,language);
\ 003F DD4E04 LD C,(IX+4)
\ 0042 EB EX DE,HL
\ 0043 3E00 LD A,BYTE3 Count
\ 0045 217A01 LD HL,LWRD Count
\ 0048 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
53 //if(count > 9) count = 9;
54 str_pt = PutS(str_pt, count);
\ 004B 4D LD C,L
\ 004C ED5B0000 LD DE,(str_pt)
\ 0050 CD0000 CALL LWRD PutS
\ 0053 220000 LD (str_pt),HL
55
56 if(*str_pt!=0)
\ 0056 AF XOR A
\ 0057 B6 OR (HL)
\ 0058 2867 JR Z,?0006
\ 005A ?0005:
57 {
58 GetTextPos(&kregion.x, &kregion.y);
\ 005A 210200 LD HL,2
\ 005D 39 ADD HL,SP
\ 005E 010100 LD BC,1
\ 0061 09 ADD HL,BC
\ 0062 4D LD C,L
\ 0063 44 LD B,H
\ 0064 2B DEC HL
\ 0065 EB EX DE,HL
\ 0066 CD0000 CALL LWRD GetTextPos
59
60 kregion.width = scrollregionw_def+scrollregionx_def - kregion.x;
\ 0069 3EB9 LD A,185
\ 006B DD96F8 SUB (IX-8)
\ 006E DD77FA LD (IX-6),A
61 kregion.height = scrollregionh_def;
\ 0071 DD36FB10 LD (IX-5),16
62 //汉字和ASCII的不同处理
63 if ((*str_pt >= FirstSectionCode)&&(language!=1))
\ 0075 2A0000 LD HL,(str_pt)
\ 0078 7E LD A,(HL)
\ 0079 FEA1 CP 161
\ 007B 380F JR C,?0008
\ 007D DD4604 LD B,(IX+4)
\ 0080 05 DEC B
\ 0081 2809 JR Z,?0008
\ 0083 ?0010:
\ 0083 ?0009:
\ 0083 ?0007:
64 {//汉字
65 code = *(int *)str_pt;
\ 0083 46 LD B,(HL)
\ 0084 23 INC HL
\ 0085 66 LD H,(HL)
\ 0086 68 LD L,B
\ 0087 E5 PUSH HL
\ 0088 FDE1 POP IY
66 }
67 else
\ 008A 1806 JR ?0011
\ 008C ?0008:
68 {//ASCII
69 code = *str_pt;
\ 008C 4E LD C,(HL)
\ 008D 0600 LD B,0
\ 008F C5 PUSH BC
\ 0090 FDE1 POP IY
\ 0092 ?0011:
70 }
71
72 //输出最后一个字
73 result = CharOutRect(code, &kregion, scroll_cnt);
\ 0092 3A0400 LD A,(scroll_cnt)
\ 0095 4F LD C,A
\ 0096 C5 PUSH BC
\ 0097 210400 LD HL,4
\ 009A 39 ADD HL,SP
\ 009B 4D LD C,L
\ 009C 44 LD B,H
\ 009D FDE5 PUSH IY
\ 009F D1 POP DE
\ 00A0 CD0000 CALL LWRD CharOutRect
\ 00A3 E1 POP HL
74 result = CharOutRect(code, &kregion, scroll_cnt);
\ 00A4 3A0400 LD A,(scroll_cnt)
\ 00A7 4F LD C,A
\ 00A8 C5 PUSH BC
\ 00A9 210400 LD HL,4
\ 00AC 39 ADD HL,SP
\ 00AD 4D LD C,L
\ 00AE 44 LD B,H
\ 00AF FDE5 PUSH IY
\ 00B1 D1 POP DE
\ 00B2 CD0000 CALL LWRD CharOutRect
\ 00B5 E1 POP HL
75 if (!result)
\ 00B6 B7 OR A
\ 00B7 280E JR Z,?0014
\ 00B9 ?0012:
76 {
77 return;
78 }
\ 00B9 ?0013:
79 //scroll_cnt = kregion.width-1;
80 scroll_cnt = kregion.width;
\ 00B9 DD7EFA LD A,(IX-6)
\ 00BC 320400 LD (scroll_cnt),A
81 }
82 else
\ 00BF 1806 JR ?0014
\ 00C1 ?0006:
83 {
84 str_pt = strhead_pt;
\ 00C1 2A0200 LD HL,(strhead_pt)
\ 00C4 220000 LD (str_pt),HL
85 return;
86 }
\ 00C7 ?0014:
87 }
\ 00C7 ?0015:
\ 00C7 FDE1 POP IY
\ 00C9 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 00CC HoriScroll:
88
89 //==========================================================
90 /*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -