mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-02 13:41:30 +00:00
Kernel 0.93+
This commit is contained in:
parent
1df9d5e505
commit
7639e30658
|
@ -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
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -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
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user