A2osX/SYS/KERNEL.S.SLIST.txt

334 lines
5.3 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 .9 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
>DEBUG
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
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
bcs .9
sty .8+1
ldy #0
jsr SLIST.GetBlockByte
tax
jsr MEM.SetDataByteY
.1 jsr SLIST.GetBlockByte
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
2018-01-22 16:52:04 +00:00
bcs .9
tax
2018-01-22 16:52:04 +00:00
ldy #0
jsr MEM.SetDataByteY
.1 jsr SLIST.GetBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .1
2018-01-22 16:52:04 +00:00
jsr SLIST.GetBlockByte
tax
2018-01-22 16:52:04 +00:00
iny
jsr MEM.SetDataByteY
.2 jsr SLIST.GetBlockByte
iny
jsr MEM.SetDataByteY
dex
bne .2
lda SLIST.IndexOfs
ldy SLIST.BlockOfs
clc
rts
.9 sec
rts
*--------------------------------------
SLIST.UpdateByID
jsr SLIST.Select
ldy #0
jsr MEM.GetDataByteY
tax
jsr SLIST.SetBlockByte
bcs .9
.4 iny
jsr MEM.GetDataByteY
jsr SLIST.SetBlockByte
bcs .9
dex
bne .4
.8 lda #$ff SELF MODIFIED
clc
.9 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
lda (ZPSListIndex)
jsr K.GetMemPtr.A
>STYA ZPSListBlock
stz SLIST.BlockOfs
.1 lda SLIST.IndexOfs
sta SLIST.ID
lda SLIST.BlockOfs
sta SLIST.ID+1
jsr SLIST.GetBlockByte
tax
beq .9
ldy #0
.2 jsr MEM.GetKeyCharY
bcs .4
iny
sta .3+1
jsr SLIST.GetBlockByte
.3 cmp #$ff SELF MODIFIED
bne .4
dex
bne .2
clc Y = Key Length
rts
.4 jsr SLIST.GetBlockByte skip remaining key chars
dex
bne .4
jsr SLIST.GetBlockByte get Data Len
tax
.5 jsr SLIST.GetBlockByte skip data bytes
dex
bne .5
bra .1
.9 sec
rts
*--------------------------------------
SLIST.GetBlockByte
phy
ldy SLIST.BlockOfs
lda (ZPSListBlock),y
beq .99
inc SLIST.BlockOfs
bne .8
pha
inc SLIST.IndexOfs
ldy SLIST.IndexOfs
lda (ZPSListIndex),y
jsr K.GetMemPtr.A
>STYA ZPSListBlock
* stz SLIST.BlockOfs
pla
.8 ply
clc
rts
.9 pla
.99 ply
sec
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