sub_callback.s01
来自「MP3 整个 SDK」· S01 代码 · 共 384 行
S01
384 行
NAME sub_callback(17)
RSEG CODE(0)
RSEG CONST(0)
PUBLIC EQVOLADJ_TAB
PUBLIC OutPutVolume
EXTERN SRSModeFlag
EXTERN SetPAVolume
EXTERN UpDisplayFlag
PUBLIC bass_user_callback
PUBLIC eq_callback
EXTERN g_music_vars
PUBLIC loop_callback
EXTERN musicpSendCommand
PUBLIC speed_callback
PUBLIC srs_callback
PUBLIC srs_user_callback
PUBLIC volume_callback
PUBLIC wow_user_callback
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_CMP_L02
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_PARM_DIRECT_L09
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG CODE
volume_callback:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * voice player stop program.
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: sub_callback.c,v 1.1.1.1 2006/05/22 03:24:01 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12.
; 13. #include "ap_music.h"
; 14.
; 15. #define eqcount_def 8
; 16. extern byte SRSModeFlag;
; 17. const signed char EQVOLADJ_TAB[eqcount_def] =
; 18. {//EQ音量调整表
; 19. 0,0,0,0,0,0,0,0
; 20. };
; 21.
; 22. void OutPutVolume(int vol);
; 23.
; 24. void volume_callback( int Vol )
; 25. {
CALL LWRD ?ENT_PARM_DIRECT_L09
; 26. //实时改变音量的值
; 27. musicpSendCommand(MC_SETVOLUME, Vol);
LD C,E
LD B,D
LD E,64
CALL LWRD ?0024
; 28. g_music_vars.volume = Vol;
LD A,(IX+2)
LD (g_music_vars),A
; 29. OutPutVolume(g_music_vars.volume);
LD DE,(g_music_vars)
LD A,E
RLCA
SBC A,A
LD D,A
LD A,BYTE3 OutPutVolume
LD HL,LWRD OutPutVolume
CALL LWRD ?BANK_CALL_DIRECT_L08
; 30. //g_FadeInStatusFlag = 0;//关闭淡入淡出功能
; 31. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0025:
LD C,L
LD B,H
LD E,66
?0024:
LD A,BYTE3 musicpSendCommand
LD HL,LWRD musicpSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
speed_callback:
; 32.
; 33. void speed_callback( int speed )
; 34. {
CALL LWRD ?ENT_PARM_DIRECT_L09
; 35. //实时改变速度
; 36. g_music_vars.play_rate = (BYTE)speed;
LD A,E
LD (g_music_vars+3),A
; 37. musicpSendCommand(MC_SETSPEED, speed); //设置当前的速度
LD C,E
LD B,D
LD E,70
?0019:
CALL LWRD ?0024
; 38. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
eq_callback:
; 39.
; 40. void eq_callback( int eq )
; 41. {
CALL LWRD ?ENT_PARM_DIRECT_L09
; 42. //实时改变EQ的值
; 43. g_music_vars.eq_type = eq;
LD A,E
LD (g_music_vars+2),A
; 44. musicpSendCommand(MC_SETEQ, eq);
LD C,E
LD B,D
LD E,67
CALL LWRD ?0024
; 45. UpDisplayFlag = UpDisplayFlag | up_musiceqmode;
?0022:
LD HL,UpDisplayFlag
INC HL
SET 2,(HL)
; 46. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
srs_callback:
; 47. void srs_callback( int srs )
; 48. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -10
; 49. //实时改变EQ的值
; 50. int temp;
; 51. char temp1[10];
; 52. if(srs==0)
LD A,(IX+2)
OR (IX+3)
JR NZ,?0003
?0002:
; 53. {
; 54. g_music_vars.eq_type = 0x4f;//user srs
LD A,79
LD (g_music_vars+2),A
; 55. musicpSendCommand(MC_SETEQ, 0x4f);
LD BC,79
LD E,67
CALL LWRD ?0024
; 56. temp1[0]=8;
LD (IX-10),8
; 57. temp1[1]=8;
LD (IX-9),8
; 58. temp1[2]=4;
LD (IX-8),4
; 59. musicpSendCommand(MC_SETUSEREQ, (int)&temp1);
LD HL,0
ADD HL,SP
CALL LWRD ?0025
; 60. SRSModeFlag=0;
XOR A
JR ?0016
?0003:
; 61. }
; 62. else if(srs==1)
LD A,1
XOR (IX+2)
OR (IX+3)
JR NZ,?0006
?0005:
; 63. {
; 64. g_music_vars.eq_type = 0x4f;//user srs
LD A,79
LD (g_music_vars+2),A
; 65. musicpSendCommand(MC_SETEQ, 0x4f);
CALL LWRD ?0023
; 66. temp1[0]=g_music_vars.SRSMod.Wow;
; 67. temp1[1]=g_music_vars.SRSMod.Bass;
; 68. temp1[2]=g_music_vars.SRSMod.Srs;
; 69. musicpSendCommand(MC_SETUSEREQ, (int)&temp1);
ADD HL,SP
CALL LWRD ?0025
; 70. SRSModeFlag=1;
LD A,1
?0016:
LD (SRSModeFlag),A
; 71. }
; 72. else
JR ?0007
?0006:
; 73. {
; 74. eq_callback(0);
LD DE,0
LD A,BYTE3 eq_callback
LD HL,LWRD eq_callback
CALL LWRD ?BANK_CALL_DIRECT_L08
?0007:
?0004:
; 75. }
; 76.
; 77. UpDisplayFlag = UpDisplayFlag | up_musiceqmode;
JP LWRD ?0022
?0023:
LD BC,79
LD E,67
LD A,BYTE3 musicpSendCommand
LD HL,LWRD musicpSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,(g_music_vars+81)
LD (IX-10),A
LD A,(g_music_vars+82)
LD (IX-9),A
LD A,(g_music_vars+83)
LD (IX-8),A
LD HL,0
RET
; 78. }
srs_user_callback:
; 79. void srs_user_callback(int srs_user)
; 80. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65526
; 81. char temp[10];
; 82. g_music_vars.eq_type = 0x4f;
LD A,79
LD (g_music_vars+2),A
; 83. g_music_vars.SRSMod.Srs = srs_user;
LD A,(IX+2)
LD (g_music_vars+83),A
; 84. musicpSendCommand(MC_SETEQ, 0x4f);
CALL LWRD ?0023
; 85. temp[0]=g_music_vars.SRSMod.Wow;
; 86. temp[1]=g_music_vars.SRSMod.Bass;
; 87. temp[2]=g_music_vars.SRSMod.Srs;
; 88. musicpSendCommand(MC_SETUSEREQ, (int)&temp);
ADD HL,SP
LD C,L
LD B,H
LD E,66
JP LWRD ?0019
; 89.
; 90. }
wow_user_callback:
; 91. void wow_user_callback(int wow_user)
; 92. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65526
; 93. char temp[10];
; 94. g_music_vars.eq_type = 0x4f;
LD A,79
LD (g_music_vars+2),A
; 95. g_music_vars.SRSMod.Wow = wow_user;
LD A,(IX+2)
LD (g_music_vars+81),A
; 96. musicpSendCommand(MC_SETEQ, 0x4f);
CALL LWRD ?0023
; 97. temp[0]=g_music_vars.SRSMod.Wow;
; 98. temp[1]=g_music_vars.SRSMod.Bass;
; 99. temp[2]=g_music_vars.SRSMod.Srs;
; 100. musicpSendCommand(MC_SETUSEREQ, (int)&temp);
ADD HL,SP
LD C,L
LD B,H
LD E,66
JP LWRD ?0019
; 101.
; 102. }
bass_user_callback:
; 103.
; 104. void bass_user_callback(int bass_user)
; 105. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65526
; 106. char temp[10];
; 107. g_music_vars.eq_type = 0x4f;
LD A,79
LD (g_music_vars+2),A
; 108. g_music_vars.SRSMod.Bass = bass_user;
LD A,(IX+2)
LD (g_music_vars+82),A
; 109.
; 110. musicpSendCommand(MC_SETEQ, 0x4f);
CALL LWRD ?0023
; 111. temp[0]=g_music_vars.SRSMod.Wow;
; 112. temp[1]=g_music_vars.SRSMod.Bass;
; 113. temp[2]=g_music_vars.SRSMod.Srs;
; 114. musicpSendCommand(MC_SETUSEREQ, (int)&temp);
ADD HL,SP
LD C,L
LD B,H
LD E,66
JP LWRD ?0019
; 115. }
loop_callback:
; 116.
; 117. void loop_callback( int loop )
; 118. {
CALL LWRD ?ENT_PARM_DIRECT_L09
; 119. g_music_vars.repeat_mode = loop;
LD A,E
LD (g_music_vars+1),A
; 120. UpDisplayFlag = UpDisplayFlag | up_musicloopmode;
LD HL,UpDisplayFlag
INC HL
SET 4,(HL)
; 121. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
OutPutVolume:
; 122. /*===========================================
; 123. functions: OutPutVolume(int vol)
; 124. input: int vol: 要输出的音量
; 125. output: void
; 126. 功能: 把音量值送到IO口,当在EQ变化时作出补尝
; 127. ============================================*/
; 128. void OutPutVolume(int vol)
; 129. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 0
; 130. signed int temp;
; 131.
; 132. if (g_music_vars.eq_type >= eqcount_def)
LD A,(g_music_vars+2)
CP 8
JR C,?0009
?0008:
; 133. {
; 134. temp = vol;
LD E,(IX+2)
LD D,(IX+3)
; 135. }
; 136. else
JR ?0010
?0009:
; 137. {
; 138. temp = vol + EQVOLADJ_TAB[g_music_vars.eq_type];
LD C,A
LD B,0
LD HL,EQVOLADJ_TAB
ADD HL,BC
LD C,(HL)
LD A,C
RLCA
SBC A,A
LD B,A
LD L,(IX+2)
LD H,(IX+3)
ADD HL,BC
EX DE,HL
?0010:
; 139. }
; 140.
; 141. if (temp>31)
LD C,E
LD B,D
LD HL,31
CALL LWRD ?SS_CMP_L02
JR NC,?0012
?0011:
; 142. {
; 143. temp = 31;
LD DE,31
JR ?0015
?0012:
; 144. }
; 145. else if(temp<0)
BIT 7,B
JR Z,?0015
?0014:
; 146. {
; 147. temp = 0;
LD DE,0
?0015:
?0013:
; 148. }
; 149. SetPAVolume(temp);
EX DE,HL
LD E,L
CALL LWRD SetPAVolume
; 150. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
RSEG CONST
EQVOLADJ_TAB:
DEFB 0
DEFB 0
DEFB 0
DEFB 0
DEFB 0
DEFB 0
DEFB 0
DEFB 0
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?