Kernel 0.92

This commit is contained in:
Rémy GIBERT 2018-12-20 17:23:43 +01:00
parent c760a752ce
commit 2d5d819354
20 changed files with 371 additions and 392 deletions

Binary file not shown.

View File

@ -112,7 +112,7 @@ Cmd.INT.PUSHD >LDA.G PUSHD.STACK
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
>SYSCALL NewStr
>SYSCALL strdup
bcs Cmd.INT.POPD.CSYN
>INC.G PUSHD.STACK
@ -210,7 +210,7 @@ Cmd.INT.CD.1 >STYA ZPPtr1
sta (ZPPtr1),y
.8 >LDYA ZPPtr1
>SYSCALL NewStr
>SYSCALL strdup
bcs .90
txa
@ -510,7 +510,7 @@ Cmd.INT.READ lda #1
bcs .99
bra .7
.4 >SYSCALL newstr
.4 >SYSCALL strdup
txa
>STA.G hVarName

View File

@ -152,7 +152,7 @@ InitSrcDirYA >SYSCALL RealPath
adc #0
sta ZPPtr2+1
>SYSCALL Newstr
>SYSCALL strdup
bcs .9
txa
>STA.G hFilter
@ -252,7 +252,7 @@ InitDstDirYA >SYSCALL RealPath
adc #0
sta ZPPtr2+1
>SYSCALL NewStr
>SYSCALL strdup
bcs .9
txa
>STA.G hDstFileName

View File

@ -4,13 +4,14 @@ AUTO 4,1
.LIST OFF
*--------------------------------------
Mask7BitsH .DA #%01111111 Useless
.DA #%01111110
C2.MASK .DA #%01111110
.DA #%01111100
.DA #%01111000
.DA #%01110000
.DA #%01100000
.DA #%01000000
* .DA #%00000000
C1.MASK
Mask7BitsL .DA #%00000000 Useless
.DA #%00000001
.DA #%00000011
@ -35,13 +36,13 @@ Shift7BitsCol2 .DA #%00000000 Useless
.DA #%01111100
.DA #%01111110
*--------------------------------------
C1.MASK .DA #%00000000 Clear (AND) Col 1 bits
.DA #%00000001
.DA #%00000011
.DA #%00000111
.DA #%00001111
.DA #%00011111
.DA #%00111111
*C1.MASK .DA #%00000000 Clear (AND) Col 1 bits
* .DA #%00000001
* .DA #%00000011
* .DA #%00000111
* .DA #%00001111
* .DA #%00011111
* .DA #%00111111
C1.DATA .DA #%11111111 set (ORA) COL 1 bits
.DA #%11111110
@ -51,13 +52,13 @@ C1.DATA .DA #%11111111 set (ORA) COL 1 bits
.DA #%11100000
.DA #%11000000
*--------------------------------------
C2.MASK .DA #%01111110 Clear (AND) Col 2 bits
.DA #%01111100
.DA #%01111000
.DA #%01110000
.DA #%01100000
.DA #%01000000
.DA #%00000000
*C2.MASK .DA #%01111110 Clear (AND) Col 2 bits
* .DA #%01111100
* .DA #%01111000
* .DA #%01110000
* .DA #%01100000
* .DA #%01000000
* .DA #%00000000
C2.DATA .DA #%10000001 set (ORA) COL 2 bits
.DA #%10000011

View File

@ -228,8 +228,25 @@ STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A
OPEN ldx #0 DEV.ID in A
.10 ldy A2osX.SCRNDEVS,x
beq .20
inx
cpx #K.SCR.MAX
bne .10
lda #E.OOH
sec
rts
.20 sta A2osX.SCRNDEVS,x
sta DCB+S.DCB.GFX.DEVID
lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
ldx #0
ldy #1
@ -272,7 +289,7 @@ CONTROL ldy #0
iny
bra .1
.8 lda #3
.8 lda DCB+S.DCB.GFX.DEVID
sta A2osX.ASCREEN
clc
@ -281,7 +298,7 @@ CONTROL ldy #0
CLOSE clc
rts
*--------------------------------------
WRITE >STYA ZPIOCTL
WRITE >STYA ZPIOCTL NON STANDARD
lda (ZPIOCTL) Get Cmd
@ -470,12 +487,17 @@ DIB .DA #0
.DA K.VER
*--------------------------------------
DCB .DA #S.DCB.T.GFX
.BS 1 DEV.ID
.BS 1 STATUS
.DA #S.CB.M.MONO+S.CB.M.C16 F
.DA 0 S
.DA 560 W
.DA 192 H
*--------------------------------------
DRV.END
.LI ON
DRV.CS.SIZE .EQ DRV.CS.END-DRV.CS.START
DRV.SIZE .EQ DRV.END-DRV.CS.START
.LI OFF
MAN
SAVE USR/SRC/DRV/DHGR.DRV.S
ASM

View File

@ -119,22 +119,23 @@ FD.DEV.NAME .AZ "MOU7"
* Driver Code
*--------------------------------------
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA READBLOCK
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA CONTROL
.DA A2osX.BADCALL
.DA OPEN
.DA CLOSE
.DA A2osX.BADCALL
.DA READ
.DA A2osX.BADCALL
.DA 0 end or relocation
*--------------------------------------
STATUS >STYA ZPIOCTL
STATUS jsr GETIOCTL
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
@ -143,20 +144,13 @@ STATUS >STYA ZPIOCTL
cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB
ldx #S.DIB-1
ldy #S.DIB-1
.HS 2C bit abs
.1 ldx #3
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
.1 ldy #3
.2 lda DIB,x
.3 sta $ffff,x SELF MODIFIED
dex
.2 lda DIB,y
sta (ZPBufPtr),y
dey
bpl .2
clc
@ -168,121 +162,7 @@ STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
READBLOCK >STYA ZPIOCTL
stz READBLOCK.S+1 Reset Flags
php
sei
* ldy #READMOUSE DONE BY IRQ MANAGER
* jsr GOMOUSE
ldx DEVSLOT0n
lda MOUSESTSx,x
and #MOUSESTSx.MOVED
beq .1
ldy #S.MOUSE.X1
lda MOUSEXLOx,x
sta (ZPIOCTL),y
iny
lda MOUSEXHIx,x
sta (ZPIOCTL),y
iny
lda MOUSEYLOx,x
sta (ZPIOCTL),y
iny
lda MOUSEYHIx,x
sta (ZPIOCTL),y
lda #S.MOUSE.S.MOVE
tsb READBLOCK.S+1
stz bDblClick Reset DblClick flag
.1 lda MOUSESTSx,x
and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:down & previously down
asl if CS, down & previously up
bcc .2
lda #S.MOUSE.S.DOWN
tsb READBLOCK.S+1 button has been pressed, start drag...
lda MOUSEXLOx,x
sta SrcDrag
lda MOUSEXHIx,x
sta SrcDrag+1
lda MOUSEYLOx,x
sta SrcDrag+2
lda MOUSEYHIx,x
sta SrcDrag+3
bra .8
.2 lda READBLOCK.S+1
pha save move state
ora #S.MOUSE.S.UP
sta READBLOCK.S+1
pla get back move state
bne .4 no move...click!
lda #S.MOUSE.S.CLK
bit bDblClick
bpl .3
lda #S.MOUSE.S.DCLK
ldy #1
sty bDblClick
.3 dec bDblClick
tsb READBLOCK.S+1
bra .8
.4 lda #S.MOUSE.S.DRAG
tsb READBLOCK.S+1
ldy #S.MOUSE.X2+3
.5 lda SrcDrag-S.MOUSE.X2,y
sta (ZPIOCTL),y
dey
bpl .5
.8 plp
READBLOCK.S lda #$ff SELF MODIFIED
beq .9
ldy #S.MOUSE.S
sta (ZPIOCTL),y
clc
rts
.9 lda #MLI.E.EOF
sec
rts
*--------------------------------------
CONTROL >STYA ZPIOCTL
CONTROL jsr GETIOCTL
php
sei
@ -331,21 +211,146 @@ CLOSE php
clc
rts
*--------------------------------------
READ >STYA ZPBufPtr NON STANDARD
stz READ.S+1 Reset Flags
php
sei
* ldy #READMOUSE DONE BY IRQ MANAGER
* jsr GOMOUSE
ldx DEVSLOT0n
lda MOUSESTSx,x
and #MOUSESTSx.MOVED
beq .1
ldy #S.MOUSE.X1
lda MOUSEXLOx,x
sta (ZPBufPtr),y
iny
lda MOUSEXHIx,x
sta (ZPBufPtr),y
iny
lda MOUSEYLOx,x
sta (ZPBufPtr),y
iny
lda MOUSEYHIx,x
sta (ZPBufPtr),y
lda #S.MOUSE.S.MOVE
tsb READ.S+1
stz bDblClick Reset DblClick flag
.1 lda MOUSESTSx,x
and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .8 no button state change:down & previously down
asl if CS, down & previously up
bcc .2
lda #S.MOUSE.S.DOWN
tsb READ.S+1 button has been pressed, start drag...
lda MOUSEXLOx,x
sta SrcDrag
lda MOUSEXHIx,x
sta SrcDrag+1
lda MOUSEYLOx,x
sta SrcDrag+2
lda MOUSEYHIx,x
sta SrcDrag+3
bra .8
.2 lda READ.S+1
pha save move state
ora #S.MOUSE.S.UP
sta READ.S+1
pla get back move state
bne .4 no move...click!
lda #S.MOUSE.S.CLK
bit bDblClick
bpl .3
lda #S.MOUSE.S.DCLK
ldy #1
sty bDblClick
.3 dec bDblClick
tsb READ.S+1
bra .8
.4 lda #S.MOUSE.S.DRAG
tsb READ.S+1
ldy #S.MOUSE.X2+3
.5 lda SrcDrag-S.MOUSE.X2,y
sta (ZPBufPtr),y
dey
bpl .5
.8 plp
READ.S lda #$ff SELF MODIFIED
beq .9
ldy #S.MOUSE.S
sta (ZPBufPtr),y
clc
rts
.9 lda #MLI.E.EOF
sec
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
SETCLAMP lda (ZPIOCTL),y
GETIOCTL >STYA ZPIOCTL
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
rts
*--------------------------------------
SETCLAMP lda (ZPBufPtr),y
sta LOCLAMPLO
iny
lda (ZPIOCTL),y
lda (ZPBufPtr),y
sta LOCLAMPHI
iny
lda (ZPIOCTL),y
lda (ZPBufPtr),y
sta HICLAMPLO
iny
lda (ZPIOCTL),y
lda (ZPBufPtr),y
sta HICLAMPHI
txa

View File

@ -206,7 +206,7 @@ SYS.RealPath .EQ $7C
SYS.StrLen .EQ $80
SYS.StrCpy .EQ $82
SYS.StrCat .EQ $84
* .EQ $86
SYS.StrDup .EQ $86
SYS.StrUpr .EQ $88
SYS.StrLwr .EQ $8A
SYS.StrCmp .EQ $8C
@ -269,7 +269,7 @@ SYS.GetMemByID .EQ $E6
SYS.GetMem .EQ $E8
SYS.GetMem0 .EQ $EA
SYS.NewStr .EQ $EC
* .EQ $EC
SYS.SListAdd .EQ $EE
SYS.SListLookup .EQ $F0

View File

@ -5,8 +5,9 @@ AUTO 4,1
*--------------------------------------
* GFX Devices
*--------------------------------------
S.DCB.GFX.F .EQ 1
S.DCB.GFX.DEVID .EQ 1
S.DCB.GFX.S .EQ 2
S.DCB.GFX.F .EQ 3
S.DCB.GFX.W .EQ 4
S.DCB.GFX.H .EQ 6
*

View File

@ -219,7 +219,7 @@ DNS.ADD.I sta DNS.TmpCache
jsr DNS.FIND.FREE
>LDYA ZPPtrDNS
>SYSCALL newstr
>SYSCALL strdup
bcs .9
txa
ldy #S.DNSCACHE.hNAME

View File

@ -41,26 +41,17 @@ K.LoadLib jsr BIN.FindLIB
* out :
*--------------------------------------
K.UnloadLib pha
jsr K.GetMemByID
>STYA ZPPtr1
ldy #S.MEM.REFCNT
lda (ZPPtr1),y Get count of those referencing this lib
dec only one left ?
jsr K.GetMemPtr
>STYA .2+1
jsr MEM.decREFCNT
beq .1
sta (ZPPtr1),y
pla
clc
rts
.1 ldy #S.MEM.PTR
lda (ZPPtr1),y
sta .2+1
iny
lda (ZPPtr1),y
sta .2+2
ldx #LIBMGR.UNLOAD
.1 ldx #LIBMGR.UNLOAD
.2 jsr $ffff Self Modified, Call LIB.UNLOAD function
pla
jmp K.FreeMem
@ -114,7 +105,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
rts
*--------------------------------------
BIN.FindLIB clc
.HS B0 bcs
.HS B0 BCS
BIN.FindDRV sec
>STYA BIN.CmdLine
@ -149,29 +140,22 @@ BIN.Find.ENV.LIB .AZ "LIB"
*--------------------------------------
BIN.Load >STYA BIN.CmdLine
>STYA .2+1
>LDYAI Mem.Table
>STYA ZPPtr1
ldx #0 we will skip Slot 0...
ldx #0
.1 cpx Mem.LastSlot
beq BIN.Load.1
inx
inx we will skip Slot 0...
lda ZPPtr1
clc
adc #S.MEM
sta ZPPtr1
bcc .11
inc ZPPtr1+1
txa
jsr K.GetMemPtr
.11 lda (ZPPtr1)
lda (ZPMemMgrSPtr)
bpl .1 In Use?
ldy #S.MEM.BIN any BIN PATH in this slot?
lda (ZPPtr1),y
lda (ZPMemMgrSPtr),y
beq .1
jsr K.GetMemPtr X unmodified, get pathname
@ -186,20 +170,14 @@ BIN.Load >STYA BIN.CmdLine
ora #0
bne .2
ldy #S.MEM.REFCNT
lda (ZPPtr1),y
inc
sta (ZPPtr1),y
ldy #S.MEM.PTR
lda (ZPPtr1),y
pha
iny
lda (ZPPtr1),y
ply
txa
jsr K.GetMemPtr
jsr MEM.IncREFCNT
clc
rts X=hMem, Y,A=Ptr
jmp K.GetMemPtr.ZPMemMgrSPtr
* X=hMem, Y,A=Ptr
*--------------------------------------
BIN.Load.1
* >PUSHWI K.S.STAT
@ -258,24 +236,23 @@ BIN.Load.1
jsr BIN.RelExe
>LDYA BIN.CmdLine get back bin path
jsr K.NewStr make a copy of this string
>SYSCALL StrDup make a copy of this string
bcs .98
lda BIN.hMem Keep X=hMem
jsr K.GetMemByID X unmodified
>STYA ZPPtr1
lda (ZPPtr1)
lda (ZPMemMgrSPtr)
ora #S.MEM.F.CODE This is a code segment
sta (ZPPtr1)
sta (ZPMemMgrSPtr)
txa Get Back hMem
txa Get Back Cmd line hMem
ldy #S.MEM.BIN
sta (ZPPtr1),y
sta (ZPMemMgrSPtr),y
lda BIN.hMem
tax return hMEM to Caller...
jmp K.GetMemPtr ...and Y,A=PTR to CS
ldx BIN.hMem return hMEM to Caller...
clc
jmp K.GetMemPtr.ZPMemMgrSPtr ...and Y,A=PTR to CS
.98 pha
lda BIN.hMem
@ -460,14 +437,9 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
bra .1
*--------------------------------------
.2 tya add current offset in Y to Ptr
sec + 1 to skip last 00 from beq .2
adc ZPPtr1
sta ZPPtr1
bcc .3
inc ZPPtr1+1 ZPPtr1=Current Code PTR
.2 jsr MEM.AddYp1ToPtr1 add current offset in Y to Ptr
* + 1 to skip last 00 from beq .2
* ZPPtr1=Current Code PTR
.3 lda BIN.R.CS.End compute new CS.END to stop relocating
clc

View File

@ -131,7 +131,7 @@ K.MKDev jsr MEM.SPtr1PPtr2 ptr1=fd, ptr2=name
sta IRQ.Vectors+1,x
.8 >LDYA ZPPtr2
jsr K.NewStr
>SYSCALL StrDup
bcs .99
txa

View File

@ -109,7 +109,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
stz K.Buf256,x
>LDYAI K.Buf256
jsr K.NewStr
>SYSCALL StrDup
bcs .9
stx .88+1 save this as temp string, in case of recurse
@ -118,7 +118,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
jmp .1 Yes, start over with hPStr
.88 ldx #$ff SELF MODIFIED
* or exit with Y,A from K.NewStrYA
* or exit with Y,A from STRDUP
.9 rts
*/--------------------------------------

View File

@ -83,7 +83,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.StrLen $80
.DA K.StrCpy
.DA K.StrCat
.DA 0
.DA K.StrDup
.DA K.StrUpr
.DA K.StrLwr
.DA K.StrCmp
@ -142,7 +142,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.GetMemByID
.DA K.GetMem
.DA K.GetMem0
.DA K.NewStr
.DA 0
.DA K.SListAdd
*--------------------------------------
.DA K.SListLookup $F0

View File

@ -158,14 +158,9 @@ MEM.GetMem.YAX stx Mem.ReqFlags
lda (pPs),y
ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
pha
iny
lda (ZPMemMgrSPtr),y A = HI PTR
ply Y = LO PTR
clc X = Current hMem
clc
jmp K.GetMemPtr.ZPMemMgrSPtr
* A = HI PTR,Y = LO PTR,X = Current hMem
.9 rts
*--------------------------------------
@ -222,7 +217,19 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
sec
rts
*--------------------------------------
Mem.NextSlot lda ZPMemMgrSPtr
MEM.IncREFCNT ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
inc
sta (ZPMemMgrSPtr),y
rts
*--------------------------------------
MEM.decREFCNT ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
dec
sta (ZPMemMgrSPtr),y
rts
*--------------------------------------
MEM.NextSlot lda ZPMemMgrSPtr
clc
adc #S.MEM
sta ZPMemMgrSPtr
@ -236,8 +243,8 @@ Mem.NextSlot lda ZPMemMgrSPtr
* none.
* (X unmodified)
*\--------------------------------------
K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n"
K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad,%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:$%h=free,%s\r\n"
*--------------------------------------
K.FreeMem.BAD sec
.HS 90 BCC
@ -265,7 +272,7 @@ K.FreeMem.FREED clc
.1 >SYSCALL printf
plx
>DEBUG
sec
rts
*--------------------------------------
@ -286,10 +293,7 @@ K.FreeMem tay
.11 pla
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ?
sta (ZPMemMgrSPtr),y
jsr MEM.decREFCNT only one left ?
bne .8 no, must be a code segment loaded several times
lda (ZPMemMgrSPtr)
@ -365,7 +369,7 @@ K.GetMemPtr sta ZPMemMgrSPtr
asl ZPMemMgrSPtr
rol
sta ZPMemMgrSPtr+1
K.GetMemPtr.ZPMemMgrSPtr
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
pha
@ -427,58 +431,6 @@ K.GetMemStat >STYA ZPMemMgrTmp1
bpl .3
rts
*/--------------------------------------
* # NewStr
* Create a new copy of this C-String
* Y,A = Ptr to source C-String
* ## RETURN VALUE
* CC : success
* Y,A = PTR to String
* X = hMem (PSTR)
* CS : error
* A = SYS error code
*\--------------------------------------
K.NewStr >STYA .1+1
>STYA .4+1
ldy #0
lda #0
.1 ldx $ffff,y
beq .2
iny
bne .1
inc
inc .1+2
bne .1
.2 iny Add one for ending 0
bne .3
inc
.3 jsr K.GetMem
bcs .9
>STYA .5+1
phy
pha
ldy #0
.4 lda $ffff,y
.5 sta $ffff,y
beq .8
iny
bne .4
inc .4+2
inc .5+2
bne .4
.8 pla
ply
* clc
.9 rts
*/--------------------------------------
* # SListGetByID
* PUSHB = hSList
* PUSHW = KeyID
@ -743,6 +695,17 @@ MEM.NextCharPtr1
MEM.GetCharPtr1.8
rts
*--------------------------------------
MEM.AddYp1ToPtr1
sec
.HS 90 BCC
MEM.AddYToPtr1 clc
tya
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 rts
*--------------------------------------
MEM.PutCharPtr2 sta (ZPPtr2)
inc ZPPtr2
bne .8

View File

@ -32,7 +32,7 @@ K.ExecL sty .1+1
jsr K.Args2ArgV
bcs .9
jsr PS.Exec
.9 php
@ -85,7 +85,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem
* out :
* A = PSID
* we cannot use ZPPtrs1 & 2
* because of calling K.NewStr & PS.DupEnv
* because of calling K.StrDup & PS.DupEnv
*--------------------------------------
PS.CreateChild ldx CORE.PSCount
beq .3
@ -140,7 +140,7 @@ PS.CreateChild ldx CORE.PSCount
ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y
jsr K.GetMemPtr
jsr K.NewStr
>SYSCALL StrDup
bcs .9
jsr PS.SetMemOwner Set Ownership
@ -389,6 +389,33 @@ PS.Load.HEADER .AZ "#!/"
PS.Load.ArgSize .BS 2
PS.Load.hMem .BS 1
*--------------------------------------
* PS.DupEnv
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* X = Count
*--------------------------------------
PS.DupEnv jsr K.GetMemPtr
>STYA ZPPtr1
>LDYAI K.ENV.SIZE
jsr K.GetMem
bcs .9
>STYA ZPPtr2 Target Buffer
phx save hMem
jsr PS.SetMemOwner Set Ownership
jsr PS.AddPtr1ToStrVUntil0
pla hMem
clc
.9 rts
*--------------------------------------
* hBIN + PS.ArgV -> #S.PS.hARGV
*--------------------------------------
PS.AddArgV stz PS.Load.ArgSize
@ -427,7 +454,7 @@ PS.AddArgV stz PS.Load.ArgSize
inc PS.Load.ArgSize+1
.3 jsr PS.AddYp1ToPtr1
.3 jsr MEM.AddYp1ToPtr1
bra .1
.4 txa
@ -440,7 +467,7 @@ PS.AddArgV stz PS.Load.ArgSize
inc
.5 jsr K.GetMem
bcs PS.LoadGetHeader.RTS
bcs PS.AddPtr1ToStrV.8
>STYA ZPPtr2 Target Buffer
txa
@ -456,48 +483,14 @@ PS.AddArgV stz PS.Load.ArgSize
.6 >LDYA PS.ArgV
>STYA ZPPtr1
.7 lda (ZPPtr1)
sta (ZPPtr2)
beq .8 Ending \0
jsr PS.AddPtr1ToStrV
bra .7
.8 clc
.9 rts
*--------------------------------------
* PS.DupEnv
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* X = Count
*--------------------------------------
PS.DupEnv jsr K.GetMemPtr
>STYA ZPPtr1
>LDYAI K.ENV.SIZE
jsr K.GetMem
bcs .9
>STYA ZPPtr2 Target Buffer
phx save hMem
jsr PS.SetMemOwner Set Ownership
PS.AddPtr1ToStrVUntil0
.1 lda (ZPPtr1)
sta (ZPPtr2)
beq .8 Ending \0
beq PS.AddPtr1ToStrV.8 Ending \0
jsr PS.AddPtr1ToStrV
bra .1
.8 pla hMem
clc
.9 rts
*--------------------------------------
PS.AddPtr1ToStrV
ldy #$ff
@ -507,26 +500,17 @@ PS.AddPtr1ToStrV
sta (ZPPtr2),y
bne .2
jsr PS.AddYp1ToPtr1
jsr MEM.AddYp1ToPtr1
tya
sec
adc ZPPtr2
sta ZPPtr2
bcc .8
bcc PS.AddPtr1ToStrV.8
inc ZPPtr2+1
.8 rts
*--------------------------------------
PS.AddYp1ToPtr1 tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 rts
PS.AddPtr1ToStrV.8
rts
*--------------------------------------
PS.SetMemOwner lda CORE.LastPSID
ldy #S.MEM.OWNERPID

View File

@ -275,7 +275,7 @@ STAT.NewhNodeYAX
.2 stx .3+1 Store hFILE
pla
jsr K.NewStr
>SYSCALL StrDup
bcs .9
txa

View File

@ -709,17 +709,17 @@ PrintF.Cnt .BS 2
K.FGetS jsr PFT.CheckNodeA
bcs .90
>PULLW ZPPtr1 s
jsr MEM.SPtr1PPtr2
>PULLA
lda ZPPtr1
sec
sbc #2
eor #$ff
sta ZPPtr2 !n
>PULLA
sta ZPPtr1 !n
lda ZPPtr1+1
sbc #0
eor #$ff
sta ZPPtr2+1 !n
sta ZPPtr1+1 !n
jsr K.GetC.I
bcs .9
@ -728,14 +728,9 @@ K.FGetS jsr PFT.CheckNodeA
cmp #C.CR
beq .8
sta (ZPPtr1)
inc ZPPtr1
bne .2
inc ZPPtr1+1
jsr MEM.PutCharPtr2
.2 inc ZPPtr2
bne .3
inc ZPPtr2+1
jsr MEM.NextCharPtr1
beq .8
.3 jsr K.GetC.I
@ -745,7 +740,7 @@ K.FGetS jsr PFT.CheckNodeA
.9 pha
lda #0
sta (ZPPtr1)
sta (ZPPtr2)
pla
.99 rts
@ -819,14 +814,10 @@ K.SScanF >STYA ZPPtr2 String to Scan
stz .5+1 reset LStack Ptr
stz .80+1 rest Arg processed
.1 lda (ZPPtr1) End Of format?
.1 jsr MEM.GetCharPtr1 End Of format?
beq .8
inc ZPPtr1
bne .11
inc ZPPtr1+1
.11 cmp #'%' Escape ?
cmp #'%' Escape ?
beq .2
cmp #' ' Space ?
@ -848,14 +839,10 @@ K.SScanF >STYA ZPPtr2 String to Scan
beq .12
bne .1
.2 lda (ZPPtr1) Get specifier after %
.2 jsr MEM.GetCharPtr1 Get specifier after %
beq .9 unexpected End of format after "%" ?
inc ZPPtr1
bne .21
inc ZPPtr1+1
.21 ldx #K.SScanFJMP-K.SScanFTBL-2
ldx #K.SScanFJMP-K.SScanFTBL-2
.3 cmp K.SScanFTBL,x
beq .4
@ -1311,7 +1298,7 @@ STDIO.NewHFileYAX
.2 stx .3+1 Store hFILE
pla
jsr K.NewStr
>SYSCALL StrDup
bcs .9
txa

View File

@ -411,7 +411,8 @@ K.realpath.I clc
.89 lda #$ff SELF MODIFIED
bpl .98
>LDYAI K.Buf256
jmp K.NewStr
>SYSCALL StrDup
rts
.90 lda #E.BADPATH
sec

View File

@ -62,14 +62,9 @@ K.StrCpy clc
bcc .2
.1 lda (ZPPtr1)
beq .2
inc ZPPtr1
.1 jsr MEM.GetCharPtr1
bne .1
inc ZPPtr1+1
bra .1
.2 ldy #0
.3 lda (ZPPtr2),y
@ -83,7 +78,59 @@ K.StrCpy clc
.8 ply
pla
rts
K.StrCpy.RTS rts
*/--------------------------------------
* # StrDup
* Create a new copy of this C-String
* Y,A = Ptr to source C-String
* ## RETURN VALUE
* CC : success
* Y,A = PTR to String
* X = hMem (PSTR)
* CS : error
* A = SYS error code
*\--------------------------------------
K.StrDup >STYA .1+1
>STYA .4+1
ldy #0
lda #0
.1 ldx $ffff,y
beq .2
iny
bne .1
inc
inc .1+2
bne .1
.2 iny Add one for ending 0
bne .3
inc
.3 jsr K.GetMem
bcs K.StrCpy.RTS
>STYA .5+1
phy
pha
ldy #0
.4 lda $ffff,y
.5 sta $ffff,y
beq K.StrDup.8
iny
bne .4
inc .4+2
inc .5+2
bne .4
K.StrDup.8 pla
ply
* clc
rts
*/--------------------------------------
* # StrUpr/StrLwr
* Convert string to UPPERCASE/lowercase
@ -104,13 +151,13 @@ K.StrUpr ldx #0
K.StrLwr ldx #2
>STYA ZPPtr1
pha save Y,A to restore them at exit
phy
pha save Y,A to restore them at exit
ldy #0
.1 lda (ZPPtr1),y
beq .8
beq K.StrDup.8
cmp .9,x
bcc .2
@ -122,10 +169,6 @@ K.StrLwr ldx #2
bne .1
inc ZPPtr1+1
bra .1
.8 ply
pla
rts
*--------------------------------------
.9 .AS "azAZ"
*/--------------------------------------

View File

@ -78,7 +78,7 @@ DRV.TERM.OPEN ldx #0 DEV.ID in A
sec
rts
.9 lda #MLI.E.OPEN
.9 lda #MLI.E.OPEN
sec
rts