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

View File

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

View File

@ -745,73 +745,6 @@ MEM.NextCharPtr2
inc ZPPtr2+1 inc ZPPtr2+1
.8 rts .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 MAN
SAVE USR/SRC/SYS/KERNEL.S.MEM SAVE USR/SRC/SYS/KERNEL.S.MEM
LOAD USR/SRC/SYS/KERNEL.S LOAD USR/SRC/SYS/KERNEL.S

View File

@ -1,16 +1,119 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
ACC32.Sign .EQ FAC * http://6502.org/source/integers/32muldiv.htm
ACC32 .EQ FAC+1 * 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 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 * CS = signed long
* CC = unsigned 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 clc
@ -21,17 +124,17 @@ NUM.ACC322STR10 bcc .1
sec sec
.1 php .1 ror ACC32.Sign Save sign
ldx #4 ldx #4
.2 stz RESULT,x Clear all 5 bytes .2 stz RESULT,x Clear all 5 bytes
dex dex
bpl .2 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 .3 asl ACC32
rol ACC32+1 rol ACC32+1
@ -50,49 +153,205 @@ NUM.ACC322STR10 bcc .1
bne .3 bne .3
cld cld
ldy #0 ldx .5+1 no padding
* ldx #0 beq .6
plp
bcc .5
lda #'-' lda #10 starts at 10-padlen
sta $102,x sec
inx .5 sbc #$ff SELF MODIFIED
tax
.5 stz $102,x
.6 txa
.50 tya
lsr lsr
tay tay
lda RESULT,y lda RESULT,y
bcs .7
bcs .6
lsr lsr
lsr lsr
lsr lsr
lsr lsr
.6 and #$0F
ora #$30
cmp #$30
lda $102,x
sta $102,x
.7 sta $102,x .7 and #$0F
inx ora #$30
cmp #'0'
beq .80
.8 iny ldy #'0' next 0s always printed
cpy #10 sty .81+1
bne .50
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 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 NUM.A2ACC32 sta ACC32
.HS 2C BIT ABS .HS 2C BIT ABS
@ -102,6 +361,12 @@ NUM.ACC32ZERO stz ACC32
stz ACC32+3 stz ACC32+3
rts rts
*-------------------------------------- *--------------------------------------
NUM.TMP32ZERO stz TMP32
stz TMP32+1
stz TMP32+2
stz TMP32+3
rts
*--------------------------------------
NUM.ACC32NEG sec NUM.ACC32NEG sec
ldy #0 ldy #0

View File

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

View File

@ -1,10 +1,8 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
HEXBUF .EQ FAC K.PrintF.PadL .EQ FAC+5
K.PrintF.PadL .EQ FAC+4 K.PrintF.PadC .EQ ARG.SIGN
K.PrintF.PadC .EQ FAC+5
HEXBUF.Signed .EQ ARG.SIGN
*/-------------------------------------- */--------------------------------------
* # putchar (BLOCKING) * # putchar (BLOCKING)
* Print A (char) to StdOut * Print A (char) to StdOut
@ -291,8 +289,7 @@ K.PrintF.1 stz PrintF.Cnt
bne .10 bne .10
stz K.PrintF.PadL stz K.PrintF.PadL
lda #' ' stz K.PrintF.PadC
sta K.PrintF.PadC
ldy #0 ldy #0
@ -321,6 +318,8 @@ K.PrintF.1 stz PrintF.Cnt
bne .51 second digit... bne .51 second digit...
sta K.PrintF.PadL first digit, store. sta K.PrintF.PadL first digit, store.
lda #' '
sta K.PrintF.PadC and set pad char as SPACE
bra .2 bra .2
.51 pha save it... .51 pha save it...
@ -372,12 +371,12 @@ K.PrintF.1 stz PrintF.Cnt
>LDYA ZPPtr1 >LDYA ZPPtr1
>STYA ZPPtr2 >STYA ZPPtr2
jsr STDLIB.GetHex jsr NUM.Hex2ACC32
bcs .99 bcs .99
jsr MEM.AddYToPtr1 jsr MEM.AddYToPtr1
.14 lda HEXBUF .14 lda ACC32
bra .20 bra .20
.19 lda PrintFTBL2.OUT,x .19 lda PrintFTBL2.OUT,x
@ -481,13 +480,13 @@ PrintF.I sec signed short
.HS 90 BCC .HS 90 BCC
PrintF.D clc unsigned short (BYTE) PrintF.D clc unsigned short (BYTE)
ror HEXBUF.Signed ror ACC32.Sign
jsr PrintF.GetByte jsr PrintF.GetByte
bcs PrintF.BB.RTS bcs PrintF.BB.RTS
sta HEXBUF sta ACC32
stz HEXBUF+1 stz ACC32+1
ldx #0 one byte ldx #0 one byte
@ -497,150 +496,43 @@ PrintF.II sec signed int
.HS 90 BCC .HS 90 BCC
PrintF.DD clc unsigned int (WORD) PrintF.DD clc unsigned int (WORD)
ror HEXBUF.Signed ror ACC32.Sign
jsr PrintF.GetByte jsr PrintF.GetByte
bcs PrintF.BB.RTS bcs PrintF.BB.RTS
sta HEXBUF sta ACC32
jsr PrintF.GetByte jsr PrintF.GetByte
bcs PrintF.BB.RTS bcs PrintF.BB.RTS
sta HEXBUF+1 sta ACC32+1
ldx #1 two bytes ldx #1 two bytes
PrintF.DD.1 stz HEXBUF+2 PrintF.DD.1 stz ACC32+2
stz HEXBUF+3 stz ACC32+3
bra PrintF.U.1 bra PrintF.NUM
PrintF.L sec signed long PrintF.L sec signed long
.HS 90 BCC .HS 90 BCC
PrintF.U clc unsigned long (DWORD) PrintF.U clc unsigned long (DWORD)
ror HEXBUF.Signed ror ACC32.Sign
ldx #$ff ldx #$ff
.1 jsr PrintF.GetByte .1 jsr PrintF.GetByte
bcs PrintF.BB.RTS bcs PrintF.BB.RTS
inx inx
sta HEXBUF,x sta ACC32,x
cpx #3 cpx #3
bne .1 bne .1
* ldx #3 4 bytes PrintF.NUM ldx K.PrintF.PadL
ldy K.PrintF.PadC
PrintF.U.1 clc rol ACC32.Sign
bit HEXBUF.Signed jsr NUM.ACC322STR10
bpl PrintF.Hex2Dec unsigned, nothing to check bra PrintF.StrNum
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
*-------------------------------------- *--------------------------------------
* EXP(8) 1(s) 1significants(31) * EXP(8) 1(s) 1significants(31)
* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/ * http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/
@ -656,7 +548,7 @@ PrintF.F clc
cmp (pStack) cmp (pStack)
bcc .1 bcc .1
bne .9 CS bne PrintF.StrNum.RTS
.1 tya .1 tya
sec +1 sec +1
@ -673,13 +565,13 @@ PrintF.F clc
adc #5 adc #5
sta PrintF.GetByte+1 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 ldx #ROM.FOUT
jsr GP.ROMCALL jsr GP.ROMCALL
ldy #0 PrintF.StrNum ldy #0
.2 lda $102,y .2 lda A2osX.NumStrBuf,y
beq .8 beq .8
iny iny
@ -690,6 +582,7 @@ PrintF.F clc
.9 rts .9 rts
.8 clc .8 clc
PrintF.StrNum.RTS
rts rts
*-------------------------------------- *--------------------------------------
PrintF.S ldy #$ff CSTR PrintF.S ldy #$ff CSTR
@ -1087,20 +980,20 @@ K.SScanF.L
K.SScanF.U lda K.SScanFTBL+1,x Get VAR size K.SScanF.U lda K.SScanFTBL+1,x Get VAR size
pha Save VAL size pha Save VAL size
jsr STDLIB.GetDec jsr NUM.Dec2ACC32
bra K.SScanF.GetVAL bra K.SScanF.GetVAL
*-------------------------------------- *--------------------------------------
K.SScanF.HH K.SScanF.HH
K.SScanF.H lda K.SScanFTBL+1,x Get VAR size K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
pha pha
jsr STDLIB.GetHex jsr NUM.Hex2ACC32
K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed
.1 ply get back VAL size .1 ply get back VAL size
.2 lda STDLIB.32-1,y .2 lda ACC32-1,y
dey dey
sta (ZPPtr3),y sta (ZPPtr3),y
bne .2 bne .2

View File

@ -87,21 +87,18 @@ K.StrToUL.rts rts
* ## RETURN VALUE * ## RETURN VALUE
* On stack (long) * 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 K.AToL >STYA ZPPtr2 C-String in Ptr2, Dst buffer in Ptr1
lda #10 base 10 lda #10 base 10
sec signed sec signed
K.AToL.I jsr STDLIB.GetDec K.AToL.I jsr NUM.Dec2ACC32
bcs .9 bcs .9
phy Save Count processed phy Save Count processed
ldy #3 ldy #3
.3 lda STDLIB.32,y .3 lda ACC32,y
>PUSHA >PUSHA
dey dey
bpl .3 bpl .3
@ -126,171 +123,12 @@ K.atoi >STYA ZPPtr2
lda #10 base 10 lda #10 base 10
sec signed sec signed
jsr STDLIB.GetDec jsr NUM.Dec2ACC32
bcs .9 bcs .9
>LDYA STDLIB.32 >LDYA ACC32
.9 rts .9
*-------------------------------------- K.atoi.RTS 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
*/-------------------------------------- */--------------------------------------
* # RealPath * # RealPath
* Return the canonicalized absolute pathname * Return the canonicalized absolute pathname
@ -315,7 +153,7 @@ STDLIB.realpath.I
ldx #SYS.ExpandStr ldx #SYS.ExpandStr
jsr K.SYSCALL2.BANK jsr K.SYSCALL2.BANK
bcs STDLIB.32.RTS bcs K.atoi.RTS
>STYA ZPPtr1 >STYA ZPPtr1
stx .99+1 save expanded buffer hMem stx .99+1 save expanded buffer hMem

View File

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

View File

@ -11,11 +11,6 @@ DAY0 .EQ 4 day 0 was a thursday
.DUMMY .DUMMY
.OR ZPTMP .OR ZPTMP
TIME.DWORD .BS 4 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.Century .BS 1
TIME.Year .BS 1 TIME.Year .BS 1
.ED .ED
@ -95,7 +90,7 @@ TIME.PTime2TimeP1P2
* 1/1/1970 was Thursday...if not leap, add one, if leap add 2 * 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 pha
lda #19 lda #19
sta TIME.DWORD sta TIME.DWORD
@ -182,134 +177,43 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
ldy #3 ldy #3
.1 lda (ZPPtr1),y .1 lda (ZPPtr1),y
sta TIME.DWORD,y sta ARG32,y ARG = ctime
dey dey
bpl .1 bpl .1
stz TIME.DivDay lda #SECSDAY ACC = SECSDAY
stz TIME.DivDay+1 sta ACC32
.2 lda TIME.DWORD lda /SECSDAY
sta TIME.ModDay sta ACC32+1
sec
sbc #SECSDAY
pha
lda TIME.DWORD+1 lda ^SECSDAY
sta TIME.ModDay+1 sta ACC32+2
sbc /SECSDAY
pha
lda TIME.DWORD+2 stz ACC32+3
sta TIME.ModDay+2
sbc ^SECSDAY jsr NUM.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
pha
lda TIME.DWORD+3 lda ARG32 WDAY computation : (ARG32 + DAY0) mod 7
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
clc clc
adc #DAY0 adc #DAY0
pha pha
lda TIME.DivDay+1
lda ARG32+1 65535 days = 179 years
adc /DAY0 adc /DAY0
eor #$ff eor #$ff
tax tax
pla pla
.8 sta TIME.Mod .2 tay
sec sec
sbc #7 sbc #7
bcs .8 bcs .2
inx inx
bne .8 bne .2
lda TIME.Mod tya
ldy #S.Time.WDAY ldy #S.Time.WDAY
sta (ZPPtr2),y sta (ZPPtr2),y
@ -318,7 +222,8 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
lda #YEAR0 lda #YEAR0
sta TIME.Year sta TIME.Year
K.CTime2Time.Year K.CTime2Time.Year
.1 ldy TIME.Century .1 ldy TIME.Century
lda TIME.Year lda TIME.Year
jsr TIME.IsLeapYearYA if Leap year CS jsr TIME.IsLeapYearYA if Leap year CS
@ -328,16 +233,16 @@ K.CTime2Time.Year
eor #1 eor #1
lsr lsr
lda TIME.DivDay lda ARG32
sbc #365 sbc #365
pha pha
lda TIME.DivDay+1 lda ARG32+1
sbc /365 sbc /365
bcc .2 bcc .2
sta TIME.DivDay+1 sta ARG32+1
pla pla
sta TIME.DivDay sta ARG32
inc TIME.Year inc TIME.Year
lda TIME.Year lda TIME.Year
@ -348,13 +253,46 @@ K.CTime2Time.Year
bne .1 bne .1
.2 pla .2 pla
lda TIME.Century lda TIME.Century
* ldy #S.Time.CENTURY * ldy #S.Time.CENTURY
sta (ZPPtr2) sta (ZPPtr2)
ldy #S.Time.YEAR ldy #S.Time.YEAR
lda TIME.Year lda TIME.Year
sta (ZPPtr2),y 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 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -559,17 +497,14 @@ K.StrFTime.MM ldy #S.Time.MINUTE
K.StrFTime.addDecPtr1Y K.StrFTime.addDecPtr1Y
lda (ZPPtr3),y lda (ZPPtr3),y
K.StrFTime.addDecA K.StrFTime.addDecA
jsr MEM.Byte2Str102 ldx #2
ldy #'0'
clc
jsr NUM.A2STR10
lda $102 lda A2osX.NumStrBuf
ldx $103 jsr MEM.PutCharPtr1
lda A2osX.NumStrBuf+1
bne .1
tax
lda #$30
.1 jsr MEM.PutCharPtr1
txa
jmp MEM.PutCharPtr1 jmp MEM.PutCharPtr1
*-------------------------------------- *--------------------------------------
K.StrFTime.DAY >PSTR "Monday" 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.STDIO
.INB USR/SRC/SYS/KERNEL.S.STDLIB .INB USR/SRC/SYS/KERNEL.S.STDLIB
.INB USR/SRC/SYS/KERNEL.S.DEV .INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.FIO
.EP .EP
A2osX.D2 .PH $D000 A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2 .DA #RRAMWRAMBNK2
@ -60,11 +61,11 @@ A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP .INB USR/SRC/SYS/KERNEL.S.JMP
.INB USR/SRC/SYS/KERNEL.S.IRQ .INB USR/SRC/SYS/KERNEL.S.IRQ
.INB USR/SRC/SYS/KERNEL.S.MEM .INB USR/SRC/SYS/KERNEL.S.MEM
.INB USR/SRC/SYS/KERNEL.S.NUM
.INB USR/SRC/SYS/KERNEL.S.TERMLC .INB USR/SRC/SYS/KERNEL.S.TERMLC
********* TMP ***** go to A2osX.D1 ********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.PFT
.INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.IO
.INB USR/SRC/SYS/KERNEL.S.FIO
********* TMP ***** go to A2osX.D2 ********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.PWD .INB USR/SRC/SYS/KERNEL.S.PWD