📄 main.s01
字号:
NAME main(17)
RSEG CODE(0)
RSEG CSTR(0)
RSEG CONST(0)
RSEG UDATA0(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
PUBLIC ActiveDriveOK
EXTERN BankSwitch
EXTERN ClearScreen
EXTERN DRV_ActiveDrive
EXTERN DRV_ActiveUD
EXTERN DRV_DetectUD
PUBLIC File_Type
EXTERN GetDefaultComval
EXTERN ResClose
EXTERN ResOpen
EXTERN ResShowMultiString
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN VMRead
EXTERN VMWrite
EXTERN ap_get_message
EXTERN ap_message_init
EXTERN ap_sleep
EXTERN fselGetLocation
EXTERN fselInit
PUBLIC g_DiskStateFlag
PUBLIC g_Resfp_Sav
PUBLIC g_browser_vars
PUBLIC g_comval
PUBLIC g_langid
PUBLIC g_menu_active
PUBLIC g_result
PUBLIC main
PUBLIC menu
PUBLIC need_draw
PUBLIC read_var
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
EXTERN ?STRCPY_L11
EXTERN ?STRCMP_L11
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.1.1.1 2006/04/21 08:22:43 selina Exp $
; 14. *******************************************************************************
; 15. */
; 16. #include "ap_browser.h"
; 17. comval_t g_comval; //系统变量,ap不能更改
; 18. BYTE g_langid ;//记录系统语言
; 19. bool g_menu_active; //为1进入MENU菜单,主要用来丢掉从目录选择时长按mode键返回
; 20. BYTE g_DiskStateFlag = 0;
; 21. browser_vars_t g_browser_vars;//本AP的公共变量
; 22. bool need_draw;
; 23. function_menu_t menu;
; 24. SD_FILE* g_Resfp_Sav;
; 25. bool ActiveDriveOK;//磁盘可用标志
; 26. int g_result;//表示16位变量
; 27.
; 28. char File_Type( char * filename );
; 29.
; 30. int main( void )
; 31. {
PUSH BC
PUSH DE
PUSH IX
PUSH AF
PUSH AF
; 32. int mainresult;
; 33. int result;
; 34. BYTE status;
; 35. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 36. //-------安装ud驱动------------
; 37. 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
; 38. if(!g_Resfp_Sav)
LD A,L
OR H
JR NZ,?0004
?0003:
; 39. {
; 40. ResClose(g_Resfp_Sav);
EX DE,HL
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 41. return RESULT_MAIN;
JP LWRD ?0081
; 42. }
?0004:
; 43.
; 44. DRV_ActiveUD(0,MODE_SLOW);
LD C,1
LD E,0
CALL LWRD DRV_ActiveUD
; 45. /* 读入公共变量 */
; 46. read_var();
LD A,BYTE3 read_var
LD HL,LWRD read_var
CALL LWRD ?BANK_CALL_DIRECT_L08
; 47. ActiveDriveOK = DRV_ActiveDrive('C', MODE_SLOW); //04-2-28 16:29
LD C,1
LD E,67
CALL LWRD DRV_ActiveDrive
LD (ActiveDriveOK),A
; 48. if (!ActiveDriveOK)
OR A
JR NZ,?0006
?0005:
; 49. {
; 50. ui_show_msg (MREADERR, MREADERR, g_langid); //temp ybfu
LD BC,(g_langid)
LD B,A
PUSH BC
LD BC,508
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
?0008:
; 51. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0008
?0009:
?0007:
; 52. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 53. g_browser_vars.location.disk='H'; //磁盘出错 从卡上读文件 zxs add
LD A,72
LD (g_browser_vars+2),A
?0006:
; 54. }
; 55. g_DiskStateFlag |= SetDiskOKFlag_def;//标志 flash 已格式化
LD HL,g_DiskStateFlag
SET 7,(HL)
; 56.
; 57. if (DRV_DetectUD(1) == 0x20)
LD E,1
CALL LWRD DRV_DetectUD
CP 32
JR NZ,?0011
?0010:
; 58. { //有卡
; 59. DRV_ActiveUD(1,MODE_SLOW);
LD C,1
LD E,C
CALL LWRD DRV_ActiveUD
; 60. if (!DRV_ActiveDrive('H', MODE_SLOW))
LD C,1
LD E,72
CALL LWRD DRV_ActiveDrive
OR A
JR NZ,?0013
?0012:
; 61. {
; 62. ui_show_msg (CREADERR, CREADERR, g_comval.langid); //temp ybfu
LD BC,(g_comval+12)
LD B,A
PUSH BC
LD BC,630
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
?0015:
; 63. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0015
?0016:
?0014:
; 64. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 65. g_browser_vars.location.disk='C'; //卡出错从Flash磁盘读文件
LD A,67
LD (g_browser_vars+2),A
; 66. if (!ActiveDriveOK)
LD A,(ActiveDriveOK)
OR A
JR NZ,?0022
?0017:
; 67. {
; 68. ResClose(g_Resfp_Sav);
JR ?0082
; 69. return 0;
; 70. }
?0018:
; 71. }
; 72. else
?0013:
; 73. g_DiskStateFlag |= SetCardOKFlag_def;//标志 卡 已格式化
LD HL,g_DiskStateFlag
SET 3,(HL)
?0019:
; 74. }
; 75. else
JR ?0022
?0011:
; 76. { //没卡
; 77. g_browser_vars.location.disk='C'; //卡出错从Flash磁盘读文件
LD A,67
LD (g_browser_vars+2),A
; 78. if (!ActiveDriveOK)
LD A,(ActiveDriveOK)
OR A
JR NZ,?0022
?0021:
; 79. {
; 80. ResClose(g_Resfp_Sav);
?0082:
LD DE,(g_Resfp_Sav)
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 81. return 0;
LD HL,0
; 82. }
JP LWRD ?0027
?0022:
?0020:
; 83. }
; 84.
; 85. SetPenColor(Color_WHITE_def);
LD BC,0
LD DE,65535
CALL LWRD SetPenColor
; 86. SetBackgdColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetBackgdColor
; 87. //show initializing...
; 88. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 89. ResShowMultiString(WAITPASS, g_langid, 255, 56);
LD C,56
PUSH BC
LD C,255
PUSH BC
LD BC,(g_langid)
LD DE,600
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 90.
; 91. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 92.
; 93. //把控件的常驻BANK切入
; 94. BankSwitch((unsigned long)ui_show_a >> 16);
LD B,0
LD E,BYTE3 ui_show_a
CALL LWRD BankSwitch
; 95. FSELInit(FSEL_TYPE_ALL, FSEL_ALL_REPEATALL, 0,g_browser_vars.location.disk); //初始化当前磁盘的文件系统
LD HL,g_browser_vars+2
LD C,(HL)
PUSH BC
LD C,B
PUSH BC
LD C,4
LD E,6
LD A,BYTE3 fselInit
LD HL,LWRD fselInit
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 96. //if (!FSELInit(FSEL_TYPE_AMV, FSEL_ALL_REPEATALL, 0,'C'))
; 97.
; 98. // if (!FSELInit(FSEL_TYPE_ALL, FSEL_ALL_REPEATALL, 0,'g_browser_vars.location.disk'))
; 99. // return DealErrCase();
; 100. status=input8(0x05); //读05寄存器
IN A,(5)
LD HL,0
ADD HL,SP
LD (HL),A
; 101. mainresult = ui_stop();// =============> 进入界面
LD A,BYTE3 ui_stop
LD HL,LWRD ui_stop
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IX
; 102.
; 103. ap_sleep(4);
LD DE,4
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 104.
; 105. ResClose(g_Resfp_Sav);
LD DE,(g_Resfp_Sav)
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 106. output8(0x5,status); // 恢复 05 regsiter 解决播放后进U盘提示格式化的问题 zxs add
LD HL,0
ADD HL,SP
LD A,(HL)
OUT (5),A
; 107. //记录
; 108. fselGetLocation(& g_browser_vars.location);
LD DE,g_browser_vars+2
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 109. result = VMWrite(&g_browser_vars, VM_AP_BROWSER);
LD BC,19456
LD DE,g_browser_vars
CALL LWRD VMWrite
LD B,0
; 110. if(mainresult==RESULT_IGNORE)
PUSH IX
POP HL
LD A,52
XOR L
OR H
JR NZ,?0024
?0023:
; 111. return RESULT_MAIN;
?0081:
LD HL,10
JR ?0027
?0024:
; 112. else if(mainresult!=0)
LD A,L
OR H
JR NZ,?0027
?0025:
; 113. return mainresult;
; 114. else
?0026:
; 115. return File_Type(g_browser_vars.location.filename);
LD DE,g_browser_vars+28
LD A,BYTE3 File_Type
LD HL,LWRD File_Type
CALL LWRD ?BANK_CALL_DIRECT_L08
LD H,B
; 116. }
?0027:
POP AF
POP AF
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
File_Type:
; 117.
; 118. char File_Type( char * filename )
; 119. {
PUSH BC
PUSH IX
LD HL,65480
ADD HL,SP
LD SP,HL
PUSH DE
POP IX
; 120. const char Extstr [] [4] =
; 121. {
; 122. "MP3", "WMA", "ASF", "WMV", "OGG", "WAV", "ACT", "AMV", "TXT", "BMP", "JPG", "GIF","APE"
; 123. };
LD HL,4
ADD HL,SP
EX DE,HL
LD HL,?0028
LD BC,52
LDIR
; 124.
; 125. BYTE ext[4];
; 126. memcpy(ext, filename + 8, 3);
LD L,C
LD H,B
ADD HL,SP
EX DE,HL
LD HL,8
PUSH IX
POP BC
ADD HL,BC
LD BC,3
LDIR
; 127.
; 128. ext[0] = (ext[0]>='a' && ext[0]<='z') ? ext[0] - 'a' + 'A' : ext[0];
LD L,C
LD H,B
ADD HL,SP
LD A,(HL)
CP 97
JR C,?0032
LD A,122
CP (HL)
JR C,?0032
LD A,(HL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -