📄 searchhandle.s01
字号:
NAME searchhandle(17)
RSEG CODE_1(0)
RSEG CSTR(0)
RSEG CONST(0)
EXTERN ClearScreen
EXTERN FMStatus
EXTERN Freqtab
EXTERN GetBattery
EXTERN PutS
EXTERN ResShowPic
PUBLIC SearchHandle
PUBLIC Search_Show
EXTERN SetTextPos
PUBLIC ShowFreqInFM
EXTERN UpdateScreen
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fmSendCommand
EXTERN g_comval
EXTERN itoa_1
EXTERN itoa_2
EXTERN itoa_3
EXTERN radio_param
EXTERN ui_show_batt
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?SS_DIV_L02
EXTERN ?SS_MOD_L02
EXTERN ?S_MUL_L02
EXTERN ?SL_CMP_L03
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRCPY_L11
EXTERN ?STRCAT_L11
RSEG CODE_1
SearchHandle:
; 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_1)
; 13.
; 14. #include "ap_radio.h"
; 15. #include "actos.h"
; 16. extern comval_t F_comval;
; 17. extern fm_play_status_t FMStatus;
; 18. extern FMRADIO_param_t radio_param;
; 19. extern char Freqtab[10];
; 20. void ShowFreqInFM(void); //FM主界面显示
; 21. bool Search_Show(FM_direct_t Direct); //自动搜台时的显示
; 22.
; 23.
; 24. extern FMStatus_Tab_t d_FMStatus;
; 25. extern char SearchFreq;
; 26. extern char SetFreq;
; 27.
; 28. int SearchHandle(BYTE Direct)
; 29. {
PUSH BC
PUSH IX
PUSH AF
LD D,E
; 30. int key;
; 31. bool need_draw = TRUE;
; 32. BYTE Searchflag = 1;
LD HL,1
ADD HL,SP
LD (HL),1
DEC HL
LD (HL),1
?0003:
; 33. while (1)
; 34. {
; 35. if (Direct != 0)
INC D
DEC D
JP Z,?0038
?0005:
; 36. {
; 37. if (Direct == 10) //NEXT搜索处理
LD A,D
CP 10
JR NZ,?0008
?0007:
; 38. {
; 39. if(((FMStatus.freq+1)>210)&&(FMStatus.mode==0))FMStatus.freq=0;
LD BC,(FMStatus+1)
INC BC
LD HL,210
AND A
SBC HL,BC
JR NC,?0010
LD A,(FMStatus+5)
OR A
JR Z,?0109
?0012:
?0011:
?0009:
?0010:
; 40. else if(((FMStatus.freq+1)>140)&&(FMStatus.mode==1))FMStatus.freq=0;
LD HL,140
AND A
SBC HL,BC
JR NC,?0015
LD A,(FMStatus+5)
DEC A
JR NZ,?0015
?0017:
?0016:
?0014:
?0109:
LD L,A
LD H,A
JR ?0103
; 41. else
?0015:
; 42. {
; 43. FMStatus.freq+=1;
LD L,C
LD H,B
?0103:
LD (FMStatus+1),HL
?0018:
?0013:
; 44. }
; 45. if(Search_Show(UP))return 0;
PUSH DE
LD E,1
LD A,BYTE3 Search_Show
LD HL,LWRD Search_Show
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
POP DE
JR Z,?0038
?0019:
JR ?0107
; 46. }
?0020:
?0008:
; 47. else if (Direct == 20) //LAST搜索处理
CP 20
JR NZ,?0023
?0022:
; 48. {
; 49. if(((FMStatus.freq-1)<2)&&(FMStatus.mode==0))FMStatus.freq=210;
LD HL,(FMStatus+1)
LD BC,65535
ADD HL,BC
LD BC,2
AND A
SBC HL,BC
JR NC,?0025
LD A,(FMStatus+5)
OR A
JR NZ,?0025
?0027:
?0026:
?0024:
LD HL,210
JR ?0105
?0025:
; 50. else if(((FMStatus.freq-1)<2)&&(FMStatus.mode==1))FMStatus.freq=140;
LD HL,(FMStatus+1)
LD BC,65535
ADD HL,BC
LD BC,2
AND A
SBC HL,BC
JR NC,?0030
LD A,(FMStatus+5)
DEC A
JR NZ,?0030
?0032:
?0031:
?0029:
LD HL,140
?0105:
LD (FMStatus+1),HL
; 51. else
JR ?0033
?0030:
; 52. {
; 53. FMStatus.freq-=1;
LD HL,FMStatus+1
LD A,(HL)
ADD A,255
LD (HL),A
INC HL
LD A,(HL)
ADC A,255
LD (HL),A
?0033:
?0028:
; 54. }
; 55. if(Search_Show(DOWN))return 0;
PUSH DE
LD E,B
LD A,BYTE3 Search_Show
LD HL,LWRD Search_Show
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
POP DE
JR Z,?0038
?0034:
JR ?0107
; 56. }
?0035:
?0023:
; 57. else if (Direct == 50)
CP 50
JR NZ,?0038
?0037:
; 58. {
; 59. Direct = 0;
; 60. return 0;
?0107:
LD HL,0
; 61. }
JP LWRD ?0065
?0038:
?0036:
?0021:
?0006:
; 62. }
; 63. if (need_draw) //显示
LD HL,1
ADD HL,SP
XOR A
OR (HL)
JR Z,?0040
?0039:
; 64. {
; 65. ShowFreqInFM();
LD A,BYTE3 ShowFreqInFM
LD HL,LWRD ShowFreqInFM
CALL LWRD ?BANK_CALL_DIRECT_L08
; 66. need_draw = FALSE;
LD HL,1
ADD HL,SP
LD (HL),0
?0040:
; 67. }
; 68. key = ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD B,0
PUSH BC
POP IX
; 69. switch (key)
LD A,29
XOR C
JP Z,?0003
?0042:
; 70. {
; 71. case AP_MSG_STANDBY:
; 72. //do nothing
; 73. break;
?0043:
LD A,38
XOR C
JR NZ,?0051
; 74. case AP_KEY_NEXT | AP_KEY_UP: //NEXT搜索时按NEXT键,停止搜索
; 75. if (Searchflag == 1)
LD L,B
LD H,B
ADD HL,SP
LD B,(HL)
DEC B
JR Z,?0110
?0044:
; 76. {
; 77. Searchflag = 0;
?0045:
; 78. }
; 79. else if (Direct == 10)
LD A,D
CP 10
JP NZ,?0003
?0047:
; 80. {
; 81. Direct = 50;
LD D,50
; 82. if(FMStatus.volume)
LD A,(FMStatus+6)
OR A
JP Z,?0003
?0049:
; 83. fmSendCommand(MC_MUTE, releaseMUTE);
JR ?0108
?0050:
?0048:
?0046:
; 84. }
; 85. break;
?0051:
LD A,37
XOR C
JR NZ,?0059
; 86. case AP_KEY_PREV | AP_KEY_UP: //LAST搜索时按LAST键,停止搜索
; 87. if (Searchflag == 1)
LD L,B
LD H,B
ADD HL,SP
LD B,(HL)
DEC B
JR NZ,?0053
?0052:
; 88. {
; 89. Searchflag = 0;
?0110:
LD (HL),B
JP LWRD ?0003
?0053:
; 90. }
; 91. else if (Direct == 20)
LD A,D
CP 20
JP NZ,?0003
?0055:
; 92. {
; 93. Direct = 50;
LD D,50
; 94. if(FMStatus.volume)
LD A,(FMStatus+6)
OR A
JP Z,?0003
?0057:
; 95. fmSendCommand(MC_MUTE, releaseMUTE);
?0108:
PUSH DE
CALL LWRD ?0127
POP DE
?0058:
?0056:
?0054:
; 96. }
; 97. break;
JP LWRD ?0003
?0059:
; 98. default: //热键处理
; 99. key = ap_handle_hotkey(key);
PUSH DE
PUSH IX
POP HL
LD E,L
CALL LWRD ap_handle_hotkey
LD C,A
PUSH BC
POP IX
POP DE
; 100. if (key == RESULT_REDRAW)
LD A,46
XOR C
JR NZ,?0061
?0060:
; 101. need_draw = TRUE;
LD HL,1
ADD HL,SP
LD (HL),1
JP LWRD ?0003
?0061:
; 102. else if (key != 0)
PUSH IX
POP HL
LD A,L
OR H
JP Z,?0003
?0063:
; 103. {
; 104. return key;
; 105. }
?0065:
POP AF
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0127:
LD BC,0
?0128:
LD E,12
?0129:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
?0064:
?0062:
?0041:
; 106. }
; 107. }
; 108. }
Search_Show:
; 109.
; 110. bool Search_Show(FM_direct_t Direct)
; 111. {
PUSH BC
PUSH IX
PUSH DE
PUSH AF
; 112. bool Search_Flag;
; 113. int i;
; 114. FMStatus.stereo_status = 1;
LD A,1
LD (FMStatus+7),A
; 115. FMStatus.station = 0;
XOR A
LD (FMStatus+3),A
; 116. fmSendCommand(MC_MUTE, SetMUTE);
LD BC,1
CALL LWRD ?0128
; 117. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
LD BC,(FMStatus+6)
LD B,0
LD E,64
CALL LWRD ?0129
; 118. fmSendCommand(MC_RESTORE, (int) &radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0129
; 119. Search_Flag = fmSendCommand(MC_SEARCH, Direct);
LD HL,2
ADD HL,SP
LD C,(HL)
LD B,0
LD E,10
CALL LWRD ?0129
PUSH HL
LD HL,2
ADD HL,SP
POP BC
LD (HL),C
; 120. if (Search_Flag) //搜台成功后,MUTE释放
XOR A
OR C
JR Z,?0067
?0066:
; 121. {
; 122. fmSendCommand(MC_MUTE, releaseMUTE);
CALL LWRD ?0127
; 123. fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
LD BC,FMStatus
LD E,131
CALL LWRD ?0129
?0067:
; 124. }
; 125. ShowFreqInFM();
LD A,BYTE3 ShowFreqInFM
LD HL,LWRD ShowFreqInFM
CALL LWRD ?BANK_CALL_DIRECT_L08
; 126. for (i = 0; i < 0x3999; i++)
LD IX,0
?0069:
LD BC,47513
PUSH IX
POP HL
LD A,128
XOR H
LD H,A
SBC HL,BC
JR NC,?0068
?0070:
INC IX
JR ?0069
?0068:
; 127. {
; 128. }
; 129. return Search_Flag;
LD HL,0
ADD HL,SP
LD L,(HL)
; 130. }
POP AF
POP AF
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
ShowFreqInFM:
; 131.
; 132. void ShowFreqInFM(void)
; 133. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65518
ADD HL,SP
LD SP,HL
; 134. char buf[4] =
; 135. { "FM" };
EX DE,HL
LD HL,?0072
LD BC,4
LDIR
; 136. long i;
; 137. int k, h;
; 138. char FMTab[7];
; 139.
; 140. ClearScreen(NULL);
LD E,C
LD D,B
CALL LWRD ClearScreen
; 141. SetTextPos(128 / 2 - 6 * 3, 0);
LD E,46
CALL LWRD SetTextPos
; 142. if ((FMStatus.station_count > 0) && (FMStatus.station > 0)) //显示电台号
LD A,(FMStatus+4)
OR A
JR Z,?0074
LD A,(FMStatus+3)
OR A
JR Z,?0074
?0076:
?0075:
?0073:
; 143. {
; 144. strcpy(FMTab, "[");
LD DE,?0077
LD HL,4
ADD HL,SP
CALL LWRD ?STRCPY_L11
; 145. strcat(FMTab, "CH");
LD DE,?0078
LD HL,4
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 146. *itoa_2(FMStatus.station, buf);
LD HL,0
ADD HL,SP
LD C,L
LD B,H
LD DE,(FMStatus+3)
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 147. strcat(FMTab, buf);
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,4
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 148. strcat(FMTab, "]");
LD DE,?0079
LD HL,4
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 149. PutS(FMTab, -1);
LD C,255
LD HL,4
ADD HL,SP
EX DE,HL
CALL LWRD PutS
?0074:
; 150. }
; 151.
; 152. ResShowPic(RA_FM, 16, 0); //fm 标志显示
LD C,0
PUSH BC
LD C,16
LD DE,433
CALL LWRD ?0130
POP AF
; 153. if (FMStatus.stereo_status == 0)
LD A,(FMStatus+7)
OR A
JR NZ,?0081
?0080:
; 154. {
; 155. ResShowPic(RA_STERE, 128 - 30, 0); //显示立体声
LD C,A
PUSH BC
LD C,98
LD DE,440
CALL LWRD ?0130
POP AF
?0081:
; 156. }
; 157.
; 158. ui_show_batt(GetBattery(), F_comval.BatteryType); //电池电量显示
LD BC,(g_comval+15)
CALL LWRD GetBattery
LD E,A
LD D,0
LD A,BYTE3 ui_show_batt
LD HL,LWRD ui_show_batt
CALL LWRD ?BANK_CALL_DIRECT_L08
; 159. strcpy(Freqtab, "<");
LD DE,?0082
LD HL,Freqtab
CALL LWRD ?STRCPY_L11
; 160. strcat(Freqtab, "FM");
LD DE,?0083
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 161. #if 1
; 162. //strcpy(Freqtab,"FM");
; 163. //频率换算及转换成ASCII码
; 164. k = FMStatus.freq;
LD IY,(FMStatus+1)
; 165. if(FMStatus.mode==0)
LD A,(FMStatus+5)
OR A
LD BC,10
PUSH IY
POP DE
CALL LWRD ?SS_DIV_L02
JR NZ,?0085
?0084:
; 166. i=k/10 + 87;
LD HL,87
JR ?0111
LD A,H
JR ?0113
SBC A,A
JR ?0115
LD B,C
JR ?0116
LD (IX-5),H
JR ?0117
LD (IX-3),B
; 167. else
JR ?0086
?0085:
; 168. i=k/10 + 76;
LD HL,76
?0111:
ADD HL,DE
LD A,H
?0113:
RLCA
SBC A,A
?0115:
LD C,A
LD B,C
?0116:
LD (IX-6),L
LD (IX-5),H
?0117:
LD (IX-4),C
LD (IX-3),B
?0086:
; 169.
; 170. h=k%10;
LD BC,10
PUSH IY
POP DE
CALL LWRD ?SS_MOD_L02
LD (IX-2),E
; 171.
; 172.
; 173.
; 174. if (i < 100)
LD L,B
LD H,B
PUSH HL
LD L,100
PUSH HL
LD C,(IX-4)
LD B,(IX-3)
LD L,(IX-6)
LD H,(IX-5)
CALL LWRD ?SL_CMP_L03
LD HL,0
JR NC,?0088
?0087:
; 175. *itoa_2(i, buf);
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-6)
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 176. else
JR ?0089
?0088:
; 177. *itoa_3(i, buf);
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-6)
LD D,(IX-5)
LD A,BYTE3 itoa_3
LD HL,LWRD itoa_3
CALL LWRD ?BANK_CALL_DIRECT_L08
?0089:
; 178. strcat(Freqtab, buf);
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 179. strcat(Freqtab, ".");
LD DE,?0090
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 180.
; 181. *itoa_1(h, buf);
LD HL,0
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-2)
LD A,BYTE3 itoa_1
LD HL,LWRD itoa_1
CALL LWRD ?BANK_CALL_DIRECT_L08
; 182. //buf[1]=' ';
; 183. //buf[1] = 0;
; 184. strcat(Freqtab, buf);
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 185. strcat(Freqtab, ">");
LD DE,?0091
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 186. #else
; 187. *itoa_2(SetFreq, buf);
; 188. strcat(Freqtab, buf);
; 189. *itoa_2(SearchFreq, buf);
; 190. strcat(Freqtab, buf);
; 191.
; 192. #endif
; 193.
; 194.
; 195.
; 196. SetTextPos((128 - 6 * 8) / 2, 8);
LD C,8
LD E,40
CALL LWRD SetTextPos
; 197. PutS(Freqtab, -1); //显示电台频率
LD C,255
LD DE,Freqtab
CALL LWRD PutS
; 198. if (FMStatus.mode == 0)
LD A,(FMStatus+5)
OR A
LD BC,(FMStatus+1)
LD DE,100
CALL LWRD ?S_MUL_L02
LD BC,200
CALL LWRD ?US_DIV_L02
LD C,16
PUSH BC
LD A,E
JR NZ,?0093
?0092:
; 199. {
; 200. k = (FMStatus.freq )*100/200;
; 201.
; 202. ResShowPic(DWNARROW, 11 - 5 + k, 16); //显示箭头
ADD A,6
CALL LWRD ?0131
POP AF
; 203. ResShowPic(FQBAR, 0, 24); //显示US频率条
LD C,24
PUSH BC
LD C,0
LD DE,167
JR ?0112
LD HL,LWRD ResShowPic
JR ?0114
POP AF
; 204. }
; 205. else
JR ?0094
?0093:
; 206. {
; 207. k = (FMStatus.freq )*100/200;
; 208.
; 209. ResShowPic(DWNARROW, 30 - 6 + k, 16); //显示箭头
ADD A,24
CALL LWRD ?0131
POP AF
; 210. ResShowPic(FQBAR2, 0, 24); //显示JP频率条
LD C,24
PUSH BC
LD C,0
LD DE,168
?0112:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
?0114:
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0094:
; 211. }
; 212. UpdateScreen(NULL); //刷新
LD DE,0
CALL LWRD UpdateScreen
; 213. }
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0131:
LD C,A
LD DE,94
?0130:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
; 214.
RSEG CSTR
?0077:
DEFB '['
DEFB 0
?0078:
DEFB 'CH'
DEFB 0
?0079:
DEFB ']'
DEFB 0
?0082:
DEFB '<'
DEFB 0
?0083:
DEFB 'FM'
DEFB 0
?0090:
DEFB '.'
DEFB 0
?0091:
DEFB '>'
DEFB 0
RSEG CONST
?0072:
DEFB 'FM'
DEFB 0
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -