A2osX/BIN/SH.S.STK.txt

189 lines
3.1 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
*--------------------------------------
STK.PopCtx jsr STK.Pull
STK.PopCtxA and #$3F
cmp #C.IF
beq .8 IF : Nothing
ldx #2
cmp #C.WHILE WHILE : One Ptr = 2 bytes
beq STK.PopX
cmp #C.SWITCH SWITCH : hValue
beq .2
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
cmp #C.FOR
beq .3
cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
bne .9
.1 jsr STK.PopX
.2 jsr STK.PullFree
.8 clc
rts
.3 jsr STK.Pull Get FOR sub cmd
beq .4 FOR List
jsr STK.PullFree hVARNAME
jsr STK.PullFClose hFILE/hPIPE
ldx #2 CmdPtr
jmp STK.PopX
.4 jsr STK.PullFree hVARNAME
jsr STK.PullFClose hFILE/hPIPE
ldx #4 ListPtr,CmdPtr
jmp STK.PopX
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
STK.PopX lda (pData)
.1 dec
dex
bne .1
sta (pData)
clc
rts
*--------------------------------------
STK.Check sec
adc (pData) StackPtr
cmp #CORE.STACK.MAX
bcc .8
lda #E.STKOVERFLOW
* sec
.8 rts
*--------------------------------------
STK.PushYAX phx
jsr STK.PushYA
bcc STK.Push.1
plx
rts
*--------------------------------------
STK.PushInputBufPtr
>LDYA ZPInputBufPtr
*--------------------------------------
STK.PushYA phy
jsr STK.Push
bcc STK.Push.1
plx
rts
*--------------------------------------
CORE.PushVarName
>LDYA ZPVarNamePtr
>SYSCALL StrDup
bcs STK.Push.RTS
txa
*--------------------------------------
STK.Push pha
STK.Push.1 lda (pData) StackPtr
inc
cmp #CORE.STACK.MAX
bcs .9
sta (pData) StackPtr
tay
pla
sta (pData),y
* clc
rts
.9 pla
lda #E.STKOVERFLOW
* sec
STK.Push.RTS
rts
*--------------------------------------
STK.GetCtx jsr STK.Get
tax
bcs .1 no context...
cmp #$C0+C.. in a call...
beq .1 CS
cmp #$C0+C.CALL
beq .1 CS
cmp #$C0+C.CLEXEC
beq .1 CS
and #$80 get current..
lsr becomes parent
bra .8
.1 lda #$40 ...set Parent = true
.8 sta CORE.TestResult
txa
rts
*--------------------------------------
STK.PullInputBufPtr
jsr STK.Pull
bcs .9
sta ZPInputBufPtr
jsr STK.Pull
bcs .9
sta ZPInputBufPtr+1
.9 rts
*--------------------------------------
STK.PullFClose jsr STK.Pull
>SYSCALL FClose
rts
*--------------------------------------
STK.PullFree jsr STK.Pull
>SYSCALL FreeMem
rts
*--------------------------------------
STK.Pull jsr STK.Get
bcs .9
dey
pha
tya
sta (pData) StackPtr
pla
.9 rts
*--------------------------------------
STK.Get lda (pData) StackPtr
beq .9
tay
lda (pData),y
clc
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/sh.s.stk
LOAD usr/src/bin/sh.s
ASM