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

📄 listen.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	Adc	Song_Txtlong
	Sta	Strinxl
	Lda	Strinxl+1
	Adc	Song_Txtlongh
	Sta	Strinxl+1
	Rts

Get_Addressnew:	;Locabuffor_New+Song_Txtlong
	Lda	#<Locabuffor_New
	Sta	Indxd
	Lda	#>Locabuffor_New
	Sta	Indxd+1
	Clc
	Lda	Indxd
	Adc	Song_Txtlong
	Sta	Indxd
	Lda	Indxd+1
	Adc	Song_Txtlongh
	Sta	Indxd+1
	Rts
;===================================================================================
;Fun:	显示喇叭图标
;Input:
;Output:
;===================================================================================
Disp_Spkbmp:
	Ldx	<Curx
	Ldy	<Cury
	Phx
	Phy
        Lda     #0			;;显示喇叭图标
        Sta     <Ox
        Lda	#0
        Sta     <Oy
        Loprintimage	Spk
	Ply
	Plx
	Stx	<Curx
	Sty	<Cury
        Rts

;===================================================================================
;Fun:	取当前光标所对应的Textbuffor位置
;Input:	Textbuffor,X
;Output:X
;===================================================================================
Get_Currtextbuffor_Loca:
	Lda	<Curx
	Sta	Tmp2
	Lda	<Cury
	Sta	Tmp1
	Stz	Tmp0
?Xxx:
	Lda	Tmp1
	Beq	?Xxx0
	Clc
	Lda	#20
	Adc	Tmp0
	Sta	Tmp0
	Dec	Tmp1
	Bra	?Xxx
?Xxx0:
	Clc
	Lda	Tmp2
	Adc	Tmp0
	Sta	Tmp0
	Tax
	Rts

;===================================================================================
;Fun	:根据当前光标在Textbuffor中的位置,到相应的页中找到下一个(Textbuffor_Bak,X)='_',
;	:得到其对应的光标位置
;Input	:Textbuffor_Bak,X
;Output	:Curx,Cury
;===================================================================================
;第一次进入该页,判断是否存在‘_’,若无,则返回0,光标定位为0,0,且不显示光标
Need_Cursor:
	Ldx	#0
?00:
	Lda	Textbuffor_Bak,X
	Cmp	#'_'
	Beq	?01
	Inx
	Cpx	#100
	Bne	?00
	Lda	#00H
	Sta	My_Flag
	Rts
?01:	Lda	#0Ffh
	Sta	My_Flag
	Rts


Get_Last_Cursorxy:
	Lda	My_Flag
	Bne	?66
	Rts
?66:
	Jsr	Get_Currtextbuffor_Loca
?00:
	Dex
	Cpx	#0Ffh
	Bne	?01
	Rts
?01:
	Lda	Textbuffor_Bak,X
	Cmp	#'_'
	Bne	?00
	Dec	Spacenum_Movepos
	Jmp	Get_Curxorxy_Comm
;----
Get_Next_Cursorxy:
	Lda	My_Flag
	Bne	?66
	Rts
?66:
	Jsr	Get_Currtextbuffor_Loca
?00:
	Inx
	Cpx	#100
	Bne	?001
	Rts
?001:
	Lda	Textbuffor_Bak,X
	Cmp	#'_'
	Bne	?00
	Inc	Spacenum_Movepos
Get_Curxorxy_Comm:
	Stx	Tmp1
	Lcursoroff
	Lda	#0
	Sta	Tmp2
?01:	Sec
	Lda	Tmp1
	Sbc	#20
	Bcc	?20
?02:	Sta	Tmp1
	Inc	Tmp2
	Bra	?01
?20:	Lda	Tmp1
	Sta	<Curx
	Lda	Tmp2
	Sta	<Cury
	Lcursoron
	Rts

;===================================================================================
;Fun:	根据歌曲的地址,找到其歌曲对应的Txt
;Input:	Song1_Addr,Songtxt_Addr
;Output:Songbin_Addrl,Songbin_Addrm,Songbin_Addrh,Song_Binlengthl,Song_Binlengthh
;	Locabuffor_Old,X
;===================================================================================
Get_Songtxt:
	Beq	?Song1
	Cmp	#1
	Beq	?Song2
	Cmp	#2
	Beq	?Song3
	Cmp	#3
	Beq	?Song4
	Cmp	#4
	BNE	?333
	JMP	?Song5
?333:
	;Cmp	#5
	jmp	?Song6
	;;Beq	?Song6
	;;Jmp	?Song7
?Song1:
	Movl_C  R_Temp1,Song1_Addr
	;PUTSIO	#'1'
	Jmp	?Next
?Song2:
	Movl_C  R_Temp1,Song3_Addr
	;PUTSIO	#'2'
	Bra	?Next
?Song3:
	Movl_C  R_Temp1,Song2_Addr
	;PUTSIO	#'3'
	Bra	?Next
?Song4:
	Movl_C  R_Temp1,Song4_Addr
	;PUTSIO	#'4'
	Bra	?Next
?Song5:
	Movl_C  R_Temp1,Song0_Addr
	;PUTSIO	#'5'
	Bra	?Next
?Song6:
	Movl_C  R_Temp1,Song5_Addr
	;PUTSIO	#'6'
;;	Bra	?Next
;;?Song7:
;;	Movl_C  R_Temp1,Song7_Addr
?Next:
        Addl_C  R_Temp1,Songtxt_Addr
        Long_2_Ddr_Reg R_Temp1		;将得到的地址两分
        Movw_W  <Ins,R_Temp1
        Movw_W  <Drrl,R_Temp3

        Lda	(<Ins)
        Sta	Song_Binaddrl
        Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
        Sta	Song_Binaddrm
        Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
        Sta	Song_Binaddrh
        Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
        Sta	Song_Binlengthl
        Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
        Sta	Song_Binlengthm
        Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
        Sta	Song_Binlengthh

       	Lcls
       	Jsr	Cls_Answerbuffor
	Jsr	Get_Answerbuffor	;Ok
	Jsr	Cls_Oldlocabuffor
	Jsr	Get_Oldlocabuffor
	Jsr	Howmuch_Page
    	Rts

;========================================================================================
;Fun	:	清除标准答案/用户答案缓冲区,保存标准答案
;Input	:	(<Ins)
;Output	:	Answerbuffor,Answerbuffor_User
;========================================================================================
Cls_Answerbuffor:
	Ldx	#0
	Lda	#0
?00:	Sta	Answerbuffor,X
	Sta	Answerbuffor_User,X
	Inx
	Cpx	#80
	Bne	?00
	Rts
;---------------------------------------------------------------------------------------
Get_Answerbuffor:
        Ldx	#0
?01:	Inc_Drr_Ptr	<Ins
	Lda     (<Ins)
    	Beq	?02	;换行
	Cmp	#20H	;空格
    	Beq	?01
    	Sta	Answerbuffor,X
    	Inx
    	Bra	?01
?02:	Rts

;========================================================================================
;Fun	:	先清除文本缓冲区,后得到文本并复制文本
;Input	:	(<Ins)
;Output	:	Locabuffor_Old,Locabuffor_New,Song_Txtlong,Song_Txtlongh
;========================================================================================
Cls_Oldlocabuffor:
	Lda	#20H
	Ldx	#0
?000:	Sta	Locabuffor_Old,X
	Sta	Locabuffor_New,X
	Inx
	Bne	?000
	Ldx	#0
?001:	Sta	Locabuffor_Old+100H,X
	Sta	Locabuffor_New+100H,X
	Inx
	Bne	?001
?002:	Rts
;---------------------------------------------------------------------------------------
Get_Oldlocabuffor:
	Stz	Song_Txtlong
	Stz	Song_Txtlongh
	Ldx	#0
?10:	Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
	Bne	?14
	Jmp	?End
?14:	Cmp	#0Dh
	Beq	?15
	Sta	Locabuffor_Old,X
	Sta	Locabuffor_New,X
?11:	Inx
	Bne	?10
	Bra	?222
?12:	Inx
	Beq	?221
?13:	Jsr	Get_Lineendloca
	Lda	Tmp0
	Cmp	#0
	Bne	?12
	Bra	?10
?15:	Lda	Locabuffor_Old,X
	Cmp	#20H
	Bne	?13
	Dex
	Bra	?13

?221:
	Ldx	#4
?222:
	Inc	Song_Txtlongh
?20:
	Inc_Drr_Ptr	<Ins
	Lda	(<Ins)
	Bne	?24
	Jmp	?End
?24:	Cmp	#0Dh
	Beq	?25
	Sta	Locabuffor_Old+100H,X
	Sta	Locabuffor_New+100H,X
?21:	Inx
	Bne	?20
	Bra	?23
?22:	Inx
	Beq	?23
?25:
	Jsr	Get_Lineendloca0
	Lda	Tmp0
	Cmp	#0
	Bne	?22
	Bra	?20
?23:
	Inc	Song_Txtlongh
?End:
	Txa
	Sta	Song_Txtlong
	Rts

;========================================================================================
;Fun	:	当前歌曲的文本共多少页(0,1,2,3...)
;Input	:	Song_Txtlong,Song_Txtlongh
;Output	:	Page_Count
;========================================================================================
Howmuch_Page:
	Lda	#0
	Sta	Page_Count
	Lda	Song_Txtlong
	Sta	Tmp0
	Lda	Song_Txtlongh
	Sta	Tmp1
?00:	Sec
	Lda	Tmp0
	Sbc	#100
	Beq	?03
	Bcc	?02
	Sta	Tmp0
	Inc	Page_Count
	Bra	?00
?02:	Lda	Tmp1
	Beq	?03
	Dec	Tmp1
	Inc	Page_Count
	Clc
	Lda	#156
	Adc	Tmp0
	Sta	Tmp0
	Bra	?00
?03:	Rts

;========================================================================================
;Fun	:	得到当前Old_Locabuffor的结束位置
;Input	:	Song_Txtlong,Song_Txtlongh
;Output	:	Tmp0
;========================================================================================
Get_Lineendloca:
	Txa
	Sta	Tmp0
?00:	Sec
	Lda	Tmp0
	Sbc	#20
	Bcc	?01
	Sta	Tmp0
	Bra	?00
?01:	Rts


;大于256个字节的处理
Get_Lineendloca0:
	Txa
	Clc
	Adc	#16
	Sta	Tmp0
?00:	Sec
	Lda	Tmp0
	Sbc	#20
	Bcc	?01
	Sta	Tmp0
	Bra	?00
?01:	Rts

;========================================================================================
;Fun	:	将Locabuffor_Old与answerbuffor的内容合并到一起,并放入locabuffor_new中
;Input	:	Song_Txtlong,Song_Txtlongh
;Output	:	Tmp0
;========================================================================================
Let_Answertonewlocabuffor:
	Ldx	#0
	Ldy	#0Ffh
?000:	Lda	Locabuffor_Old,X
	Beq	?End
	Cmp	#'_'
	Beq	?003
	Sta	Locabuffor_New,X
?004:	Inx
	Bne	?000
	Bra	?100
?003:
	Iny
	Lda	Answerbuffor,Y
	Sta	Locabuffor_New,X
	Bra	?004

?100:	Lda	Locabuffor_Old+100H,X
	Beq	?End
	Cmp	#'_'
	Beq	?103
	Sta	Locabuffor_New+100H,X
?104:	Inx
	Bne	?100
	Bra	?End
?103:
	Iny
	Lda	Answerbuffor,Y
	Sta	Locabuffor_New+100H,X
	Bra	?104
?End:
	Rts

;========================================================================================
;Fun	:	得到locabuffor_new中某一页的内容
;Input	:	Song_Txtlong,Song_Txtlongh
;Output	:	Tmp0
;========================================================================================
Get_New:
	Jsr	Get_Currpage_Offset
	Jsr	Get_Addressnew	;(Index),供显示
	Ldy	#0
?00:
	Lda	(Indxd),Y
	Sta	Textbuffor,Y
	Iny
	Cpy	#100
	Bne	?00
	jsr	CALL_LUpdateScreen
	lda	which_page
	bne	?11
	jsr	disp_spkbmp
?11:	Rts


;========================================================================================
;Fun	:	显示成绩数据
;Input	:	Rightnum,wrongnum
;Output	:
;========================================================================================
Printdigittab:
	Db	30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
Sub_Print_Num:
	Lda	Rightnum
	Jsr	Hex2Dec
	Lda	Printnum
	And	#0Fh
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+53
	Lda	Printnum
	And	#F0H
	Beq	?00
	Lsr
	Lsr
	Lsr
	Lsr
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+52
?00:
	Lda	Wrongnum
	Jsr	Hex2Dec
	Lda	Printnum
	And	#0Fh
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+73
	Lda	Printnum
	And	#F0H
	Beq	?01
	Lsr
	Lsr
	Lsr
	Lsr
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+72
?01:
	Clc
	Lda	Rightnum
	Adc	Wrongnum
	Sta	Rightnum
	Lda	Rightnum
	Jsr	Hex2Dec
	Lda	Printnum
	And	#0Fh
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+33
	Lda	Printnum
	And	#F0H
	Beq	?02
	Lsr
	Lsr
	Lsr
	Lsr
	Tax
	Lda	Printdigittab,X
	Sta	Textbuffor+32
?02:
	Rts

;;==========================
;十六进制转十进制
Hex2Dec:
	Sta	Printnum
	Stz	Tmp0
?00:	Sec
	Lda	Printnum
	Sbc	#0Ah
	Bcc	?01
	Sta	Printnum
	Inc	Tmp0
	Bra	?00
?01:	Lda	Tmp0
	Asl
	Asl
	Asl
	Asl
	Ora	Printnum
	Sta	Printnum
	Rts
;;==========================

light_icon_pgup_or_pgdown:
	lda	Which_Page
	cmp	Page_Count
	bne	light_icon_downok
	Loff_Lcd_Icon icon_downpage
	jmp	light_icon_up
light_icon_downok:
	Llight_Lcd_Icon icon_downpage
	jmp	light_icon_up
light_icon_up:
	lda	Which_Page
	bne	light_icon_upok
	Loff_Lcd_Icon icon_uppage
	rts
light_icon_upok:
	Llight_Lcd_Icon icon_uppage
	rts


;;==========================
clr_icon:
	Llight_Lcd_Icon icon_downpage
	Loff_Lcd_Icon icon_uppage
	rts

;;==========================
Studyload_Ret:
	Lda	#>Studyload_0-1
	Pha
	Lda	#<Studyload_0-1
	Pha
	Lda	#>Studybank
	Pha
	Lda	#<Studybank
	Jmp	Longgo

Go_Lmain:
	Lmain

Go_Lmainu:
	Lmainu

CALL_LUPDATESCREEN:
	LUPDATESCREEN
	RTS
; ***************************************************************************
		End
; ***************************************************************************

⌨️ 快捷键说明

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