📄 main.s01
字号:
NAME main(17)
RSEG CODE(0)
RSEG CSTR(0)
RSEG UDATA0(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
PUBLIC ActiveDriveOK
EXTERN AmvDecSetCMD
EXTERN BankSwitch
EXTERN ClearScreen
PUBLIC Current_time
EXTERN DRV_ActiveDrive
EXTERN DRV_ActiveUD
EXTERN DRV_DetectUD
EXTERN DealErrCase
EXTERN DisableDAC
EXTERN DisablePA
EXTERN InitFileSelector
PUBLIC PlayStatus
EXTERN ResClose
EXTERN ResOpen
EXTERN ResShowMultiString
EXTERN SetBackgdColor
EXTERN SetPenColor
PUBLIC Total_time
PUBLIC Totaltime
EXTERN VMWrite
EXTERN ap_get_message
EXTERN ap_sleep
EXTERN fselGetLocation
EXTERN fselInit
PUBLIC g_2HZFlag
PUBLIC g_2HZ_CNT
PUBLIC g_BatteryType
PUBLIC g_DiskStateFlag
PUBLIC g_FadeInStatusFlag
PUBLIC g_FadeInStepFlag
PUBLIC g_PAOpenFlag
PUBLIC g_Resfp_Sav
PUBLIC g_TagInfoBuf
PUBLIC g_TagInfoBuf1
PUBLIC g_amv_vars
PUBLIC g_changevolume
PUBLIC g_comval
PUBLIC g_currentMusicType
PUBLIC g_introCNT
PUBLIC g_introCntMode
PUBLIC g_langid
PUBLIC g_menu_active
PUBLIC g_musicamount
PUBLIC g_musicsequence
PUBLIC g_result
PUBLIC main
PUBLIC menu
PUBLIC need_draw
EXTERN openDAC
EXTERN read_var
PUBLIC slider
PUBLIC temp_buffer
EXTERN ui_show_a
EXTERN ui_show_msg
EXTERN ui_stop
EXTERN ?CLZ80B_4_04_L00
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG CODE
main:
; 1. /*
; 2. *******************************************************************************
; 3. * SDK30F_D1
; 4. * music player main sub
; 5. *
; 6. * (c) Copyright 2002, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * File: main.c
; 10. * By : rcmai
; 11. * Version: 1> v1.00 first version 2004-3-19 8:28
; 12. *******************************************************************************
; 13. * $Id: main.c,v 1.2 2006/07/14 06:43:08 tangwh Exp $
; 14. *******************************************************************************
; 15. */
; 16. #include "ap_amv.h"
; 17.
; 18.
; 19.
; 20. comval_t g_comval; //系统变量,ap不能更改
; 21. BYTE g_langid ;//记录系统语言
; 22. BYTE g_BatteryType;//记录电池类型
; 23. bool g_menu_active; //为1进入MENU菜单,主要用来丢掉从目录选择时长按mode键返回
; 24. amv_vars_t g_amv_vars;//本AP的公共变量
; 25. char g_TagInfoBuf[66];//用于放TAG信息的BUF
; 26. char g_TagInfoBuf1[21]; //下一首信息
; 27. char temp_buffer[9];
; 28. bool ActiveDriveOK;//磁盘可用标志
; 29. BYTE g_DiskStateFlag = 0;
; 30. time_t Totaltime;
; 31.
; 32. BYTE g_introCNT;
; 33. bool g_introCntMode;
; 34.
; 35. bool need_draw;
; 36.
; 37. function_menu_t menu;
; 38. slider_t slider;
; 39. Play_status_t PlayStatus = StopSta; //停止状态
; 40.
; 41. Music_type_t g_currentMusicType;//标志当前音乐的类型(mp3/wma/asf/wmv)
; 42. BYTE g_musicamount;//当前目录歌曲总数
; 43. BYTE g_musicsequence;//当前歌曲序号
; 44.
; 45. //BYTE testTimer_Sav;//test
; 46. SD_FILE* g_Resfp_Sav;
; 47.
; 48. WORD g_2HZ_CNT;//2hz 中断计数器(0.5秒加一)
; 49. bool g_2HZFlag = TRUE;//2HZ中断到标志
; 50.
; 51. char g_FadeInStatusFlag = 1;//处在淡入状标志 true 表示在淡入中。
; 52. bool g_FadeInStepFlag = TRUE;//
; 53. bool g_PAOpenFlag = FALSE; //标志PA的开关状态
; 54. //bool g_CardInFlag = FALSE;//卡是否插上,为真时表示插上,可用
; 55.
; 56. //---如下两变量只用作临时变量,主要目的是节省指令及
; 57. // 省代码空间,因为局部变量较费代码及指令时间
; 58. int g_result;//表示16位变量
; 59. int Total_time;
; 60. int Current_time;
; 61. BYTE g_changevolume=0;
; 62.
; 63. int main( void )
; 64. {
PUSH BC
PUSH DE
PUSH IX
PUSH AF
PUSH AF
; 65. int mainresult;
; 66. int result;
; 67. BYTE status;
; 68.
; 69. g_DiskStateFlag = 0;
XOR A
LD (g_DiskStateFlag),A
; 70.
; 71. //-------安装ud驱动------------
; 72. g_Resfp_Sav = ResOpen("ui30.res");
LD DE,?0002
LD A,BYTE3 ResOpen
LD HL,LWRD ResOpen
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_Resfp_Sav),HL
; 73.
; 74. DRV_ActiveUD(0,MODE_SLOW);
LD C,1
LD E,0
CALL LWRD DRV_ActiveUD
; 75. /* 读入公共变量 */
; 76. read_var();
LD A,BYTE3 read_var
LD HL,LWRD read_var
CALL LWRD ?BANK_CALL_DIRECT_L08
; 77.
; 78. ActiveDriveOK = DRV_ActiveDrive('C', MODE_SLOW); //04-2-28 16:29
LD C,1
LD E,67
CALL LWRD DRV_ActiveDrive
LD (ActiveDriveOK),A
; 79. if (!ActiveDriveOK)
OR A
JR NZ,?0004
?0003:
; 80. {
; 81. ui_show_msg (MREADERR, MREADERR, g_langid); //temp ybfu
LD BC,(g_langid)
LD B,A
PUSH BC
LD BC,393
LD E,C
LD D,B
LD A,BYTE3 ui_show_msg
LD HL,LWRD ui_show_msg
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0006:
; 82. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0006
?0007:
?0005:
; 83. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 84. g_amv_vars.location.disk='H'; //磁盘出错 从卡上读文件 zxs add
LD A,72
LD (g_amv_vars+5),A
?0004:
; 85. }
; 86. g_DiskStateFlag |= SetDiskOKFlag_def;//标志 flash 已格式化
LD HL,g_DiskStateFlag
SET 7,(HL)
; 87.
; 88. if (DRV_DetectUD(1) == 0x20)
LD E,1
CALL LWRD DRV_DetectUD
CP 32
JR NZ,?0009
?0008:
; 89. { //有卡
; 90. DRV_ActiveUD(1,MODE_SLOW);
LD C,1
LD E,C
CALL LWRD DRV_ActiveUD
; 91. if (!DRV_ActiveDrive('H', MODE_SLOW))
LD C,1
LD E,72
CALL LWRD DRV_ActiveDrive
OR A
LD HL,g_DiskStateFlag
JR NZ,?0011
?0010:
; 92. {
; 93. g_DiskStateFlag=g_DiskStateFlag&ClrCardOKFlag_def;
RES 3,(HL)
; 94. ui_show_msg (CREADERR, CREADERR, g_langid); //temp ybfu
LD BC,(g_langid)
LD B,A
PUSH BC
LD BC,404
LD E,C
LD D,B
LD A,BYTE3 ui_show_msg
LD HL,LWRD ui_show_msg
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0013:
; 95. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0013
?0014:
?0012:
; 96. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 97. g_amv_vars.location.disk='C'; //卡出错从Flash磁盘读文件
LD A,67
LD (g_amv_vars+5),A
; 98. if (!ActiveDriveOK)
LD A,(ActiveDriveOK)
OR A
JR NZ,?0020
?0015:
; 99. {
; 100. ResClose(g_Resfp_Sav);
JR ?0027
; 101. return 0;
; 102. }
?0016:
; 103. }
; 104. else
?0011:
; 105. g_DiskStateFlag |= SetCardOKFlag_def;//标志Card 已格式化
SET 3,(HL)
?0017:
; 106. }
; 107. else
JR ?0020
?0009:
; 108. { //没卡
; 109. g_amv_vars.location.disk='C'; //卡出错从Flash磁盘读文件
LD A,67
LD (g_amv_vars+5),A
; 110. if (!ActiveDriveOK)
LD A,(ActiveDriveOK)
OR A
JR NZ,?0020
?0019:
; 111. {
; 112. ResClose(g_Resfp_Sav);
?0027:
LD DE,(g_Resfp_Sav)
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 113. return 0;
LD HL,0
; 114. }
JP LWRD ?0025
?0020:
?0018:
; 115. }
; 116.
; 117.
; 118. SetPenColor(Color_WHITE_def);
LD BC,0
LD DE,65535
CALL LWRD SetPenColor
; 119. SetBackgdColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetBackgdColor
; 120.
; 121. //show initializing...
; 122. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 123. ResShowMultiString(WAITPASS, g_langid, 255, 80);
LD C,80
PUSH BC
LD C,255
PUSH BC
LD BC,(g_langid)
LD DE,437
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 124.
; 125. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 126.
; 127. g_musicsequence = 0x00;
XOR A
LD (g_musicsequence),A
; 128. g_musicamount = 0x00;
LD (g_musicamount),A
; 129.
; 130.
; 131. //把控件的常驻BANK切入
; 132. BankSwitch((unsigned long)ui_show_a >> 16);
LD B,A
LD E,BYTE3 ui_show_a
CALL LWRD BankSwitch
; 133. //set amv module and codec bank as real bank
; 134. BankSwitch((unsigned long)AmvDecSetCMD >> 16);
LD E,BYTE3 AmvDecSetCMD
CALL LWRD BankSwitch
; 135. if (!FSELInit(FSEL_TYPE_AMV, FSEL_ALL_REPEATALL,FSEL_TYPE_COMMONDIR, g_amv_vars.location.disk))
LD HL,g_amv_vars+5
LD C,(HL)
PUSH BC
LD C,B
PUSH BC
LD C,4
LD E,5
LD A,BYTE3 fselInit
LD HL,LWRD fselInit
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
INC L
DEC L
JR NZ,?0022
?0021:
; 136. return DealErrCase();
LD A,BYTE3 DealErrCase
LD HL,LWRD DealErrCase
CALL LWRD ?BANK_CALL_DIRECT_L08
LD H,0
JR ?0025
?0022:
; 137. status=input8(0x05); //读05寄存器
IN A,(5)
LD HL,0
ADD HL,SP
LD (HL),A
; 138. openDAC();
LD A,BYTE3 openDAC
LD HL,LWRD openDAC
CALL LWRD ?BANK_CALL_DIRECT_L08
; 139.
; 140. //由于特殊情况,这个开PA的动作放在开始播放时做
; 141. //openPA();
; 142. mainresult = InitFileSelector();
LD A,BYTE3 InitFileSelector
LD HL,LWRD InitFileSelector
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IX
; 143. if(mainresult!=0)
LD A,L
OR H
JR Z,?0024
?0023:
; 144. {
; 145. mainresult = ui_stop();// =============> 进入界面
LD A,BYTE3 ui_stop
LD HL,LWRD ui_stop
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IX
?0024:
; 146. }
; 147.
; 148. ap_sleep(1);
LD DE,1
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 149. DisablePA();
CALL LWRD DisablePA
; 150. DisableDAC();
CALL LWRD DisableDAC
; 151.
; 152. ResClose(g_Resfp_Sav);
LD DE,(g_Resfp_Sav)
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 153. output8(0x5,status); // 恢复 05 regsiter 解决播放后进U盘提示格式化的问题 zxs add
LD HL,0
ADD HL,SP
LD A,(HL)
OUT (5),A
; 154. //记录
; 155. fselGetLocation(& g_amv_vars.location);
LD DE,g_amv_vars+5
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 156. result = VMWrite(&g_amv_vars, VM_AP_AMV);
LD BC,18432
LD DE,g_amv_vars
CALL LWRD VMWrite
; 157.
; 158.
; 159. //////////////////////////// zxs add for card
; 160. output8(0x2f,input8(0x2f)|0x04); //CE3 change to GIOA3
IN A,(47)
SET 2,A
OUT (47),A
; 161. output8(0xee,input8(0xee)&0xf7);
IN A,(238)
RES 3,A
OUT (238),A
; 162. output8(0xf7,input8(0xf7)|0x01); // PowerOff
IN A,(247)
SET 0,A
OUT (247),A
; 163. //////////////////////////// zxs add for card
; 164. return mainresult;
PUSH IX
POP HL
; 165. }
?0025:
POP AF
POP AF
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
; 166.
RSEG CSTR
?0002:
DEFB 'ui30.res'
DEFB 0
RSEG UDATA0
g_comval:
DEFS 32
g_langid:
DEFS 1
g_BatteryType:
DEFS 1
g_menu_active:
DEFS 1
g_amv_vars:
DEFS 54
g_TagInfoBuf:
DEFS 66
g_TagInfoBuf1:
DEFS 21
temp_buffer:
DEFS 9
ActiveDriveOK:
DEFS 1
Totaltime:
DEFS 3
g_introCNT:
DEFS 1
g_introCntMode:
DEFS 1
need_draw:
DEFS 1
menu:
DEFS 10
slider:
DEFS 11
g_currentMusicType:
DEFS 1
g_musicamount:
DEFS 1
g_musicsequence:
DEFS 1
g_Resfp_Sav:
DEFS 2
g_2HZ_CNT:
DEFS 2
g_result:
DEFS 2
Total_time:
DEFS 2
Current_time:
DEFS 2
RSEG IDATA0
g_DiskStateFlag:
DEFS 1
PlayStatus:
DEFS 1
g_2HZFlag:
DEFS 1
g_FadeInStatusFlag:
DEFS 1
g_FadeInStepFlag:
DEFS 1
g_PAOpenFlag:
DEFS 1
g_changevolume:
DEFS 1
RSEG CDATA0
DEFB 0
DEFB 0
DEFB 1
DEFB 1
DEFB 1
DEFB 0
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -