Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-01-30 16:23:00 +00:00
parent abe29c162d
commit dfa2b31ab7
11 changed files with 120 additions and 102 deletions

View File

@ -9,11 +9,11 @@ CL.Init >LDYAI 256
>STYA ZPCLBuf
txa
>STA.G CMD.hCLBuf
>STA.G CL.hCLBuf
.9 rts
*--------------------------------------
CL.Quit >LDA.G CMD.hCLBuf
CL.Quit >LDA.G CL.hCLBuf
beq .9
>SYSCALL FreeMem

View File

@ -8,7 +8,7 @@ CMD.Init >LDYAI 256
bcs .9
>STYA ZPArgVBuf
txa
>STA.G CMD.hArgVBuf
>STA.G CORE.hArgVBuf
lda #PUSHD.STACK
tay
@ -16,7 +16,7 @@ CMD.Init >LDYAI 256
.9 rts
*--------------------------------------
CMD.Quit ldy #CMD.hArgVBuf
CMD.Quit ldy #CORE.hArgVBuf
jsr .8
ldy #hFileBuf
@ -106,10 +106,10 @@ CMD.Get >LDYA ZPInputBufPtr
* - or -
* intcmd\0 arg1\0 arg2\0 ... \0
*--------------------------------------
CL.Parse >STZ.G CMD.IntCmd
CL.Parse >STZ.G CORE.IntCmd
lda #S.PS.F.HOLD+S.PS.F.DUPENV
>STA.G CMD.PSFlags
>STA.G CORE.PSFlags
>PUSHW ZPCLBuf
>LDYA ZPCLBuf
@ -126,7 +126,7 @@ CL.Parse >STZ.G CMD.IntCmd
.1 cmp #'#' comment ?
beq .8 yes, ignore remaining
>LDA.G CMD.IntCmd
>LDA.G CORE.IntCmd
bne .3 we already have Cmd, go check args
ldy #1
@ -137,7 +137,7 @@ CL.Parse >STZ.G CMD.IntCmd
cmp #'.' leading dot ?
bne .2
>LDA.G CMD.PSFlags yes, child process will run in same ENV
>LDA.G CORE.PSFlags yes, child process will run in same ENV
and #$ff^S.PS.F.DUPENV
sta (pData),y
bra .6 and skip this token
@ -176,7 +176,7 @@ CL.CheckCmd ldy #$ff
bra .4
.2 >PUSHW ZPCLBufPtr
>LDYA L.CMD.INT
>LDYA L.CORE.INT
jsr Lookup no / found, search internal...
bcs .4 not internal, search PATH
@ -184,7 +184,7 @@ CL.CheckCmd ldy #$ff
plx
bne .3
>LDA.G CMD.PSFlags if STARTPROC, skip keyword...
>LDA.G CORE.PSFlags if STARTPROC, skip keyword...
and #$ff^S.PS.F.HOLD
sta (pData),y ...and toggle S.PS.F.HOLD flag
clc
@ -194,7 +194,7 @@ CL.CheckCmd ldy #$ff
bcs .9
txa
>STA.G CMD.IntCmd
>STA.G CORE.IntCmd
clc
rts
@ -203,7 +203,7 @@ CL.CheckCmd ldy #$ff
jsr CL.AddYAToArgV
lda #$ff
>STA.G CMD.IntCmd
>STA.G CORE.IntCmd
clc
CL.CheckCmd.RTS
@ -223,7 +223,7 @@ CL.CheckIO >PUSHW ZPCLBufPtr
.9 lda #0
rts
*--------------------------------------
CL.IO.AMP >LDA.G CMD.PSFlags
CL.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
clc

View File

@ -3,7 +3,31 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
* Input : CMD.IntCmd,ZPArgVBuf
* From hCLBuf or hFileBuf
* Get Line from buf until ;, CR, \0 (EOL / EOF)
* :LOOP
* if previous | :
* set hStdIn = hStdOut
* set hStdOut = Std
* GetCmd from line until | or EOL
* if | :
* create PIPE
* set hStdOut -> PIPE
* CORE.Exec &
* :LOOP
* else CORE.Exec
*--------------------------------------
* SET VAR = `cmd args`, FOR VAR IN `cmd args`
* create PIPE
* set hStdOut -> PIPE
* CORE.Exec `cmd args` &
* set READMODE
* set hStdIn = hStdOut
* set hStdOut = Std
*--------------------------------------
CORE.Run
*--------------------------------------
* Input : CORE.IntCmd,ZPArgVBuf
*--------------------------------------
CORE.Exec jsr CORE.StkGet IF,WHILE,FOR ?
bcs .3 no particular context, exec...
@ -21,7 +45,7 @@ CORE.Exec jsr CORE.StkGet IF,WHILE,FOR ?
asl
bpl .8 parent context is FALSE, skip line
.3 >LDA.G CMD.IntCmd
.3 >LDA.G CORE.IntCmd
bpl .80 Internal
>PUSHB.G CORE.PSFlags
@ -31,7 +55,7 @@ CORE.Exec jsr CORE.StkGet IF,WHILE,FOR ?
tax CPID
>LDA.G CMD.PSFlags
>LDA.G CORE.PSFlags
and #S.PS.F.HOLD
bne .4
@ -106,7 +130,7 @@ CORE.INT.POPD.RTS
rts
CORE.INT.POPD.CSYN
jmp Cmd.Exec.CSYN
jmp CORE.Exec.CSYN
*--------------------------------------
CORE.INT.CD ldx #1
jsr CORE.GetArgX
@ -135,13 +159,13 @@ CORE.INT.CD.1 >SYSCALL realpath
lda (ZPPtr1),y
beq CORE.SetPrefixPHA we have '/'
>PUSHEA.G CMD.Stat
>PUSHEA.G StatBuf
>LDYA ZPPtr1
>SYSCALL STAT
bcs CORE.INT.CD.1.9
>LDA.G CMD.Stat+S.STAT.P.TYPE
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne CORE.INT.CD.1.9
@ -356,10 +380,10 @@ CORE.INT.DATE sec
.HS 90 bcc
CORE.INT.TIME clc
php
>LEA.G CORE.Time
>LEA.G TimeBuf
>SYSCALL Time
>PUSHEA.G CORE.Time
>PUSHEA.G TimeBuf
plp
bcc .1
@ -460,7 +484,7 @@ CORE.INT.GETKEY ldx #1
>PUSHEA.G M32.BUF
ldx #1
jsr Cmd.GetArgX
jsr CORE.GetArgX
>SYSCALL SetEnv
.9 rts
@ -501,9 +525,9 @@ CORE.INT.READ lda #1
txa
>STA.G hVarName
.7 >INC.G CMD.ArgIndex
.7 >INC.G CORE.ArgIndex
tax
jsr Cmd.GetArgX
jsr CORE.GetArgX
bcc .1
>LDA.G hVarName
@ -579,13 +603,13 @@ CORE.INT.RD ldx #1
bcs .9
phy
pha
>PUSHEA.G CORE.Stat
>PUSHEA.G StatBuf
pla
ply
>SYSCALL STAT
bcs .99
>LDA.G CORE.Stat+S.STAT.P.TYPE
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne .9
@ -790,7 +814,7 @@ CORE.Eval.UNARY ldx #3
CORE.Eval.D jsr CORE.Eval.DEF.7
bcs CORE.Eval.DEF.9
>LDA.G CORE.Stat+S.STAT.P.TYPE
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne CORE.Eval.DEF.9
bra CORE.Eval.DEF.8
@ -802,12 +826,12 @@ CORE.Eval.E jsr CORE.Eval.DEF.7
CORE.Eval.F jsr CORE.Eval.DEF.7
bcs CORE.Eval.DEF.9
>LDA.G CORE.Stat+S.STAT.P.TYPE
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
beq CORE.Eval.DEF.9
bra CORE.Eval.DEF.8
CORE.Eval.DEF.7 >PUSHEA.G CORE.Stat
CORE.Eval.DEF.7 >PUSHEA.G StatBuf
ldx #3
jsr CORE.GetArgX
>SYSCALL STAT
@ -963,7 +987,7 @@ CORE.GetEXP.GetNext
jsr CORE.GetArgX
rts
*--------------------------------------
CORE.GetArgX >LDYA ZPArgVBuf
CORE.GetArgX >LDYA ZPArgVBuf
dex
bmi .8

View File

@ -4,11 +4,11 @@ AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/SHELL2
.TF BIN/SHELL
*--------------------------------------
CL.MAX .EQ 159
History.MAX .EQ 256
CMD.STACK.MAX .EQ 64
CORE.STACK.MAX .EQ 64
PUSHD.STACK.MAX .EQ 8
*--------------------------------------
C.STARTPROC .EQ 0
@ -192,7 +192,7 @@ CS.RUN jsr CMD.Init
bra CS.RUN.LOOP
*--------------------------------------
.1 jsr Cmd.INT.CD.HOME
.1 jsr CORE.INT.CD.HOME
jsr CL.Init
jsr HIS.Init
bcs CS.INIT.RTS
@ -203,7 +203,7 @@ CS.RUN jsr CMD.Init
>SYSCALL printf
bcs CS.INIT.RTS
>PUSHEA.G CMD.Stat
>PUSHEA.G StatBuf
>LDYA L.HOME.PROFILE
>SYSCALL STAT
bcs CS.RUN.LOOP
@ -358,7 +358,7 @@ CS.RUN.BATCH >SYSCALL GetChar
clc
jmp CS.RUN.LOOP.END
.2 jsr CL.GetCmd
.2 jsr CMD.Get
bcc .7
cmp #C.EOF
@ -394,7 +394,7 @@ CS.RUN.Exec jsr CL.Parse
lda (ZPArgVBuf)
beq CS.RUN.LOOP.8
jsr CMD.Exec
jsr CORE.Exec
*--------------------------------------
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
@ -543,9 +543,10 @@ Lookup >STYA ZPPtr2
rts
*--------------------------------------
.INB USR/SRC/BIN/SHELL.S.CL
.INB USR/SRC/BIN/SHELL.S.HIS
.INB USR/SRC/BIN/SHELL.S.CORE
.INB USR/SRC/BIN/SHELL.S.CMD
.INB USR/SRC/BIN/SHELL.S.IO
.INB USR/SRC/BIN/SHELL.S.HIS
*--------------------------------------
CS.END
*--------------------------------------
@ -580,7 +581,7 @@ CL.IO .AZ "&"
.AZ "2>"
.HS 00
*--------------------------------------
CMD.INT .AZ "STARTPROC"
CORE.INT .AZ "STARTPROC"
.AZ "CD"
.AZ "DATE"
.AZ "ECHO"
@ -609,14 +610,17 @@ CMD.INT .AZ "STARTPROC"
.AZ "FI"
.HS 00
*--------------------------------------
CMD.Eval.TOKEN1 .AZ "!["
CORE.Eval.TOKEN1
.AZ "!["
.AZ "["
.HS 00
CMD.Eval.TOKEN2 .AZ "-d"
CORE.Eval.TOKEN2
.AZ "-d"
.AZ "-e"
.AZ "-f"
.HS 00
CMD.Eval.TOKEN3 .AZ "="
CORE.Eval.TOKEN3
.AZ "="
.AZ "!="
.AZ "-eq"
.AZ "-ne"
@ -625,7 +629,7 @@ CMD.Eval.TOKEN3 .AZ "="
.AZ "-gt"
.AZ "-ge"
.HS 00
CMD.Eval.TOKEN3.BITS
CORE.Eval.TOKEN3.BITS
.DA #%000
.DA #%000
.DA #%010
@ -634,7 +638,8 @@ CMD.Eval.TOKEN3.BITS
.DA #%110
.DA #%001
.DA #%011
CMD.Eval.TOKEN4 .AZ "+"
CORE.Eval.TOKEN4
.AZ "+"
.AZ "-"
.AZ "*"
.AZ "div"
@ -651,7 +656,7 @@ M32.Printf .AZ "%L"
.DUMMY
.OR 0
DS.START
CMD.STACK .BS CMD.STACK.MAX+1 pData (0 = Stack Ptr)
CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr)
PUSHD.STACK .BS PUSHD.STACK.MAX+1
hFileBuf .BS 1 batch mode
@ -672,17 +677,17 @@ CL.Ptr .BS 1
CL.Len .BS 1
CL.bExec .BS 1
CMD.IntCmd .BS 1
CMD.hArgVBuf .BS 1
CORE.IntCmd .BS 1
CORE.hArgVBuf .BS 1
CMD.ArgIndex .BS 1
CMD.Varname .BS 1
CMD.Test .BS 1
CMD.Operator .BS 1
CORE.ArgIndex .BS 1
CORE.Varname .BS 1
CORE.Test .BS 1
CORE.Operator .BS 1
CMD.PSFlags .BS 1
CMD.Stat .BS S.STAT
CMD.Time .BS S.TIME
CORE.PSFlags .BS 1
StatBuf .BS S.STAT
TimeBuf .BS S.TIME
HIS.hBuf .BS 1
HIS.Count .BS 1

View File

@ -431,8 +431,6 @@ S.FD.REG.IOBUF .EQ 3
*
S.FD.REG .EQ 4
*--------------------------------------
S.FD.DIR.REF .EQ 2
S.FD.DIR.IOBUF .EQ 3
S.FD.DIR.EL .EQ 4
S.FD.DIR.EPB .EQ 5
S.FD.DIR.FC .EQ 6 word

View File

@ -14,14 +14,12 @@ K.GetDevByName >STYA ZPPtr1 requested dev name
ldx #0
.1 lda Dev.Table,x
sta .3+1
clc
adc #S.FD.DEV
sta ZPPtr2
lda Dev.Table+1,x
beq K.GetDev.NODEV
sta .4+1
adc /S.FD.DEV
sta ZPPtr2+1
@ -35,8 +33,8 @@ K.GetDevByName >STYA ZPPtr1 requested dev name
ora (ZPPtr2),y Both char are 0 ?
bne .2 no....loop
.3 ldy #$ff SELF MODIFIED
.4 lda #$ff SELF MODIFIED
.3 ldy Dev.Table,x
.4 lda Dev.Table+1,x
clc
rts

View File

@ -39,16 +39,8 @@ K.OpenDir jsr PFT.CheckPathYA
cmp #$0F Directory ?
bne .98
jsr STDIO.SetIOBUF
bcs .98
>MLICALL MLIOPEN
bcs .98
lda K.MLI.PARAMS+5 get ref_num
ldy #S.FD.DIR.REF
sta (pFD),y
jsr IO.MLIOPEN
bcs .98
.8 lda #$ff Self Modified
jsr STDIO.NewHFile
@ -90,7 +82,7 @@ K.ReadDir.EC .BS 2
K.ReadDir jsr PFT.CheckNodeA
bcs K.ReadDir.RTS
ldy #S.FD.DIR.REF
ldy #S.FD.REG.REF
lda (pFD),y
beq K.ReadDir.ROOT
jmp K.ReadDir.DIR

View File

@ -181,11 +181,11 @@ Kernel.Init3C >LDYAI MSG.Init3
>LDYAI MSG.Prefix
>SYSCALL printf
lda KBD
bpl .7
sta KBDSTROBE
cmp #146 CTRL-R for ROOT mode
bne .7
* lda KBD
* bpl .7
* sta KBDSTROBE
* cmp #146 CTRL-R for ROOT mode
* bne .7
>PUSHBI 0
>LDYAI MSG.CTRLR

View File

@ -121,17 +121,8 @@ IO.OPEN.REG.E >LDYAI S.FD.REG
* lda #S.FD.T.REG
* sta (pFD),y
jsr STDIO.SetIOBUF
jsr IO.MLIOPEN
bcs .9
>MLICALL MLIOPEN
bcs .9
lda K.MLI.PARAMS+5 get ref_num
ldy #S.FD.REG.REF
sta (pFD),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
lda K.Open.FLAGS
bit #O.WRONLY
@ -479,6 +470,28 @@ K.Pipe
.9 sec
rts
*--------------------------------------
IO.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr MEM.GetMem.YAX
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FD.REG.IOBUF
sta (pFD),y
>MLICALL MLIOPEN
bcs .9
lda K.MLI.PARAMS+5 get ref_num
ldy #S.FD.REG.REF
sta (pFD),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
* clc
.9 rts
*--------------------------------------
IO.DEVDIR >PSTR "/DEV/"
*--------------------------------------
MAN

View File

@ -2,7 +2,7 @@ NEW
PREFIX
AUTO 4,1
*--------------------------------------
X.SLIST jmp (.1-SYS.SListAdd,x)
X.SLIST jmp (.1-SYS.SListAddData,x)
.1 .DA SLIST.Add
.DA SLIST.Lookup
.DA SLIST.GetByID

View File

@ -974,7 +974,7 @@ K.SScanF.Fwd tya Y=char count parsed
* CS : A = EC
*\--------------------------------------
K.FOpen jsr PFT.CheckPathYA
bcs .99
bcs K.FOpen.RET4
>PULLB K.Open.FLAGS
>PULLB K.Open.TYPE
@ -995,7 +995,7 @@ K.FOpen jsr PFT.CheckPathYA
sec
.9 rts
.99 >RET 4
K.FOpen.RET4 >RET 4
*/--------------------------------------
* # FClose
* Close a file
@ -1042,7 +1042,7 @@ K.FClose jsr PFT.CheckNodeA
* Y,A = Bytes Read
*\--------------------------------------
K.FRead jsr PFT.CheckNodeA
bcs K.FWrite.9
bcs K.FOpen.RET4
jmp IO.Read.I
*/--------------------------------------
@ -1060,10 +1060,9 @@ K.FRead jsr PFT.CheckNodeA
* Y,A = Bytes Written
*\--------------------------------------
K.FWrite jsr PFT.CheckNodeA
bcs K.FWrite.9
bcs K.FOpen.RET4
jmp IO.Write.I
K.FWrite.9 >RET 4
*/--------------------------------------
* # FFlush
* ## C
@ -1318,17 +1317,6 @@ STDIO.NewHFile sta .4+1 Store hFD
clc
.9 rts
*--------------------------------------
STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr MEM.GetMem.YAX
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FD.REG.IOBUF
sta (pFD),y
.9 rts
*--------------------------------------
STDIO.IOERR lda #MLI.E.IO
sec
rts