⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 3 页
字号:
; 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 + -