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

📄 sched.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 4 页
字号:
                Lda     Setitemmaxtab,Y
                Sta     <Setitemmax
                Lda     Schetypetimeoff,Y
                Tax
                Ldy     #25
?3:             Lda     Type1,X
                Beq     ?Copyfdatatoinputff
                Iny
                Sta     Inputbuff,Y
                Inx
                Bra     ?3

?Copyfdatatoinputff:
                Ldx     #0Ffh
?Loop5:         Iny
                Inx
                Lda     Fdata,X
                Sta     Inputbuff,Y
                Bne     ?Loop5
                Rts

Setitemmaxtab:  Db      2,3,3,4,5

;;Typeheadlentab:
;;       Db      46,46,46,66,66

Schetypedataoff:
        Db      0,11,22,33,44
Schetypedata:
        Db      '每日提醒  ',0
        Db      '每周提醒  ',0
        Db      '每月提醒  ',0
        Db      '每年提醒  ',0
        Db      '一次性提醒',0

Schetypetimeoff:
        Db      0,15,30,45,80
Type1:  Db              '00时00分      ',0
Type2:  Db              '周日00时00分  ',0
Type3:  Db              '01日00时00分  ',0
Type4:  Db              '01月01日00时00'
        Db        '分                  ',0
Type5:  Db              '02年01月01日00'
        Db        '时00分              ',0

;;[S]---------------------------------[S]
;;每当选中某一提醒类型时,同步更新Time值
;;Input:1.Schselectno 2.Inputbuff
;;Output:1.Inputbuff,2.相应Time值
;;[S]---------------------------------[S]
Settimevalue:
                Ldy     #0
?Cls:           Lda     Min,Y
                Sta     Scheminute,Y    ;;当天的年月值为缺省年月提醒类型的年月值
                Iny                     ;;仅仅为计算闰年
                Cpy     #5              ;;Note:Week Have No Init!!!!
                Bcc     ?Cls

                Lda     <Schselectno
                Asl
                Sta     <Tempcount      ;;Schsclectno*6
                Asl
                ;;Clc
                Adc     <Tempcount
                Sta     <Tempcount

                Ldx     #0
?Loop:          Ldy     <Tempcount
                Lda     Typetimepos,Y
                Cmp     #0Ffh
                Beq     ?Nextitem
                Tay
                Jsr     Inittimesche
                Sta     Scheminute,X
?Nextitem:      Inc     <Tempcount
                Inx
                Cpx     #5
                Bcc     ?Loop

                Ldy     <Tempcount
                Lda     Typetimepos,Y
                Cmp     #0Ffh
                Beq     Setweekend      ;;不必置0Ffh,存时会作校对
                Tay
                Lda     #0Ffh
                Sta     Scheweek
                Ldx     #0Ffh
Setweekloop:    Inc     Scheweek
                Inx
                Lda     Weekasciitab,X
                Inx
                Cmp     Inputbuff,Y
                Bne     Setweekloop
                Lda     Weekasciitab,X
                Cmp     Inputbuff+1,Y
                Bne     Setweekloop
Setweekend:     Rts

Weekasciitab:
        ;;    日       一      二             三       四      五      六
        Db C8H,D5H,D2H,Bbh,B6H,Feh,C8H,Fdh,Cbh,C4H,Ceh,E5H,C1H,F9H

;;[S]--------------------------------------[S]
;;       存一笔提醒时,相应存时间入Schdata
;;Input:1.Screcordcounter
;;      2.Schetime(Min,Hour,Day,Mon,Year,Week)
;;Output:Schdata(Min,Hour,Day,Mon,Year,Week)
;;[S]--------------------------------------[S]
Puttoscdata:
        Jsr     Correctsetschetime

        Lda     Screcordcounter
        Dec
        Asl
        Sta     <Tempcount
        Asl
        ;;Clc
        Adc     <Tempcount
        Tay
        Ldx     #0
Puttoscdata_0:
        Lda     Scheminute,X
        Sta     Schdata,Y
        Iny
        Inx
        Cpx     #6
        Bcc     Puttoscdata_0
        ;;Bpl     Puttoscdata_0
        Rts

;;[S]--------------------------------------------[S]
;;存一笔提醒前,须把提醒时间置对(无某项时间时,应置0Ffh)
;;Input:1.Schselectno,2.Schetime(Min---Week)
;;Output:Schetime(Scheminute----Scheweek)
;;[S]--------------------------------------------[S]
Correctsetschetime:
        Lda     <Schselectno
        Asl
        Sta     <Tempcount
        Asl
        ;;Clc                    ;;投机取巧
        Adc     <Tempcount
        Tay
        Ldx     #0

Loop00: Lda     Haveyntimetab,Y
        Bne     Haveschetime
        Lda     #0Ffh
        Sta     Scheminute,X    ;;This Type Is'nt The Item Schetime
Haveschetime:
        Inx
        Iny
        Cpx     #6
        Bcc     Loop00
        Rts

Haveyntimetab:
        Db      1,1,0,0,0,0
        Db      1,1,0,0,0,1
        Db      1,1,1,0,0,0
        Db      1,1,1,1,0,0
        Db      1,1,1,1,1,0

;;[S]----------------------------[S]
;;删除某一笔提醒时,相应把Schdata删除掉
;;Input:1.Curcardnoh&L,2.Curcardoff
;;      3.Schdata
;;Output:Schdata
;;[S]----------------------------[S]
Deletescdata:
        Lda     <Curcardnol     ;;Max=17
        Clc
        Adc     <Curcardoff
        Asl
        Sta     <Tempcount
        Asl
        ;;Clc
        Adc     <Tempcount
        Tay

?Loop:  Lda     Schdata+6,Y
        Sta     Schdata,Y
        Iny
        Cpy     #90
        Bcc     ?Loop
        Lda     #0Ffh
        Sta     Schdata+95
        Sta     Schdata+94
        Sta     Schdata+93
        Sta     Schdata+92
        Sta     Schdata+91
        Sta     Schdata+90
        Rts
;;[S]----------------------------------[S]
;;       初始化Schdata为0Ffh
;;[S]----------------------------------[S]
Initschdataff:
        Ldy     #0
        Lda     #0Ffh
?1:     Sta     Schdata,Y
        Iny
        Cpy     #96
        Bcc     ?1
        Rts

;;[S]--------------------------------[S]
;;       当Ram紊乱时,须恢复Schdata区
;;Input:No
;;Output:1.Schdata,2.Screcordcounter
;;Note!!!重新研磨可以移动,否则会出错
;;[S]--------------------------------[S]
Chkscdata:
        Jsr     Initschdataff   ;;In Sched.Asm(Alamr.Asm)

        Stz     Tp0
        Lda     #Diraddrh
        Sta     <Insh
        Lda     #Diraddrl
        Sta     <Insl
        Lda     #>Flashbank
        Sta     <Drrh
        Lda     #<Flashbank
        Sta     <Drrl
Chkscdata_00:
        Lda     (<Ins)
        ;;Bne     Chkscdata_0
        And     #00000011B
        Cmp     #00000010B      ;;02-4-19 14:38
        Bne     Chkscdata_0

        Ldy     #1
        Lda     (<Ins),Y
        Cmp     #5
        Beq     Chkscdata_1
Chkscdata_0:
        Lda     <Insl
        Clc
        Adc     #8
        Sta     <Insl
        Lda     <Insh
        Adc     #0
        Sta     <Insh
        Cmp     #0B0H
        Bcc     Chkscdata_00
        Lda     Tp0
        Sta     Screcordcounter
        Rts
Chkscdata_1:
        Lda     (<Insl)
        And     #00011100B
        Sta     <Relatitem
        Lsr
        Clc                     ;;A/4*(4+2)=A/4*4+A/4*2=A+A/2
        ;;Adc    (<Insl)
        Adc     <Relatitem
        Sta     <Relatitem

        Ldy     #6
        Lda     (<Ins),Y
        Sta     <Sectorno
        Ldy     #7
        Lda     (<Ins),Y
        Sta     Sectoroff
        Lda     <Insl
        Pha
        Lda     <Insh
        Pha

        Jsr     Ljsr
        Dw      Remarkbank
        Dw      Tofinddatains-1

        Lda     Tp0
        Asl
        Sta     <Tempcount
        Asl
        Clc
        Adc     <Tempcount
        Tax
        Stz     <Tempcount      ;;Temp Counter
Convertdata:
        Ldy     <Relatitem
        Lda     Typetimepos,Y
        Cmp     #0Ffh
        Beq     Nothisitemtime
        Cpy     #11     ;Is Week Item
        Bne     ?Unweekitem
        ;Tay
        Jsr     Dealwithweek
        Bra     Nothisitemtime
?Unweekitem:
        Tay
        Jsr     Converttodig
Nothisitemtime:
        Sta     Schdata,X
        Inx
        Inc     <Relatitem
        Inc     <Tempcount
        Lda     <Tempcount
        Cmp     #6
        Bcc     Convertdata
        Pla
        Sta     <Insh
        Pla
        Sta     <Insl
        Lda     #>Flashbank
        Sta     <Drrh
        Lda     #<Flashbank
        Sta     <Drrl
        Inc     Tp0
        Jmp     Chkscdata_0

Typetimepos:
        ;;       分  时  日   月   年   周
        Db      30,26,0Ffh,0Ffh,0Ffh,0Ffh       ;;Day
        Db      34,30,0Ffh,0Ffh,0Ffh,28         ;;Week
        Db      34,30,26,0Ffh,0Ffh,0Ffh         ;;Month
        Db      38,34,30,26,0Ffh,0Ffh           ;;Year
        Db      42,38,34,30,26,0Ffh             ;;Once
;;[S]-----------------------------------[S]
;;       Asccii---->Bcd
;;Input:  1.Y(Location Of Ins) 2.Insh&L
;;Output: A(Bcd)
;;[S]-----------------------------------[S]
Converttodig:
                Lda     (<Insl),Y       ;同一笔记录不可能跨Bank
                Sec
                Sbc     #30H
                Asl
                Asl
                Asl
                Asl
                Sta     Chkscminute
                Iny
                Lda     (<Insl),Y
                Sec
                Sbc     #30H
                Ora     Chkscminute
                Rts
;[S]-----------------------[S]
;       转换星期数
;;Input:1.Insh&L
;Output:A(星期数)
;[S]-----------------------[S]
Dealwithweek:
                Phx
                Ldx     #0Ffh

?Loop:          Ldy     #28
                Inx
                Lda     (<Insl),Y       ;同一笔记录不可能跨Bank
                Cmp     Weekasciitab,X
                Beq     ?Nextchar
                Inx
                Bra     ?Loop
?Nextchar:
                Iny
                Inx
                Lda     (<Insl),Y       ;同一笔记录不可能跨Bank
                Cmp     Weekasciitab,X
                Bne     ?Loop
                Txa
                Lsr
?End:           Plx
                Rts

;;[S]=======Temptest Subprogram=========[S]
;Sendflashdatatopc:
;        Lsetscreen      14              ;
;        Lda     #'o'
;        Sta     Textbuffor+50
;        jsr	CALL_LUpdateScreen                   ;
;
;        Jsr     Ljsr
;        Dw      Biosbank
;        Dw      Startsio-1;
;
;        Lda     #>Flashbank
;        Sta     <Drrh
;        Lda     #<Flashbank
;        Sta     <Drrl
;        Lda     #80H
;        Sta     <Insh
;        Stz     <Insl
;
;?0:
;        Lda     (<Ins)
;        Tax
;        Jsr     Ljsr
;        Dw      Biosbank
;        Dw      Sendbyte-1;
;
;        Inc     <Insl
;        Bne     ?0
;        Inc     <Insh
;        Bne     ?0
;        Lda     #80H
;        Sta     <Insh
;        Inc     <Drrl
;        Lda     <Drrl
;        Cmp     #90H    ;(>Flashbank)+8
;        Bcc     ?0;
;
;        Jsr     Ljsr
;        Dw      Biosbank
;        Dw      Stopsio-1;
;
;        ;Lcls
;        Lda     #'k'
;        Sta     Textbuffor+51
;        jsr	CALL_LUpdateScreen                   ;
;        Rts

;[S]------------------------------[S]
;       检测图标
;[S]------------------------------[S]
Checkschedule:
                ;Rmb5    <Scanfstate
                ;Rmb5    <Sf0

                Stz     Tp0                     ;; Initial Schedule Set Counter = 0.
                Bra     Checkschedule2
Checkschedule1: Inc     Tp0                     ;; Schedule Set Counter += 1.
Checkschedule2: Lda     Tp0
                Cmp     Screcordcounter
                Beq     Checkschedule4          ;; Skip If Finish Check Schedule.

                Lda     Tp0
                Asl
                Sta     Tp1                    ;;Tempcount
                Asl
                ;;Clc
                Adc     Tp1                    ;;Tempcount
                Tay

                Ldx     #4
?Cmpweek:       Lda     Schdata+5,Y
                Cmp     #0Ffh
                Beq     ?Cmpyear
                Cmp     <Realweek
                Bne     Checkschedule1
                Ldx     #2
                Bra     ?Cmphour

?Cmpyear:       Lda     Schdata+4,Y
                Cmp     #0Ffh
                Beq     ?Cmpmonth
                Cmp     <Min,X
                Bne     Checkschedule1

?Cmpmonth:      Dex
                Lda     Schdata+3,Y
                Cmp     #0Ffh
                Beq     ?Cmpday
                Cmp     <Min,X
                Bne     Checkschedule1

?Cmpday:        Dex
                Lda     Schdata+2,Y
                Cmp     #0Ffh
                Beq     ?Cmphour
                Cmp     <Min,X
                Bne     Checkschedule1

?Cmphour:       Dex
                Lda     Schdata+1,Y
                Cmp     <Min,X
                Bcc     Checkschedule1  ;时间已过
                Beq     ?Cmpminute
                Smb5    <Scanfstate
                Bra     Checkschedule1  ;时间未到

?Cmpminute:     Dex
                Lda     Schdata,Y
                Cmp     <Min,X
                Bcc     Checkschedule1  ;时间已过
                Smb5    <Scanfstate
;;              Bne     Checkschedule1  ;时间未到
                ;Lda     #00100000B              ;; Set To Multi-Alarm Go.
                ;Ora     Alarmflag2
                ;Sta     Alarmflag2
                ;Lda     #3Ch                    ;; Tone Counter = 60.
                ;Sta     Tonecounter
                ;Smb5    <Sf0
Checkschedule4:
                Rts

CALL_LUPDATESCREEN:
	LUPDATESCREEN
	RTS

⌨️ 快捷键说明

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