diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 02d7f977..6fedfd64 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -110,7 +110,6 @@ MemMgr.XHiMem .EQ $C000 A2osX.SYSCALL .EQ $BE00 A2osX.LIBCALL .EQ $BE03 A2osX.MLICALL .EQ $BE06 -A2osX.ROMCALL .EQ $BE09 *-------------------------------------- pCodeJmp .EQ $BE10 pLibJmp .EQ $BE13 @@ -173,6 +172,11 @@ SYS.PStr2StrArrayYA .EQ $1A SYS.LoadDrvYA .EQ $20 SYS.LoadLibYA .EQ $22 SYS.UnloadLibA .EQ $24 + +SYS.TimeYA .EQ $28 +SYS.CTime2Time .EQ $2A +SYS.PTime2Time .EQ $2C +SYS.StrFTime .EQ $2E *-------------------------------------- SYS.ExpandPStrYA .EQ $32 @@ -290,9 +294,9 @@ SYS.FEOF .EQ $EE SYS.REMOVE .EQ $F0 SYS.RENAME .EQ $F2 SYS.OPENDIRYA .EQ $F4 -SYS.READDIRYA .EQ $F6 +SYS.READDIRA .EQ $F6 -SYS.CLOSEDIRYA .EQ $F8 +SYS.CLOSEDIRA .EQ $F8 SYS.MKDIRYA .EQ $FA SYS.MKNOD .EQ $FC SYS.MKFIFO .EQ $FE diff --git a/INC/IO.I.txt b/INC/IO.I.txt index 2698e78d..248ce1b5 100644 --- a/INC/IO.I.txt +++ b/INC/IO.I.txt @@ -25,7 +25,7 @@ SET80DISP .EQ $C00D W CLRALTCHAR .EQ $C00E W SETALTCHAR .EQ $C00F W KBDSTROBE .EQ $C010 W -RDBNK2 .EQ $C011 R +RDLCBNK2 .EQ $C011 R RDLCRAM .EQ $C012 R RDREADAUX .EQ $C013 R RDWRITEAUX .EQ $C014 R @@ -91,5 +91,7 @@ RRAMBNK1 .EQ $C088 R RROMWRAMBNK1 .EQ $C089 RR RROMBNK1 .EQ $C08A R RRAMWRAMBNK1 .EQ $C08B RR +*-------------------------------------- +CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards MAN SAVE INC/IO.I diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index b33a5cb3..58ee4338 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -365,22 +365,37 @@ Cmd.Exec.SETVAR tax >SYSCALL SYS.COutA .9 rts *-------------------------------------- -Cmd.Exec.DATE >SYSCALL SYS.MLIGetTime +Cmd.Exec.DATE >LDYA L.TIME + >SYSCALL SYS.TimeYA + + >PUSHWI TmpBuffer256 + >PUSHW L.FMT.DATE + >PUSHW L.TIME + >SYSCALL SYS.StrFTime + + >LDYAI TmpBuffer256 + >SYSCALL SYS.PSTROutYA bcs .9 - >PUSHW DATELO - >LIBCALL hLIBSTR,LIBSTR.PRINTDATE + lda #13 >SYSCALL SYS.COutA - clc .9 rts *-------------------------------------- -Cmd.Exec.TIME >SYSCALL SYS.MLIGetTime +Cmd.Exec.TIME >LDYA L.TIME + >SYSCALL SYS.TimeYA + + >PUSHWI TmpBuffer256 + >PUSHW L.FMT.TIME + >PUSHW L.TIME + + >SYSCALL SYS.StrFTime + + >LDYAI TmpBuffer256 + >SYSCALL SYS.PSTROutYA bcs .9 - >PUSHW TIMELO - >LIBCALL hLIBSTR,LIBSTR.PRINTTIME + lda #13 >SYSCALL SYS.COutA - clc .9 rts *-------------------------------------- Cmd.Exec.ECHO lda ARGS diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index fe038507..ab606ad5 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -38,12 +38,14 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT *-------------------------------------- -L.LIBSTR .DA LIBSTR L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.ERROR .DA MSG.ERROR L.ENV.PATH .DA ENV.PATH L.CMD .DA CMD L.ARGS .DA ARGS +L.TIME .DA TIME +L.FMT.DATE .DA FMT.DATE +L.FMT.TIME .DA FMT.TIME L.CMDS .DA CMDS J.INTCMDS .DA Cmd.Exec.CD .DA Cmd.Exec.DATE @@ -57,11 +59,7 @@ J.INTCMDS .DA Cmd.Exec.CD .DA Cmd.Exec.TYPE .DA 0 *-------------------------------------- -CS.INIT >LDYA L.LIBSTR - >SYSCALL SYS.LoadLibYA - bcs .9 - sta hLIBSTR - >SYSCALL SYS.GetArgC +CS.INIT >SYSCALL SYS.GetArgC cmp #1 beq CS.INIT.INTERACTIVE no arg, continue starting interactive @@ -321,12 +319,8 @@ CS.QUIT jsr HIS.Quit .1 ldy #hInputBuffer lda (pData),y - beq .2 - >SYSCALL SYS.FreeMemA - -.2 lda hLIBSTR beq .8 - >SYSCALL SYS.UnloadLibA + >SYSCALL SYS.FreeMemA .8 clc rts @@ -442,14 +436,15 @@ CMDS >PSTRING "CD" >PSTRING "TYPE" .HS 00 *-------------------------------------- -LIBSTR >PSTRING "libstr.o" MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n" MSG.ERROR >PSTRING "[%h]\n" +FMT.DATE >PSTRING "%Y/%m/%d" +FMT.TIME >PSTRING "%H:%M:%S" EscChars >PSTRING "DBAC" EscAscii .HS 04080A0B15 CMD .BS 256 ARGS .BS 256 -hLIBSTR .BS 1 +TIME .BS S.TIME hNEWPATH .BS 1 hCmdLine .BS 1 Cmd.Exec.Mode .BS 1 diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index b6127b7a..92f902f3 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -257,6 +257,17 @@ S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF clc rts *-------------------------------------- +S.MKDIRYA jsr S.PFTCHECKPATHYA + >STYA MLICALL.PARAMS+1 + lda #$C3 + sta MLICALL.PARAMS+3 Access + lda #$0F + sta MLICALL.PARAMS+4 type=Directory + lda #$0D Storage=Linked List + sta MLICALL.PARAMS+7 + >MLICALL MLICREATE + rts +*-------------------------------------- hONLINE .BS 1 hDIRENT .BS 1 BufSize .BS 2 diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index 4cbffeb6..7f32d8b3 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -293,17 +293,6 @@ S.RENAME jsr S.PFTCHECKPATHYA >MLICALL MLIRENAME rts *-------------------------------------- -S.MKDIRYA jsr S.PFTCHECKPATHYA - >STYA MLICALL.PARAMS+1 - lda #$C3 - sta MLICALL.PARAMS+3 Access - lda #$0F - sta MLICALL.PARAMS+4 type=Directory - lda #$0D Storage=Linked List - sta MLICALL.PARAMS+7 - >MLICALL MLICREATE - rts -*-------------------------------------- FIL.SetupPrt1A jsr S.GetMemPtrA >STYA ZPQuickPtr1 ldy #S.FILE.PRODOS.REF diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index f5e37e26..ad7bd6a1 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -27,9 +27,6 @@ A2osX.GP.Start jmp A2osX.SYSCALL1 *-------------------------------------- jmp A2osX.MLICALL1 *-------------------------------------- - jmp A2osX.ROMCALL1 -*-------------------------------------- - jmp BrkHandler .BS $BE10-* *-------------------------------------- jmp (pCode) pCodeJmp @@ -41,13 +38,15 @@ A2osX.GP.Start jmp A2osX.SYSCALL1 GO.Reset jsr GO.AUXLC jmp S.KernelRun *-------------------------------------- -A2osX.SYSCALL1 bit KERNEL.SYSCALL.FLAGS,x +A2osX.SYSCALL1 phx + bit KERNEL.SYSCALL.FLAGS,x bmi .2 - bit RRAMWRAMBNK1 - bit RRAMWRAMBNK1 - jmp (KERNEL.SYSCALL,x) -.2 bit RRAMWRAMBNK2 - bit RRAMWRAMBNK2 + ldx #RRAMWRAMBNK1 + .HS 2C +.2 ldx #RRAMWRAMBNK2 + bit $C000,x + bit $C000,x + plx jmp (KERNEL.SYSCALL,x) *-------------------------------------- A2osX.LIBCALL1 pha @@ -68,51 +67,57 @@ A2osX.MLICALL1 jsr GO.MAINLC jsr GO.AUXLC rts *-------------------------------------- -A2osX.ROMCALL1 plx - stx .1+1 - plx - stx .1+2 - ldx RROMBNK1 - jsr .1 - ldx RRAMWRAMBNK1 - ldx RRAMWRAMBNK1 - rts -.1 jmp $FFFF -*-------------------------------------- -GO.MAINLC php +GO.MAINLC asl RDLCBNK2 We re coming from AUXLC, saving bank... + ror A2osX.SaveLCBNK + + php clc .HS 2C bit abs GO.AUXLC php sec + sei sta A2osX.SaveA - pla keep P in A for later stx A2osX.SaveX sty A2osX.SaveY - plx + + pla Restore P in A for later + + plx Get PC and add 1 for return ply inx bne .1 iny + .1 stx GO.EXIT.JMP+1 sty GO.EXIT.JMP+2 - ldx RRAMWRAMBNK1 - ldx RRAMWRAMBNK1 - ldy pStack - bcs GO.AUXLC1 -GO.MAINLC1 tsx + bcs .2 if CS, go AUXLC + + bit RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1 + bit RRAMWRAMBNK1 + + tsx stx A2osX.SaveSX ldx A2osX.SaveSM txs - stx CLRALTZP + sta CLRALTZP bra GO.EXIT -*-------------------------------------- -GO.AUXLC1 stx SETALTZP + +.2 bit A2osX.SaveLCBNK Go AUXLC....Previous Go MAINLC Coming from BNK2 ? + bmi .3 + ldx #RRAMWRAMBNK1 + .HS 2C bit abs +.3 ldx #RRAMWRAMBNK2 + + bit $C000,x + bit $C000,x + + sta SETALTZP tsx stx A2osX.SaveSM ldx A2osX.SaveSX @@ -126,6 +131,7 @@ GO.EXIT sty pStack plp GO.EXIT.JMP jmp $FFFF *-------------------------------------- +A2osX.SaveLCBNK .BS 1 A2osX.SaveA .BS 1 A2osX.SaveX .BS 1 A2osX.SaveY .BS 1 @@ -141,8 +147,6 @@ A2osX.GP.End .EQ * .DO A2osX.GP.End>$BEDF ERROR:GP too big .FIN -*-------------------------------------- - .BS A2osX.GP.START+$100-* *-------------------------------------- MAN SAVE SYS/KERNEL.S.GP diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 9c2e6970..3d6c5349 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -29,10 +29,10 @@ KERNEL.SYSCALL .DA S.GetMem $00 .DA S.LoadLibYA .DA S.UnloadLibA .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA S.TimeYA + .DA S.CTime2Time + .DA S.PTime2Time + .DA S.StrFTime *-------------------------------------- .DA 0 $30 .DA S.ExpandPStrYA @@ -133,21 +133,21 @@ KERNEL.SYSCALL .DA S.GetMem $00 .DA S.DecOutA .DA S.DecOutYA *-------------------------------------- - .DA 0 $E0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA S.FOPEN $E0 + .DA S.FCLOSEA + .DA S.FREAD + .DA S.FWRITE + .DA S.FFLUSHA + .DA S.FSEEK + .DA S.FTELLA + .DA S.FEOFA *-------------------------------------- - .DA 0 $F0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA S.REMOVEYA $F0 + .DA S.RENAME + .DA S.OPENDIRYA + .DA S.READDIRA + .DA S.CLOSEDIRA + .DA S.MKDIRYA .DA 0 .DA 0 *-------------------------------------- diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 4373cd48..cc969527 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -12,6 +12,75 @@ CENTURY0 .EQ 19 YEAR0 .EQ 70 DAY0 .EQ 4 day 0 was a thursday *-------------------------------------- +* S.TimeYA get System Time +* In : +* Y,A = PTR to S.TIME +* Out : +* S.TIME filled with ProDOS MLI date/time +*-------------------------------------- +S.TimeYA >STYA ZPQuickPtr2 + >MLICALL MLIGETTIME + >LDYAI DATELO + >STYA ZPQuickPtr1 + bra S.PTime2Time.1 +*-------------------------------------- +* In : +* PULLW = Src PDATE/TIME (DWORD) +* PULLW = Dst PTR To S.TIME +*-------------------------------------- +S.PTime2Time >PULLW ZPQuickPtr1 + >PULLW ZPQuickPtr2 + +S.PTime2Time.1 lda (ZPQuickPtr1) Get Year + lsr C is high bit of month + ldy #S.TIME.YEAR + sta (ZPQuickPtr2),y set year + pha save it for century adjust + + ldy #1 + lda (ZPQuickPtr1),y Get Month/day + pha save Day + ror + lsr + lsr + lsr + lsr + ldy #S.TIME.MONTH + sta (ZPQuickPtr2),y set month + + pla get back day + and #$1F + iny + sta (ZPQuickPtr2),y set day + + pla get back year + + cmp #70 if before 70's CC + lda #19 + adc #0 set date before 1970 -> 20xx + sta (ZPQuickPtr2) set Century + + ldy #3 + lda (ZPQuickPtr1),y Get Min + tax + dey + lda (ZPQuickPtr1),y Get Hour + + ldy #S.TIME.HOUR + sta (ZPQuickPtr2),y set hour + iny + txa + sta (ZPQuickPtr2),y set min + iny + lda #0 + sta (ZPQuickPtr2),y set seconds (ProDOS does not provide it) + +S.ComputeWDAY + + + clc + rts +*-------------------------------------- * S.CTime2Time * In : * PULLW = Src CTIME DWORD @@ -201,75 +270,6 @@ S.CTime.Mod .BS 1 S.CTime.Century .BS 1 S.CTime.Year .BS 1 *-------------------------------------- -* S.TimeYA get System Time -* In : -* Y,A = PTR to S.TIME -* Out : -* S.TIME filled with ProDOS MLI date/time -*-------------------------------------- -S.TimeYA >STYA ZPQuickPtr2 - >MLICALL MLIGETTIME - >LDYAI DATELO - >STYA ZPQuickPtr1 - bra S.PTime2Time.1 -*-------------------------------------- -* In : -* PULLW = Src PDATE/TIME (DWORD) -* PULLW = Dst PTR To S.TIME -*-------------------------------------- -S.PTime2Time >PULLW ZPQuickPtr1 - >PULLW ZPQuickPtr2 - -S.PTime2Time.1 lda (ZPQuickPtr1) Get Year - lsr C is high bit of month - ldy #S.TIME.YEAR - sta (ZPQuickPtr2),y set year - pla save it for century adjust - - ldy #1 - lda (ZPQuickPtr1),y Get Month/day - pha save Day - ror - lsr - lsr - lsr - lsr - ldy #S.TIME.MONTH - sta (ZPQuickPtr2),y set month - - pla get back day - and #$1F - iny - sta (ZPQuickPtr2),y set day - - pla get back year - - cmp #70 if before 70's CC - lda #19 - adc #0 set date before 1970 -> 20xx - sta (ZPQuickPtr2) set Century - - ldy #3 - lda (ZPQuickPtr1),y Get Min - tax - dey - lda (ZPQuickPtr1),y Get Hour - - ldy #S.TIME.HOUR - sta (ZPQuickPtr2),y set hour - iny - txa - sta (ZPQuickPtr2),y set min - iny - lda #0 - sta (ZPQuickPtr2),y set seconds (ProDOS does not provide it) - -S.ComputeWDAY - - - clc - rts -*-------------------------------------- * S.StrFTime * In : * PULLW = Src PTR To S.TIME @@ -293,15 +293,21 @@ S.ComputeWDAY *-------------------------------------- S.StrFTime >PULLW ZPQuickPtr1 >PULLW ZPQuickPtr2 - >PULLW S.StrFTime.addChar+1 + >PULLW ZPQuickPtr3 - ldy #0 + lda #0 + sta (ZPQuickPtr3) Reset target PSTR length + + tay .1 iny lda (ZPQuickPtr2),y cmp #'%' beq .2 + + phy jsr S.StrFTime.addChar + ply .10 tya cmp (ZPQuickPtr2) bne .1 @@ -312,7 +318,7 @@ S.StrFTime >PULLW ZPQuickPtr1 beq .8 iny - ldx #S.StrFTime.jmp-S.StrFTime.Table + ldx #S.StrFTime.JMPL-S.StrFTime.Table .3 lda (ZPQuickPtr2),y cmp S.StrFTime.Table-1,x @@ -330,8 +336,7 @@ S.StrFTime >PULLW ZPQuickPtr1 ply bra .10 -.8 rts - +.8 rts *-------------------------------------- S.StrFTime.A S.StrFTime.AA @@ -341,27 +346,33 @@ S.StrFTime.D ldy #S.TIME.DAY bra S.StrFTime.addDecPtr1Y S.StrFTime.HH ldy #S.TIME.HOUR bra S.StrFTime.addDecPtr1Y -S.StrFTime.II +S.StrFTime.II ldy #S.TIME.HOUR + lda (ZPQuickPtr1),y + cmp #12 + bcc .1 + sbc #12 +.1 bra S.StrFTime.addDecA S.StrFTime.M ldy #S.TIME.MONTH bra S.StrFTime.addDecPtr1Y S.StrFTime.MM ldy #S.TIME.MINUTE bra S.StrFTime.addDecPtr1Y -S.StrFTime.P +S.StrFTime.P ldy #S.TIME.HOUR + lda (ZPQuickPtr1),y + cmp #12 + bcc .1 + lda #'p' + .HS 2C bit abs +.1 lda #'a' + jsr S.StrFTime.addChar + lda #'m' + bra S.StrFTime.addChar S.StrFTime.SS ldy #S.TIME.SECOND bra S.StrFTime.addDecPtr1Y -S.StrFTime.W +S.StrFTime.W ldy #S.TIME.WDAY + bra S.StrFTime.addDecPtr1Y S.StrFTime.YY ldy #S.TIME.CENTURY jsr S.StrFTime.addDecPtr1Y S.StrFTime.Y ldy #S.TIME.YEAR - bra S.StrFTime.addDecPtr1Y - - - - - - - - *-------------------------------------- S.StrFTime.addDecPtr1Y lda (ZPQuickPtr1),y @@ -376,42 +387,47 @@ S.StrFTime.addDecA pla and #$0f ora #$30 +*-------------------------------------- S.StrFTime.addChar - sta $ffff - inc S.StrFTime.addChar+1 - bne .1 - inc S.StrFTime.addChar+2 -.1 rts + pha + lda (ZPQuickPtr3) + inc + sta (ZPQuickPtr3) + tay + pla + sta (ZPQuickPtr3),y + rts *-------------------------------------- S.StrFTime.Table .AS "aAbBdHImMpSwyY" -S.StrFTime.JMPL .HS #S.StrFTime.A - .HS #S.StrFTime.AA - .HS #S.StrFTime.B - .HS #S.StrFTime.BB - .HS #S.StrFTime.D - .HS #S.StrFTime.HH - .HS #S.StrFTime.II - .HS #S.StrFTime.M - .HS #S.StrFTime.MM - .HS #S.StrFTime.P - .HS #S.StrFTime.SS - .HS #S.StrFTime.W - .HS #S.StrFTime.Y - .HS #S.StrFTime.YY -S.StrFTime.JMPH .HS /S.StrFTime.A - .HS /S.StrFTime.AA - .HS /S.StrFTime.B - .HS /S.StrFTime.BB - .HS /S.StrFTime.D - .HS /S.StrFTime.HH - .HS /S.StrFTime.II - .HS /S.StrFTime.M - .HS /S.StrFTime.MM - .HS /S.StrFTime.P - .HS /S.StrFTime.SS - .HS /S.StrFTime.W - .HS /S.StrFTime.Y - .HS /S.StrFTime.YY +S.StrFTime.JMPL .DA #S.StrFTime.A + .DA #S.StrFTime.AA + .DA #S.StrFTime.B + .DA #S.StrFTime.BB + .DA #S.StrFTime.D + .DA #S.StrFTime.HH + .DA #S.StrFTime.II + .DA #S.StrFTime.M + .DA #S.StrFTime.MM + .DA #S.StrFTime.P + .DA #S.StrFTime.SS + .DA #S.StrFTime.W + .DA #S.StrFTime.Y + .DA #S.StrFTime.YY +*-------------------------------------- +S.StrFTime.JMPH .DA /S.StrFTime.A + .DA /S.StrFTime.AA + .DA /S.StrFTime.B + .DA /S.StrFTime.BB + .DA /S.StrFTime.D + .DA /S.StrFTime.HH + .DA /S.StrFTime.II + .DA /S.StrFTime.M + .DA /S.StrFTime.MM + .DA /S.StrFTime.P + .DA /S.StrFTime.SS + .DA /S.StrFTime.W + .DA /S.StrFTime.Y + .DA /S.StrFTime.YY *-------------------------------------- S.StrFTime.SDAY >PSTRING "Mon" >PSTRING "Tue" @@ -420,6 +436,7 @@ S.StrFTime.SDAY >PSTRING "Mon" >PSTRING "Fri" >PSTRING "Sat" >PSTRING "Sun" +*-------------------------------------- S.StrFTime.LDAY >PSTRING "Monday" >PSTRING "Tuesday" >PSTRING "Wednesday" @@ -427,6 +444,7 @@ S.StrFTime.LDAY >PSTRING "Monday" >PSTRING "Friday" >PSTRING "Saturday" >PSTRING "Sunday" +*-------------------------------------- S.StrFTime.SMON >PSTRING "Jan" >PSTRING "Feb" >PSTRING "Mar" @@ -439,6 +457,7 @@ S.StrFTime.SMON >PSTRING "Jan" >PSTRING "Oct" >PSTRING "Nov" >PSTRING "Dec" +*-------------------------------------- S.StrFTime.LMON >PSTRING "January" >PSTRING "February" >PSTRING "March"