A2osX/SYS/KERNEL.S.SLIST.txt

379 lines
6.1 KiB
Plaintext
Raw Normal View History

NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
2018-01-22 07:34:59 +00:00
X.SLIST jmp (.1-SYS.SListAdd,x)
.1 .DA SLIST.Add
.DA SLIST.Lookup
.DA SLIST.GetByID
.DA SLIST.UpdateByID
.DA SLIST.New
.DA SLIST.Free.A
*--------------------------------------
SLIST.Add jsr SLIST.Search
bcc .99 Lookup succeeded...DUP
2018-01-22 16:52:04 +00:00
ldy #$ff
2018-01-22 16:52:04 +00:00
.1 iny
jsr MEM.GetKeyCharY
bcc .1
sty .8+1
tya
2018-01-22 16:52:04 +00:00
beq .9 CS
jsr SLIST.AddBlockByte
bcs .9
ldy #0
.2 jsr MEM.GetKeyCharY
bcs .3
jsr SLIST.AddBlockByte
bcs .9
iny
bra .2
2018-01-22 16:52:04 +00:00
.3 ldy #0
jsr MEM.GetDataByteY
tax
jsr SLIST.AddBlockByte
bcs .9
2018-01-22 16:52:04 +00:00
.4 iny
jsr MEM.GetDataByteY
jsr SLIST.AddBlockByte
bcs .9
dex
bne .4
2018-01-29 16:48:07 +00:00
.8 lda #$ff SELF MODIFIED
clc
.HS B0 BCS
.99 sec
ldx SLIST.ID
ldy SLIST.ID+1
2018-01-29 16:48:07 +00:00
.9 rts
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
bcs .9
sty .8+1
ldy #0
jsr SLIST.GetBlockByte
tax
jsr MEM.SetDataByteY
.1 jsr SLIST.GetNextBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .1
.8 lda #$ff SELF MODIFIED
ldx SLIST.ID
ldy SLIST.ID+1
clc
.9 rts
*--------------------------------------
SLIST.GetByID jsr SLIST.Select
jsr SLIST.GetBlockByte
tax
beq .9
2018-01-22 16:52:04 +00:00
ldy #0
jsr MEM.SetDataByteY
.1 jsr SLIST.GetNextBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .1
jsr SLIST.GetNextBlockByte
2018-01-22 16:52:04 +00:00
tax
2018-01-22 16:52:04 +00:00
iny
jsr MEM.SetDataByteY
.2 jsr SLIST.GetNextBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .2
jsr SLIST.GetNextBlockByte
clc
2018-01-29 16:48:07 +00:00
.HS B0 BCS
.9 sec
2018-01-29 16:48:07 +00:00
ldx SLIST.BlockOfs
ldy SLIST.IndexOfs
rts
*--------------------------------------
SLIST.UpdateByID
jsr SLIST.Select
jsr SLIST.GetBlockByte
tax
.1 jsr SLIST.GetNextBlockByte
dex
bne .1
jsr SLIST.GetNextBlockByte set pos at DATALEN
ldy #0
jsr MEM.GetDataByteY
tax
jsr SLIST.SetBlockByte
.4 iny
jsr MEM.GetDataByteY
jsr SLIST.SetBlockByte
dex
bne .4
clc
rts
*--------------------------------------
2018-01-22 07:34:59 +00:00
SLIST.New >LDYAI 160 40k Max before out of memory!!!
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListIndex
stx .8+1
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
txa
sta (ZPSListIndex)
.8 lda #$ff SELF MODIFIED
.9 rts
*--------------------------------------
SLIST.Free.A sta .8+1
jsr K.GetMemPtr.A
>STYA .1+1
ldx #0
.1 lda $ffff,x SELF MODIFIED
beq .8
jsr K.FreeMem.A
inx
bra .1
.8 lda #$ff SELF MODIFIED
jmp K.FreeMem.A
*--------------------------------------
SLIST.Select jsr K.GetMemPtr.A
>STYA ZPSListIndex
ldy ZPSListKey+1
sty SLIST.IndexOfs
lda (ZPSListIndex),y
beq *
jsr K.GetMemPtr.A
>STYA ZPSListBlock
lda ZPSListKey
sta SLIST.BlockOfs
rts
*--------------------------------------
SLIST.Search jsr K.GetMemPtr.A
>STYA ZPSListIndex
stz SLIST.IndexOfs
stz SLIST.ID+1
lda (ZPSListIndex)
beq *
jsr K.GetMemPtr.A
>STYA ZPSListBlock
stz SLIST.BlockOfs
stz SLIST.ID
jsr SLIST.GetBlockByte
tax
beq .9
.1 ldy #0
cmp #30
bcs *
.2 jsr MEM.GetKeyCharY
bcs .40
iny
sta .3+1
jsr SLIST.GetNextBlockByte
.3 cmp #$ff SELF MODIFIED
bne .4
dex
bne .2
jsr MEM.GetKeyCharY
bcs .8 End of Key....match!!!!
jsr SLIST.GetNextBlockByte
bra .41
.8 jsr SLIST.GetNextBlockByte Advance to DATA LEN
clc Y = Key Length
rts
.40 inx
.4 jsr SLIST.GetNextBlockByte skip remaining key chars
dex
bne .4
cmp #30
bcs *
.41 tax A=get Data Len
.5 jsr SLIST.GetNextBlockByte skip data bytes
dex
bne .5
jsr SLIST.GetNextBlockByte
ldx SLIST.IndexOfs
stx SLIST.ID+1
ldx SLIST.BlockOfs
stx SLIST.ID
tax
bne .1
.9 sec
rts
*--------------------------------------
SLIST.GetNextBlockByte
phy
ldy SLIST.BlockOfs
iny
beq .1
lda (ZPSListBlock),y
sty SLIST.BlockOfs
ply
rts
.1 ldy SLIST.IndexOfs
iny
lda (ZPSListIndex),y
beq .9
sty SLIST.IndexOfs
jsr K.GetMemPtr.A
>STYA ZPSListBlock
stz SLIST.BlockOfs
lda (ZPSListBlock)
ply
rts
.9 >DEBUG
lda #0
ply
rts
SLIST.GetBlockByte
phy
ldy SLIST.BlockOfs
lda (ZPSListBlock),y
ply
rts
*--------------------------------------
SLIST.AddBlockByte
phy
ldy SLIST.BlockOfs
sta (ZPSListBlock),y
inc SLIST.BlockOfs
bne .8
phx
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListBlock
txa
inc SLIST.IndexOfs
ldy SLIST.IndexOfs
sta (ZPSListIndex),y
* stz SLIST.BlockOfs
plx
.8 ply
clc
rts
.9 plx
ply
sec
rts
*--------------------------------------
SLIST.SetBlockByte
phy
ldy SLIST.BlockOfs
sta (ZPSListBlock),y
inc SLIST.BlockOfs
bne .8
inc SLIST.IndexOfs
ldy SLIST.IndexOfs
lda (ZPSListIndex),y
beq *
jsr K.GetMemPtr.A
>STYA ZPSListBlock
* stz SLIST.BlockOfs
.8 ply
clc
rts
*--------------------------------------
SLIST.IndexOfs .BS 1
SLIST.BlockOfs .BS 1
SLIST.ID .BS 2
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.SLIST
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM