2020-01-21 07:34:32 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* https://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/lib/ansi/gmtime.c
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
SECSDAY .EQ 86400 60*60*24
|
2020-01-21 11:06:59 +00:00
|
|
|
|
CENT0 .EQ 19
|
2020-01-21 07:34:32 +00:00
|
|
|
|
YEAR0 .EQ 70
|
|
|
|
|
DAY0 .EQ 4 day 0 was a thursday
|
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
* ZPPtr3 *S.TIME
|
|
|
|
|
* FORPNT str
|
|
|
|
|
* TXTPTR format
|
|
|
|
|
*--------------------------------------
|
2020-01-21 07:34:32 +00:00
|
|
|
|
K.StrFTime.I
|
2020-01-21 11:06:59 +00:00
|
|
|
|
.1 jsr SHARED.TXTPTR.GetNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
beq .8
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
cmp #'%'
|
|
|
|
|
beq .2
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
|
|
|
|
jsr SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
bra .1
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
.2 ldx #K.StrFTime.Cnt-1
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.TXTPTR.GetNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
beq .8
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
.3 cmp K.StrFTime.Tbl,x
|
|
|
|
|
beq .4
|
|
|
|
|
dex
|
|
|
|
|
bpl .3
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
bra .1
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
.4 cpx #7
|
|
|
|
|
bcc .5
|
|
|
|
|
jsr K.StrFTime.AtX
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.5 txa
|
|
|
|
|
asl
|
|
|
|
|
tax
|
|
|
|
|
jsr .7
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.7 jmp (K.StrFTime.JMP,x)
|
|
|
|
|
|
|
|
|
|
.8 lda #0 Terminate C string
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
K.StrFTime.Tbl .AS "aAbBIpYydHSwmM"
|
|
|
|
|
K.StrFTime.Cnt .EQ *-K.StrFTime.TBL
|
|
|
|
|
K.StrFTime.OfsX .DA #S.Time.YEAR,#S.Time.DAY,#S.Time.HOUR,#S.Time.SECOND,#S.Time.WDAY,#S.Time.MONTH,#S.Time.MINUTE
|
|
|
|
|
K.StrFTime.JMP .DA K.StrFTime.A
|
|
|
|
|
.DA K.StrFTime.AA
|
|
|
|
|
.DA K.StrFTime.B
|
|
|
|
|
.DA K.StrFTime.BB
|
|
|
|
|
.DA K.StrFTime.II
|
|
|
|
|
.DA K.StrFTime.P
|
|
|
|
|
.DA K.StrFTime.YY
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
K.StrFTime.A sec Short day of week, 3 chars...
|
|
|
|
|
.HS 90 BCC
|
|
|
|
|
|
|
|
|
|
K.StrFTime.AA clc full DoW
|
2020-01-21 11:06:59 +00:00
|
|
|
|
lda #TIMEX.DAY
|
|
|
|
|
ldx /TIMEX.DAY
|
2020-01-21 07:34:32 +00:00
|
|
|
|
ldy #S.Time.WDAY
|
|
|
|
|
bra K.StrFTime.STR
|
|
|
|
|
K.StrFTime.B sec Short Month, 3 chars....
|
|
|
|
|
.HS 90 BCC
|
|
|
|
|
K.StrFTime.BB clc full Month....
|
2020-01-21 11:06:59 +00:00
|
|
|
|
lda #TIMEX.MON
|
|
|
|
|
ldx /TIMEX.MON
|
2020-01-21 07:34:32 +00:00
|
|
|
|
ldy #S.Time.MONTH
|
|
|
|
|
K.StrFTime.STR sta ZPPtr4
|
|
|
|
|
stx ZPPtr4+1
|
|
|
|
|
|
|
|
|
|
ldx #15
|
|
|
|
|
bcc .10
|
|
|
|
|
ldx #3
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
|
|
|
|
.10 jsr SHARED.ZPPtr3.GetY get required S.Time field value
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
tay
|
|
|
|
|
beq .2 Illegal value, print ???
|
|
|
|
|
.1 lda (ZPPtr4)
|
|
|
|
|
sec
|
|
|
|
|
adc ZPPtr4
|
|
|
|
|
sta ZPPtr4
|
|
|
|
|
bcc .11
|
|
|
|
|
inc ZPPtr4+1
|
|
|
|
|
.11 dey
|
|
|
|
|
bne .1
|
|
|
|
|
.2
|
|
|
|
|
* ldy #0 Y is already 0
|
|
|
|
|
|
|
|
|
|
.3 iny
|
|
|
|
|
lda (ZPPtr4),y
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
tya
|
|
|
|
|
cmp (ZPPtr4)
|
|
|
|
|
beq .8
|
|
|
|
|
dex
|
|
|
|
|
bne .3
|
|
|
|
|
|
|
|
|
|
.8 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
K.StrFTime.II ldy #S.Time.HOUR
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.ZPPtr3.GetY
|
2020-01-21 07:34:32 +00:00
|
|
|
|
cmp #12
|
|
|
|
|
bcc K.StrFTime.addDecA
|
|
|
|
|
sbc #12
|
|
|
|
|
bra K.StrFTime.addDecA
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
K.StrFTime.P ldy #S.Time.HOUR
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.ZPPtr3.GetY
|
2020-01-21 07:34:32 +00:00
|
|
|
|
cmp #12
|
|
|
|
|
bcc .1
|
|
|
|
|
lda #'p'
|
|
|
|
|
.HS 2C bit abs
|
|
|
|
|
.1 lda #'a'
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
lda #'m'
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jmp SHARED.FORPNT.PutNext
|
|
|
|
|
t
|
2020-01-21 07:34:32 +00:00
|
|
|
|
K.StrFTime.YY ldy #S.Time.CENTURY
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr K.StrFTime.addDecPtr3Y
|
2020-01-21 07:34:32 +00:00
|
|
|
|
ldx #7 "y"
|
|
|
|
|
K.StrFTime.AtX ldy K.StrFTime.OfsX-7,x
|
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
K.StrFTime.addDecPtr3Y
|
|
|
|
|
jsr SHARED.ZPPtr3.GetY
|
2020-01-21 07:34:32 +00:00
|
|
|
|
K.StrFTime.addDecA
|
|
|
|
|
ldx #2
|
|
|
|
|
ldy #'0'
|
|
|
|
|
clc
|
|
|
|
|
jsr MATH.A2STR10
|
|
|
|
|
lda A2osX.NumStrBuf
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
lda A2osX.NumStrBuf+1
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jmp SHARED.FORPNT.PutNext
|
2020-01-21 07:34:32 +00:00
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
TIMEX.DAY >PSTR "???"
|
2020-01-21 07:34:32 +00:00
|
|
|
|
>PSTR "Monday"
|
|
|
|
|
>PSTR "Tuesday"
|
|
|
|
|
>PSTR "Wednesday"
|
|
|
|
|
>PSTR "Thursday"
|
|
|
|
|
>PSTR "Friday"
|
|
|
|
|
>PSTR "Saturday"
|
|
|
|
|
>PSTR "Sunday"
|
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
TIMEX.MON >PSTR "???"
|
2020-01-21 07:34:32 +00:00
|
|
|
|
>PSTR "January"
|
|
|
|
|
>PSTR "February"
|
|
|
|
|
>PSTR "March"
|
|
|
|
|
>PSTR "April"
|
|
|
|
|
>PSTR "May"
|
|
|
|
|
>PSTR "June"
|
|
|
|
|
>PSTR "July"
|
|
|
|
|
>PSTR "August"
|
|
|
|
|
>PSTR "September"
|
|
|
|
|
>PSTR "October"
|
|
|
|
|
>PSTR "November"
|
|
|
|
|
>PSTR "December"
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
K.PTime2Time.I ldy #1
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.TXTPTR.GetY Get Year
|
2020-01-21 07:34:32 +00:00
|
|
|
|
lsr C is high bit of month
|
|
|
|
|
ldy #S.Time.YEAR
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set year
|
2020-01-21 07:34:32 +00:00
|
|
|
|
sta ARG32+3 for computing Century/WDAY later
|
|
|
|
|
|
2020-01-21 11:06:59 +00:00
|
|
|
|
ldy #0
|
|
|
|
|
jsr SHARED.TXTPTR.GetY Get Month/day
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
pha save Day
|
|
|
|
|
ror
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
lsr
|
|
|
|
|
ldy #S.Time.MONTH
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set month
|
|
|
|
|
sta K.ComputeWDAY.1+1
|
|
|
|
|
|
2020-01-21 07:34:32 +00:00
|
|
|
|
pla get back day
|
|
|
|
|
and #$1F
|
|
|
|
|
iny
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set day
|
|
|
|
|
|
|
|
|
|
dec adjust range 0.30 for MOD 7
|
|
|
|
|
sta ARG32.Sign For later...
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
lda ARG32+3 get back year
|
|
|
|
|
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
|
2020-01-21 11:06:59 +00:00
|
|
|
|
ldy #0
|
|
|
|
|
jsr SHARED.FORPNT.PutY set Century
|
2020-01-21 07:34:32 +00:00
|
|
|
|
sta ARG32+2 for computing WDAY later
|
|
|
|
|
|
|
|
|
|
ldy #2
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.TXTPTR.GetY Get Min
|
2020-01-21 07:34:32 +00:00
|
|
|
|
tax
|
|
|
|
|
iny
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.TXTPTR.GetY Get Hour
|
2020-01-21 07:34:32 +00:00
|
|
|
|
ldy #S.Time.HOUR
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set hour
|
2020-01-21 07:34:32 +00:00
|
|
|
|
iny
|
|
|
|
|
txa
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set min
|
2020-01-21 07:34:32 +00:00
|
|
|
|
iny
|
|
|
|
|
lda #0
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY set seconds (ProDOS does not provide it)
|
2020-01-21 07:34:32 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
* 1/1/1970 was Thursday...if not leap, add one, if leap add 2
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
|
|
|
|
|
pha
|
|
|
|
|
|
2020-01-21 11:06:59 +00:00
|
|
|
|
lda #CENT0
|
2020-01-21 07:34:32 +00:00
|
|
|
|
sta ARG32
|
|
|
|
|
lda #YEAR0
|
|
|
|
|
sta ARG32+1
|
|
|
|
|
|
|
|
|
|
.1 ldy ARG32
|
|
|
|
|
lda ARG32+1
|
|
|
|
|
|
|
|
|
|
cpy ARG32+2
|
|
|
|
|
bne .2
|
|
|
|
|
cmp ARG32+3
|
2020-01-21 11:06:59 +00:00
|
|
|
|
beq K.ComputeWDAY.1
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
.2 jsr TIMEX.IsLeap CS = Leap
|
|
|
|
|
|
|
|
|
|
pla
|
|
|
|
|
adc #1 365 mod 7
|
|
|
|
|
cmp #7
|
|
|
|
|
bcc .3
|
|
|
|
|
sbc #7 MOD 7
|
|
|
|
|
|
|
|
|
|
.3 pha
|
|
|
|
|
inc ARG32+1
|
|
|
|
|
lda ARG32+1
|
|
|
|
|
cmp #100
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
stz ARG32+1
|
|
|
|
|
inc ARG32
|
|
|
|
|
bra .1
|
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
K.ComputeWDAY.1 ldx #$ff SELF MODIFIED : month
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
dex don't include actual month
|
|
|
|
|
beq .71
|
|
|
|
|
|
|
|
|
|
.5 clc assume NO leap
|
|
|
|
|
|
2020-01-21 11:06:59 +00:00
|
|
|
|
lda TIMEX.MDAY-1,x get day count in this month
|
2020-01-21 07:34:32 +00:00
|
|
|
|
bne .6 february ?
|
|
|
|
|
|
|
|
|
|
ldy ARG32+2
|
|
|
|
|
lda ARG32+3
|
|
|
|
|
jsr TIMEX.IsLeap CS = Leap
|
|
|
|
|
|
|
|
|
|
.6 pla
|
2020-01-21 11:06:59 +00:00
|
|
|
|
adc TIMEX.MDAY-1,x
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
cmp #7
|
|
|
|
|
bcc .7
|
|
|
|
|
sbc #7
|
|
|
|
|
|
|
|
|
|
.7 pha
|
|
|
|
|
dex
|
|
|
|
|
bne .5
|
|
|
|
|
|
|
|
|
|
.71 pla
|
|
|
|
|
clc
|
2020-01-21 11:06:59 +00:00
|
|
|
|
|
|
|
|
|
adc ARG32.Sign get day in month (0..30)
|
2020-01-21 07:34:32 +00:00
|
|
|
|
|
|
|
|
|
.8 cmp #7 MOD 7
|
|
|
|
|
bcc .80
|
|
|
|
|
sbc #7
|
|
|
|
|
bra .8
|
|
|
|
|
|
|
|
|
|
.80 inc adjust range 1..7
|
|
|
|
|
ldy #S.Time.WDAY
|
2020-01-21 11:06:59 +00:00
|
|
|
|
jsr SHARED.FORPNT.PutY
|
2020-01-21 07:34:32 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-01-21 11:06:59 +00:00
|
|
|
|
TIMEX.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
|
|
|
|
|
*--------------------------------------
|
2020-01-21 07:34:32 +00:00
|
|
|
|
K.CTime2Time.I ldy #3
|
|
|
|
|
|
|
|
|
|
.1 lda (ZPPtr1),y
|
|
|
|
|
sta ARG32,y ARG = ctime
|
|
|
|
|
dey
|
|
|
|
|
bpl .1
|
|
|
|
|
|
|
|
|
|
lda #SECSDAY ACC = SECSDAY
|
|
|
|
|
sta ACC32
|
|
|
|
|
lda /SECSDAY
|
|
|
|
|
sta ACC32+1
|
|
|
|
|
lda ^SECSDAY
|
|
|
|
|
sta ACC32+2
|
|
|
|
|
stz ACC32+3
|
|
|
|
|
jsr MATH.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
|
|
|
|
|
|
|
|
|
|
lda ARG32 WDAY computation : (ARG32 + DAY0) mod 7
|
|
|
|
|
clc
|
|
|
|
|
adc #DAY0
|
|
|
|
|
pha
|
|
|
|
|
lda ARG32+1 65535 days = 179 years
|
|
|
|
|
adc /DAY0
|
|
|
|
|
eor #$ff
|
|
|
|
|
tax
|
|
|
|
|
pla
|
|
|
|
|
.2 tay
|
|
|
|
|
sec
|
|
|
|
|
sbc #7
|
|
|
|
|
bcs .2
|
|
|
|
|
inx
|
|
|
|
|
bne .2
|
|
|
|
|
tya
|
|
|
|
|
ldy #S.Time.WDAY
|
|
|
|
|
sta (ZPPtr2),y
|
2020-01-21 11:06:59 +00:00
|
|
|
|
ldy #CENT0
|
2020-01-21 07:34:32 +00:00
|
|
|
|
sty ZPPtr3
|
|
|
|
|
lda #YEAR0
|
|
|
|
|
sta ZPPtr3+1
|
|
|
|
|
K.CTime2Time.Year
|
|
|
|
|
.1 ldy ZPPtr3
|
|
|
|
|
lda ZPPtr3+1
|
|
|
|
|
jsr TIMEX.IsLeap if Leap year CS
|
|
|
|
|
rol Toggle Carry
|
|
|
|
|
eor #1
|
|
|
|
|
lsr
|
|
|
|
|
lda ARG32
|
|
|
|
|
sbc #365
|
|
|
|
|
pha
|
|
|
|
|
lda ARG32+1
|
|
|
|
|
sbc /365
|
|
|
|
|
bcc .2
|
|
|
|
|
sta ARG32+1
|
|
|
|
|
pla
|
|
|
|
|
sta ARG32
|
|
|
|
|
inc ZPPtr3
|
|
|
|
|
lda ZPPtr3
|
|
|
|
|
cmp #100
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
stz ZPPtr3
|
|
|
|
|
inc ZPPtr3+1
|
|
|
|
|
bne .1
|
|
|
|
|
.2 pla
|
|
|
|
|
|
|
|
|
|
lda ZPPtr3+1
|
|
|
|
|
* ldy #S.Time.CENTURY
|
|
|
|
|
sta (ZPPtr2)
|
|
|
|
|
|
|
|
|
|
ldy #S.Time.YEAR
|
|
|
|
|
lda ZPPtr3
|
|
|
|
|
sta (ZPPtr2),y
|
|
|
|
|
K.CTime2Time.HMS
|
|
|
|
|
ldx #3
|
|
|
|
|
.1 lda TMP32,x
|
|
|
|
|
sta ARG32,x
|
|
|
|
|
dex
|
|
|
|
|
bpl .1
|
|
|
|
|
ldy #S.TIME.SECOND
|
|
|
|
|
jsr .2
|
|
|
|
|
dey #S.TIME.MINUTE
|
|
|
|
|
jsr .2
|
|
|
|
|
dey #S.TIME.HOUR
|
|
|
|
|
lda ARG32
|
|
|
|
|
sta (ZPPtr2),y
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
.2 phy
|
|
|
|
|
|
|
|
|
|
lda #60
|
|
|
|
|
jsr MATH.A2ACC32
|
|
|
|
|
jsr MATH.DIVMOD32
|
|
|
|
|
ply
|
|
|
|
|
lda TMP32
|
|
|
|
|
sta (ZPPtr2),y
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* In :
|
|
|
|
|
* Y = Century
|
|
|
|
|
* A = Year (0..99)
|
|
|
|
|
* if (year mod 400 = 0)
|
|
|
|
|
* or
|
|
|
|
|
* if not (year mod 100 = 0) and (year mod 4 = 0)
|
|
|
|
|
* Out :
|
|
|
|
|
* CS = Leap
|
|
|
|
|
* CC = Not Leap
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
TIMEX.IsLeap cmp #0 Year = 00 ?
|
|
|
|
|
bne .1 no
|
|
|
|
|
|
|
|
|
|
tya year = 00, get century in A
|
|
|
|
|
|
|
|
|
|
and #$3 Century mod 4 = 0 ?
|
|
|
|
|
beq .9 leap year (2000)
|
|
|
|
|
.8 clc not leap (1900)
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.1 and #$3 mod 4 = 0 ?
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
.9 sec Leap
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
MAN
|
|
|
|
|
SAVE USR/SRC/SYS/KERNEL.S.TIMEX
|
|
|
|
|
LOAD USR/SRC/SYS/KERNEL.S
|
|
|
|
|
ASM
|