From 53ba642a71c40991e8659cac2bc683b693be4f80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 3 Jul 2019 17:25:07 +0200 Subject: [PATCH] Kernel 0.93 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes SYS/KERNEL.S.DEF.txt | 14 +- SYS/KERNEL.S.ENV.txt | 4 +- SYS/KERNEL.S.MEM.txt | 67 -------- SYS/KERNEL.S.NUM.txt | 339 ++++++++++++++++++++++++++++++++++----- SYS/KERNEL.S.PWDX.txt | 4 +- SYS/KERNEL.S.STDIO.txt | 169 ++++--------------- SYS/KERNEL.S.STDLIB.txt | 176 +------------------- SYS/KERNEL.S.TERM.txt | 4 +- SYS/KERNEL.S.TIME.txt | 195 ++++++++-------------- SYS/KERNEL.S.txt | 3 +- 11 files changed, 426 insertions(+), 549 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 5f457691e54d1e6569d76e61794a9a597dd8174c..9412c95722bec8ed5fa24972968d72aaeb552540 100644 GIT binary patch delta 60480 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 PegOSwyTka&w(tJ|8Ro!8 delta 60786 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 diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index a3bb7e8f..32446368 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -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 : diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 4ba11a42..ce1fd413 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -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 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 91a2571c..a983b451 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -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 diff --git a/SYS/KERNEL.S.NUM.txt b/SYS/KERNEL.S.NUM.txt index 9a966f77..ec5e7c8a 100644 --- a/SYS/KERNEL.S.NUM.txt +++ b/SYS/KERNEL.S.NUM.txt @@ -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 diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index 1f4111eb..82d2dd10 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -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 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 052b1388..e689db39 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -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 diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 0eeda129..dff72f57 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -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 diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index ec45876e..8c3d9206 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -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 diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index c52d64f1..3347e8de 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -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" diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 7e2ff311..d8a50bc0 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -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