ui_main.s01
来自「MP3 整个 SDK」· S01 代码 · 共 899 行 · 第 1/2 页
S01
899 行
NAME ui_main(17)
RSEG COM_MAIN(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
EXTERN ClearScreen
EXTERN PutS
EXTERN PutSDImage
EXTERN ResShowPic
EXTERN SD_FRead
EXTERN SD_FSeek
EXTERN SetBackgdColor
EXTERN SetTextPos
EXTERN UpdateScreen
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
EXTERN sKY_ChargeSet
EXTERN ui_auto_update
PUBLIC ui_show_a
PUBLIC ui_show_b
PUBLIC ui_show_batt
PUBLIC ui_show_bitrate
PUBLIC ui_show_c
PUBLIC ui_show_d
PUBLIC ui_show_f
PUBLIC ui_show_g
PUBLIC ui_show_lock
PUBLIC ui_show_vol
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.
; 19. //bank const
; 20. /*注意-以下函数必须能访问到这些常量 */
; 21. #pragma memory=constseg(COM_MAIN_D)
; 22.
; 23. #pragma memory=default
; 24.
; 25. /*
; 26. ********************************************************************************
; 27. * Description : 数字转换成字符串
; 28. *
; 29. * Arguments : i, 数字
; 30. * buf, 输出字符串指针, 3 bytes
; 31. *
; 32. * Returns : 成功, 输出字符串指针
; 33. *
; 34. * Notes : 数字只能是 0~9
; 35. *
; 36. ********************************************************************************
; 37. */
; 38. char *itoa_1(BYTE i, char *buf)
; 39. {
PUSH IX
PUSH BC
POP IX
; 40. buf[0] = (i % 10)+'0';
LD B,10
LD A,E
CALL LWRD ?UC_MOD_L01
ADD A,48
LD (IX+0),A
; 41. buf[1] = 0;
LD (IX+1),0
; 42. return buf;
?0083:
PUSH IX
POP HL
; 43. }
POP IX
JP LWRD ?BANK_FAST_LEAVE_L08
itoa_2:
; 44.
; 45. /*
; 46. ********************************************************************************
; 47. * Description : 数字转换成字符串
; 48. *
; 49. * Arguments : i, 数字
; 50. * buf, 输出字符串指针, 3 bytes
; 51. *
; 52. * Returns : 成功, 输出字符串指针
; 53. *
; 54. * Notes : 数字只能是 00~99
; 55. *
; 56. ********************************************************************************
; 57. */
; 58. char *itoa_2(BYTE i, char *buf)
; 59. {
PUSH IX
PUSH BC
POP IX
LD D,E
; 60. 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
; 61. buf[1] = (i % 10)+'0';
LD A,D
CALL LWRD ?UC_MOD_L01
ADD A,48
LD (IX+1),A
; 62. buf[2] = 0;
LD (IX+2),0
; 63. return buf;
JP LWRD ?0083
; 64. }
itoa_3:
; 65. /*
; 66. ********************************************************************************
; 67. * Description : 数字转换成字符串
; 68. *
; 69. * Arguments : i, 数字
; 70. * buf, 输出字符串指针,4 bytes
; 71. *
; 72. * Returns : 成功, 输出字符串指针
; 73. *
; 74. * Notes : 数字只能是 000~999
; 75. *
; 76. ********************************************************************************
; 77. */
; 78. char *itoa_3(WORD i, char *buf)
; 79. {
PUSH IY
PUSH IX
PUSH BC
POP IX
PUSH DE
POP IY
; 80. buf[0] = (i % 1000) / 100+'0' ;
LD BC,1000
CALL LWRD ?US_MOD_L02
LD BC,100
; 81. buf[1] = (i % 100) / 10+'0' ;
CALL LWRD ?0089
LD C,10
CALL LWRD ?US_DIV_L02
LD A,E
ADD A,48
LD (IX+1),A
; 82. buf[2] = (i % 10)+'0';
CALL LWRD ?0090
LD A,E
ADD A,48
LD (IX+2),A
; 83. buf[3] = 0;
LD (IX+3),B
; 84.
; 85. return buf;
?0084:
PUSH IX
POP HL
; 86. }
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0089:
CALL LWRD ?US_DIV_L02
LD A,E
ADD A,48
LD (IX+0),A
?0090:
PUSH IY
POP DE
JP LWRD ?US_MOD_L02
itoa_4:
; 87. /*
; 88. ********************************************************************************
; 89. * Description : 数字转换成字符串
; 90. *
; 91. * Arguments : i, 数字
; 92. * buf, 输出字符串指针,5 bytes
; 93. *
; 94. * Returns : 成功, 输出字符串指针
; 95. *
; 96. * Notes : 数字只能是 0000~9999
; 97. *
; 98. ********************************************************************************
; 99. */
; 100. char *itoa_4(WORD i, char *buf)
; 101. {
PUSH IY
PUSH IX
PUSH BC
POP IX
PUSH DE
POP IY
; 102. buf[0] = (i % 10000) / 1000+'0' ;
LD BC,10000
CALL LWRD ?US_MOD_L02
LD BC,1000
; 103. buf[1] = (i % 1000) / 100+'0' ;
CALL LWRD ?0089
LD BC,100
CALL LWRD ?US_DIV_L02
LD A,E
ADD A,48
LD (IX+1),A
; 104. buf[2] = (i % 100) / 10+'0' ;
CALL LWRD ?0090
LD C,10
CALL LWRD ?US_DIV_L02
LD A,E
ADD A,48
LD (IX+2),A
; 105. buf[3] = (i % 10)+'0';
CALL LWRD ?0090
LD A,E
ADD A,48
LD (IX+3),A
; 106. buf[4] = 0;
LD (IX+4),B
; 107.
; 108. return buf;
JP LWRD ?0084
; 109. }
main_ResShowPic:
; 110.
; 111.
; 112. //只有这个界面使用,为了提高效率而放在这里
; 113. int main_ResShowPic(WORD id, uchar x, uchar y)
; 114. {
PUSH BC
PUSH DE
PUSH AF
PUSH AF
; 115. WORD buf[2]; //buffer for sd read
; 116.
; 117. ASSERT(id <= UIID_MAX);
; 118.
; 119. //读entry
; 120. 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
; 121. 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
; 122. if(res_entry.type != RES_TYPE_PIC) return 0;
LD A,(res_entry+6)
DEC A
JR Z,?0003
?0002:
LD HL,0
; 123. ASSERT(res_entry.length <= 512);
JR ?0006
?0003:
; 124.
; 125. //读数据
; 126. 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
; 127. 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
; 128. res_region.width = (char)buf[0];
LD HL,0
ADD HL,SP
LD A,(HL)
LD (res_region+2),A
; 129. res_region.height = (char)buf[1];
INC HL
INC HL
LD A,(HL)
LD (res_region+3),A
; 130.
; 131. //显示
; 132. res_region.x = x;
LD HL,6
ADD HL,SP
LD A,(HL)
LD (res_region),A
; 133. res_region.y = y;
LD HL,12
ADD HL,SP
LD A,(HL)
LD (res_region+1),A
; 134. 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
; 135. if(ui_auto_update) UpdateScreen(&res_region);
LD A,(ui_auto_update)
OR A
JR Z,?0005
?0004:
LD DE,res_region
CALL LWRD UpdateScreen
?0005:
; 136. return 1;
LD HL,1
; 137. }
?0006:
POP AF
POP AF
POP AF
POP AF
JP LWRD ?BANK_FAST_LEAVE_L08
ui_show_a:
; 138.
; 139.
; 140.
; 141. void ui_show_a(WORD id) //音乐类型
; 142. {
PUSH BC
PUSH DE
; 143. main_ResShowPic(id, POS_TYPE, POSY_TYPE);
LD C,4
PUSH BC
LD C,66
?0085:
CALL LWRD ?0091
POP AF
; 144.
; 145. }
POP HL
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0092:
LD E,A
LD D,0
LD HL,177
?0093:
ADD HL,DE
EX DE,HL
?0091:
LD A,BYTE3 main_ResShowPic
LD HL,LWRD main_ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
ui_show_b:
; 146. void ui_show_b(WORD id) //播放模式
; 147. {
PUSH BC
PUSH DE
; 148. main_ResShowPic(id, POS_PALYMODE, POSY_PALYMODE);
LD C,0
PUSH BC
LD C,128
JP LWRD ?0085
; 149. }
ui_show_c:
; 150.
; 151. //id =0, clear the icon
; 152. void ui_show_c(WORD id) //EQ
; 153. {
PUSH BC
PUSH DE
; 154. main_ResShowPic(id,POS_EQ,POSY_EQ);
LD C,4
PUSH BC
LD C,178
JP LWRD ?0085
; 155. }
ui_show_d:
; 156.
; 157.
; 158. void ui_show_d(const char *string) //显示当前时间
; 159. { char id;
PUSH BC
PUSH IX
PUSH AF
PUSH DE
POP IX
; 160. id=*string-0x30;
LD A,(DE)
ADD A,208
; 161. main_ResShowPic(PRGNUM0+id,POS_SONGTIME,POSY_SONGTIME);
LD C,50
PUSH BC
LD C,62
CALL LWRD ?0092
POP AF
; 162. string++;
; 163. id= *string-0x30;
LD A,(IX+1)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?