Kernel 0.9.1 : Code reorganization & move to CSTR

This commit is contained in:
Rémy GIBERT 2017-08-28 17:35:10 +02:00
parent 227a769d92
commit d2f7de5190
10 changed files with 178 additions and 148 deletions

Binary file not shown.

Binary file not shown.

View File

@ -151,6 +151,7 @@ H.BIN.JMP .EQ 2
H.BIN.CODE.LEN .EQ 8
*
H.BIN.EXE.DS.SIZE .EQ 10
H.BIN.EXE.SS.SIZE .EQ 12
H.BIN.EXE.REL.TABLE .EQ 16
*
H.BIN.DRV.HEADER.O .EQ 10
@ -201,7 +202,13 @@ SYS.FTell .EQ $3C
SYS.FEOF .EQ $3E
SYS.Remove.YA .EQ $40
SYS.Rename .EQ $42
* .EQ $44-$4E
* .EQ $44
* .EQ $46
SYS.GetDevByID.A .EQ $48
SYS.GetDevByName.YA .EQ $4A
SYS.GetDevStatus.A .EQ $4C
* .EQ $4E
* .EQ $50
SYS.SScanF .EQ $52
@ -223,11 +230,11 @@ SYS.ChOwn .EQ $6C
SYS.ChGrp .EQ $6E
*--------------------------------------
* .EQ $70
SYS.PStrCpy .EQ $72
SYS.PStrCat .EQ $74
SYS.PStrMatch .EQ $76
SYS.PStrUprYA .EQ $78
SYS.PStrLwrYA .EQ $7A
SYS.StrCpy .EQ $72
SYS.StrCat .EQ $74
SYS.StrMatch .EQ $76
SYS.StrUprYA .EQ $78
SYS.StrLwrYA .EQ $7A
SYS.StrFTime .EQ $7C
* .EQ $7E
@ -241,9 +248,9 @@ SYS.CTime2Time .EQ $92
SYS.PTime2Time .EQ $94
* .EQ $96
SYS.GetDevByID.A .EQ $98
SYS.GetDevByName.YA .EQ $9A
SYS.GetDevStatus.A .EQ $9C
* .EQ $98
* .EQ $9A
* .EQ $9C
* .EQ $9E
SYS.ExecProcessNewEnvYA .EQ $A0

View File

@ -4,66 +4,63 @@ LOMEM $A00
INC 1
AUTO 6
*/--------------------------------------
* # ExpandPStr.YA
* # ExpandStr.YA
* ## In:
* Y,A = PTR to String to Expand (PSTR)
* Y,A = PTR to String to Expand (C-String)
* ## Out:
* X = hMem to Expanded String (PSTR)
* X = hMem to Expanded String (C-String)
* Y,A = PTR to Expanded String
*\--------------------------------------
K.ExpandPStr.YA stz K.ExpandPStr.hPStr Reset Intermediate string...
K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string...
.1 >STYA ZPPtr2
stz K.Buf256 init Expanded String len=0
stz K.ExpandPStr.bFound No var found yet
stz K.ExpandStr.Len init Expanded String len=0
stz K.ExpandStr.bFound No var found yet
stz K.ExpandPStr.bNoExp Reset no expand flag
stz K.ExpandStr.bNoExp Reset no expand flag
ldy #0
.10 stz K.ExpandPStr.Name
stz K.ExpandPStr.bInVar
.10 stz K.ExpandStr.Name
stz K.ExpandStr.bInVar
.11 tya
cmp (ZPPtr2) End of PSTR?
.11 lda (ZPPtr2),y End of CSTR?
beq .8
iny
lda (ZPPtr2),y
cmp #'''
bne .21
lda K.ExpandPStr.bNoExp
lda K.ExpandStr.bNoExp
eor #$ff
sta K.ExpandPStr.bNoExp toggle flag
sta K.ExpandStr.bNoExp toggle flag
bra .11
.21 bit K.ExpandPStr.bNoExp
.21 bit K.ExpandStr.bNoExp
bpl .23
.22 ldx K.Buf256
inx
beq .8
.22 ldx K.ExpandStr.Len
sta K.Buf256,x
stx K.Buf256
inx
stx K.ExpandStr.Len
bra .11
.23 ldx K.ExpandPStr.bInVar already in a var?
.23 ldx K.ExpandStr.bInVar already in a var?
bne .3 yes....
cmp #'$' no, found one ?
bne .22 no, store....
sta K.ExpandPStr.bFound Toggle flag
sta K.ExpandPStr.bInVar
sta K.ExpandStr.bFound Toggle flag
sta K.ExpandStr.bInVar
bra .11 skip this char
.3 cmp #'{' we are in var, "{" after "$"?
bne .31
ldx K.ExpandPStr.Name No char in var yet ?
ldx K.ExpandStr.Name No char in var yet ?
beq .11 normal, "${" syntax is ok,skip
bne .5 not allowed char in varname, end of var
@ -71,59 +68,59 @@ K.ExpandPStr.YA stz K.ExpandPStr.hPStr Reset Intermediate string...
.31 cmp #'}' end of var?
beq .50
jsr K.ExpandPStrValidChar
jsr K.ExpandStrValidChar
bcc .32 yes, add to varname
ldx K.ExpandPStr.Name
ldx K.ExpandStr.Name
bne .5 varname has already chars...end of var
inx must be a $? or ?x.....go expand
stx K.ExpandPStr.Name
sta K.ExpandPStr.Name+1
stx K.ExpandStr.Name
sta K.ExpandStr.Name+1
bra .51 go Expand....
.32 ldx K.ExpandPStr.Name
.32 ldx K.ExpandStr.Name
inx
cpx #16
beq .11 varname longer than 15....ignore
sta K.ExpandPStr.Name,x
stx K.ExpandPStr.Name
sta K.ExpandStr.Name,x
stx K.ExpandStr.Name
bra .11
.5 dey last char was invalid...move back
.50 ldx K.ExpandPStr.Name
.50 ldx K.ExpandStr.Name
beq .52 var name is empty...start over
.51 phy save current index
jsr K.ExpandPStrGetValue
jsr K.ExpandStrGetValue
ply restore index in string...
.52 jmp .10 reset start flag and continue
.8 ldx K.ExpandPStr.Name end of PSTR,are we in a var?
.8 ldx K.ExpandStr.Name end of PSTR,are we in a var?
beq .80 no...exit...
jsr K.ExpandPStrGetValue yes, expand and add to STR
jsr K.ExpandStrGetValue yes, expand and add to STR
.80 lda K.ExpandPStr.hPStr working from our temp string ?
.80 lda K.ExpandStr.hPStr working from our temp string ?
beq .81 no...
jsr K.FreeMem.A yes, discard....
.81 >LDYAI K.Buf256
jsr K.NewPStr.YA
jsr K.NewCStr.YA
bcs .9
stx K.ExpandPStr.hPStr save this as temp string, in case of recurse
ldx K.ExpandPStr.bFound Did we expand something ?
stx K.ExpandStr.hPStr save this as temp string, in case of recurse
ldx K.ExpandStr.bFound Did we expand something ?
beq .82
jmp .1 Yes, start over with hPStr
.82 ldx K.ExpandPStr.hPStr
.82 ldx K.ExpandStr.hPStr
* or exit with Y,A from K.NewPStrYA
.9 rts
*--------------------------------------
K.ExpandPStrValidChar
K.ExpandStrValidChar
cmp #'0'
bcc .9
cmp #'9'+1
@ -142,11 +139,11 @@ K.ExpandPStrValidChar
.9 sec
rts
*--------------------------------------
K.ExpandPStrGetValue
K.ExpandStrGetValue
jsr ENV.ExpandSysVar
bcc .9
>LDYAI K.ExpandPStr.Name
>LDYAI K.ExpandStr.Name
jsr K.GetEnv.YA
bcs .9
@ -156,11 +153,12 @@ K.ExpandPStrGetValue
.9 rts
*--------------------------------------
K.ExpandPStr.bNoExp .BS 1
K.ExpandPStr.bInVar .BS 1
K.ExpandPStr.bFound .BS 1
K.ExpandPStr.hPStr .BS 1
K.ExpandPStr.Name .BS 16
K.ExpandStr.Len .BS 1
K.ExpandStr.bNoExp .BS 1
K.ExpandStr.bInVar .BS 1
K.ExpandStr.bFound .BS 1
K.ExpandStr.hPStr .BS 1
K.ExpandStr.Name .BS 16
*/--------------------------------------
* # PutEnv.YA
* ## In:
@ -332,19 +330,19 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
*--------------------------------------
* ENV.ExpandSysVar
* In:
* K.ExpandPStr.Name
* K.ExpandStr.Name
* Out:
* CC: Found
* Append VALUE to K.Buf256
* CS: Not Found
*--------------------------------------
ENV.ExpandSysVar
ldx K.ExpandPStr.Name
ldx K.ExpandStr.Name
cpx #1 is name 1 char?
bne .9
ldy #1
lda K.ExpandPStr.Name+1
lda K.ExpandStr.Name+1
cmp #'0'-1 $0...$9 ??
bcc .1
cmp #'9'+1

View File

@ -20,7 +20,7 @@ EVT.GetEvents lda #EvtMgr.Table
bpl .10 no, regular poll
lda K.IrkMgr.VBLINT
beq EVT.GetEvents.DEV no
beq .3 no
dec K.IrkMgr.VBLINT
bra .11
@ -28,17 +28,17 @@ EVT.GetEvents lda #EvtMgr.Table
.10 lda VBL get VLINE status
tax
eor EvtMgr.VBLState
bpl EVT.GetEvents.DEV no change,no tick
bpl .3 no change,no tick
txa
sta EvtMgr.VBLState save new
bpl EVT.GetEvents.DEV Up2down transition,no tick
bpl .3 Up2down transition,no tick
.11 inc A2osX.TIMER16
bne .1
inc A2osX.TIMER16+1
.1 dec EvtMgr.HZ.CNT
bne EVT.GetEvents.DEV not yet 100ms
bne .3 not yet 100ms
ldx A2osX.HZ
stx EvtMgr.HZ.CNT
@ -54,43 +54,8 @@ EVT.GetEvents lda #EvtMgr.Table
ora #S.EVT.F.T1SEC
.2 sta (pEvent)
jsr EVT.GetEvents.Add
*--------------------------------------
EVT.GetEvents.DEV
* >LDYAI DevMgr.Table
* >STYA pDev
* stz EvtMgr.Idx
*.1 ldy #S.DEV.F
* lda (pDev),y get S.DEV.F
* bit #S.DEV.F.EVENT
* beq .2 EVENT enabled ?
* ldx #DEVMGR.GETEVENT
* jsr pDevJmp Call DRV GetEvent function
* bcs .2 no event
* ldy #S.EVT.hDEV
* lda EvtMgr.Idx
* sta (pEvent),y
* jsr EVT.GetEvents.Add
* bcs .8 Event Q is full, exit now with CC
*.2 lda pDev
* clc
* adc #S.DEV
* sta pDev
* bcc .3
* inc pDev+1
*
*.3 lda EvtMgr.Idx
* inc EvtMgr.Idx
* cmp DevMgr.Count
* bne .1
jsr EVT.GetEvents.Add
.3
sec
lda EvtMgr.Count if 0, exit with CS (from cmp), and A=0 "no event"
beq .9

View File

@ -95,43 +95,54 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandStr.YA
*/--------------------------------------
* # GetFullPath.YA
* ## In :
* Y,A = Filename (PSTR)
* Y,A = Filename (C-String)
* ## Out :
* CC : success
* Y,A = FullPath (PSTR)
* Y,A = FullPath (C-String)
* X = hMem of FullPath
* CS : A = Error Code
*\--------------------------------------
K.GetFullPath.YA
>STYA ZPPtr3 Ptr1 & 2 used by StrCpy
lda (ZPPtr3)
beq K.GetFullPath.YA.9
>STYA ZPPtr1
stz K.Buf256
lda (ZPPtr1)
beq .8
ldy #1
lda (ZPPtr3),y
ldx #0
lda (ZPPtr1)
cmp #'/' full path starting with '/'?
beq .1 yes, do not append to current prefix
beq .2 yes, do not append to current prefix
ldy #S.PS.hPREFIX
lda (pPs),y
jsr K.GetMemPtr.A
>PUSHYA
>PUSHWI K.Buf256
>SYSCALL PStrCpy
>STYA ZPPtr2
.1 >PUSHW ZPPtr3
>PUSHWI K.Buf256
>SYSCALL PStrCat
K.GetFullPath.YA.NewStr
ldy #0
.1 lda (ZPPtr2),y
beq .2
sta K.Buf256,x
iny
inx
bne .1
.2 ldy #0
.3 lda (ZPPtr1),y
beq .8
sta K.Buf256,x
iny
inx
bne .3
.8 stz K.Buf256,x
>LDYAI K.Buf256
jsr K.NewPStr.YA
rts
K.GetFullPath.YA.9
sec
rts
*/--------------------------------------
* # LoadFile
* ## In:

View File

@ -31,8 +31,8 @@ Kernel.Init2 >LDAXI MSG.Init2
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK2
lda RRAMWRAMBNK2
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
>LDYAI A2osX.D2
>STYA ZPPtr1
@ -48,8 +48,8 @@ Kernel.Init2 >LDAXI MSG.Init2
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
>LDYAI A2osX.D1
>STYA ZPPtr1
@ -65,8 +65,8 @@ Kernel.Init2 >LDAXI MSG.Init2
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
>LDYAI A2osX.E0
>STYA ZPPtr1
@ -100,7 +100,7 @@ Kernel.Init2 >LDAXI MSG.Init2
Kernel.Init3 sta SETALTZP
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
jsr MemMgrInit
jsr PS0Init
bcs *
@ -147,6 +147,7 @@ Kernel.Init3 sta SETALTZP
>LDYAI STARTUP.CMDLINE
>SYSCALL ExpandStr.YA
phx Save Expanded CMDLINE for discard
>SYSCALL CreateProcessYA
bcs .9
pla
@ -168,7 +169,6 @@ Kernel.Init3 sta SETALTZP
>LDYAI MSG.StartupErr
>SYSCALL PrintF.YA
bra * No need to discard Expanded CMDLINE
*--------------------------------------
Kernel.Move ldy #0
.1 inc ZPPtr3
@ -768,7 +768,7 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
bne .1
>LDYAI K.ENV.SIZE get a buffer for ENV
>SYSCALL GetMem0.YA make sure blank!!
>SYSCALL GetMem0.YA make sure blank!!
bcs .9
txa
@ -781,7 +781,7 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
bcs .9
>LDYAI K.Buf256
jsr K.NewPStr.YA
jsr K.NewCStr.YA
bcs .9
txa
@ -818,8 +818,8 @@ MSG.IRQ >CSTR "-Interrupt Manager...\r\n"
MSG.EVT >CSTR "-Event Manager...\r\n"
MSG.FLT >CSTR "-Path Filter...\r\n"
MSG.TSK >CSTR "-Task Manager...\r\n"
MSG.Prefix >CSTR "Prefix:%S\r\n"
MSG.Startup >CSTR "Executing Kernel Startup Script...\r\nCmd:%S\r\n"
MSG.Prefix >CSTR "Prefix:%s\r\n"
MSG.Startup >CSTR "Executing Kernel Startup Script...\r\nCmd:%s\r\n"
MSG.StartupErr >CSTR "Failed : [$%h]\r\n"
MSG.Init3.OK >CSTR "A2osX[Stage3]:Complete.\r\n"
*--------------------------------------
@ -850,7 +850,7 @@ I.ENV.A2osX >PSTR "A2OSX"
I.ENV.PATH >PSTR "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB >PSTR "LIB=${A2OSX}LIB/"
I.ENV.DRV >PSTR "DRV=${A2OSX}DRV/"
STARTUP.CMDLINE >PSTR "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
STARTUP.CMDLINE >CSTR "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
*--------------------------------------
MLIOPEN00 .DA #3
.DA A2OSXCONF

View File

@ -48,9 +48,9 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.Rename
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.GetDevByID.A
.DA K.GetDevByName.YA
.DA K.GetDevStatus.A
.DA 0
.DA 0 $50
@ -95,9 +95,9 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.CTime2Time
.DA K.PTime2Time
.DA 0
.DA K.GetDevByID.A
.DA K.GetDevByName.YA
.DA K.GetDevStatus.A
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.ExecProcessNewEnv.YA $A0
@ -111,7 +111,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.GetArgC $B0
.DA K.GetArg.A
.DA K.ExpandPStr.YA
.DA K.ExpandStr.YA
.DA 0
.DA K.PutEnv.YA
.DA K.SetEnv
@ -451,6 +451,36 @@ K.NewPStr.YA >STYA ZPPtr2
clc
.9 rts
*--------------------------------------
K.NewCStr.YA >STYA ZPPtr1
lda (ZPPtr1)
inc
tay
lda #0 Y,A = len of new string
jsr K.GetMem.YA
bcs .9
>STYA ZPPtr2
lda (ZPPtr1)
tay
phy
beq .2
.1 lda (ZPPtr1),y
dey
sta (ZPPtr2),y
bne .1
.2 ply
lda #0
sta (ZPPtr2),y
>LDYA ZPPtr1
clc
.9 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -32,6 +32,8 @@ K.CreateProcess.YA
sta .8+1
>DEBUG
jsr PS.Init
bcc .8
@ -233,10 +235,10 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS
.9 rts
*--------------------------------------
PS.Init >LDYA K.CreateProcess.CmdLine
jsr PS.Str2StrArray.YA
jsr PS.CmdLine2Args.YA
bcs .9
phy save PTR to StrArray...
phy save PTR to Args[0]...
pha
txa
@ -271,7 +273,24 @@ PS.Init >LDYA K.CreateProcess.CmdLine
ldy #S.PS.hDS
sta (ZPPtr3),y save DS hMem in TSKSLOT
.2
.2 ldy #H.BIN.EXE.SS.SIZE+1
lda (ZPPtr4),y Load DS.SIZE HI
tax
dey
ora (ZPPtr4),y
beq * DS.SIZE=0!!!!
lda (ZPPtr4),y
tay
txa Y,A = DS.SIZE
jsr K.GetMem0.YA
bcs .9
txa
ldy #S.PS.hSS
sta (ZPPtr3),y save DS hMem in TSKSLOT
clc
.9 rts
@ -354,8 +373,8 @@ PS.DupEnv.A jsr K.GetMemPtr.A
clc
.9 rts
*/--------------------------------------
* # Str2StrArray.YA
* Convert a CSTR (e.g. : command Line) to a Array of CSTRs (Args[])
* # CmdLine2Args.YA
* Convert a CSTR (e.g. : command Line) to Args[]
* ## In:
* Y,A = PTR to String
* ## Out:
@ -365,7 +384,7 @@ PS.DupEnv.A jsr K.GetMemPtr.A
* CS : error
* A = SYS error code
*\--------------------------------------
PS.Str2StrArray.YA
PS.CmdLine2Args.YA
>STYA ZPPtr1
lda (ZPPtr1) Get mem size STRLEN+1
inc

View File

@ -33,19 +33,19 @@ A2osX.D1 .PH $D000
.INB /A2OSX.SRC/SYS/KERNEL.S.DIRENT
.INB /A2OSX.SRC/SYS/KERNEL.S.FIO
.INB /A2OSX.SRC/SYS/KERNEL.S.PFT
.INB /A2OSX.SRC/SYS/KERNEL.S.DEV
.EP
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
.INB /A2OSX.SRC/SYS/KERNEL.S.STRING
.INB /A2OSX.SRC/SYS/KERNEL.S.STDLIB
.INB /A2OSX.SRC/SYS/KERNEL.S.TIME
.INB /A2OSX.SRC/SYS/KERNEL.S.DEV
.INB /A2OSX.SRC/SYS/KERNEL.S.PS
.INB /A2OSX.SRC/SYS/KERNEL.S.ARG
.INB /A2OSX.SRC/SYS/KERNEL.S.ENV
.INB /A2OSX.SRC/SYS/KERNEL.S.RUN
.INB /A2OSX.SRC/SYS/KERNEL.S.EVT
.INB /A2OSX.SRC/SYS/KERNEL.S.TSK
.INB /A2OSX.SRC/SYS/KERNEL.S.RUN
.EP
A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP