📄 listen.asm
字号:
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 + -