2016-08-30 20:26:19 +00:00
|
|
|
|
PR#3
|
|
|
|
|
PREFIX /A2OSX.SRC
|
|
|
|
|
NEW
|
|
|
|
|
INC 1
|
|
|
|
|
AUTO 6
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
2016-08-31 15:38:48 +00:00
|
|
|
|
* https://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/lib/ansi/gmtime.c
|
2016-08-30 20:26:19 +00:00
|
|
|
|
*--------------------------------------
|
2016-08-31 15:38:48 +00:00
|
|
|
|
SECSDAY .EQ 86400 60*60*24
|
|
|
|
|
CENTURY0 .EQ 19
|
|
|
|
|
YEAR0 .EQ 70
|
|
|
|
|
DAY0 .EQ 4 day 0 was a thursday
|
2016-08-30 20:26:19 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* K.TimeYA get System Time
|
2016-09-05 16:00:11 +00:00
|
|
|
|
* In :
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* Y,A = PTR to K.Time
|
2016-09-05 16:00:11 +00:00
|
|
|
|
* Out :
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* K.Time filled with ProDOS MLI date/time
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.TimeYA >STYA ZPQuickPtr2
|
2016-09-05 16:00:11 +00:00
|
|
|
|
>MLICALL MLIGETTIME
|
|
|
|
|
>LDYAI DATELO
|
|
|
|
|
>STYA ZPQuickPtr1
|
2016-09-21 15:20:37 +00:00
|
|
|
|
bra K.PTime2Time.1
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
* In :
|
|
|
|
|
* PULLW = Src PDATE/TIME (DWORD)
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* PULLW = Dst PTR To K.Time
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.PTime2Time >PULLW ZPQuickPtr1
|
2016-09-05 16:00:11 +00:00
|
|
|
|
>PULLW ZPQuickPtr2
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.PTime2Time.1 ldy #1
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda (ZPQuickPtr1),y Get Year
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lsr C is high bit of month
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.YEAR
|
2016-09-05 16:00:11 +00:00
|
|
|
|
sta (ZPQuickPtr2),y set year
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Year for conputing Century/WDAY later
|
2016-09-05 16:00:11 +00:00
|
|
|
|
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda (ZPQuickPtr1) Get Month/day
|
2016-09-05 16:00:11 +00:00
|
|
|
|
pha save Day
|
|
|
|
|
ror
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.MONTH
|
2016-09-05 16:00:11 +00:00
|
|
|
|
sta (ZPQuickPtr2),y set month
|
|
|
|
|
|
|
|
|
|
pla get back day
|
|
|
|
|
and #$1F
|
|
|
|
|
iny
|
|
|
|
|
sta (ZPQuickPtr2),y set day
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Year get back year
|
2016-09-05 16:00:11 +00:00
|
|
|
|
|
2016-09-12 19:46:54 +00:00
|
|
|
|
cmp #69 if before 70 CC,if > 70, CS
|
|
|
|
|
lda #0
|
|
|
|
|
rol get back C in bit 0
|
|
|
|
|
eor #1 toggle C
|
|
|
|
|
adc #19 set date before 1970 -> 20xx
|
2016-09-05 16:00:11 +00:00
|
|
|
|
sta (ZPQuickPtr2) set Century
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Century for conputing WDAY later
|
2016-09-05 16:00:11 +00:00
|
|
|
|
|
2016-09-12 19:46:54 +00:00
|
|
|
|
ldy #2
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda (ZPQuickPtr1),y Get Min
|
|
|
|
|
tax
|
2016-09-12 19:46:54 +00:00
|
|
|
|
iny
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda (ZPQuickPtr1),y Get Hour
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.HOUR
|
2016-09-05 16:00:11 +00:00
|
|
|
|
sta (ZPQuickPtr2),y set hour
|
|
|
|
|
iny
|
|
|
|
|
txa
|
|
|
|
|
sta (ZPQuickPtr2),y set min
|
|
|
|
|
iny
|
|
|
|
|
lda #0
|
|
|
|
|
sta (ZPQuickPtr2),y set seconds (ProDOS does not provide it)
|
|
|
|
|
|
2016-09-12 19:46:54 +00:00
|
|
|
|
* 1/1/1970 was Thursday...if not leap, add one, if leap add 2
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
|
2016-09-12 19:46:54 +00:00
|
|
|
|
pha
|
|
|
|
|
lda #19
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda #70
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD+1
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.1 ldy K.CTime.DWORD
|
|
|
|
|
lda K.CTime.DWORD+1
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
cpy K.CTime.Century
|
2016-09-12 19:46:54 +00:00
|
|
|
|
bne .2
|
2016-09-21 15:20:37 +00:00
|
|
|
|
cmp K.CTime.Year
|
2016-09-12 19:46:54 +00:00
|
|
|
|
beq .4
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.2 jsr K.IsLeapYearYA CC = Leap
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda #0
|
|
|
|
|
rol
|
|
|
|
|
eor #1
|
|
|
|
|
lsr
|
|
|
|
|
|
|
|
|
|
pla
|
|
|
|
|
adc #1
|
|
|
|
|
cmp #7
|
|
|
|
|
bcc .3
|
|
|
|
|
sbc #7 MOD 7
|
|
|
|
|
|
|
|
|
|
.3 pha
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.DWORD+1
|
|
|
|
|
lda K.CTime.DWORD+1
|
2016-09-12 19:46:54 +00:00
|
|
|
|
cmp #100
|
|
|
|
|
bne .1
|
|
|
|
|
lda #0
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD+1
|
|
|
|
|
inc K.CTime.DWORD
|
2016-09-12 19:46:54 +00:00
|
|
|
|
bra .1
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.4 ldy #S.Time.MONTH
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda (ZPQuickPtr2),y get month
|
|
|
|
|
tax
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.5 lda K.StrFTime.MDAY-1,x get day count in this month
|
2016-09-12 19:46:54 +00:00
|
|
|
|
bne .6 february ?
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy K.CTime.Century
|
|
|
|
|
lda K.CTime.Year
|
|
|
|
|
jsr K.IsLeapYearYA CC = Leap
|
2016-09-12 19:46:54 +00:00
|
|
|
|
lda #0
|
|
|
|
|
rol
|
|
|
|
|
eor #1
|
|
|
|
|
lsr
|
|
|
|
|
|
|
|
|
|
.6 pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
adc K.StrFTime.MDAY-1,x
|
2016-09-12 19:46:54 +00:00
|
|
|
|
cmp #7
|
|
|
|
|
bcc .7
|
|
|
|
|
sbc #7
|
|
|
|
|
|
|
|
|
|
.7 pha
|
|
|
|
|
dex
|
|
|
|
|
bne .5
|
|
|
|
|
|
|
|
|
|
pla
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.DAY
|
2016-09-12 19:46:54 +00:00
|
|
|
|
adc (ZPQuickPtr2),y get month (1..31)
|
|
|
|
|
dec adjust range 0.31 for MOD 7
|
|
|
|
|
|
|
|
|
|
.8 cmp #7 MOD 7
|
|
|
|
|
bcc .80
|
|
|
|
|
sbc #7
|
|
|
|
|
bra .8
|
|
|
|
|
|
|
|
|
|
.80 inc adjust range 1..7
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.WDAY
|
2016-09-12 19:46:54 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
2016-09-05 16:00:11 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* K.CTime2Time
|
2016-08-30 20:26:19 +00:00
|
|
|
|
* In :
|
|
|
|
|
* PULLW = Src CTIME DWORD
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* PULLW = Dst PTR To K.Time
|
2016-08-30 20:26:19 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.CTime2Time >PULLW ZPQuickPtr1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
>PULLW ZPQuickPtr2
|
|
|
|
|
|
|
|
|
|
ldy #3
|
|
|
|
|
|
|
|
|
|
.1 lda (ZPQuickPtr1),y
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD,y
|
2016-08-31 15:38:48 +00:00
|
|
|
|
dey
|
|
|
|
|
bpl .1
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
stz K.CTime.DivDay
|
|
|
|
|
stz K.CTime.DivDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.2 lda K.CTime.DWORD
|
|
|
|
|
sta K.CTime.ModDay
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sec
|
|
|
|
|
sbc #SECSDAY
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DWORD+1
|
|
|
|
|
sta K.CTime.ModDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc /SECSDAY
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DWORD+2
|
|
|
|
|
sta K.CTime.ModDay+2
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc #0
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DWORD+3
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc #0
|
|
|
|
|
bcc .3 end of DIV/MOD ?
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD+3
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD+2
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DWORD
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.DivDay
|
2016-08-31 15:38:48 +00:00
|
|
|
|
bne .2
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.DivDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
.3 pla
|
|
|
|
|
pla
|
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
stz K.CTime.Div60
|
|
|
|
|
stz K.CTime.Div60+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.4 lda K.CTime.ModDay
|
|
|
|
|
sta K.CTime.Mod
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sec
|
|
|
|
|
sbc #60
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.ModDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc #0
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.ModDay+2
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc #0
|
|
|
|
|
|
|
|
|
|
bcc .5
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.ModDay+2
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.ModDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.ModDay
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.Div60
|
2016-08-31 15:38:48 +00:00
|
|
|
|
bne .4
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.Div60+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
bne .4
|
|
|
|
|
|
|
|
|
|
.5 pla
|
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Mod
|
|
|
|
|
ldy #S.Time.SECOND
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
stz K.CTime.Div3600
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.6 lda K.CTime.Div60
|
|
|
|
|
sta K.CTime.Mod
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sec
|
|
|
|
|
sbc #60
|
|
|
|
|
pha
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Div60+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sbc #0
|
|
|
|
|
pha
|
|
|
|
|
|
|
|
|
|
bcc .7
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Div60+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Div60
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.Div3600
|
2016-08-31 15:38:48 +00:00
|
|
|
|
bne .6
|
|
|
|
|
|
|
|
|
|
.7 pla
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Mod
|
|
|
|
|
dey ldy #S.Time.MINUTE
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Div3600
|
|
|
|
|
dey ldy #S.Time.HOUR
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DivDay WDAY computation : (DivDay + DAY0) mod 7
|
2016-08-30 20:26:19 +00:00
|
|
|
|
clc
|
2016-08-31 15:38:48 +00:00
|
|
|
|
adc #DAY0
|
|
|
|
|
pha
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DivDay+1
|
2016-08-31 15:38:48 +00:00
|
|
|
|
adc /DAY0
|
|
|
|
|
eor #$ff
|
|
|
|
|
tax
|
|
|
|
|
pla
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.8 sta K.CTime.Mod
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sec
|
|
|
|
|
sbc #7
|
|
|
|
|
bcs .8
|
|
|
|
|
inx
|
|
|
|
|
bne .8
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Mod
|
|
|
|
|
ldy #S.Time.WDAY
|
2016-08-31 15:38:48 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
|
|
|
|
lda #CENTURY0
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Century
|
2016-08-31 15:38:48 +00:00
|
|
|
|
lda #YEAR0
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.Year
|
2016-09-02 06:09:44 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.CTime2Time.Year
|
|
|
|
|
.1 ldy K.CTime.Century
|
|
|
|
|
lda K.CTime.Year
|
|
|
|
|
jsr K.IsLeapYearYA if Leap year CC
|
|
|
|
|
lda K.CTime.DivDay
|
2016-09-01 05:42:28 +00:00
|
|
|
|
sbc #365
|
|
|
|
|
pha
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.DivDay+1
|
2016-09-01 05:42:28 +00:00
|
|
|
|
sbc /365
|
2016-09-02 06:09:44 +00:00
|
|
|
|
bcc .2
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DivDay+1
|
2016-09-01 05:42:28 +00:00
|
|
|
|
pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
sta K.CTime.DivDay
|
2016-09-01 05:42:28 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
inc K.CTime.Year
|
|
|
|
|
lda K.CTime.Year
|
2016-09-01 05:42:28 +00:00
|
|
|
|
cmp #100
|
2016-09-02 06:09:44 +00:00
|
|
|
|
bne .1
|
2016-09-21 15:20:37 +00:00
|
|
|
|
stz K.CTime.Year
|
|
|
|
|
inc K.CTime.Century
|
2016-09-02 06:09:44 +00:00
|
|
|
|
bne .1
|
2016-09-01 05:42:28 +00:00
|
|
|
|
|
2016-09-02 06:09:44 +00:00
|
|
|
|
.2 pla
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.CTime.Century
|
|
|
|
|
* ldy #S.Time.CENTURY
|
2016-09-01 05:42:28 +00:00
|
|
|
|
sta (ZPQuickPtr2)
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.YEAR
|
|
|
|
|
lda K.CTime.Year
|
2016-09-01 05:42:28 +00:00
|
|
|
|
sta (ZPQuickPtr2),y
|
|
|
|
|
|
2016-09-02 06:09:44 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
2016-09-01 05:42:28 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* K.StrFTime
|
2016-08-30 20:26:19 +00:00
|
|
|
|
* In :
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* PULLW = Src PTR To K.Time
|
2016-08-30 20:26:19 +00:00
|
|
|
|
* PULLW = Src PTR To Format String
|
2016-09-05 06:10:04 +00:00
|
|
|
|
* PULLW = Dst PTR To PSTR Buf
|
2016-08-30 20:26:19 +00:00
|
|
|
|
* %a Abbreviated weekday name : Thu
|
|
|
|
|
* %A Full weekday name : Thursday
|
|
|
|
|
* %b Abbreviated month name : Aug
|
|
|
|
|
* %B Full month name : August
|
|
|
|
|
* %d Day of the month, zero-padded (01-31)
|
|
|
|
|
* %H Hour in 24h format (00-23) 14
|
|
|
|
|
* %I Hour in 12h format (01-12) 02
|
|
|
|
|
* %m Month as a decimal number (01-12) 08
|
|
|
|
|
* %M Minute (00-59) 55
|
|
|
|
|
* %p AM or PM designation PM
|
|
|
|
|
* %S Second (00-61) 02
|
|
|
|
|
* %w Weekday as a decimal number with Sunday as 0 (0-6)
|
|
|
|
|
* %y Year, last two digits (00-99)
|
|
|
|
|
* %Y Year four digits 2001
|
|
|
|
|
* PULLW = Dst PSTR Buffer
|
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime >PULLW ZPQuickPtr1
|
2016-09-05 06:10:04 +00:00
|
|
|
|
>PULLW ZPQuickPtr2
|
2016-09-05 16:00:11 +00:00
|
|
|
|
>PULLW ZPQuickPtr3
|
2016-09-05 06:10:04 +00:00
|
|
|
|
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda #0
|
|
|
|
|
sta (ZPQuickPtr3) Reset target PSTR length
|
|
|
|
|
|
|
|
|
|
tay
|
2016-09-05 06:10:04 +00:00
|
|
|
|
|
|
|
|
|
.1 iny
|
|
|
|
|
lda (ZPQuickPtr2),y
|
|
|
|
|
cmp #'%'
|
|
|
|
|
beq .2
|
2016-09-05 16:00:11 +00:00
|
|
|
|
|
|
|
|
|
phy
|
2016-09-21 15:20:37 +00:00
|
|
|
|
jsr K.StrFTime.addChar
|
2016-09-05 16:00:11 +00:00
|
|
|
|
ply
|
2016-09-05 06:10:04 +00:00
|
|
|
|
.10 tya
|
|
|
|
|
cmp (ZPQuickPtr2)
|
|
|
|
|
bne .1
|
2016-08-30 20:26:19 +00:00
|
|
|
|
rts
|
2016-09-05 06:10:04 +00:00
|
|
|
|
|
|
|
|
|
.2 tya
|
|
|
|
|
cmp (ZPQuickPtr2)
|
|
|
|
|
beq .8
|
|
|
|
|
|
|
|
|
|
iny
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldx #K.StrFTime.JMPL-K.StrFTime.Tbl-1
|
2016-09-05 06:10:04 +00:00
|
|
|
|
|
|
|
|
|
.3 lda (ZPQuickPtr2),y
|
2016-09-21 15:20:37 +00:00
|
|
|
|
cmp K.StrFTime.Tbl,x
|
2016-09-05 06:10:04 +00:00
|
|
|
|
beq .4
|
|
|
|
|
dex
|
2016-09-12 19:46:54 +00:00
|
|
|
|
bpl .3
|
2016-09-05 06:10:04 +00:00
|
|
|
|
beq .10
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.4 lda K.StrFTime.JMPL,x
|
2016-09-05 06:10:04 +00:00
|
|
|
|
sta .5+1
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.StrFTime.JMPH,x
|
2016-09-05 06:10:04 +00:00
|
|
|
|
sta .5+2
|
|
|
|
|
phy
|
|
|
|
|
.5 jsr $ffff
|
|
|
|
|
ply
|
|
|
|
|
bra .10
|
|
|
|
|
|
2016-09-05 16:00:11 +00:00
|
|
|
|
.8 rts
|
2016-09-05 06:10:04 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.A ldx #3 Max Len
|
2016-09-12 19:46:54 +00:00
|
|
|
|
.HS 2C Bit abs
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.AA ldx #15
|
|
|
|
|
>LDYAI K.StrFTime.DAY
|
2016-09-12 19:46:54 +00:00
|
|
|
|
>STYA ZPQuickPtr4
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.WDAY
|
|
|
|
|
bra K.StrFTime.STR
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.B ldx #3
|
2016-09-12 19:46:54 +00:00
|
|
|
|
.HS 2C Bit abs
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.BB ldx #15
|
|
|
|
|
>LDYAI K.StrFTime.MON
|
2016-09-12 19:46:54 +00:00
|
|
|
|
>STYA ZPQuickPtr4
|
2016-09-21 15:20:37 +00:00
|
|
|
|
ldy #S.Time.MONTH
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.STR lda (ZPQuickPtr1),y get required S.Time field value
|
2016-09-12 19:46:54 +00:00
|
|
|
|
tay
|
|
|
|
|
beq .8 Illegal value
|
|
|
|
|
|
|
|
|
|
.1 dey range 0..x
|
|
|
|
|
beq .2
|
|
|
|
|
lda (ZPQuickPtr4)
|
|
|
|
|
sec
|
|
|
|
|
adc ZPQuickPtr4
|
|
|
|
|
sta ZPQuickPtr4
|
|
|
|
|
bcc .1
|
|
|
|
|
inc ZPQuickPtr4+1
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.2 ldy #0
|
|
|
|
|
|
|
|
|
|
.3 iny
|
|
|
|
|
lda (ZPQuickPtr4),y
|
|
|
|
|
phy
|
2016-09-21 15:20:37 +00:00
|
|
|
|
jsr K.StrFTime.addChar
|
2016-09-12 19:46:54 +00:00
|
|
|
|
pla
|
|
|
|
|
cmp (ZPQuickPtr4)
|
|
|
|
|
beq .8
|
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
dex
|
|
|
|
|
bne .3
|
|
|
|
|
|
|
|
|
|
.8 rts
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.D ldy #S.Time.DAY
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.HH ldy #S.Time.HOUR
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.II ldy #S.Time.HOUR
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda (ZPQuickPtr1),y
|
|
|
|
|
cmp #12
|
|
|
|
|
bcc .1
|
|
|
|
|
sbc #12
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.1 bra K.StrFTime.addDecA
|
|
|
|
|
K.StrFTime.M ldy #S.Time.MONTH
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.MM ldy #S.Time.MINUTE
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.P ldy #S.Time.HOUR
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda (ZPQuickPtr1),y
|
|
|
|
|
cmp #12
|
|
|
|
|
bcc .1
|
|
|
|
|
lda #'p'
|
|
|
|
|
.HS 2C bit abs
|
|
|
|
|
.1 lda #'a'
|
2016-09-21 15:20:37 +00:00
|
|
|
|
jsr K.StrFTime.addChar
|
2016-09-05 16:00:11 +00:00
|
|
|
|
lda #'m'
|
2016-09-21 15:20:37 +00:00
|
|
|
|
bra K.StrFTime.addChar
|
|
|
|
|
K.StrFTime.SS ldy #S.Time.SECOND
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.W ldy #S.Time.WDAY
|
|
|
|
|
bra K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.YY ldy #S.Time.CENTURY
|
|
|
|
|
jsr K.StrFTime.addDecPtr1Y
|
|
|
|
|
K.StrFTime.Y ldy #S.Time.YEAR
|
2016-09-05 06:10:04 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.addDecPtr1Y
|
2016-09-05 06:10:04 +00:00
|
|
|
|
lda (ZPQuickPtr1),y
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.addDecA
|
|
|
|
|
sta K.StrFTime.BIN
|
|
|
|
|
stz K.StrFTime.DEC
|
2016-09-12 19:46:54 +00:00
|
|
|
|
sed
|
|
|
|
|
ldx #8
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
.1 asl K.StrFTime.BIN
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
lda K.StrFTime.DEC
|
|
|
|
|
adc K.StrFTime.DEC
|
|
|
|
|
sta K.StrFTime.DEC
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
cld
|
|
|
|
|
|
2016-09-21 15:20:37 +00:00
|
|
|
|
* lda K.StrFTime.DEC already in A
|
2016-09-12 19:46:54 +00:00
|
|
|
|
|
2016-09-05 06:10:04 +00:00
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
ora #$30
|
2016-09-21 15:20:37 +00:00
|
|
|
|
jsr K.StrFTime.addChar
|
|
|
|
|
lda K.StrFTime.DEC
|
2016-09-05 06:10:04 +00:00
|
|
|
|
and #$0f
|
|
|
|
|
ora #$30
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.addChar
|
2016-09-05 16:00:11 +00:00
|
|
|
|
pha
|
|
|
|
|
lda (ZPQuickPtr3)
|
|
|
|
|
inc
|
|
|
|
|
sta (ZPQuickPtr3)
|
|
|
|
|
tay
|
|
|
|
|
pla
|
|
|
|
|
sta (ZPQuickPtr3),y
|
|
|
|
|
rts
|
2016-09-05 06:10:04 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.TBL .AS "aAbBdHImMpSwyY"
|
|
|
|
|
K.StrFTime.JMPL .DA #K.StrFTime.A
|
|
|
|
|
.DA #K.StrFTime.AA
|
|
|
|
|
.DA #K.StrFTime.B
|
|
|
|
|
.DA #K.StrFTime.BB
|
|
|
|
|
.DA #K.StrFTime.D
|
|
|
|
|
.DA #K.StrFTime.HH
|
|
|
|
|
.DA #K.StrFTime.II
|
|
|
|
|
.DA #K.StrFTime.M
|
|
|
|
|
.DA #K.StrFTime.MM
|
|
|
|
|
.DA #K.StrFTime.P
|
|
|
|
|
.DA #K.StrFTime.SS
|
|
|
|
|
.DA #K.StrFTime.W
|
|
|
|
|
.DA #K.StrFTime.Y
|
|
|
|
|
.DA #K.StrFTime.YY
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.JMPH .DA /K.StrFTime.A
|
|
|
|
|
.DA /K.StrFTime.AA
|
|
|
|
|
.DA /K.StrFTime.B
|
|
|
|
|
.DA /K.StrFTime.BB
|
|
|
|
|
.DA /K.StrFTime.D
|
|
|
|
|
.DA /K.StrFTime.HH
|
|
|
|
|
.DA /K.StrFTime.II
|
|
|
|
|
.DA /K.StrFTime.M
|
|
|
|
|
.DA /K.StrFTime.MM
|
|
|
|
|
.DA /K.StrFTime.P
|
|
|
|
|
.DA /K.StrFTime.SS
|
|
|
|
|
.DA /K.StrFTime.W
|
|
|
|
|
.DA /K.StrFTime.Y
|
|
|
|
|
.DA /K.StrFTime.YY
|
2016-09-05 06:10:04 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.DAY >PSTRING "Monday"
|
2016-09-05 06:10:04 +00:00
|
|
|
|
>PSTRING "Tuesday"
|
|
|
|
|
>PSTRING "Wednesday"
|
|
|
|
|
>PSTRING "Thursday"
|
|
|
|
|
>PSTRING "Friday"
|
|
|
|
|
>PSTRING "Saturday"
|
|
|
|
|
>PSTRING "Sunday"
|
2016-09-05 16:00:11 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.MON >PSTRING "January"
|
2016-09-05 06:10:04 +00:00
|
|
|
|
>PSTRING "February"
|
|
|
|
|
>PSTRING "March"
|
|
|
|
|
>PSTRING "April"
|
|
|
|
|
>PSTRING "May"
|
|
|
|
|
>PSTRING "June"
|
|
|
|
|
>PSTRING "July"
|
|
|
|
|
>PSTRING "August"
|
|
|
|
|
>PSTRING "September"
|
|
|
|
|
>PSTRING "October"
|
|
|
|
|
>PSTRING "November"
|
|
|
|
|
>PSTRING "December"
|
2016-08-30 20:26:19 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-12 19:46:54 +00:00
|
|
|
|
* In :
|
|
|
|
|
* Y = Century
|
|
|
|
|
* A = Year (0..99)
|
2016-09-01 05:42:28 +00:00
|
|
|
|
* if (year mod 400 = 0)
|
|
|
|
|
* or
|
|
|
|
|
* if not (year mod 100 = 0) and (year mod 4 = 0)
|
2016-09-12 19:46:54 +00:00
|
|
|
|
* Out :
|
|
|
|
|
* CC = Leap
|
|
|
|
|
* CS = Not Leap
|
2016-08-31 15:38:48 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.IsLeapYearYA cmp #0 Year = 00 ?
|
2016-09-01 05:42:28 +00:00
|
|
|
|
bne .1 no
|
|
|
|
|
|
|
|
|
|
tya year = 00, get century in a
|
|
|
|
|
and #$3 mod 4 = 0 ?
|
|
|
|
|
beq .9 leap year
|
|
|
|
|
|
|
|
|
|
.8 sec not leap
|
|
|
|
|
rts
|
2016-08-31 15:38:48 +00:00
|
|
|
|
|
2016-09-01 05:42:28 +00:00
|
|
|
|
.1 and #$3 mod 4 = 0 ?
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
.9 clc Leap
|
2016-08-31 15:38:48 +00:00
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.CTime.DWORD .BS 4
|
|
|
|
|
K.CTime.DivDay .BS 2
|
|
|
|
|
K.CTime.ModDay .BS 3
|
|
|
|
|
K.CTime.Div60 .BS 2
|
|
|
|
|
K.CTime.Div3600 .BS 1
|
|
|
|
|
K.CTime.Mod .BS 1
|
|
|
|
|
K.CTime.Century .BS 1
|
|
|
|
|
K.CTime.Year .BS 1
|
2016-09-12 19:46:54 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.BIN .BS 1
|
|
|
|
|
K.StrFTime.DEC .BS 1 always < 100
|
2016-09-12 19:46:54 +00:00
|
|
|
|
*--------------------------------------
|
2016-09-21 15:20:37 +00:00
|
|
|
|
K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
|
2016-08-30 20:26:19 +00:00
|
|
|
|
MAN
|
2016-09-21 15:20:37 +00:00
|
|
|
|
SAVE SYS/KERNEL.S.Time
|
2016-08-30 20:26:19 +00:00
|
|
|
|
LOAD SYS/KERNEL.S
|
|
|
|
|
ASM
|