📄 melody.inh
字号:
;; .CODE
;;SystemClock EQU 6000000
;;CLK32768: EQU 32768
.PAGE0
SPL191A: EQU 1
D_SongBank: EQU 1
D_LastPage: EQU 7
D_LastPageStart EQU $80
D_RampDownValue EQU 80H
ADPCM66 EQU 1
P_TimerCh0L: EQU P_Timer0_Low
P_TimerCh0H: EQU P_Timer0_High
P_TimerCh1L: EQU P_Timer1_Low
P_TimerCh1H: EQU P_Timer1_High
P_DacCh1: EQU P_PWM_Ch0Data
P_DacCh2: EQU P_PWM_Ch1Data
D_TimerCh1: EQU 00010000B
D_TimerCh2: EQU 00100000B
CntCtrl EQU P_TimerCntControl
PWMchl0: EQU P_PWM_Ch0Control
PWMchl1: EQU P_PWM_Ch1Control
R_Temp: DS 1
R_DataDPTRCh1: DS 3 ;Speech data /Envelope pointer for channel 1
R_DataDPTRCh2: DS 3 ;Speech data /Envelope pointer for channel 2
R_MelodyDPTR: DS 3 ;Data pointer for under 64K memory
R_StatusCh1: DS 1 ;Mode of synthesizer channel 1
R_StatusCh2: DS 1 ;Mode of synthesizer channel 2
D_ChActive: EQU %10000000
D_ChPlaySpeech:EQU %00000000 ;b6=0 for Speech/Mute mode
D_ChPlayTone: EQU %01000000 ;High when Ch1 is Playing with Tone
D_NibbleFlag: EQU %00100000
D_MuteFlag: EQU %00010000 ;set when mute word is playing
D_Octave: EQU %00000111
R_MelodyStatus: DS 1
D_MelodyEnable:EQU %10000000
D_Mute: EQU %01000000
D_KeyToneMute: EQU %00100000
;/******************************************/
;/* Macro defitions */
;/******************************************/
%LoadTempo: .MACRO tempo
DB (D_SystemC32K*60/(tempo)/256/8)
.ENDM
;/******************************************/
%TestMelody: .MACRO
SEC
LDA R_MelodyStatus
AND #D_MelodyEnable
BNE ?L_True#
CLC
?L_True#:
.ENDM
;/******************************************/
%LoadSpeechFreq: .MACRO freq
DW (65536-(D_SystemClock/(freq)))
.ENDM
;****************************************************************
%LoadToneFreq: .MACRO freq
DW (65536-(D_SystemClock/(2*freq)))
.ENDM
;****************************************************************
%LoadOctaveToneFreq: .MACRO Freq
%LoadToneFreq Freq
%LoadToneFreq 105946*Freq/100000
%LoadToneFreq 112246*Freq/100000
%LoadToneFreq 118920*Freq/100000
%LoadToneFreq 125992*Freq/100000
%LoadToneFreq 133484*Freq/100000
%LoadToneFreq 141421*Freq/100000
%LoadToneFreq 149830*Freq/100000
%LoadToneFreq 158740*Freq/100000
%LoadToneFreq 168179*Freq/100000
%LoadToneFreq 178179*Freq/100000
%LoadToneFreq 188775*Freq/100000
.ENDM
;****************************************************************
%LoadOctaveSpeechFreq: .MACRO Freq
%LoadSpeechFreq Freq
%LoadSpeechFreq 105946*Freq/100000
%LoadSpeechFreq 112246*Freq/100000
%LoadSpeechFreq 118920*Freq/100000
%LoadSpeechFreq 125992*Freq/100000
%LoadSpeechFreq 133484*Freq/100000
%LoadSpeechFreq 141421*Freq/100000
%LoadSpeechFreq 149830*Freq/100000
%LoadSpeechFreq 158740*Freq/100000
%LoadSpeechFreq 168179*Freq/100000
%LoadSpeechFreq 178179*Freq/100000
%LoadSpeechFreq 188775*Freq/100000
.ENDM
;****************************************************************
%DSLabelDefined: .MACRO Label, ref
Label: EQU $-ref
DS 1
.ENDM
;****************************************************************
;===================================================
;Set Point Macro
;===================================================
%IncSpeechDPTRCh1: .MACRO
INC R_DataDPTRCh1
BNE L_CheckDPTRCh1?
INC R_DataDPTRCh1+1
BNE L_ExitIncreaseDPTRCh1#
L_CheckDPTRCh1?:
LDA #F0H
CMP R_DataDPTRCh1
BNE L_ExitIncreaseDPTRCh1#
LDA R_DataDPTRCh1+1
AND #7FH
EOR #7FH
BNE L_ExitIncreaseDPTRCh1#
STA R_DataDPTRCh1
INC R_DataDPTRCh1+2
LDX #80H
LDA R_DataDPTRCh1+2
CMP #D_LastPage
BNE L_NotInLastPageCh1?
LDX #D_LastPageStart
L_NotInLastPageCh1?:
STX R_DataDPTRCh1+1
L_ExitIncreaseDPTRCh1#:
.ENDM
;===================================================
%IncSpeechDPTRCh2: .MACRO
INC R_DataDPTRCh2
BNE L_CheckDPTRCh2?
INC R_DataDPTRCh2+1
BNE L_ExitIncreaseDPTRCh2#
L_CheckDPTRCh2?:
LDA #F0H
CMP R_DataDPTRCh2
BNE L_ExitIncreaseDPTRCh2#
LDA R_DataDPTRCh2+1
AND #7FH
EOR #7FH
BNE L_ExitIncreaseDPTRCh2#
STA R_DataDPTRCh2
INC R_DataDPTRCh2+2
LDX #80H
LDA R_DataDPTRCh2+2
CMP #D_LastPage
BNE L_NotInLastPageCh2?
LDX #D_LastPageStart
L_NotInLastPageCh2?:
STX R_DataDPTRCh2+1
L_ExitIncreaseDPTRCh2#:
.ENDM
;===================================================
;Set Bank Macro
;===================================================
%ReadSpeechDataCh1: .MACRO
LDY P_BankSel
LDX #0
LDA R_DataDPTRCh1+2
STA P_BankSel
LDA (R_DataDPTRCh1,X)
STY P_BankSel
.ENDM
;===================================================
%ReadSpeechDataCh2: .MACRO
LDY P_BankSel
LDX #0
LDA R_DataDPTRCh2+2
STA P_BankSel
LDA (R_DataDPTRCh2,X)
STY P_BankSel
.ENDM
;===================================================
%ReadMelodyData: .MACRO
LDY P_BankSel
LDX #0
LDA R_MelodyDPTR+2
STA P_BankSel
LDA (R_MelodyDPTR,X)
STY P_BankSel
.ENDM
;===================================================
%SetSPeechPointCh1: .MACRO
LDA P_BankSel
PHA
STY P_BankSel
STY R_DataDPTRCh1+2
LDA $4000,x
STA R_DataDPTRCh1
LDA $4100,x
STA R_DataDPTRCh1+1
PLA
STA P_BankSel
.ENDM
;===================================================
%SetSPeechPointCh2: .MACRO
LDA P_BankSel
PHA
STY P_BankSel
STY R_DataDPTRCh2+2
LDA $4000,x
STA R_DataDPTRCh2
LDA $4100,x
STA R_DataDPTRCh2+1
PLA
STA P_BankSel
.ENDM
;===================================================
;Set I/O Macro
;===================================================
%SetTimerStart: .MACRO
LDA #(TM0_SUR_ROSC+TM1_SUR_ROSC)
STA CntCtrl
.ENDM
;===================================================
%SetTimerStop: .MACRO
LDA #0
STA CntCtrl
.ENDM
;===================================================
%SetPWMSpeechCh1On: .MACRO
LDA #(CH_Dirctory+CH_SPEECH)
STA PWMchl0
.ENDM
;===================================================
%SetPWMSpeechCh2On: .MACRO
LDA #(CH_Dirctory+CH_SPEECH)
STA PWMchl1
.ENDM
;===================================================
%SetPWMToneCh1On: .MACRO
LDA #(CH_Dirctory+CH_TONE)
STA PWMchl0
.ENDM
;===================================================
%SetPWMToneCh2On: .MACRO
LDA #(CH_Dirctory+CH_TONE)
STA PWMchl1
.ENDM
;===================================================
%SetPWMCh1Off: .MACRO
LDA #0
STA PWMchl0
.ENDM
;===================================================
%SetPWMCh2Off: .MACRO
LDA #0
STA PWMchl1
.ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -