A2osX/SYS/KERNEL.S.SLIST.txt

351 lines
5.7 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
.8 lda #$ff SELF MODIFIED
ldx SLIST.ID
ldy SLIST.ID+1
clc
.9 rts
.99 sec
rts
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
bcs .9
sty .8+1
ldy #0
jsr SLIST.GetBlockByte
tax
jsr MEM.SetDataByteY
.1 jsr SLIST.NextBlockByte
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.NextBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .1
jsr SLIST.NextBlockByte
2018-01-22 16:52:04 +00:00
tax
2018-01-22 16:52:04 +00:00
iny
jsr MEM.SetDataByteY
.2 jsr SLIST.NextBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .2
jsr SLIST.NextBlockByte
lda SLIST.IndexOfs
ldy SLIST.BlockOfs
clc
rts
.9 sec
rts
*--------------------------------------
SLIST.UpdateByID
jsr SLIST.Select
jsr SLIST.GetBlockByte
tax
.1 jsr SLIST.NextBlockByte
dex
bne .1
jsr SLIST.NextBlockByte 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
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)
jsr K.GetMemPtr.A
>STYA ZPSListBlock
stz SLIST.BlockOfs
stz SLIST.ID
jsr SLIST.GetBlockByte
tax
beq .9
.1 ldy #0
.2 jsr MEM.GetKeyCharY
bcs .4
iny
sta .3+1
jsr SLIST.NextBlockByte
.3 cmp #$ff SELF MODIFIED
bne .4
dex
bne .2
jsr MEM.GetKeyCharY
bcs .8 End of Key....match!!!!
jsr SLIST.NextBlockByte
bra .41
.8 jsr SLIST.NextBlockByte Advance to DATA LEN
clc Y = Key Length
rts
.4 jsr SLIST.NextBlockByte skip remaining key chars
dex
bne .4
.41 tax A=get Data Len
.5 jsr SLIST.NextBlockByte skip data bytes
dex
bne .5
jsr SLIST.NextBlockByte
ldx SLIST.IndexOfs
stx SLIST.ID+1
ldx SLIST.BlockOfs
stx SLIST.ID
tax
bne .1
.9 sec
rts
*--------------------------------------
SLIST.NextBlockByte
inc SLIST.BlockOfs
bne SLIST.GetBlockByte
phy
inc SLIST.IndexOfs
ldy SLIST.IndexOfs
lda (ZPSListIndex),y
jsr K.GetMemPtr.A
>STYA ZPSListBlock
* stz SLIST.BlockOfs
.HS A9 lda imm
SLIST.GetBlockByte
phy
ldy SLIST.BlockOfs
lda (ZPSListBlock),y
ply
clc
rts
*--------------------------------------
SLIST.AddBlockByte
phy
ldy SLIST.BlockOfs
sta (ZPSListBlock),y
inc SLIST.BlockOfs
bne .8
inc SLIST.IndexOfs
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListBlock
txa
ldy SLIST.IndexOfs
sta (ZPSListIndex),y
* stz SLIST.BlockOfs
.8 ply
clc
rts
.9 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
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