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