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

📄 ui_main_for_music.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
字号:
	NAME	ui_main_for_music(17)
	RSEG	COM_MAIN(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	EXTERN	GetDCStatus
	EXTERN	GetUsbCableStatus
	EXTERN	PutS
	EXTERN	PutSDImage
	EXTERN	SD_FRead
	EXTERN	SD_FSeek
	EXTERN	SetAsciiFont
	EXTERN	SetBackgdColor
	EXTERN	SetPenColor
	EXTERN	SetTextPos
	EXTERN	ap_sleep
	PUBLIC	itoa_1
	PUBLIC	itoa_2
	PUBLIC	itoa_3
	PUBLIC	itoa_4
	PUBLIC	main_ResShowPic
	EXTERN	res_entry
	EXTERN	res_fp
	EXTERN	res_region
	PUBLIC	ui_show_a
	PUBLIC	ui_show_b
	PUBLIC	ui_show_batt
	PUBLIC	ui_show_c
	PUBLIC	ui_show_d
	PUBLIC	ui_show_f
	PUBLIC	ui_show_g
	PUBLIC	ui_show_lock
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?UC_DIV_L01
	EXTERN	?UC_MOD_L01
	EXTERN	?US_DIV_L02
	EXTERN	?SS_DIV_L02
	EXTERN	?US_MOD_L02
	EXTERN	?L_LSH_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_MAIN
itoa_1:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib , main ui control
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.
; 7.	*             All Right Reserved
; 8.	*
; 9.	*******************************************************************************
; 10.	*/
; 11.	#pragma codeseg(COM_MAIN)
; 12.	
; 13.	#include "ap_common.h"
; 14.	
; 15.	//主界面为了不用bank切换而使用 ResShowPic()
; 16.	extern res_entry_t res_entry;
; 17.	extern region_t res_region;
; 18.	extern BYTE charge_flag;
; 19.	
; 20.	//bank const
; 21.	/*注意-以下函数必须能访问到这些常量 */
; 22.	#pragma memory=constseg(COM_MAIN_D)
; 23.	
; 24.	#pragma memory=default
; 25.	
; 26.	/*
; 27.	********************************************************************************
; 28.	* Description : 数字转换成字符串
; 29.	*
; 30.	* Arguments   : i, 数字
; 31.	*               buf, 输出字符串指针, 3 bytes
; 32.	*
; 33.	* Returns     : 成功, 输出字符串指针
; 34.	*
; 35.	* Notes       : 数字只能是 0~9
; 36.	*
; 37.	********************************************************************************
; 38.	*/
; 39.	char *itoa_1(BYTE i, char *buf)
; 40.	{
	PUSH	IX
	PUSH	BC
	POP	IX
; 41.	
; 42.	    buf[0] = (i % 10)+'0';
	LD	B,10
	LD	A,E
	CALL	LWRD ?UC_MOD_L01
	ADD	A,48
	LD	(IX+0),A
; 43.	    buf[1] = 0;
	LD	(IX+1),0
; 44.	    return buf;
?0044:
	PUSH	IX
	POP	HL
; 45.	}
	POP	IX
	JP	LWRD ?BANK_FAST_LEAVE_L08
itoa_2:
; 46.	
; 47.	/*
; 48.	********************************************************************************
; 49.	* Description : 数字转换成字符串
; 50.	*
; 51.	* Arguments   : i, 数字
; 52.	*               buf, 输出字符串指针, 3 bytes
; 53.	*
; 54.	* Returns     : 成功, 输出字符串指针
; 55.	*
; 56.	* Notes       : 数字只能是 00~99
; 57.	*
; 58.	********************************************************************************
; 59.	*/
; 60.	char *itoa_2(BYTE i, char *buf)
; 61.	{
	PUSH	IX
	PUSH	BC
	POP	IX
	LD	D,E
; 62.	    buf[0] = (i % 100) / 10+'0';
	LD	B,100
	LD	A,E
	CALL	LWRD ?UC_MOD_L01
	LD	B,10
	CALL	LWRD ?UC_DIV_L01
	ADD	A,48
	LD	(IX+0),A
; 63.	    buf[1] = (i % 10)+'0';
	LD	A,D
	CALL	LWRD ?UC_MOD_L01
	ADD	A,48
	LD	(IX+1),A
; 64.	    buf[2] = 0;
	LD	(IX+2),0
; 65.	    return buf;
	JP	LWRD ?0044
; 66.	}
itoa_3:
; 67.	/*
; 68.	********************************************************************************
; 69.	* Description : 数字转换成字符串
; 70.	*
; 71.	* Arguments   : i, 数字
; 72.	*               buf, 输出字符串指针,4 bytes
; 73.	*
; 74.	* Returns     : 成功, 输出字符串指针
; 75.	*
; 76.	* Notes       : 数字只能是 000~999
; 77.	*
; 78.	********************************************************************************
; 79.	*/
; 80.	char *itoa_3(WORD i, char *buf)
; 81.	{
	PUSH	IY
	PUSH	IX
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 82.	
; 83.	    buf[0] = (i % 1000) / 100+'0' ;
	LD	BC,1000
	CALL	LWRD ?US_MOD_L02
	LD	BC,100
; 84.	    buf[1] = (i % 100) / 10+'0' ;
	CALL	LWRD ?0049
	LD	C,10
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+1),A
; 85.	    buf[2] = (i % 10)+'0';
	CALL	LWRD ?0050
	LD	A,E
	ADD	A,48
	LD	(IX+2),A
; 86.	    buf[3] = 0;
	LD	(IX+3),B
; 87.	
; 88.	    return buf;
?0045:
	PUSH	IX
	POP	HL
; 89.	}
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0049:
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+0),A
?0050:
	PUSH	IY
	POP	DE
	JP	LWRD ?US_MOD_L02
itoa_4:
; 90.	/*
; 91.	********************************************************************************
; 92.	* Description : 数字转换成字符串
; 93.	*
; 94.	* Arguments   : i, 数字
; 95.	*               buf, 输出字符串指针,5 bytes
; 96.	*
; 97.	* Returns     : 成功, 输出字符串指针
; 98.	*
; 99.	* Notes       : 数字只能是 0000~9999
; 100.	*
; 101.	********************************************************************************
; 102.	*/
; 103.	char *itoa_4(WORD i, char *buf)
; 104.	{
	PUSH	IY
	PUSH	IX
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 105.	
; 106.	    buf[0] = (i % 10000) / 1000+'0' ;
	LD	BC,10000
	CALL	LWRD ?US_MOD_L02
	LD	BC,1000
; 107.	    buf[1] = (i % 1000) / 100+'0' ;
	CALL	LWRD ?0049
	LD	BC,100
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+1),A
; 108.	    buf[2] = (i % 100) / 10+'0' ;
	CALL	LWRD ?0050
	LD	C,10
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	ADD	A,48
	LD	(IX+2),A
; 109.	    buf[3] = (i % 10)+'0';
	CALL	LWRD ?0050
	LD	A,E
	ADD	A,48
	LD	(IX+3),A
; 110.	    buf[4] = 0;
	LD	(IX+4),B
; 111.	
; 112.	    return buf;
	JP	LWRD ?0045
; 113.	}
main_ResShowPic:
; 114.	
; 115.	
; 116.	//只有这个界面使用,为了提高效率而放在这里
; 117.	int main_ResShowPic(WORD id, uchar x, uchar y)
; 118.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
; 119.	    WORD buf[2];    //buffer for sd read
; 120.	
; 121.	    //ASSERT(id <= UIID_MAX);
; 122.	
; 123.	    //读entry
; 124.	    SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
	LD	L,E
	LD	H,D
	LD	BC,0
	LD	A,4
	CALL	LWRD ?L_LSH_L03
	PUSH	BC
	PUSH	HL
	LD	C,0
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 125.	    SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
	LD	HL,16
	PUSH	HL
	LD	BC,res_entry
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 126.	    if(res_entry.type != RES_TYPE_PIC) return 0;
	LD	A,(res_entry+6)
	DEC	A
	JR	Z,?0003
?0002:
	LD	HL,0
; 127.	    ASSERT(res_entry.length <= 512);
	JR	?0004
?0003:
; 128.	
; 129.	    //读数据
; 130.	    SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
	LD	HL,(res_entry+2)
	PUSH	HL
	LD	HL,(res_entry)
	PUSH	HL
	LD	C,A
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 131.	
; 132.	    SD_FRead(res_fp, buf, sizeof(buf));
	LD	HL,4
	PUSH	HL
	DEC	HL
	DEC	HL
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 133.	
; 134.	    res_region.width = (char)buf[0];
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+2),A
; 135.	    res_region.height = (char)buf[1];
	INC	HL
	INC	HL
	LD	A,(HL)
	LD	(res_region+3),A
; 136.	
; 137.	    //显示
; 138.	    res_region.x = x;
	LD	HL,6
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region),A
; 139.	    res_region.y = y;
	LD	HL,12
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+1),A
; 140.	    PutSDImage(&res_region, res_fp->rwpointer);
	LD	HL,20
	LD	BC,(res_fp)
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	LD	DE,res_region
	CALL	LWRD PutSDImage
	POP	HL
	POP	HL
; 141.	    return 1;
	LD	HL,1
