Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-11-15 15:40:48 +01:00
parent a4c15ff86a
commit 6f4c01182e
12 changed files with 204 additions and 101 deletions

Binary file not shown.

View File

@ -255,7 +255,7 @@ MSG3 .AZ "High Memory: $%H\r\n"
MSG4 .AZ "Free ULimit: $%H\r\n"
MSG5 .AZ "Low Memory: $%H\r\n"
MSG.FREE .AZ "\r\nFree Memory: %D Bytes.\r\n"
MSG.FLAGS .AS "UZNAfcds"
MSG.FLAGS .AS "UZXAfcds"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -98,9 +98,8 @@ CMD.CD.YA >SYSCALL realpath
txa
jmp CMD.SetCWDA we have '/'
.12 >PUSHEA.G StatBuf
>LDYA ZPPtr1
>SYSCALL STAT
.12 >LDYA ZPPtr1
jsr IO.StatYA
bcs .19
.10 >LDA.G StatBuf+S.STAT.P.TYPE
@ -241,18 +240,23 @@ CMD.SET.1
bne .99
jsr CORE.ArgV.Next
beq CMD.SET.UNSET
cmp #'`'
beq CMD.SET.EXEC
jsr EXP.GET
bcs .9
>PUSHYA
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
bcc CMD.SET.YA
rts
.8 clc
.9 rts
.99 jmp CMD.E.CSYN
CMD.SET.YA >PUSHYA
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
rts
CMD.SET.UNSET >LDYA ZPVarNamePtr
>SYSCALL UnsetEnv
rts
@ -262,6 +266,7 @@ CMD.SET.GET >LDYA ZPVarNamePtr
bcc .1
clc
rts
.1 >PUSHYA push value
>LDYA ZPVarNamePtr
>PUSHYA push name
@ -409,7 +414,7 @@ CMD.READ lda (ZPArgVBufPtr)
CMD.READ.VAR jsr CL.Reset
.1 >SYSCALL GetChar
bcs CMD.READ.VAR.9
bcs CMD.SLEEP.RTS
jsr CL.CHARIN
@ -417,18 +422,12 @@ CMD.READ.VAR jsr CL.Reset
bpl .1
lda (ZPCLBuf)
bne CMD.READ.VAR.SET
CMD.READ.VAR.UNSET
>LDYA ZPVarNamePtr
>SYSCALL UnSetEnv
rts
CMD.READ.VAR.SET
>PUSHW ZPCLBuf
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
CMD.READ.VAR.9 rts
bne .2
jmp CMD.SET.UNSET
.2 >LDYA ZPCLBuf
jmp CMD.SET.YA
*--------------------------------------
CMD.SLEEP lda (ZPArgVBufPtr)
beq CMD.REN.CSYN
@ -439,7 +438,7 @@ CMD.SLEEP lda (ZPArgVBufPtr)
>PULLL.G Sleep
clc
rts
CMD.SLEEP.RTS rts
*--------------------------------------
CMD.PAUSE lda #$FF
>STA.G bPause
@ -461,10 +460,11 @@ CMD.PWD ldy #S.PS.hCWD
*--------------------------------------
CMD.RD lda (ZPArgVBufPtr)
beq CMD.REN.CSYN
>PUSHEA.G StatBuf
>LDYA ZPArgVBufPtr
>SYSCALL STAT
jsr IO.StatYA
bcs .99
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne CMD.REN.CSYN
@ -716,6 +716,7 @@ CMD.EXIT.POP and #$3F
cmp #C.SWITCH SWITCH : hValue
beq .2
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
@ -799,13 +800,15 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
rts keep existing context
.10 jsr CORE.StkPull remove previous C.CASE
bra CMD.CASE
.1 jsr EXP.GET
bcs .9
>PUSHYA
lda (pDATA)
lda (pData)
tay
dey get hVALUE
lda (pDATA),y
lda (pData),y
>SYSCALL GetMemPtr
>SYSCALL strcmp
ror CS if !=
@ -823,10 +826,13 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN
and #$3F
cmp #C.SWITCH
beq .1
cmp #C.CASE
bne CMD.E.CSYN
jsr CORE.StkPull remove C.CASE
.1 jsr CORE.StkGet
@ -838,10 +844,13 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN
and #$3F
cmp #C.SWITCH
beq .3
cmp #C.CASE
beq .2
cmp #C.DEFAULT
bne CMD.E.CSYN
.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT
@ -970,9 +979,11 @@ CMD.NEXT jsr CORE.StkGet Y = StkPtr
*--------------------------------------
CMD.NEXT.LIST lda (pData),y Y = StkPtr
bpl .1
jsr CMD.NEXT.LIST.TOKEN
bcs .9
bpl .1
lda (pData)
sec
sbc #6
@ -985,11 +996,13 @@ CMD.NEXT.LIST lda (pData),y Y = StkPtr
sta ZPInputBufPtr+1
clc
rts
.1 lda (pData)
tay
sec
sbc #8
sta (pData)
dey
dey
lda (pData),y hVARNAME
@ -1036,12 +1049,15 @@ CMD.NEXT.LIST.TOKEN
sta (ZPCLBuf),y
iny
bra .1
.3 lda #0
sta (ZPCLBuf),y
tya
beq .8
jsr CMD.READ.VAR.SET
>LDYA ZPCLBuf
jsr CMD.SET.YA
bcs .9
lda (pData)
@ -1053,14 +1069,12 @@ CMD.NEXT.LIST.TOKEN
dey
lda ZPPtr1+1
sta (pData),y
lda #$80
clc
rts
.8 jsr CMD.READ.VAR.UNSET
bcs .9
lda #0
* clc
.9 rts
.8 jmp CMD.NEXT.END
*--------------------------------------
* stack-4 CmdPtr
* stack-3 hFILE/hPIPE
@ -1087,11 +1101,13 @@ CMD.NEXT.FILEEXEC
sta ZPInputBufPtr+1
clc
rts
.1 lda (pData)
tay
sec
sbc #6
sta (pData)
dey
dey
lda (pData),y hVARNAME
@ -1120,17 +1136,20 @@ CMD.NEXT.LINE lda (pData)
dey
lda (pData),y hFILE/hPIPE
>SYSCALL fgets
bcs .8
jsr CMD.READ.VAR.SET
bcs .9
bcs CMD.NEXT.END
>LDYA ZPCLBuf
jsr CMD.SET.YA
bcs CMD.NEXT.LINE.RTS
lda #$80
* clc
rts
.8 jsr CMD.READ.VAR.UNSET
CMD.NEXT.END jsr CMD.SET.UNSET
bcs .9
lda #0
* clc
clc keep this CLC for CMD.NEXT.LIST.TOKEN
.9
CMD.NEXT.LINE.RTS
rts
@ -1165,15 +1184,12 @@ CMD.LOOP jsr CORE.StkPull
bne .9
txa
bmi .8
lda (pData)
dec
dec Discard loop Ptr
sta (pData)
clc
rts
ldx #2 Discard loop Ptr
jmp CMD.EXIT.POPX
.8 jmp CORE.StkPullInputBufPtr
.9 lda #E.NOWHILE
sec
rts

View File

@ -627,12 +627,14 @@ CORE.StkPush.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

View File

@ -7,9 +7,11 @@ EXP.GET jsr CORE.ArgV.Next
>LDYA ZPArgVBufPrev no op, return text value
clc
rts
.1 >LDYA ZPArgVBufPrev
>SYSCALL AToL To Int32 on stack
bcs .9
.2 >LDYA L.EXP.OP.MATH + - .... ?
jsr CORE.LookupArgVBuf
bcs .94
@ -31,10 +33,12 @@ EXP.GET jsr CORE.ArgV.Next
bcs .9
>LEA.G M32.BUF
rts
.94 >POP 4
.9 lda #E.ESYN
sec
rts
EXP.FPU.EXEC ldy CORE.Operator
ldx EXP.OP.MATH.FPU,y
@ -155,9 +159,8 @@ EXP.OP.UNARY.F jsr EXP.OP.UNARY.STAT
bra EXP.OP.UNARY.DEF.8
EXP.OP.UNARY.STAT
>PUSHEA.G StatBuf
>LDYA ZPArgVBufPtr
>SYSCALL STAT
jsr IO.StatYA
php
jsr CORE.ArgV.Next
@ -196,18 +199,23 @@ EXP.TEST.BINARY lda CORE.Operator
>STYA ZPPtr1
jsr CORE.ArgV.Next
beq EXP.TEST.BINARY.ESYN
>PUSHW ZPPtr1
>LDYA ZPArgVBufPtr
>SYSCALL strcmp
bcs .1 CS if !=
lda #%010 010 str1 = str2
bra EXP.TEST.BINARY.END
.1 asl CS if <
bcs .2
lda #%100 010 str1 < str2
bra EXP.TEST.BINARY.END
bra EXP.TEST.BINARY.END
.2 lda #%001 010 str1 > str2
bra EXP.TEST.BINARY.END
bra EXP.TEST.BINARY.END
EXP.TEST.BINARY.ESYN4
>POP 4

View File

@ -147,6 +147,14 @@ IO.FOpenYAX pha
>SYSCALL fopen
rts
*--------------------------------------
IO.StatYA phy
pha
>PUSHEA.G StatBuf
pla
ply
>SYSCALL STAT
rts
*--------------------------------------
IO.PrintBatchErrMsg
>LDYA ZPInputBuf
>STYA ZPPtr1

View File

@ -326,7 +326,7 @@ SYS.SListFree .EQ $FE
S.MEM.F .EQ 0
S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
S.MEM.F.INIT0 .EQ %01000000 Fill with "0"
S.MEM.F.NOMOVE .EQ %00100000
S.MEM.F.NOCROSS .EQ %00100000
S.MEM.F.ALIGN .EQ %00010000
S.MEM.F.FD .EQ %00001000
S.MEM.F.CODE .EQ %00000100

View File

@ -145,9 +145,8 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT
jmp CS.RUN.EXEC
.8 >PUSHBI 0
>LDYA L.MSG.BAD
>SYSCALL printf
.8 >LDYA L.MSG.BAD
>SYSCALL puts
bcs .9
dec ZPRetryCnt
@ -477,7 +476,7 @@ MSG.NOAUTH .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT.
MSG.CRLF .AZ "\r\n"
MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:"
MSG.BAD .AZ "Bad user or password\r\n"
MSG.BAD .AZ "Bad user or password"
MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0
ETCISSUE .AZ "${ROOT}ETC/ISSUE"
ETCMOTD .AZ "${ROOT}ETC/MOTD"

View File

@ -162,6 +162,7 @@ Kernel.Init3C >PUSHBI 0
>PUSHBI 0 PS Flags
>LDYAI CTRLR.SHELL
bra .8
.7 >PUSHWI ETCINIT.CMDLINE
>PUSHBI 2
>LDYAI MSG.EtcInit
@ -169,8 +170,10 @@ Kernel.Init3C >PUSHBI 0
>PUSHBI 0 PS Flags
>LDYAI ETCINIT.CMDLINE
.8 >SYSCALL2 ExecL
bcs Kernel.Init3.Err
>PUSHBI 0
>LDYAI MSG.Init3.OK
>SYSCALL2 printf

View File

@ -189,7 +189,7 @@ IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type
rts
*--------------------------------------
IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE
ldx #S.MEM.F.ALIGN
jsr MEM.GetMem.YAX
bcs .9

View File

@ -38,11 +38,14 @@ MEM.GetMem.YAX stx MEM.ReqFlags
tya
bit #K.MEM.ALIGN-1 aligned ?
beq .10 yes, request it
and #K.MEM.nALIGNm1 align on boundary
clc
adc #K.MEM.ALIGN
bcc .10
inc ZPMemMgrSize+1
.10 sta ZPMemMgrSize
>LDYAI Mem.Table
>STYA ZPMemMgrSPtr
@ -51,18 +54,35 @@ MEM.GetMem.YAX stx MEM.ReqFlags
stx MEM.BestScore
stx MEM.BestScore+1
ldx #0 Current slot=0
bra .4 skip slot 0, Check if some free slot to reuse first
.1 inx move to next slot
jsr Mem.NextSlot
lda (ZPMemMgrSPtr) Get Flags
bmi .4 in use ?
.2 lda MEM.ReqFlags Found an empty slot
and #S.MEM.F.ALIGN is request needs a page align ?
beq .3
bit #S.MEM.F.NOCROSS
beq .21
ldy ZPMemMgrSize+1 > 255, not applicable
bne .22 Align to page if $100
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y get LO of PTR
clc
adc ZPMemMgrSize
bcs .4 cross page boundary....
lda MEM.ReqFlags get back flags to test if match
.21 bit #S.MEM.F.ALIGN is request needs a page align ?
beq .3
.22 ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y get LO of PTR
bne .4 not page-aligned
.3 ldy #S.MEM.LEN
sec
lda (ZPMemMgrSPtr),y get LEN of this block
@ -72,7 +92,6 @@ MEM.GetMem.YAX stx MEM.ReqFlags
lda (ZPMemMgrSPtr),y
sbc ZPMemMgrSize+1
ply Y,A = SlotLen - ReqSize
bcc .4 req size > slot size
cpy MEM.BestScore
@ -80,8 +99,8 @@ MEM.GetMem.YAX stx MEM.ReqFlags
sbc MEM.BestScore+1
pla
bcs .4 Delta is >= BestScore
bne .4 Delta is > 255...
sty MEM.BestScore
sta MEM.BestScore+1
stx MEM.BestSlot
@ -96,18 +115,41 @@ MEM.GetMem.YAX stx MEM.ReqFlags
*-------------- Create a New SLOT
.5 lda MEM.ReqFlags
and #S.MEM.F.ALIGN is request needs a page align ?
beq .6
lda Mem.Free target PTR will be page aligned ?
sec
sbc ZPMemMgrSize
beq .6 yes, allocate
bit #S.MEM.F.NOCROSS
beq .51
lda ZPMemMgrSize+1 > 255, not applicable
bne .52 Align to page if $100
lda Mem.Free target PTR will be in same page ?
cmp ZPMemMgrSize
bcs .6 yes, allocate
tay no, reserve a free slot to fill gap
lda #0
jsr Mem.AddSlot X = new slot
bcs .9
lda #S.MEM.F.NOCROSS Make sure marked FREE
sta (ZPMemMgrSPtr)
bra .6
.51 bit #S.MEM.F.ALIGN is request needs a page align ?
beq .6
.52 lda Mem.Free target PTR will be page aligned ?
sec
sbc ZPMemMgrSize
beq .6 yes, allocate
tay no, reserve a free slot to fill gap
lda #0
jsr Mem.AddSlot X = new slot
bcs .9
lda #S.MEM.F.ALIGN Make sure marked FREE
sta (ZPMemMgrSPtr)
.6 >LDYA ZPMemMgrSize
jsr Mem.AddSlot X = new slot
bcs .9
@ -119,30 +161,8 @@ MEM.GetMem.YAX stx MEM.ReqFlags
and #S.MEM.F.INIT0
beq .8
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta .12+1
iny
lda (ZPMemMgrSPtr),y
sta .12+2
lda ZPMemMgrSize
eor #$ff
tay y=not lo count
lda ZPMemMgrSize+1
eor #$ff a=not hi count
phx
ldx #0
.11 iny
bne .12
inc
beq .13
.12 stz $ffff,x
inx
bne .11
inc .12+2
bra .11
.13 plx
jsr MEM.Init0
.8 lda #0
ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y
@ -167,6 +187,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
ldx Mem.LastSlot
inx
beq .99 > 255 ERR:OUT OF SLOT
lda Mem.Free Compute base PTR=FREE-REQ size
sec
sbc ZPMemMgrTmp1
@ -199,6 +220,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
clc
rts
.98 pla discard new Mem.Free HI
.99 lda #E.OOM
sec
rts
@ -209,7 +231,38 @@ MEM.NextSlot lda ZPMemMgrSPtr
sta ZPMemMgrSPtr
bcc .8
inc ZPMemMgrSPtr+1
.8 rts
.8 rts
*--------------------------------------
MEM.Init0 phx
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta .12+1
iny
lda (ZPMemMgrSPtr),y
sta .12+2
lda ZPMemMgrSize
eor #$ff
tay y=not lo count
lda ZPMemMgrSize+1
eor #$ff a=not hi count
ldx #0
.11 iny
bne .12
inc
beq .13
.12 stz $ffff,x
inx
bne .11
inc .12+2
bra .11
.13 plx
rts
*/--------------------------------------
* # FreeMem
* A = hMem To Free

View File

@ -57,6 +57,7 @@ K.ExecL sty .1+1
*\--------------------------------------
K.ExecV >STYA PS.ArgV
>PULLB PS.Flags
PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
bcs .9
sta .8+1
@ -208,14 +209,18 @@ PS.Load ldy #$ff
.1 iny
lda (PS.ArgV),y
beq .2 no / in path...try search in PATH
cmp #'/'
bne .1
>PUSHWI K.S.STAT
>LDYA PS.ArgV found /, some path specified, no search
ldx #SYS.stat
jsr K.SYSCALL2
bcc .6 REAL path in K.Buf256
.99 rts
.2 >LDYA PS.ArgV
jsr ENV.Search.PATH Get fullpath in K.Buf256
bcc .6
@ -226,9 +231,11 @@ PS.Load ldy #$ff
>LDYA PS.ArgV
jsr ENV.Search.YA
bcs .99
.6 lda K.S.STAT+S.STAT.P.TYPE
cmp #S.FI.T.BIN
beq PS.LoadBIN
.7 cmp #S.FI.T.TXT
beq PS.Load.SCRIPT
@ -289,7 +296,7 @@ PS.Load.SCRIPT ldx #$ff
PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT
bcs .9
>STYA ZPPtr4 save PTR to Code Segment
phy
ldy #S.PS.ZP.CODE+1
sta (PS.NewPSPtr),y save pCode HI...
@ -327,23 +334,20 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT
phy
ldy #S.PS.ZP.DATA+1
sta (PS.NewPSPtr),y save pData HI...
sta (PS.NewPSPtr),y save pData HI...
dey
pla
sta (PS.NewPSPtr),y save pData LO...
sta (PS.NewPSPtr),y save pData LO...
txa
ldy #S.PS.hDS
sta (PS.NewPSPtr),y save DS hMem in S.PS
sta (PS.NewPSPtr),y save DS hMem in S.PS
jsr Mem.SetOwner Set Ownership
.2 ldy #H.BIN.SS.SIZE
lda (ZPPtr4),y Load SS.SIZE
ldy #S.PS.ZP.STACK
sta (PS.NewPSPtr),y save pStack LO...
tay
beq .3 SS.SIZE.LO=0, set as default $100
@ -351,19 +355,29 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT
.3 inc
ldx #S.MEM.F.ALIGN+S.MEM.F.STACK
ldx #S.MEM.F.NOCROSS+S.MEM.F.STACK
jsr MEM.GetMem.YAX
bcs .9
phy save pStack base LO
ldy #S.PS.ZP.STACK+1
sta (PS.NewPSPtr),y save pStack HI...(LO already set to Stack TOP)
sta (PS.NewPSPtr),y save pStack HI...
ldy #S.PS.ZP.LOCAL+1
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
sta (PS.NewPSPtr),y
txa
ldy #S.PS.hSS
sta (PS.NewPSPtr),y save SS hMem in S.PS
sta (PS.NewPSPtr),y save SS hMem in S.PS
clc Potentially CS from ADC (ZPPtr4),y
jmp Mem.SetOwner Set Ownership
.9 rts
*--------------------------------------