select_music_list.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 316 行
S01
316 行
NAME select_music_list(17)
RSEG AP_SELECT_LIST(0)
RSEG CSTR(0)
RSEG APC_SELECT_LIST(0)
RSEG APD_SELECT_LIST(0)
PUBLIC Backbuf
EXTERN DisplayErrMsg
PUBLIC FILENAMELSIT2
EXTERN FS_Backup
EXTERN FS_CD
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN FS_FRead
EXTERN FS_FSeek
EXTERN FS_Restore
PUBLIC SelectListBuffer
PUBLIC TALBFileName2
PUBLIC TIT2FileName2
PUBLIC TPE1FileName2
EXTERN g_file_list_total
EXTERN g_music_vars
PUBLIC select_music_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?US_MOD_L02
EXTERN ?S_MUL_L02
EXTERN ?C_S_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG AP_SELECT_LIST
select_music_list:
; 1. /******************************************************************************
; 2. ACTOS AP
; 3. * This program demostrates how to build an AP
; 4. *
; 5. * (c) Copyright Actions Co,Ld.
; 6. *
; 7. * $Id: music_list_menu.c,v 1.1.1.1 2007/03/08 16:30:22 mars Exp $
; 8. *******************************************************************************
; 9. */
; 10. #include "ap_music.h"
; 11. #define OneLocationBYTE 41 //sizeof(location)
; 12. #pragma memory=constseg(APC_SELECT_LIST)
; 13. const char TIT2FileName2[] = "TIT2 BIN" ; //标题
; 14. const char TPE1FileName2[] = "TPE1 BIN" ; //艺术家
; 15. const char TALBFileName2[] = "TALB BIN" ; //专辑
; 16. const char FILENAMELSIT2[] = "FILENAMEBIN" ; //文件名
; 17.
; 18. #pragma memory=dataseg(APD_SELECT_LIST)
; 19. char SelectListBuffer[512];
; 20. char Backbuf[32];
; 21. #pragma memory=default
; 22.
; 23. #pragma codeseg(AP_SELECT_LIST)
; 24.
; 25. /////////////////////////////////////////////////////////////////////////////////////
; 26. /****************************************************************************************
; 27. * Music_type_t CheckMusicType(char *filename)
; 28. *
; 29. * Description : 切换播放列表文件
; 30. *
; 31. * Arguments : BYTE Direct 切换方向
; 32. *
; 33. * Returns : TRUE: 切换成功,FALSE 失败
; 34. *
; 35. * Notes :
; 36. *
; 37. ********************************************************************************
; 38. */
; 39. int select_music_list(BYTE Direct)
; 40. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -6
PUSH IY
; 41. long CurrentSeekNum = 0;
; 42. // long ListTotalSector; //列表文件总扇区数
; 43. handle list_fp;
; 44. unsigned int list_num;
; 45. // output8(0x27,IO27Bak&0xfe); //关DSP中断
; 46. FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
LD HL,0
PUSH HL
LD C,2
LD DE,Backbuf
CALL LWRD FS_Backup
POP HL
; 47. FS_CD(":"); //返回根目录查找列表
LD DE,?0002
CALL LWRD FS_CD
; 48. switch(g_music_vars.file_list_type)
XOR A
LD DE,(g_music_vars+92)
CALL LWRD ?C_S_SWITCH_L06
DEFB 0
DEFW 4
DEFW ?0003
DEFW ?0004
DEFW ?0005
DEFW ?0006
DEFW ?0007
?0004:
; 49. {
; 50. case 0:
; 51. list_fp = FS_FOpen(TIT2FileName2,FS_OPEN_NORMAL);
LD C,A
LD DE,TIT2FileName2
JR ?0026
; 52. break;
?0005:
; 53. case 1:
; 54. list_fp = FS_FOpen(TPE1FileName2,FS_OPEN_NORMAL);
LD C,A
LD DE,TPE1FileName2
JR ?0026
; 55. break;
?0006:
; 56. case 2:
; 57. list_fp = FS_FOpen(TALBFileName2,FS_OPEN_NORMAL);
LD C,A
LD DE,TALBFileName2
JR ?0026
; 58. break;
?0007:
; 59. case 3:
; 60. list_fp = FS_FOpen(FILENAMELSIT2,FS_OPEN_NORMAL);
LD C,A
LD DE,FILENAMELSIT2
?0026:
CALL LWRD FS_FOpen
PUSH HL
POP IY
; 61. break;
?0008:
; 62. default:
; 63. break;
?0003:
; 64. }
; 65. // output8(0x27,IO27Bak);
; 66. if(NULL==list_fp) //列表没找到
PUSH IY
POP HL
LD A,L
OR H
JR NZ,?0010
?0009:
; 67. {
; 68. // FS_FClose(list_fp);
; 69. DisplayErrMsg(NOLIST);
LD DE,417
LD A,BYTE3 DisplayErrMsg
LD HL,LWRD DisplayErrMsg
CALL LWRD ?BANK_CALL_DIRECT_L08
; 70. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
LD HL,0
PUSH HL
CALL LWRD ?0036
POP HL
; 71. return RESULT_LIST_ERR;
LD HL,106
; 72. }
JP LWRD ?0023
?0010:
; 73.
; 74. if(Direct==Music_Next)
LD A,(IX+2)
CP 3
JR NZ,?0012
?0011:
; 75. {
; 76. if(g_music_vars.file_list_num==g_file_list_total-1)
LD HL,(g_music_vars+90)
PUSH HL
LD HL,65535
LD BC,(g_file_list_total)
ADD HL,BC
LD C,L
LD B,H
POP HL
AND A
SBC HL,BC
JR Z,?0028
?0013:
; 77. g_music_vars.file_list_num = 0; //最后一个文件读头
; 78. else
?0014:
; 79. g_music_vars.file_list_num++;
LD HL,(g_music_vars+90)
INC HL
JR ?0028
?0015:
?0012:
; 80. }
; 81.
; 82. else if(Direct==Music_Prev)
CP 4
JR NZ,?0018
?0017:
; 83. {
; 84. if(g_music_vars.file_list_num==0)
LD HL,(g_music_vars+90)
LD A,L
OR H
JR NZ,?0020
?0019:
; 85. g_music_vars.file_list_num = g_file_list_total-1; //从头跳到最后
LD HL,65535
LD BC,(g_file_list_total)
ADD HL,BC
JR ?0028
; 86. else
?0020:
; 87. g_music_vars.file_list_num--;
DEC HL
?0028:
LD (g_music_vars+90),HL
?0021:
; 88. }
; 89. else //只有在选择上一首和下一首歌时才需要选择读列表文件
JR ?0022
?0018:
; 90. {
; 91.
; 92. FS_FClose(list_fp);
PUSH IY
POP DE
CALL LWRD FS_FClose
; 93. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
LD HL,0
PUSH HL
CALL LWRD ?0036
POP HL
; 94. return FALSE;
LD HL,0
; 95. }
JR ?0023
?0022:
?0016:
; 96. // ListTotalSector = FS_GetFileLen(list_fp) ; //列表文件总扇区数;
; 97. CurrentSeekNum = (long) (g_music_vars.file_list_num/7); //取下一个列表文件偏移
LD E,L
LD D,H
LD BC,7
CALL LWRD ?US_DIV_L02
EX DE,HL
LD C,B
; 98. FS_FSeek( CurrentSeekNum, SEEK_SET, list_fp); //Seek 到要取文件的位置
PUSH IY
LD E,B
PUSH DE
EX DE,HL
CALL LWRD FS_FSeek
POP HL
POP HL
; 99. FS_FRead(SelectListBuffer,1,list_fp);
PUSH IY
LD C,1
LD DE,SelectListBuffer
CALL LWRD FS_FRead
POP HL
; 100. list_num = g_music_vars.file_list_num%7; //取文件在列表中的偏移
LD DE,(g_music_vars+90)
LD BC,7
CALL LWRD ?US_MOD_L02
; 101. memcpy(&g_music_vars.location,&SelectListBuffer[list_num*71+30],OneLocationBYTE);
LD HL,SelectListBuffer+30
LD C,71
CALL LWRD ?S_MUL_L02
ADD HL,DE
LD DE,g_music_vars+7
LD C,41
LDIR
; 102. FS_FClose(list_fp);
PUSH IY
POP DE
CALL LWRD FS_FClose
; 103. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
PUSH BC
CALL LWRD ?0036
POP HL
; 104. return TRUE;
LD HL,1
; 105.
; 106. }
?0023:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0036:
LD C,2
LD DE,Backbuf
JP LWRD FS_Restore
RSEG CSTR
?0002:
DEFB ':'
DEFB 0
RSEG APC_SELECT_LIST
TIT2FileName2:
DEFB 'TIT2 BIN'
DEFB 0
TPE1FileName2:
DEFB 'TPE1 BIN'
DEFB 0
TALBFileName2:
DEFB 'TALB BIN'
DEFB 0
FILENAMELSIT2:
DEFB 'FILENAMEBIN'
DEFB 0
RSEG APD_SELECT_LIST
SelectListBuffer:
DEFS 512
Backbuf:
DEFS 32
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?