📄 tryplaying.s01
字号:
NAME tryplaying(17)
RSEG CODE_2(0)
RSEG CSTR(0)
EXTERN AutoTabNum
EXTERN ClearScreen
EXTERN FMAutoTab
EXTERN FMStatus
EXTERN GetBattery
EXTERN PutS
EXTERN ResShowPic
EXTERN SetTextPos
PUBLIC TryPlayingHandle
EXTERN UpdateScreen
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fmSendCommand
EXTERN g_comval
EXTERN m_FMPlaystatus
EXTERN radio_param
EXTERN slider
EXTERN ui_show_batt
EXTERN ui_slider
PUBLIC volume_callback2
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?SS_DIV_L02
EXTERN ?S_MUL_L02
EXTERN ?S_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG CODE_2
volume_callback2:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * main ap of sdk 3.0
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. *******************************************************************************
; 10. */
; 11.
; 12. #pragma codeseg(CODE_2)
; 13.
; 14. #include "ap_radio.h"
; 15. #include "actos.h"
; 16.
; 17. extern slider_t slider;
; 18. extern comval_t F_comval;
; 19. extern WORD FMStationTab[40]; // 前20个是US, 后20个是JP.
; 20. extern fm_play_status_t FMStatus;
; 21. extern FMRADIO_param_t radio_param;
; 22. extern fm_play_status_t m_FMPlaystatus;
; 23.
; 24. extern WORD FMAutoTab[20]; // 全自动收台,预存台.
; 25. extern BYTE AutoTabNum; // 预存台数.
; 26.
; 27. void volume_callback2(int Vol) //音量设置的CALLBACK函数
; 28. {
PUSH BC
PUSH IX
PUSH DE
POP IX
; 29. //实时改变音量的值
; 30. FMStatus.vol_display = Vol;
LD A,E
LD (FMStatus+8),A
; 31. FMStatus.volume = Vol * 31 / g_comval.VolumeMax;
LD BC,(g_comval+31)
LD B,0
PUSH BC
LD DE,31
PUSH IX
POP BC
CALL LWRD ?S_MUL_L02
POP BC
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatus+6),A
; 32. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
LD C,A
CALL LWRD ?0047
; 33. if (FMStatus.volume == 0)
LD A,(FMStatus+6)
OR A
JR NZ,?0003
?0002:
; 34. fmSendCommand(MC_MUTE, SetMUTE);
LD BC,1
JR ?0040
; 35. else
?0003:
; 36. fmSendCommand(MC_MUTE, releaseMUTE);
LD BC,0
?0040:
LD E,12
CALL LWRD ?0048
?0004:
; 37. }
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0047:
LD B,0
LD E,64
?0048:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
TryPlayingHandle:
; 38. /*
; 39. ********************************************************************************
; 40. * Description : 试播放5秒钟
; 41. *
; 42. * Arguments :
; 43. *
; 44. * Returns : RESULT_RADIO:PLAY和MODE键, RESULT_IGNORE:NEXT和LAST键
; 45. 其它为热键
; 46. *
; 47. * Notes :
; 48. *
; 49. ********************************************************************************
; 50. */
; 51. int TryPlayingHandle(void)
; 52. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65526
ADD HL,SP
LD SP,HL
; 53. int key, play_time = 12;
; 54. int flash_point = 1;
; 55. bool loop = TRUE;
; 56. int k, i;
; 57. if (FMStatus.mode == 0)
LD (IX-4),12
LD (IX-3),0
LD (IX-6),1
LD (IX-5),0
LD (IX-2),1
?0005:
; 58. {
; 59. k = (FMStatus.freq) *100/ 200;
; 60. }
; 61. else
?0006:
; 62. {
; 63. k = (FMStatus.freq)*100 / 200;
LD BC,(FMStatus+1)
LD DE,100
CALL LWRD ?S_MUL_L02
LD BC,200
CALL LWRD ?US_DIV_L02
LD (IX-10),E
LD (IX-9),D
?0007:
; 64. }
; 65. fmSendCommand(MC_PLAY, 0);
LD C,B
LD E,4
CALL LWRD ?0048
; 66. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
LD BC,(FMStatus+6)
CALL LWRD ?0047
?0009:
; 67.
; 68. while (loop)
XOR A
OR (IX-2)
JP Z,?0008
?0010:
; 69. {
; 70. key = ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD B,0
PUSH BC
POP IY
; 71. switch (key)
LD E,C
LD D,B
CALL LWRD ?S_V_SWITCH_L06
DEFW 8
DEFW 3
DEFW 4
DEFW 28
DEFW 29
DEFW 33
DEFW 37
DEFW 38
DEFW 39
DEFW ?0029
DEFW ?0014
DEFW ?0013
DEFW ?0013
DEFW ?0014
DEFW ?0009
DEFW ?0015
DEFW ?0028
DEFW ?0028
?0012:
; 72. {
; 73. case AP_MSG_STANDBY:
; 74. //do nothing
; 75. break;
?0013:
; 76. case AP_KEY_NEXT | AP_KEY_UP:
; 77. case AP_KEY_PREV | AP_KEY_UP: // 停止试播
; 78. return RESULT_IGNORE;
LD HL,48
; 79. case AP_KEY_PLAY | AP_KEY_UP:
JP LWRD ?0038
?0014:
; 80. case AP_KEY_MODE | AP_KEY_UP: // 保存电台, 返回播放界面.
; 81. loop = FALSE;
; 82. key = RESULT_RADIO;
LD (IX-2),B
LD IY,5
; 83. break;
JR ?0009
?0015:
; 84. case AP_MSG_RTC: // 时间记数,闪烁箭头.
; 85. ui_show_batt(GetBattery(), g_comval.BatteryType);
LD BC,(g_comval+15)
CALL LWRD GetBattery
LD E,A
LD A,BYTE3 ui_show_batt
LD HL,LWRD ui_show_batt
CALL LWRD ?BANK_CALL_DIRECT_L08
; 86. play_time--;
LD L,(IX-4)
LD H,(IX-3)
DEC HL
LD (IX-4),L
LD (IX-3),H
; 87. if (play_time <= 0)
LD C,L
LD B,H
LD HL,0
OR 128
SBC HL,BC
JP PO,?0041
XOR H
?0041:
JP M,?0017
?0016:
; 88. {
; 89. loop = FALSE;
; 90. key = 0;
LD (IX-2),0
LD IY,0
?0017:
; 91. }
; 92. if (flash_point) // 箭头闪烁
LD A,(IX-6)
OR (IX-5)
LD A,(FMStatus+5)
JR Z,?0019
?0018:
; 93. {
; 94. if (FMStatus.mode == 0)
OR A
LD C,16
PUSH BC
LD A,(IX-10)
JR NZ,?0021
?0020:
; 95. {
; 96. ResShowPic(DWNARROW, 11 - 5 + k, 16); //显示箭头
ADD A,6
JR ?0044
; 97. //ResShowPic(FQBAR,0,24); //显示US频率条
; 98. }
; 99. else
?0021:
; 100. {
; 101. ResShowPic(DWNARROW, 30 - 6 + k, 16); //显示箭头
ADD A,24
?0044:
LD C,A
LD DE,94
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0022:
; 102. //ResShowPic(FQBAR2,0,24); //显示JP频率条
; 103. }
; 104. flash_point = 0;
XOR A
LD (IX-6),A
LD (IX-5),A
; 105. }
; 106. else // 清除箭头
JR ?0023
?0019:
; 107. {
; 108. if (FMStatus.mode == 0)
OR A
LD C,16
LD A,(IX-10)
JR NZ,?0025
?0024:
; 109. {
; 110. SetTextPos(11 - 5 + k, 16);
ADD A,6
JR ?0045
; 111. }
; 112. else
?0025:
; 113. {
; 114. SetTextPos(30 - 6 + k, 16);
ADD A,24
?0045:
LD E,A
CALL LWRD SetTextPos
?0026:
; 115. }
; 116. PutS(" ", 2);
LD C,2
LD DE,?0027
CALL LWRD PutS
; 117. flash_point = 1;
LD (IX-6),1
LD (IX-5),0
?0023:
; 118. }
; 119. UpdateScreen(NULL);
LD DE,0
CALL LWRD UpdateScreen
; 120. break;
JP LWRD ?0009
?0028:
; 121. case AP_KEY_VOLADD: // 音量调节.
; 122. case AP_KEY_VOLSUB:
; 123. ClearScreen(NULL);
LD E,B
LD D,B
CALL LWRD ClearScreen
; 124. ResShowPic(VOLUMEBK, 0, 0);
LD C,B
PUSH BC
LD DE,504
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 125. slider.max = g_comval.VolumeMax;
LD BC,(g_comval+31)
LD B,0
LD (slider+2),BC
; 126. slider.min = 0;
LD L,B
LD H,B
LD (slider),HL
; 127. slider.step = 1;
INC HL
LD (slider+6),HL
; 128. FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
LD BC,(FMStatus+8)
LD B,H
LD DE,31
CALL LWRD ?S_MUL_L02
LD BC,(g_comval+31)
LD B,H
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatus+6),A
; 129. slider.value = FMStatus.vol_display;
LD BC,(FMStatus+8)
LD B,H
LD (slider+4),BC
; 130. key = ui_slider(&slider, volume_callback2); //音量滚动条显示
LD C,BYTE3 volume_callback2
PUSH BC
LD HL,LWRD volume_callback2
PUSH HL
LD DE,slider
LD A,BYTE3 ui_slider
LD HL,LWRD ui_slider
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 131. m_FMPlaystatus.vol_display = FMStatus.vol_display;
LD A,(FMStatus+8)
LD (m_FMPlaystatus+8),A
; 132. FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
LD C,A
LD DE,31
CALL LWRD ?S_MUL_L02
LD BC,(g_comval+31)
LD B,0
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatus+6),A
; 133. fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
LD BC,FMStatus
LD E,131
CALL LWRD ?0048
; 134. loop = FALSE;
JR ?0046
; 135. break;
?0029:
; 136. default: //热键处理
; 137. key = ap_handle_hotkey(key);
PUSH IY
POP HL
LD E,L
CALL LWRD ap_handle_hotkey
LD C,A
PUSH BC
POP IY
; 138. if (key != 0)
LD A,C
OR A
JP Z,?0009
?0030:
; 139. {
; 140. loop = FALSE;
?0046:
LD (IX-2),0
?0031:
?0011:
JP LWRD ?0009
?0008:
; 141. }
; 142. }
; 143. }
; 144. //fmSendCommand(MC_MUTE,SetMUTE);
; 145. fmSendCommand(MC_GETFREQ, (int) &k); // 保存电台
LD L,A
LD H,A
ADD HL,SP
LD C,L
LD B,H
LD E,17
CALL LWRD ?0048
; 146. FMAutoTab[AutoTabNum] = k;
LD HL,(AutoTabNum)
LD H,0
ADD HL,HL
LD BC,FMAutoTab
ADD HL,BC
LD C,(IX-10)
LD (HL),C
LD B,(IX-9)
INC HL
LD (HL),B
; 147. AutoTabNum++;
LD HL,AutoTabNum
INC (HL)
; 148. for (i = AutoTabNum; i < 20; i++)
LD BC,(AutoTabNum)
LD B,0
LD (IX-8),C
LD (IX-7),B
?0033:
LD BC,32788
LD L,(IX-8)
LD H,(IX-7)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0032
?0034:
; 149. {
; 150. if (radio_param.param1[i] == k) // 删除重复的电台.
LD L,(IX-8)
LD H,(IX-7)
ADD HL,HL
LD BC,(radio_param)
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD C,(IX-10)
LD B,(IX-9)
AND A
SBC HL,BC
JR NZ,?0037
?0036:
; 151. {
; 152. radio_param.param1[i] = 0;
LD L,(IX-8)
LD H,(IX-7)
ADD HL,HL
LD BC,(radio_param)
ADD HL,BC
XOR A
LD (HL),A
INC HL
LD (HL),A
?0037:
INC (IX-8)
JR NZ,?0033
INC (IX-7)
JR ?0033
?0032:
; 153. // FMStatus.station_count--;
; 154. }
; 155. }
; 156. return key;
PUSH IY
POP HL
; 157. }
?0038:
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
RSEG CSTR
?0027:
DEFB ' '
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -