📄 ui_play.s01
字号:
NAME ui_play(17)
RSEG AP_UI_PLY(0)
RSEG CSTR(0)
RSEG UDATA0(0)
EXTERN AmvDecModPolling
EXTERN AmvDecSetCMD
EXTERN AmvDecStart
EXTERN AmvRegion
EXTERN ChangeMusic
EXTERN ClearScreen
EXTERN DRV_DetectUD
EXTERN DealMusicFileEnd
EXTERN DisablePA
EXTERN DisplayErrMsg
PUBLIC Dscinf
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN GetInformation
PUBLIC InitLcmDeviceInfor
EXTERN PlayStatus
PUBLIC PrevMusicInPlay
PUBLIC SetAmvWin
EXTERN SetPAVolume
EXTERN SetWindow
PUBLIC ShowNowTime
PUBLIC Show_Bitrate
PUBLIC ToNextMusic
EXTERN Totaltime
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fp
EXTERN g_amv_vars
EXTERN g_comval
EXTERN g_introCNT
EXTERN g_rSetPlayStatus
EXTERN g_result
EXTERN g_volcounter
EXTERN itoa_2
EXTERN main_ResShowPic
EXTERN need_draw
EXTERN openPA
EXTERN temp_buffer
PUBLIC ui_play
EXTERN ui_show_d
EXTERN ?CLZ80B_4_04_L00
EXTERN ?S_MUL_L02
EXTERN ?L_MUL_L03
EXTERN ?SL_DIV_L03
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRCAT_L11
RSEG AP_UI_PLY
ui_play:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * voice player stop program.
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_play.c,v 1.1.1.1 2006/05/22 03:24:02 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #include "ap_amv.h"
; 13. #include "AMVDec.h"
; 14. #define IntCntValDef 10
; 15.
; 16. #include "display.h"
; 17. ColorLcmInfor Dscinf;
; 18. extern region_t AmvRegion;
; 19.
; 20. #pragma codeseg(AP_UI_PLY)
; 21.
; 22. #pragma memory=constseg(APC_UI_PLY)
; 23. #pragma memory=default
; 24.
; 25. extern bool g_introCntMode; //是从头开始还是从中途开始,TRUE 为从头开始
; 26. extern region_t AmvRegion;
; 27. ///extern BYTE BankCount;
; 28. int InitLcmDeviceInfor(ColorLcmInfor *infor);
; 29.
; 30. extern char g_volcounter;
; 31. extern bool g_rSetPlayStatus;
; 32. /*
; 33. ********************************************************************************
; 34. * int ui_play( void )
; 35. *
; 36. * Description : 显示时间,滚屏,AB闪
; 37. *
; 38. * Arguments : void
; 39. *
; 40. * Returns : void
; 41. *
; 42. * Notes :
; 43. *
; 44. ********************************************************************************
; 45. */
; 46. int ui_play( void )
; 47. {
PUSH BC
PUSH DE
PUSH IX
PUSH AF
PUSH AF
PUSH AF
PUSH AF
; 48. char key;
; 49. int i;
; 50. signed char tmp;
; 51. int result;
; 52.
; 53. need_draw = TRUE;/* need play file */
LD A,1
LD (need_draw),A
; 54.
; 55. InitLcmDeviceInfor(&Dscinf);
LD DE,Dscinf
LD A,BYTE3 InitLcmDeviceInfor
LD HL,LWRD InitLcmDeviceInfor
CALL LWRD ?BANK_CALL_DIRECT_L08
; 56. openPA(g_amv_vars.volume);
LD DE,(g_amv_vars+2)
LD A,BYTE3 openPA
LD HL,LWRD openPA
CALL LWRD ?BANK_CALL_DIRECT_L08
?0003:
; 57. while (1)
; 58. {
; 59.
; 60. if (need_draw)
LD A,(need_draw)
OR A
JR Z,?0006
?0005:
; 61. {
; 62. fp=FS_FOpen(g_amv_vars.location.filename,FS_OPEN_NORMAL);
LD C,0
LD DE,g_amv_vars+31
CALL LWRD FS_FOpen
LD (fp),HL
; 63. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 64. AmvDecStart(&Dscinf,fp,&g_amv_vars.amvfilebreakpoint);
LD HL,g_amv_vars+48
PUSH HL
LD BC,(fp)
LD DE,Dscinf
LD A,BYTE3 AmvDecStart
LD HL,LWRD AmvDecStart
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 65. g_introCNT=0;
XOR A
LD (g_introCNT),A
?0008:
; 66. while(ap_get_message() != 0);
CALL LWRD ap_get_message
OR A
JR NZ,?0008
?0009:
?0007:
; 67. PlayStatus = PlaySta;
LD A,2
LD (PlayStatus),A
; 68. need_draw = FALSE;
XOR A
LD (need_draw),A
?0006:
?0012:
; 69. }
; 70.
; 71. do
; 72. {
; 73. // output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
; 74. key = ap_get_message(); //读键值
CALL LWRD ap_get_message
LD HL,0
ADD HL,SP
LD (HL),A
; 75. //这里是处理快退大文件时可能丢掉KEYUP键的问题
; 76. }while(((PlayStatus == FFPlaySta) || (PlayStatus == FBPlaySta))
; 77. &&(key!=0)
; 78. &&(key!=(AP_KEY_PREV | AP_KEY_UP))
; 79. &&(key!=(AP_KEY_NEXT | AP_KEY_UP)));
LD A,(PlayStatus)
CP 3
JR Z,?0013
CP 4
JR NZ,?0010
?0013:
?0014:
XOR A
OR (HL)
JR Z,?0010
CP 37
JR Z,?0010
CP 38
JR NZ,?0006
?0010:
; 80. // key = ap_get_message(); //读键值
; 81. switch(key)
LD E,(HL)
CALL LWRD ?C_V_SWITCH_L06
DEFW 11
DEFB 3
DEFB 4
DEFB 28
DEFB 29
DEFB 33
DEFB 37
DEFB 38
DEFB 67
DEFB 68
DEFB 133
DEFB 134
DEFW ?0051
DEFW ?0025
DEFW ?0028
DEFW ?0019
DEFW ?0018
DEFW ?0037
DEFW ?0031
DEFW ?0043
DEFW ?0056
DEFW ?0044
DEFW ?0019
DEFW ?0018
?0018:
; 82. {
; 83. case AP_KEY_VOLSUB:
; 84. case AP_KEY_VOLSUB | AP_KEY_HOLD:
; 85. g_amv_vars.volume-=2;
LD A,(g_amv_vars+2)
ADD A,254
LD (g_amv_vars+2),A
?0019:
; 86. case AP_KEY_VOLADD:
; 87. case AP_KEY_VOLADD | AP_KEY_HOLD:
; 88. g_amv_vars.volume++;
LD HL,g_amv_vars+2
INC (HL)
; 89. if(g_amv_vars.volume==0xff)g_amv_vars.volume=0;
LD A,(g_amv_vars+2)
INC A
JR NZ,?0021
?0020:
LD (g_amv_vars+2),A
?0021:
; 90. if(g_amv_vars.volume>=31)g_amv_vars.volume=31;
LD A,(g_amv_vars+2)
CP 31
JR C,?0023
?0022:
LD A,31
LD (g_amv_vars+2),A
?0023:
; 91. SetPAVolume(g_amv_vars.volume);
LD DE,(g_amv_vars+2)
CALL LWRD SetPAVolume
; 92. break;
JP LWRD ?0056
?0024:
; 93. case AP_MSG_STANDBY:
; 94. break;
?0025:
; 95. case AP_KEY_NEXT | AP_KEY_LONG:
; 96. if(PlayStatus==PlaySta)
LD A,(PlayStatus)
DEC A
DEC A
JP NZ,?0056
?0026:
; 97. {
; 98. AmvDecSetCMD(MC_STEP,4);
LD BC,4
LD E,7
CALL LWRD ?0130
; 99. PlayStatus=FFPlaySta;
LD A,3
JP LWRD ?0122
?0027:
; 100. }
; 101. break;
?0028:
; 102. case AP_KEY_PREV | AP_KEY_LONG:
; 103. if(PlayStatus==PlaySta)
LD A,(PlayStatus)
DEC A
DEC A
JP NZ,?0056
?0029:
; 104. {
; 105. AmvDecSetCMD(MC_STEP,-4);
LD BC,65532
LD E,7
CALL LWRD ?0130
; 106. PlayStatus=FBPlaySta;
LD A,4
JR ?0122
?0030:
; 107. }
; 108. break;
?0031:
; 109. case AP_KEY_PREV|AP_KEY_UP:
; 110. if(PlayStatus==FBPlaySta)
LD A,(PlayStatus)
CP 4
JR Z,?0124
?0032:
; 111. {
; 112. PlayStatus=PlaySta;
; 113. AmvDecSetCMD(MC_PLAY,0);
?0033:
; 114. }
; 115. else if(PlayStatus==PlaySta)
DEC A
DEC A
JP NZ,?0056
?0035:
; 116. {
; 117. PlayStatus=PrevPlaySta;
LD A,6
LD (PlayStatus),A
; 118. AmvDecSetCMD(MC_STOP,0);
LD BC,0
LD E,A
JR ?0115
?0036:
?0034:
; 119. }
; 120.
; 121. break;
?0037:
; 122. case AP_KEY_NEXT|AP_KEY_UP:
; 123. if(PlayStatus==FFPlaySta)
LD A,(PlayStatus)
CP 3
JR NZ,?0039
?0038:
; 124. {
; 125. PlayStatus=PlaySta;
?0124:
LD A,2
LD (PlayStatus),A
; 126. AmvDecSetCMD(MC_PLAY,0);
LD BC,0
LD E,4
JR ?0115
?0039:
; 127. }
; 128. else if(PlayStatus==PlaySta)
DEC A
DEC A
JR NZ,?0056
?0041:
; 129. {
; 130. PlayStatus=NextPlaySta;
LD A,5
LD (PlayStatus),A
; 131. AmvDecSetCMD(MC_STOP,0);
LD BC,0
LD E,6
?0115:
CALL LWRD ?0130
?0042:
?0040:
; 132. }
; 133.
; 134. break;
JR ?0056
?0043:
; 135. case AP_KEY_PLAY | AP_KEY_UP:
; 136. AmvDecSetCMD(MC_STOP,0);
CALL LWRD ?0131
; 137. PlayStatus=StopSta;
XOR A
LD (PlayStatus),A
; 138. g_result=0;
LD L,A
LD H,A
LD (g_result),HL
; 139. break;
JR ?0056
?0044:
; 140. case AP_MSG_RTC:
; 141. if(g_comval.EarProtect_flag)
LD A,(g_comval+24)
OR A
JR Z,?0046
?0045:
; 142. {
; 143. g_amv_vars.volume = input8(0x87)&0x1f;
IN A,(135)
AND 31
LD (g_amv_vars+2),A
?0046:
; 144. }
; 145. if(g_amv_vars.repeat_mode==Intro)
LD A,(g_amv_vars+3)
CP 6
JR NZ,?0056
?0047:
; 146. {
; 147. g_introCNT++;
LD HL,g_introCNT
INC (HL)
; 148. if(g_introCNT>=20)
LD A,(g_introCNT)
CP 20
JR C,?0056
?0049:
; 149. {
; 150. AmvDecSetCMD(MC_STOP,0);
CALL LWRD ?0131
; 151. PlayStatus=NextPlaySta;
LD A,5
?0122:
LD (PlayStatus),A
?0050:
?0048:
; 152. }
; 153. }
; 154. break;
JR ?0056
?0051:
; 155. default:
; 156. key = ap_handle_hotkey( key);
CALL LWRD ap_handle_hotkey
LD HL,0
ADD HL,SP
LD (HL),A
; 157. if(key == RESULT_REDRAW) ; // 不响应锁键
CP 50
JR Z,?0056
?0052:
?0053:
; 158. else if(key != 0)
XOR A
OR (HL)
JR Z,?0056
?0055:
; 159. {
; 160. PlayStatus=HotkeyPlaysta;
LD A,7
LD (PlayStatus),A
; 161. AmvDecSetCMD(MC_STOP,0);
CALL LWRD ?0131
; 162. g_result=key;
LD HL,0
ADD HL,SP
LD C,(HL)
LD B,0
LD (g_result),BC
?0056:
?0054:
?0017:
; 163. }
; 164. }
; 165. output8(0x27,input8(0x27)&0xdf); //关RTC中断
IN A,(39)
RES 5,A
OUT (39),A
; 166. tmp=AmvDecModPolling();
LD A,BYTE3 AmvDecModPolling
LD HL,LWRD AmvDecModPolling
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
LD HL,5
ADD HL,SP
POP BC
LD (HL),C
; 167. output8(0x27,input8(0x27)|0x20); //关RTC中断
IN A,(39)
SET 5,A
OUT (39),A
; 168. if(tmp==2)
LD B,C
DEC B
DEC B
JR NZ,?0058
?0057:
; 169. {
; 170. int i;
; 171. for(i=0;i<1000;i++); //等待检测卡的状态 zxs modify 2006.02.17
LD IX,0
?0060:
LD BC,33768
PUSH IX
POP HL
LD A,128
XOR H
LD H,A
SBC HL,BC
JR NC,?0059
?0061:
INC IX
JR ?0060
?0059:
; 172. //output8(0x27,input8(0x27)|0x40);
; 173. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 174. if ( (g_amv_vars.location.disk == 'H')
; 175. &&(DRV_DetectUD(1)!= 0x20))
LD A,(g_amv_vars+5)
CP 72
JR NZ,?0064
LD E,1
CALL LWRD DRV_DetectUD
CP 32
JR Z,?0064
?0066:
?0065:
?0063:
; 176. {
; 177. AmvDecSetCMD(MC_STOP,0);
CALL LWRD ?0131
; 178. FS_FClose(fp);
LD DE,(fp)
CALL LWRD FS_FClose
; 179. g_amv_vars.location.disk = 'C';
LD A,67
LD (g_amv_vars+5),A
; 180. //DisplayErrMsg(CARDPULL);//显示卡拔出
; 181. DisablePA();
CALL LWRD DisablePA
; 182. return RESULT_UI_STOP2;
LD HL,103
; 183. }
JP LWRD ?0080
?0064:
; 184.
; 185. FS_FClose(fp);
LD DE,(fp)
CALL LWRD FS_FClose
; 186. output8(0x27,input8(0x27)&0xfe); //关Dsp中断 防止花屏 zxs add
IN A,(39)
RES 0,A
OUT (39),A
; 187. DisablePA();
CALL LWRD DisablePA
; 188. DisplayErrMsg(MFMTERR);//显示格式错
LD DE,538
LD A,BYTE3 DisplayErrMsg
LD HL,LWRD DisplayErrMsg
CALL LWRD ?BANK_CALL_DIRECT_L08
; 189. return NULL;
LD HL,0
; 190. }
JR ?0080
?0058:
; 191. else if(tmp==-1)
LD B,(HL)
INC B
JP NZ,?0003
?0067:
; 192. {
; 193. // output8(0x27,input8(0x27)|0x40);
; 194. FS_FClose(fp);
LD DE,(fp)
CALL LWRD FS_FClose
; 195. switch(PlayStatus)
LD A,(PlayStatus)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -