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

📄 sp104.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2004.4                                                    *
; *   File Name : SP104.ASM                                                 *
; *      Author : Ji Ang                                                    *
; ***************************************************************************
        pw      128
        case    off
        externs on

        INCLUDE ST2202.DEF
        INCLUDE DATA.DEF
        INCLUDE XYHADDR.H
        ;INCLUDE GRAPH.DEF
	include	keydef.def

; ***************************************************************************
        .ifdef TTS1_ADDR

; ***************************************************************************
Edata           equ     800h
; ***************************************************************************
        INCLUDE TALKWORD.DEF
; ***************************************************************************
.ifndef LSL_W
        INCLUDE ST2202.MAC
        chip     w65c02s
.endif
; ***************************************************************************
DEBUGGING  EQU   0

PUTSIODATA
        MACRO
        sta     <UDATA          ;
        lda     #00000011b      ;
        ora     <USTR
        sta     <USTR           ;
        bbs1    <USTR,$
        ENDM
; ***************************************************************************

; ***************************************************************************
SP104_BANK      EQU     0300H
SP104_REG_00	EQU	8000H
SP104_REG_02	EQU	8002H
SP104_REG_03    EQU     8003H


; ***************************************************************************
PS7             .SECTION
BankNo          equ     CardBank        ;; For check only.
; ***************************************************************************

        PUBLIC  RESET_SP104
        PUBLIC  SP140_Sleep
        PUBLIC  SP140_WakeUp
        PUBLIC  PLAY_SPEECH
        PUBLIC  PLAY_PHRASE
        PUBLIC  PLAY_ADPCM

; ***************************************************************************
SP140_Sleep:
        _PUSH_DRR
        JMP     L_WriteSleepCommand
; ***************************************************************************
;------------------------
;data convert
;use Register:
;	R_Temp1,R_Temp2,R_Temp3,R_Temp4
;input:
;	R_DataRamAddr
;	ds	18
;output:
;	Speech words
;-----------------------
F_DataConvert:				;data convert and output
        MOVW_C  <DRRL,SP104_BANK

        JSR     FETCH_ONE_BYTE          ;load byte 1
	sta	R_Temp1
	and	#0fh
	sta	R_Temp4
        JSR     FETCH_ONE_BYTE_I        ;load byte 2
        pha
        JSR     FETCH_ONE_BYTE_I        ;load byte 3
        sta     R_Temp2
        tay
        pla
	asl	a
	rol	R_Temp2
	asl	a
	rol	R_Temp3
	asl	a
	rol	R_Temp3
	asl	a
	rol	R_Temp3
	ora	R_Temp4
?L_WaitPackage0Busy:
	jsr	 F_TestDataPort
	bcs	?L_WaitPackage1Busy
        sta     SP104_REG_02                   ;send package 0
	nop
	lda	R_Temp3
	and	#00000111b
        sta     SP104_REG_03
	nop
?L_WaitPackage1Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage1Busy
	lda	R_Temp2
        sta     SP104_REG_02
        JSR     FETCH_ONE_BYTE_I        ;load byte 4
	sta	R_Temp3
	sta	R_Temp4
	tya
	asl	a
	rol	R_Temp3
	lda	R_Temp3
	and	#00000111b
	ora	#10h
        sta     SP104_REG_03                   ;send package 1
        JSR     FETCH_ONE_BYTE_I        ;load byte 5
	sta	R_Temp2
	lsr	a
	ror	R_Temp4
	lsr	a
	ror	R_Temp4
	sta	R_Temp3
	lda	R_Temp4
?L_WaitPackage2Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage2Busy
        sta     SP104_REG_02
	lda	R_Temp3
	and	#0fh
	ora	#20h
        sta     SP104_REG_03                   ;send package 2
        JSR     FETCH_ONE_BYTE_I        ;load byte 6
	sta	R_Temp3
	rol	R_Temp2
	rol	a
	rol	R_Temp2
	rol	a
?L_WaitPackage3Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage3Busy
        sta     SP104_REG_02
	lda	R_Temp1
	lsr	a
	lsr	a
	lsr	a
	lsr	a
	ora	#30h
        sta     SP104_REG_03                   ;send package 3
        JSR     FETCH_ONE_BYTE_I        ;load byte 7
	rol	R_Temp3
	rol	a
	rol	R_Temp4
	rol	R_Temp3
	rol	a
	rol	R_Temp4
?L_WaitPackage4Busy:
	jsr	 F_TestDataPort
	bcs	?L_WaitPackage4Busy
        sta     SP104_REG_02
	lda	R_Temp4
	and	#00000011b
	ora	#40h
        sta     SP104_REG_03                   ;send package 4
        JSR     FETCH_ONE_BYTE_I        ;load byte 8
?L_WaitPackage5Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage5Busy
        sta     SP104_REG_02
        JSR     FETCH_ONE_BYTE_I        ;load byte 9
	sta	R_Temp3
	and	#00000011b
	ora	#50h
        sta     SP104_REG_03                   ;send package 5
	lda	R_Temp3
	lsr	a
	lsr	a
	and 	#00011111b
