📄 main.s01
字号:
; 184. //标志:need_draw,重画 BandSwitch,频段切换 FirstWait,刚进AP
; 185. bool need_draw = TRUE, BandSwitch = TRUE, FirstWait = TRUE;
; 186. long i;
; 187. int k, h;
; 188. static char active = 0; //进入菜单的选中号
; 189.
; 190. if (test == 0xff)
LD IY,0
LD (IX-14),1
LD (IX-13),1
LD (IX-4),1
LD A,255
XOR (IX-2)
OR (IX-1)
JR NZ,?0033
?0032:
; 191. need_draw = FALSE;
LD (IX-14),B
?0033:
; 192. //result=0;
; 193. if (memcmp(fmdataflag, buf, 2) != 0)
LD BC,2
LD DE,fmdataflag
LD HL,6
ADD HL,SP
CALL LWRD ?MEMCMP_L11
LD A,L
OR H
JP Z,?0035
?0034:
; 194. {
; 195. for (k = 0; k < 40; k++)
XOR A
LD (IX-10),A
LD (IX-9),A
?0037:
LD BC,32808
LD L,(IX-10)
LD H,(IX-9)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0036
?0038:
; 196. {
; 197. FMStationTab[k] = 0;
LD L,(IX-10)
LD H,(IX-9)
ADD HL,HL
LD BC,FMStationTab
ADD HL,BC
XOR A
LD (HL),A
INC HL
LD (HL),A
INC (IX-10)
JR NZ,?0037
INC (IX-9)
JR ?0037
?0036:
; 198. }
; 199. memcpy(fmdataflag, buf, 3); //FM BUFFER标志赋初值
LD BC,3
LD DE,fmdataflag
LD HL,6
ADD HL,SP
LDIR
; 200. //US和JP暂存区赋初值
; 201. FMStatusUS.freq=5; //if USBand Freq(x) = (x-87)*10;for example: f(101.2)=(101.2-87)*10=142
LD HL,5
LD (FMStatusUS+1),HL
; 202. FMStatusUS.mode = 0;
XOR A
LD (FMStatusUS+5),A
; 203. FMStatusUS.volume = 24;
LD A,24
LD (FMStatusUS+6),A
; 204. FMStatusUS.vol_display = (FMStatusUS.volume * g_comval.VolumeMax) / 31;
LD BC,(g_comval+31)
LD B,H
LD D,B
LD E,A
CALL LWRD ?S_MUL_L02
LD C,31
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatusUS+8),A
; 205. FMStatusUS.station = 0;
XOR A
LD (FMStatusUS+3),A
; 206. FMStatusUS.station_count = 0;
LD (FMStatusUS+4),A
; 207. FMStatusUS.stereo_status = 1;
LD A,1
LD (FMStatusUS+7),A
; 208. FMStatusJP.freq=1;
LD L,A
LD (FMStatusJP+1),HL
; 209. FMStatusJP.mode = 1;
LD (FMStatusJP+5),A
; 210. FMStatusJP.volume = 24;
LD A,24
LD (FMStatusJP+6),A
; 211. FMStatusJP.vol_display = (FMStatusJP.volume * g_comval.VolumeMax) / 31;
LD BC,(g_comval+31)
LD B,H
LD D,B
LD E,A
CALL LWRD ?S_MUL_L02
LD C,31
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatusJP+8),A
; 212. FMStatusJP.station = 0;
XOR A
LD (FMStatusJP+3),A
; 213. FMStatusJP.station_count = 0;
LD (FMStatusJP+4),A
; 214. FMStatusJP.stereo_status = 1;
LD A,L
LD (FMStatusJP+7),A
; 215. memcpy(&FMStatus, &FMStatusUS, sizeof(FMStatus));
LD C,9
LD DE,FMStatus
LD HL,FMStatusUS
LDIR
; 216. output8(0x99, input8(0x99) & 0xC0 | 0x18);
IN A,(153)
AND 192
OR 24
OUT (153),A
?0035:
?0041:
; 217. }
; 218.
; 219. //clear the message pool 清除“初始化...”过程中按下的键!
; 220. while (ap_get_message() != AP_KEY_NULL)
CALL LWRD ap_get_message
OR A
JR NZ,?0035
?0042:
; 221. {
; 222. ;
; 223. }
; 224.
; 225. while (1)
?0040:
?0044:
; 226. {
; 227. if (BandSwitch) //初始化
XOR A
OR (IX-13)
JR Z,?0047
?0046:
; 228. {
; 229. //initial
; 230. if (FMStatus.mode == 0)
LD A,(FMStatus+5)
OR A
JR NZ,?0049
?0048:
; 231. radio_param.param1 = FMStationTab;
LD HL,FMStationTab
JR ?0137
; 232. else
JR ?0050
?0049:
; 233. radio_param.param1 = &FMStationTab[20];
LD HL,FMStationTab+40
?0137:
LD (radio_param),HL
?0050:
; 234. (fm_play_status_t *) radio_param.param2 = &FMStatus;
LD HL,FMStatus
LD (radio_param+2),HL
; 235.
; 236. fmSendCommand(MC_RESTORE,(int)&radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0167
; 237. fmSendCommand(MC_SETVOLUME, 0); //reagan vol =0 for mute pa
LD BC,0
LD E,64
CALL LWRD ?0167
; 238. if(!fmSendCommand(MC_OPEN,SearchLevel)) //硬件错误提示
LD BC,3
LD E,1
CALL LWRD ?0167
INC L
DEC L
JR NZ,?0052
?0051:
; 239. {
; 240.
; 241. ClearScreen(NULL);
LD E,L
LD D,L
CALL LWRD ClearScreen
; 242. ResShowMultiString(FMERROR, F_comval.langid, -1, 8);
LD C,8
PUSH BC
LD C,255
PUSH BC
LD BC,(g_comval+12)
LD DE,659
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 243. //UpdateScreen(NULL);
; 244.
; 245.
; 246. strcpy(fmdataflag, " ");
LD DE,?0053
LD HL,fmdataflag
CALL LWRD ?STRCPY_L11
; 247. ap_sleep(3);
LD DE,3
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 248. return RESULT_MAIN;
LD HL,25
; 249. }
JP LWRD ?0129
?0052:
; 250.
; 251.
; 252. fmSendCommand(MC_PLAY, 0);
LD BC,0
LD E,4
CALL LWRD ?0167
; 253.
; 254. fmSendCommand(MC_MUTE, SetMUTE);
CALL LWRD ?0169
; 255.
; 256. //fmSendCommand(MC_SETVOLUME, FMStatus.volume);
; 257.
; 258. //fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
; 259.
; 260. BandSwitch = FALSE;
; 261. FirstWait = TRUE;
LD (IX-13),0
LD (IX-4),1
?0047:
; 262. }
; 263.
; 264. if (need_draw) //屏幕重画
XOR A
OR (IX-14)
JR Z,?0055
?0054:
; 265. {
; 266. ShowFreqInFM();
LD A,BYTE3 ShowFreqInFM
LD HL,LWRD ShowFreqInFM
CALL LWRD ?BANK_CALL_DIRECT_L08
; 267. need_draw = FALSE;
LD (IX-14),0
?0055:
; 268. }
; 269. if (FirstWait) //初次进入AP等待1.5S释放MUTE(静音)
XOR A
OR (IX-4)
JR Z,?0059
?0056:
; 270. {
; 271. FirstWait = FALSE;
; 272. ap_sleep(3);
LD DE,3
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 273. //降噪 等FM稳定后打开PA的音量
; 274. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
LD BC,(FMStatus+6)
LD B,0
LD E,64
CALL LWRD ?0167
; 275. fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
LD BC,FMStatus
LD E,131
CALL LWRD ?0167
; 276.
; 277. if(FMStatus.volume)
LD (IX-4),0
LD A,(FMStatus+6)
OR A
JR Z,?0059
?0058:
; 278. fmSendCommand(MC_MUTE, releaseMUTE);
LD BC,0
CALL LWRD ?0168
?0059:
?0057:
; 279. }
; 280. key = ap_get_message();
CALL LWRD ap_get_message
LD (IX-12),A
LD B,0
; 281. if (test == 0xff)
LD A,255
XOR (IX-2)
OR (IX-1)
JR NZ,?0061
?0060:
; 282. key = AP_KEY_MODE | AP_KEY_LONG;
LD (IX-12),135
?0061:
; 283. switch (key)
LD E,(IX-12)
LD D,B
CALL LWRD ?S_V_SWITCH_L06
DEFW 10
DEFW 3
DEFW 4
DEFW 28
DEFW 29
DEFW 33
DEFW 37
DEFW 38
DEFW 39
DEFW 69
DEFW 70
DEFW ?0117
DEFW ?0069
DEFW ?0070
DEFW ?0073
DEFW ?0071
DEFW ?0072
DEFW ?0111
DEFW ?0040
DEFW ?0064
DEFW ?0112
DEFW ?0112
?0063:
; 284. {
; 285. case AP_MSG_STANDBY:
; 286. //do nothing
; 287. break;
JP LWRD ?0040
?0064:
; 288. case AP_MSG_RTC: //2HZ中断到来,屏幕重画,为了电池显示更新
; 289. 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
; 290. if (g_comval.EarProtect_flag)
LD A,(g_comval+24)
OR A
JR Z,?0066
?0065:
; 291. {
; 292. FMStatus.volume = input8(0x99) & 0x3f;
IN A,(153)
AND 63
LD (FMStatus+6),A
; 293. FMStatus.vol_display = FMStatus.volume * g_comval.VolumeMax / 31;
LD BC,(g_comval+31)
LD B,0
LD D,B
LD E,A
CALL LWRD ?S_MUL_L02
LD C,31
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatus+8),A
?0066:
; 294. }
; 295. TimeCount++;
LD HL,(TimeCount)
INC HL
LD (TimeCount),HL
; 296. need_draw = FALSE;
LD (IX-14),0
; 297. if (TimeCount >= 100)
LD BC,32868
LD A,B
XOR H
LD H,A
SBC HL,BC
JP C,?0040
?0067:
; 298. {
; 299. need_draw = TRUE;
; 300. TimeCount = 0;
LD HL,0
LD (TimeCount),HL
JP LWRD ?0147
?0068:
; 301. }
; 302. break;
JP LWRD ?0040
?0069:
; 303. case AP_KEY_HOLD|AP_KEY_NEXT:
; 304. {
; 305. // FMStatus.freq+=1;
; 306. result=SearchHandle(10);
LD E,10
JR ?0144
LD HL,LWRD SearchHandle
JR ?0152
PUSH HL
POP IY
; 307. }
; 308. break;
JP LWRD ?0040
?0070:
; 309. case AP_KEY_HOLD|AP_KEY_PREV:
; 310. {
; 311. // FMStatus.freq-=1;
; 312. result=SearchHandle(20);
LD E,20
?0144:
LD A,BYTE3 SearchHandle
LD HL,LWRD SearchHandle
?0152:
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 313. }
; 314. break;
JP LWRD ?0040
?0071:
; 315. case AP_KEY_NEXT|AP_KEY_UP:
; 316. {
; 317. fmSendCommand(MC_STEPGRID,UP);
LD C,1
JR ?0145
LD A,BYTE3 fmSendCommand
JP LWRD ?0146
CALL LWRD ?BANK_CALL_DIRECT_L08
; 318. fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
JP LWRD ?0161
LD E,131
JP LWRD ?0156
LD HL,LWRD fmSendCommand
JP LWRD ?0163
; 319. need_draw=TRUE;
JP LWRD ?0147
; 320. }
; 321. break;
JP LWRD ?0040
?0072:
; 322. case AP_KEY_PREV|AP_KEY_UP:
; 323. {
; 324. fmSendCommand(MC_STEPGRID,DOWN);
LD C,B
?0145:
LD E,9
JP LWRD ?0154
JP LWRD ?0146
CALL LWRD ?BANK_CALL_DIRECT_L08
; 325. fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
JP LWRD ?0161
LD E,131
JP LWRD ?0156
LD HL,LWRD fmSendCommand
JP LWRD ?0163
; 326. need_draw=TRUE;
JP LWRD ?0147
; 327. }
; 328. break;
JP LWRD ?0040
?0073:
; 329.
; 330. case AP_KEY_MODE | AP_KEY_UP:
; 331. menu.active = active;
LD BC,(?0031)
LD B,D
LD (menu+2),BC
; 332. menu.total = 6 + 2; //'+1' for FM Record by ccm
LD HL,8
LD (menu),HL
; 333. menu.pic_inactive = (WORD *) pic_inactive;
LD HL,pic_inactive
LD (menu+4),HL
; 334. menu.pic_active = (WORD *) pic_active;
LD HL,pic_active
LD (menu+6),HL
; 335. menu.string = (WORD *) string;
LD HL,string
LD (menu+8),HL
; 336. //menu.string_id=0; //多语言修改
; 337. menu.string_id = F_comval.langid; //语言标志的选择
LD A,(g_comval+12)
LD (menu+10),A
; 338. ui_auto_update = FALSE; //FALSE时,保证整屏写完再刷新
XOR A
LD (ui_auto_update),A
; 339. result = ui_function_menu(&menu, NULL);
LD C,B
PUSH BC
PUSH BC
LD DE,menu
LD A,BYTE3 ui_function_menu
LD HL,LWRD ui_function_menu
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
PUSH HL
POP IY
; 340. ui_auto_update = TRUE; //设置恢复
LD A,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -