⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 melody.inh

📁 asm.rar 拉斯维加丝盘源代码 ASM51
💻 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 + -