Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-07-03 17:25:07 +02:00
parent 5c330415ca
commit 53ba642a71
11 changed files with 426 additions and 549 deletions

Binary file not shown.

View File

@ -41,15 +41,25 @@ DRV.BLK.BlkNum .EQ $47
*--------------------------------------
*INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA
RESULT .EQ $62 ->$66 used in FMULT FDIV
TMP32.Sign .EQ RESULT
TMP32 .EQ RESULT+1
*--------------------------------------
ZPTMP .EQ $67 ->$84 29 bytes
*--------------------------------------
FORPNT .EQ $85 ->$86
FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2
* FAC.EXTENSION .EQ $AC
*--------------------------------------
ACC32.Sign .EQ FAC
ACC32 .EQ FAC+1
*--------------------------------------
ARG .EQ $A5 -> $A9 (5 bytes)
ARG.SIGN .EQ $AA
* FAC.EXTENSION .EQ $AC
*--------------------------------------
ARG32.Sign .EQ ARG
ARG32 .EQ ARG+1
*--------------------------------------
* CHARGET .EQ $B1
* CHARGOT .EQ $B7
TXTPTR .EQ $B8
@ -83,6 +93,8 @@ ROM.ATAN .EQ 38
*--------------------------------------
A2osX.SaveSM .EQ $100 Aux
A2osX.SaveSX .EQ $101 Aux
A2osX.NumStrLen .EQ $102 Aux
A2osX.NumStrBuf .EQ $103 Aux
*--------------------------------------
* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
* Main $300 -> 3EF : <free>

View File

@ -602,11 +602,11 @@ ENV.SysVarsCPID ldy #S.PS.CPID
lda (pPS),y
ENV.SysVarsNum jsr MEM.Byte2Str102
ENV.SysVarsNum jsr NUM.A2STR10NP
ldy #0
.1 lda $102,y
.1 lda A2osX.NumStrBuf,y
beq .8
iny

View File

@ -745,73 +745,6 @@ MEM.NextCharPtr2
inc ZPPtr2+1
.8 rts
*--------------------------------------
* Convert A to CSTR at $102
*--------------------------------------
MEM.Byte2Str102 stz .2+1 0xx
stz .3+1 x00
phx
ldx #8
sed
.1 asl
pha
.2 lda #$ff Self Modified
adc .2+1
sta .2+1
.3 lda #$ff Self Modified
adc .3+1
sta .3+1
pla
dex
bne .1
cld
ldx #0
lda .3+1 x00
beq .4
jsr .8
.4 lda .2+1
pha
lsr
lsr
lsr
lsr 0x0
bne .5
cpx #0
beq .6
.5 jsr .8
.6 pla
and #$0f 00x
jsr .8
stz $102,x
plx
rts
.8 ora #$30
sta $102,x
inx
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.MEM
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -1,16 +1,119 @@
NEW
AUTO 3,1
*--------------------------------------
ACC32.Sign .EQ FAC
ACC32 .EQ FAC+1
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
NUM.A2STR10 jsr NUM.A2ACC32
* ARG32*ACC32->TMP32
*--------------------------------------
NUM.MUL32 jsr NUM.TMP32ZERO
ldx #32
.2 lsr ARG32+3
ror ARG32+2
ror ARG32+1
ror ARG32
bcc .3
clc
lda TMP32
adc ACC32
sta TMP32
lda TMP32+1
adc ACC32+1
sta TMP32+1
lda TMP32+2
adc ACC32+2
sta TMP32+2
lda TMP32+3
adc ACC32+3
sta TMP32+3
.3 jsr ACC32.T2
dex
bne .2
clc
rts
*--------------------------------------
* ARG32 = ARG32 div ACC32
* TMP32 = ARG32 mod ACC32
*--------------------------------------
NUM.DIVMOD32 jsr NUM.TMP32ZERO
ldx #32
.1 asl ARG32
rol ARG32+1
rol ARG32+2
rol ARG32+3
rol TMP32
rol TMP32+1
rol TMP32+2
rol TMP32+3
sec
lda TMP32
sbc ACC32
pha
lda TMP32+1
sbc ACC32+1
pha
lda TMP32+2
sbc ACC32+2
pha
lda TMP32+3
sbc ACC32+3
bcs .2
pla
pla
pla
dex
bne .1
rts
.2 sta TMP32+3
pla
sta TMP32+2
pla
sta TMP32+1
pla
sta TMP32
inc ARG32 bit0 always 0 because of .1 asl
dex
bne .1
rts
*--------------------------------------
NUM.A2STR10NP ldx #3 3 didgit max
ldy #0 Disable Padding
NUM.A2STR10 jsr NUM.A2ACC32
clc unsigned
*--------------------------------------
* CS = signed long
* CC = unsigned long
* X = Pad Len
* Y = Pad Char
*--------------------------------------
NUM.ACC322STR10 bcc .1
NUM.ACC322STR10 stx .5+1 Pad Len
sty .81+1 Pad Char
stz A2osX.NumStrLen
bcc .1
clc
@ -21,17 +124,17 @@ NUM.ACC322STR10 bcc .1
sec
.1 php
.1 ror ACC32.Sign Save sign
ldx #4
.2 stz RESULT,x Clear all 5 bytes
.2 stz RESULT,x Clear all 5 bytes
dex
bpl .2
sed switch to BCD mode
sed switch to BCD mode
ldx #32 let's roll 32 bits
ldx #32 let's roll 32 bits
.3 asl ACC32
rol ACC32+1
@ -50,49 +153,205 @@ NUM.ACC322STR10 bcc .1
bne .3
cld
ldy #0
* ldx #0
plp
bcc .5
ldx .5+1 no padding
beq .6
lda #'-'
sta $102,x
inx
.5 stz $102,x
.50 tya
lda #10 starts at 10-padlen
sec
.5 sbc #$ff SELF MODIFIED
tax
.6 txa
lsr
tay
lda RESULT,y
bcs .6
bcs .7
lsr
lsr
lsr
lsr
.6 and #$0F
ora #$30
cmp #$30
lda $102,x
sta $102,x
.7 sta $102,x
inx
.7 and #$0F
ora #$30
cmp #'0'
beq .80
.8 iny
cpy #10
bne .50
ldy #'0' next 0s always printed
sty .81+1
stz $102,x
bra .82
.80 cpx #9 last char, print always
beq .82
.81 lda #$ff SELF MODIFIED Get Padding char
beq .87
.82 bit ACC32.Sign "-" to print ?
bpl .86
pha
lda #'-'
jsr .88
stz ACC32.Sign
pla
.86 jsr .88
.87 inx
cpx #10
bne .6
lda #0
.88 ldy A2osX.NumStrLen
inc A2osX.NumStrLen
sta A2osX.NumStrBuf,y
rts
*--------------------------------------
* Convert Hex int at ZPPtr2 to ACC32
*--------------------------------------
NUM.Hex2ACC32 lda (ZPPtr2)
beq .9
jsr MEM.IsHexDigit
bcs .9
jsr NUM.ACC32ZERO
sta ACC32
ldy #0
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsHexDigit
bcs .8
pha
ldx #4
.2 jsr ACC32.T2
bcs .99 overflow!!!
dex
bne .2
pla
ora ACC32
sta ACC32
bra .1
.8 clc
rts
.99 pla
.9 sec
rts
*--------------------------------------
* Convert Decimal int at ZPPtr2 to ACC32
*--------------------------------------
NUM.Dec2ACC32 jsr NUM.ACC32ZERO
clc
.99 rts
lda (ZPPtr2)
eor #'-'
bne .10
jsr MEM.NextCharPtr2 skip '-'
sec
.10 ror .80+1 set pos/neg flag
ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsDigit
bcs .8
phy Save Y, pointing to next char
jsr ACC32.T10
ply
bcs .9
lda (ZPPtr2),y
and #$0F
* clc
adc ACC32
sta ACC32
bcc .1
inc ACC32+1
bne .1
inc ACC32+2
bne .1
inc ACC32+3
bne .1 if 0, overflow!!!
.9 lda #E.INUM
sec
rts
.8 tya no digit parsed...error
beq .9
.80 lda #$FF SELF MODIFIED
bpl .88
jsr NUM.ACC32NEG
.88 clc
rts
*--------------------------------------
ACC32.T10 ldx #3
.1 lda ACC32,x save ACC32 for 4+1
pha
dex
bpl .1
jsr ACC32.T2 STDLIB.32 * 2 -> STDLIB.32
bcs ACC32.9 overflow!!!
jsr ACC32.T2 STDLIB.32 * 4 -> STDLIB.32
bcs ACC32.9 overflow!!!
ldx #0
ldy #4
* clc
.2 pla STDLIB.32 * 4 + STDLIB.32 -> STDLIB.32
adc ACC32,x
sta ACC32,x
inx
dey
bne .2
bcs ACC32.RTS overflow!!!
ACC32.T2 asl ACC32
rol ACC32+1
rol ACC32+2
rol ACC32+3
rts if CS, overflow!!!
ACC32.9 pla discard saved STDLIB.32
pla
pla
pla
ACC32.RTS rts
*--------------------------------------
NUM.A2ACC32 sta ACC32
.HS 2C BIT ABS
@ -102,6 +361,12 @@ NUM.ACC32ZERO stz ACC32
stz ACC32+3
rts
*--------------------------------------
NUM.TMP32ZERO stz TMP32
stz TMP32+1
stz TMP32+2
stz TMP32+3
rts
*--------------------------------------
NUM.ACC32NEG sec
ldy #0

View File

@ -502,14 +502,14 @@ PWD.StoreString iny
PWD.StoreByte php
phx
jsr MEM.Byte2Str102
jsr NUM.A2STR10NP
plx
plp
ldy #0
.1 lda $102,y
.1 lda A2osX.NumStrBuf,y
beq PWD.GetRecordLen.RTS
iny

View File

@ -1,10 +1,8 @@
NEW
AUTO 3,1
*--------------------------------------
HEXBUF .EQ FAC
K.PrintF.PadL .EQ FAC+4
K.PrintF.PadC .EQ FAC+5
HEXBUF.Signed .EQ ARG.SIGN
K.PrintF.PadL .EQ FAC+5
K.PrintF.PadC .EQ ARG.SIGN
*/--------------------------------------
* # putchar (BLOCKING)
* Print A (char) to StdOut
@ -291,8 +289,7 @@ K.PrintF.1 stz PrintF.Cnt
bne .10
stz K.PrintF.PadL
lda #' '
sta K.PrintF.PadC
stz K.PrintF.PadC
ldy #0
@ -321,6 +318,8 @@ K.PrintF.1 stz PrintF.Cnt
bne .51 second digit...
sta K.PrintF.PadL first digit, store.
lda #' '
sta K.PrintF.PadC and set pad char as SPACE
bra .2
.51 pha save it...
@ -372,12 +371,12 @@ K.PrintF.1 stz PrintF.Cnt
>LDYA ZPPtr1
>STYA ZPPtr2
jsr STDLIB.GetHex
jsr NUM.Hex2ACC32
bcs .99
jsr MEM.AddYToPtr1
.14 lda HEXBUF
.14 lda ACC32
bra .20
.19 lda PrintFTBL2.OUT,x
@ -481,13 +480,13 @@ PrintF.I sec signed short
.HS 90 BCC
PrintF.D clc unsigned short (BYTE)
ror HEXBUF.Signed
ror ACC32.Sign
jsr PrintF.GetByte
bcs PrintF.BB.RTS
sta HEXBUF
sta ACC32
stz HEXBUF+1
stz ACC32+1
ldx #0 one byte
@ -497,150 +496,43 @@ PrintF.II sec signed int
.HS 90 BCC
PrintF.DD clc unsigned int (WORD)
ror HEXBUF.Signed
ror ACC32.Sign
jsr PrintF.GetByte
bcs PrintF.BB.RTS
sta HEXBUF
sta ACC32
jsr PrintF.GetByte
bcs PrintF.BB.RTS
sta HEXBUF+1
sta ACC32+1
ldx #1 two bytes
PrintF.DD.1 stz HEXBUF+2
stz HEXBUF+3
bra PrintF.U.1
PrintF.DD.1 stz ACC32+2
stz ACC32+3
bra PrintF.NUM
PrintF.L sec signed long
.HS 90 BCC
PrintF.U clc unsigned long (DWORD)
ror HEXBUF.Signed
ror ACC32.Sign
ldx #$ff
.1 jsr PrintF.GetByte
bcs PrintF.BB.RTS
inx
sta HEXBUF,x
sta ACC32,x
cpx #3
bne .1
* ldx #3 4 bytes
PrintF.U.1 clc
bit HEXBUF.Signed
bpl PrintF.Hex2Dec unsigned, nothing to check
lda HEXBUF,x get sign
bpl PrintF.Hex2Dec
sec
ldy #0
.1 lda HEXBUF,y two's complement of X bytes
eor #$ff
adc #0
sta HEXBUF,y
iny
dex
bpl .1
sec tell to print a "-" sign....
*--------------------------------------
* Convert HEXBUF to ASCBUF decimal padded with 0
*--------------------------------------
PrintF.Hex2Dec ror HEXBUF.Signed
ldx #4
.1 stz RESULT,x Clear all 5 bytes
dex
bpl .1
sed switch to BCD mode
ldx #32 let's roll 32 bits
.2 asl HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
ldy #4
.3 lda RESULT,y
adc RESULT,y
sta RESULT,y
dey
bpl .3
dex
bne .2
cld
bit HEXBUF.Signed
bpl .9
lda #'-'
jsr PrintF.COut
bcs .99
.9 lda K.PrintF.PadL any Len format ?
beq .4 no
lda #10
sec yes, Print only digits starting at pos 10-K.PrintF.PadL
sbc K.PrintF.PadL
.4 tax x=0 if no K.PrintF.PadL, or x=10-K.PrintF.PadL
.5 txa X range 0 to 9
lsr CS if lo nibble (1,3,5,7,9)
tay
lda RESULT,y
bcs .6
lsr
lsr
lsr
lsr
.6 and #$0F
ora #$30
cmp #$30
beq .7 a zero?
inc K.PrintF.PadL found a non zero, Print all digits, even if 0, next time
ldy #'0'
sty K.PrintF.PadC
bra .8
.7 cpx #9 last digit ?
beq .8 Print always
ldy K.PrintF.PadL no pad to fill, do not Print 0
beq .10
lda K.PrintF.PadC fill with K.PrintF.PadC
.8 jsr PrintF.COut
bcs .99
.10 inx
cpx #10
bne .5
clc
.99 rts
PrintF.NUM ldx K.PrintF.PadL
ldy K.PrintF.PadC
rol ACC32.Sign
jsr NUM.ACC322STR10
bra PrintF.StrNum
*--------------------------------------
* EXP(8) 1(s) 1significants(31)
* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/
@ -656,7 +548,7 @@ PrintF.F clc
cmp (pStack)
bcc .1
bne .9 CS
bne PrintF.StrNum.RTS
.1 tya
sec +1
@ -673,13 +565,13 @@ PrintF.F clc
adc #5
sta PrintF.GetByte+1
ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX
ldy #A2osX.NumStrBuf+1 In order not to trash A2osX.SaveSM,A2osX.SaveSX
ldx #ROM.FOUT
jsr GP.ROMCALL
ldy #0
PrintF.StrNum ldy #0
.2 lda $102,y
.2 lda A2osX.NumStrBuf,y
beq .8
iny
@ -690,6 +582,7 @@ PrintF.F clc
.9 rts
.8 clc
PrintF.StrNum.RTS
rts
*--------------------------------------
PrintF.S ldy #$ff CSTR
@ -1087,20 +980,20 @@ K.SScanF.L
K.SScanF.U lda K.SScanFTBL+1,x Get VAR size
pha Save VAL size
jsr STDLIB.GetDec
jsr NUM.Dec2ACC32
bra K.SScanF.GetVAL
*--------------------------------------
K.SScanF.HH
K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
pha
jsr STDLIB.GetHex
jsr NUM.Hex2ACC32
K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed
.1 ply get back VAL size
.2 lda STDLIB.32-1,y
.2 lda ACC32-1,y
dey
sta (ZPPtr3),y
bne .2

View File

@ -87,21 +87,18 @@ K.StrToUL.rts rts
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
*STDLIB.32 .BS 4 32 bits max
STDLIB.32 .EQ FAC 32 bits max
*--------------------------------------
K.AToL >STYA ZPPtr2 C-String in Ptr2, Dst buffer in Ptr1
lda #10 base 10
sec signed
K.AToL.I jsr STDLIB.GetDec
K.AToL.I jsr NUM.Dec2ACC32
bcs .9
phy Save Count processed
ldy #3
.3 lda STDLIB.32,y
.3 lda ACC32,y
>PUSHA
dey
bpl .3
@ -126,171 +123,12 @@ K.atoi >STYA ZPPtr2
lda #10 base 10
sec signed
jsr STDLIB.GetDec
jsr NUM.Dec2ACC32
bcs .9
>LDYA STDLIB.32
.9 rts
*--------------------------------------
* Convert Hex int at ZPPtr2 to STDLIB.32
*--------------------------------------
STDLIB.GetHex lda (ZPPtr2)
beq .9
jsr MEM.IsHexDigit
bcs .9
jsr STDLIB.32.Clear
sta STDLIB.32
ldy #0
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsHexDigit
bcs .8
pha
ldx #4
.2 jsr STDLIB.32.T2
bcs .99 overflow!!!
dex
bne .2
pla
ora STDLIB.32
sta STDLIB.32
bra .1
.8 clc
rts
.99 pla
.9 sec
rts
*--------------------------------------
* Convert Decimal int at ZPPtr2 to STDLIB.32
*--------------------------------------
STDLIB.GetDec jsr STDLIB.32.Clear
clc
lda (ZPPtr2)
eor #'-'
bne .10
jsr MEM.NextCharPtr2 skip '-'
sec
.10 ror .80+1 set pos/neg flag
ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsDigit
bcs .8
phy Save Y, pointing to next char
jsr STDLIB.32.T10
ply
bcs .9
lda (ZPPtr2),y
and #$0F
* clc
adc STDLIB.32
sta STDLIB.32
bcc .1
inc STDLIB.32+1
bne .1
inc STDLIB.32+2
bne .1
inc STDLIB.32+3
bne .1 if 0, overflow!!!
.9 lda #E.INUM
sec
rts
.8 tya no digit parsed...error
beq .9
.80 lda #$FF SELF MODIFIED
bpl .88
ldx #4
ldy #0
sec
.81 lda STDLIB.32,y
eor #$ff
adc #0
sta STDLIB.32,y
iny
dex
bne .81
.88 clc
rts
*--------------------------------------
STDLIB.32.T10 ldx #3
.1 lda STDLIB.32,x save STDLIB.32 for 4+1
pha
dex
bpl .1
jsr STDLIB.32.T2 STDLIB.32 * 2 -> STDLIB.32
bcs STDLIB.32.9 overflow!!!
jsr STDLIB.32.T2 STDLIB.32 * 4 -> STDLIB.32
bcs STDLIB.32.9 overflow!!!
ldx #0
ldy #4
* clc
.2 pla STDLIB.32 * 4 + STDLIB.32 -> STDLIB.32
adc STDLIB.32,x
sta STDLIB.32,x
inx
dey
bne .2
bcs STDLIB.32.RTS overflow!!!
* STDLIB.32 * 2 -> STDLIB.32
STDLIB.32.T2 asl STDLIB.32
rol STDLIB.32+1
rol STDLIB.32+2
rol STDLIB.32+3
rts if CS, overflow!!!
STDLIB.32.9 pla discard saved STDLIB.32
pla
pla
pla
STDLIB.32.RTS rts
*--------------------------------------
STDLIB.32.Clear ldx #3
.1 stz STDLIB.32,x
dex
bpl .1
rts
>LDYA ACC32
.9
K.atoi.RTS rts
*/--------------------------------------
* # RealPath
* Return the canonicalized absolute pathname
@ -315,7 +153,7 @@ STDLIB.realpath.I
ldx #SYS.ExpandStr
jsr K.SYSCALL2.BANK
bcs STDLIB.32.RTS
bcs K.atoi.RTS
>STYA ZPPtr1
stx .99+1 save expanded buffer hMem

View File

@ -1133,11 +1133,11 @@ DRV.TERM.CURBLNK.SET
DRV.TERM.CURBLNK.RTS
rts
*--------------------------------------
Decimal.Out jsr MEM.Byte2Str102
Decimal.Out jsr NUM.A2STR10NP
ldx #0
.1 lda $102,x
.1 lda A2osX.NumStrBuf,x
beq DRV.TERM.CURBLNK.RTS

View File

@ -11,11 +11,6 @@ DAY0 .EQ 4 day 0 was a thursday
.DUMMY
.OR ZPTMP
TIME.DWORD .BS 4
TIME.DivDay .BS 2
TIME.ModDay .BS 3
TIME.Div60 .BS 2
TIME.Mod .BS 1
TIME.Div3600 .BS 1
TIME.Century .BS 1
TIME.Year .BS 1
.ED
@ -95,7 +90,7 @@ TIME.PTime2TimeP1P2
* 1/1/1970 was Thursday...if not leap, add one, if leap add 2
K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
pha
lda #19
sta TIME.DWORD
@ -182,134 +177,43 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
ldy #3
.1 lda (ZPPtr1),y
sta TIME.DWORD,y
sta ARG32,y ARG = ctime
dey
bpl .1
stz TIME.DivDay
stz TIME.DivDay+1
lda #SECSDAY ACC = SECSDAY
sta ACC32
.2 lda TIME.DWORD
sta TIME.ModDay
sec
sbc #SECSDAY
pha
lda /SECSDAY
sta ACC32+1
lda TIME.DWORD+1
sta TIME.ModDay+1
sbc /SECSDAY
pha
lda ^SECSDAY
sta ACC32+2
lda TIME.DWORD+2
sta TIME.ModDay+2
sbc ^SECSDAY
pha
stz ACC32+3
jsr NUM.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
lda TIME.DWORD+3
sbc #0
bcc .3 end of DIV/MOD ?
sta TIME.DWORD+3
ldx #2
.21 pla
sta TIME.DWORD,x
dex
bpl .21
inc TIME.DivDay
bne .2
inc TIME.DivDay+1
bne .2
.3 pla
pla
pla
stz TIME.Div60
stz TIME.Div60+1
.4 lda TIME.ModDay
sta TIME.Mod
sec
sbc #60
pha
lda TIME.ModDay+1
sbc #0
pha
lda TIME.ModDay+2
sbc #0
bcc .5
sta TIME.ModDay+2
pla
sta TIME.ModDay+1
pla
sta TIME.ModDay
inc TIME.Div60
bne .4
inc TIME.Div60+1
bne .4
.5 pla
pla
lda TIME.Mod
ldy #S.Time.SECOND
sta (ZPPtr2),y
stz TIME.Div3600
.6 lda TIME.Div60
sta TIME.Mod
sec
sbc #60
pha
lda TIME.Div60+1
sbc #0
pha
bcc .7
sta TIME.Div60+1
pla
sta TIME.Div60
inc TIME.Div3600
bne .6
.7 pla
lda TIME.Mod
dey ldy #S.Time.MINUTE
sta (ZPPtr2),y
lda TIME.Div3600
dey ldy #S.Time.HOUR
sta (ZPPtr2),y
lda TIME.DivDay WDAY computation : (DivDay + DAY0) mod 7
lda ARG32 WDAY computation : (ARG32 + DAY0) mod 7
clc
adc #DAY0
pha
lda TIME.DivDay+1
lda ARG32+1 65535 days = 179 years
adc /DAY0
eor #$ff
tax
pla
.8 sta TIME.Mod
.2 tay
sec
sbc #7
bcs .8
bcs .2
inx
bne .8
bne .2
lda TIME.Mod
tya
ldy #S.Time.WDAY
sta (ZPPtr2),y
@ -318,7 +222,8 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
lda #YEAR0
sta TIME.Year
K.CTime2Time.Year
K.CTime2Time.Year
.1 ldy TIME.Century
lda TIME.Year
jsr TIME.IsLeapYearYA if Leap year CS
@ -328,16 +233,16 @@ K.CTime2Time.Year
eor #1
lsr
lda TIME.DivDay
lda ARG32
sbc #365
pha
lda TIME.DivDay+1
lda ARG32+1
sbc /365
bcc .2
sta TIME.DivDay+1
sta ARG32+1
pla
sta TIME.DivDay
sta ARG32
inc TIME.Year
lda TIME.Year
@ -348,13 +253,46 @@ K.CTime2Time.Year
bne .1
.2 pla
lda TIME.Century
* ldy #S.Time.CENTURY
sta (ZPPtr2)
ldy #S.Time.YEAR
lda TIME.Year
sta (ZPPtr2),y
K.CTime2Time.HMS
ldx #3
.1 lda TMP32,x
sta ARG32,x
dex
bpl .1
lda #60
jsr NUM.A2ACC32
jsr NUM.DIVMOD32
ldy #S.TIME.SECOND
lda TMP32
sta (ZPPtr2),y
lda #60
jsr NUM.A2ACC32
jsr NUM.DIVMOD32
ldy #S.TIME.MINUTE
lda TMP32
sta (ZPPtr2),y
ldy #S.TIME.HOUR
lda ARG32
sta (ZPPtr2),y
clc
rts
*--------------------------------------
@ -559,17 +497,14 @@ K.StrFTime.MM ldy #S.Time.MINUTE
K.StrFTime.addDecPtr1Y
lda (ZPPtr3),y
K.StrFTime.addDecA
jsr MEM.Byte2Str102
ldx #2
ldy #'0'
clc
jsr NUM.A2STR10
lda $102
ldx $103
bne .1
tax
lda #$30
.1 jsr MEM.PutCharPtr1
txa
lda A2osX.NumStrBuf
jsr MEM.PutCharPtr1
lda A2osX.NumStrBuf+1
jmp MEM.PutCharPtr1
*--------------------------------------
K.StrFTime.DAY >PSTR "Monday"

View File

@ -46,6 +46,7 @@ A2osX.D1 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.STDIO
.INB USR/SRC/SYS/KERNEL.S.STDLIB
.INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.FIO
.EP
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
@ -60,11 +61,11 @@ A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP
.INB USR/SRC/SYS/KERNEL.S.IRQ
.INB USR/SRC/SYS/KERNEL.S.MEM
.INB USR/SRC/SYS/KERNEL.S.NUM
.INB USR/SRC/SYS/KERNEL.S.TERMLC
********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.PFT
.INB USR/SRC/SYS/KERNEL.S.IO
.INB USR/SRC/SYS/KERNEL.S.FIO
********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.PWD