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

View File

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

View File

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

View File

@ -228,7 +228,24 @@ STATUS.9 lda #MLI.E.BADCTL
sec sec
rts 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 ldx #0
ldy #1 ldy #1
@ -272,7 +289,7 @@ CONTROL ldy #0
iny iny
bra .1 bra .1
.8 lda #3 .8 lda DCB+S.DCB.GFX.DEVID
sta A2osX.ASCREEN sta A2osX.ASCREEN
clc clc
@ -281,7 +298,7 @@ CONTROL ldy #0
CLOSE clc CLOSE clc
rts rts
*-------------------------------------- *--------------------------------------
WRITE >STYA ZPIOCTL WRITE >STYA ZPIOCTL NON STANDARD
lda (ZPIOCTL) Get Cmd lda (ZPIOCTL) Get Cmd
@ -470,12 +487,17 @@ DIB .DA #0
.DA K.VER .DA K.VER
*-------------------------------------- *--------------------------------------
DCB .DA #S.DCB.T.GFX DCB .DA #S.DCB.T.GFX
.BS 1 DEV.ID
.BS 1 STATUS
.DA #S.CB.M.MONO+S.CB.M.C16 F .DA #S.CB.M.MONO+S.CB.M.C16 F
.DA 0 S
.DA 560 W .DA 560 W
.DA 192 H .DA 192 H
*-------------------------------------- *--------------------------------------
DRV.END 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 MAN
SAVE USR/SRC/DRV/DHGR.DRV.S SAVE USR/SRC/DRV/DHGR.DRV.S
ASM ASM

View File

@ -119,22 +119,23 @@ FD.DEV.NAME .AZ "MOU7"
* Driver Code * Driver Code
*-------------------------------------- *--------------------------------------
ZPIOCTL .EQ ZPDRV ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
*-------------------------------------- *--------------------------------------
DRV.CS.START cld DRV.CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA STATUS .1 .DA STATUS
.DA READBLOCK .DA A2osX.BADCALL
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA CONTROL .DA CONTROL
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA OPEN .DA OPEN
.DA CLOSE .DA CLOSE
.DA A2osX.BADCALL .DA READ
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
STATUS >STYA ZPIOCTL STATUS jsr GETIOCTL
ldy #S.IOCTL.STATCODE ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y lda (ZPIOCTL),y
@ -143,20 +144,13 @@ STATUS >STYA ZPIOCTL
cmp #S.IOCTL.STATCODE.GETDIB cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB bne STATUS.DCB
ldx #S.DIB-1 ldy #S.DIB-1
.HS 2C bit abs .HS 2C bit abs
.1 ldx #3 .1 ldy #3
ldy #S.IOCTL.BUFPTR .2 lda DIB,y
lda (ZPIOCTL),y sta (ZPBufPtr),y
sta .3+1 dey
iny
lda (ZPIOCTL),y
sta .3+2
.2 lda DIB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2 bpl .2
clc clc
@ -168,121 +162,7 @@ STATUS.9 lda #MLI.E.BADCTL
sec sec
rts rts
*-------------------------------------- *--------------------------------------
READBLOCK >STYA ZPIOCTL CONTROL jsr GETIOCTL
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
php php
sei sei
@ -331,21 +211,146 @@ CLOSE php
clc clc
rts 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 * 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 sta LOCLAMPLO
iny iny
lda (ZPIOCTL),y lda (ZPBufPtr),y
sta LOCLAMPHI sta LOCLAMPHI
iny iny
lda (ZPIOCTL),y lda (ZPBufPtr),y
sta HICLAMPLO sta HICLAMPLO
iny iny
lda (ZPIOCTL),y lda (ZPBufPtr),y
sta HICLAMPHI sta HICLAMPHI
txa txa

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -158,14 +158,9 @@ MEM.GetMem.YAX stx Mem.ReqFlags
lda (pPs),y lda (pPs),y
ldy #S.MEM.OWNERPID ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
clc
ldy #S.MEM.PTR jmp K.GetMemPtr.ZPMemMgrSPtr
lda (ZPMemMgrSPtr),y * A = HI PTR,Y = LO PTR,X = Current hMem
pha
iny
lda (ZPMemMgrSPtr),y A = HI PTR
ply Y = LO PTR
clc X = Current hMem
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -222,7 +217,19 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
sec sec
rts 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 clc
adc #S.MEM adc #S.MEM
sta ZPMemMgrSPtr sta ZPMemMgrSPtr
@ -236,8 +243,8 @@ Mem.NextSlot lda ZPMemMgrSPtr
* none. * none.
* (X unmodified) * (X unmodified)
*\-------------------------------------- *\--------------------------------------
K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n" K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad,%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n" K.FreeMem.ERRFREED .AZ "FreeMem:$%h=free,%s\r\n"
*-------------------------------------- *--------------------------------------
K.FreeMem.BAD sec K.FreeMem.BAD sec
.HS 90 BCC .HS 90 BCC
@ -265,7 +272,7 @@ K.FreeMem.FREED clc
.1 >SYSCALL printf .1 >SYSCALL printf
plx plx
>DEBUG
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -286,10 +293,7 @@ K.FreeMem tay
.11 pla .11 pla
ldy #S.MEM.REFCNT jsr MEM.decREFCNT only one left ?
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ?
sta (ZPMemMgrSPtr),y
bne .8 no, must be a code segment loaded several times bne .8 no, must be a code segment loaded several times
lda (ZPMemMgrSPtr) lda (ZPMemMgrSPtr)
@ -365,7 +369,7 @@ K.GetMemPtr sta ZPMemMgrSPtr
asl ZPMemMgrSPtr asl ZPMemMgrSPtr
rol rol
sta ZPMemMgrSPtr+1 sta ZPMemMgrSPtr+1
K.GetMemPtr.ZPMemMgrSPtr
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y lda (ZPMemMgrSPtr),y
pha pha
@ -427,58 +431,6 @@ K.GetMemStat >STYA ZPMemMgrTmp1
bpl .3 bpl .3
rts 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 * # SListGetByID
* PUSHB = hSList * PUSHB = hSList
* PUSHW = KeyID * PUSHW = KeyID
@ -743,6 +695,17 @@ MEM.NextCharPtr1
MEM.GetCharPtr1.8 MEM.GetCharPtr1.8
rts 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) MEM.PutCharPtr2 sta (ZPPtr2)
inc ZPPtr2 inc ZPPtr2
bne .8 bne .8

View File

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

View File

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

View File

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

View File

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

View File

@ -62,13 +62,8 @@ K.StrCpy clc
bcc .2 bcc .2
.1 lda (ZPPtr1) .1 jsr MEM.GetCharPtr1
beq .2
inc ZPPtr1
bne .1 bne .1
inc ZPPtr1+1
bra .1
.2 ldy #0 .2 ldy #0
@ -83,6 +78,58 @@ K.StrCpy clc
.8 ply .8 ply
pla pla
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 rts
*/-------------------------------------- */--------------------------------------
* # StrUpr/StrLwr * # StrUpr/StrLwr
@ -104,13 +151,13 @@ K.StrUpr ldx #0
K.StrLwr ldx #2 K.StrLwr ldx #2
>STYA ZPPtr1 >STYA ZPPtr1
pha save Y,A to restore them at exit
phy phy
pha save Y,A to restore them at exit
ldy #0 ldy #0
.1 lda (ZPPtr1),y .1 lda (ZPPtr1),y
beq .8 beq K.StrDup.8
cmp .9,x cmp .9,x
bcc .2 bcc .2
@ -122,10 +169,6 @@ K.StrLwr ldx #2
bne .1 bne .1
inc ZPPtr1+1 inc ZPPtr1+1
bra .1 bra .1
.8 ply
pla
rts
*-------------------------------------- *--------------------------------------
.9 .AS "azAZ" .9 .AS "azAZ"
*/-------------------------------------- */--------------------------------------