2017-12-22 21:24:30 +00:00
|
|
|
|
NEW
|
2019-05-25 19:24:07 +00:00
|
|
|
|
AUTO 3,1
|
2018-10-15 06:25:40 +00:00
|
|
|
|
*--------------------------------------
|
2019-01-04 13:17:31 +00:00
|
|
|
|
.DUMMY
|
2019-07-26 14:23:07 +00:00
|
|
|
|
.OR ZPTMP+8 7 Bytes
|
2018-10-15 06:25:40 +00:00
|
|
|
|
PS.Flags .BS 1
|
2018-10-26 14:46:11 +00:00
|
|
|
|
PS.ArgV .BS 2
|
2019-01-04 13:17:31 +00:00
|
|
|
|
PS.ArgSize .BS 2
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.NewPSPtr .BS 2
|
2019-01-04 13:17:31 +00:00
|
|
|
|
.ED
|
2016-10-31 21:38:53 +00:00
|
|
|
|
*/--------------------------------------
|
2018-10-25 15:31:41 +00:00
|
|
|
|
* # ExecL
|
|
|
|
|
* ## C
|
|
|
|
|
* `int execl(const char* cmdline, short int flags);`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* `>PUSHB flags`
|
|
|
|
|
* `>LDYA cmdline`
|
|
|
|
|
* `>SYSCALL execl`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* A = Child PSID
|
|
|
|
|
*\--------------------------------------
|
2018-11-30 16:00:36 +00:00
|
|
|
|
K.ExecL sty .1+1
|
2018-10-26 14:46:11 +00:00
|
|
|
|
sta .2+1
|
|
|
|
|
>PULLB PS.Flags
|
2018-11-30 16:00:36 +00:00
|
|
|
|
|
2018-10-26 14:46:11 +00:00
|
|
|
|
>LDYAI 256
|
|
|
|
|
jsr K.GetMem
|
|
|
|
|
bcs .99
|
|
|
|
|
stx .90+1
|
|
|
|
|
>STYA PS.ArgV
|
|
|
|
|
>PUSHYA
|
|
|
|
|
.1 ldy #$ff SELF MODIFIED
|
|
|
|
|
.2 lda #$ff SELF MODIFIED
|
2020-01-09 15:54:14 +00:00
|
|
|
|
jsr K.Str2StrV
|
2018-10-26 14:46:11 +00:00
|
|
|
|
|
|
|
|
|
bcs .9
|
2018-12-20 16:23:43 +00:00
|
|
|
|
|
2018-10-26 14:46:11 +00:00
|
|
|
|
jsr PS.Exec
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.9 php
|
2018-10-26 06:16:14 +00:00
|
|
|
|
pha
|
2018-10-26 14:46:11 +00:00
|
|
|
|
.90 lda #$ff SELF MODIFIED
|
|
|
|
|
jsr K.FreeMem
|
2018-10-26 06:16:14 +00:00
|
|
|
|
pla
|
2018-10-26 14:46:11 +00:00
|
|
|
|
plp
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.99 rts
|
2018-10-25 15:31:41 +00:00
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # ExecV
|
2018-10-15 06:25:40 +00:00
|
|
|
|
* ## C
|
2019-01-18 16:06:44 +00:00
|
|
|
|
* `int execv(const char* argv[], short int flags);`
|
2018-10-15 06:25:40 +00:00
|
|
|
|
* ## ASM
|
|
|
|
|
* `>PUSHB flags`
|
|
|
|
|
* `>LDYA argv`
|
2018-10-15 15:39:21 +00:00
|
|
|
|
* `>SYSCALL execv`
|
2018-10-11 15:23:06 +00:00
|
|
|
|
* ## RETURN VALUE
|
2018-10-15 06:25:40 +00:00
|
|
|
|
* A = Child PSID
|
2017-08-30 15:26:34 +00:00
|
|
|
|
*\--------------------------------------
|
2018-10-26 14:46:11 +00:00
|
|
|
|
K.ExecV >STYA PS.ArgV
|
2018-10-15 06:25:40 +00:00
|
|
|
|
>PULLB PS.Flags
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
|
2017-08-30 15:26:34 +00:00
|
|
|
|
bcs .9
|
2018-11-27 14:03:26 +00:00
|
|
|
|
sta .8+1
|
2018-12-03 12:32:46 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
stz K.IOBuf If !=0 after PS.Load, it's a script
|
2018-07-05 05:42:16 +00:00
|
|
|
|
jsr PS.Load
|
2018-11-23 07:02:00 +00:00
|
|
|
|
bcs .90
|
2018-12-03 12:32:46 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
jsr PS.AddArgV K.IOBuf= /.../SHELL, K.Buf256=/.../SCRIPT
|
|
|
|
|
bcc .8 or K.IOBuf= 0, K.Buf256=/.../BINFILE
|
2018-11-23 07:02:00 +00:00
|
|
|
|
.90 pha save error code
|
2019-07-24 05:53:09 +00:00
|
|
|
|
>PUSHBI 2
|
|
|
|
|
lda .8+1
|
2019-07-29 15:38:55 +00:00
|
|
|
|
jsr K.Kill
|
2017-08-30 15:26:34 +00:00
|
|
|
|
pla get back error code
|
|
|
|
|
sec
|
|
|
|
|
rts
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2018-11-27 14:03:26 +00:00
|
|
|
|
.8 lda #$ff SELF MODIFIED
|
2019-07-29 15:38:55 +00:00
|
|
|
|
* clc
|
2017-08-30 15:26:34 +00:00
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
2016-09-29 15:30:15 +00:00
|
|
|
|
* PS.CreateChild
|
2016-08-17 06:25:58 +00:00
|
|
|
|
* in :
|
|
|
|
|
* out :
|
|
|
|
|
* A = PSID
|
|
|
|
|
*--------------------------------------
|
2019-01-24 13:53:29 +00:00
|
|
|
|
PS.CreateChild ldx #0
|
|
|
|
|
bra .2 Skip PS0
|
2018-10-15 15:39:21 +00:00
|
|
|
|
.1 lda PS.Table.PID,x
|
2018-10-17 15:31:29 +00:00
|
|
|
|
beq .4 Found an empty slot
|
2019-01-24 13:53:29 +00:00
|
|
|
|
.2 inx
|
2018-10-23 15:36:57 +00:00
|
|
|
|
cpx CORE.PSCount
|
2018-10-15 15:39:21 +00:00
|
|
|
|
bne .1
|
2018-10-23 15:36:57 +00:00
|
|
|
|
cpx #K.PS.MAX
|
|
|
|
|
bne .3
|
2018-10-21 20:54:07 +00:00
|
|
|
|
lda #E.OOH
|
2016-08-17 06:25:58 +00:00
|
|
|
|
sec
|
|
|
|
|
rts
|
|
|
|
|
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.99 plx
|
2017-10-09 05:51:32 +00:00
|
|
|
|
rts
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.3 inc CORE.PSCount
|
2018-10-15 15:39:21 +00:00
|
|
|
|
.4 inc CORE.LastPSID Get a PSID not already running
|
2016-08-17 06:25:58 +00:00
|
|
|
|
beq .4 not = 0
|
2017-09-19 15:34:01 +00:00
|
|
|
|
lda CORE.LastPSID
|
2018-10-17 15:31:29 +00:00
|
|
|
|
jsr CORE.GetPS Y=PS Index, X,A unmodified
|
|
|
|
|
bcc .4 running...loop
|
2016-08-17 06:25:58 +00:00
|
|
|
|
|
2017-09-19 15:34:01 +00:00
|
|
|
|
lda CORE.LastPSID
|
|
|
|
|
sta PS.Table.PID,x
|
2018-10-17 15:31:29 +00:00
|
|
|
|
phx save PS Index
|
2017-09-19 15:34:01 +00:00
|
|
|
|
>LDYAI S.PS
|
2018-06-21 15:12:10 +00:00
|
|
|
|
jsr K.GetMem0 Blank Everything in this S.PS
|
2017-09-19 15:34:01 +00:00
|
|
|
|
bcs .99
|
2019-01-21 06:52:04 +00:00
|
|
|
|
>STYA PS.NewPSPtr
|
2017-09-19 15:34:01 +00:00
|
|
|
|
txa
|
|
|
|
|
plx
|
2018-10-17 15:31:29 +00:00
|
|
|
|
sta PS.Table.hPS,x
|
2019-07-18 15:55:43 +00:00
|
|
|
|
jsr Mem.SetOwner Set Ownership
|
2017-10-09 05:51:32 +00:00
|
|
|
|
|
2019-07-25 06:13:56 +00:00
|
|
|
|
lda PS.Flags
|
|
|
|
|
and #S.PS.F.CLOSEONX
|
|
|
|
|
sta (PS.NewPSPtr)
|
|
|
|
|
|
2017-09-19 15:34:01 +00:00
|
|
|
|
lda CORE.LastPSID
|
2019-05-22 15:46:20 +00:00
|
|
|
|
ldy #S.PS.PID
|
|
|
|
|
sta (PS.NewPSPtr),y
|
|
|
|
|
lda #S.PS.F.NOHUP
|
|
|
|
|
bit PS.Flags
|
|
|
|
|
beq .5
|
|
|
|
|
lda PS.Table.hPS Select PS0
|
|
|
|
|
jsr K.GetMemPtr
|
|
|
|
|
bra .6
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.5 >LDYA pPs
|
|
|
|
|
.6 >STYA ZPPtr1
|
2019-05-22 15:46:20 +00:00
|
|
|
|
ldy #S.PS.PID
|
|
|
|
|
lda (ZPPtr1),y
|
|
|
|
|
dey #S.PS.PPID
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2016-08-17 06:25:58 +00:00
|
|
|
|
|
2019-07-22 16:28:44 +00:00
|
|
|
|
ldy #S.PS.hCWD copy hPREFIX...
|
2019-05-22 15:46:20 +00:00
|
|
|
|
lda (ZPPtr1),y
|
2018-06-21 15:12:10 +00:00
|
|
|
|
jsr K.GetMemPtr
|
2019-07-19 06:41:33 +00:00
|
|
|
|
|
2019-05-22 15:46:20 +00:00
|
|
|
|
jsr K.StrDup
|
2016-08-18 15:26:11 +00:00
|
|
|
|
bcs .9
|
2019-07-18 15:55:43 +00:00
|
|
|
|
jsr Mem.SetOwner Set Ownership
|
2017-10-06 15:25:14 +00:00
|
|
|
|
|
2016-08-17 06:25:58 +00:00
|
|
|
|
txa
|
2019-07-22 16:28:44 +00:00
|
|
|
|
ldy #S.PS.hCWD
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-01-22 16:35:42 +00:00
|
|
|
|
jsr ENV.Dup dup hENV from parent PS
|
2016-08-18 15:26:11 +00:00
|
|
|
|
bcs .9
|
2019-01-22 16:35:42 +00:00
|
|
|
|
|
2016-08-17 06:25:58 +00:00
|
|
|
|
ldy #S.PS.hENV
|
2019-04-15 05:40:13 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-01-22 16:35:42 +00:00
|
|
|
|
txa
|
|
|
|
|
dey
|
|
|
|
|
sta (PS.NewPSPtr),y
|
2018-11-28 14:58:42 +00:00
|
|
|
|
ldy #S.PS.hStdIn
|
2016-08-18 15:26:11 +00:00
|
|
|
|
|
2019-05-22 15:46:20 +00:00
|
|
|
|
.7 lda (ZPPtr1),y
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2016-08-17 06:25:58 +00:00
|
|
|
|
iny
|
2017-01-12 17:43:45 +00:00
|
|
|
|
cpy #S.PS.hStdErr+1
|
2019-05-22 15:46:20 +00:00
|
|
|
|
bne .7
|
2019-05-08 19:41:46 +00:00
|
|
|
|
ldy #S.PS.hSID
|
2019-05-22 15:46:20 +00:00
|
|
|
|
lda (ZPPtr1),y
|
2019-05-08 19:41:46 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-07-19 14:05:22 +00:00
|
|
|
|
tax
|
|
|
|
|
lda S.Table.hSession-1,x
|
2019-07-18 15:55:43 +00:00
|
|
|
|
jsr K.GetMemPtr
|
|
|
|
|
phy
|
|
|
|
|
ldy #S.PS.ZP.SESSION+1
|
|
|
|
|
sta (PS.NewPSPtr),y
|
|
|
|
|
dey
|
|
|
|
|
pla
|
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-05-08 19:41:46 +00:00
|
|
|
|
|
2019-07-19 14:05:22 +00:00
|
|
|
|
jsr Mem.IncRefCnt
|
|
|
|
|
|
2019-05-05 17:15:37 +00:00
|
|
|
|
lda #S.PS.F.HOLD
|
2017-10-27 14:56:46 +00:00
|
|
|
|
bit PS.Flags
|
2019-05-22 15:46:20 +00:00
|
|
|
|
beq .8
|
|
|
|
|
ora (ZPPtr1)
|
|
|
|
|
sta (ZPPtr1) HOLD parent PS
|
2017-09-19 15:34:01 +00:00
|
|
|
|
lda CORE.LastPSID
|
2019-05-22 15:46:20 +00:00
|
|
|
|
ldy #S.PS.CPID
|
|
|
|
|
sta (ZPPtr1),y
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.8
|
|
|
|
|
* lda #S.PS.S.INIT
|
2019-07-22 16:28:44 +00:00
|
|
|
|
* ldy #S.PS.S
|
|
|
|
|
* sta (PS.NewPSPtr),y Make this PS Init....
|
2017-01-12 17:43:45 +00:00
|
|
|
|
|
2019-05-22 15:46:20 +00:00
|
|
|
|
lda CORE.LastPSID Exit with A=PSID
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
.9 pha
|
2019-07-24 05:53:09 +00:00
|
|
|
|
>PUSHBI 2
|
2019-05-22 15:46:20 +00:00
|
|
|
|
lda CORE.LastPSID
|
2019-07-29 15:38:55 +00:00
|
|
|
|
jsr K.Kill
|
2019-05-22 15:46:20 +00:00
|
|
|
|
pla
|
|
|
|
|
sec
|
|
|
|
|
rts
|
2016-08-17 06:25:58 +00:00
|
|
|
|
*--------------------------------------
|
2019-01-18 16:06:44 +00:00
|
|
|
|
PS.Load ldy #$ff
|
|
|
|
|
|
|
|
|
|
.1 iny
|
|
|
|
|
lda (PS.ArgV),y
|
|
|
|
|
beq .2 no / in path...try search in PATH
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
cmp #'/'
|
|
|
|
|
bne .1
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-05-04 21:13:50 +00:00
|
|
|
|
>PUSHWI K.S.STAT
|
2019-01-21 06:52:04 +00:00
|
|
|
|
>LDYA PS.ArgV found /, some path specified, no search
|
2019-12-02 16:47:53 +00:00
|
|
|
|
>SYSCALL2 stat
|
2019-01-21 06:52:04 +00:00
|
|
|
|
bcc .6 REAL path in K.Buf256
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
.99 rts
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.2 >LDYA PS.ArgV
|
|
|
|
|
jsr ENV.Search.PATH Get fullpath in K.Buf256
|
|
|
|
|
bcc .6
|
2020-01-16 07:33:14 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
>LDYA PS.ArgV
|
2020-01-16 07:33:14 +00:00
|
|
|
|
jsr ENV.Search.CWD
|
2019-01-18 16:06:44 +00:00
|
|
|
|
bcs .99
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
.6 lda K.S.STAT+S.STAT.P.TYPE
|
2018-11-22 16:39:41 +00:00
|
|
|
|
cmp #S.FI.T.BIN
|
2019-01-21 06:52:04 +00:00
|
|
|
|
beq PS.LoadBIN
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
.7 cmp #S.FI.T.TXT
|
|
|
|
|
beq PS.Load.SCRIPT
|
2018-11-23 16:20:19 +00:00
|
|
|
|
|
|
|
|
|
* cmp #S.FI.T.SYS
|
|
|
|
|
* bra *
|
2018-11-22 16:39:41 +00:00
|
|
|
|
|
2019-01-18 16:06:44 +00:00
|
|
|
|
PS.Load.IBIN lda #E.IBIN
|
|
|
|
|
.HS 2C
|
|
|
|
|
PS.Load.IPATH lda #E.BADPATH
|
|
|
|
|
sec
|
|
|
|
|
PS.Load.RTS rts
|
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.Load.SCRIPT ldx #$ff
|
|
|
|
|
|
|
|
|
|
.10 inx Save Script name in IOBuf
|
|
|
|
|
lda K.Buf256,x
|
|
|
|
|
sta K.IOBuf,x
|
|
|
|
|
bne .10
|
|
|
|
|
jsr PS.LoadGetHeader
|
2019-01-18 16:06:44 +00:00
|
|
|
|
bcs PS.Load.RTS
|
2018-11-22 16:39:41 +00:00
|
|
|
|
|
2020-01-15 09:50:04 +00:00
|
|
|
|
>PUSHWI PS.Load.ROOT
|
|
|
|
|
>PUSHWI K.Buf256 K.Buf256 = "$ROOT"
|
2019-01-21 06:52:04 +00:00
|
|
|
|
jsr K.GetEnv
|
2019-01-18 16:06:44 +00:00
|
|
|
|
bcs PS.Load.IPATH
|
2018-11-22 16:39:41 +00:00
|
|
|
|
|
|
|
|
|
ldx #$ff
|
2018-12-03 12:32:46 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.1 inx
|
2020-01-15 09:50:04 +00:00
|
|
|
|
lda K.Buf256,x
|
2019-01-21 06:52:04 +00:00
|
|
|
|
bne .1
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2018-11-22 16:39:41 +00:00
|
|
|
|
ldy #0
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.3 lda K.IOBuf+128,y Check HEADER= "#!/"
|
2018-11-22 16:39:41 +00:00
|
|
|
|
cmp PS.Load.HEADER,y
|
2019-01-18 16:06:44 +00:00
|
|
|
|
bne PS.Load.IBIN
|
2018-11-22 16:39:41 +00:00
|
|
|
|
iny
|
|
|
|
|
cpy #3
|
|
|
|
|
bne .3
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2019-10-03 06:25:27 +00:00
|
|
|
|
.4 iny
|
2018-11-22 16:39:41 +00:00
|
|
|
|
inx
|
|
|
|
|
lda K.IOBuf+128-1,y
|
2019-07-24 15:17:08 +00:00
|
|
|
|
sta K.Buf256-1,x K.Buf256 = "${ROOT}BIN/SHELL"
|
2018-12-03 12:32:46 +00:00
|
|
|
|
beq .5
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2018-12-03 12:32:46 +00:00
|
|
|
|
eor #C.CR
|
|
|
|
|
bne .4
|
|
|
|
|
|
2019-07-24 15:17:08 +00:00
|
|
|
|
sta K.Buf256-1,x K.Buf256 = "${ROOT}BIN/SHELL\0"
|
2019-12-02 16:47:53 +00:00
|
|
|
|
|
2019-05-04 21:13:50 +00:00
|
|
|
|
.5 >PUSHWI K.S.STAT
|
|
|
|
|
>LDYAI K.Buf256
|
2019-12-02 16:47:53 +00:00
|
|
|
|
>SYSCALL2 stat
|
2019-01-18 16:06:44 +00:00
|
|
|
|
bcs PS.Load.RTS
|
2019-12-02 16:47:53 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
lda K.S.STAT+S.STAT.P.TYPE
|
|
|
|
|
cmp #S.FI.T.BIN
|
2019-07-24 15:17:08 +00:00
|
|
|
|
bne PS.Load.IBIN
|
2019-01-18 16:06:44 +00:00
|
|
|
|
*--------------------------------------
|
2019-07-24 15:17:08 +00:00
|
|
|
|
PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT
|
2016-08-17 06:25:58 +00:00
|
|
|
|
bcs .9
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2017-01-12 17:43:45 +00:00
|
|
|
|
>STYA ZPPtr4 save PTR to Code Segment
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2017-09-20 15:09:55 +00:00
|
|
|
|
phy
|
2018-04-10 15:03:29 +00:00
|
|
|
|
ldy #S.PS.ZP.CODE+1
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pCode HI...
|
2017-09-20 15:09:55 +00:00
|
|
|
|
dey
|
|
|
|
|
pla
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pCode LO...
|
2016-08-17 06:25:58 +00:00
|
|
|
|
txa
|
|
|
|
|
ldy #S.PS.hCS
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save CS hMem in S.PS
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2019-01-30 06:20:13 +00:00
|
|
|
|
* jsr MEM.GetMemByID
|
2019-07-18 15:55:43 +00:00
|
|
|
|
* jsr Mem.SetOwner Set Ownership
|
2017-10-09 15:30:48 +00:00
|
|
|
|
|
2018-09-19 15:25:42 +00:00
|
|
|
|
ldy #H.BIN.F Get Bin S.PS.F
|
|
|
|
|
lda (ZPPtr4),y
|
|
|
|
|
beq .1
|
|
|
|
|
ldy #S.PS.F update PS S.PS.F
|
2019-01-21 06:52:04 +00:00
|
|
|
|
ora (PS.NewPSPtr),y
|
|
|
|
|
sta (PS.NewPSPtr),y
|
2018-09-19 15:25:42 +00:00
|
|
|
|
|
|
|
|
|
.1 ldy #H.BIN.DS.SIZE+1
|
2017-01-12 17:43:45 +00:00
|
|
|
|
lda (ZPPtr4),y Load DS.SIZE HI
|
2016-08-17 06:25:58 +00:00
|
|
|
|
tax
|
|
|
|
|
dey
|
2017-01-12 17:43:45 +00:00
|
|
|
|
ora (ZPPtr4),y
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2016-08-17 06:25:58 +00:00
|
|
|
|
beq .2 DS.SIZE=0...
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2017-07-01 13:44:40 +00:00
|
|
|
|
lda (ZPPtr4),y
|
|
|
|
|
tay
|
|
|
|
|
txa Y,A = DS.SIZE
|
2018-08-11 10:57:57 +00:00
|
|
|
|
ldx #S.MEM.F.INIT0+S.MEM.F.DATA
|
|
|
|
|
jsr MEM.GetMem.YAX
|
2016-08-17 06:25:58 +00:00
|
|
|
|
bcs .9
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2017-09-20 15:09:55 +00:00
|
|
|
|
phy
|
2018-04-10 15:03:29 +00:00
|
|
|
|
ldy #S.PS.ZP.DATA+1
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pData HI...
|
2017-09-20 15:09:55 +00:00
|
|
|
|
dey
|
|
|
|
|
pla
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pData LO...
|
2017-09-20 15:09:55 +00:00
|
|
|
|
|
2016-08-17 06:25:58 +00:00
|
|
|
|
txa
|
|
|
|
|
ldy #S.PS.hDS
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save DS hMem in S.PS
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2019-07-18 15:55:43 +00:00
|
|
|
|
jsr Mem.SetOwner Set Ownership
|
2017-10-09 05:51:32 +00:00
|
|
|
|
|
2018-07-05 05:42:16 +00:00
|
|
|
|
.2 ldy #H.BIN.SS.SIZE
|
2017-09-20 15:09:55 +00:00
|
|
|
|
lda (ZPPtr4),y Load SS.SIZE
|
2018-04-26 15:38:02 +00:00
|
|
|
|
|
2019-10-03 06:25:27 +00:00
|
|
|
|
tay
|
2019-07-19 15:35:19 +00:00
|
|
|
|
beq .3 SS.SIZE.LO=0, set as default $100
|
|
|
|
|
|
2019-07-31 15:10:59 +00:00
|
|
|
|
lda #$ff SS.SIZE.HI
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
2019-07-31 15:10:59 +00:00
|
|
|
|
.3 inc
|
2017-09-12 15:24:36 +00:00
|
|
|
|
|
2019-11-15 14:40:48 +00:00
|
|
|
|
ldx #S.MEM.F.NOCROSS+S.MEM.F.STACK
|
2018-01-17 16:31:32 +00:00
|
|
|
|
jsr MEM.GetMem.YAX
|
2017-08-28 15:35:10 +00:00
|
|
|
|
bcs .9
|
2017-09-12 06:20:24 +00:00
|
|
|
|
|
2019-11-15 14:40:48 +00:00
|
|
|
|
phy save pStack base LO
|
2018-04-10 15:03:29 +00:00
|
|
|
|
ldy #S.PS.ZP.STACK+1
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pStack HI...
|
2017-09-20 15:09:55 +00:00
|
|
|
|
|
2019-02-24 22:11:52 +00:00
|
|
|
|
ldy #S.PS.ZP.LOCAL+1
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save pLocal HI...
|
|
|
|
|
|
|
|
|
|
pla make pStack = Base...
|
|
|
|
|
ldy #H.BIN.SS.SIZE ...plus Stack size
|
|
|
|
|
* clc
|
|
|
|
|
adc (ZPPtr4),y
|
|
|
|
|
|
|
|
|
|
ldy #S.PS.ZP.STACK
|
2019-02-24 22:11:52 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-11-15 14:40:48 +00:00
|
|
|
|
|
2017-08-28 15:35:10 +00:00
|
|
|
|
txa
|
|
|
|
|
ldy #S.PS.hSS
|
2019-11-15 14:40:48 +00:00
|
|
|
|
sta (PS.NewPSPtr),y save SS hMem in S.PS
|
|
|
|
|
clc Potentially CS from ADC (ZPPtr4),y
|
2019-07-31 15:10:59 +00:00
|
|
|
|
jmp Mem.SetOwner Set Ownership
|
2016-08-18 15:26:11 +00:00
|
|
|
|
.9 rts
|
2016-08-17 06:25:58 +00:00
|
|
|
|
*--------------------------------------
|
2018-11-22 16:39:41 +00:00
|
|
|
|
PS.LoadGetHeader
|
2019-06-07 15:02:51 +00:00
|
|
|
|
>PUSHWZ Aux type
|
2018-11-22 16:39:41 +00:00
|
|
|
|
>PUSHBI S.FI.T.TXT
|
|
|
|
|
>PUSHBI O.RDONLY
|
2019-01-21 06:52:04 +00:00
|
|
|
|
>LDYAI K.IOBuf
|
2019-12-04 06:56:03 +00:00
|
|
|
|
>SYSCALL2 fopen
|
2019-01-21 06:52:04 +00:00
|
|
|
|
bcs .9
|
2019-12-04 06:56:03 +00:00
|
|
|
|
|
2018-11-22 16:39:41 +00:00
|
|
|
|
sta .1+1
|
2018-12-03 12:32:46 +00:00
|
|
|
|
|
2018-11-22 16:39:41 +00:00
|
|
|
|
>PUSHWI 128
|
|
|
|
|
>PUSHWI K.IOBuf+128
|
|
|
|
|
.1 lda #$ff SELF MODIFIED
|
2019-12-04 06:56:03 +00:00
|
|
|
|
>SYSCALL2 fread
|
2018-11-22 16:39:41 +00:00
|
|
|
|
php
|
|
|
|
|
pha
|
|
|
|
|
lda .1+1
|
2019-12-04 06:56:03 +00:00
|
|
|
|
>SYSCALL2 fclose
|
2018-11-22 16:39:41 +00:00
|
|
|
|
pla
|
|
|
|
|
plp
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.9 rts
|
2018-11-22 16:39:41 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
PS.Load.ROOT .AZ "ROOT"
|
|
|
|
|
PS.Load.HEADER .AZ "#!/"
|
|
|
|
|
*--------------------------------------
|
2019-01-21 06:52:04 +00:00
|
|
|
|
* K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT
|
|
|
|
|
* - or -
|
|
|
|
|
* K.Buf256=/.../BINFILE,K.IOBuf=0
|
|
|
|
|
* Buf256+IOBUF(?)+PS.ArgV[1,...] -> #S.PS.hARGV
|
2018-11-23 07:02:00 +00:00
|
|
|
|
*--------------------------------------
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.AddArgV ldy #$ff In both cases, remove ARGV[0]
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.60 iny
|
|
|
|
|
lda (PS.ArgV),y
|
|
|
|
|
bne .60
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
tya
|
|
|
|
|
sec
|
|
|
|
|
adc PS.ArgV
|
|
|
|
|
sta PS.ArgV
|
|
|
|
|
bcc .70
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
inc PS.ArgV+1 Skip old ARGV[0] = scriptename
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.70 >LDYAI K.Buf256
|
|
|
|
|
jsr K.strlen
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
>STYA PS.ArgSize
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
lda K.IOBuf is there a /BIN/SHELL ?
|
2018-11-23 07:02:00 +00:00
|
|
|
|
beq .10
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-28 14:58:42 +00:00
|
|
|
|
>LDYAI K.IOBuf
|
2018-11-23 16:20:19 +00:00
|
|
|
|
jsr K.strlen
|
2019-01-21 06:52:04 +00:00
|
|
|
|
jsr PS.AddYAp12ArgSize
|
2018-11-23 07:02:00 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.10 ldx #0 For now, 0 args...
|
|
|
|
|
lda K.IOBuf
|
|
|
|
|
beq .11 +1 for scriptpath
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
inx
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
.11 >LDYA PS.ArgV
|
2018-11-23 07:02:00 +00:00
|
|
|
|
>STYA ZPPtr1
|
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
.1 lda (ZPPtr1)
|
2018-11-23 07:02:00 +00:00
|
|
|
|
beq .4
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
inx
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-23 07:02:00 +00:00
|
|
|
|
ldy #0
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-23 07:02:00 +00:00
|
|
|
|
.2 iny
|
2018-11-23 16:20:19 +00:00
|
|
|
|
lda (ZPPtr1),y
|
2018-11-23 07:02:00 +00:00
|
|
|
|
bne .2
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-10-03 06:25:27 +00:00
|
|
|
|
* lda #0
|
2019-01-21 06:52:04 +00:00
|
|
|
|
jsr PS.AddYAp12ArgSize
|
2019-10-12 14:20:09 +00:00
|
|
|
|
jsr SHARED.AddYp1ToPtr1
|
2018-11-23 07:02:00 +00:00
|
|
|
|
bra .1
|
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
.4 txa
|
|
|
|
|
ldy #S.PS.ARGC
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-01-04 13:17:31 +00:00
|
|
|
|
>LDYA PS.ArgSize Add 1 for ending 0
|
2018-11-23 07:02:00 +00:00
|
|
|
|
iny
|
|
|
|
|
bne .5
|
|
|
|
|
inc
|
|
|
|
|
|
2019-10-12 14:20:09 +00:00
|
|
|
|
.5 iny Add ONE MORE ?????!!!!
|
|
|
|
|
bne .51
|
|
|
|
|
inc
|
|
|
|
|
|
|
|
|
|
.51 jsr K.GetMem
|
|
|
|
|
bcs .9
|
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
>STYA ZPPtr2 Target Buffer
|
2018-11-22 16:39:41 +00:00
|
|
|
|
txa
|
2018-11-23 16:20:19 +00:00
|
|
|
|
ldy #S.PS.hARGV
|
2019-01-21 06:52:04 +00:00
|
|
|
|
sta (PS.NewPSPtr),y
|
2018-10-15 15:39:21 +00:00
|
|
|
|
|
2019-01-21 06:52:04 +00:00
|
|
|
|
>LDYAI K.Buf256
|
|
|
|
|
jsr PS.AddYAToStrV
|
2018-11-28 14:58:42 +00:00
|
|
|
|
lda K.IOBuf
|
2018-11-23 16:20:19 +00:00
|
|
|
|
beq .6
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-28 14:58:42 +00:00
|
|
|
|
>LDYAI K.IOBuf
|
2019-01-21 06:52:04 +00:00
|
|
|
|
jsr PS.AddYAToStrV
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
.6 >LDYA PS.ArgV
|
|
|
|
|
>STYA ZPPtr1
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
|
|
|
|
.7 lda (ZPPtr1)
|
2018-10-15 06:25:40 +00:00
|
|
|
|
sta (ZPPtr2)
|
2019-07-08 15:39:14 +00:00
|
|
|
|
beq .8 Ending \0
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-11-23 16:20:19 +00:00
|
|
|
|
jsr PS.AddPtr1ToStrV
|
2019-10-12 14:20:09 +00:00
|
|
|
|
bra .7
|
|
|
|
|
|
2019-07-08 15:39:14 +00:00
|
|
|
|
.8 clc
|
2019-10-12 14:20:09 +00:00
|
|
|
|
.9 rts
|
2018-11-23 16:20:19 +00:00
|
|
|
|
*--------------------------------------
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.AddYAToStrV >STYA ZPPtr1
|
2018-11-23 16:20:19 +00:00
|
|
|
|
PS.AddPtr1ToStrV
|
2018-12-03 12:32:46 +00:00
|
|
|
|
ldy #$ff
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2018-10-15 06:25:40 +00:00
|
|
|
|
.2 iny
|
|
|
|
|
lda (ZPPtr1),y
|
2017-09-14 15:21:06 +00:00
|
|
|
|
sta (ZPPtr2),y
|
|
|
|
|
bne .2
|
2019-10-12 14:20:09 +00:00
|
|
|
|
|
2019-07-28 20:39:30 +00:00
|
|
|
|
jsr SHARED.AddYp1ToPtr1
|
|
|
|
|
jmp SHARED.AddYp1ToPtr2
|
2017-08-29 15:19:09 +00:00
|
|
|
|
*--------------------------------------
|
2019-01-21 06:52:04 +00:00
|
|
|
|
PS.AddYAp12ArgSize
|
|
|
|
|
pha
|
|
|
|
|
tya
|
|
|
|
|
sec +1 for \0
|
|
|
|
|
adc PS.ArgSize
|
|
|
|
|
sta PS.ArgSize
|
|
|
|
|
pla
|
|
|
|
|
adc PS.ArgSize+1
|
|
|
|
|
sta PS.ArgSize+1
|
|
|
|
|
rts
|
2018-05-07 14:59:51 +00:00
|
|
|
|
*/--------------------------------------
|
2019-07-19 15:35:19 +00:00
|
|
|
|
* # Kill
|
2018-12-04 13:20:35 +00:00
|
|
|
|
* ## C
|
|
|
|
|
* `int kill(short int pid, short int sig);`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* `>PUSHB sig`
|
|
|
|
|
* `lda pid`
|
|
|
|
|
* `>SYSCALL kill`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* A = Child PSID
|
2019-07-29 20:59:00 +00:00
|
|
|
|
*\--------------------------------------
|
|
|
|
|
K.Kill.PID .BS 1
|
|
|
|
|
*--------------------------------------
|
2018-12-04 13:20:35 +00:00
|
|
|
|
K.Kill cmp #0
|
|
|
|
|
beq .99 CS
|
2019-07-29 20:59:00 +00:00
|
|
|
|
sta K.Kill.PID
|
2018-12-04 13:20:35 +00:00
|
|
|
|
jsr CORE.GetPSByID
|
|
|
|
|
bcs .99
|
|
|
|
|
>STYA ZPPtr1
|
|
|
|
|
>PULLA
|
2019-07-24 05:53:09 +00:00
|
|
|
|
cmp #2+1
|
2018-12-04 13:20:35 +00:00
|
|
|
|
bcs .9
|
|
|
|
|
asl
|
|
|
|
|
tax
|
|
|
|
|
jmp (.1,x)
|
|
|
|
|
.1 .DA K.Kill.0
|
|
|
|
|
.DA K.Kill.1
|
2019-07-24 05:53:09 +00:00
|
|
|
|
.DA K.Kill.2
|
2018-12-04 13:20:35 +00:00
|
|
|
|
.9 lda #E.SYN
|
|
|
|
|
* sec
|
|
|
|
|
rts
|
|
|
|
|
.99 >RET 1
|
|
|
|
|
*--------------------------------------
|
2019-07-22 16:28:44 +00:00
|
|
|
|
K.Kill.1 ldy #S.PS.S
|
2019-10-03 06:25:27 +00:00
|
|
|
|
lda #S.PS.S.QUIT
|
2019-07-22 16:28:44 +00:00
|
|
|
|
sta (ZPPtr1),y
|
2019-07-24 05:53:09 +00:00
|
|
|
|
K.Kill.0 clc
|
2018-12-04 13:20:35 +00:00
|
|
|
|
rts
|
2019-07-24 05:53:09 +00:00
|
|
|
|
K.Kill.2 ldy #S.PS.hSID
|
2019-07-19 15:35:19 +00:00
|
|
|
|
lda (ZPPtr1),y
|
|
|
|
|
tax
|
|
|
|
|
lda S.Table.hSession-1,x
|
|
|
|
|
jsr K.FreeMem
|
2019-07-29 15:38:55 +00:00
|
|
|
|
ldx #5
|
|
|
|
|
.11 ldy .10,x
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
2019-07-29 15:38:55 +00:00
|
|
|
|
lda (ZPPtr1),y
|
2019-07-29 20:59:00 +00:00
|
|
|
|
beq .12
|
|
|
|
|
|
2019-07-29 15:38:55 +00:00
|
|
|
|
jsr K.FreeMem
|
|
|
|
|
|
|
|
|
|
.12 dex
|
|
|
|
|
bpl .11
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
2019-07-24 05:53:09 +00:00
|
|
|
|
lda (ZPPtr1)
|
|
|
|
|
bit #S.PS.F.CLOSEONX
|
|
|
|
|
beq .1
|
2019-07-25 06:13:56 +00:00
|
|
|
|
|
2019-07-19 15:35:19 +00:00
|
|
|
|
ldy #S.PS.hStdOut
|
|
|
|
|
lda (ZPPtr1),y
|
|
|
|
|
ldx #SYS.fclose
|
2019-08-05 13:30:58 +00:00
|
|
|
|
jsr K.SYSCALL2
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
2019-07-29 20:59:00 +00:00
|
|
|
|
.1 lda K.Kill.PID
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
.2 cmp PS.Table.PID,x
|
|
|
|
|
beq .3
|
|
|
|
|
|
|
|
|
|
inx
|
|
|
|
|
cpx CORE.PSCount
|
|
|
|
|
bne .2
|
2019-07-29 15:38:55 +00:00
|
|
|
|
bra *
|
2019-07-19 15:35:19 +00:00
|
|
|
|
.3 stz PS.Table.PID,x
|
|
|
|
|
lda PS.TABLE.hPS,x
|
|
|
|
|
stz PS.TABLE.hPS,x
|
2019-07-29 15:38:55 +00:00
|
|
|
|
jmp K.FreeMem
|
2019-07-19 15:35:19 +00:00
|
|
|
|
|
2019-07-29 15:38:55 +00:00
|
|
|
|
.10 .DA #S.PS.hSS,#S.PS.hDS,#S.PS.hCS
|
|
|
|
|
.DA #S.PS.hARGV,#S.PS.hENV,#S.PS.hCWD
|
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # LoadTxtFile
|
|
|
|
|
* Load TXT a file in memory (with ending 0)
|
|
|
|
|
* ## C
|
|
|
|
|
* `int loadtxtfile ( const char * filename, short int flags, short int ftype, int auxtype );`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* **In:**
|
|
|
|
|
* `>PUSHW auxtype`
|
|
|
|
|
* `>PUSHB ftype`
|
|
|
|
|
* `>PUSHB flags`
|
|
|
|
|
* `>LDYA filename`
|
|
|
|
|
* `>SYSCALL loadtxtfile`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* Y,A = File Length (without ending 0)
|
|
|
|
|
* X = hMem of Loaded File
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
.DUMMY
|
|
|
|
|
.OR ZPTMP 5 Bytes
|
|
|
|
|
FIO.bTXT .BS 1
|
|
|
|
|
FIO.hFILE .BS 1
|
|
|
|
|
FIO.MemPtr .BS 2
|
|
|
|
|
FIO.hMem .BS 1
|
|
|
|
|
.ED
|
2019-07-24 05:53:09 +00:00
|
|
|
|
*--------------------------------------
|
2019-07-29 15:38:55 +00:00
|
|
|
|
K.LoadTxtFile sec
|
|
|
|
|
.HS 90 BCC
|
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # LoadFile
|
|
|
|
|
* Load a file in memory
|
|
|
|
|
* ## C
|
|
|
|
|
* `int loadfile ( const char * filename, short int flags, short int ftype, int auxtype );`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* **In:**
|
|
|
|
|
* `>PUSHW auxtype`
|
|
|
|
|
* `>PUSHB ftype`
|
|
|
|
|
* `>PUSHB flags`
|
|
|
|
|
* `>LDYA filename`
|
|
|
|
|
* `>SYSCALL loadfile`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* Y,A = File Length
|
|
|
|
|
* X = hMem of Loaded File
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
K.LoadFile clc
|
|
|
|
|
|
|
|
|
|
ror FIO.bTXT
|
|
|
|
|
ldx #SYS.FOpen
|
2019-08-05 13:30:58 +00:00
|
|
|
|
jsr K.SYSCALL2
|
2019-07-29 15:38:55 +00:00
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
.12 sta FIO.hFILE
|
|
|
|
|
|
|
|
|
|
pha
|
|
|
|
|
>PUSHWI K.S.Stat
|
|
|
|
|
pla
|
|
|
|
|
ldx #SYS.FStat
|
2019-08-05 13:30:58 +00:00
|
|
|
|
jsr K.SYSCALL2
|
2019-07-29 15:38:55 +00:00
|
|
|
|
bcs .11
|
|
|
|
|
|
|
|
|
|
lda K.S.Stat+S.STAT.SIZE+3
|
|
|
|
|
ora K.S.Stat+S.STAT.SIZE+2
|
|
|
|
|
bne .10
|
|
|
|
|
|
|
|
|
|
>LDYA K.S.Stat+S.STAT.SIZE
|
|
|
|
|
|
|
|
|
|
bit FIO.bTXT Add 1 to buffer size for ending 0
|
|
|
|
|
bpl .1
|
|
|
|
|
iny
|
|
|
|
|
bne .1
|
|
|
|
|
inc
|
|
|
|
|
bne .1
|
|
|
|
|
.10 lda #E.FTB
|
|
|
|
|
.11 bra .99
|
|
|
|
|
.1 jsr K.GetMem
|
|
|
|
|
bcs .99
|
|
|
|
|
>STYA FIO.MemPtr
|
|
|
|
|
stx FIO.hMem
|
|
|
|
|
>PUSHW K.S.Stat+S.STAT.SIZE
|
|
|
|
|
>PUSHW FIO.MemPtr
|
|
|
|
|
lda FIO.hFILE
|
|
|
|
|
ldx #SYS.FRead
|
2019-08-05 13:30:58 +00:00
|
|
|
|
jsr K.SYSCALL2
|
2019-07-29 15:38:55 +00:00
|
|
|
|
bcc .2
|
|
|
|
|
pha
|
|
|
|
|
lda FIO.hMem
|
|
|
|
|
jsr K.FreeMem
|
|
|
|
|
pla
|
|
|
|
|
.99 pha
|
|
|
|
|
lda FIO.hFILE
|
|
|
|
|
ldx #SYS.FClose
|
2019-08-05 13:30:58 +00:00
|
|
|
|
jsr K.SYSCALL2
|
2019-07-29 15:38:55 +00:00
|
|
|
|
pla
|
|
|
|
|
sec
|
|
|
|
|
.9 rts
|
|
|
|
|
|
|
|
|
|
.2 sty .7+1
|
|
|
|
|
sta .8+1
|
|
|
|
|
bit FIO.bTXT
|
|
|
|
|
bpl .5
|
|
|
|
|
|
|
|
|
|
pha set ending 0
|
|
|
|
|
tya
|
|
|
|
|
|
|
|
|
|
* clc
|
|
|
|
|
|
|
|
|
|
adc FIO.MemPtr
|
|
|
|
|
sta .4+1
|
|
|
|
|
pla
|
|
|
|
|
adc FIO.MemPtr+1
|
|
|
|
|
sta .4+2
|
|
|
|
|
.4 stz $ffff Self Modified
|
|
|
|
|
|
|
|
|
|
.5 jsr .99 close file
|
2019-10-03 06:25:27 +00:00
|
|
|
|
|
2019-07-29 15:38:55 +00:00
|
|
|
|
.7 ldy #$ff SELFMODIFIED
|
|
|
|
|
.8 lda #$ff SELFMODIFIED
|
|
|
|
|
ldx FIO.hMem
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*/--------------------------------------
|
2020-01-17 11:23:11 +00:00
|
|
|
|
* # FileSearch
|
|
|
|
|
* Search a file in the provided PATH list
|
|
|
|
|
* And return, if found, the full path to it.
|
|
|
|
|
* ## C
|
|
|
|
|
* `int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* **In:**
|
|
|
|
|
* `>PUSHWI filename`
|
|
|
|
|
* `>PUSHWI fullpath`
|
|
|
|
|
* `>PUSHWI searchpath`
|
|
|
|
|
* `>PUSHWI filestat`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* CC : success
|
|
|
|
|
* DstBuf = FilePath
|
|
|
|
|
* DstStat = S.STAT
|
|
|
|
|
* CS : not found
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
K.FileSearch >PULLW .4+1 DstStat
|
|
|
|
|
>PULLW .2+1 DstBuf
|
|
|
|
|
>PULLW ENV.Search.2+1 path to search
|
|
|
|
|
>PULLW ENV.Search.4+1 filename to find
|
|
|
|
|
|
|
|
|
|
stz ENV.Search.98+1
|
|
|
|
|
|
|
|
|
|
jsr ENV.Search
|
|
|
|
|
bcs K.FileSearch.RTS
|
|
|
|
|
|
|
|
|
|
ldx #$ff
|
|
|
|
|
.1 inx
|
|
|
|
|
lda K.Buf256,x
|
|
|
|
|
.2 sta $ffff,x Self Modified
|
|
|
|
|
bne .1
|
|
|
|
|
ldx #S.STAT-1
|
|
|
|
|
.3 lda K.S.STAT,x
|
|
|
|
|
.4 sta $ffff,x Self Modified
|
|
|
|
|
dex
|
|
|
|
|
bpl .3
|
|
|
|
|
* clc
|
|
|
|
|
K.FileSearch.RTS
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
ENV.Search.CWD >STYA ENV.Search.4+1 filename to find
|
|
|
|
|
ldy #S.PS.hCWD
|
|
|
|
|
lda (PS.NewPSPtr),y
|
|
|
|
|
jsr K.GetMemPtr
|
|
|
|
|
>STYA ENV.Search.2+1
|
|
|
|
|
|
|
|
|
|
stz ENV.Search.98+1
|
|
|
|
|
|
|
|
|
|
bra ENV.Search
|
|
|
|
|
|
|
|
|
|
ENV.Search.LIB ldx #0
|
|
|
|
|
.HS 2C BIT ABS
|
|
|
|
|
ENV.Search.DRV ldx #2
|
|
|
|
|
.HS 2C BIT ABS
|
|
|
|
|
ENV.Search.PATH ldx #4
|
|
|
|
|
|
|
|
|
|
>STYA ENV.Search.4+1 filename to find
|
|
|
|
|
|
|
|
|
|
>PUSHW ENV.VARS,x
|
|
|
|
|
>PUSHWI 0 allocate...
|
|
|
|
|
jsr K.GetEnv get value for Search Path
|
|
|
|
|
bcs K.FileSearch.RTS
|
|
|
|
|
|
|
|
|
|
>STYA ENV.Search.2+1
|
|
|
|
|
stx ENV.Search.98+1
|
|
|
|
|
|
|
|
|
|
ENV.Search stz ENV.Search.1+1
|
|
|
|
|
|
|
|
|
|
ENV.Search.1 ldy #0 Self Modified Index in Search list string
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
ENV.Search.2 lda $ffff,y SELF MODIFIED
|
|
|
|
|
|
|
|
|
|
beq ENV.Search.3 end of string, try it....
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
cmp #':'
|
|
|
|
|
beq ENV.Search.3
|
|
|
|
|
|
|
|
|
|
sta K.Buf256,x
|
|
|
|
|
inx
|
|
|
|
|
bra ENV.Search.2
|
|
|
|
|
|
|
|
|
|
ENV.Search.3 txa
|
|
|
|
|
beq ENV.Search.98 String is empty....nothing to try
|
|
|
|
|
|
|
|
|
|
sty ENV.Search.1+1 save current index
|
|
|
|
|
|
|
|
|
|
ldy #0
|
|
|
|
|
|
|
|
|
|
ENV.Search.4 lda $ffff,y Self Modified, Append Filename...
|
|
|
|
|
sta K.Buf256,x
|
|
|
|
|
beq ENV.Search.5
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
inx
|
|
|
|
|
bra ENV.Search.4
|
|
|
|
|
|
|
|
|
|
ENV.Search.5 >PUSHWI K.S.STAT
|
|
|
|
|
>LDYAI K.Buf256
|
|
|
|
|
>SYSCALL2 stat
|
|
|
|
|
bcs ENV.Search.1 Failed...retry next path...
|
|
|
|
|
|
|
|
|
|
lda K.S.STAT+S.STAT.P.TYPE
|
|
|
|
|
cmp #S.FI.T.DIR Dir ?
|
|
|
|
|
beq ENV.Search.1
|
|
|
|
|
jsr ENV.Search.98 Discard Expanded hSrch list
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
ENV.Search.98 lda #$ff SELF MODIFIED : Discard Search list
|
|
|
|
|
beq .1
|
|
|
|
|
|
|
|
|
|
jsr K.FreeMem
|
|
|
|
|
|
|
|
|
|
.1 lda #MLI.E.FNOTFND
|
|
|
|
|
sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
ENV.VARS .DA .1
|
|
|
|
|
.DA .2
|
|
|
|
|
.DA .3
|
|
|
|
|
.1 .AZ "LIB"
|
|
|
|
|
.2 .AZ "DRV"
|
|
|
|
|
.3 .AZ "PATH"
|
|
|
|
|
*/--------------------------------------
|
2019-07-29 15:38:55 +00:00
|
|
|
|
* # GetMemStat
|
|
|
|
|
* **In:**
|
|
|
|
|
* Y,A = Ptr to 24 bytes buffer
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* Buffer filled with memory stats
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
K.GetMemStat >STYA ZPPtr1
|
|
|
|
|
|
|
|
|
|
ldy #23
|
|
|
|
|
ldx #7
|
|
|
|
|
.1 lda DevMgr.Stat,x
|
|
|
|
|
sta (ZPPtr1),y
|
|
|
|
|
dey
|
|
|
|
|
dex
|
|
|
|
|
bpl .1
|
|
|
|
|
sta SETREADAUX
|
|
|
|
|
jsr .2
|
|
|
|
|
sta CLRREADAUX
|
|
|
|
|
.2 ldx #7
|
|
|
|
|
.3 lda Mem.Table,x
|
|
|
|
|
sta (ZPPtr1),y
|
|
|
|
|
dey
|
|
|
|
|
dex
|
|
|
|
|
bpl .3
|
2019-07-30 08:57:25 +00:00
|
|
|
|
clc
|
2019-07-29 15:38:55 +00:00
|
|
|
|
rts
|
2020-01-09 15:54:14 +00:00
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # StrVDup
|
|
|
|
|
* **In:**
|
|
|
|
|
* Y,A = Src StrV
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* X = hMem of new StrV
|
|
|
|
|
* A = Str Count
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
K.StrVDup >STYA ZPPtr1
|
|
|
|
|
>STYA ZPPtr2
|
|
|
|
|
|
|
|
|
|
ldy #0
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
.1 lda (ZPPtr2),y
|
|
|
|
|
beq .2
|
|
|
|
|
|
|
|
|
|
.11 iny
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
inx
|
|
|
|
|
inc ZPPtr2+1
|
|
|
|
|
bra .1
|
|
|
|
|
|
|
|
|
|
.2 iny
|
|
|
|
|
bne .3
|
|
|
|
|
inx
|
|
|
|
|
inc ZPPtr2+1
|
|
|
|
|
|
|
|
|
|
.3 lda (ZPPtr2),y
|
|
|
|
|
bne .11
|
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
|
|
|
|
|
jsr K.getmem
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
>STYA ZPPtr2
|
|
|
|
|
phx
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
ldy #0
|
|
|
|
|
|
|
|
|
|
.4 lda (ZPPtr1),y
|
|
|
|
|
.5 sta (ZPPtr2),y
|
|
|
|
|
beq .6
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
bne .4
|
|
|
|
|
|
|
|
|
|
inc ZPPtr1+1
|
|
|
|
|
inc ZPPtr2+1
|
|
|
|
|
bra .4
|
|
|
|
|
|
|
|
|
|
.6 inx
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
bne .7
|
|
|
|
|
|
|
|
|
|
inc ZPPtr1+1
|
|
|
|
|
inc ZPPtr2+1
|
|
|
|
|
|
|
|
|
|
.7 lda (ZPPtr1),y
|
|
|
|
|
bne .5
|
|
|
|
|
sta (ZPPtr2),y Ending \0
|
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
plx hMem
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # Str2StrV
|
|
|
|
|
* Expand String and convert to ArgV List
|
|
|
|
|
* ## C
|
|
|
|
|
* short int str2strv(char* args, char* argv[])
|
|
|
|
|
* ## ASM
|
|
|
|
|
* `>PUSHW argv`
|
|
|
|
|
* `>LDYA args`
|
|
|
|
|
* `>SYSCALL Str2StrV`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* A = Arg count
|
|
|
|
|
*\--------------------------------------
|
|
|
|
|
ARG.bInQuote .EQ ZPPtr3
|
|
|
|
|
*--------------------------------------
|
2020-01-17 11:23:11 +00:00
|
|
|
|
K.Str2StrV jsr K.Expand
|
2020-01-09 15:54:14 +00:00
|
|
|
|
|
|
|
|
|
bcs .9
|
|
|
|
|
>STYA ZPPtr1
|
|
|
|
|
stx .80+1
|
|
|
|
|
|
|
|
|
|
>PULLW ZPPtr2 Get target buffer
|
|
|
|
|
ldx #0 Arg Count
|
|
|
|
|
stz ARG.bInQuote
|
|
|
|
|
|
|
|
|
|
.1 jsr SHARED.GetCharPtr1
|
|
|
|
|
beq .8
|
|
|
|
|
cmp #C.SPACE
|
|
|
|
|
beq .1 skip leading spaces
|
|
|
|
|
.2 cmp #'"' found a quote ?
|
|
|
|
|
bne .3
|
|
|
|
|
lda ARG.bInQuote
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta ARG.bInQuote
|
|
|
|
|
bra .7 skip quote and check next char
|
|
|
|
|
.3 cmp #C.SPACE
|
|
|
|
|
bne .6 regular char ...store...
|
|
|
|
|
bit ARG.bInQuote
|
|
|
|
|
bmi .6 between quotes... store space...
|
|
|
|
|
|
|
|
|
|
inx Found one arg !!!
|
|
|
|
|
lda #0 set this token End
|
|
|
|
|
jsr SHARED.PutCharPtr2
|
|
|
|
|
bra .1
|
|
|
|
|
.6 jsr SHARED.PutCharPtr2
|
|
|
|
|
|
|
|
|
|
.7 jsr SHARED.GetCharPtr1
|
|
|
|
|
bne .2
|
|
|
|
|
inx
|
|
|
|
|
.8 jsr SHARED.PutCharPtr2 set Argv[x] Ending 0
|
|
|
|
|
|
|
|
|
|
sta (ZPPtr2) set Array Ending 0
|
|
|
|
|
phx
|
|
|
|
|
.80 lda #$FF SELF MODIFIED
|
|
|
|
|
jsr K.FreeMem Discard expanded string
|
|
|
|
|
pla get back Arg Count
|
|
|
|
|
|
|
|
|
|
* clc
|
|
|
|
|
rts
|
|
|
|
|
.9 >RET 2 Discard target buffer
|
2019-07-19 15:35:19 +00:00
|
|
|
|
*--------------------------------------
|
2016-08-17 06:25:58 +00:00
|
|
|
|
MAN
|
2018-11-17 17:17:13 +00:00
|
|
|
|
SAVE USR/SRC/SYS/KERNEL.S.PS
|
|
|
|
|
LOAD USR/SRC/SYS/KERNEL.S
|
2016-08-17 06:25:58 +00:00
|
|
|
|
ASM
|