A2osX/BIN/SH.S.CORE.txt
2019-02-11 06:58:33 +00:00

464 lines
8.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
CORE.Init >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPArgVBuf
txa
>STA.G CORE.hArgVBuf
.9 rts
*--------------------------------------
CORE.Quit >LDA.G CORE.hArgVBuf
beq .9
>SYSCALL FreeMem
.9 rts
*--------------------------------------
* Input : ZPArgVBuf (String)
* Tokenize ZPArgVBuf
* :LOOP
* if CmdSep=| :
* set hStdIn = hStdOut
* set hStdOut = Std
* GetCmd from line until | or EOL
* if CmdSep=| :
* 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.CSYN lda #E.CSYN
sec
rts
CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
>STYA ZPInputCmdPtr
>LDYA ZPArgVBuf
>STYA ZPArgVBufPtr
lda #$ff
>STA.G CORE.IntCmd assume external
jsr CORE.GetCharNB
bcs CORE.Run.RTS Ending 0, CS,A=0
cmp #'#' commented line?
bne .2
.1 jsr CORE.GetNextCharNB
bcs CORE.Run.RTS A=0, CS
eor #C.CR
bne .1
.9 rts EOL, CC,A=0
.2 cmp #'|'
bne .3
jsr IO.Pipe.In
bcs CORE.Run.RTS
jsr CORE.GetNextCharNB
bcs CORE.Run.CSYN
.3 cmp #'.'
bne .4
ldy #1
lda (ZPInputBufPtr),y
cmp #C.SPACE
bne .4
>LDA.G CORE.PSFlags yes, child process will run in same ENV
and #$ff^S.PS.F.DUPENV
sta (pData),y
jsr CORE.GetNextCharNB skip ". "
bcs CORE.Run.RTS nothing to execute...
.4 >LDYA L.CMD internal command ?
jsr CORE.Lookup
bcs .6 external, add token
txa
>STA.G CORE.IntCmd
bra .7 internal, do not add token
.5 >LDYA L.CORE.IO
jsr CORE.Lookup
bcs .6
jsr CORE.GetNextCharNB
bcs CORE.Run.CSYN
jsr CORE.IO.JMP
bcs CORE.Run.RTS
bra .7
.6 jsr CORE.ArgV.Add
.7 jsr CORE.GetCharNB
bcs CORE.ExecCmd
jsr CORE.IsEndCmd
bcs .5
cmp #'|'
beq CORE.ExecCmd
jsr CORE.GetNextCharNB
jsr IO.Pipe.Out
bcs CORE.Run.RTS
bra CORE.ExecCmd
.8 clc
CORE.Run.RTS rts
*--------------------------------------
* Input : ZPArgVBuf
*--------------------------------------
CORE.ExecCmd lda #0
jsr CORE.ArgV.PutChar
>LDA.G CORE.IntCmd
bmi CORE.ExecExtCmd
tax
>LDYA ZPArgVBuf
>STYA ZPArgVBufPtr
jmp (J.CMD,x)
CORE.ExecExtCmd >PUSHB.G CORE.PSFlags
>LDYA ZPArgVBuf
>SYSCALL execv
bcs .9
tax CPID
>LDA.G CORE.PSFlags
and #S.PS.F.HOLD
bne .4
txa
>PUSHA
>PUSHBI 1
>LDYA L.MSG.PID
>SYSCALL printf
rts
.4 >SLEEP Suspend this PID
sec
ldy #S.PS.RC CPID will update S.PS.RC
lda (pPs),y
bne .9
.8 clc
.9 rts
*--------------------------------------
* search ZPInputBufPtr in Y,A table
*--------------------------------------
CORE.Lookup >STYA ZPPtr1
ldx #0
.1 phx
ldy #$ff
.2 iny
lda (ZPInputBufPtr),y
beq .3 Src Keyword end
jsr CORE.IsSpaceOrEndCmd
bcc .3 Src Keyword end
lda (ZPPtr1),y
beq .4 Table Keyword end
cmp (ZPInputBufPtr),y
beq .2
bra .4
.3 lda (ZPPtr1),y
bne .4
plx
tya
clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .8
clc
inc ZPInputBufPtr+1
.8 rts
.4 inc ZPPtr1
bne .5
inc ZPPtr1+1
.5 lda (ZPPtr1)
bne .4
inc ZPPtr1
bne .6
inc ZPPtr1+1
.6 plx
inx
inx
lda (ZPPtr1) Array Ending 0, must be an external Cmd....
bne .1
lda #E.CSYN
CORE.Lookup.9 sec
rts
*--------------------------------------
* ArgV
*--------------------------------------
CORE.ArgV.Add jsr CORE.GetCharNB
bcs CORE.Lookup.9
ldx #0
.1 cmp #'"'
bne .2
txa
eor #$ff
tax
bra .4
.2 cmp #C.SPACE
bne .3
txa
bpl .8
.3 jsr CORE.IsEndCmd
bcc CORE.Lookup.9
jsr CORE.ArgV.PutChar
.4 jsr CORE.GetNextChar
bra .1
.8 lda #0
*--------------------------------------
CORE.ArgV.PutChar
sta (ZPArgVBufPtr)
CORE.ArgV.NextChar
inc ZPArgVBufPtr
bne .8
inc ZPArgVBufPtr
.8 rts
*--------------------------------------
CORE.ArgV.Next lda (ZPArgVBufPtr)
beq .8
.1 jsr CORE.ArgV.NextChar
lda (ZPArgVBufPtr)
bne .1
jsr CORE.ArgV.NextChar
lda (ZPArgVBufPtr)
.8 rts
*--------------------------------------
* IO
*--------------------------------------
CORE.IO.JMP jmp (J.CORE.IO,x)
CORE.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
clc
CORE.IO.RTS rts
CORE.IO.IN lda #O.RDONLY+O.TEXT
jsr CORE.IO.Open
bcs CORE.IO.RTS
jmp IO.Set.In
CORE.IO.OUTA
CORE.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CORE.IO.OUT.1
CORE.IO.OUT
CORE.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CORE.IO.OUT.1 jsr CORE.IO.Open
bcs CORE.IO.RTS
jmp IO.Set.Out
CORE.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CORE.IO.2OUT.1
CORE.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CORE.IO.2OUT.1 jsr CORE.IO.Open
bcs CORE.IO.RTS
jmp IO.Set.Err
*--------------------------------------
CORE.IO.Open pha Open Mode
jsr CORE.GetCharNB
bcs .9 no arg left....
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT ftype
pla
>PUSHA flags
>LDYA ZPInputBufPtr
>SYSCALL fopen
rts
.9 pla
lda #E.CSYN
sec
rts
*--------------------------------------
* Input Buffer
*--------------------------------------
CORE.IsSpaceOrEndCmd
cmp #C.SPACE
beq CORE.IsEndCmd.8
CORE.IsEndCmd cmp #C.CR
beq CORE.IsEndCmd.8
cmp #';'
beq CORE.IsEndCmd.8
cmp #'|'
beq CORE.IsEndCmd.8
sec
rts
CORE.IsEndCmd.8 clc
rts
*--------------------------------------
CORE.GetCharNB jsr CORE.GetChar
bcs CORE.GetNextCharNB.RTS
jsr CORE.CheckCharNB
bcc CORE.GetNextCharNB.RTS
*--------------------------------------
CORE.GetNextCharNB
jsr CORE.GetNextChar
bcs CORE.GetNextCharNB.RTS
jsr CORE.CheckCharNB
bcs CORE.GetNextCharNB
CORE.GetNextCharNB.RTS
rts
*--------------------------------------
CORE.CheckCharNB
cmp #C.SPACE
beq .9
cmp #C.LF
beq .9
cmp #C.TAB
beq .9
clc
.9 rts
*--------------------------------------
CORE.GetNextChar
inc ZPInputBufPtr
bne CORE.GetChar
inc ZPInputBufPtr+1
*--------------------------------------
CORE.GetChar lda (ZPInputBufPtr)
beq .9
clc
rts
.9 sec
rts
*--------------------------------------
* Stack
*--------------------------------------
CORE.StkPushPtr lda ZPInputCmdPtr
jsr CORE.StkPush
bcs CORE.StkPullPtr.9
lda ZPInputCmdPtr+1
bra CORE.StkPush
.9 rts
*--------------------------------------
CORE.StkPullPtr jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr+1
jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr
CORE.StkPullPtr.9
rts
*--------------------------------------
CORE.StkGetPtr lda (pData) StackPtr
beq .9
dec
beq .9
tay
lda (pData),y
sta ZPInputBufPtr
iny
lda (pData),y
sta ZPInputBufPtr+1
clc
rts
.9 lda #E.SSYN
sec
rts
*--------------------------------------
CORE.StkPush pha
lda (pData) StackPtr
inc
cmp #CORE.STACK.MAX
beq .9
sta (pData) StackPtr
tay
pla
sta (pData),y
* clc
rts
.9 pla
lda #E.STKOVERFLOW
* sec
rts
*--------------------------------------
CORE.StkPull jsr CORE.StkGet
bcs .9
dey
pha
tya
sta (pData) StackPtr
pla
.9 rts
*--------------------------------------
CORE.StkGet lda (pData) StackPtr
beq .9
tay
lda (pData),y
clc
rts
.9 lda #E.SSYN
sec
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/SH.S.CORE
LOAD USR/SRC/BIN/SH.S
ASM