📄 midiplay.lst
字号:
00008F7E 02 4E jnz ?L_KeyValueNotNull
00008F7F 80 FE 9C 8F goto ?L_KeyDealOver //No, key deal over
?L_KeyValueNotNull:
00008F81 4F B4 r2&= 0x000f //Yes, get key pointer
//----------------------------------------------------------------------------------------
00008F82 62 97 r3 = r2 lsr 1 //Get key Value from key buffer
00008F83 0B 07 C9 00 r3+= KeyQueueBuf
00008F85 C3 92 r1 = [r3]
00008F86 41 C4 test r2,0x0001
00008F87 02 5E jz ?L_KeyValueOk
00008F88 79 93 r1 = r1 lsr 4
00008F89 79 93 r1 = r1 lsr 4
?L_KeyValueOk:
00008F8A 09 B3 FF 00 r1&= 0x00ff
//----------------------------------------------------------------------------------------
00008F8C 12 95 C8 00 r2 = [KeyQueueBufPtr] //Shift key buffer pointer to
00008F8E 41 04 r2+= 0x0001 //next key value
00008F8F 0A 25 00 01 r2-= 0x0100
00008F91 0A B5 F7 FF r2&= 0xfff7
00008F93 1A D5 C8 00 [KeyQueueBufPtr] = r2
//----------------------------------------------------------------------------------------
00008F95 12 95 BF 00 r2 = [PhoneMode]
00008F97 0A B5 01 00 r2&= C_ModeRelatedBits
00008F99 0A 05 9D 8F r2+= TW_PhoneMode
00008F9B C2 9E pc = [r2]
?L_KeyDealOver:
00008F9C 90 9A retf
//----------------------------------------------------------------------------------------
.const C_ModeRelatedBits = 0x0001
.const C_ModeSelectMode = 0x0000
.const C_MidiPlayMode = 0x0001
TW_PhoneMode:
00008F9D 9F 8F .dw F_ModeSelectKeyDeal
00008F9E BB 8F .dw F_PlayMidiModeKeyDeal
//----------------------------------------------------------------------------------------
F_ModeSelectKeyDeal:
00008F9F 69 42 cmp r1,C_HandFree
00008FA0 19 4E jnz ?L_NotKeyDel
00008FA1 41 92 r1 = 0x0001 // play_rate : 32768/2
00008FA2 46 94 r2 = 0x0006 // channel_num
00008FA3 40 F0 B8 8C call F_SACM_MS02_Initial
00008FA5 11 93 C0 00 r1 = [SongIndex] // Song_Index
00008FA7 12 95 C1 00 r2 = [Volume] // Volume : 0~3
00008FA9 40 F0 CB 8C call F_SACM_MS02_Play //Start play MIDI (Song_Index)
00008FAB 11 93 BF 00 r1 = [PhoneMode]
00008FAD 09 A3 00 80 r1|= Flag_PlayMidi
00008FAF 19 D3 BF 00 [PhoneMode] = r1
00008FB1 41 92 r1 = C_MidiPlayMode //Set MIDI play mode for key deal
00008FB2 41 B2 r1&= C_ModeRelatedBits
00008FB3 12 95 BF 00 r2 = [PhoneMode]
00008FB5 0A B5 FE FF r2&= 0xffff-C_ModeRelatedBits
00008FB7 01 A5 r2|= r1
00008FB8 1A D5 BF 00 [PhoneMode] = r2
?L_NotKeyDel:
00008FBA 90 9A retf
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
F_PlayMidiModeKeyDeal:
00008FBB 6A 42 cmp r1,C_KeyVolumeUp
00008FBC 0C 4E jnz ?L_NotKeyVolumeUp
00008FBD 11 93 C1 00 r1 = [Volume]
00008FBF 41 02 r1+= 0x0001
00008FC0 43 42 cmp r1,C_TopVolume
00008FC1 01 8E jbe ?L_VolumeOk
00008FC2 43 92 r1 = C_TopVolume
?L_VolumeOk:
00008FC3 19 D3 C1 00 [Volume] = r1
00008FC5 40 F0 05 8C call F_SACM_MS02_Volume // Adjust Volume
00008FC7 80 FE F6 8F goto ?L_KeyDealOver
?L_NotKeyVolumeUp:
//----------------------------------------------------------------------------------------
00008FC9 40 42 cmp r1,C_KeyVolumeDown
00008FCA 05 4E jnz ?L_NotKeyVolumeDown
00008FCB 11 93 C1 00 r1 = [Volume]
00008FCD 4B 5E jz ?L_VolumeOk
00008FCE 41 22 r1-= 0x0001
00008FCF 4D EE jmp ?L_VolumeOk
?L_NotKeyVolumeDown:
//----------------------------------------------------------------------------------------
00008FD0 63 42 cmp r1,C_Up
00008FD1 10 4E jnz ?L_NotKeyUp
00008FD2 11 93 C0 00 r1 = [SongIndex]
00008FD4 41 02 r1+= 0x0001
00008FD5 48 42 cmp r1,C_SongTotal
00008FD6 01 0E jb ?L_SongIndexOk
00008FD7 47 92 r1 = C_SongTotal-1
?L_SongIndexOk:
00008FD8 19 D3 C0 00 [SongIndex] = r1
00008FDA 11 93 C0 00 r1 = [SongIndex] // Song_Index
00008FDC 12 95 C1 00 r2 = [Volume] // Volume : 0~3
00008FDE 40 F0 CB 8C call F_SACM_MS02_Play // Start play MIDI (Song_Index)
00008FE0 80 FE F6 8F goto ?L_KeyDealOver
?L_NotKeyUp:
//----------------------------------------------------------------------------------------
00008FE2 64 42 cmp r1,C_Down
00008FE3 05 4E jnz ?L_NotKeyDown
00008FE4 11 93 C0 00 r1 = [SongIndex]
00008FE6 4F 5E jz ?L_SongIndexOk
00008FE7 41 22 r1-= 0x0001
00008FE8 51 EE jmp ?L_SongIndexOk
?L_NotKeyDown:
//----------------------------------------------------------------------------------------
00008FE9 69 42 cmp r1,C_HandFree
00008FEA 0B 4E jnz ?L_NotKeyDel
00008FEB 40 F0 19 90 call F_StopPlay //Stop play MIDI
00008FED 40 92 r1 = C_ModeSelectMode //Set select mode for key deal
00008FEE 41 B2 r1&= C_ModeRelatedBits
00008FEF 12 95 BF 00 r2= [PhoneMode]
00008FF1 0A B5 FE FF r2&= 0xffff-C_ModeRelatedBits
00008FF3 01 A5 r2|= r1
00008FF4 1A D5 BF 00 [PhoneMode] = r2
?L_NotKeyDel:
//----------------------------------------------------------------------------------------
?L_KeyDealOver:
00008FF6 90 9A retf
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
// Function Name: F_SACM_MS02_Init_
// Purpose: Initialize related hardware
// (Set Fosc , TimerA or TimerB , TimerData , P_DAC_Ctrl)
// Parameters: None
//----------------------------------------------------------------------------------------
F_SACM_MS02_Init_:
00008FF7 40 F1 int off
00008FF8 09 93 81 00 r1 = 0x0081
00008FFA 19 D3 15 70 [P_SystemClock] = r1 //Set High Speed and (/1)
00008FFC 09 93 80 00 r1 = 0x0080
00008FFE 19 D3 15 70 [P_SystemClock] = r1 //Set High Speed and (/1)
00009000 09 93 FF FF r1 = 0xffff
00009002 19 D3 11 70 [P_IntClr] = r1
00009004 09 93 00 D5 r1 = 0xD500 //Base 32768Hz
00009006 19 D3 1A 70 [P_Tmr_Ctrl] = r1
00009008 09 93 FE FF R1 = 0xFFFE // 16.384k
0000900A 19 D3 1B 70 [P_TmrA_Data] = r1 //Set play rate
0000900C 19 D3 1C 70 [P_TmrA_Load] = r1
0000900E 11 93 10 70 r1 = [P_Int]
00009010 44 A2 r1|= B_TmrAInt
00009011 19 D3 10 70 [P_Int] = r1 //Enable TimerA interrupt
00009013 09 93 00 07 R1 = 0x0700 //From DACO pin
00009015 19 D3 22 70 [P_DtmfTone] = r1
00009017 43 F1 int fiq, irq
00009018 90 9A retf
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
// Function Name: F_StopPlay
// Purpose: Stop playing MIDI
// (Clear Flag, Disable TimerA and INT)
// Parameters: None
//----------------------------------------------------------------------------------------
F_StopPlay:
00009019 40 F0 ED 8C call F_SACM_MS02_Stop
0000901B 09 93 FF FF r1 = 0xFFFF
0000901D 19 D3 11 70 [P_IntClr] = r1
0000901F 40 92 r1 = 0x0000 //Disable TimerA
00009020 19 D3 1A 70 [P_Tmr_Ctrl] = r1
00009022 40 92 r1 = 0x0000 //Disable DAC
00009023 19 D3 22 70 [P_DtmfTone] = r1
00009025 11 93 10 70 r1 = [P_Int]
00009027 09 B3 FB FF r1&= 0xffff-0x0004
00009029 19 D3 10 70 [P_Int] = r1 //Disable TimerA INT
0000902B 90 9A retf
//----------------------------------------------------------------------------------------
00008D9C .TEXT
//----------------------------------------------------------------------------------------
//ISR : TimerA INT
//----------------------------------------------------------------------------------------
_FIQ:
00008D9C A8 DA push r1,r5 to [sp]
00008D9D 09 93 00 02 r1= B_Ioc1Int
00008D9F 19 D3 11 70 [P_IntClr] = r1
00008DA1 A8 90 pop r1,r5 from [sp]
00008DA2 98 9A reti
//------------------------------------------------------------------------------
_IRQ0:
00008DA3 A8 DA push r1,r5 to [sp]
00008DA4 09 93 01 01 r1= B_Ioc0Int+B_RiInt
00008DA6 19 D3 11 70 [P_IntClr] = r1
00008DA8 A8 90 pop r1,r5 from [sp]
00008DA9 98 9A reti
//------------------------------------------------------------------------------
_IRQ1:
00008DAA A8 DA push r1,r5 to [sp]
00008DAB 42 92 r1 = B_IoaInt
00008DAC 19 D3 11 70 [P_IntClr] = r1
00008DAE A8 90 pop r1,r5 from [sp]
00008DAF 98 9A reti
//------------------------------------------------------------------------------
_IRQ2:
00008DB0 A8 DA push r1,r5 to [sp]
00008DB1 44 92 r1= B_TmrAInt
00008DB2 19 D3 11 70 [P_IntClr] = r1
00008DB4 40 F0 1B 8D call F_ISR_Service_SACM_MS02
00008DB6 A8 90 pop r1,r5 from [sp]
00008DB7 98 9A ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -