📄 ap_message2_formusic.lst
字号:
\ 01F8 47 LD B,A
\ 01F9 EB EX DE,HL
\ 01FA ED42 SBC HL,BC
\ 01FC 2016 JR NZ,?0064
\ 01FE ?0061:
\ 01FE 180F JR ?0101
\ 0200 ?0062:
285 else return 0;
286 }
\ 0200 ?0060:
287 else if(condition == AP_EVENT_ANY)
\ 0200 79 LD A,C
\ 0201 B0 OR B
\ 0202 2010 JR NZ,?0064
\ 0204 ?0063:
288 {
289 if( (g_ap_event & event) != 0) return g_ap_event;
\ 0204 2A0900 LD HL,(g_ap_event)
\ 0207 7D LD A,L
\ 0208 A3 AND E
\ 0209 47 LD B,A
\ 020A 7C LD A,H
\ 020B A2 AND D
\ 020C B0 OR B
\ 020D 2805 JR Z,?0064
\ 020F ?0065:
\ 020F ?0101:
\ 020F 2A0900 LD HL,(g_ap_event)
\ 0212 1803 JR ?0067
\ 0214 ?0066:
290 else return 0;
291 }
\ 0214 ?0064:
292 else return 0;
\ 0214 210000 LD HL,0
293 }
\ 0217 ?0067:
\ 0217 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 021A ap_del_event:
294
295 /*
296 ********************************************************************************
297 * Description : 清除事件发生标志
298 *
299 * Arguments : event, 事件集合
300 *
301 * Returns :
302 *
303 * Notes :
304 *
305 ********************************************************************************
306 */
307 void ap_del_event(WORD event)
308 {
\ 021A CD0000 CALL LWRD ?ENT_PARM_DIRECT_L09
309 g_ap_event &= (~event);
\ 021D 7B LD A,E
\ 021E 2F CPL
\ 021F 5F LD E,A
\ 0220 7A LD A,D
\ 0221 2F CPL
\ 0222 57 LD D,A
\ 0223 210900 LD HL,g_ap_event
\ 0226 7E LD A,(HL)
\ 0227 A3 AND E
\ 0228 77 LD (HL),A
\ 0229 23 INC HL
\ 022A 7E LD A,(HL)
\ 022B A2 AND D
\ 022C 77 LD (HL),A
310 }
\ 022D C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 0230 ap_sleep:
311
312 /*
313 ********************************************************************************
314 * Description : 睡眠指定的时间
315 *
316 * Arguments : half_sec, 时间, 0.5秒为单位
317 *
318 * Returns : 如果指定的时间内没有其他消息产生, 返回0
319 如果指定的时间内有其他消息产生, 返回该消息
320 * Notes : 如果指定的时间内有其他消息产生, 睡眠的时间将< 指定的时间
321 *
322 ********************************************************************************
323 */
324 char ap_sleep(int half_sec)
325 {
\ 0230 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 0233 FEFF DEFW -2
\ 0235 FDE5 PUSH IY
326 int n=0; //rtc counter
\ 0237 FD210000 LD IY,0
\ 023B ?0069:
327 char key;
328
329 while(1)
330 {
331 key = ap_get_message();
\ 023B CD0000 CALL LWRD ap_get_message
\ 023E DD77FE LD (IX-2),A
332 if(key == AP_MSG_RTC ||
333 key == AP_MSG_CHARGING ||
334 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 0241 FE1C CP 28
\ 0243 2808 JR Z,?0073
\ 0245 FE1B CP 27
\ 0247 2804 JR Z,?0073
\ 0249 FE1E CP 30
\ 024B 2014 JR NZ,?0072
\ 024D ?0073:
\ 024D ?0074:
\ 024D ?0071:
335 {
336 n++;
337 if(n >= half_sec) return 0;
\ 024D DD4E02 LD C,(IX+2)
\ 0250 DD4603 LD B,(IX+3)
\ 0253 FD23 INC IY
\ 0255 FDE5 PUSH IY
\ 0257 E1 POP HL
\ 0258 CD0000 CALL LWRD ?SS_CMP_L02
\ 025B 38DE JR C,?0069
\ 025D ?0075:
\ 025D 2E00 LD L,0
338 }
\ 025F 1813 JR ?0082
\ 0261 ?0076:
\ 0261 ?0072:
339 else if(key == AP_KEY_NULL ||
340 key == AP_MSG_LOCK ||
341 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 0261 AF XOR A
\ 0262 DDB6FE OR (IX-2)
\ 0265 28D4 JR Z,?0069
\ 0267 FE19 CP 25
\ 0269 28D0 JR Z,?0069
\ 026B FE39 CP 57
\ 026D 28CC JR Z,?0069
\ 026F ?0080:
\ 026F ?0081:
\ 026F ?0078:
342 {
343 continue;
\ 026F ?0079:
344 }
345 else
346 {
347 //here maybe hotkey
348 return ap_handle_hotkey(key);
\ 026F 5F LD E,A
\ 0270 CD0000 CALL LWRD ap_handle_hotkey
\ 0273 6F LD L,A
349 }
\ 0274 ?0082:
\ 0274 FDE1 POP IY
\ 0276 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 0279 ?0077:
350 }
351
352 }
\ 0279 ap_handle_hotkey_core:
353
354 /*
355 ********************************************************************************
356 * Description : 处理热键消息, 返回结果消息
357 *
358 * Arguments : key, 按键消息
359 *
360 * Returns : 如果有可识别的热键消息, 返回结果消息
361 如果没有可识别的热键消息, 返回0
362 *
363 * Notes :
364 *
365 ********************************************************************************
366 */
367 char ap_handle_hotkey_core(char key)
368 {
\ 0279 D5 PUSH DE
369 switch( key )
\ 027A CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 027D 0700 DEFW 7
\ 027F 19 DEFB 25
\ 0280 1A DEFB 26
\ 0281 1D DEFB 29
\ 0282 1F DEFB 31
\ 0283 31 DEFB 49
\ 0284 81 DEFB 129
\ 0285 90 DEFB 144
\ 0286 D802 DEFW ?0091
\ 0288 A002 DEFW ?0085
\ 028A 9602 DEFW ?0084
\ 028C AA02 DEFW ?0086
\ 028E 9602 DEFW ?0084
\ 0290 9602 DEFW ?0084
\ 0292 B402 DEFW ?0087
\ 0294 BE02 DEFW ?0088
\ 0296 ?0084:
370 {
371 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
372 case AP_MSG_STANDBY: //自动关机
373 //case AP_MSG_SLEEP: //睡眠
374 //case AP_MSG_LOW_POWER: //低电自动关机
375 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
376 ap_set_event(AP_EVENT_STANDBY);
\ 0296 110200 LD DE,2
\ 0299 CDDE02 CALL LWRD ?0108
377 return RESULT_STANDBY;
\ 029C 2E02 LD L,2
378 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 029E 183A JR ?0092
\ 02A0 ?0085:
379 ap_set_event(AP_EVENT_MAIN);
\ 02A0 110100 LD DE,1
\ 02A3 CDDE02 CALL LWRD ?0108
380 return RESULT_MAIN;
\ 02A6 2E0A LD L,10
381 //break;
382 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 02A8 1830 JR ?0092
\ 02AA ?0086:
383 ap_set_event(AP_EVENT_RECORD);
\ 02AA 110400 LD DE,4
\ 02AD CDDE02 CALL LWRD ?0108
384 return RESULT_RECORD;
\ 02B0 2E09 LD L,9
385 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 02B2 1826 JR ?0092
\ 02B4 ?0087:
386 ap_set_event(AP_EVENT_UDISK);
\ 02B4 110800 LD DE,8
\ 02B7 CDDE02 CALL LWRD ?0108
387 return RESULT_UDISK;
\ 02BA 2E04 LD L,4
388 case AP_MSG_LOCK: //locked
\ 02BC 181C JR ?0092
\ 02BE ?0088:
389 if(ui_run_realtime) //实时模式不显示lock
\ 02BE 3A0000 LD A,(ui_run_realtime)
\ 02C1 B7 OR A
\ 02C2 2014 JR NZ,?0091
\ 02C4 ?0089:
390 {
391 //TODO: send lock message to message queue
392 return 0;
393 }
\ 02C4 ?0090:
394 else
395 {
396 ui_show_lock(1); //这里不处理热键,防止嵌套
\ 02C4 1E01 LD E,1
\ 02C6 3E00 LD A,BYTE3 ui_show_lock
\ 02C8 210000 LD HL,LWRD ui_show_lock
\ 02CB CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
397 ap_set_event(AP_EVENT_REDRAW);
\ 02CE 111000 LD DE,16
\ 02D1 CDDE02 CALL LWRD ?0108
398 return RESULT_REDRAW;
\ 02D4 2E32 LD L,50
399 }
\ 02D6 1802 JR ?0092
\ 02D8 ?0091:
400 default:
401 //here just drop the key
402 return 0;
\ 02D8 2E00 LD L,0
403 }
\ 02DA ?0092:
\ 02DA F1 POP AF
\ 02DB C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 02DE ?0108:
\ 02DE 3E00 LD A,BYTE3 ap_set_event
\ 02E0 21D801 LD HL,LWRD ap_set_event
\ 02E3 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 02E6 ?0083:
404 }
405
\ 0000 RSEG UDATA0
\ 0000 charge_flag:
\ 0001 DEFS 1
\ 0000 RSEG IDATA0
\ 0000 g_light_time:
\ 0001 DEFS 1
\ 0001 g_light_mode:
\ 0002 DEFS 1
\ 0002 g_contrast_num:
\ 0003 DEFS 1
\ 0003 g_sleep_time:
\ 0005 DEFS 2
\ 0005 g_standby_time:
\ 0007 DEFS 2
\ 0007 g_rtc_counter:
\ 0009 DEFS 2
\ 0009 g_ap_event:
\ 000B DEFS 2
\ 000B g_light_flag:
\ 000C DEFS 1
\ 000C ?0012:
\ 000E DEFS 2
\ 000E ?0013:
\ 000F DEFS 1
\ 0000 RSEG CDATA0
\ 0000 00 DEFB 0
\ 0001 00 DEFB 0
\ 0002 00 DEFB 0
\ 0003 0000 DEFW 0
\ 0005 0000 DEFW 0
\ 0007 0000 DEFW 0
\ 0009 0000 DEFW 0
\ 000B 01 DEFB 1
\ 000C 0000 DEFW 0
\ 000E 00 DEFB 0
\ 000F END
Errors: none
Warnings: none
Code size: 742
Constant size: 15
Static variable size: Data(16) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -