sub_function1.s01
来自「MP3 整个 SDK」· S01 代码 · 共 381 行
S01
381 行
NAME sub_function1(17)
RSEG AP_UI_PLY(0)
EXTERN BankSwitch
PUBLIC ChangeMusic
EXTERN CheckMusicType
EXTERN ClearTimePara
PUBLIC DealMusicFileEnd
EXTERN GetInformation
EXTERN PlayStatus
PUBLIC SelectCurMusic
EXTERN ToNextMusic
EXTERN ap_get_message
EXTERN fselGetLocation
EXTERN fselGetNextFile
EXTERN fselGetNo
EXTERN fselGetPrevFile
EXTERN fselGetTotal
EXTERN fselInit
EXTERN fselSetMode
EXTERN g_TagInfoBuf
EXTERN g_amv_vars
EXTERN g_currentMusicType
EXTERN g_musicamount
EXTERN g_musicsequence
EXTERN g_result
EXTERN make_dirname
EXTERN ?CLZ80B_4_04_L00
EXTERN ?C_S_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG AP_UI_PLY
DealMusicFileEnd:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * This program demostrates how to build an AP
; 5. *
; 6. * (c) Copyright Actions Co,Ld.
; 7. *
; 8. * $Id: sub_function1.c,v 1.1.1.1 2006/05/22 03:24:02 selina Exp $
; 9. *******************************************************************************
; 10. */
; 11. #include "ap_amv.h"
; 12.
; 13. #pragma codeseg(AP_UI_PLY)
; 14.
; 15. extern void make_dirname(void);
; 16.
; 17.
; 18. //===========[放到文件尾时的处理]===============
; 19. int DealMusicFileEnd( char DisMod)
; 20. {
PUSH DE
; 21.
; 22. if (PlayStatus == FBPlaySta)
LD A,(PlayStatus)
CP 4
JR NZ,?0003
?0002:
?0005:
; 23. {
; 24. while ( ap_get_message() != (AP_KEY_PREV | AP_KEY_UP) );
CALL LWRD ap_get_message
CP 37
JR NZ,?0002
?0006:
?0004:
; 25. SelectCurMusic();
LD A,BYTE3 SelectCurMusic
LD HL,LWRD SelectCurMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
JR ?0017
?0003:
; 26.
; 27. }
; 28. else if (PlayStatus == FFPlaySta)
CP 3
JR NZ,?0009
?0008:
?0011:
; 29. {
; 30. while ( ap_get_message() != (AP_KEY_NEXT | AP_KEY_UP) );
CALL LWRD ap_get_message
CP 38
JR NZ,?0008
?0012:
?0010:
; 31. g_result = ToNextMusic(Play_key);
LD E,2
LD A,BYTE3 ToNextMusic
LD HL,LWRD ToNextMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_result),HL
; 32. if(g_result == RESULT_UI_STOP) return g_result;
LD A,102
XOR L
OR H
JR NZ,?0017
?0013:
JR ?0018
; 33. }
?0014:
; 34.
; 35. else
?0009:
; 36. {
; 37. g_result = ToNextMusic(Play_play);
LD E,1
LD A,BYTE3 ToNextMusic
LD HL,LWRD ToNextMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_result),HL
; 38. if(g_result == RESULT_UI_STOP) return g_result;
LD A,102
XOR L
OR H
JR Z,?0018
?0016:
; 39. }
?0017:
?0015:
?0007:
; 40.
; 41. return NULL;
LD HL,0
; 42. }
?0018:
POP AF
JP LWRD ?BANK_FAST_LEAVE_L08
ChangeMusic:
; 43. //================================================
; 44.
; 45.
; 46. /*
; 47. *******************************************************************************
; 48. * Description : 换曲时要做的选曲,初始化动作
; 49. * Arguments :
; 50. * Returns :真时表示可继续放,假时表示要停止放(播放状态)
; 51. * Notes :
; 52. *******************************************************************************
; 53. */
; 54. bool ChangeMusic( BYTE Direct, Music_sel_mod_t mod )
; 55. {
PUSH BC
PUSH DE
PUSH AF
; 56. bool result;
; 57.
; 58. //清 WATCH_DOG
; 59. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 60.
; 61. ClearTimePara();
LD A,BYTE3 ClearTimePara
LD HL,LWRD ClearTimePara
CALL LWRD ?BANK_CALL_DIRECT_L08
; 62. g_TagInfoBuf[0] = 0x0;
XOR A
LD (g_TagInfoBuf),A
; 63. BankSwitch((unsigned long)FSELInit >> 16);
LD B,A
LD E,BYTE3 fselInit
LD C,B
CALL LWRD BankSwitch
; 64.
; 65. if (mod == Play_key)
LD HL,4
ADD HL,SP
LD B,(HL)
DEC B
DEC B
JR NZ,?0020
?0019:
; 66. {//play 按键的情况
; 67. switch (g_amv_vars.repeat_mode)
LD A,(g_amv_vars+3)
CP 3
JR C,?0051
CP 6
JR NZ,?0026
?0022:
; 68. {
; 69. case FSEL_ALL_REPEATONE:
; 70. case FSEL_ALL_SEQUENCE:
; 71. case FSEL_DIR_SEQUENCE:
; 72. case FSEL_DIR_INTRO:
; 73. FSELSetMode( FSEL_ALL_REPEATALL );//PLAY 时按键
JR ?0051
; 74. break;
?0023:
; 75.
; 76.
; 77. default:
; 78. FSELSetMode(g_amv_vars.repeat_mode);//
; 79. break;
?0021:
?0020:
; 80. }
; 81. }
; 82. else if (mod == Stop_key)
XOR A
OR (HL)
JR NZ,?0026
?0025:
; 83. {//
; 84. FSELSetMode(FSEL_ALL_REPEATALL);//STOP时按键
?0051:
LD E,4
JR ?0047
; 85. }
; 86. else
?0026:
; 87. {//正常播放的情况
; 88. FSELSetMode(g_amv_vars.repeat_mode);
LD DE,(g_amv_vars+3)
?0047:
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
?0027:
?0024:
; 89. }
; 90.
; 91. switch (Direct)
LD HL,2
ADD HL,SP
LD E,(HL)
CALL LWRD ?C_S_SWITCH_L06
DEFB 0
DEFW 5
DEFW ?0034
DEFW ?0028
DEFW ?0028
DEFW ?0031
DEFW ?0032
DEFW ?0033
?0029:
; 92. {
; 93. case Music_Reset_Head:
; 94. break;
?0030:
; 95.
; 96. case Music_Reset_End:
; 97. break;
?0031:
; 98.
; 99. case Music_Cur:
; 100. result = TRUE;
DEC HL
DEC HL
LD (HL),1
; 101. break;
JR ?0028
?0032:
; 102.
; 103. case Music_Next:
; 104. result = FSELGetNext(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 fselGetNextFile
LD HL,LWRD fselGetNextFile
JR ?0048
; 105. break;
?0033:
; 106.
; 107. case Music_Prev:
; 108. result = FSELGetPrev(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 fselGetPrevFile
LD HL,LWRD fselGetPrevFile
?0048:
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
LD HL,2
ADD HL,SP
POP BC
LD (HL),C
; 109. break;
JR ?0028
?0034:
; 110.
; 111. default:
; 112. return FALSE;
LD L,C
; 113. }
JR ?0037
?0028:
; 114.
; 115. if (!result)
LD HL,0
ADD HL,SP
XOR A
OR (HL)
JR NZ,?0036
?0035:
; 116. {
; 117. return result;
LD L,A
; 118. }
JR ?0037
?0036:
; 119. //取当前歌曲数状态
; 120. g_musicamount = (WORD)FSELGetTotal();
LD A,BYTE3 fselGetTotal
LD HL,LWRD fselGetTotal
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_musicamount),A
; 121. g_musicsequence = (WORD)FSELGetNo();
LD A,BYTE3 fselGetNo
LD HL,LWRD fselGetNo
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_musicsequence),A
; 122. FSELSetMode(g_amv_vars.repeat_mode);
LD DE,(g_amv_vars+3)
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
; 123.
; 124. //确保选择器与AP的目录对应
; 125. 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
; 126. //获取目录的长名
; 127. make_dirname();
LD A,BYTE3 make_dirname
LD HL,LWRD make_dirname
CALL LWRD ?BANK_CALL_DIRECT_L08
; 128.
; 129. //检测Music的类型
; 130. g_currentMusicType = CheckMusicType(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 CheckMusicType
LD HL,LWRD CheckMusicType
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_currentMusicType),A
; 131. //找歌词文件并打开
; 132.
; 133. //清 WATCH_DOG
; 134. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 135.
; 136. return TRUE;
LD L,1
; 137. }
?0037:
POP AF
POP AF
POP AF
JP LWRD ?BANK_FAST_LEAVE_L08
SelectCurMusic:
; 138.
; 139. //===================重选当前歌曲=========================
; 140. void SelectCurMusic(void)
; 141. {
PUSH BC
PUSH DE
; 142. ChangeMusic(Music_Cur, Play_play); //播放当前歌曲
LD C,1
LD E,2
LD A,BYTE3 ChangeMusic
LD HL,LWRD ChangeMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
; 143. GetInformation(); //取文件信息
LD A,BYTE3 GetInformation
LD HL,LWRD GetInformation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 144. }
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
; 145. //========================================================
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?