📄 ap_common2.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 12/Apr/106 09:56:13 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d35f\ap\common\ap_common2.c #
# List file = d:\case_i_d35f\ap\ap_main\list\ap_common2.lst #
# Object file = d:\case_i_d35f\ap\ap_main\release\obj\ap_common2.r01#
# Command line = -v0 -mb -OD:\case_i_d35f\ap\ap_main\release\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d35f\ap\ap_main\List\ -q -t8 -X #
# -Id:\sdk_i_35f\inc\ -Id:\case_i_d35f\inc\ #
# d:\case_i_d35f\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 const char music_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "OGG"};
21 const char voice_ext[][4] = {"WAV", "ACT"};
22
23 //do not use printf
24 //const char mychar[] = "0123456789";
25
26 /*
27 ********************************************************************************
28 * Description : 获得字符串的显示宽度
29 *
30 * Arguments :
31 *
32 *
33 * Returns :
34 *
35 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
36 *
37 ********************************************************************************
38 */
39
40 int get_text_width(const char *string)
41 {
\ 0000 C5 PUSH BC
\ 0001 FDE5 PUSH IY
\ 0003 DDE5 PUSH IX
\ 0005 D5 PUSH DE
\ 0006 DDE1 POP IX
42 int w=0;
\ 0008 FD210000 LD IY,0
\ 000C ?0003:
43
44 ASSERT(string != NULL);
45
46 while(*string != 0)
\ 000C AF XOR A
\ 000D DDB600 OR (IX+0)
\ 0010 2823 JR Z,?0002
\ 0012 ?0004:
47 {
48 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:
49 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:
50 else w += TCHAR_WIDTH;
\ 002C 010800 LD BC,8
\ 002F ?0039:
\ 002F FD09 ADD IY,BC
\ 0031 ?0012:
\ 0031 ?0009:
51
52 string++;
\ 0031 DD23 INC IX
\ 0033 18D7 JR ?0003
\ 0035 ?0002:
53 }
54 return w;
\ 0035 FDE5 PUSH IY
\ 0037 E1 POP HL
55 }
\ 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:
56
57 /*
58 ********************************************************************************
59 * Description : 获得大字体字符串的显示宽度
60 *
61 * Arguments :
62 *
63 *
64 * Returns :
65 *
66 * Notes : 能够识别 \r \n, 中文作为2个TCHAR 识别
67 *
68 ********************************************************************************
69 */
70
71 int get_large_text_width(const char *string)
72 {
\ 0040 C5 PUSH BC
\ 0041 D5 PUSH DE
73 //注意: 如果 LARGE_CHAR_WIDTH != TCHAR_WIDTH, 请使用注释起来的代码
74
75 ASSERT(LARGE_CHAR_WIDTH == TCHAR_WIDTH);
76 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
77
78 /*
79 int w=0;
80
81 ASSERT(string != NULL);
82
83 while(*string != 0)
84 {
85 if(*string == '\r'|| *string == '\n') {;} //不计算回车换行
86 else if(*string < 0x80) w += LARGE_CHAR_WIDTH;
87 else w += TCHAR_WIDTH;
88
89 string++;
90 }
91 return w;
92 */
93 }
\ 004A F1 POP AF
\ 004B C1 POP BC
\ 004C C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 004F ResShowString:
94
95 /*
96 ********************************************************************************
97 * Description : 在指定位置显示字符串
98 *
99 * Arguments : id, 资源代号
100 x, y, 屏幕坐标, x=255 表示x方向居中
101 *
102 * Returns : 成功, 1
103 失败, 0
104 *
105 * Notes :
106 资源的类型可以是 RES_TYPE_STRING 或者 RES_TYPE_MSTRING
107 *
108 ********************************************************************************
109 */
110 int ResShowString(WORD id, uchar x, uchar y)
111 {
\ 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
112 //需要动态申请 string 的空间
113 // char *buf = NULL;
114 char buf[50];
115
116 ASSERT(id <= UIID_MAX);
117
118 //读entry
119 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
120 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
121 if(res_entry.type != RES_TYPE_STRING &&
122 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
123
124 //realloc buf = res_entry.length
125 // buf = (char *)BufAlloc(res_entry.length);
126 // ASSERT(buf != NULL);
127 ASSERT(res_entry.length <= sizeof(buf));
\ 008E 1860 JR ?0022
\ 0090 ?0014:
128
129 //读数据
130 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
131 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)
\ 00AE CD0000 CALL LWRD SD_FRead
\ 00B1 F1 POP AF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -