Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-07-22 08:31:01 +02:00
parent 1df9d5e505
commit 7639e30658
13 changed files with 180 additions and 230 deletions

View File

@ -41,7 +41,7 @@ CS.START cld
.DA #0 .DA #0
.DA CS.END-CS.START Code Size (without Constants) .DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize .DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size .DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------

View File

@ -41,8 +41,8 @@ CS.START cld
.DA #S.PS.F.EVENT .DA #S.PS.F.EVENT
.DA #0 .DA #0
.DA CS.END-CS.START Code Size (without Constants) .DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize .DA DS.END-DS.START Data Segment Size
.DA #16 Stack Size .DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------

View File

@ -95,7 +95,7 @@ Dev.Detect >LDYA L.MSG.DETECT
.3 >SYSCALL puts .3 >SYSCALL puts
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -86,7 +86,7 @@ Dev.Detect >STYA ARGS
>SYSCALL printf >SYSCALL printf
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -86,7 +86,7 @@ Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL printf >SYSCALL printf
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -105,7 +105,7 @@ Dev.Detect >STYA ARGS
>SYSCALL printf >SYSCALL printf
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -108,7 +108,7 @@ Dev.Detect >STYA ARGS
>SYSCALL printf >SYSCALL printf
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -106,7 +106,7 @@ Dev.Detect >STYA ARGS
>SYSCALL printf >SYSCALL printf
>PUSHWI DRV.END >PUSHWI DRV.END
>PUSHWI DRV.CS.END >PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START >PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START >LDYA L.DRV.CS.START
>SYSCALL InsDrv >SYSCALL InsDrv

View File

@ -3,9 +3,7 @@ NEW
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR FAC 15 Bytes .OR FAC 15 Bytes
BIN.CmdLine .BS 2
BIN.hMem .BS 1 BIN.hMem .BS 1
BIN.Move.Len .BS 2
BIN.R.CS.Start .BS 2 BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2 BIN.R.CS.End .BS 2
BIN.R.End .BS 2 BIN.R.End .BS 2
@ -14,28 +12,24 @@ BIN.R.Offset .BS 2
*-------------------------------------- *--------------------------------------
* LoadLib * LoadLib
* in : * in :
* Y,A = PTR To "LibName.o" C-String * Y,A = PTR To "LibName" C-String
* out : * out :
* A = hMem To loaded LIB * A = hMem To loaded LIB
*-------------------------------------- *--------------------------------------
K.LoadLib jsr ENV.Search.LIB K.LoadLib jsr ENV.Search.LIB
bcs .9 bcs .9
>LDYAI K.Buf256
jsr BIN.Load Y,A = "/PATH/BIN" jsr BIN.Load Y,A = "/PATH/BIN"
bcs .9 bcs .9
>STYA .1+1 >STYA .1+1
stx .8+1
txa Pass hLib to LibLoad txa Pass hLib to LibLoad
ldx #LIBMGR.LOAD ldx #LIBMGR.LOAD
.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function .1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function
ldx .8+1
bcs BIN.Load.Cleanup bcs BIN.Load.Cleanup
.8 lda #$ff SELF MODIFIED, hLib lda BIN.hMem
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -71,12 +65,10 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
jsr ENV.Search.DRV jsr ENV.Search.DRV
bcs .9 bcs .9
>LDYAI K.Buf256
jsr BIN.Load Y,A = "/PATH/BIN" jsr BIN.Load Y,A = "/PATH/BIN"
bcs .9 bcs .9
>STYA .3+1 >STYA .3+1
stx .8+1
ldx #$ff ldx #$ff
@ -93,18 +85,17 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
.3 jsr $ffff SELF MODIFIED, call Dev.Detect .3 jsr $ffff SELF MODIFIED, call Dev.Detect
.8 ldx #$ff SELF MODIFIED, hMem
jsr BIN.Load.Cleanup jsr BIN.Load.Cleanup
bcs .9 bcs .9
lda #0 Make sure RC = 0 if success lda #0 Make sure RC = 0 if success
clc * clc
.9 rts .9 rts
BIN.Load.Cleanup BIN.Load.Cleanup
php php
pha pha
txa lda BIN.hMem
jsr K.FreeMem jsr K.FreeMem
pla pla
plp plp
@ -118,9 +109,7 @@ BIN.Load.Cleanup.RTS
* Y,A = MEMPTR * Y,A = MEMPTR
* X = hMem of Code Segment * X = hMem of Code Segment
*-------------------------------------- *--------------------------------------
BIN.Load >STYA BIN.CmdLine BIN.Load ldx #0
ldx #0
.1 cpx Mem.LastSlot .1 cpx Mem.LastSlot
beq BIN.Load.1 beq BIN.Load.1
@ -142,21 +131,19 @@ BIN.Load >STYA BIN.CmdLine
ldy #0 ldy #0
.2 lda (BIN.CmdLine),y .2 lda K.Buf256,y
.3 cmp $ffff,y SELF MODIFIED .3 cmp $ffff,y SELF MODIFIED
bne .1 bne .1
iny iny
ora #0 ora #0
bne .2 bne .2
stx BIN.hMem save hMem
txa txa
jsr MEM.GetMemByID jsr MEM.GetMemByID
jsr Mem.IncRefCnt jsr Mem.IncRefCnt
clc clc
jmp MEM.GetMEMPTR jmp MEM.GetMEMPTR Y,A=Ptr
* X=hMem, Y,A=Ptr
*-------------------------------------- *--------------------------------------
* STAT Already called by Filesearch in FindDRV, FindLIB * STAT Already called by Filesearch in FindDRV, FindLIB
* STAT Already called by PS.Load (TXT,BIN,SYS) * STAT Already called by PS.Load (TXT,BIN,SYS)
@ -167,18 +154,16 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
>PUSHYA Push AUXTYPE >PUSHYA Push AUXTYPE
>PUSHBI S.FI.T.BIN >PUSHBI S.FI.T.BIN
>PUSHBI O.RDONLY >PUSHBI O.RDONLY
>LDYA BIN.CmdLine >LDYAI K.Buf256
ldx #SYS.LoadFile ldx #SYS.LoadFile
jsr K.SYSCALL2.BANK BANK1!!! jsr K.SYSCALL2.BANK BANK1!!!
bcs BIN.Load.Cleanup.RTS Error Loading file bcs BIN.Load.Cleanup.RTS Error Loading file
stx BIN.hMem save hMem stx BIN.hMem save hMem
pha YA=CODE+DATA size pha YA=CODE+DATA size
tya tya
* clc CC from bcs .99 * clc
adc BIN.R.CS.Start Get AUXTYPE for actual Base Address adc BIN.R.CS.Start Get AUXTYPE for actual Base Address
sta BIN.R.End compute Range End=AUXTYPE+FILELEN sta BIN.R.End compute Range End=AUXTYPE+FILELEN
pla pla
@ -187,30 +172,20 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
txa txa
jsr K.GetMemPtr jsr K.GetMemPtr
>STYA ZPPtr1 set ZPPtr1 -> Code start >STYA ZPPtr1 set ZPPtr1 -> New Code start
pha YA = actual load address jsr BIN.ComputeOffsetYA YA = actual load address
tya
sec
sbc BIN.R.CS.Start
sta BIN.R.Offset Offset=ZPPtr1-AUXTYPE
pla
sbc BIN.R.CS.Start+1
sta BIN.R.Offset+1
ldy #H.BIN.CS.SIZE get Code Len ldy #H.BIN.CS.SIZE get Code Len
lda (ZPPtr1),y lda (ZPPtr1),y
clc pha
adc BIN.R.CS.Start
sta BIN.R.CS.End ZPPtr1 + CodeLen
iny iny
lda (ZPPtr1),y lda (ZPPtr1),y
adc BIN.R.CS.Start+1 ply
sta BIN.R.CS.End+1 jsr BIN.ComputeCSEndYA
jsr BIN.RelExe jsr BIN.RelExe
>LDYA BIN.CmdLine get back bin path >LDYAI K.Buf256 get back bin path
ldx #SYS.strdup make a copy of this string ldx #SYS.strdup make a copy of this string
jsr K.SYSCALL2.BANK jsr K.SYSCALL2.BANK
bcs .98 bcs .98
@ -226,65 +201,53 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
ldy #S.MEM.BIN ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
ldx BIN.hMem return hMEM to Caller...
clc clc
jmp MEM.GetMEMPTR ...and Y,A=PTR to CS jmp MEM.GetMEMPTR ...and Y,A=PTR to CS
.98 ldx BIN.hMem .98 jmp BIN.Load.Cleanup Discard Loaded Code, exits CS
jmp BIN.Load.Cleanup Discard Loaded Code, exits CS
*/-------------------------------------- */--------------------------------------
* # InsDrv * # InsDrv
* ## C * ## C
* `void * insdrv (void * src, void * crvcsstart, void * drvcsend, void * drvend);` * `void * insdrv (void * src, void * crvcsstart, void * drvcssize, void * drvend);`
* ## ASM * ## ASM
* **In:** * **In:**
* `>PUSHW DRV.END` * `>PUSHW DRV.END`
* `>PUSHW DRV.CS.END` * `>PUSHW DRV.CS.SIZE`
* `>PUSHW DRV.CS.START` * `>PUSHW DRV.CS.START`
* `>LDYA L.SRC` * `>LDYA L.SRC`
* `>SYSCALL insdrv` * `>SYSCALL insdrv`
* ## RETURN VALUE * ## RETURN VALUE
* Y,A = Ptr to installed driver * Y,A = Ptr to installed driver
*\-------------------------------------- *\--------------------------------------
K.InsDrv >STYA ZPPtr2 SRC PTR K.InsDrv >STYA ZPPtr3 SRC PTR for move
>PULLW BIN.R.CS.Start >PULLW BIN.R.CS.Start
>PULLW BIN.R.CS.End >PULLYA CS Len
jsr BIN.ComputeCSEndYA
>PULLW BIN.R.End >PULLW BIN.R.End
lda BIN.R.End Compute DRVLen=End-start
sec
sbc BIN.R.CS.Start
sta BIN.Move.Len
tay
lda BIN.R.End+1 jsr MEM.GetKrnlBuf Y,A = CODE + DATA
sbc BIN.R.CS.Start+1
sta BIN.Move.Len+1
jsr MEM.GetKrnlBuf Y,A = LEN
bcs .9 No More Room to load Driver bcs .9 No More Room to load Driver
>STYA ZPPtr1 Y,A = DST Buf for RelDrv... >STYA ZPPtr1 Y,A = DST Buf for RelDrv...
>STYA ZPPtr3 ...for move... >STYA ZPPtr4 ...for move...
sty .7+1 ...and for exit sty .7+1 ...and for exit
sta .8+1 sta .8+1
lda ZPPtr1 jsr BIN.ComputeOffsetYA
lda BIN.R.End
sec sec
sbc BIN.R.CS.Start sbc BIN.R.CS.Start
sta BIN.R.Offset tay
lda ZPPtr1+1
sbc BIN.R.CS.Start+1
sta BIN.R.Offset+1
lda BIN.Move.Len+1
eor #$ff
pha
lda BIN.Move.Len
eor #$ff eor #$ff
tax tax
lda BIN.R.End+1
sbc BIN.R.CS.Start+1
eor #$ff
pha
ldy #0 ldy #0
.1 inx .1 inx
@ -296,13 +259,13 @@ K.InsDrv >STYA ZPPtr2 SRC PTR
pha pha
.2 lda (ZPPtr2),y .2 lda (ZPPtr3),y
sta (ZPPtr3),y sta (ZPPtr4),y
iny iny
bne .1 bne .1
inc ZPPtr2+1
inc ZPPtr3+1 inc ZPPtr3+1
inc ZPPtr4+1
bra .1 bra .1
.3 jsr BIN.RelDrv Relocate at Ptr1 .3 jsr BIN.RelDrv Relocate at Ptr1
@ -345,16 +308,15 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
* + 1 to skip last 00 from beq .2 * + 1 to skip last 00 from beq .2
* ZPPtr1=Current Code PTR * ZPPtr1=Current Code PTR
.3 lda BIN.R.CS.End compute new CS.END to stop relocating lda BIN.R.End
clc clc
adc BIN.R.Offset adc BIN.R.Offset
sta .6+1
lda BIN.R.End+1
adc BIN.R.Offset+1
sta .7+1 sta .7+1
lda BIN.R.CS.End+1 .3 lda (ZPPtr1) get OPCODE
adc BIN.R.Offset+1
sta .8+1
lda (ZPPtr1) get OPCODE
lsr /2 lsr /2
tax tax
lda BIN.65816,x get OPCODE definition lda BIN.65816,x get OPCODE definition
@ -366,7 +328,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
.4 and #$0f .4 and #$0f
bit #$8 abs addressing? bit #$8 abs addressing?
beq .6 no.... beq .5 no....
and #7 save Opcode length... and #7 save Opcode length...
pha pha
@ -374,21 +336,42 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
ldy #1 ldy #1
jsr BIN.RelocateAtPtr1Y jsr BIN.RelocateAtPtr1Y
.5 pla get back Opcode length... pla get back Opcode length...
.5 tay A = OPCODE length
jsr MEM.AddYToPtr1
.6 cmp #$ff SELF MODIFIED, A = ZPPtr1
bne .3
lda ZPPtr1+1
.7 cmp #$ff SELF MODIFIED
bne .3 next opcode....
.6 clc A = OPCODE length
adc ZPPtr1
sta ZPPtr1
bcc .7
inc ZPPtr1+1
clc Make sure exit with CC clc Make sure exit with CC
.7 eor #$ff SELF MODIFIED A = ZPPtr1 rts
bne .3 *-------------------------------------- YA = CS Size
lda ZPPtr1+1 BIN.ComputeCSEndYA
.8 eor #$ff SELF MODIFIED pha
bne .3 next opcode.... tya
clc
adc BIN.R.CS.Start
sta BIN.R.CS.End ZPPtr1 + CodeLen
pla
adc BIN.R.CS.Start+1
sta BIN.R.CS.End+1
rts
*-------------------------------------- YA = Target Address
BIN.ComputeOffSetYA
pha
tya
sec
sbc BIN.R.CS.Start
sta BIN.R.Offset
pla
sbc BIN.R.CS.Start+1
sta BIN.R.Offset+1
rts rts
*-------------------------------------- *--------------------------------------
BIN.RelocateAtPtr1Y BIN.RelocateAtPtr1Y

View File

@ -14,22 +14,23 @@ ENV.SearchPath .BS 2
ENV.BufLen .BS 1 ENV.BufLen .BS 1
ENV.bNoExp .BS 1 ENV.bNoExp .BS 1
ENV.VarLen .BS 1 ENV.VarLen .BS 1
ENV.hMem .BS 1
ENV.bInVar .BS 1
ENV.bExp .BS 1
ENV.VarName .BS 16 ENV.VarName .BS 16
.ED .ED
*-------------------------------------- *--------------------------------------
K.ExpandStr stz .88+1 Reset Intermediate string... K.ExpandStr stz ENV.hMem Reset Intermediate string...
.1 >STYA ZPPtr2 .1 >STYA ZPPtr2
stz ENV.BufLen init Expanded String len=0 stz ENV.BufLen init Expanded String len=0
stz ENV.bExp No var found yet
stz .82+1 No var found yet
stz ENV.bNoExp Reset no expand flag stz ENV.bNoExp Reset no expand flag
ldy #0 ldy #0
.10 stz ENV.VarLen .10 stz ENV.VarLen
stz .23+1 reset In var flag stz ENV.bInVar reset In var flag
.11 lda (ZPPtr2),y End of CSTR? .11 lda (ZPPtr2),y End of CSTR?
beq .8 beq .8
@ -50,15 +51,15 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
.22 jsr ENV.AddAToBuf .22 jsr ENV.AddAToBuf
bra .11 bra .11
.23 ldx #$ff SELF MODIFIED already in a var? .23 ldx ENV.bInVar already in a var?
bne .3 yes... bne .3 yes...
cmp #'$' no, found one ? cmp #'$' no, found one ?
bne .22 no, store... bne .22 no, store...
sta .82+1 Toggle Expanded flag ror ENV.bExp Toggle Expanded flag
sta .23+1 Set In Var flag sta ENV.bInVar Set In Var flag
bra .11 skip this char bra .11 skip this char
@ -86,6 +87,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
.32 ldx ENV.VarLen .32 ldx ENV.VarLen
cpx #16 cpx #16
beq .11 varname longer than 15....ignore beq .11 varname longer than 15....ignore
sta ENV.VarName,x sta ENV.VarName,x
inx inx
stx ENV.VarLen stx ENV.VarLen
@ -94,13 +96,13 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
.5 dey last char was invalid...move back .5 dey last char was invalid...move back
.50 ldx ENV.VarLen .50 ldx ENV.VarLen
beq .52 var name is empty...start over beq .10 var name is empty...start over
.51 stz ENV.VarName,x .51 stz ENV.VarName,x
phy save current index phy save current index
jsr ENV.GetValue jsr ENV.GetValue
ply restore index in string... ply restore index in string...
.52 jmp .10 reset start flag and continue .52 bra .10 reset start flag and continue
.8 ldx ENV.VarLen end of STR,are we in a var? .8 ldx ENV.VarLen end of STR,are we in a var?
beq .80 no...exit... beq .80 no...exit...
@ -108,7 +110,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
stz ENV.VarName,x stz ENV.VarName,x
jsr ENV.GetValue yes, expand and add to STR jsr ENV.GetValue yes, expand and add to STR
.80 lda .88+1 working from our temp string ? .80 lda ENV.hMem working from our temp string ?
beq .81 no... beq .81 no...
jsr K.FreeMem yes, discard.... jsr K.FreeMem yes, discard....
@ -117,18 +119,16 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
stz K.Buf256,x stz K.Buf256,x
>LDYAI K.Buf256 >LDYAI K.Buf256
ldx #SYS.StrDup jsr K.strdup
jsr K.SYSCALL2.BANK
bcs .9 bcs .9
stx .88+1 save this as temp string, in case of recurse stx ENV.hMem save this as temp string, in case of recurse
.82 ldx #$ff SELF MODIFIED Did we expand something ? bit ENV.bExp SELF MODIFIED Did we expand something ?
beq .88 bpl .9
jmp .1 Yes, start over with hPStr jmp .1 Yes, start over with hPStr
.88 ldx #$ff SELF MODIFIED
* or exit with Y,A from STRDUP * or exit with Y,A from STRDUP
* clc
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
* # FileSearch * # FileSearch
@ -484,9 +484,10 @@ ENV.ExpandSysVar
rts rts
.3 txa .3 txa
asl beq ENV.SysVarsArgs
tax
jmp (ENV.SysVarsJmp,x) ldy ENV.SysVars.PS-1,x
bra ENV.SysVars.PSY
.4 >LDYAI ENV.StrVars .4 >LDYAI ENV.StrVars
>STYA ZPPtr3 >STYA ZPPtr3
@ -516,24 +517,46 @@ ENV.ExpandSysVar
jsr ENV.NextEnvP3A jsr ENV.NextEnvP3A
bra .5 bra .5
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs lda #1
jsr K.ArgV
bcs ENV.SysVarsNum.8
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq ENV.SysVarsNum
.2 jsr ENV.AddP3ToBuf
jsr ENV.NextEnvP3
lda (ZPPtr3)
beq ENV.SysVarsNum
lda #' '
jsr ENV.AddAToBuf
bra .2
*--------------------------------------
ENV.SysVars.PSY lda (pPS),y
ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0
.1 lda A2osX.NumStrBuf,y
beq ENV.SysVarsNum.8
iny
jsr ENV.AddAToBuf
bra .1
ENV.SysVarsNum.8
clc
rts
*--------------------------------------
ENV.SysVars .AS "*#?@$!" ENV.SysVars .AS "*#?@$!"
ENV.SysVars.Cnt .EQ *-ENV.SysVars ENV.SysVars.Cnt .EQ *-ENV.SysVars
*-------------------------------------- ENV.SysVars.PS .DA #S.PS.ARGC,#S.PS.RC,#S.PS.PPID,#S.PS.PID,#S.PS.CPID
ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsArgC
.DA ENV.SysVarsRC
.DA ENV.SysVarsPPID
.DA ENV.SysVarsPID
.DA ENV.SysVarsCPID
*--------------------------------------
ENV.StrVars >PSTR "LOGNAME"
>PSTR "GECOS"
>PSTR "HOME"
>PSTR "SHELL"
>PSTR "PWD"
>PSTR "UID"
>PSTR "GID"
.DA #0
*-------------------------------------- *--------------------------------------
ENV.StrVarsJmp .DA ENV.StrVarsSession ENV.StrVarsJmp .DA ENV.StrVarsSession
.DA ENV.StrVarsSession .DA ENV.StrVarsSession
@ -577,56 +600,6 @@ ENV.StrVarsSession
.3 jmp ENV.AddP3ToBuf .3 jmp ENV.AddP3ToBuf
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgC ldy #S.PS.ARGC
.HS 2C
ENV.SysVarsRC ldy #S.PS.RC
.HS 2C
ENV.SysVarsPPID ldy #S.PS.PPID
.HS 2C
ENV.SysVarsPID ldy #S.PS.PID
.HS 2C
ENV.SysVarsCPID ldy #S.PS.CPID
lda (pPS),y
ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0
.1 lda A2osX.NumStrBuf,y
beq .8
iny
jsr ENV.AddAToBuf
bra .1
.8 clc
rts
*--------------------------------------
ENV.SysVarsArgs lda #1
jsr K.ArgV
bcs .8
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq .8
.2 jsr ENV.AddP3ToBuf
jsr ENV.NextEnvP3
lda (ZPPtr3)
beq .8
lda #' '
jsr ENV.AddAToBuf
bra .2
.8 clc
rts
*--------------------------------------
* ENV.FindVarP1 * ENV.FindVarP1
* In: * In:
* ZPPtr1 -> NAME * ZPPtr1 -> NAME
@ -653,7 +626,7 @@ ENV.FindVarP1 jsr ENV.InitEnvP3 Store ENV
ora #0 ora #0
bne .2 bne .2
.8 clc clc
rts rts
.3 jsr ENV.NextEnvP3x2 Skip NAME & VALUE .3 jsr ENV.NextEnvP3x2 Skip NAME & VALUE
@ -678,18 +651,17 @@ ENV.DelVarP3 >LDYA ZPPtr3 save actual Ptr
bne .2 bne .2
tya tya
beq .8 we moved back ending \0 beq ENV.InitEnvP3.RTS we moved back ending \0
jsr ENV.NextEnvP3Y jsr ENV.NextEnvP3Y
jsr ENV.NextEnvP4Y jsr ENV.NextEnvP4Y
bra .1 bra .1
.8 rts
*-------------------------------------- *--------------------------------------
ENV.InitEnvP3 ldy #S.PS.hENV ENV.InitEnvP3 ldy #S.PS.hENV
lda (pPs),y lda (pPs),y
jsr K.GetMemPtr jsr K.GetMemPtr
>STYA ZPPtr3 Store ENV >STYA ZPPtr3 Store ENV
ENV.InitEnvP3.RTS
rts rts
*-------------------------------------- *--------------------------------------
ENV.NextEnvP3x2 jsr ENV.NextEnvP3 ENV.NextEnvP3x2 jsr ENV.NextEnvP3
@ -771,6 +743,15 @@ ENV.Dup.A sta .8+1 Store target page Count
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
ENV.StrVars >PSTR "LOGNAME"
>PSTR "GECOS"
>PSTR "HOME"
>PSTR "SHELL"
>PSTR "PWD"
>PSTR "UID"
>PSTR "GID"
.DA #0
*--------------------------------------
ENV.VARS .DA .1 ENV.VARS .DA .1
.DA .2 .DA .2
.DA .3 .DA .3

View File

@ -739,6 +739,8 @@ MEM.NextCharPtr1
*-------------------------------------- *--------------------------------------
MEM.AddYp1ToPtr1 MEM.AddYp1ToPtr1
sec sec
.HS 90 BCC
MEM.AddYToPtr1 clc
tya tya
adc ZPPtr1 adc ZPPtr1
sta ZPPtr1 sta ZPPtr1

View File

@ -320,8 +320,7 @@ PS.Load.SCRIPT ldx #$ff
cmp #S.FI.T.BIN cmp #S.FI.T.BIN
bne PS.Load.IBIN K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT bne PS.Load.IBIN K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT
*-------------------------------------- *--------------------------------------
PS.LoadBIN >LDYAI K.Buf256 PS.LoadBIN jsr BIN.Load
jsr BIN.Load
bcs .9 bcs .9
>STYA ZPPtr4 save PTR to Code Segment >STYA ZPPtr4 save PTR to Code Segment

View File

@ -350,63 +350,59 @@ K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
K.StrFTime jsr MEM.SPtr1PPtr2 K.StrFTime jsr MEM.SPtr1PPtr2
>PULLW ZPPtr3 timeptr >PULLW ZPPtr3 timeptr
.1 lda (ZPPtr2) .1 jsr MEM.GetCharPtr2
beq .8 beq .8
jsr MEM.NextCharPtr2
cmp #'%' cmp #'%'
beq .2 beq .2
jsr MEM.PutCharPtr1 jsr MEM.PutCharPtr1
bra .1 bra .1
.2 ldx #K.StrFTime.JMP-K.StrFTime.Tbl-1 .2 ldx #K.StrFTime.Cnt-1
lda (ZPPtr2) jsr MEM.GetCharPtr2
beq .8 beq .8
jsr MEM.NextCharPtr2
.3 cmp K.StrFTime.Tbl,x .3 cmp K.StrFTime.Tbl,x
beq .4 beq .4
dex dex
bpl .3 bpl .3
bra .1 bra .1
.4 txa .4 cpx #7
asl bcc .5
tax jsr K.StrFTime.AtX
jsr .5
bra .1 bra .1
.5 jmp (K.StrFTime.JMP,x) .5 txa
asl
tax
jsr .7
bra .1
.7 jmp (K.StrFTime.JMP,x)
.8 lda #0 Terminate C string .8 lda #0 Terminate C string
sta (ZPPtr1) sta (ZPPtr1)
clc clc
rts rts
*-------------------------------------- *--------------------------------------
K.StrFTime.TBL .AS "aAbBdHImMpSwyY" K.StrFTime.Tbl .AS "aAbBIpYydHSwmM"
K.StrFTime.Cnt .EQ *-K.StrFTime.TBL
K.StrFTime.OfsX .DA #S.Time.YEAR,#S.Time.DAY,#S.Time.HOUR,#S.Time.SECOND,#S.Time.WDAY,#S.Time.MONTH,#S.Time.MINUTE
K.StrFTime.JMP .DA K.StrFTime.A K.StrFTime.JMP .DA K.StrFTime.A
.DA K.StrFTime.AA .DA K.StrFTime.AA
.DA K.StrFTime.B .DA K.StrFTime.B
.DA K.StrFTime.BB .DA K.StrFTime.BB
.DA K.StrFTime.D
.DA K.StrFTime.HH
.DA K.StrFTime.II .DA K.StrFTime.II
.DA K.StrFTime.M
.DA K.StrFTime.MM
.DA K.StrFTime.P .DA K.StrFTime.P
.DA K.StrFTime.SS
.DA K.StrFTime.W
.DA K.StrFTime.Y
.DA K.StrFTime.YY .DA K.StrFTime.YY
*-------------------------------------- *--------------------------------------
K.StrFTime.A sec Short day of week, 3 chars... K.StrFTime.A sec Short day of week, 3 chars...
.HS 90 BCC .HS 90 BCC
K.StrFTime.AA clc full DoW K.StrFTime.AA clc full DoW
lda #K.StrFTime.DAY lda #K.StrFTime.DAY
ldx /K.StrFTime.DAY ldx /K.StrFTime.DAY
@ -479,19 +475,8 @@ K.StrFTime.P ldy #S.Time.HOUR
K.StrFTime.YY ldy #S.Time.CENTURY K.StrFTime.YY ldy #S.Time.CENTURY
jsr K.StrFTime.addDecPtr1Y jsr K.StrFTime.addDecPtr1Y
K.StrFTime.Y ldy #S.Time.YEAR ldx #7 "y"
.HS 2C bit abs K.StrFTime.AtX ldy K.StrFTime.OfsX-7,x
K.StrFTime.D ldy #S.Time.DAY
.HS 2C bit abs
K.StrFTime.HH ldy #S.Time.HOUR
.HS 2C bit abs
K.StrFTime.SS ldy #S.Time.SECOND
.HS 2C bit abs
K.StrFTime.W ldy #S.Time.WDAY
.HS 2C bit abs
K.StrFTime.M ldy #S.Time.MONTH
.HS 2C bit abs
K.StrFTime.MM ldy #S.Time.MINUTE
*-------------------------------------- *--------------------------------------
K.StrFTime.addDecPtr1Y K.StrFTime.addDecPtr1Y
lda (ZPPtr3),y lda (ZPPtr3),y