📄 ap_common2.lst
字号:
132
133 //显示
134 SetAsciiFont(FONT_TYPE_LARGE);
\ 00B2 1E04 LD E,4
\ 00B4 CD0000 CALL LWRD SetAsciiFont
135 if(x == 255) //居中显示
\ 00B7 DD46FE LD B,(IX-2)
\ 00BA 04 INC B
\ 00BB DD4E06 LD C,(IX+6)
\ 00BE 200C JR NZ,?0018
\ 00C0 ?0017:
136 {
137 SetTextPos((SCR_WIDTH - (BYTE)get_large_text_width(buf)) /2, y);
\ 00C0 C5 PUSH BC
\ 00C1 210200 LD HL,2
\ 00C4 39 ADD HL,SP
\ 00C5 EB EX DE,HL
\ 00C6 CD0001 CALL LWRD ?0045
\ 00C9 C1 POP BC
\ 00CA 1803 JR ?0040
138 PutS(buf, -1);
139 }
140 else
\ 00CC ?0018:
141 {
142 SetTextPos(x, y);
\ 00CC DD5EFE LD E,(IX-2)
\ 00CF ?0040:
\ 00CF CD0000 CALL LWRD SetTextPos
143 PutS(buf, -1);
\ 00D2 0EFF LD C,255
\ 00D4 210000 LD HL,0
\ 00D7 39 ADD HL,SP
\ 00D8 EB EX DE,HL
\ 00D9 CD0000 CALL LWRD PutS
\ 00DC ?0019:
144 }
145 SetAsciiFont(FONT_TYPE_DEFAULT);
\ 00DC 1E00 LD E,0
\ 00DE CD0000 CALL LWRD SetAsciiFont
146 if(ui_auto_update) UpdateScreen(NULL); //MSG
\ 00E1 3A0000 LD A,(ui_auto_update)
\ 00E4 B7 OR A
\ 00E5 2806 JR Z,?0021
\ 00E7 ?0020:
\ 00E7 110000 LD DE,0
\ 00EA CD0000 CALL LWRD UpdateScreen
\ 00ED ?0021:
147
148 //释放内存
149 //if(buf != NULL) BufFree((int *)buf);
150 return 1;
\ 00ED 210100 LD HL,1
151 }
\ 00F0 ?0022:
\ 00F0 DDF9 LD SP,IX
\ 00F2 DDE1 POP IX
\ 00F4 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 00F7 ?0044:
\ 00F7 0E00 LD C,0
\ 00F9 ED5B0000 LD DE,(res_fp)
\ 00FD C30000 JP LWRD SD_FSeek
\ 0100 ?0045:
\ 0100 3E00 LD A,BYTE3 get_large_text_width
\ 0102 214000 LD HL,LWRD get_large_text_width
\ 0105 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0108 5D LD E,L
\ 0109 50 LD D,B
\ 010A 218000 LD HL,128
\ 010D A7 AND A
\ 010E ED52 SBC HL,DE
\ 0110 EB EX DE,HL
\ 0111 0E02 LD C,2
\ 0113 C30000 JP LWRD ?SS_DIV_L02
\ 0116 ResShowMultiString:
152
153 /*
154 ********************************************************************************
155 * Description : 在指定位置显示多语言字符串
156 *
157 * Arguments : id, 资源代号
158 string_id, 语言代号
159 x, y, 屏幕坐标,x=255 表示x方向居中
160 *
161 * Returns : 成功, 1
162 失败, 0
163 *
164 * Notes :
165 *
166 ********************************************************************************
167 */
168 int ResShowMultiString(WORD id, BYTE string_id, uchar x, uchar y)
169 {
\ 0116 DDE5 PUSH IX
\ 0118 C5 PUSH BC
\ 0119 D5 PUSH DE
\ 011A 219CFF LD HL,65436
\ 011D 39 ADD HL,SP
\ 011E F9 LD SP,HL
170 //需要动态申请 string 的空间
171 // char *buf = NULL;
172 char *p;
173 char buf[100];
174
175 ASSERT(id <= UIID_MAX);
176
177 //读entry
178 SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
\ 011F 6B LD L,E
\ 0120 62 LD H,D
\ 0121 010000 LD BC,0
\ 0124 3E04 LD A,4
\ 0126 CD0000 CALL LWRD ?L_LSH_L03
\ 0129 C5 PUSH BC
\ 012A E5 PUSH HL
\ 012B CDF700 CALL LWRD ?0044
\ 012E E1 POP HL
\ 012F E1 POP HL
179 SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
\ 0130 211000 LD HL,16
\ 0133 E5 PUSH HL
\ 0134 010000 LD BC,res_entry
\ 0137 ED5B0000 LD DE,(res_fp)
\ 013B CD0000 CALL LWRD SD_FRead
\ 013E F1 POP AF
180 if( res_entry.type != RES_TYPE_MSTRING) return 0;
\ 013F 3A0600 LD A,(res_entry+6)
\ 0142 FE03 CP 3
\ 0144 2805 JR Z,?0024
\ 0146 ?0023:
\ 0146 210000 LD HL,0
181
182 //realloc buf = res_entry.length
183 //buf = (char *)BufAlloc(res_entry.length);
184 //ASSERT(buf != NULL);
185 ASSERT(res_entry.length <= sizeof(buf));
\ 0149 1878 JR ?0035
\ 014B ?0024:
186
187 //读数据
188 SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
\ 014B 2A0200 LD HL,(res_entry+2)
\ 014E E5 PUSH HL
\ 014F 2A0000 LD HL,(res_entry)
\ 0152 E5 PUSH HL
\ 0153 CDF700 CALL LWRD ?0044
\ 0156 E1 POP HL
\ 0157 E1 POP HL
189 SD_FRead(res_fp, buf, res_entry.length);
\ 0158 210400 LD HL,res_entry+4
\ 015B 4E LD C,(HL)
\ 015C 23 INC HL
\ 015D 46 LD B,(HL)
\ 015E C5 PUSH BC
\ 015F 210200 LD HL,2
\ 0162 39 ADD HL,SP
\ 0163 4D LD C,L
\ 0164 44 LD B,H
\ 0165 ED5B0000 LD DE,(res_fp)
\ 0169 CD0000 CALL LWRD SD_FRead
\ 016C F1 POP AF
190
191 //定位到 string_id
192 p = buf;
\ 016D 210000 LD HL,0
\ 0170 39 ADD HL,SP
\ 0171 E5 PUSH HL
\ 0172 DDE1 POP IX
\ 0174 ?0026:
193 while( string_id)
\ 0174 216600 LD HL,102
\ 0177 39 ADD HL,SP
\ 0178 AF XOR A
\ 0179 B6 OR (HL)
\ 017A 280B JR Z,?0025
\ 017C ?0027:
194 {
195 if(*p == 0) string_id--; //找到第string_id 个0
\ 017C AF XOR A
\ 017D DDB600 OR (IX+0)
\ 0180 2001 JR NZ,?0029
\ 0182 ?0028:
\ 0182 35 DEC (HL)
\ 0183 ?0029:
196 p++;
197 }
198 ASSERT((WORD)(p - buf) <= res_entry.length);
\ 0183 DD23 INC IX
\ 0185 18ED JR ?0026
\ 0187 ?0025:
199
200 //复制到 buf, 这里从buf尾部复制到头部, 存在不安全因素
201 //strcpy(buf, p);
202
203 SetAsciiFont(FONT_TYPE_LARGE);
\ 0187 1E04 LD E,4
\ 0189 CD0000 CALL LWRD SetAsciiFont
204 if(x == 255) //居中显示
\ 018C 216E00 LD HL,110
\ 018F 39 ADD HL,SP
\ 0190 46 LD B,(HL)
\ 0191 04 INC B
\ 0192 23 INC HL
\ 0193 23 INC HL
\ 0194 4E LD C,(HL)
\ 0195 200A JR NZ,?0031
\ 0197 ?0030:
205 {
206 SetTextPos((SCR_WIDTH - (BYTE)get_large_text_width(p)) /2, y);
\ 0197 C5 PUSH BC
\ 0198 DDE5 PUSH IX
\ 019A D1 POP DE
\ 019B CD0001 CALL LWRD ?0045
\ 019E C1 POP BC
\ 019F 1803 JR ?0043
207 PutS(p, -1);
208 }
209 else
\ 01A1 ?0031:
210 {
211 SetTextPos(x, y);
\ 01A1 2B DEC HL
\ 01A2 2B DEC HL
\ 01A3 5E LD E,(HL)
\ 01A4 ?0043:
\ 01A4 CD0000 CALL LWRD SetTextPos
212 PutS(p, -1);
\ 01A7 0EFF LD C,255
\ 01A9 DDE5 PUSH IX
\ 01AB D1 POP DE
\ 01AC CD0000 CALL LWRD PutS
\ 01AF ?0032:
213 }
214
215 SetAsciiFont(FONT_TYPE_DEFAULT);
\ 01AF 1E00 LD E,0
\ 01B1 CD0000 CALL LWRD SetAsciiFont
216 if(ui_auto_update) UpdateScreen(NULL);
\ 01B4 3A0000 LD A,(ui_auto_update)
\ 01B7 B7 OR A
\ 01B8 2806 JR Z,?0034
\ 01BA ?0033:
\ 01BA 110000 LD DE,0
\ 01BD CD0000 CALL LWRD UpdateScreen
\ 01C0 ?0034:
217
218 //释放内存
219 //if(buf != NULL) BufFree((int *)buf);
220 return 1;
\ 01C0 210100 LD HL,1
221 }
\ 01C3 ?0035:
\ 01C3 EB EX DE,HL
\ 01C4 216800 LD HL,104
\ 01C7 39 ADD HL,SP
\ 01C8 F9 LD SP,HL
\ 01C9 EB EX DE,HL
\ 01CA DDE1 POP IX
\ 01CC C30000 JP LWRD ?BANK_FAST_LEAVE_L08
222
223
\ 0000 RSEG CONST
\ 0000 music_ext:
\ 0000 4D5033 DEFB 'MP3'
\ 0003 00 DEFB 0
\ 0004 574D41 DEFB 'WMA'
\ 0007 00 DEFB 0
\ 0008 415346 DEFB 'ASF'
\ 000B 00 DEFB 0
\ 000C 574D56 DEFB 'WMV'
\ 000F 00 DEFB 0
\ 0010 4F4747 DEFB 'OGG'
\ 0013 00 DEFB 0
\ 0014 voice_ext:
\ 0014 574156 DEFB 'WAV'
\ 0017 00 DEFB 0
\ 0018 414354 DEFB 'ACT'
\ 001B 00 DEFB 0
\ 001C END
Errors: none
Warnings: none
Code size: 463
Constant size: 28
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -