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

📄 playsub.asm

📁 完整的方案
💻 ASM
字号:
FrqTable:
    .DW  C_Timer_Setting_12500_For_49MHz
    .DW  C_Timer_Setting_13000_For_49MHz
    .DW  C_Timer_Setting_13500_For_49MHz
    .DW  C_Timer_Setting_14500_For_49MHz
    .DW  C_Timer_Setting_15000_For_49MHz
    .DW  C_Timer_Setting_16000_For_49MHz   // 8
    .DW  C_Timer_Setting_17000_For_49MHz
    .DW  C_Timer_Setting_18000_For_49MHz

    .DW  C_Timer_Setting_17227_For_49MHz
    .DW  C_Timer_Setting_17915_For_49MHz
    .DW  C_Timer_Setting_18605_For_49MHz
    .DW  C_Timer_Setting_19983_For_49MHz
    .DW  C_Timer_Setting_20671_For_49MHz
    .DW  C_Timer_Setting_22050_For_49MHz   // 12
    .DW  C_Timer_Setting_23428_For_49MHz
    .DW  C_Timer_Setting_24806_For_49MHz

    .DW  C_Timer_Setting_25000_For_49MHz
    .DW  C_Timer_Setting_26000_For_49MHz
    .DW  C_Timer_Setting_27000_For_49MHz
    .DW  C_Timer_Setting_29000_For_49MHz
    .DW  C_Timer_Setting_30000_For_49MHz
    .DW  C_Timer_Setting_32000_For_49MHz   // 16
    .DW  C_Timer_Setting_34000_For_49MHz
    .DW  C_Timer_Setting_36000_For_49MHz

GetTimer:
         R2=C_Timer_Setting_16000_For_49MHz
         R1=[_PlayFrq]
         JE GetTimer_
         R2=C_Timer_Setting_22050_For_49MHz
GetTimer_:
         RETF

RampUpDAC:
        PUSH R1,R3 TO [SP]
        R1 = 0x0008
        [P_DAC_Ctrl] = R1
        R3=0
RampUpDAC1Prev:
        R1=[P_DAC1]
        R1&=~0x003F
        CMP R1,0x8000
        JB RampUpDAC1PrevAdd
        JA RampUpDAC2Prev
        R3|=DAC1OkBit
        JMP RampUpDAC2Prev
RampUpDAC1PrevAdd:
        R3|=DAC1AddBit
RampUpDAC2Prev:
        R2=[P_DAC2]
        R2&=~0x003F
        CMP R2,0x8000
        JB RampUpDAC2PrevAdd
        JA RampUpDAC0
        R3|=DAC2OkBit
        TEST R3, DAC1OkBit
        JNE RampUpDACEnd
        JMP RampUpDAC0
RampUpDAC2PrevAdd:
        R3|=DAC2AddBit
RampUpDAC0:
        CALL F_Delay
RampUpDAC1:
        TEST R3, DAC1OkBit
        JNE RampUpDAC2
        TEST R3, DAC1AddBit
        JNE RampUpDAC1Add
RampUpDAC1Sub:
        R1-=0x40
        JMP RampUpDAC1_
RampUpDAC1Add:
        R1+=0x40
RampUpDAC1_:
        [P_DAC1]=R1
        CMP R1,0x8000
        JNE RampUpDAC2
        R3|=DAC1OkBit
        TEST R3, DAC2OkBit
        JNE RampUpDACEnd

RampUpDAC2:
        TEST R3, DAC2OkBit
        JNE RampUpDAC0
        TEST R3, DAC2AddBit
        JNE RampUpDAC2Add
RampUpDAC2Sub:
        R2-=0x40
        JMP RampUpDAC2_
RampUpDAC2Add:
        R2+=0x40
RampUpDAC2_:
        [P_DAC2]=R2
        CMP R2,0x8000
        JNE RampUpDAC0
        R3|=DAC2OkBit
        TEST R3, DAC1OkBit
        JE RampUpDAC0

RampUpDACEnd:
        CALL F_Delay
        POP  R1,R3 FROM [SP]
        RETF


RampDnDAC:
        PUSH R1,R3 TO [SP]
        R1 = 0x0008
        [P_DAC_Ctrl] = R1
        R3=0
        R1=[P_DAC1]
        R1&=~0x003F
        JNE RampDnDAC_
        R3|=DAC1OkBit
RampDnDAC_:
        R2=[P_DAC2]
        R2&=~0x003F
        JNE RampDnDAC0
        R3|=DAC2OkBit
        TEST R3, DAC1OkBit
        JNE RampDnDACEnd
RampDnDAC0:
        CALL F_Delay
RampDnDAC1:
        TEST R3, DAC1OkBit
        JNE RampDnDAC2
        R1-=0x40
        [P_DAC1]=R1
        JNE RampDnDAC2
        R3|=DAC1OkBit
        TEST R3, DAC2OkBit
        JNE RampDnDACEnd
RampDnDAC2:
        TEST R3, DAC2OkBit
        JNE RampDnDAC0
        R2-=0x40
        [P_DAC2]=R2
        JNE RampDnDAC0
        R3|=DAC2OkBit
        TEST R3, DAC1OkBit
        JE RampDnDAC0
RampDnDACEnd:
        CALL F_Delay
        POP  R1,R3 FROM [SP]
        RETF

F_Delay:
        push r1 to [sp] 
        r1 = C_RampDelay; 							// Ramp Up/Dn delay per step
L_D_Loop:
        r1 -= 1 
        jnz L_D_Loop
        pop r1 from [sp]
        RETF

_InitSacm:
          R1 = SACM_IDLE
          [_SacmStatus] = R1
          R1 = 0
          [P_INT_Ctrl] = R1
          [R_InterruptStatus] = R1
          CALL CloseADC
          FIQ ON
          RETF

F_SACM_DVR1600_GetADC:
          R1 = [P_ADC]
          RETF

CloseADC:
        CALL RampDnDAC
        R1 = 0x0002
        [P_ADC_Ctrl] = R1
        RETF

// R1=Addr(BP+1) R2=Length(BP+2)
F_USER_S200_GetData:
F_USER_S530_GetData:
F_USER_S480_GetData:
F_USER_DVR1600_GetData:
F_USER_MS01_GetData:
F_USER_GetData:
         PUSH R1, R5 TO [SP]
F_USER_GetData2:
         R3 = [_PlayStartAddr]
         R4 = [_PlayStartBank]
         R5=R2
         R2=R2 LSL 1
         R2+=R3
         [_PlayStartAddr]=R2
         JCC F_USER_GetData_
         R2=R4+1
         [_PlayStartBank]=R2
F_USER_GetData_:
         R2=R1
         CALL ReadNandWordBuf
F_USER_GetData_End:
         POP R1, R5 FROM [SP]
         RETF


Play_MS02:
Play_A20: 
Play_S200:
Play_S480:
Play_S720:
        PC=Play_Init_End

_SP_RampDnDAC2:
F_SP_RampDnDAC2:
_SP_RampDnDAC1:
F_SP_RampDnDAC1:
F_SP_RampDnDAC:
        RETF

_SP_RampUpDAC2:
F_SP_RampUpDAC2:
_SP_RampUpDAC1:
F_SP_RampUpDAC1:
F_SP_RampUpDAC:
        RETF

F_SP_SACM_DVR1600_ADC_Timer_Init:
F_SP_SACM_DVR1600_DAC_Timer_Init:
F_SP_SACM_DVR1600_DAC_TimerDiv2_:
F_SP_SACM_DVR1600_ADC_TimerDiv2_:
T_SACM_S480_SpeechTable:
T_SACM_S200_SpeechTable:
T_SACM_S530_SpeechTable:
T_SACM_MS01_SongTable:
F_USER_InitAdpcmData_Ch0:
F_USER_InitAdpcmData_Ch1:
F_USER_MS01_GetAdpcmData_Ch0:
F_USER_MS01_GetAdpcmData_Ch1:
F_SACM_MS01_SongEvent:
F_SP_SwitchChannel:
    RETF
F_SACM_S200_SendDAC1:
F_SACM_S530_SendDAC1:
F_SACM_S480_SendDAC1:
F_SACM_MS01_SendDAC1:
F_SACM_DVR1600_SendDAC1:
    [P_DAC1] = R4
    RETF
F_SACM_S200_SendDAC2:
F_SACM_S530_SendDAC2:
F_SACM_S480_SendDAC2:
F_SACM_MS01_SendDAC2:
F_SACM_DVR1600_SendDAC2:
    [P_DAC2] = R4
    RETF
F_SACM_S200_EndPlay:
F_SACM_S530_EndPlay:
F_SACM_S480_EndPlay:
F_SACM_MS01_EndPlay:
F_SACM_DVR1600_EndPlay:
T_SACM_DVR1600_SpeechTable:
    RETF
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -