diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po
index a65d17bb..126727fb 100644
Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ
diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po
index d02ed288..f942c98e 100644
Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ
diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt
index 33ceddee..a6748c1f 100644
--- a/BIN/LS.S.txt
+++ b/BIN/LS.S.txt
@@ -39,7 +39,8 @@ L.MSG.FILE .DA MSG.FILE
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
L.STAT .DA STAT
L.TIME.Format .DA TIME.Format
-L.TIME.Buffer .DA TIME.Buffer
+L.TIME.Create .DA TIME.Create
+L.TIME.Mod .DA TIME.Mod
.DA 0
*--------------------------------------
CS.INIT >SYSCALL SYS.GetArgC
@@ -218,36 +219,14 @@ CS.RUN.DEV ldy #S.STAT.PRODOS.DEVBLOCKS+1
>SYSCALL SYS.PrintFYA
rts
*--------------------------------------
-CS.RUN.DIR >PUSHW ZPPtr1
+CS.RUN.DIR jsr CS.RUN.PUSHDATES
+
+ >PUSHW ZPPtr1
>LDYA L.MSG.DIR
>SYSCALL SYS.PrintFYA
rts
*--------------------------------------
-CS.RUN.FILE >PUSHW L.TIME.Buffer
- >PUSHW L.TIME.Format
- lda ZPPtr2
- clc
- adc #S.STAT.MTIME
- tay
- lda ZPPtr2+1
- adc #0
- >PUSHYA
- >SYSCALL SYS.PStrFTime
-
- >PUSHW L.TIME.Buffer ModTime
-
- >PUSHW L.TIME.Buffer
- >PUSHW L.TIME.Format
- lda ZPPtr2
- clc
- adc #S.STAT.CTIME
- tay
- lda ZPPtr2+1
- adc #0
- >PUSHYA
- >SYSCALL SYS.PStrFTime
-
- >PUSHW L.TIME.Buffer Create Time
+CS.RUN.FILE jsr CS.RUN.PUSHDATES
lda ZPPtr2
clc
@@ -274,6 +253,33 @@ CS.RUN.FILE >PUSHW L.TIME.Buffer
>SYSCALL SYS.PrintFYA
rts
*--------------------------------------
+CS.RUN.PUSHDATES
+ >PUSHW L.TIME.Mod
+ >PUSHW L.TIME.Format
+ lda ZPPtr2
+ clc
+ adc #S.STAT.MTIME
+ tay
+ lda ZPPtr2+1
+ adc #0
+ >PUSHYA
+ >SYSCALL SYS.PStrFTime
+
+ >PUSHW L.TIME.Create
+ >PUSHW L.TIME.Format
+ lda ZPPtr2
+ clc
+ adc #S.STAT.CTIME
+ tay
+ lda ZPPtr2+1
+ adc #0
+ >PUSHYA
+ >SYSCALL SYS.PStrFTime
+
+ >PUSHW L.TIME.Mod ModTime
+ >PUSHW L.TIME.Create Create Time
+ rts
+*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
@@ -360,7 +366,7 @@ FileType2PSTR ldy #0
*--------------------------------------
CS.END
MSG.DEV >CSTRING "%15S S%d,D%d Blocks Used:%5D,Total:%5D\n"
-MSG.DIR >CSTRING "/%15S
\n"
+MSG.DIR >CSTRING "/%15S %S %S\n"
MSG.FILE >CSTRING "%15S %S $%H %10u %S %S\n"
*--------------------------------------
PRODOS.FT.HEX .HS 0406FAFCFDE2FF
@@ -372,8 +378,9 @@ PRODOS.FT.TXT >PSTRING "TXT"
>PSTRING "ATK"
>PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ "
-TIME.Format >PSTRING "%y-%b-%d %H:%M"
-TIME.Buffer .BS 16
+TIME.Format >PSTRING "%d-%b-%Y %H:%M"
+TIME.Create .BS 20
+TIME.Mod .BS 20
HEXDIGIT .AS '0123456789ABCDEF'
hFullPath .BS 1
STAT .BS S.STAT
diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt
index d13f6cc3..ab3eb6cd 100644
--- a/BIN/MEMDUMP.S.txt
+++ b/BIN/MEMDUMP.S.txt
@@ -36,7 +36,6 @@ CS.START cld
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
-L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
@@ -46,12 +45,7 @@ L.MSG5 .DA MSG5
L.MSG6 .DA MSG6
.DA 0
*--------------------------------------
-CS.INIT >LDYA L.LIBSTR
- >SYSCALL SYS.LoadLibYA
- bcs .9
- sta hLIBSTR
-
- ldy #MEM.COUNT Skip SLOT0
+CS.INIT ldy #MEM.COUNT Skip SLOT0
lda (pData),y
inc
sta (pData),y
@@ -79,8 +73,8 @@ CS.RUN ldy #bCANCEL
lda (pData),y
bne .1
- >PUSHW L.MSG0
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG0
+ >SYSCALL SYS.PrintFYA
.1 ldy #MEM.COUNT
lda (pData),y
@@ -129,20 +123,20 @@ CS.RUN ldy #bCANCEL
>PUSHB (pData),y
ldy #USED.COUNT
>PUSHB (pData),y
- >PUSHW L.MSG2
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG2
+ >SYSCALL SYS.PrintFYA
>PUSHW MemMgr.HiMem
- >PUSHW L.MSG3
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG3
+ >SYSCALL SYS.PrintFYA
>PUSHW MemMgr.Free
- >PUSHW L.MSG4
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG4
+ >SYSCALL SYS.PrintFYA
>PUSHW MemMgr.LoMem
- >PUSHW L.MSG5
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG5
+ >SYSCALL SYS.PrintFYA
lda MemMgr.Free
sec
@@ -152,8 +146,8 @@ CS.RUN ldy #bCANCEL
sbc MemMgr.LoMem+1
>PUSHYA
- >PUSHW L.MSG6
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG6
+ >SYSCALL SYS.PrintFYA
sec
rts
*--------------------------------------
@@ -188,8 +182,8 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda (pData),y
>PUSHA
- >PUSHW L.MSG1
- >LIBCALL hLIBSTR,LIBSTR.PRINTF
+ >LDYA L.MSG1
+ >SYSCALL SYS.PrintFYA
ldy #S.MEM.BIN
lda (ZPPTR1),y
@@ -300,13 +294,10 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
.9 sec
rts
*--------------------------------------
-CS.QUIT lda hLIBSTR
- >SYSCALL SYS.UnloadLibA
- clc
+CS.QUIT clc
rts
*--------------------------------------
CS.END
-LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
MSG1 >CSTRING " %03d %b %03d %03d $%H %05D "
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
@@ -314,7 +305,6 @@ MSG3 >CSTRING "High Memory: $%H\n"
MSG4 >CSTRING "Free ULimit: $%H\n"
MSG5 >CSTRING "Low Memory: $%H\n"
MSG6 >CSTRING "\nFree Memory: %D Bytes.\n"
-hLIBSTR .BS 1
*--------------------------------------
.DUMMY
.OR 0
diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt
index 30b9e6d2..81fc50ea 100644
--- a/SYS/KERNEL.S.CIO.txt
+++ b/SYS/KERNEL.S.CIO.txt
@@ -451,13 +451,13 @@ DEC2HEX stz HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
- bcs .9 overflow!!!
+* bcs .9 overflow!!!
asl HEXBUF HEXBUF * 4 -> HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
- bcs .9 overflow!!!
+* bcs .9 overflow!!!
pla HEXBUF * 4 + HEXBUF -> HEXBUF
adc HEXBUF
@@ -471,13 +471,13 @@ DEC2HEX stz HEXBUF
pla
adc HEXBUF+3
sta HEXBUF+3
- bcs .99 overflow!!!
+* bcs .99 overflow!!!
asl HEXBUF HEXBUF * 10 -> HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
- bcs .99 overflow!!!
+* bcs .99 overflow!!!
inx
lda ASCBUF,x
@@ -496,11 +496,11 @@ DEC2HEX stz HEXBUF
bne .1
rts
-.9 pla discard saved HEXBUF
- pla
- pla
- pla
-.99 rts
+*.9 pla discard saved HEXBUF
+* pla
+* pla
+* pla
+*.99 rts
*--------------------------------------
*ACCESS .AS "drwxrwxrwx"
HEXBUF .BS 4 32 bits max
diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt
index df678e44..ddf5924f 100644
--- a/SYS/KERNEL.S.DIR.txt
+++ b/SYS/KERNEL.S.DIR.txt
@@ -22,7 +22,7 @@ K.OPENDIRYA jsr PFT.CheckPathYA
bcs .9
>STYA ZPQuickPtr1
- stx K.OPENDIRYA.hDIR
+ stx K.READDIRA.hDir
lda (ZPQuickPtr2)
cmp #1 One char ?
@@ -59,7 +59,7 @@ K.OPENDIRYA jsr PFT.CheckPathYA
ldy #S.DIR.PRODOS.REF
sta (ZPQuickPtr1),y
-.8 lda K.OPENDIRYA.hDIR
+.8 lda K.READDIRA.hDir
clc
rts
@@ -69,24 +69,25 @@ K.OPENDIRYA jsr PFT.CheckPathYA
sec
.99 rts
*--------------------------------------
-K.OPENDIRYA.hDIR .BS 1
-*--------------------------------------
* In :
* A = hDIR
* Out :
* CC : X = hDIREND, Y,A = PTR to S.DIRENT
* CS : A = EC, A = 0 : no more entry
*--------------------------------------
+K.READDIRA.hDir .BS 1
K.READDIRA.hMem .BS 1
K.READDIRA.hDIRENT .BS 1
K.READDIRA.BufSize .BS 2
-K.READDIRA.EL .BS 1
-K.READDIRA.EBP .BS 1
-K.READDIRA.EC .BS 2
K.READDIRA.ECIB .BS 1
K.READDIRA.EC2Return .BS 1
+*--S.DIR Cache ------------------------
+K.READDIRA.EL .BS 1
+K.READDIRA.EPB .BS 1
+K.READDIRA.EC .BS 2
*--------------------------------------
K.READDIRA jsr PFT.CheckDirA
+ sta K.READDIRA.hDir
jsr K.GetMemPtrA
>STYA ZPQuickPtr1
@@ -227,9 +228,7 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
tax
jmp K.GetMemPtrA
*--------------------------------------
-K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
- lda (ZPQuickPtr1),y
- sta MLICALL.PARAMS+1
+K.READDIRA.DIR sta MLICALL.PARAMS+1 A=#S.DIR.PRODOS.REF
>PUSHWI 512 Get a 512 bytes buffer for reading dir...
>PUSHBI 0
@@ -284,12 +283,12 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
bpl .3
.4 ldx K.READDIRA.EC
- cpx K.READDIRA.EBP
+ cpx K.READDIRA.EPB
lda K.READDIRA.EC+1
sbc #0
bcc .5 We have less than EPB to read
- ldx K.READDIRA.EBP
+ ldx K.READDIRA.EPB
.5 stx K.READDIRA.ECIB
stz K.READDIRA.EC2Return
@@ -341,15 +340,17 @@ K.READDIRA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block
.8 dex
bne K.READDIRA.DIR1
-* pass #2 Fill Buffer...
+* pass #2 Fill Buffer...(ZPQuickPtr1 & Ptr2 can now be trashed)
K.READDIRA.DIR2 jsr K.READDIRA.GetBuf
bcs .98
- ldy #S.DIR.PRODOS.EL Check if first run....
- lda (ZPQuickPtr1),y
- bne .73
+* ldy #S.DIR.PRODOS.EL Check if first run....
+* lda (ZPQuickPtr1),y
+* bne .73
- lda (ZPQuickPtr3)
+.71 lda (ZPQuickPtr3)
+ beq .78 Empty slot, skip
+
and #$F0
cmp #$F0 Vol Header ?
bne .72
@@ -362,20 +363,20 @@ K.READDIRA.DIR2 jsr K.READDIRA.GetBuf
jsr K.READDIRA.ADD..
bra .78
-.73 lda K.READDIRA.EC
+.73 lda K.READDIRA.EC Regular FILE/DIR
sec
sbc #1
sta K.READDIRA.EC
- bcs .74
lda K.READDIRA.EC+1
sbc #0
sta K.READDIRA.EC+1 CC, we reached $ffff
bcc .80 no more file to list...
-.74 lda (ZPQuickPtr3)
- beq .78
+ jsr K.READDIRA.AddFNToBuf
+ jsr K.READDIRA.ClrStat
+ lda (ZPQuickPtr3)
and #$F0
cmp #$D0 Directory ?
bne .75
@@ -392,12 +393,16 @@ K.READDIRA.DIR2 jsr K.READDIRA.GetBuf
inc ZPQuickPtr3+1
.79 dec K.READDIRA.ECIB
- bne .72
+ bne .71
.80
* lda #0 S.MEM.F.INIT0 already did this
* sta (ZPQuickPtr4) Ending 0
+ lda K.READDIRA.hDir Restore ZPQuickPtr1 trashed by STR API calls
+ jsr K.GetMemPtrA
+ >STYA ZPQuickPtr1
+
ldx #3
ldy #S.DIR.PRODOS.EL+3
@@ -437,48 +442,35 @@ K.READDIRA.ADD. ldx #1 filename="1."
K.READDIRA.ADD..
ldx #2 filename="2.."
txa
- jsr K.READDIRA.AddToBuf
- lda #'.' filename="1."
+ jsr K.READDIRA.AddToBuf Add LEN
+ lda #'.'
-.1 jsr K.READDIRA.AddToBuf
+.1 jsr K.READDIRA.AddToBuf Add X dot(s)
dex
bne .1
jsr K.READDIRA.ClrStat
- lda #$0F
- sta KrnBuf256+S.STAT.PRODOS.TYPE
-
* ldy #$25 total_blocks
* lda (ZPQuickPtr3),y
* sta KrnBuf256+S.STAT.BLOCKS
* iny
* lda (ZPQuickPtr3),y
* sta KrnBuf256+S.STAT.BLOCKS+1
-
- bra K.READDIRA.ADDSTAT
*--------------------------------------
-K.READDIRA.ADDD jsr K.READDIRA.AddFNToBuf
-
- jsr K.READDIRA.ClrStat
-
- lda #$0F
+K.READDIRA.ADDD lda #$0F
sta KrnBuf256+S.STAT.PRODOS.TYPE
bra K.READDIRA.ADDSTAT
*--------------------------------------
-K.READDIRA.ADDF jsr K.READDIRA.AddFNToBuf
-
- jsr K.READDIRA.ClrStat
-
- ldx #ADDF.DST-ADDF.SRC
+K.READDIRA.ADDF ldx #ADDF.DST-ADDF.SRC
.1 ldy ADDF.SRC-1,x
lda (ZPQuickPtr3),y
ldy ADDF.DST-1,x
sta KrnBuf256,y
dex
bpl .1
-
+
>PUSHWI KrnBuf256+S.STAT.CTIME
lda #$18 creation Date/time
jsr K.READDIRA.ConvertTime
@@ -540,7 +532,7 @@ K.READDIRA.ConvertTime
lda ZPQuickPtr3+1
adc #0
>PUSHYA
- jmp K.PTime2Time
+ jmp K.PTime2Time Will destroy Ptr1 & Ptr2 !!!!
*--------------------------------------
ADDF.SRC .HS 1013141516171f20
ADDF.DST .DA #S.STAT.PRODOS.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1
@@ -551,7 +543,7 @@ ADDF.DST .DA #S.STAT.PRODOS.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1
* A = hDIR
*--------------------------------------
K.CLOSEDIRA jsr PFT.CheckDirA
- sta K.OPENDIRYA.hDIR
+ sta K.READDIRA.hDir
jsr K.GetMemPtrA
>STYA ZPQuickPtr1
@@ -561,12 +553,12 @@ K.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
sta MLICALL.PARAMS+1
>MLICALL MLICLOSE
-.1 ldy #S.DIR.PRODOS.IOBUF
+.1 ldy #S.DIR.PRODOS.IOBUF
lda (ZPQuickPtr1),y
beq .2
jsr K.FreeMemA
-.2 lda K.OPENDIRYA.hDIR
+.2 ldaK.READDIRA.hDir
jsr K.FreeMemA
clc
rts
diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt
index 4dd8b4f6..6d3ea445 100644
--- a/SYS/KERNEL.S.STR.txt
+++ b/SYS/KERNEL.S.STR.txt
@@ -298,26 +298,26 @@ K.PStrFTime.JMPH .DA /K.PStrFTime.A
.DA /K.PStrFTime.Y
.DA /K.PStrFTime.YY
*--------------------------------------
-K.PStrFTime.A ldx #3 Max Len
+K.PStrFTime.A ldx #3 Short day of week, 3 chars...
.HS 2C Bit abs
-K.PStrFTime.AA ldx #15
+K.PStrFTime.AA ldx #15 full DoW
>LDYAI K.PStrFTime.DAY
>STYA ZPQuickPtr4
ldy #S.Time.WDAY
bra K.PStrFTime.STR
-K.PStrFTime.B ldx #3
+K.PStrFTime.B ldx #3 Short Month, 3 chars....
.HS 2C Bit abs
-K.PStrFTime.BB ldx #15
+K.PStrFTime.BB ldx #15 full Month....
>LDYAI K.PStrFTime.MON
>STYA ZPQuickPtr4
ldy #S.Time.MONTH
K.PStrFTime.STR lda (ZPQuickPtr1),y get required S.Time field value
tay
- beq .8 Illegal value
+ beq .9 Illegal value
.1 dey range 0..x
beq .2
@@ -342,8 +342,10 @@ K.PStrFTime.STR lda (ZPQuickPtr1),y get required S.Time field value
tay
dex
bne .3
+.8 rts
-.8 rts
+.9 lda #'?'
+ jmp K.PStrFTime.addChar
K.PStrFTime.D ldy #S.Time.DAY
bra K.PStrFTime.addDecPtr1Y
@@ -382,6 +384,7 @@ K.PStrFTime.addDecPtr1Y
K.PStrFTime.addDecA
sta K.PStrFTime.BIN
stz K.PStrFTime.DEC
+
sed
ldx #8
@@ -393,17 +396,18 @@ K.PStrFTime.addDecA
dex
bne .1
+
cld
* lda K.PStrFTime.DEC already in A
-
+ pha
lsr
lsr
lsr
lsr
ora #$30
jsr K.PStrFTime.addChar
- lda K.PStrFTime.DEC
+ pla
and #$0f
ora #$30
*--------------------------------------
diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt
index 645b4dfb..9c3024f8 100644
--- a/SYS/KERNEL.S.TIME.txt
+++ b/SYS/KERNEL.S.TIME.txt
@@ -14,9 +14,9 @@ DAY0 .EQ 4 day 0 was a thursday
*--------------------------------------
* K.TimeYA get System Time
* In :
-* Y,A = PTR to K.Time
+* Y,A = PTR to S.TIME
* Out :
-* K.Time filled with ProDOS MLI date/time
+* S.TIME filled with System date/time
*--------------------------------------
K.TimeYA >STYA ZPQuickPtr2
>MLICALL MLIGETTIME
@@ -26,7 +26,7 @@ K.TimeYA >STYA ZPQuickPtr2
*--------------------------------------
* In :
* PULLW = Src PDATE/TIME (DWORD)
-* PULLW = Dst PTR To K.Time
+* PULLW = Dst PTR To S.TIME
*--------------------------------------
K.PTime2Time >PULLW ZPQuickPtr1
>PULLW ZPQuickPtr2
@@ -163,7 +163,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
* K.CTime2Time
* In :
* PULLW = Src CTIME DWORD
-* PULLW = Dst PTR To K.Time
+* PULLW = Dst PTR To S.TIME
*--------------------------------------
K.CTime2Time >PULLW ZPQuickPtr1
>PULLW ZPQuickPtr2