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

📄 voice2k.asm

📁 玩具故事公仔原代码,能够将故事,是小朋友的好伙伴,已经量产
💻 ASM
字号:
;===============================================
; Usages  :     r0 = NN (sentence index)
;               V_Sentence2kIndex = r0
;               call    F_PlaySentence2k
; Function: play 2k sentence
; Input   : V_Sentence2kIndex
; Output  :
;===============================================
F_PlaySentence2k:
        call    F_StopAllVoice  ;首先停止所有声音

        r1 = V_Sentence2kIndex
        r1 = sl r1

        r0 = T_Sentence2k       ;取Sentence的高低地址
        r0 = r0+r1
        ix0 = r0
        r0 = T_Sentence2k$h
        r1 = 0
        r0 = r0+r1+c
        ix0bk = r0

;=      r0 = ROM(ix0,1)
        r0 = ROM(ix0)
        call  SP_IncIX0Ptr
        V_Sentence2kPtrLo = r0
        r0 = ROM(ix0)
        V_Sentence2kPtrHi = r0

        r0 = V_SoundFlag        ;置声音已播放标志
        r0 = BSET.B_2kIsPlaying r0    ;;;;2k声音正在播放
        r0 = BSET.B_VoicePlay r0      ;;;;有声音在播放
        V_SoundFlag   = r0
        ret

;===============================================
; Function: Use in T1 irq
; Input   :
; Output  :
;===============================================
F_ContinueSentence2k:
        r1 = V_SoundFlag
        r0 = BTST.B_2kIsPlaying r1
        jeq     @@EndContinueSentence2k
        cjp1    @@EndContinueSentence2k ;;;;;;if the ch-1(12Kbps)is playing jump to 
        cjp2k   @@EndContinueSentence2k
        r0 = BTST.B_MulteFlag r1      ;;;;;
        jne     @@CheckMulteEnd      ;;;;判断静音完否   =1 跳到@@CheckMulteEnd
                                 
@ContinuePlay:                  ;一个Voice播完后及静音完后,播下个Voice
        play_tail
        resets
        r0 = V_Sentence2kPtrLo     ;;;;;;   
        ix0 = r0
        r0 = V_Sentence2kPtrHi     ;;;;;;
        ix0bk = r0
;=      r0 = ROM(ix0,1)
        r0 = ROM(ix0)              ;;;;;;取表格T_Sentence2k的值指向真正的句子组合
        call  SP_IncIX0Ptr
;=      r1 = 0xffff
;=      r1 = r1-r0
;=      r1 = r0+1
        r1 = NONE       ;;;;;NONE = 0Xffff
        r1 = r0-r1
        jne     @@NotReachSentenceEnd
        call    F_StopAllVoice            ;;;;;;停止播放所有的声音
@@EndContinueSentence2k:
        ret

@@NotReachSentenceEnd:
        r1 = ix0                ; Sentence2kPtr++
        V_Sentence2kPtrLo = r1    ;;;;ix0 存放的是表格低位地址
        r1 = ix0bk
        V_Sentence2kPtrHi = r1    ;;;;;ix0bk表格高位地址

        r1 = BTST.B_MulteDataFlag r0
        jne     @@SetMulteStart

        r0 = sl r0              ; r0*2
        V_2kTemp0 = r0

        r1 = T_VoiceIndex2k     ;根据voice的索引,得到Voice的数据地址
        x0 = r0+r1              ;;;;
        ix0 = x0
        r1 = T_VoiceIndex2k$h
        r0 = 0
        r1 = r0+r1+C
        ix0bk = r1           ;;;;16位的高地址--》ix0bk
;=      r0 = ROM(ix0,1)
        r0 = ROM(ix0)
        call  SP_IncIX0Ptr
        V_Voice2kPtrLo = r0
        r0 = ROM(ix0)
        V_Voice2kPtrHi = r0

        play_head
        freq    8000                    ;set voice sample rate
        push rambk

        call @@_play_12kbps_call_1      ;播放声音程序
        push rambk
        r0 = 6
        rambk = r0
        x0 = V_Voice2kPtrHi
        y0 = V_Voice2kPtrLo
        pop rambk
        speech_add_tb = x0
        speech_add_t = y0
        pop rambk
        ret



@@SetMulteStart:                        ;播放静音
        r0 = BCLR.B_MulteDataFlag r0
        V_MulteTimeLength = r0
        play_tail
        resets
        r0 = V_SoundFlag
        r0 = BSET.B_MulteFlag r0
        V_SoundFlag = r0
        M_ResetDownTime B_DownTime7ms2  ;设置静音定时器
        ret


@@CheckMulteEnd:
        x0 = V_MulteTimeLength          ;设置静音定时器的时间长度
        call    F_DownTime7ms2        ;;;;;7ms延时
        M_TestDownTime  B_DownTime7ms2
        jeq     @@ExitMulte

        r0 = V_SoundFlag
        r0 = BCLR.B_MulteFlag r0    ;;;;;
        V_SoundFlag = r0
        jmp     @ContinuePlay
@@ExitMulte:
        ret


;===============================================
; Function: Get the status of 2k
; Usages  :     call    F_Sentence2kStatus
;               jeq/jne Labelxx
;===============================================
F_Sentence2kStatus:
        r0 = V_SoundFlag
        r0 = BTST.B_2kIsPlaying r0
        ret



;===============================================
; Function: To stop all voice, include 2k, 12k, dualtone, 4 channel
; Input   :
; Output  :
;===============================================
F_StopAllVoice:
        r0 = 0
        V_SoundFlag = r0


        stop_v

        play_tail


        ret

⌨️ 快捷键说明

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