Time API : Work In Progress,used in SHELL For Testing

Kernel : Dual Bank implemented
This commit is contained in:
Rémy GIBERT 2016-09-05 18:00:11 +02:00
parent af6d616a9b
commit 6fea4ec153
9 changed files with 245 additions and 206 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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"