📄 sub_function1.s01
字号:
LD L,(IX-2)
; 179. }
JR ?0047
?0046:
; 180. //取当前歌曲数状态
; 181. g_musicamount = FSELGetTotal();
LD A,BYTE3 fselGetTotal
LD HL,LWRD fselGetTotal
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_musicamount),HL
; 182. g_musicsequence = FSELGetNo();
LD A,BYTE3 fselGetNo
LD HL,LWRD fselGetNo
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_musicsequence),HL
; 183. FSELSetMode(g_music_vars.repeat_mode);
CALL LWRD ?0174
; 184.
; 185. //确保选择器与AP的目录对应
; 186. fselGetLocation(& g_music_vars.location);
CALL LWRD ?0178
; 187. //检测Music的类型
; 188. make_dirname(); //取目录名
LD A,BYTE3 make_dirname
LD HL,LWRD make_dirname
CALL LWRD ?BANK_CALL_DIRECT_L08
; 189. g_currentMusicType = CheckMusicType(g_music_vars.location.filename);
LD DE,g_music_vars+33
LD A,BYTE3 CheckMusicType
LD HL,LWRD CheckMusicType
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_currentMusicType),A
; 190. //找歌词文件并打开
; 191. //清 WATCH_DOG
; 192. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 193. return TRUE;
LD L,1
; 194. }
?0047:
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0174:
LD DE,(g_music_vars+1)
?0173:
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
JP LWRD ?BANK_CALL_DIRECT_L08
?0178:
LD DE,g_music_vars+7
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
JP LWRD ?BANK_CALL_DIRECT_L08
musicpSendCommand_bank:
; 195.
; 196. //==================================================================
; 197. bool musicpSendCommand_bank( BYTE cmd, int param )
; 198. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
PUSH IY
PUSH BC
POP IY
; 199. bool result = FALSE;
; 200. //根据不同的音乐类型发不同的命令
; 201. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 202. switch (cmd)
LD A,(IX+2)
CP 4
JR NZ,?0056
?0049:
; 203. {
; 204. case MC_PLAY:
; 205.
; 206. if (!g_PAOpenFlag)
LD A,(g_PAOpenFlag)
OR A
JR NZ,?0051
?0050:
; 207. {
; 208. //第一次进入AP时由于要开PA,为了减少噪音,要进行淡入。
; 209. #ifdef OPT_Sup_FadeIn_fun
; 210. musicpSendCommand(MC_FADEINOUT, FadeIn_def);
CALL LWRD ?0170
?0051:
; 211. #endif //OPT_Sup_FadeIn_fun
; 212. }
; 213. if (g_FCexitflag)
LD A,(g_FCexitflag)
OR A
JR Z,?0053
?0052:
; 214. {
; 215. openPA(0);
LD E,0
JR ?0153
; 216. }
; 217. else
?0053:
; 218. {
; 219. openPA(g_music_vars.volume);
LD DE,(g_music_vars)
?0153:
LD A,BYTE3 openPA
LD HL,LWRD openPA
CALL LWRD ?BANK_CALL_DIRECT_L08
?0054:
; 220. }
; 221.
; 222. if (param == Nor_Break_open)
PUSH IY
POP HL
LD A,1
XOR L
OR H
JR NZ,?0056
?0055:
; 223. {
; 224. //断点播放时要淡入
; 225. #ifdef OPT_Sup_FadeIn_fun
; 226. musicpSendCommand(MC_FADEINOUT, FadeIn_def);
CALL LWRD ?0170
?0056:
; 227. #endif //OPT_Sup_FadeIn_fun
; 228. }
; 229. break;
?0057:
; 230.
; 231. default:
; 232. break;
?0048:
; 233. }
; 234. switch (g_currentMusicType)
LD DE,(g_currentMusicType)
CALL LWRD ?C_S_SWITCH_L06
DEFB 1
DEFW 6
DEFW ?0091
DEFW ?0059
DEFW ?0068
DEFW ?0068
DEFW ?0068
DEFW ?0084
DEFW ?0077
?0059:
; 235. {
; 236. case Music_MP3: //mp3
; 237. BankSwitch((unsigned long)mp3pSendCommand >> 16);
LD E,BYTE3 mp3pSendCommand
CALL LWRD ?0172
; 238. result = mp3pSendCommand(cmd, param);
LD A,BYTE3 mp3pSendCommand
LD HL,LWRD mp3pSendCommand
CALL LWRD ?0164
; 239. switch(cmd)
JR NZ,?0066
?0061:
; 240. {
; 241. case MC_LOAD:
; 242. mp3pSendCommand(MC_SETVOLUME, g_music_vars.volume);
LD BC,(g_music_vars)
LD A,C
RLCA
SBC A,A
LD B,A
LD E,64
LD A,BYTE3 mp3pSendCommand
LD HL,LWRD mp3pSendCommand
CALL LWRD ?0163
; 243. mp3pSendCommand(MC_SETSPEED, g_music_vars.play_rate);
LD A,BYTE3 mp3pSendCommand
LD HL,LWRD mp3pSendCommand
CALL LWRD ?0165
; 244. mp3pSendCommand(MC_SETEQ, g_music_vars.eq_type);
LD A,BYTE3 mp3pSendCommand
LD HL,LWRD mp3pSendCommand
CALL LWRD ?0166
; 245. if(g_music_vars.eq_type>8)
JR NC,?0066
?0062:
; 246. {
; 247. if(SRSModeFlag)
LD A,(SRSModeFlag)
OR A
JR Z,?0065
?0064:
; 248. {
; 249. mp3pSendCommand(MC_SETUSEREQ, (int)&(g_music_vars.SRSMod));
LD BC,g_music_vars+81
LD E,66
LD A,BYTE3 mp3pSendCommand
LD HL,LWRD mp3pSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
; 250. }
; 251. else
JR ?0066
?0065:
; 252. {
; 253. srs_default_set();
LD A,BYTE3 srs_default_set
LD HL,LWRD srs_default_set
CALL LWRD ?BANK_CALL_DIRECT_L08
?0066:
?0063:
; 254. }
; 255. }
; 256. break;
?0067:
; 257.
; 258. default:
; 259. break;
?0060:
; 260. }
; 261. break;
JP LWRD ?0058
?0068:
; 262.
; 263. case Music_WMA: //wma
; 264. case Music_ASF: //asf
; 265. case Music_WMV: //wmv
; 266. BankSwitch((unsigned long)wmapSendCommand >> 16);
LD E,BYTE3 wmapSendCommand
CALL LWRD ?0172
; 267. result = wmapSendCommand(cmd, param);
LD A,BYTE3 wmapSendCommand
LD HL,LWRD wmapSendCommand
CALL LWRD ?0164
; 268.
; 269. switch(cmd)
JR NZ,?0075
?0070:
; 270. {
; 271. case MC_LOAD:
; 272. wmapSendCommand(MC_SETVOLUME, g_music_vars.volume);
LD BC,(g_music_vars)
LD A,C
RLCA
SBC A,A
LD B,A
LD E,64
LD A,BYTE3 wmapSendCommand
LD HL,LWRD wmapSendCommand
CALL LWRD ?0163
; 273. wmapSendCommand(MC_SETSPEED, g_music_vars.play_rate);
LD A,BYTE3 wmapSendCommand
LD HL,LWRD wmapSendCommand
CALL LWRD ?0165
; 274. wmapSendCommand(MC_SETEQ, g_music_vars.eq_type);
LD A,BYTE3 wmapSendCommand
LD HL,LWRD wmapSendCommand
CALL LWRD ?0166
; 275. if(g_music_vars.eq_type>8)
JR NC,?0075
?0071:
; 276. {
; 277. if(SRSModeFlag)
LD A,(SRSModeFlag)
OR A
JR Z,?0074
?0073:
; 278. {
; 279. wmapSendCommand(MC_SETUSEREQ, (int)&(g_music_vars.SRSMod));
LD BC,g_music_vars+81
LD E,66
LD A,BYTE3 wmapSendCommand
LD HL,LWRD wmapSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
; 280. }
; 281. else
JR ?0075
?0074:
; 282. {
; 283. srs_default_set();
LD A,BYTE3 srs_default_set
LD HL,LWRD srs_default_set
CALL LWRD ?BANK_CALL_DIRECT_L08
?0075:
?0072:
; 284. }
; 285. }
; 286. break;
?0076:
; 287.
; 288. default:
; 289. break;
?0069:
; 290. }
; 291. break;
JP LWRD ?0058
?0077:
; 292.
; 293. case Music_APE:
; 294. BankSwitch((unsigned long)apepSendCommand >> 16);
LD E,BYTE3 apepSendCommand
CALL LWRD ?0172
; 295. result = apepSendCommand(cmd, param);
LD A,BYTE3 apepSendCommand
LD HL,LWRD apepSendCommand
CALL LWRD ?0164
; 296. switch(cmd)
JR NZ,?0082
?0079:
; 297. {
; 298. case MC_LOAD:
; 299. apepSendCommand(MC_SETVOLUME, g_music_vars.volume);
LD BC,(g_music_vars)
LD A,C
RLCA
SBC A,A
LD B,A
LD E,64
LD A,BYTE3 apepSendCommand
LD HL,LWRD apepSendCommand
CALL LWRD ?0163
; 300. apepSendCommand(MC_SETSPEED, g_music_vars.play_rate);
LD A,BYTE3 apepSendCommand
LD HL,LWRD apepSendCommand
CALL LWRD ?0167
; 301. if(g_music_vars.eq_type > 0x10)
JR NC,?0081
?0080:
; 302. apepSendCommand(MC_SETEQ, 0);
LD BC,0
JR ?0154
; 303. else
?0081:
; 304. apepSendCommand(MC_SETEQ, g_music_vars.eq_type);
LD C,B
LD B,0
?0154:
LD E,67
LD A,BYTE3 apepSendCommand
LD HL,LWRD apepSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
?0082:
; 305. break;
?0083:
; 306.
; 307. default:
; 308. break;
?0078:
; 309. }
; 310. break;
JR ?0058
?0084:
; 311.
; 312. case Music_OGG:
; 313. BankSwitch((unsigned long)oggpSendCommand >> 16);
LD E,BYTE3 oggpSendCommand
CALL LWRD ?0172
; 314. result = oggpSendCommand(cmd, param);
LD A,BYTE3 oggpSendCommand
LD HL,LWRD oggpSendCommand
CALL LWRD ?0164
; 315. switch(cmd)
JR NZ,?0058
?0086:
; 316. {
; 317. case MC_LOAD:
; 318. oggpSendCommand(MC_SETVOLUME, g_music_vars.volume);
LD BC,(g_music_vars)
LD A,C
RLCA
SBC A,A
LD B,A
LD E,64
LD A,BYTE3 oggpSendCommand
LD HL,LWRD oggpSendCommand
CALL LWRD ?0163
; 319. oggpSendCommand(MC_SETSPEED, g_music_vars.play_rate);
LD A,BYTE3 oggpSendCommand
LD HL,LWRD oggpSendCommand
CALL LWRD ?0167
; 320. if(g_music_vars.eq_type > 0x10)
JR NC,?0088
?0087:
; 321. oggpSendCommand(MC_SETEQ, 0);
LD BC,0
JR ?0155
; 322. else
?0088:
; 323. oggpSendCommand(MC_SETEQ, g_music_vars.eq_type);
LD C,B
LD B,0
?0155:
LD E,67
LD A,BYTE3 oggpSendCommand
LD HL,LWRD oggpSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
?0089:
; 324. break;
JR ?0058
?0090:
; 325.
; 326. default:
; 327. break;
?0085:
; 328. }
; 329. break;
?0091:
; 330.
; 331.
; 332. default:
; 333. return FALSE;
LD L,0
; 334. }
JR ?0106
?0058:
; 335.
; 336.
; 337. //[2]下面是在做完如下命令都要做的事情
; 338. switch ( cmd )
LD E,(IX+2)
CALL LWRD ?C_V_SWITCH_L06
DEFW 4
DEFB 4
DEFB 6
DEFB 19
DEFB 65
DEFW ?0092
DEFW ?0093
DEFW ?0104
DEFW ?0103
DEFW ?0100
?0093:
; 339. {
; 340. case MC_SETA_B:
; 341. if (result == 0)
XOR A
OR (IX-2)
JR Z,?0092
?0094:
; 342. {
; 343. break;
?0095:
; 344. }
; 345.
; 346. switch ( param )
PUSH IY
POP BC
LD A,1
XOR C
OR B
JR NZ,?0098
?0097:
; 347. {
; 348. case SetAPoint:
; 349. g_2HZ_CNT = 0;//开始计AB点时间长度
LD L,A
LD H,A
LD (g_2HZ_CNT),HL
; 350. g_ABMinTimeCNT = ABReplayMiniTime_def;//定AB的最小时长为400ms
LD A,20
LD (g_ABMinTimeCNT),A
; 351. //g_ABMinTimeCNT = 4000/20;//定AB的最小时长为 4000/20 for debug
; 352. RePlayStatus = WaitSetBPointForAB;
LD A,2
JR ?0156
; 353. UpDisplayFlag = UpDisplayFlag | up_MPRLmode;
; 354. need_draw = TRUE;
; 355. break;
?0098:
LD A,2
XOR C
OR B
JR NZ,?0092
; 356.
; 357. case SetBPoint:
; 358. g_ABPointTimeSize = g_2HZ_CNT;//记下AB点时间长度
LD HL,(g_2HZ_CNT)
LD (g_ABPointTimeSize),HL
; 359. g_ReplayTimeCNT = 0;//复读次数清0
LD (g_ReplayTimeCNT),A
; 360. RePlayStatus = ABLoopPlay;//自动进入复读模式
LD A,3
?0156:
LD (RePlayStatus),A
; 361. UpDisplayFlag = UpDisplayFlag | up_MPRLmode;//刷新复读图标
LD HL,UpDisplayFlag
INC HL
SET 3,(HL)
; 362. need_draw = TRUE;
LD A,1
LD (need_draw),A
; 363. break;
JR ?0092
?0099:
; 364.
; 365. default:
; 366. break;
?0096:
; 367. }
; 368. break;
?0100:
; 369.
; 370. case MC_PLAY:
; 371. if (result)
XOR A
OR (IX-2)
JR Z,?0092
?0101:
; 372. {
; 373. PlayStatus = PlaySta;
LD A,2
LD (PlayStatus),A
?0102:
; 374. }
; 375. break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -