From a40a5660b8006a82257847212e46b42a09131c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 21 Jan 2020 12:06:59 +0100 Subject: [PATCH] Kernel 0.93++ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes SYS/KERNEL.S.SHARED.txt | 36 ++++++------- SYS/KERNEL.S.TERM.txt | 2 +- SYS/KERNEL.S.TERMX.txt | 2 +- SYS/KERNEL.S.TIME.txt | 14 ++--- SYS/KERNEL.S.TIMEX.txt | 112 ++++++++++++++++++++++----------------- SYS/KERNEL.S.txt | 9 ++-- 7 files changed, 96 insertions(+), 79 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3663be69c96726d66193ed865282b644cd875305..0e62e2dcf005d90f240cc150b7bc13357b2556c5 100644 GIT binary patch delta 19154 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 XOkXkmh3Oln@0flNr=a&EwBP+d34`Zc diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt index 88413d5c..39860279 100644 --- a/SYS/KERNEL.S.SHARED.txt +++ b/SYS/KERNEL.S.SHARED.txt @@ -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 diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 10d19fe9..19c029e4 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -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 diff --git a/SYS/KERNEL.S.TERMX.txt b/SYS/KERNEL.S.TERMX.txt index c6fca118..6e1f22d4 100644 --- a/SYS/KERNEL.S.TERMX.txt +++ b/SYS/KERNEL.S.TERMX.txt @@ -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 diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 1f0906f6..33dd0115 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -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 diff --git a/SYS/KERNEL.S.TIMEX.txt b/SYS/KERNEL.S.TIMEX.txt index 10badb66..647bcfe9 100644 --- a/SYS/KERNEL.S.TIMEX.txt +++ b/SYS/KERNEL.S.TIMEX.txt @@ -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 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 2e00eafd..ddb94980 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -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