; 142.	}
?0004:
	POP	AF
	POP	AF
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_a:
; 143.	
; 144.	
; 145.	
; 146.	void ui_show_a(WORD id)                  //音乐类型
; 147.	{
	PUSH	BC
	PUSH	DE
; 148.	    main_ResShowPic(id, POS_TYPE, POSY_TYPE);
	LD	C,4
	PUSH	BC
	LD	C,66
?0046:
	LD	A,BYTE3 main_ResShowPic
	LD	HL,LWRD main_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 149.	
; 150.	}
	POP	HL
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_b:
; 151.	void ui_show_b(WORD id)                   //播放模式
; 152.	{
	PUSH	BC
	PUSH	DE
; 153.	  main_ResShowPic(id,  142,  22);
	LD	C,22
	PUSH	BC
	LD	C,142
	JP	LWRD ?0046
; 154.	}
ui_show_c:
; 155.	
; 156.	//id =0, clear the icon
; 157.	void ui_show_c(WORD id)              //EQ
; 158.	{
	PUSH	BC
	PUSH	DE
; 159.	    main_ResShowPic(id,POS_EQ,POSY_EQ);
	LD	C,6
	PUSH	BC
	LD	C,12
	JP	LWRD ?0046
; 160.	}
ui_show_d:
; 161.	
; 162.	
; 163.	
; 164.	void ui_show_d(const char *string, char mode)   //显示当前时间
; 165.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 166.	        /*
; 167.	          char id;
; 168.	    id=*string-0x30;
; 169.	    main_ResShowPic(PRGNUM0+id,POS_SONGTIME,POSY_SONGTIME);
; 170.	    string++;
; 171.	    id= *string-0x30;
; 172.	    main_ResShowPic(PRGNUM0+id,POS_SONGTIME+24,POSY_SONGTIME);
; 173.	    string++;
; 174.	    id= *string-0x30;
; 175.	    main_ResShowPic(PRGNUM0+id,POS_SONGTIME+40,POSY_SONGTIME);
; 176.	    string++;
; 177.	    id= *string-0x30;
; 178.	    main_ResShowPic(PRGNUM0+id,POS_SONGTIME+62,POSY_SONGTIME);
; 179.	    string++;
; 180.	    id= *string-0x30;
; 181.	    main_ResShowPic(PRGNUM0+id,POS_SONGTIME+78,POSY_SONGTIME);
; 182.	    */
; 183.	    DC  oldDC_sav;
; 184.	    GetDCStatus(&oldDC_sav);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD GetDCStatus
; 185.	    SetPenColor(Color_BLACK_def);
	LD	BC,0
	LD	E,C
	LD	D,B
	CALL	LWRD SetPenColor
; 186.	    SetBackgdColor(Color_MENU_def);
	LD	BC,0
	LD	DE,65535
	CALL	LWRD SetBackgdColor
; 187.	    
; 188.	    SetAsciiFont(FONT_TYPE_SMALL);
	LD	E,0
	CALL	LWRD SetAsciiFont
; 189.	    if(mode)
	LD	HL,10
	ADD	HL,SP
	XOR	A
	OR	(HL)
	LD	C,124
	JR	Z,?0006
?0005:
; 190.	        SetTextPos(122, 124);
	LD	E,122
	JR	?0029
; 191.	    else
?0006:
; 192.	        SetTextPos(6, 124);
	LD	E,6
?0029:
	CALL	LWRD SetTextPos
?0007:
; 193.	    PutS(string, -1);
	LD	C,255
	LD	HL,8
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD PutS
; 194.	    SetAsciiFont(FONT_TYPE_DEFAULT);
	LD	E,4
	CALL	LWRD SetAsciiFont
; 195.	    
; 196.	    SetPenColor(oldDC_sav.PenColor);
	LD	HL,0
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	CALL	LWRD SetPenColor
; 197.	    SetBackgdColor(oldDC_sav.BackgdColor);
	LD	HL,4
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	CALL	LWRD SetBackgdColor
; 198.	}
	LD	HL,12
	ADD	HL,SP
	LD	SP,HL
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_f:
; 199.	
; 200.	
; 201.	void ui_show_f(const char *string)                //文件名/滚屏显示
; 202.	{
	PUSH	BC
	PUSH	DE
; 203.	    SetTextPos(POS_SCROLLSTRAT, POSY_SCROLL);
	LD	C,110
?0048:
	LD	E,45
	CALL	LWRD SetTextPos
; 204.	    PutS(string, -1);
	LD	C,255
	LD	HL,0
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD PutS
; 205.	}
	POP	HL
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_g:
; 206.	
; 207.	void ui_show_g(const char *string)         //文件名显示
; 208.	{
	PUSH	BC
	PUSH	DE
; 209.	    SetTextPos(POS_FILENAME, POSY_FILENAME);
	LD	C,79
	JP	LWRD ?0048
; 210.	    PutS(string, -1);
; 211.	 }
ui_show_batt:
; 212.	
; 213.	
; 214.	/* event r: reset
; 215.	 * event l: battery empty
; 216.	 * event h: battery full
; 217.	 * event n: nmi, auto standby
; 218.	 * event r1: stop recording point, file < 32M
; 219.	 * event r2: stop recording point, file > 32M
; 220.	 *
; 221.	 * value    voltage        碱性电池    镍氢电池    锂电池
; 222.	 * 0         0.90        r
; 223.	 * 1        0.94
; 224.	 * 2        0.98        n        r
; 225.	 * 3        1.02
; 226.	 * 4        1.06        l,r1        n
; 227.	 * 5        1.10        r2        l,r1
; 228.	 * 6        1.14                r2
; 229.	 * 7        1.18
; 230.	 * 8        1.22
; 231.	 * 9        1.26
; 232.	 * 10        1.30                        n
; 233.	 * 11        1.34                        l,r1
; 234.	 * 12        1.38        h        h        r2
; 235.	 * 13        1.42
; 236.	 * 14        1.46
; 237.	 * 15        1.50                        h
; 238.	 */
; 239.	//0~15, -1 表示正在充电
; 240.	void ui_show_batt(int value, char batt_type,bool fmflag)
; 241.	{
	PUSH	IX
	PUSH	BC
; 242.	    static int cur_value=0;    //当前电量值
; 243.	
; 244.	    value = input8(0x9c);
	IN	A,(156)
	LD	L,A
	LD	H,0
	PUSH	HL
	POP	IX
; 245.	
; 246.	    if(GetUsbCableStatus()&&(input8(0x9c)<0xe4))
	CALL	LWRD GetUsbCableStatus
	OR	A
	JR	Z,?0010
	IN	A,(156)
	CP	228
	JR	NC,?0010
?0012:
?0011:
?0009:
; 247.	    {
; 248.	        cur_value++;
	LD	HL,(?0008)
	INC	HL
	LD	(?0008),HL
; 249.	        if(cur_value > 8) cur_value = 0;
	LD	C,L
	LD	B,H
	LD	HL,8
	OR	128
	SBC	HL,BC
	JP	PO,?0036
	XOR	H
?0036:
	JP	P,?0021
?0013:
	JR	?0041
?0014:
; 250.	    }
; 251.	    else
?0010:
; 252.	    {
; 253.	            if(value < 154) cur_value = 0;    //batt empty
	LD	BC,32922
	PUSH	IX
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0017
?0016:
?0041:
	LD	HL,0
	JR	?0038
?0017:
; 254.	            else if(value > 212)cur_value = 8;
	PUSH	IX
	POP	BC
	LD	HL,212
	OR	L
	SBC	HL,BC
	JP	PO,?0037
	XOR	H
?0037:
	JP	P,?0020
?0019:
	LD	HL,8
?0038:
	LD	(?0008),HL
	JR	?0021
?0020:
; 255.	            else cur_value = (value - 154) / 8;    //  zxs change
	LD	HL,65382
	ADD	HL,BC
	EX	DE,HL
	LD	BC,8
	CALL	LWRD ?SS_DIV_L02
	LD	(?0008),DE
?0021:
?0018:
?0015:
; 256.	    }
; 257.	      if(!fmflag)
?0022:
; 258.	       main_ResShowPic(BATTERY1+cur_value, 153,4);
; 259.	      else
?0023:
; 260.	       main_ResShowPic(BATTERY1+cur_value, 153,4);
	LD	C,4
	PUSH	BC
	LD	C,153
	LD	HL,13
	LD	DE,(?0008)
	ADD	HL,DE
	EX	DE,HL
	LD	A,BYTE3 main_ResShowPic
	LD	HL,LWRD main_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
?0024:
; 261.	}
	POP	HL
	POP	IX
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_show_lock:
; 262.	
; 263.	char ui_show_lock(char islock)
; 264.	{
	PUSH	BC
	PUSH	DE
; 265.	    if(islock == 1)
	LD	B,E
	DEC	B
	JR	NZ,?0026
?0025:
; 266.	                        main_ResShowPic(HOLD,0,0);
	LD	C,B
	PUSH	BC
	LD	DE,156
	JR	?0043
; 267.	                else
?0026:
; 268.	                        main_ResShowPic(UNHOLD,0,0);
	LD	C,0
	PUSH	BC
	LD	DE,277
?0043:
	LD	A,BYTE3 main_ResShowPic
	LD	HL,LWRD main_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
?0027:
; 269.	                //wait 1.5s
; 270.	                return ap_sleep(3);
	LD	DE,3
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 271.	}
	POP	AF
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
	RSEG	IDATA0
?0008:
	DEFS	2
	RSEG	CDATA0
	DEFW	0
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -