mirror of
https://github.com/A2osX/A2osX.git
synced 2024-07-03 22:29:36 +00:00
Kernel 0.92
This commit is contained in:
parent
c760a752ce
commit
2d5d819354
Binary file not shown.
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -228,7 +228,24 @@ 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
|
||||
|
|
|
@ -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
|
||||
.1 ldy #3
|
||||
|
||||
ldy #S.IOCTL.BUFPTR
|
||||
lda (ZPIOCTL),y
|
||||
sta .3+1
|
||||
iny
|
||||
lda (ZPIOCTL),y
|
||||
sta .3+2
|
||||
|
||||
.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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
@ -150,28 +141,21 @@ 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
|
||||
txa
|
||||
jsr K.GetMemPtr
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPPtr1),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPPtr1),y
|
||||
ply
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
*/--------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -275,7 +275,7 @@ STAT.NewhNodeYAX
|
|||
.2 stx .3+1 Store hFILE
|
||||
|
||||
pla
|
||||
jsr K.NewStr
|
||||
>SYSCALL StrDup
|
||||
bcs .9
|
||||
txa
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -62,13 +62,8 @@ 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
|
||||
|
||||
|
@ -83,6 +78,58 @@ K.StrCpy clc
|
|||
|
||||
.8 ply
|
||||
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
|
||||
*/--------------------------------------
|
||||
* # StrUpr/StrLwr
|
||||
|
@ -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"
|
||||
*/--------------------------------------
|
||||
|
|
Loading…
Reference in New Issue
Block a user