Kernel 0.92

This commit is contained in:
Rémy GIBERT 2018-11-23 17:20:19 +01:00
parent d9a3b4eb87
commit fe897c3257
16 changed files with 340 additions and 177 deletions

View File

@ -62,7 +62,7 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
.1 ldy #S.PS.ARGC .1 ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 cmp #1
bcs .2 bcs .2
jmp CS.RUN.DUMP jmp CS.RUN.DUMP
@ -81,7 +81,7 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 cmp #1
beq CS.RUN.QUERY beq CS.RUN.QUERY
cmp #3 cmp #3

View File

@ -63,7 +63,6 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
CS.RUN.IPOK ldy #S.PS.ARGC CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #1
bne .1 bne .1
jmp CS.RUN.DUMP jmp CS.RUN.DUMP

View File

@ -42,8 +42,7 @@ L.MSG.ERR .DA MSG.ERR
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.ARGC CS.INIT ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 beq .90
bcc .90
.1 >INC.G ArgIndex .1 >INC.G ArgIndex

View File

@ -49,7 +49,6 @@ CS.INIT >LDYA L.LIBCRYPT
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
dec
beq .99 beq .99
.1 >INC.G ArgIndex .1 >INC.G ArgIndex

View File

@ -46,7 +46,7 @@ CS.INIT clc
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 cmp #1
bcs CS.RUN.SET bcs CS.RUN.SET
CS.RUN.READ jsr NSC.Init CS.RUN.READ jsr NSC.Init

View File

@ -54,7 +54,7 @@ CL.CHARIN tax
.1 cpx #$7f .1 cpx #$7f
bne .2 bne .2
jmp CL.DEL jmp CL.SUPPR
.2 jmp CL.Insert .2 jmp CL.Insert
@ -68,12 +68,12 @@ CL.CHARIN.CTRL cpx #C.CR
>LDYA L.MSG.ECHOCRLF >LDYA L.MSG.ECHOCRLF
>SYSCALL printf >SYSCALL printf
>LDA.G CL.Ptr * >LDA.G CL.Ptr
tay * tay
lda #0 * lda #0
sta (ZPCLBuf),y * sta (ZPCLBuf),y
tya * tya
>STA.G CL.Len * >STA.G CL.Len
lda #$ff lda #$ff
>STA.G CL.bExec >STA.G CL.bExec
@ -96,7 +96,7 @@ CL.CHARIN.CTRL cpx #C.CR
.12 cpx #24 Ctrl-X .12 cpx #24 Ctrl-X
bne .13 bne .13
jmp CL.SUPPR jmp CL.DEL
.13 clc .13 clc
rts rts
@ -478,9 +478,9 @@ CL.CheckCmd.RTS
*-------------------------------------- *--------------------------------------
* TXT : add "/PATH/SHELL" "/PATH/CMD" * TXT : add "/PATH/SHELL" "/PATH/CMD"
*-------------------------------------- *--------------------------------------
CL.CheckCmd.TXT >LDYA L.SHELL *CL.CheckCmd.TXT >LDYA L.SHELL
jsr CL.AddYAToArgV * jsr CL.AddYAToArgV
bcs CL.CheckCmd.90 * bcs CL.CheckCmd.90
*-------------------------------------- *--------------------------------------
* BIN : add "/PATH/CMD" * BIN : add "/PATH/CMD"
*-------------------------------------- *--------------------------------------

View File

@ -96,12 +96,10 @@ L.MSG.BATCHERR .DA MSG.BATCHERR
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.MSG.PRINTENV .DA MSG.PRINTENV L.MSG.PRINTENV .DA MSG.PRINTENV
L.MSG.PID .DA MSG.PID L.MSG.PID .DA MSG.PID
L.SHELL .DA SHELL
L.ENV.ROOT .DA ENV.ROOT L.ENV.ROOT .DA ENV.ROOT
L.ENV.PATH .DA ENV.PATH L.ENV.PATH .DA ENV.PATH
L.ENV.PWD .DA ENV.PWD L.ENV.PWD .DA ENV.PWD
L.ENV.PS1 .DA ENV.PS1 L.ENV.PS1 .DA ENV.PS1
L.ENV.SHELL .DA ENV.SHELL
L.ENV.HOME .DA ENV.HOME L.ENV.HOME .DA ENV.HOME
L.FMT.DATE .DA FMT.DATE L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME L.FMT.TIME .DA FMT.TIME
@ -173,12 +171,6 @@ CS.RUN jsr CMD.Init
lda (pPS),y lda (pPS),y
beq .1 no arg, continue starting interactive beq .1 no arg, continue starting interactive
>PUSHW L.ENV.SHELL
lda #0
>SYSCALL ArgV
>SYSCALL setenv
bcs CS.INIT.RTS
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
@ -566,13 +558,11 @@ MSG.PID .AZ "PID=%d\r\n"
FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.DATE .AZ "%A (%w), %B %d %Y"
FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)"
*-------------------------------------- *--------------------------------------
SHELL .AZ "${ROOT}SBIN/SHELL"
ENV.ROOT .AZ "ROOT" ENV.ROOT .AZ "ROOT"
ENV.PATH .AZ "PATH" ENV.PATH .AZ "PATH"
ENV.PWD .AZ "PWD" ENV.PWD .AZ "PWD"
ENV.PS1 .AZ "PS1" ENV.PS1 .AZ "PS1"
ENV.HOME .AZ "HOME" ENV.HOME .AZ "HOME"
ENV.SHELL .AZ "SHELL"
*-------------------------------------- *--------------------------------------
* https://www.tldp.org/LDP/abs/html/io-redirection.html * https://www.tldp.org/LDP/abs/html/io-redirection.html
*-------------------------------------- *--------------------------------------

View File

@ -73,7 +73,7 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
CS.RUN.IPOK ldy #S.PS.ARGC CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 cmp #1
bcc .9 bcc .9
ldy #S.IPCFG.IP+3 ldy #S.IPCFG.IP+3

View File

@ -47,7 +47,7 @@ CS.INIT clc
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #3 cmp #2
bcc .9 bcc .9

View File

@ -38,7 +38,7 @@ L.MSG.LOAD .DA MSG.LOAD
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.PS.ARGC CS.RUN ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
cmp #2 cmp #1
bcc .9 bcc .9
lda #1 get PTR to ARG[1] (Driver name) lda #1 get PTR to ARG[1] (Driver name)

View File

@ -35,7 +35,10 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.MSG.LOGIN .DA MSG.LOGIN L.MSG.LOGIN .DA MSG.LOGIN
L.MSG.PASSWORD .DA MSG.PASSWORD L.MSG.PASSWORD .DA MSG.PASSWORD
L.ENV.SHELL .DA ENV.SHELL
L.SHELL .DA SHELL L.SHELL .DA SHELL
L.ENV.HOME .DA ENV.HOME
L.HOME .DA HOME
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT clc CS.INIT clc
@ -92,11 +95,27 @@ CS.RUN lda #0
>SYSCALL PutChar >SYSCALL PutChar
bcs .9 bcs .9
jsr CS.RUN.SETENV
bcs .9
>PUSHBI S.PS.F.HOLD >PUSHBI S.PS.F.HOLD
>LDYA L.SHELL >LDYA L.SHELL
>SYSCALL ExecL >SYSCALL ExecL
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.SETENV >PUSHW L.ENV.HOME
>LDYA L.HOME
>SYSCALL setenv
bcs .9
>PUSHW L.ENV.SHELL
>LDYA L.SHELL
>SYSCALL setenv
bcs .9
.9 rts
*--------------------------------------
CS.DOEVENT CS.DOEVENT
sec sec
rts rts
@ -184,7 +203,10 @@ INPUT.LINEIN ldy #INPUT.Status
CS.END CS.END
MSG.LOGIN .AZ "\r\nlogin:" MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:" MSG.PASSWORD .AZ "\r\npassword:"
ENV.SHELL .AZ "SHELL"
ENV.HOME .AZ "HOME"
SHELL .AZ "${ROOT}SBIN/SHELL" SHELL .AZ "${ROOT}SBIN/SHELL"
HOME .AZ "${ROOT}ROOT"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY

171
SYS/KERNEL.S.DEF.txt Normal file
View File

@ -0,0 +1,171 @@
NEW
PREFIX
AUTO 4,1
*--------------------------------------
ZPKERNEL .EQ $0
ZPMEMMGR .EQ $10
*--------------------------------------
ZPPtr1 .EQ ZPKERNEL
ZPPtr2 .EQ ZPKERNEL+2
ZPPtr3 .EQ ZPKERNEL+4
ZPPtr4 .EQ ZPKERNEL+6
pFD .EQ ZPKERNEL+10
pDRV .EQ ZPKERNEL+12
pIOCTL .EQ ZPKERNEL+12
pIOBuf .EQ ZPKERNEL+14
*--------------------------------------
SYS.BASL0 .EQ $800
*--------------------------------------
* AuxMove / XFer
*--------------------------------------
A1L .EQ $3C
A2L .EQ $3E
A4L .EQ $42
XFer.JMP .EQ $3ED
AuxMove .EQ $C311
XFer .EQ $C314 CS:M->X, VS:Use Aux ZP
*--------------------------------------
* $42-$47 ProDOS Block Device Drivers Main
*--------------------------------------
DRV.BLK.Cmd .EQ $42
DRV.BLK.UnitNum .EQ $43
DRV.BLK.Buf .EQ $44
DRV.BLK.BlkNum .EQ $47
*--------------------------------------
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*--------------------------------------
SIGNFLG .EQ $16 COS,SIN,TAN
INDEX .EQ $5E ->$5F
FORPNT .EQ $85 ->$86
FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2
ARG .EQ $A5 -> $A9 (5 bytes)
ARG.SIGN .EQ $AA
*FAC.EXTENSION .EQ $AC
TXTPTR .EQ $B8
*--------------------------------------
* ROM Entry Point
*--------------------------------------
ROM.FSUB .EQ 0
ROM.FADD .EQ 2
ROM.LTOF .EQ 4
ROM.LOG .EQ 6
ROM.FMULT .EQ 8
ROM.SETARG .EQ 10
ROM.FDIV .EQ 12
ROM.SETFAC .EQ 14
ROM.GETFAC .EQ 16 Copy FAC to (FORPNT)
ROM.FCOMP .EQ 18
ROM.QINT .EQ 20
ROM.FIN .EQ 22
ROM.FOUT .EQ 24
ROM.SQR .EQ 26
ROM.PWR .EQ 28
ROM.EXP .EQ 30
ROM.COS .EQ 32
ROM.SIN .EQ 34
ROM.TAN .EQ 36
ROM.ATAN .EQ 38
*--------------------------------------
* Memory Map
*--------------------------------------
A2osX.SaveSM .EQ $100 Aux
A2osX.SaveSX .EQ $101 Aux
*--------------------------------------
* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
* Main $300 -> 3EF : <free>
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
* Aux $200 -> 3FD : /RAM Driver
* Aux $3FE -> 3FF : IRQ Vector
*--------------------------------------
K.S.STAT .EQ $0300 S.STAT for internal kernel operations
*K.S.DIB .EQ $0340 S.DIB=25 or higher depends on dev type
K.S.IOCTL .EQ $0360 9 bytes
K.MLI.PATH .EQ $0369 64+1
K.MLI.PARAMS .EQ $03AA Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now)
*--------------------------------------
K.STACKTOP .EQ $03ED XFer !!! down to $3E0
*--------------------------------------
*** $3F0-$3FF IRQ Handler.... ***
*--------------------------------------
* Main/Aux $400 -> $7FF : TXT PAGE1 Console Screen
* Main/Aux $800 -> $BFF : TXT PAGE2 System Screen
*--------------------------------------
* free $0C00->$17FF = $C00 (3072) Aux
*--------------------------------------
Dev.Table.hPath .EQ $0C00 K.Dev.MAX
Dev.Table.hFD .EQ $0C20 K.Dev.MAX
*--------------------------------------
Nod.Table.hPath .EQ $0C40 K.NOD.MAX
Nod.Table.hFD .EQ $0C60 K.NOD.MAX
*--------------------------------------
PS.Table.PID .EQ $0C80 K.PS.MAX
PS.Table.hPS .EQ $0CA0 K.PS.MAX
PS.Table.Hits .EQ $0CC0 K.PS.MAX
PS.Table.Stats .EQ $0CE0 K.PS.MAX
*--------------------------------------
OF.Table.hPath .EQ $0D00 K.OF.MAX
OF.Table.hFD .EQ $0D20 K.OF.MAX
*--------------------------------------
Evt.Table .EQ $0D60 K.EVT.MAX*S.EVT.SIZE=4*8=32b
*--------------------------------------
Flt.Table .EQ $0D80 K.FLT.MAX*S.FLT.SIZE=4*32=128b
*--------------------------------------
K.Buf256 .EQ $0E00
*--------------------------------------
K.IOBuf .EQ $0F00
*--------------------------------------
*** Z80 Reserved $1000-10FF***
*--------------------------------------
Z80CODE .EQ $1000 (00000h) Up To $10FF
Z80STACK .EQ $10FF (000FFh) Down to $1000
*--------------------------------------
* CORE $1100->$17FF = $700 Main
*--------------------------------------
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
*--------------------------------------
Mem.Table .EQ $1800 Slot 0 is Reserved
Mem.LoMem .EQ $1800
Mem.Free .EQ $1802
Mem.HiMem .EQ $1804
Mem.LastSlot .EQ $1806
*--------------------------------------
Mem.MLoMem .EQ $2000
Mem.MHiMem .EQ $BD00
Mem.XLoMem .EQ $2000
Mem.XHiMem .EQ $C000
*--------------------------------------
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
*--------------------------------------
H.BIN.T .EQ 0
H.BIN.T.DRV65 .EQ $4CD8 6502:cld,jmp abs
H.BIN.T.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x)
H.BIN.T.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x)
*H.BIN.T.LIB80 .EQ $A28D Z80:
*H.BIN.T.BIN80 .EQ $A28D Z80:
H.BIN.JMP .EQ 2
H.BIN.CPU .EQ 4
H.BIN.CPU.6502 .EQ $60
H.BIN.CPU.65C02 .EQ $61
H.BIN.CPU.65R02 .EQ $62
H.BIN.CPU.65816 .EQ $63
H.BIN.V .EQ 5
H.BIN.F .EQ 6
H.BIN.CS.SIZE .EQ 8
H.BIN.DS.SIZE .EQ 10
H.BIN.SS.SIZE .EQ 12
H.BIN.ZP.SIZE .EQ 13
*
H.BIN.EXE.REL.TABLE .EQ 16
*
H.BIN.DRV.REL.TABLE .EQ 2 Including main jmp
*--------------------------------------
MAN
SAVE INC/KERNEL.I
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -138,11 +138,11 @@ Kernel.Init3 sta SETALTZP
>LDYAI MSG.Prefix >LDYAI MSG.Prefix
>SYSCALL printf >SYSCALL printf
* lda KBD lda KBD
* bpl .1 bpl .1
* sta KBDSTROBE sta KBDSTROBE
* cmp #$84 CTRL-D for Maintenace mode cmp #$84 CTRL-D for Maintenace mode
* bne .1 bne .1
>PUSHBI 0 >PUSHBI 0
>LDYAI MSG.CTRLD >LDYAI MSG.CTRLD

View File

@ -741,6 +741,43 @@ MEM.PutCharPtr2 sta (ZPPtr2)
bne .8 bne .8
inc ZPPtr2+1 inc ZPPtr2+1
.8 rts .8 rts
*/--------------------------------------
* # GetPSStat
* **In:**
* Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
* ## RETURN VALUE
* Buffer filled with PS stats
*\--------------------------------------
K.GetPSStat >STYA ZPPtr1
ldx #0
ldy #1
lda CORE.InKernelStats
sta (ZPPtr1),y
iny
.1 lda PS.Table.PID,x
beq .2
lda PS.Table.hPS,x
sta (ZPPtr1),y
iny
lda PS.Table.Stats,x
sta (ZPPtr1),y
iny
.2 inx
cpx #K.PS.MAX
bne .1
.9 tya
lsr
dec
sta (ZPPtr1)
rts
*-------------------------------------- *--------------------------------------
* 6502/65C02/65816 OPCODES * 6502/65C02/65816 OPCODES
* Bit 3 : 1 = absolute addressing * Bit 3 : 1 = absolute addressing

View File

@ -59,14 +59,11 @@ K.ExecV >STYA PS.ArgV
PS.Exec stz PS.Load.hBIN PS.Exec stz PS.Load.hBIN
jsr PS.CreateChild Child S.PS at ZPPtr3 jsr PS.CreateChild Child S.PS at ZPPtr3,PS.Load.hMem
bcs .9 bcs .9
sta .8+1
jsr PS.Load jsr PS.Load
bcs .90 bcs .90
jsr PS.AddArgV jsr PS.AddArgV
bcc .8 bcc .8
@ -82,7 +79,7 @@ PS.Exec stz PS.Load.hBIN
sec sec
rts rts
.8 lda #$ff self modified .8 lda PS.Load.hMem
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* PS.CreateChild * PS.CreateChild
@ -131,6 +128,7 @@ PS.CreateChild ldx CORE.PSCount
bcs .99 bcs .99
>STYA ZPPtr3 >STYA ZPPtr3
stx PS.Load.hMem
txa txa
plx plx
sta PS.Table.hPS,x sta PS.Table.hPS,x
@ -217,17 +215,17 @@ PS.Load >PUSHWI K.S.STAT
cmp #S.FI.T.BIN cmp #S.FI.T.BIN
beq PS.LoadBIN beq PS.LoadBIN
cmp #S.FI.T.TXT cmp #S.FI.T.TXT
beq .10
cmp #S.FI.T.SYS
bne .98 bne .98
bra * * beq .10
* cmp #S.FI.T.SYS
* bra *
.10 jsr PS.LoadGetHeader .10 jsr PS.LoadGetHeader
bcs .99 bcs .99
>LDYAI PS.Load.ROOT >LDYAI PS.Load.ROOT
jsr K.GetEnv jsr K.GetEnv ZPPtr3 Trashed
bcs .97 bcs .97
>STYA .21+1 >STYA .21+1
@ -235,8 +233,8 @@ PS.Load >PUSHWI K.S.STAT
ldx #$ff ldx #$ff
.2 inx .2 inx
.21 lda $ffff,x .21 lda $ffff,x SELF MODIFIED
sta K.Buf256,x sta K.IOBuf,x
bne .2 bne .2
ldy #0 ldy #0
@ -251,10 +249,19 @@ PS.Load >PUSHWI K.S.STAT
.4 iny .4 iny
inx inx
lda K.IOBuf+128-1,y lda K.IOBuf+128-1,y
sta K.Buf256-1,x sta K.IOBuf-1,x
bne .4 bne .4
>LDYAI K.Buf256 >PUSHWI K.S.STAT
>LDYAI K.IOBuf
>SYSCALL stat BANK 1
bcs .99
lda PS.Load.hMem Restore ZPPtr3 trashed by GetEnv
jsr K.GetMemPtr
>STYA ZPPtr3
>LDYAI K.IOBuf
>SYSCALL NewStr >SYSCALL NewStr
bcs .99 bcs .99
stx PS.Load.hBIN stx PS.Load.hBIN
@ -271,7 +278,7 @@ PS.LoadBIN >LDYA PS.ArgV
PS.LoadBIN.YA jsr BIN.Load PS.LoadBIN.YA jsr BIN.Load
bcs .9 bcs .9
>STYA ZPPtr4 save PTR to Code Segment >STYA ZPPtr4 save PTR to Code Segment
phy phy
ldy #S.PS.ZP.CODE+1 ldy #S.PS.ZP.CODE+1
sta (ZPPtr3),y save pCode HI... sta (ZPPtr3),y save pCode HI...
@ -364,7 +371,7 @@ PS.LoadGetHeader
>PUSHBI O.RDONLY >PUSHBI O.RDONLY
>LDYA PS.ArgV >LDYA PS.ArgV
>SYSCALL fopen >SYSCALL fopen
bcs .99 bcs PS.LoadGetHeader.RTS
sta .1+1 sta .1+1
>PUSHWI 128 >PUSHWI 128
@ -378,12 +385,14 @@ PS.LoadGetHeader
>SYSCALL fclose >SYSCALL fclose
pla pla
plp plp
.99 rts PS.LoadGetHeader.RTS
rts
*-------------------------------------- *--------------------------------------
PS.Load.ROOT .AZ "ROOT" PS.Load.ROOT .AZ "ROOT"
PS.Load.HEADER .AZ "#!/" PS.Load.HEADER .AZ "#!/"
PS.Load.hBIN .BS 1 PS.Load.hBIN .BS 1
PS.Load.ArgSize .BS 2 PS.Load.ArgSize .BS 2
PS.Load.hMem .BS 1
*-------------------------------------- *--------------------------------------
* hBIN + PS.ArgV -> #S.PS.hARGV * hBIN + PS.ArgV -> #S.PS.hARGV
*-------------------------------------- *--------------------------------------
@ -394,19 +403,25 @@ PS.AddArgV stz PS.Load.ArgSize
beq .10 beq .10
jsr K.GetMemPtr jsr K.GetMemPtr
jsr K.strlen
iny +1 for \0
>STYA PS.Load.ArgSize >STYA PS.Load.ArgSize
ldx #0 ARGC-1
.HS 2C
.10 ldx #$ff ARGC-1
>LDYA PS.ArgV >LDYA PS.ArgV
>STYA ZPPtr1 >STYA ZPPtr1
>STYA ZPPtr2
.1 lda (ZPPtr2) .1 lda (ZPPtr1)
beq .4 beq .4
inx
ldy #0 ldy #0
.2 iny .2 iny
lda (ZPPtr2),y lda (ZPPtr1),y
bne .2 bne .2
tya tya
@ -417,84 +432,46 @@ PS.AddArgV stz PS.Load.ArgSize
inc PS.Load.ArgSize+1 inc PS.Load.ArgSize+1
.3 tya .3 jsr PS.AddYp1ToPtr1
sec
adc ZPPtr2
sta ZPPtr2
bcc .1
inc ZPPtr2+1
bra .1 bra .1
.4 >LDYA PS.Load.ArgSize .4 txa
ldy #S.PS.ARGC
sta (ZPPtr3),y
>LDYA PS.Load.ArgSize Add 1 for ending 0
iny iny
bne .5 bne .5
inc inc
jsr K.GetMem .5 jsr K.GetMem
bcs .9 bcs PS.LoadGetHeader.RTS
>STYA ZPPtr2 Target Buffer
txa
bcs .9
ldy #S.PS.hARGV ldy #S.PS.hARGV
sta (ZPPtr3),y sta (ZPPtr3),y
dey S.PS.ARGC lda PS.Load.hBIN
txa beq .6
dec don't include $0
sta (ZPPtr3),y
* clc jsr K.GetMemPtr
>STYA ZPPtr1
jsr PS.AddPtr1ToStrV
.6 >LDYA PS.ArgV
>STYA ZPPtr1
.7 lda (ZPPtr1)
sta (ZPPtr2)
beq .8 Ending \0
jsr PS.AddPtr1ToStrV
bra .7
.8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* PS.DupArgs
* In:
* Y,A = Ptr To Args[]
* Out:
* A = hMem
* X = Count
*--------------------------------------
PS.DupArgs >STYA ZPPtr1
>STYA ZPPtr2
lda #1
sta .7+1
lda #0
sta .8+1 len = 1 for array ending 0
.1 lda (ZPPtr2)
beq .7
ldy #0
.2 iny
lda (ZPPtr2),y
bne .2
tya
sec
adc .7+1
sta .7+1
bcc .3
inc .8+1
.3 tya
sec
adc ZPPtr2
sta ZPPtr2
bcc .1
inc ZPPtr2+1
bra .1
.7 ldy #$ff SELF MODIFIED
.8 lda #$ff SELF MODIFIED
bra PS.DupStrV
*--------------------------------------
* PS.DupEnv * PS.DupEnv
* In: * In:
* A = ENV hMem To Duplicate * A = ENV hMem To Duplicate
@ -507,22 +484,27 @@ PS.DupEnv jsr K.GetMemPtr
>LDYAI K.ENV.SIZE >LDYAI K.ENV.SIZE
PS.DupStrV jsr K.GetMem jsr K.GetMem
bcs .9 bcs .9
>STYA ZPPtr2 >STYA ZPPtr2 Target Buffer
phx save hMem phx save hMem
jsr PS.SetMemOwner Set Ownership jsr PS.SetMemOwner Set Ownership
ldx #0 Count
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
sta (ZPPtr2) sta (ZPPtr2)
beq .8 Ending \0 beq .8 Ending \0
inx jsr PS.AddPtr1ToStrV
bra .1
.8 pla hMem
clc
.9 rts
*--------------------------------------
PS.AddPtr1ToStrV
ldy #0 ldy #0
.2 iny .2 iny
@ -530,26 +512,26 @@ PS.DupStrV jsr K.GetMem
sta (ZPPtr2),y sta (ZPPtr2),y
bne .2 bne .2
jsr PS.AddYp1ToPtr1
tya tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .3
inc ZPPtr1+1
.3 tya
sec sec
adc ZPPtr2 adc ZPPtr2
sta ZPPtr2 sta ZPPtr2
bcc .1 bcc .8
inc ZPPtr2+1 inc ZPPtr2+1
bra .1
.8 rts
*--------------------------------------
PS.AddYp1ToPtr1 tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .8
.8 pla hMem inc ZPPtr1+1
clc .8 rts
.9 rts
*-------------------------------------- *--------------------------------------
PS.SetMemOwner lda CORE.LastPSID PS.SetMemOwner lda CORE.LastPSID
ldy #S.MEM.OWNERPID ldy #S.MEM.OWNERPID
@ -567,43 +549,6 @@ K.GetPSStatus jsr CORE.GetPSByID
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
.9 rts .9 rts
*/--------------------------------------
* # GetPSStat
* **In:**
* Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
* ## RETURN VALUE
* Buffer filled with PS stats
*\--------------------------------------
K.GetPSStat >STYA ZPPtr1
ldx #0
ldy #1
lda CORE.InKernelStats
sta (ZPPtr1),y
iny
.1 lda PS.Table.PID,x
beq .2
lda PS.Table.hPS,x
sta (ZPPtr1),y
iny
lda PS.Table.Stats,x
sta (ZPPtr1),y
iny
.2 inx
cpx #K.PS.MAX
bne .1
.9 tya
lsr
dec
sta (ZPPtr1)
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/SYS/KERNEL.S.PS SAVE USR/SRC/SYS/KERNEL.S.PS

View File

@ -46,7 +46,6 @@ A2osX.D2 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.PS .INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV .INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.MATH
.EP .EP
A2osX.E0 .PH $E000 A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP .INB USR/SRC/SYS/KERNEL.S.JMP
@ -55,6 +54,8 @@ A2osX.E0 .PH $E000
********* TMP ***** go to A2osX.D1 ********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.FIO .INB USR/SRC/SYS/KERNEL.S.FIO
.INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.IO
********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.MATH
.LIST ON .LIST ON
DevMgr.FreeMem .EQ * DevMgr.FreeMem .EQ *
.LIST OFF .LIST OFF