Kernel 0.93++

This commit is contained in:
Rémy GIBERT 2020-01-21 12:06:59 +01:00
parent 8244429491
commit a40a5660b8
7 changed files with 96 additions and 79 deletions

Binary file not shown.

View File

@ -80,34 +80,38 @@ SHARED.TXTPTR.GetY
sta SETREADAUX
rts
*--------------------------------------
SHARED.FORPNT.PutY
sta CLRWRITEAUX
sta (FORPNT),y
sta SETWRITEAUX
SHARED.ZPPtr3.GetY
sta CLRREADAUX
lda (ZPPtr3),y
sta SETREADAUX
rts
*--------------------------------------
SHARED.TXTPTR.GetNext
sta CLRREADAUX
lda (TXTPTR)
sta SETREADAUX
beq SHARED.TXTPTR.Next.9
beq SHARED.RTS
SHARED.TXTPTR.Next
inc TXTPTR
bne SHARED.TXTPTR.Next.9
bne SHARED.RTS
inc TXTPTR+1
SHARED.TXTPTR.Next.9
rts
*--------------------------------------
SHARED.FORPNT.GetNext
SHARED.FORPNT.PutY
sta CLRWRITEAUX
sta (FORPNT),y
sta SETWRITEAUX
rts
*--------------------------------------
SHARED.FORPNT.PutNext
sta CLRWRITEAUX
sta (FORPNT)
sta SETWRITEAUX
SHARED.FORPNT.Next
* SHARED.FORPNT.Next
inc FORPNT
bne SHARED.FORPNT.Next.9
bne SHARED.RTS
inc FORPNT+1
SHARED.FORPNT.Next.9
rts
SHARED.RTS rts
*--------------------------------------
SHARED.SPtr1PPtr2
>STYA ZPPtr1
@ -121,11 +125,8 @@ SHARED.SPtr2PPtr1
*--------------------------------------
SHARED.GetCharPtr1
lda (ZPPtr1)
bne SHARED.NextCharPtr1
rts
SHARED.PutCharPtr1
sta (ZPPtr1)
SHARED.NextCharPtr1
beq SHARED.RTS
inc ZPPtr1
bne .8
inc ZPPtr1+1 never Z
@ -171,7 +172,6 @@ SHARED.NextCharPtr2
SHARED.PullYA sta CLRREADAUX
>PULLYA
sta SETREADAUX
SHARED.PullYA.RTS
rts
*--------------------------------------
MAN

View File

@ -151,6 +151,6 @@ DRV.TERM.GetDevName
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.TERMLC
SAVE USR/SRC/SYS/KERNEL.S.TERM
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -1515,6 +1515,6 @@ BUF.BASEH .DA /0
.DA /1840
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.TERM
SAVE USR/SRC/SYS/KERNEL.S.TERMX
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -22,9 +22,9 @@ K.Time >PULLW FORPNT
* # StrFTime
* ## C
* Convert S.TIME struct to CSTR
* `void strftime (char* ptr, const char* format, const struct S.TIME* timeptr );`
* `void strftime (char* str, const char* format, const struct S.TIME* timeptr );`
* ## ASM
* `>PUSHW ptr`
* `>PUSHW str`
* `>PUSHW format`
* + %a : Abbreviated weekday name : Thu
* + %A : Full weekday name : Thursday
@ -45,8 +45,10 @@ K.Time >PULLW FORPNT
* ## RETURN VALUE
* none. always succeed.
*\--------------------------------------
K.StrFTime >PULLW ZPPtr1 timeptr
K.StrFTime >PULLW ZPPtr3 S.TIME
>PULLW TXTPTR format
>PULLW FORPNT str
bra TIME.JMP
*/--------------------------------------
* # PTime2Time
* Convert ProDOS Time To S.TIME
@ -70,8 +72,8 @@ K.PTime2Time
* `>SYSCALL CTime2Time`
* ## RETURN VALUE
*\--------------------------------------
K.CTime2Time >PULLW FORPNT
>PULLW TXTPTR
K.CTime2Time >PULLW FORPNT S.TIME
>PULLW TXTPTR ptime/ctime
TIME.JMP sta SETREADAUX
sta SETWRITEAUX

View File

@ -4,26 +4,35 @@ NEW
* https://www.cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/lib/ansi/gmtime.c
*--------------------------------------
SECSDAY .EQ 86400 60*60*24
CENTURY0 .EQ 19
CENT0 .EQ 19
YEAR0 .EQ 70
DAY0 .EQ 4 day 0 was a thursday
*--------------------------------------
* ZPPtr3 *S.TIME
* FORPNT str
* TXTPTR format
*--------------------------------------
K.StrFTime.I
.1 jsr SHARED.GetCharPtr2
.1 jsr SHARED.TXTPTR.GetNext
beq .8
cmp #'%'
beq .2
jsr SHARED.PutCharPtr1
jsr SHARED.FORPNT.PutNext
bra .1
.2 ldx #K.StrFTime.Cnt-1
jsr SHARED.GetCharPtr2
jsr SHARED.TXTPTR.GetNext
beq .8
.3 cmp K.StrFTime.Tbl,x
beq .4
dex
bpl .3
bra .1
.4 cpx #7
bcc .5
jsr K.StrFTime.AtX
@ -38,7 +47,7 @@ K.StrFTime.I
.7 jmp (K.StrFTime.JMP,x)
.8 lda #0 Terminate C string
sta (ZPPtr1)
jsr SHARED.FORPNT.PutNext
clc
rts
*--------------------------------------
@ -57,15 +66,15 @@ K.StrFTime.A sec Short day of week, 3 chars...
.HS 90 BCC
K.StrFTime.AA clc full DoW
lda #K.StrFTime.DAY
ldx /K.StrFTime.DAY
lda #TIMEX.DAY
ldx /TIMEX.DAY
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....
lda #K.StrFTime.MON
ldx /K.StrFTime.MON
lda #TIMEX.MON
ldx /TIMEX.MON
ldy #S.Time.MONTH
K.StrFTime.STR sta ZPPtr4
stx ZPPtr4+1
@ -73,7 +82,8 @@ K.StrFTime.STR sta ZPPtr4
ldx #15
bcc .10
ldx #3
.10 lda (ZPPtr3),y get required S.Time field value
.10 jsr SHARED.ZPPtr3.GetY get required S.Time field value
tay
beq .2 Illegal value, print ???
@ -90,7 +100,7 @@ K.StrFTime.STR sta ZPPtr4
.3 iny
lda (ZPPtr4),y
jsr SHARED.PutCharPtr1
jsr SHARED.FORPNT.PutNext
tya
cmp (ZPPtr4)
beq .8
@ -100,39 +110,41 @@ K.StrFTime.STR sta ZPPtr4
.8 rts
*--------------------------------------
K.StrFTime.II ldy #S.Time.HOUR
lda (ZPPtr3),y
jsr SHARED.ZPPtr3.GetY
cmp #12
bcc K.StrFTime.addDecA
sbc #12
bra K.StrFTime.addDecA
K.StrFTime.P ldy #S.Time.HOUR
lda (ZPPtr3),y
jsr SHARED.ZPPtr3.GetY
cmp #12
bcc .1
lda #'p'
.HS 2C bit abs
.1 lda #'a'
jsr SHARED.PutCharPtr1
jsr SHARED.FORPNT.PutNext
lda #'m'
jmp SHARED.PutCharPtr1
jmp SHARED.FORPNT.PutNext
t
K.StrFTime.YY ldy #S.Time.CENTURY
jsr K.StrFTime.addDecPtr1Y
jsr K.StrFTime.addDecPtr3Y
ldx #7 "y"
K.StrFTime.AtX ldy K.StrFTime.OfsX-7,x
*--------------------------------------
K.StrFTime.addDecPtr1Y
lda (ZPPtr3),y
K.StrFTime.addDecPtr3Y
jsr SHARED.ZPPtr3.GetY
K.StrFTime.addDecA
ldx #2
ldy #'0'
clc
jsr MATH.A2STR10
lda A2osX.NumStrBuf
jsr SHARED.PutCharPtr1
jsr SHARED.FORPNT.PutNext
lda A2osX.NumStrBuf+1
jmp SHARED.PutCharPtr1
jmp SHARED.FORPNT.PutNext
*--------------------------------------
K.StrFTime.DAY >PSTR "???"
TIMEX.DAY >PSTR "???"
>PSTR "Monday"
>PSTR "Tuesday"
>PSTR "Wednesday"
@ -141,7 +153,7 @@ K.StrFTime.DAY >PSTR "???"
>PSTR "Saturday"
>PSTR "Sunday"
*--------------------------------------
K.StrFTime.MON >PSTR "???"
TIMEX.MON >PSTR "???"
>PSTR "January"
>PSTR "February"
>PSTR "March"
@ -155,16 +167,15 @@ K.StrFTime.MON >PSTR "???"
>PSTR "November"
>PSTR "December"
*--------------------------------------
K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
*--------------------------------------
K.PTime2Time.I ldy #1
lda (TXTPTR),y Get Year
jsr SHARED.TXTPTR.GetY Get Year
lsr C is high bit of month
ldy #S.Time.YEAR
sta (FORPNT),y set year
jsr SHARED.FORPNT.PutY set year
sta ARG32+3 for computing Century/WDAY later
lda (TXTPTR) Get Month/day
ldy #0
jsr SHARED.TXTPTR.GetY Get Month/day
pha save Day
ror
@ -173,11 +184,16 @@ K.PTime2Time.I ldy #1
lsr
lsr
ldy #S.Time.MONTH
sta (FORPNT),y set month
jsr SHARED.FORPNT.PutY set month
sta K.ComputeWDAY.1+1
pla get back day
and #$1F
iny
sta (FORPNT),y set day
jsr SHARED.FORPNT.PutY set day
dec adjust range 0.30 for MOD 7
sta ARG32.Sign For later...
lda ARG32+3 get back year
cmp #69 if before 70 CC,if > 70, CS
@ -185,29 +201,30 @@ K.PTime2Time.I ldy #1
rol get back C in bit 0
eor #1 toggle C
adc #19 set date before 1970 -> 20xx
sta (FORPNT) set Century
ldy #0
jsr SHARED.FORPNT.PutY set Century
sta ARG32+2 for computing WDAY later
ldy #2
lda (TXTPTR),y Get Min
jsr SHARED.TXTPTR.GetY Get Min
tax
iny
lda (TXTPTR),y Get Hour
jsr SHARED.TXTPTR.GetY Get Hour
ldy #S.Time.HOUR
sta (FORPNT),y set hour
jsr SHARED.FORPNT.PutY set hour
iny
txa
sta (FORPNT),y set min
jsr SHARED.FORPNT.PutY set min
iny
lda #0
sta (FORPNT),y set seconds (ProDOS does not provide it)
jsr SHARED.FORPNT.PutY set seconds (ProDOS does not provide it)
*--------------------------------------
* 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
lda #CENTURY0
lda #CENT0
sta ARG32
lda #YEAR0
sta ARG32+1
@ -218,7 +235,7 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
cpy ARG32+2
bne .2
cmp ARG32+3
beq .4
beq K.ComputeWDAY.1
.2 jsr TIMEX.IsLeap CS = Leap
@ -238,16 +255,14 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
inc ARG32
bra .1
*--------------------------------------
.4 ldy #S.Time.MONTH
lda (FORPNT),y get month
tax
K.ComputeWDAY.1 ldx #$ff SELF MODIFIED : month
dex don't include actual month
beq .71
.5 clc assume NO leap
lda K.StrFTime.MDAY-1,x get day count in this month
lda TIMEX.MDAY-1,x get day count in this month
bne .6 february ?
ldy ARG32+2
@ -255,7 +270,7 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
jsr TIMEX.IsLeap CS = Leap
.6 pla
adc K.StrFTime.MDAY-1,x
adc TIMEX.MDAY-1,x
cmp #7
bcc .7
@ -266,10 +281,9 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
bne .5
.71 pla
ldy #S.Time.DAY
clc
adc (FORPNT),y get day in month (1..31)
dec adjust range 0.30 for MOD 7
adc ARG32.Sign get day in month (0..30)
.8 cmp #7 MOD 7
bcc .80
@ -278,10 +292,12 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
.80 inc adjust range 1..7
ldy #S.Time.WDAY
sta (FORPNT),y
jsr SHARED.FORPNT.PutY
clc
rts
*--------------------------------------
TIMEX.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
*--------------------------------------
K.CTime2Time.I ldy #3
.1 lda (ZPPtr1),y
@ -316,7 +332,7 @@ K.CTime2Time.I ldy #3
tya
ldy #S.Time.WDAY
sta (ZPPtr2),y
ldy #CENTURY0
ldy #CENT0
sty ZPPtr3
lda #YEAR0
sta ZPPtr3+1

View File

@ -47,7 +47,6 @@ A2osX.AUX .DA #0
A2osX.AUX.B .PH $1000
.INB USR/SRC/SYS/KERNEL.S.OSDX
.INB USR/SRC/SYS/KERNEL.S.SLISTX
.INB USR/SRC/SYS/KERNEL.S.PWDX
Mem.XLoMem .EQ *
.EP
A2osX.AUX.S .EQ *-A2osX.AUX.B
@ -56,8 +55,9 @@ A2osX.AUXH .DA #0
.DA A2osX.AUXH.S
A2osX.AUXH.B .PH Mem.XHiMem
.INB USR/SRC/SYS/KERNEL.S.TERM
.INB USR/SRC/SYS/KERNEL.S.TERMX
.INB USR/SRC/SYS/KERNEL.S.MD5X
.INB USR/SRC/SYS/KERNEL.S.PWDX
.INB USR/SRC/SYS/KERNEL.S.TIMEX
.EP
A2osX.AUXH.S .EQ *-A2osX.AUXH.B
@ -107,16 +107,15 @@ A2osX.E0.B .PH $E000
.INB USR/SRC/SYS/KERNEL.S.IRQ
.INB USR/SRC/SYS/KERNEL.S.MEM
.INB USR/SRC/SYS/KERNEL.S.MATH
.INB USR/SRC/SYS/KERNEL.S.TERMLC
.INB USR/SRC/SYS/KERNEL.S.TERM
.INB USR/SRC/SYS/KERNEL.S.SHARED
.INB USR/SRC/SYS/KERNEL.S.STDIO2
.INB USR/SRC/SYS/KERNEL.S.PWD
.INB USR/SRC/SYS/KERNEL.S.TIME
********* TMP ***** go to A2osX.D1
* go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.IO
.INB USR/SRC/SYS/KERNEL.S.PIPE
.INB USR/SRC/SYS/KERNEL.S.PFT
********* TMP ***** go to A2osX.D2
DevMgr.Timer .BS 1
DevMgr.ASCREEN .BS 1