?? autosearchhandle.s01
字號(hào):
?0043:
LD BC,47513
PUSH IY
POP HL
LD A,128
XOR H
LD H,A
SBC HL,BC
JR NC,?0042
?0044:
INC IY
JR ?0043
?0042:
; 223. {
; 224. }
; 225. return Search_Flag;
LD L,(IX-6)
; 226. }
?0172:
LD SP,IX
POP IX
POP IY
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0176:
LD BC,(FMStatus+6)
LD B,0
LD E,64
?0175:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
RestartSearch:
; 227. /*
; 228. ********************************************************************************
; 229. * Description : 設(shè)置門限值,重新開始搜索.
; 230. *
; 231. * Arguments : 門限值
; 232. *
; 233. * Returns : TRUE:繼續(xù)搜索,FALSE:中斷搜索,正常結(jié)束.
; 234. *
; 235. * Notes :
; 236. *
; 237. ********************************************************************************
; 238. */
; 239. bool RestartSearch(byte level)
; 240. {
PUSH BC
PUSH DE
; 241. if(level <= 2)
LD A,2
CP E
JR C,?0047
?0046:
; 242. return FALSE;
LD L,0
JR ?0048
?0047:
; 243. //fmSendCommand(MC_SETVOLUME,0);
; 244. //fmSendCommand(MC_CLOSE,0);
; 245. //fmSendCommand(MC_OPEN,level);
; 246. fmSendCommand(MC_MUTE,SetMUTE);
LD BC,1
LD E,12
CALL LWRD ?0175
; 247. fmSendCommand(MC_SETVOLUME,FMStatus.volume);
CALL LWRD ?0176
; 248. fmSendCommand(MC_RESTORE,(int)&radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0175
; 249. return TRUE;
LD L,1
; 250. }
?0048:
POP AF
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
AutoSearchHandle:
; 251. /*
; 252. ********************************************************************************
; 253. * Description : 全自動(dòng)搜索
; 254. *
; 255. * Arguments : Direct,Next或Last搜索.
; 256. *
; 257. * Returns : 如果有可識(shí)別的熱鍵消息, 返回結(jié)果消息
; 258. 如果沒有可識(shí)別的熱鍵消息, 返回0
; 259. *
; 260. * Notes :
; 261. *
; 262. ********************************************************************************
; 263. */
; 264. int AutoSearchHandle(BYTE Direct)
; 265. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH DE
PUSH AF
PUSH AF
PUSH AF
PUSH AF
; 266. int key;
; 267. bool need_draw=TRUE;
; 268. //BYTE Searchflag=1;
; 269. BYTE Search_Level = SearchLevel;
; 270. bool loop=TRUE;
; 271. BYTE temp;
; 272.
; 273. AutoTabNum = 0; // 全自動(dòng)搜索,從極值開始.
XOR A
LD (AutoTabNum),A
; 274. fmSendCommand(MC_BACKUP,(int)&radio_param);
LD BC,radio_param
LD E,68
CALL LWRD ?0175
; 275. if(FMStatus.mode==0)
LD (IX-8),1
LD (IX-7),5
LD (IX-6),1
LD A,(FMStatus+5)
OR A
LD A,(IX-2)
JR NZ,?0050
?0049:
; 276. {
; 277. if(Direct==10) // US頻段
CP 10
JR NZ,?0052
?0051:
; 278. {
; 279. FMStatus.freq = 0x53d8;
LD HL,21464
JR ?0163
; 280. }
; 281. else
?0052:
; 282. {
; 283. FMStatus.freq = 0xa5e0;
LD HL,42464
JR ?0163
?0053:
; 284. }
; 285. }
; 286. else
?0050:
; 287. { // JP頻段
; 288. if(Direct==10)
CP 10
JR NZ,?0056
?0055:
; 289. {
; 290. FMStatus.freq = 0x28e0;
LD HL,10464
JR ?0163
; 291. }
; 292. else
?0056:
; 293. {
; 294. FMStatus.freq = 0x5f90;
LD HL,24464
?0163:
LD (FMStatus+1),HL
?0057:
?0054:
; 295. }
; 296. }
; 297.
; 298. temp = FMStatus.station_count;
LD A,(FMStatus+4)
LD (IX-5),A
?0059:
; 299. while(loop)
XOR A
OR (IX-6)
JP Z,?0058
?0060:
; 300. {
; 301. if(Direct!=0)
XOR A
OR (IX-2)
JP Z,?0112
?0061:
; 302. {
; 303. if(Direct==10) //NEXT搜索處理
CP 10
JP NZ,?0064
?0063:
; 304. {
; 305. if(((FMStatus.freq+100)>0xa5e0)&&(FMStatus.mode==0))
LD HL,(FMStatus+1)
LD BC,100
ADD HL,BC
LD C,L
LD B,H
LD HL,42464
AND A
SBC HL,BC
JR NC,?0066
LD A,(FMStatus+5)
OR A
JR NZ,?0066
?0068:
?0067:
?0065:
; 306. {
; 307. FMStatus.freq=0x53d8;
LD HL,21464
JR ?0164
; 308. Search_Level--; // 以不同門限搜索.
; 309. loop = RestartSearch(Search_Level);
?0066:
; 310. }
; 311. else if(((FMStatus.freq+100)>0x5f90)&&(FMStatus.mode==1))
LD HL,(FMStatus+1)
LD BC,100
ADD HL,BC
LD C,L
LD B,H
LD HL,24464
AND A
SBC HL,BC
JR NC,?0071
LD A,(FMStatus+5)
DEC A
JR NZ,?0071
?0073:
?0072:
?0070:
; 312. {
; 313. FMStatus.freq=0x28e0;
LD HL,10464
?0164:
LD (FMStatus+1),HL
; 314. Search_Level--;
DEC (IX-7)
; 315. loop = RestartSearch(Search_Level);
LD E,(IX-7)
LD A,BYTE3 RestartSearch
LD HL,LWRD RestartSearch
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-6),L
; 316. }
; 317. else
JR ?0160
?0071:
; 318. FMStatus.freq+=100;
LD HL,FMStatus+1
LD A,(HL)
ADD A,100
LD (HL),A
JR NC,?0160
INC HL
INC (HL)
?0160:
?0074:
?0069:
; 319. if(loop && Search_Show2(UP))
XOR A
OR (IX-6)
JP Z,?0112
LD E,1
LD A,BYTE3 Search_Show2
LD HL,LWRD Search_Show2
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JP Z,?0112
?0078:
?0077:
?0075:
; 320. {
; 321. ShowStationCount(AutoTabNum + 1);
; 322. key = TryPlayingHandle();
; 323. CleanStationCount();
CALL LWRD ?0177
; 324. need_draw = TRUE;
LD (IX-8),1
; 325. if(key == RESULT_RADIO) // 處理Play,mode鍵.
PUSH IY
POP HL
LD A,7
XOR L
OR H
JP Z,?0171
?0079:
; 326. {
; 327. key = RESULT_IGNORE;
; 328. loop = FALSE;
; 329. }
; 330. else
?0080:
; 331. {
; 332. if(key != RESULT_IGNORE && key != 0) // 處理熱鍵.
LD A,52
XOR L
OR H
JP Z,?0112
LD A,L
OR H
JP Z,?0112
?0085:
?0084:
?0082:
; 333. {
; 334. loop = FALSE;
JP LWRD ?0167
?0083:
?0081:
?0076:
?0064:
; 335. }
; 336. }
; 337. }
; 338. }
; 339. else if(Direct==20) //LAST搜索處理
CP 20
JP NZ,?0088
?0087:
; 340. {
; 341. if(((FMStatus.freq-100)<0x53d8)&&(FMStatus.mode==0))
LD HL,(FMStatus+1)
LD BC,65436
ADD HL,BC
LD BC,21464
AND A
SBC HL,BC
JR NC,?0090
LD A,(FMStatus+5)
OR A
JR NZ,?0090
?0092:
?0091:
?0089:
; 342. {
; 343. FMStatus.freq=0xa5e0;
LD HL,42464
JR ?0166
; 344. Search_Level--;
; 345. loop = RestartSearch(Search_Level);
?0090:
; 346. }
; 347. else if(((FMStatus.freq-100)<0x28e0)&&(FMStatus.mode==1))
LD HL,(FMStatus+1)
LD BC,65436
ADD HL,BC
LD BC,10464
AND A
SBC HL,BC
JR NC,?0095
LD A,(FMStatus+5)
DEC A
JR NZ,?0095
?0097:
?0096:
?0094:
; 348. {
; 349. FMStatus.freq=0x5f90;
LD HL,24464
?0166:
LD (FMStatus+1),HL
; 350. Search_Level--;
DEC (IX-7)
; 351. loop = RestartSearch(Search_Level);
LD E,(IX-7)
LD A,BYTE3 RestartSearch
LD HL,LWRD RestartSearch
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-6),L
; 352. }
; 353. else
JR ?0098
?0095:
; 354. FMStatus.freq-=100;
LD HL,FMStatus+1
LD A,(HL)
ADD A,156
LD (HL),A
INC HL
LD A,(HL)
ADC A,255
LD (HL),A
?0098:
?0093:
; 355. if(loop && Search_Show2(DOWN))
XOR A
OR (IX-6)
JR Z,?0112
LD E,0
LD A,BYTE3 Search_Show2
LD HL,LWRD Search_Show2
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR Z,?0112
?0102:
?0101:
?0099:
; 356. {
; 357. ShowStationCount(AutoTabNum + 1);
; 358. key = TryPlayingHandle();
; 359. CleanStationCount();
CALL LWRD ?0177
; 360. need_draw = TRUE;
LD (IX-8),1
; 361. if(key == RESULT_RADIO) // 處理Play,mode鍵.
PUSH IY
POP HL
LD A,7
XOR L
OR H
JR NZ,?0104
?0103:
; 362. {
; 363. key = RESULT_IGNORE;
; 364. loop = FALSE;
?0171:
LD IY,52
JR ?0167
; 365. }
; 366. else
?0104:
; 367. {
; 368. if(key != RESULT_IGNORE && key != 0) // 處理熱鍵.
LD A,52
XOR L
OR H
JR Z,?0112
LD A,L
OR H
JR Z,?0112
?0109:
?0108:
?0106:
; 369. {
; 370. loop = FALSE;
?0167:
LD (IX-6),0
?0107:
?0105:
?0100:
JR ?0112
?0088:
; 371. }
; 372. }
; 373. }
; 374. }
; 375. else if(Direct==50)
CP 50
JR NZ,?0112
?0111:
; 376. {
; 377. Direct=0;
; 378. loop = 0;
; 379. key = 0;
LD (IX-2),0
LD (IX-6),0
LD IY,0
?0112:
?0110:
?0086:
?0062:
; 380. }
; 381. }
; 382.
; 383. if(loop && need_draw) //顯示
XOR A
OR (IX-6)
JR Z,?0114
XOR A
OR (IX-8)
JR Z,?0114
?0116:
?0115:
?0113:
; 384. {
; 385. ShowFreqInFM2();
LD A,BYTE3 ShowFreqInFM2
LD HL,LWRD ShowFreqInFM2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 386. need_draw=FALSE;
LD (IX-8),0
?0114:
; 387. }
; 388.
; 389. if(AutoTabNum >= 20) // 已搜到20個(gè)電臺(tái),正常退出.
LD A,(AutoTabNum)
CP 20
JR C,?0118
?0117:
; 390. loop = FALSE;
LD (IX-6),0
?0118:
; 391. if(loop)
XOR A
OR (IX-6)
JP Z,?0059
?0119:
; 392. {
; 393. key=ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD B,0
PUSH BC
POP IY
; 394. switch(key)
LD A,29
XOR C
JP Z,?0059
; 395. {
; 396. bool Search_Flag = FALSE;
?0122:
; 397. case AP_MSG_STANDBY:
; 398. //do nothing
; 399. break;
?0123:
LD A,33
XOR C
JR Z,?0130
LD A,48
XOR C
JR NZ,?0124
?0130:
; 400. case AP_KEY_PLAY | AP_KEY_UP:
; 401. case AP_KEY_MODE|AP_KEY_UP: // 保存電臺(tái), 返回播放界面.
; 402. loop = FALSE;
; 403. key = RESULT_IGNORE;
LD (IX-6),B
LD IY,52
; 404. break;
JP LWRD ?0059
?0124:
; 405. default: //熱鍵處理
; 406. key=ap_handle_hotkey(key);
PUSH IY
POP HL
LD E,L
CALL LWRD ap_handle_hotkey
LD C,A
PUSH BC
POP IY
; 407. if(key == RESULT_REDRAW)need_draw=TRUE;
LD A,50
XOR C
JR NZ,?0126
?0125:
LD (IX-8),1
JP LWRD ?0059
?0126:
; 408. else if(key!=0)
PUSH IY
POP HL
LD A,L
OR H
JP Z,?0059
?0128:
; 409. {
; 410. loop = FALSE;
LD (IX-6),B
?0129:
?0127:
?0121:
?0120:
JP LWRD ?0059
?0058:
; 411. }
; 412. } // end switch(key)
; 413. } // end if(loop)
; 414. } // end while(loop)
; 415. if(AutoTabNum > 0)
LD A,(AutoTabNum)
OR A
JR Z,?0132
?0131:
; 416. {
; 417. memcpy(radio_param.param1, FMAutoTab, AutoTabNum * 2);
LD L,A
LD H,0
ADD HL,HL
LD C,L
LD A,C
LD B,H
LD DE,(radio_param)
LD HL,FMAutoTab
OR B
JR Z,?0161
LDIR
?0161:
; 418. //if(FMStatus.station_count < AutoTabNum)
; 419. if(temp < AutoTabNum) // 覆蓋所有電臺(tái)
LD A,(AutoTabNum)
LD B,A
LD A,(IX-5)
CP B
JR NC,?0134
?0133:
; 420. {
; 421. FMStatus.station_count = AutoTabNum;
LD A,B
JR ?0168
; 422. }
; 423. else
?0134:
; 424. {
; 425. if(key == 0)
PUSH IY
POP HL
LD A,L
OR H
JR NZ,?0137
?0136:
; 426. {
; 427. FMStatus.station_count = AutoTabNum;
LD A,B
LD (FMStatus+4),A
?0137:
; 428. }
; 429. if(key == RESULT_IGNORE) // 覆蓋部分電臺(tái)
LD A,52
XOR L
OR H
JR NZ,?0141
?0138:
; 430. {
; 431. if(temp != 0)
OR (IX-5)
JR Z,?0141
?0140:
; 432. FMStatus.station_count = temp;
?0168:
LD (FMStatus+4),A
?0141:
?0139:
?0135:
; 433. }
; 434. }
; 435. FMStatus.freq = FMAutoTab[0];
LD HL,(FMAutoTab)
LD (FMStatus+1),HL
; 436. FMStatus.station = 0;
XOR A
LD (FMStatus+3),A
; 437. fmSendCommand(MC_RESTORE,(int)&radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0175
?0132:
; 438. }
; 439.
; 440. if(key == RESULT_IGNORE)
PUSH IY
POP HL
LD A,52
XOR L
OR H
JR NZ,?0143
?0142:
; 441. {
; 442. key = 0;
LD IY,0
?0143:
; 443. }
; 444.
; 445.
; 446. if(FMStatus.station_count > 0x00) // 沒有搜到電臺(tái)退出的情況.
LD A,(FMStatus+4)
OR A
JR Z,?0145
?0144:
; 447. {
; 448. fmSendCommand(MC_STEP,UP);
LD BC,1
LD E,7
CALL LWRD ?0175
; 449. for(temp=0; temp<0xff; temp++) // 延遲
LD (IX-5),0
?0147:
LD A,(IX-5)
CP 255
JR NC,?0146
?0148:
INC (IX-5)
JR ?0147
?0146:
; 450. {
; 451. }
; 452. fmSendCommand(MC_BACKUP,(int)&radio_param);
LD BC,radio_param
LD E,68
CALL LWRD ?0175
?0145:
; 453. }
; 454. return key;
PUSH IY
POP HL
; 455. }
JP LWRD ?0172
?0177:
LD DE,(AutoTabNum)
LD D,0
INC DE
LD A,BYTE3 ShowStationCount
LD HL,LWRD ShowStationCount
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,BYTE3 TryPlayingHandle
LD HL,LWRD TryPlayingHandle
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
LD A,BYTE3 CleanStationCount
LD HL,LWRD CleanStationCount
JP LWRD ?BANK_CALL_DIRECT_L08
; 456.
; 457.
; 458.
; 459.
; 460.
; 461.
RSEG CSTR
?0008:
DEFB ':'
DEFB 0
RSEG UDATA0
FMAutoTab:
DEFS 40
AutoTabNum:
DEFS 1
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -