📄 ui_main_for_music.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 + -