?L_WaitPackage6Busy:
	jsr	 F_TestDataPort
	bcs	?L_WaitPackage6Busy
        sta     SP104_REG_02
	nop
	lda	#30h
        sta     SP104_REG_03                   ;send package 6
        JSR     FETCH_ONE_BYTE_I        ;load byte 10
        pha
        JSR     FETCH_ONE_BYTE_I        ;load byte 11
        sta     R_Temp4
        sta     R_Temp2
        pla
	rol	R_Temp3
	rol	a
	rol	R_Temp4
?L_WaitPackage7Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage7Busy
        sta     SP104_REG_02
	lda	R_Temp4
	and	#00000011b
	ora	#40h
        sta     SP104_REG_03                   ;send package 7
        JSR     FETCH_ONE_BYTE_I        ;load byte 12
	sta	R_Temp4
	lsr	a
	sta	R_Temp3
	ror	R_Temp2
	lda	R_Temp2
?L_WaitPackage8Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage8Busy
        sta     SP104_REG_02
	lda	R_Temp3
	and	#00000011b
	ora	#50h
        sta     SP104_REG_03                   ;send package 8
        JSR     FETCH_ONE_BYTE_I        ;load byte 13
	sta	R_Temp3
        JSR     FETCH_ONE_BYTE_I        ;load byte 14
	sta	R_Temp2
	lsr	a
	ror	R_Temp3
	ror	R_Temp4
	lsr	a
	ror	R_Temp3
	ror	R_Temp4
	lsr	a
	ror	R_Temp3
	ror	R_Temp4
	and	#00000011b
	sta	R_Temp1
	lda	R_Temp4
?L_WaitPackage9Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage9Busy
        sta     SP104_REG_02
	nop
	lda	#30h
        sta     SP104_REG_03                   ;send package 9
	nop
	lda	R_Temp3
?L_WaitPackage10Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage10Busy
        sta     SP104_REG_02
	lda	R_Temp1
	ora	#40h
        sta     SP104_REG_03                   ;send package 10
        JSR     FETCH_ONE_BYTE_I        ;load byte 15
	sta	R_Temp4
        JSR     FETCH_ONE_BYTE_I        ;load byte 16
	rol	R_Temp2
	rol	R_Temp4
	rol	a
	sta	R_Temp3
	rol	R_Temp2
	rol	R_Temp4
	rol	R_Temp1
	rol	R_Temp2
	rol	R_Temp4
	rol	R_Temp1
	lda	R_Temp4
?L_WaitPackage11Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage11Busy
        sta     SP104_REG_02
	lda	R_Temp1
	and	#00000011b
	ora	#50h
        sta     SP104_REG_03                   ;send package 11
	lda	R_Temp3
	and	#00011111b
?L_WaitPackage12Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage12Busy
        sta     SP104_REG_02
	nop
	nop
	lda	#30h
        sta     SP104_REG_03                   ;send package 12
        JSR     FETCH_ONE_BYTE          ;load byte 16
	sta	R_Temp4
        JSR     FETCH_ONE_BYTE_I        ;load byte 17
	sta	R_Temp3
	lsr	a
	ror	R_Temp4
	lsr	a
	ror	R_Temp4
	lsr	a
	ror	R_Temp4
	lsr	a
	ror	R_Temp4
	sta	R_Temp2
	lda	R_Temp4
?L_WaitPackage13Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage13Busy
        sta     SP104_REG_02
	lda	R_Temp2
	and	#00000011b
	ora	#40h
        sta     SP104_REG_03                   ;send package 13
        JSR     FETCH_ONE_BYTE_I        ;load byte 18
	rol	R_Temp3
	rol	a
	rol 	R_Temp4
	rol	R_Temp3
	rol	a
	rol	R_Temp4
?L_WaitPackage14Busy:
	jsr 	F_TestDataPort
	bcs	?L_WaitPackage14Busy
        sta     SP104_REG_02
	lda	R_Temp4
	and 	#00000011b
	ora	#50h
        sta     SP104_REG_03                   ;send package 14

        INC     <R_Tts1DataRomLowAddr
        BNE     ?F_DataConvert_X
        INC     <R_Tts1DataRomLowAddr+1
        BNE     ?F_DataConvert_X
        SMB7    <R_Tts1DataRomLowAddr+1
        INC     <R_Tts1DataRomLowAddr+2
        BNE     ?F_DataConvert_X
        INC     <R_Tts1DataRomLowAddr+3
?F_DataConvert_X:
        RTS

; ***************************************************************************
FETCH_ONE_BYTE:
        LDX     <DRRL
        PHX
        LDX     <DRRH
        PHX
FETCH_ONE_BYTE_GO:
        LDA     <R_Tts1DataRomLowAddr+2
        STA     <DRRL
        LDA     <R_Tts1DataRomLowAddr+3
        STA     <DRRH
        LDA     (<R_Tts1DataRomLowAddr)
        ;PHA
        ;PUTSIODATA
        ;PLA


        PLX
        STX     <DRRH
        PLX
        STX     <DRRL
        RTS

; ***************************************************************************
FETCH_ONE_BYTE_I:
        LDX     <DRRL
        PHX
        LDX     <DRRH
        PHX
        INC     <R_Tts1DataRomLowAddr
        BNE     FETCH_ONE_BYTE_GO
        INC     <R_Tts1DataRomLowAddr+1
        BNE     FETCH_ONE_BYTE_GO
        SMB7    <R_Tts1DataRomLowAddr+1
        INC     <R_Tts1DataRomLowAddr+2
        BNE     FETCH_ONE_BYTE_GO
        INC     <R_Tts1DataRomLowAddr+3
        BRA     FETCH_ONE_BYTE_GO

; ***************************************************************************
; ***************************************************************************
F_PlaySpeech:
        MACRO
	ldx	#00
	lda	R_Tts2AddrRam,x		;tts2 byte 1
        sta     <R_Tts1DataRomLowAddr   ;segment start point  address low byte
        sta     R_Temp1
	inx
	lda	R_Tts2AddrRam,x		;tts2 byte 2
        sta     <R_Tts1DataRomHighAddr  ;segment start point address middle byte
	sta	R_Temp2
	inx
	lda	R_Tts2AddrRam,x		;tts2 byte 3
	tay
	and	#01h
        sta     R_Temp3                 ;segment start point address high byte
        sta     R_TempX
	tya
	lsr	a
	sta	R_Tts1DataLength	;segment length
	inx
	lda	R_Tts2AddrRam,x		;tts2 byte 4
	sta	R_Tts1DataParameter1	;segment parameter1
	inx
	lda	R_Tts2AddrRam,x		;tts2 byte 5
	sta	R_Tts1DataParameter2	;segment parameter2
	lda	R_Tts1DataParameter2	;if parameter2 is not 0,read(segment length+1)*18 bytes
	eor	#0
	beq	?L_Calculate_SegmentStartAddr	;if parameter2 is 0,read(segment length*18) bytes
	clc
	lda	#1
	adc	R_Tts1DataLength
	sta	R_Tts1DataLength
?L_Calculate_SegmentStartAddr:
        STZ     R_Temp4

        .if (DEBUGGING=1)
        PUTSIODATA R_Tts1DataLength
        PUTSIODATA R_Tts1DataParameter1
        PUTSIODATA R_Tts1DataParameter2

        PUTSIODATA R_Temp1
        PUTSIODATA R_Temp2
        PUTSIODATA R_Temp3
        PUTSIODATA R_Temp4
        .endif

        ldx     #3
?L_SegmentStartAddr_Mul_Nine:
        ASL     R_Temp1
        ROL     R_Temp2
        ROL     R_Temp3
        ROL     R_Temp4
        dex
        bne     ?L_SegmentStartAddr_Mul_Nine
        clc
        lda     R_Temp1
        adc     <R_Tts1DataRomLowAddr
        sta     R_Temp1
        lda     R_Temp2
        adc     <R_Tts1DataRomHighAddr
        sta     R_Temp2
        lda     R_Temp3
        adc     R_TempX
        sta     R_Temp3
        lda     R_Temp4
        adc     #0
        sta     R_Temp4

        ASL     R_Temp1
        ROL     R_Temp2
        ROL     R_Temp3
        ROL     R_Temp4


        .if (DEBUGGING=1)
        PUTSIODATA R_Temp1
        PUTSIODATA R_Temp2
        PUTSIODATA R_Temp3
        PUTSIODATA R_Temp4
        .endif

        ADDL_C R_Temp1,TTS1_ADDR
        LONG_2_DDR_REG R_Temp1
        MOVW_W  <R_Tts1DataRomLowAddr,R_Temp1

;------------------------------------
;Fetch Speech Data from tts1.bin and convert to tts format,then send to spds104
;----------------------------
        MOVW_C  <DRRL,SP104_BANK
?L_WriteParameter1:
	jsr	F_TestDataPort
	bcs	?L_WriteParameter1
	lda	R_Tts1DataParameter1	;Write  Parameter1
        sta     SP104_REG_02
	lda	#c2h
        sta     SP104_REG_03
?L_WriteParameter2:			;Write  Parameter2
	jsr	F_TestDataPort
	bcs	?L_WriteParameter2
	lda	R_Tts1DataParameter2
        sta     SP104_REG_02
	lda	#c4h
        sta     SP104_REG_03
?L_WriteSegmentLength:			;;Write  Segment length
	jsr	F_TestDataPort
	bcs	?L_WriteSegmentLength
	lda	R_Tts1DataLength
        sta     SP104_REG_02
	lda	#c8h
        sta     SP104_REG_03

        MOVW_W  <R_Tts1DataRomLowAddr+2,R_Temp3
?L_FetchSpeechData:
	lda	#25
	jsr	F_LongDelay
;*************************************** JSR Data Convert and send to SPDS104 Procedure
        JSR     F_DataConvert           ;jsr data convert procedure
;********************************************************************
	dec	R_Tts1DataLength
        bne     ?L_FetchSpeechData

⌨️ 快捷键说明

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