📄 sched.asm
字号:
Sta Itemheadlentab ;;Init Itemheadlentab Buffor
Lda #80H
Sta Itemlan ;;Init Itemlan Buffor
Lda #0E9H
Ldy <Schselectno
Cpy #3
Bcc Seteditlen
Lda #0E9H+20 ;后两种类型多了一行
Seteditlen: Sta <Editlen ;;Inputbuff Max Length
Stz <Editlenh
Jsr Ljsr
Dw Cardbank
Dw Initeditcardbox-1
Jmp Exitwithupdate
Selectstate: Lclearcursor
Ldy <Schselectno
Lda Curposoff,Y
Sta <Tempcount
Lda Schesetitem
Asl
Clc
Adc <Tempcount
Tay
Ldx Daycurpos,Y
Stx <Curxpos
Lda Daycurpos+1,Y
Sta <Curypos
Tay
Lsetcur
Lcursoron
Jmp Exitwithupdate
Curposoff: Db 0,4,10,16,24
Daycurpos: Db 6,1,10,1
Weekcurpos: Db 8,1,10,1,14,1
Monthcurpos: Db 6,1,10,1,14,1
Yearcurpos: Db 6,1,10,1,14,1,18,1
Onecurpos: Db 6,1,10,1,14,1,18,1,2,2
Typeheadlentab Db 46,46,46,66,66
;;[P]--------------------------------------[P]
;; 更新画面後, 进入 Schedule Normal Mode.
;;[P]--------------------------------------[P]
Scheenter:
Lda Schesetitem
Cmp <Setitemmax
Bcs Scheenter2
Jmp Schesetrightitem
Scheenter2:
Ldy <Schselectno
Lda Typeheadlentab,Y
Tay
Lda Inputbuff,Y
Bne Havecontext
Jmp Scheeditescp ;;无内容输入不保存
Havecontext:
Lexitscanf
Lcls
Bbs4 <Schflag,Notappondfile_0
Lda <Totalcardnol
Cmp #17 ;;10
Bcc Notappondfile_0
Jmp Scheduletomany
Notappondfile_0:
Lda <Editcurlen
Sta <Endpointl
Lda <Editcurlenh
Sta <Endpointh
Lda #>Flashbank
Sta <Drrh
Lda #<Flashbank
Sta <Drrl
Jsr Ljsr
Dw Remarkbank
Dw Searchsparedir-1
Bbr1 <Sysf,?_0000
Jmp Flashfullmsg
?_0000: Jsr Ljsr
Dw Remarkbank
Dw Searchsparedata-1
Bbs1 <Sysf,Flashfullmsg
Lda #>Ds0Bank
Sta <Drrh
Lda #<Ds0Bank
Sta <Drrl
Lprint Savehintmsg
jsr CALL_LUpdateScreen
Bbr4 <Schflag,Notappondfile
Jsr Ljsr
Dw Remarkbank
Dw Deletecurrecord-1
Jsr Deletescdata ;;02-4-18 8:33
Dec Screcordcounter
Rmb4 <Schflag
Notappondfile:
Inc Screcordcounter ;; Schedule Record Counter += 1.
Inc <Totalcardnol
Jsr Puttoscdata ;;02-4-18 8:33
Lda #>Flashbank
Sta <Drrh
Lda #<Flashbank
Sta <Drrl
Jsr Ljsr
Dw Remarkbank
Dw Searchsparedir-1
Jsr Ljsr
Dw Remarkbank
Dw Searchsparedata-1
Jsr Ljsr
Dw Remarkbank
Dw Filldirname-1
Jsr Ljsr
Dw Remarkbank
Dw Putfatflag-1
Jsr Ljsr
Dw Remarkbank
Dw Putdatatoflash-1
;Jsr Chkscdata
;Jsr Ljsr
;Dw Biosbank
;Dw Checkschedule_In_Bios-1
Jsr Checkschedule
;;Lda #Ds0Bank
;;Sta <Drr
Jmp Initscnsche1
Flashfullmsg:
Lda #>Ds0Bank
Sta <Drrh
Lda #<Ds0Bank
Sta <Drrl
Lprint Flashover
Hlt_0: jsr CALL_LUpdateScreen
Bbr0 <Eflag,$
Rmb0 <Eflag
Bbr0 <Eflag,$
Rmb0 <Eflag
Jmp Initscnsche1
Scheduletomany:
Lda #>Ds0Bank
Sta <Drrh
Lda #<Ds0Bank
Sta <Drrl
Lprint Lesstenmsg
Bra Hlt_0
;;[P]----------------------------------------------[P]
;; Display Initial Screen Of "Schedule" Function.
;;[P]----------------------------------------------[P]
Initscnsche:
; ;startuart
Lda #5
Sta <Fileclase
Lreadsecretcodetobuff ;;2-4-25 17:10 Su
Lda #0Ffh ;; Load A = 0Ffh
Cmp Datasecretcode
Beq Initscnsche1 ;; Skip If Don't Need Secret Code.
Ldx #0 ;; Initial Secretcode.
Initcodeloop: Sta <Secretcode0,X
Inx
Cpx #8
Bne Initcodeloop
Stz <Sccounter ;; Secret Code Counter = 0.
Lda #Schseccodeinn ;;=9
Sta <Gamestate
Jsr Schhelpprc
Lsetscreen 14
Lprint Checkinto
Lcheckcrlf
Lprint Schintmsg1 ;; Print "请输入密码" On Textbuffor.
Lcheckcrlf ;; Check & Skip To Next Line.
Lprint Schintmsg2 ;; Print "--------" On Textbuffor.
Lsetcur 0,4
Lprint Starstring
Jmp Exitwithupdate
Initscnsche1: Lda #(Schedulehelp-Helptable)
Sta <Helpoffset ;; Set To Schedule Help.
;;Lda #46 ;;变成取表???
;;Sta <Startnamepos
;;Stz <Schselectno
;;Stz <Schselectnobak
Stz <Schflag
Jsr Ljsr
Dw Remarkbank
Dw Readcardno-1
Lda <Totalcardnol
Sta Screcordcounter
Bne Initscnsche3 ;; Skip Schedule's Record.
;;Lda <Totalcardnoh
;;Bne Initscnsche3
Jsr Initschdataff
Lda #Insertaskschn
Sta <Gamestate
Jsr Schhelpprc
Lda #>Ds0Bank
Sta <Drrh
Lda #<Ds0Bank
Sta <Drrl
Lsetscreen 14
Lsetcur 7,1
;;Lprint Addornotequire ;;添加询问
Lprint Norecordmessage
Bra Exitwithupdate
Initscnsche3:
;;==========================================================================
Stz <Curcardnol
Stz <Curcardnoh
Stz <Curcardoff
Stz <Curcardoffbak
;;Lda #2
;;Sta <Schflag ;;Cdata.1=1 Name View
Dspschmenuentry:
Lda #Scanschmenun
Sta <Gamestate
Jsr Schhelpprc
Lda #>Bcardtload_1-1
Pha
Lda #<Bcardtload_1-1
Pha
Lda #>Remarkbank
Pha
Lda #<Remarkbank
Jmp Longgo
Exitwithupdate: Lmain ;; Return To Main Program.
;;--------------------------------
;;*******************Subprogram********************
;;[S]-------------------------------------[S]
;; Init Schedule Select Menu
;;Input:Schselectno
;;[S]-------------------------------------[S]
Initschselectmenu:
Lsetscreen 14
;;Lprint Schselectmenu
Lprint Selectschetype
jsr CALL_LUpdateScreen
;;=============Draw Type
Ldy #0Ffh
Sty <Tempcount
?Loop: Inc <Tempcount
Ldy <Tempcount
Lda Typelocatxtab,Y
Sta <Ox
Lda Typelocatytab,Y
Sta <Oy
Lda <Tempcount
Asl
Asl
Clc
Adc <Tempcount
Adc #<Schselectmenu
Tay
Lda #0
Adc #>Schselectmenu
Tax
Ldrawtext
Lda <Tempcount
Cmp #4
Bcc ?Loop
;;=============Draw Tuo Yuan
Ldy #0
Tuoyuanloop: Lda Tuoyuanoxtab,Y
Sta <Ox
Lda Typelocatytab,Y
Sta <Oy
Phy
Loprintimage Tuoyuan
Ply
Iny
Cpy #5
Bcc Tuoyuanloop
;;==========Draw Tuo Yuan Xin
Drawyuanxin:
Ldy <Schselectno
Lda Yuanxinoxtab,Y
Sta <Ox
Lda Yuanxinoytab,Y
Sta <Oy
Loprintimage Tuoyuanxin
Rts
Typelocatxtab: Db 08+8,88+8,08+8,88+8,08+8
Yuanxinoytab:
Typelocatytab: Db 20,20,40,40,60
Yuanxinoxtab:
Tuoyuanoxtab: Db 48,128,48,128,48
;;[S]------------------------[S]
;; Clear Yuan Xin Graphics
;;Input:Y(Schselectno)
;;[S]------------------------[S]
Clsschyuanxin:
Lda Yuanxinoxtab,Y
Sta <Ox
Lda Yuanxinoytab,Y
Sta <Oy
Loprintimage Tuoyuan
;Loclrimage Tuoyuanxin
Rts
;;[S]-------------------------------------------[S]
;; 初始化行程提醒时间的转化(Ascii-->Bcd)
;;Input:Y(Locationg Of Inputbuff)
;;Output:A(Bcd)
;;[S]-------------------------------------------[S]
Inittimesche:
Lda Inputbuff,Y
Sec
Sbc #30H
Asl
Asl
Asl
Asl
Sta <Insl
Lda Inputbuff+1,Y
Sec
Sbc #30H
Ora <Insl
Rts
;;[S]--------------------------------------------[S]
;; 纠正日期(天)且送到Inputbuff和Textbuffor里
;;Input:1.Schemonth 2.Schyear 3.Scheday 4.十进制模式
;;Output:1.Scheday,2.Inputbuff,3.Textbuffor
;; 4.十六进制模式
;;[S]--------------------------------------------[S]
Corretsetupday:
Jsr Corretscheday
Ldx Scheday
La2Xy
Phy
Phx
Ldx <Schselectno
Lda Dayinputbuffpos,X
Tay
Pla ;;X
Sta Inputbuff,Y
Sta Textbuffor,Y
Pla ;;Y
Sta Inputbuff+1,Y
Sta Textbuffor+1,Y
Rts
Dayinputbuffpos:
Db 0Ffh,0Ffh,26,30,34
;;[S]--------------------------------------------[S]
;; 纠正日期(天)
;;Input:1.Schemonth 2.Scheyear 3.Scheday 4.十进制模式
;;Output:1.Scheday 2.十六进制模式
;;[S]--------------------------------------------[S]
Corretscheday:
Ldy Schemonth
Dey ;;表已经按16进制定义
Lda Scheday
Cmp Maxdayofmonth,Y ;;???Note Table Define
Bcc Corretscheday_0 ;;没越出
Lda #1
Sta Scheday
Corretscheday_0: ;;处理闰年2月的情况
Lda Schemonth
Cmp #2
Bne Corretschday_2
Lda Scheday
Cmp #29H
Bcc Corretschday_2
Beq Tojudgeleap
Setday1St: Lda #1
Sta Scheday
Bra Corretschday_2
Tojudgeleap: ;;=29
Cld
Lda Scheyear
Jsr Ljsr
Dw Biosbank
Dw Cleapyear1-1
Bbs4 <Sf0,Corretschday_2 ;;闰年
Lda <Keyno
Cmp #Upkey
Bne Isdownkey
Bra Setday1St
Isdownkey: Lda #28H
Sta Scheday
Corretschday_2:
Cld
Rts
;;[S]---------------------------------[S]
;; 初始化行程提醒的Inputbuff
;;默认为每日提醒
;;[S]---------------------------------[S]
Copyinitschtoinput:
Ldy #0Ffh
Copyinitschtoinput_0:
Iny
Lda Schinitdata,Y
Sta Inputbuff,Y
Bne Copyinitschtoinput_0
;;Cpy #47
;;Ldx <Month
;;Stx Schemonth
;;La2Xy
;;Stx Inputbuff+6
;;Sty Inputbuff+7
;;Ldx <Day
;;Stx Scheday
;;La2Xy
;;Stx Inputbuff+10
;;Sty Inputbuff+11
;;Ldx <Hour
;;Stx Schehour
;;La2Xy
;;Stx Inputbuff+26 ;;;;21
;;Sty Inputbuff+27 ;;;;22
;;Ldx <Min
;;Stx Scheminute
;;La2Xy
;;Stx Inputbuff+30 ;;;;25
;;Sty Inputbuff+31 ;;;;26
Rts
Schinitdata:
Db '提醒类型: 每日提醒 '
Db '时间: 时 分 '
Db '内容: ',0
;;Db '日期: 月 日 '
;;[S]---------------------------------[S]
;;每当选中某一提醒类型时,同步更新Inputbuff
;;Input:1.Schselectnobak 2.Inputbuff
;;Output:1.Inputbuff,2.Setitemmax
;;[S]---------------------------------[S]
Dealwithinputbuff:
;;Bakdatatofdata:
Ldy <Schselectnobak
Lda Typeheadlentab,Y
;;Dec
Sec
Sbc #7 ;;6+1
Tax
Ldy #0Ffh
?Loop: Inx
Iny
Lda Inputbuff,X
Sta Fdata,Y
Bne ?Loop
;;Getschtypedata:
Ldy <Schselectno
Lda Schetypedataoff,Y
Tax
Ldy #9
?2: Lda Schetypedata,X
Beq ?Getschtime
Iny
Sta Inputbuff,Y
Inx
Bra ?2
?Getschtime: Ldy <Schselectno
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -