📄 sub_function3.s01
字号:
NAME sub_function3(17)
RSEG CODE(0)
EXTERN BankSwitch
EXTERN ClearScreen
EXTERN ClearTimePara
EXTERN DRV_DetectUD
PUBLIC DisplayErrInfor
EXTERN GetDCStatus
PUBLIC InitFileSelector
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN SetTextOutMode
PUBLIC StartFileSelector
PUBLIC UpdateFileSelector
EXTERN ap_get_message
EXTERN ap_sleep
EXTERN fselGetErrID
EXTERN fselGetNextFile
EXTERN fselInit
EXTERN fselSetLocation
EXTERN g_DiskStateFlag
EXTERN g_comval
EXTERN g_music_vars
EXTERN ?CLZ80B_4_04_L00
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG CODE
DisplayErrInfor:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * A short description of this file
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * #Id#
; 10. *******************************************************************************
; 11. */
; 12. #include "ap_music.h"
; 13.
; 14. /******************************************************************************
; 15. ** 名字: 显示输入 id 的资源内容
; 16. ** 接口: void DisplayErrInfor(int id)
; 17. ** 描述:
; 18. ** 输入参数: int id:要显示的资源号
; 19. ** 输出参数: void
; 20. ** 使用说明:
; 21. ********************************************************************************/
; 22. void DisplayErrInfor(int id)
; 23. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65528
; 24. DC oldDC_sav;
; 25. GetDCStatus(&oldDC_sav);
LD HL,0
ADD HL,SP
EX DE,HL
CALL LWRD GetDCStatus
; 26. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 27. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,64704
CALL LWRD SetBackgdColor
; 28. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 29. if(id==CREADERR)
LD HL,404
LD C,(IX+2)
LD B,(IX+3)
AND A
SBC HL,BC
JR NZ,?0003
?0002:
; 30. ResShowPic(CARDERR,25,32);
LD C,32
PUSH BC
LD C,25
LD DE,31
JR ?0116
; 31. else
?0003:
; 32. ResShowPic(MESSAGE,22,38);
LD C,38
PUSH BC
LD C,22
LD DE,120
?0116:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0004:
; 33. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 34. ResShowMultiString(id, g_comval.langid, 255, 54);//显示磁盘无文件
LD C,54
PUSH BC
LD C,255
PUSH BC
LD BC,(g_comval+12)
LD E,(IX+2)
LD D,(IX+3)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 35. // SetTextOutMode(0);
; 36. SetPenColor(oldDC_sav.PenColor);
LD C,(IX-6)
LD B,(IX-5)
LD E,(IX-8)
LD D,(IX-7)
CALL LWRD SetPenColor
; 37. 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
?0006:
; 38.
; 39. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0006
?0007:
?0005:
; 40. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 41. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
InitFileSelector:
; 42.
; 43.
; 44.
; 45. /******************************************************************************
; 46. ** 名字: 文件选择器初始化及报错显示
; 47. ** 接口: int InitFileSelector(void)
; 48. ** 描述: 把文件选择器初始化到有效的盘上,如找不到,则报错退出
; 49. ** 输入参数: void
; 50. ** 输出参数: 0: 没有有效的盘或盘上无文件,初始化失败,要求退出AP
; 51. 1: 已完成初始化文件选择器动作
; 52. ** 使用说明:
; 53. ********************************************************************************/
; 54. int InitFileSelector(void)
; 55. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 56. int result;
; 57.
; 58. if (g_music_vars.location.disk == 'H')
LD A,(g_music_vars+7)
CP 72
JR NZ,?0009
?0008:
; 59. {
; 60. //检测 sd 卡是否存在
; 61. if ((DRV_DetectUD(1) == 0x20)&&((g_DiskStateFlag & SetCardOKFlag_def)!=0))
LD E,1
CALL LWRD DRV_DetectUD
CP 32
JR NZ,?0011
LD A,(g_DiskStateFlag)
BIT 3,A
JR Z,?0011
?0013:
?0012:
?0010:
; 62. {//有卡
; 63. if (FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_SEQUENCE, g_music_vars.fselmod, 'H'))
LD C,72
PUSH BC
LD HL,g_music_vars+79
LD C,(HL)
PUSH BC
CALL LWRD ?0205
POP AF
POP AF
INC L
DEC L
JR NZ,?0125
?0014:
; 64. {
; 65. return 1;
; 66. }
?0015:
; 67.
; 68. if (FSELGetErrID() == 0)
CALL LWRD ?0206
INC L
DEC L
JP Z,?0118
?0016:
; 69. {
; 70. return 0;//非法,
; 71. }
?0017:
; 72. DisplayErrInfor(CFILEOUT);//显示卡无文件
CALL LWRD ?0208
?0011:
; 73. }
; 74.
; 75. g_music_vars.location.disk = 'C';
LD A,67
LD (g_music_vars+7),A
; 76. if ((g_DiskStateFlag & SetDiskOKFlag_def) == 0)
LD A,(g_DiskStateFlag)
BIT 7,A
JP Z,?0118
?0018:
; 77. {
; 78. return 0;
; 79. }
?0019:
; 80.
; 81. if ((g_DiskStateFlag & SetDiskNoFile_def) != 0)
BIT 6,A
JR Z,?0021
?0020:
; 82. {
; 83. DisplayErrInfor(DFILEOUT);//显示磁盘无文件
LD DE,402
JP LWRD ?0128
; 84. return 0;
; 85. }
?0021:
; 86.
; 87. if (FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_SEQUENCE, g_music_vars.fselmod, 'C'))
LD C,67
PUSH BC
LD HL,g_music_vars+79
LD C,(HL)
PUSH BC
CALL LWRD ?0205
POP AF
POP AF
INC L
DEC L
JR Z,?0023
?0022:
; 88. {
; 89. return 1;
?0125:
JR ?0126
; 90. }
?0023:
; 91.
; 92. if (FSELGetErrID() != 0)
CALL LWRD ?0206
INC L
DEC L
JR Z,?0025
?0024:
; 93. {
; 94. DisplayErrInfor(DFILEOUT);//显示磁盘无文件
CALL LWRD ?0207
; 95. g_DiskStateFlag |= SetDiskNoFile_def;//标志磁盘无文件
; 96. return 0;//要退出 ap
JR ?0118
; 97. }
?0025:
; 98. return 0;
JR ?0118
; 99.
; 100. }
?0009:
; 101.
; 102. else //g_music_vars.location.disk == 'C' 或其他
; 103. {
; 104. if ((g_DiskStateFlag & SetDiskOKFlag_def) != 0)
LD A,(g_DiskStateFlag)
BIT 7,A
JR Z,?0034
?0026:
; 105. {
; 106. if ((g_DiskStateFlag & SetDiskNoFile_def) != 0)
BIT 6,A
JR Z,?0029
?0028:
; 107. {
; 108. DisplayErrInfor(DFILEOUT);//显示磁盘无文件
LD DE,402
CALL LWRD ?0209
; 109. }
; 110. else
JR ?0034
?0029:
; 111. {
; 112. if (FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_SEQUENCE, g_music_vars.fselmod, 'C'))
LD C,67
PUSH BC
LD HL,g_music_vars+79
LD C,(HL)
PUSH BC
CALL LWRD ?0205
POP AF
POP AF
INC L
DEC L
JR Z,?0032
?0031:
; 113. {
; 114. return 1;
?0126:
JR ?0127
; 115. }
?0032:
; 116. if (FSELGetErrID() != 0)
CALL LWRD ?0206
INC L
DEC L
JR Z,?0034
?0033:
; 117. {
; 118. DisplayErrInfor(DFILEOUT);//显示磁盘无文件
CALL LWRD ?0207
; 119. g_DiskStateFlag |= SetDiskNoFile_def;//标志磁盘无文件
?0034:
?0030:
?0027:
; 120. }
; 121. }
; 122. }
; 123.
; 124. //检测 sd 卡是否存在
; 125. if ((DRV_DetectUD(1) == 0x20)&&((g_DiskStateFlag & SetCardOKFlag_def)!=0))
LD E,1
CALL LWRD DRV_DetectUD
CP 32
JR NZ,?0036
LD A,(g_DiskStateFlag)
BIT 3,A
JR Z,?0036
?0038:
?0037:
?0035:
; 126. {//有卡
; 127. g_music_vars.location.disk = 'H';
LD A,72
LD (g_music_vars+7),A
; 128. if (FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_SEQUENCE, g_music_vars.fselmod, 'H'))
LD C,A
PUSH BC
LD HL,g_music_vars+79
LD C,(HL)
PUSH BC
CALL LWRD ?0205
POP AF
POP AF
INC L
DEC L
JR Z,?0040
?0039:
; 129. {
; 130. return 1;
?0127:
LD HL,1
; 131. }
JR ?0043
?0040:
; 132. result = FSELGetErrID();
CALL LWRD ?0206
; 133. if (FSELGetErrID() != 0)
CALL LWRD ?0206
INC L
DEC L
JR Z,?0118
?0041:
; 134. {
; 135. DisplayErrInfor(CFILEOUT);//显示卡无文件
LD DE,403
?0128:
CALL LWRD ?0209
; 136. return 0;
JR ?0118
; 137. }
?0042:
; 138. return 0;//非法
; 139. }
?0036:
; 140. else
; 141. {
; 142. g_music_vars.location.disk='C';
LD A,67
LD (g_music_vars+7),A
; 143. return 0;//没卡退出
?0118:
LD HL,0
; 144. }
?0043:
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0205:
LD C,0
LD E,C
LD A,BYTE3 fselInit
LD HL,LWRD fselInit
JP LWRD ?BANK_CALL_DIRECT_L08
?0206:
LD A,BYTE3 fselGetErrID
LD HL,LWRD fselGetErrID
JP LWRD ?BANK_CALL_DIRECT_L08
?0207:
LD DE,402
LD A,BYTE3 DisplayErrInfor
LD HL,LWRD DisplayErrInfor
CALL LWRD ?BANK_CALL_DIRECT_L08
LD HL,g_DiskStateFlag
SET 6,(HL)
RET
?0208:
LD DE,403
?0209:
LD A,BYTE3 DisplayErrInfor
LD HL,LWRD DisplayErrInfor
JP LWRD ?BANK_CALL_DIRECT_L08
; 145.
; 146. }
; 147.
; 148. }
UpdateFileSelector:
; 149.
; 150.
; 151. /******************************************************************************
; 152. ** 名字:
; 153. ** 接口: int UpdateFileSelector(void)
; 154. ** 描述: 更新文件选择器
; 155. ** 输入参数: void
; 156. ** 输出参数:
; 157. 0: 更新不成功,要退出AP
; 158. 1: 更新成功,已可用
; 159. ** 使用说明:
; 160. ********************************************************************************/
; 161. int UpdateFileSelector(void)
; 162. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 163.
; 164. BYTE result;
; 165.
; 166. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 167. BankSwitch((unsigned long)FSELSetLocation >> 16);
LD B,0
LD E,BYTE3 fselSetLocation
LD C,B
CALL LWRD BankSwitch
; 168.
; 169. result = FSELSetLocation(& g_music_vars.location);
LD DE,g_music_vars+7
LD A,BYTE3 fselSetLocation
LD HL,LWRD fselSetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-2),L
; 170.
; 171. if (result == 1)
DEC L
JR NZ,?0045
?0044:
; 172. {
; 173. if (g_music_vars.location.filename[0] != '\0')
LD A,(g_music_vars+33)
OR A
JR NZ,?0053
?0046:
; 174. {
; 175. return 1;
; 176. }
?0047:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -