main.s01
来自「MP3 整个 SDK」· S01 代码 · 共 1,338 行 · 第 1/2 页
S01
1,338 行
; 203. }
; 204. key=ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD E,C
LD B,0
; 205. switch(key)
LD D,B
CALL LWRD ?S_V_SWITCH_L06
DEFW 12
DEFW 3
DEFW 4
DEFW 28
DEFW 29
DEFW 33
DEFW 37
DEFW 38
DEFW 48
DEFW 67
DEFW 68
DEFW 69
DEFW 70
DEFW ?0109
DEFW ?0054
DEFW ?0055
DEFW ?0097
DEFW ?0103
DEFW ?0058
DEFW ?0056
DEFW ?0057
DEFW ?0096
DEFW ?0033
DEFW ?0053
DEFW ?0097
DEFW ?0103
?0052:
; 206. {
; 207. case AP_MSG_STANDBY:
; 208. //do nothing
; 209. break;
JP LWRD ?0033
?0053:
; 210. case AP_MSG_RTC: //2HZ中断到来,屏幕重画,为了电池显示更新
; 211. ui_show_batt(GetBattery(),F_comval.BatteryType,1); //电池电量显示
LD C,1
PUSH BC
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
POP HL
; 212.
; 213. break;
JP LWRD ?0033
?0054:
; 214. case AP_KEY_HOLD|AP_KEY_NEXT:
; 215. FMStatus.freq+=100;
LD HL,FMStatus+1
LD A,(HL)
ADD A,100
LD (HL),A
JR NC,?0128
INC HL
INC (HL)
?0128:
; 216. result=SearchHandle(10);
LD E,10
JR ?0133
LD HL,LWRD SearchHandle
JR ?0140
PUSH HL
POP IY
; 217. break;
JP LWRD ?0033
?0055:
; 218. case AP_KEY_HOLD|AP_KEY_PREV:
; 219. 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
; 220. result=SearchHandle(20);
LD E,20
?0133:
LD A,BYTE3 SearchHandle
LD HL,LWRD SearchHandle
?0140:
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 221. break;
JP LWRD ?0033
?0056:
; 222. case AP_KEY_NEXT|AP_KEY_UP:
; 223. fmSendCommand(MC_STEPGRID,UP);
LD C,1
JR ?0134
LD A,BYTE3 fmSendCommand
JP LWRD ?0135
CALL LWRD ?BANK_CALL_DIRECT_L08
; 224. fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
JP LWRD ?0154
LD E,131
JP LWRD ?0143
LD HL,LWRD fmSendCommand
JP LWRD ?0159
; 225. Updateflag=1;
LD A,1
JP LWRD ?0156
; 226. need_draw=TRUE;
JP LWRD ?0136
; 227. break;
JP LWRD ?0033
?0057:
; 228. case AP_KEY_PREV|AP_KEY_UP:
; 229. fmSendCommand(MC_STEPGRID,DOWN);
LD C,B
?0134:
LD E,9
JP LWRD ?0141
JP LWRD ?0135
CALL LWRD ?BANK_CALL_DIRECT_L08
; 230. fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
JP LWRD ?0154
LD E,131
JP LWRD ?0143
LD HL,LWRD fmSendCommand
JP LWRD ?0159
; 231. Updateflag=1;
LD A,1
JP LWRD ?0156
; 232. need_draw=TRUE;
JP LWRD ?0136
; 233. break;
JP LWRD ?0033
?0058:
; 234.
; 235. case AP_KEY_MODE|AP_KEY_UP:
; 236. g_list.headid = STOPMENU;
LD HL,490
LD (g_list+6),HL
; 237. g_list.active=active;
LD BC,(?0026)
LD B,D
LD (g_list+4),BC
; 238. g_list.total=6+2; //'+1' for FM Record by ccm
LD HL,8
LD (g_list+2),HL
; 239. g_list.strid=string;
LD HL,string
LD (g_list),HL
; 240. //menu.string_id=0; //多语言修改
; 241. g_list.string_id=F_comval.langid; //语言标志的选择
LD A,(g_comval+12)
LD (g_list+8),A
; 242. result=ui_popup_list(&g_list, NULL);
LD C,B
PUSH BC
PUSH BC
LD DE,g_list
LD A,BYTE3 ui_popup_list
LD HL,LWRD ui_popup_list
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 243. need_draw=TRUE;
; 244. Updateflag=0;
XOR A
LD (Updateflag),A
; 245. //if(result==RESULT_IGNORE)result=0; //del by ccm
; 246. if(result==RESULT_IGNORE) //按PLAY键和8s超时返回FM收音界面,不执行当前激活的菜单!
LD (IX-4),1
LD A,52
XOR L
OR H
JR NZ,?0060
?0059:
; 247. {
; 248. result = 0;
LD IY,0
; 249. break;
JP LWRD ?0033
?0060:
; 250. }
; 251. if(result!=0) return result;
LD A,L
OR H
JR Z,?0062
?0061:
JP LWRD ?0120
JP LWRD ?0121
?0062:
; 252. active = g_list.active;
LD A,(g_list+4)
LD (?0026),A
; 253. if(g_list.active==0) //电台保存
LD HL,(g_list+4)
LD A,L
OR H
JR NZ,?0064
?0063:
; 254. {
; 255. if(fmSendCommand(MC_SAVESTATION,0)!=FALSE)
LD E,11
CALL LWRD ?0169
INC L
DEC L
JP Z,?0033
?0065:
; 256. {
; 257. fmSendCommand(MC_BACKUP,(int)&radio_param);
JR ?0158
LD E,68
JP LWRD ?0160
LD HL,LWRD fmSendCommand
JP LWRD ?0150
?0066:
JP LWRD ?0033
?0064:
; 258. }
; 259. }
; 260. //menu.active==2: add for FM record by ccm //电台录音
; 261. else if(g_list.active==1)
LD A,1
XOR L
OR H
JR NZ,?0069
?0068:
; 262. {
; 263. return RESULT_FMREC_NOSTART;
LD HL,14
; 264. }
JP LWRD ?0121
?0069:
; 265. else if(g_list.active==2) //删除单个电台
LD A,2
XOR L
OR H
JR NZ,?0071
?0070:
; 266. {
; 267. if(fmSendCommand(MC_DELONE,0)!=FALSE)
LD E,85
CALL LWRD ?0169
INC L
DEC L
JP Z,?0033
?0072:
; 268. {
; 269. fmSendCommand(MC_BACKUP,(int)&radio_param);
JR ?0158
LD E,68
JP LWRD ?0160
LD HL,LWRD fmSendCommand
JP LWRD ?0150
?0073:
JP LWRD ?0033
?0071:
; 270. }
; 271. }
; 272. else if(g_list.active==3) //删除全部电台
LD A,3
XOR L
OR H
JR NZ,?0076
?0075:
; 273. {
; 274. fmSendCommand(MC_DELALL,0);
LD E,86
CALL LWRD ?0169
; 275. fmSendCommand(MC_BACKUP,(int)&radio_param);
?0158:
LD BC,radio_param
LD E,68
JP LWRD ?0160
LD HL,LWRD fmSendCommand
JP LWRD ?0150
JP LWRD ?0033
?0076:
; 276. }
; 277. else if(g_list.active==4) //全自动搜台.
LD A,4
XOR L
OR H
JR NZ,?0079
?0078:
; 278. {
; 279. result=AutoSearchHandle(10);
LD E,10
LD A,BYTE3 AutoSearchHandle
LD HL,LWRD AutoSearchHandle
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 280. if(result==RESULT_IGNORE)result=0;
LD A,52
XOR L
OR H
JR NZ,?0081
?0080:
LD IY,0
?0081:
; 281. if(result!=0)return result;
PUSH IY
POP HL
LD A,L
OR H
JR Z,?0083
?0082:
JP LWRD ?0120
JP LWRD ?0121
?0083:
; 282. if(FMStatus.volume)
LD A,(FMStatus+6)
OR A
JP Z,?0162
?0084:
; 283. fmSendCommand(MC_MUTE,releaseMUTE);
CALL LWRD ?0170
?0085:
; 284. fmSendCommand(MC_SETVOLUME,FMStatus.volume);
JP LWRD ?0162
LD B,0
JP LWRD ?0166
JP LWRD ?0160
LD HL,LWRD fmSendCommand
JP LWRD ?0150
JP LWRD ?0033
?0079:
; 285. }
; 286. else if(g_list.active==5) //选择日本频段
LD A,5
XOR L
OR H
JR NZ,?0088
?0087:
; 287. {
; 288. if(FMStatus.mode==1)
LD A,(FMStatus+5)
DEC A
JP NZ,?0033
?0089:
; 289. {
; 290. memcpy(&FMStatusJP,&FMStatus,sizeof(FMStatus));
LD C,8
LD DE,FMStatusJP
LD HL,FMStatus
LDIR
; 291. memcpy(&FMStatus,&FMStatusUS,sizeof(FMStatus));
LD C,8
LD DE,FMStatus
LD HL,FMStatusUS
JR ?0151
; 292. BandSwitch=TRUE;
LD (IX-3),1
?0090:
JP LWRD ?0033
?0088:
; 293. }
; 294. }
; 295. else if(g_list.active==6) //选择欧美频段
LD A,6
XOR L
OR H
JP NZ,?0033
?0092:
; 296. {
; 297. if(FMStatus.mode==0)
LD A,(FMStatus+5)
OR A
JP NZ,?0033
?0094:
; 298. {
; 299. memcpy(&FMStatusUS,&FMStatus,sizeof(FMStatus));
LD C,8
LD DE,FMStatusUS
LD HL,FMStatus
LDIR
; 300. memcpy(&FMStatus,&FMStatusJP,sizeof(FMStatus));
LD C,8
LD DE,FMStatus
LD HL,FMStatusJP
?0151:
LDIR
; 301. BandSwitch=TRUE;
LD (IX-3),1
?0095:
?0093:
?0091:
?0086:
?0077:
?0074:
?0067:
; 302. }
; 303. }
; 304.
; 305. break;
JP LWRD ?0033
?0096:
; 306. case AP_KEY_PLAY|AP_KEY_UP: //跳到电台表的下一个
; 307. fmSendCommand(MC_STEP,UP);
LD C,1
LD E,7
?0141:
LD A,BYTE3 fmSendCommand
?0135:
CALL LWRD ?0171
; 308. fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
?0154:
LD BC,FMStatus
LD E,131
?0143:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
?0159:
CALL LWRD ?BANK_CALL_DIRECT_L08
; 309. Updateflag=1;
LD A,1
?0156:
LD (Updateflag),A
; 310. need_draw=TRUE;
JP LWRD ?0136
; 311. break;
JP LWRD ?0033
?0097:
; 312. case AP_KEY_VOLADD:
; 313. case AP_KEY_VOLADD | AP_KEY_HOLD:
; 314. if (FMStatus.volume ++ <31)
LD HL,FMStatus+6
LD A,(HL)
INC (HL)
CP 31
JR NC,?0099
?0098:
; 315. {
; 316. if(volmuteflag) //处理fm声音在零级还有输出的情况 zxs change
LD A,(volmuteflag)
OR A
JR Z,?0107
?0100:
; 317. {
; 318. fmSendCommand(MC_MUTE,releaseMUTE);
LD C,B
CALL LWRD ?0170
; 319. volmuteflag=0;
XOR A
JR ?0167
?0101:
; 320. }
; 321.
; 322. ui_show_volfm(FMStatus.volume); //显示音量
JR ?0107
LD A,BYTE3 ui_show_volfm
JR ?0168
CALL LWRD ?BANK_CALL_DIRECT_L08
; 323. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
JR ?0162
LD B,0
JR ?0166
JR ?0160
LD HL,LWRD fmSendCommand
JR ?0150
; 324. }
; 325. else
JP LWRD ?0033
?0099:
; 326. {
; 327. FMStatus.volume = 31;
LD A,31
LD (FMStatus+6),A
?0102:
; 328. }
; 329. break;
JP LWRD ?0033
?0103:
; 330. case AP_KEY_VOLSUB:
; 331. case AP_KEY_VOLSUB | AP_KEY_HOLD:
; 332.
; 333. if (FMStatus.volume>0)
LD A,(FMStatus+6)
OR A
JP Z,?0033
?0104:
; 334. {
; 335.
; 336. FMStatus.volume--;
LD HL,FMStatus+6
DEC (HL)
; 337. if((FMStatus.volume==0))
LD A,(FMStatus+6)
OR A
JR NZ,?0107
?0106:
; 338. {
; 339. fmSendCommand(MC_MUTE,SetMUTE); //处理fm声音在零级还有输出的情况 zxs change
LD C,1
CALL LWRD ?0170
; 340. volmuteflag=1;
LD A,1
?0167:
LD (volmuteflag),A
?0107:
; 341. }
; 342.
; 343. ui_show_volfm(FMStatus.volume); //显示音量
LD DE,(FMStatus+6)
LD A,BYTE3 ui_show_volfm
?0168:
LD HL,LWRD ui_show_volfm
CALL LWRD ?BANK_CALL_DIRECT_L08
; 344. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
?0162:
LD BC,(FMStatus+6)
LD B,0
?0166:
LD E,64
?0160:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
?0150:
CALL LWRD ?BANK_CALL_DIRECT_L08
; 345. }
; 346. else
JP LWRD ?0033
?0105:
; 347. {
; 348. FMStatus.volume = 0;
?0108:
; 349.
; 350. }
; 351.
; 352. break;
JP LWRD ?0033
?0109:
; 353. // case AP_KEY_AB | AP_KEY_UP: //进入录音
; 354. // return RESULT_FMREC_AB;
; 355. default: //热键处理
; 356. key=ap_handle_hotkey(key);
LD E,C
CALL LWRD ap_handle_hotkey
LD C,A
; 357. if(key == RESULT_REDRAW)need_draw=TRUE;
LD A,50
XOR C
JR NZ,?0111
?0110:
?0136:
LD (IX-4),1
JP LWRD ?0033
?0111:
; 358. else if(key == RESULT_RECORD) return RESULT_FMREC_START; //for FM record (press REC) by ccm
LD A,9
XOR C
JR NZ,?0114
?0113:
LD HL,13
JR ?0121
?0114:
; 359. else if((key!=0)||(result!=0))
LD A,C
OR A
JR NZ,?0117
PUSH IY
POP HL
LD A,L
OR H
JP Z,?0033
?0117:
?0118:
?0115:
; 360. {
; 361. if(key!=0)return key;
LD A,C
OR A
JR Z,?0120
?0119:
LD L,C
LD H,B
; 362. else
JR ?0121
?0120:
; 363. return result;
PUSH IY
POP HL
; 364. }
?0121:
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0116:
?0112:
?0051:
; 365. }
; 366. }
; 367. }
JP LWRD ?0033
; 368.
; 369.
; 370.
; 371.
; 372.
; 373.
RSEG CSTR
?0016:
DEFB 'ui30.res'
DEFB 0
?0046:
DEFB ' '
DEFB 0
RSEG CONST
string:
DEFW 346
DEFW 347
DEFW 348
DEFW 349
DEFW 460
DEFW 350
DEFW 351
DEFW 352
?0025:
DEFB 'FM'
DEFB 0
DEFB 0
RSEG UDATA0
TimeCount:
DEFS 2
radio_param:
DEFS 4
clrregion:
DEFS 4
g_list:
DEFS 9
g_comval:
DEFS 32
Updateflag:
DEFS 1
FMStationTab:
DEFS 80
FMStatus:
DEFS 8
FMStatusUS:
DEFS 8
FMStatusJP:
DEFS 8
fmdataflag:
DEFS 3
Freqtab:
DEFS 10
RSEG IDATA0
volmuteflag:
DEFS 1
?0026:
DEFS 1
RSEG CDATA0
DEFB 0
DEFB 0
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?