Kernel 0.92+

This commit is contained in:
Rémy GIBERT 2019-03-15 16:20:28 +00:00
parent fac33c60ce
commit a3d66b0b6c
8 changed files with 337 additions and 222 deletions

View File

@ -446,34 +446,35 @@ A = hMem
Y,A = PTR to MemBlock
(X unmodified)
# SListAddData
## ASM
`PUSHB DataLen`
`PUSHB DataPtr`
`PUSHW KeyID`
`lda hSList`
`>SYSCALL SListAddData`
## RETURN VALUE
Y,A = Next DataID
# SListGetData
## ASM
`PUSHB DataLen`
`PUSHB DataPtr`
`PUSHW DataOfs`
`PUSHW DataLen`
`PUSHW DataPtr`
`PUSHW KeyID`
`lda hSList`
`>SYSCALL SListGetData`
## RETURN VALUE
Y,A = Byte Count
# SListAddData
## ASM
`PUSHW DataLen`
`PUSHW DataPtr`
`PUSHW KeyID`
`lda hSList`
`>SYSCALL SListAddData`
## RETURN VALUE
# SListSetData
## ASM
`PUSHB DataLen`
`PUSHB DataPtr`
`PUSHW DataLen`
`PUSHW DataPtr`
`PUSHW KeyID`
`lda hSList`
`>SYSCALL SListSetData`
@ -511,6 +512,7 @@ Y,A = PTR to MemBlock
## RETURN VALUE
Y,A = KeyID
X = Key Length
# SListNew
@ -528,16 +530,6 @@ A=hSList
## RETURN VALUE
# GetStkObjData
## ASM
`PUSHW DataLen`
`PUSHW DataPtr`
`lda hStkObj`
`>SYSCALL GetStkObjData`
## RETURN VALUE
# NewStkObj
Y,A = Size Requested
@ -566,6 +558,16 @@ Load a file in AUX memory (Stock Objects)
Y,A = File Length
X = hMem of Loaded Object in AUX mem
# GetStkObjData
## ASM
`PUSHW DataLen`
`PUSHW DataPtr`
`lda hStkObj`
`>SYSCALL GetStkObjData`
## RETURN VALUE
# ExecL
## C

Binary file not shown.

View File

@ -537,16 +537,17 @@ CMD.FUNC lda (ZPArgVBufPtr)
jsr CORE.StkGetCtx
bcc .9 NO context allowed
>LDA.G hFuncList
bne .1
>SYSCALL SListNew
bcs .9
bcs .99
>STA.G hFuncList
.1 >PUSHW ZPArgVBufPtr
>LDA.G hFuncList
>SYSCALL SListNewKey
bcs .99

View File

@ -131,7 +131,19 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
jsr CORE.LookupInputBuf
bcc .41
jsr CORE.ArgV.Add external cmd, go check context
>LDA.G hFuncList
beq .40
>PUSHYA ZPInputBufPtr
>LDA.G hFuncList
>DEBUG
>SYSCALL SListLookup
bcs .40
jmp .43
.40 jsr CORE.ArgV.Add external cmd, go check context
bra .42
.41 jsr CORE.SkipCharsA
@ -140,7 +152,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
>STA.G CORE.IntCmd
.42 jsr CORE.StkGet
bcs .7 no particular context, exec...
bcs CORE.Run.7 no particular context, exec...
tax
>LDA.G CORE.IntCmd
@ -148,13 +160,13 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
and #$3F
cmp #C.SWITCH SWITCH....FI ?
bcs .7
bcs CORE.Run.7
.45 txa
bpl .43 context is FALSE, skip line
asl
bmi .7 parent context is true, exec
bmi CORE.Run.7 parent context is true, exec
.43 jsr CORE.GetCharNB
@ -173,23 +185,23 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
clc
.99 rts
*--------------------------------------
.5 >LDYA L.CORE.IO
CORE.Run.5 >LDYA L.CORE.IO
jsr CORE.LookupInputBuf
bcs .6
bcs CORE.Run.6
jsr CORE.SkipCharsA
jsr CORE.IO.JMP
bcs CORE.Run.RTS
bra .7
bra CORE.Run.7
.6 jsr CORE.ArgV.Add
CORE.Run.6 jsr CORE.ArgV.Add
.7 jsr CORE.GetCharNB
CORE.Run.7 jsr CORE.GetCharNB
bcs CORE.ExecCmd.1 Nothing to skip
jsr CORE.IsEndCmd
bcs .5
bcs CORE.Run.5
cmp #'|'
bne CORE.ExecCmd skip CR, ;

View File

@ -109,6 +109,7 @@ E.IUSR .EQ $F2 Invalid User
E.NOKEY .EQ $EF Undefined Key
E.DUPKEY .EQ $EE Duplicate Key
E.NODATA .EQ $ED No Data
*--------------------------------------
* A2osX.SYSCALL Constants
*--------------------------------------
@ -283,13 +284,13 @@ SYS.GetMem0 .EQ $E2
SYS.GetMemPtr .EQ $E4
SYS.FreeMem .EQ $E6
SYS.LoadStkObj .EQ $E8
SYS.NewStkObj .EQ $EA
SYS.FreeStkObj .EQ $EC
SYS.NewStkObj .EQ $E8
SYS.FreeStkObj .EQ $EA
SYS.LoadStkObj .EQ $EC
SYS.GetStkObjData .EQ $EE
SYS.SListAddData .EQ $F0
SYS.SListGetData .EQ $F2
SYS.SListGetData .EQ $F0
SYS.SListAddData .EQ $F2
SYS.SListSetData .EQ $F4
SYS.SListGetByID .EQ $F6

View File

@ -141,13 +141,13 @@ K.SYSCALL.JMP .DA K.GetMemStat $00
.DA K.GetMemPtr
.DA K.FreeMem
.DA K.LoadStkObj
.DA K.NewStkObj
.DA K.FreeStkObj
.DA K.LoadStkObj
.DA K.GetStkObjData
*--------------------------------------
.DA K.SListAddData $F0
.DA K.SListGetData
.DA K.SListGetData $F0
.DA K.SListAddData
.DA K.SListSetData
.DA K.SListGetByID

View File

@ -5,12 +5,6 @@ AUTO 4,1
ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected
ZPMemMgrTmp1 .EQ ZPMEMMGR+2
ZPMemMgrSize .EQ ZPMEMMGR+4
ZPSListID .EQ ZPMEMMGR+6
ZPSListKeyPtr .EQ ZPMEMMGR+8
ZPSListDataPtr .EQ ZPMEMMGR+8
ZPSListDataLen .EQ ZPMEMMGR+10
ZPSListIBlkPtr .EQ ZPMEMMGR+12
ZPSListDBlkPtr .EQ ZPMEMMGR+14
*/--------------------------------------
* # GetMem0
* Y,A = Size Requested
@ -385,42 +379,52 @@ MEM.GetMemByID sta ZPMemMgrSPtr
rol
sta ZPMemMgrSPtr+1
rts
*/--------------------------------------
* # SListAddData
* ## ASM
* `PUSHB DataLen`
* `PUSHB DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListAddData`
* ## RETURN VALUE
* Y,A = Next DataID
*\--------------------------------------
K.SListAddData
*--------------------------------------
ZPSListKeyID .EQ ZPMEMMGR+6
ZPSListKeyPtr .EQ ZPMEMMGR+8
ZPSListDataPtr .EQ ZPMEMMGR+8
ZPSListDataLen .EQ ZPMEMMGR+10
ZPSListIBlkPtr .EQ ZPMEMMGR+12
ZPSListDBlkPtr .EQ ZPMEMMGR+14
*/--------------------------------------
* # SListGetData
* ## ASM
* `PUSHB DataLen`
* `PUSHB DataPtr`
* `PUSHW DataOfs`
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetData`
* ## RETURN VALUE
* Y,A = Byte Count
*\--------------------------------------
K.SListGetData
K.SListGetData pha
>PULLW ZPMemMgrSize
pla
*/--------------------------------------
* # SListAddData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListAddData`
* ## RETURN VALUE
*\--------------------------------------
K.SListAddData
*/--------------------------------------
* # SListSetData
* ## ASM
* `PUSHB DataLen`
* `PUSHB DataPtr`
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListSetData`
* ## RETURN VALUE
*\--------------------------------------
K.SListSetData pha
>PULLW ZPSListID
bra K.SListPullA
>PULLW ZPSListDataLen
pla
*/--------------------------------------
* # SListGetByID
* ## ASM
@ -432,9 +436,10 @@ K.SListSetData pha
* Y,A = Next KeyID
*\--------------------------------------
K.SListGetByID pha
>PULLW ZPSListID
>PULLW ZPSListKeyPtr
bra K.SListPullA
>PULLW ZPSListKeyID
pla
bra K.SListFree
*/--------------------------------------
* # SListNewKey
* ## ASM
@ -454,11 +459,11 @@ K.SListNewKey
* `>SYSCALL SListLookup`
* ## RETURN VALUE
* Y,A = KeyID
* X = Key Length
*\--------------------------------------
K.SListLookup pha
*--------------------------------------
>PULLW ZPSListKeyPtr
K.SListPullA pla
pla
*/--------------------------------------
* # SListNew
* ## ASM
@ -466,7 +471,7 @@ K.SListPullA pla
* ## RETURN VALUE
* A=hSList
*\--------------------------------------
K.SListNew
K.SListNew
*/--------------------------------------
* # SListFree
* ## ASM
@ -474,40 +479,15 @@ K.SListNew
* `>SYSCALL SListFree`
* ## RETURN VALUE
*\--------------------------------------
K.SListFree
*--------------------------------------
sta SETREADAUX
K.SListFree sta SETREADAUX
sta SETWRITEAUX
jsr X.SLIST
jsr X.SLIST
sta CLRREADAUX
sta CLRWRITEAUX
rts
*/--------------------------------------
* # GetStkObjData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `lda hStkObj`
* `>SYSCALL GetStkObjData`
* ## RETURN VALUE
*\--------------------------------------
K.GetStkObjData sta SETREADAUX
jsr K.GetMemPtr
>STYA ZPMemMgrTmp1
>PULLW ZPSListDataLen
>PULLW ZPSListDataPtr
lda (ZPMemMgrTmp1),y
pha
iny
lda (ZPMemMgrTmp1),y
ply
sta CLRREADAUX
rts
*/--------------------------------------
* # NewStkObj
* Y,A = Size Requested
* ## RETURN VALUE
@ -528,16 +508,16 @@ K.NewStkObj ldx #SYS.GetMem
*\--------------------------------------
K.FreeStkObj ldx #SYS.FreeMem
MEM.GoStkObj sta SETREADAUX
sta SETREADAUX
sta SETWRITEAUX
jsr .1
jsr MEM.Kernel.JMP
sta CLRREADAUX
sta CLRWRITEAUX
rts
.1 jmp (SYS.Kernel.JMP,x)
MEM.Kernel.JMP jmp (SYS.Kernel.JMP,x)
*/--------------------------------------
* # LoadStkObj
* Load a file in AUX memory (Stock Objects)
@ -596,6 +576,31 @@ K.LoadStkObj >SYSCALL LoadFile
pla
sec
.99 rts
*/--------------------------------------
* # GetStkObjData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `lda hStkObj`
* `>SYSCALL GetStkObjData`
* ## RETURN VALUE
*\--------------------------------------
K.GetStkObjData sta SETREADAUX
jsr K.GetMemPtr
>STYA ZPMemMgrTmp1
>PULLW ZPSListDataLen
>PULLW ZPSListDataPtr
lda (ZPMemMgrTmp1),y
pha
iny
lda (ZPMemMgrTmp1),y
ply
sta CLRREADAUX
rts
*--------------------------------------
* in Y,A = buf size
*--------------------------------------

View File

@ -2,68 +2,134 @@ NEW
PREFIX
AUTO 4,1
*--------------------------------------
X.SLIST jmp (.1-SYS.SListAddData,x)
.1 .DA SLIST.AddData
.DA SLIST.GetData
X.SLIST jmp (.1-SYS.SListGetData,x)
.1 .DA SLIST.GetData
.DA SLIST.AddData
.DA SLIST.SetData
.DA SLIST.GetByID
.DA SLIST.NewKey
.DA SLIST.Lookup
.DA SLIST.New
.DA SLIST.Free
.DA SLIST.Free
*--------------------------------------
SLIST.AddData jsr SLIST.Select
SLIST.GetData jsr SLIST.Select
jsr SLIST.SkipKey
jsr SLIST.GetDataLen
lda ZPMemMgrSize Get Offset
cmp SLIST.DataLen
lda ZPMemMgrSize+1
sbc SLIST.DataLen+1
bcs .99
lda ZPMemMgrSize
ldx ZPMemMgrSize+1
jsr SLIST.SkipDataAX
lda SLIST.DataLen
sec
sbc ZPMemMgrSize
eor #$ff
sta SLIST.nDataCnt
lda SLIST.DataLen+1
sbc ZPMemMgrSize
eor #$ff
sta SLIST.nDataCnt+1 Data remaining
lda ZPSListDataLen
ora ZPSListDataLen
clc
beq .1 String Mode
lda ZPSListDataLen
eor #$ff
sta SLIST.nBufCnt
lda ZPSListDataLen+1
eor #$ff
sta SLIST.nBufCnt+1
sec
.1 ror SLIST.bStringMode
bcs .99 Lookup succeeded...DUP
stz ZPSListDataLen
stz ZPSListDataLen+1
ldy #$ff
.2 inc SLIST.nDataCnt
bne .3
inc SLIST.nDataCnt+1
beq .8
.1 iny
jsr MEM.GetKeyCharY
bcc .1
.3 inc SLIST.nBufCnt
bne .4
inc SLIST.nBufCnt+1
beq .8
sty .8+1
tya
beq .9 CS
.4 jsr SLIST.GetNextByte
bit SLIST.bStringMode
bpl .5
jsr SLIST.AddBlockByte
bcs .9
cmp #C.CR
beq .8
ldy #0
.2 jsr MEM.GetKeyCharY
bcs .3
jsr SLIST.AddBlockByte
bcs .9
iny
.5 jsr MEM.SetDataByte
inc ZPSListDataLen
bne .2
inc ZPSListDataLen+1
bra .2
.3 jsr MEM.GetDataByte
tax
jsr SLIST.AddBlockByte
bcs .9
.4 jsr MEM.GetDataByte
jsr SLIST.AddBlockByte
bcs .9
dex
bne .4
.8 lda #$ff SELF MODIFIED
.8 >LDYA ZPSListDataLen
clc
rts
.99 lda #E.NOPKEY
.99 lda #E.NODATA
sec
.9 rts
rts
*--------------------------------------
SLIST.GetData
SLIST.AddData jsr SLIST.Select
jsr SLIST.SkipKey
>LDYA SLIST.KeyID Save DataLen location
>STYA ZPSListKeyID to update later
jsr SLIST.SkipData
lda ZPSListDataLen
pha
clc
adc SLIST.DataLen
sta SLIST.DataLen
pla
eor #$ff
sta ZPSListDataLen
lda ZPSListDataLen+1
pha
adc SLIST.DataLen+1
sta SLIST.DataLen+1
pla
eor #$ff
sta ZPSListDataLen+1
.1 inc ZPSListDataLen
bne .2
inc ZPSListDataLen+1
beq .8
.2 jsr MEM.GetDataByte
jsr SLIST.AddBlockByte
bcc .9
rts
.8 jsr SLIST.Select go back to DataLen Location
lda SLIST.DataLen
jsr SLIST.SetBlockByte
lda SLIST.DataLen+1
jsr SLIST.SetBlockByte
clc
.9 rts
*--------------------------------------
SLIST.SetData
clc
@ -102,15 +168,15 @@ SLIST.GetByID jsr SLIST.Select
clc
.HS B0 BCS
.9 sec
ldx SLIST.BlockOfs
ldy SLIST.IndexOfs
>LDYA SLIST.KeyID
rts
*--------------------------------------
SLIST.NewKey jsr SLIST.Search
bcc .99
>LDYA SLIST.IndexOfs
>STYA ZPSListID
>LDYA SLIST.KeyID Not Found...
>STYA ZPSListKeyID save new KeyID
lda SLIST.KeyLen
jsr SLIST.AddBlockByte
@ -118,7 +184,7 @@ SLIST.NewKey jsr SLIST.Search
ldy #0
.1 lda (ZPSListKeyPtr),y
.1 jsr MEM.GetKeyCharY
jsr SLIST.AddBlockByte
bcs .9
iny
@ -133,7 +199,7 @@ SLIST.NewKey jsr SLIST.Search
jsr SLIST.AddBlockByte
bcs .9
>LDYA ZPSListID
>LDYA ZPSListKeyID
clc
rts
@ -141,35 +207,10 @@ SLIST.NewKey jsr SLIST.Search
sec
.9 rts
*--------------------------------------
SLIST.UpdateByID
jsr SLIST.Select
jsr SLIST.GetBlockByte
tax
.1 jsr SLIST.GetNextBlockByte
dex
bne .1
jsr SLIST.GetNextBlockByte set pos at DATALEN
jsr MEM.GetDataByte
tax
jsr SLIST.SetBlockByte
.4 jsr MEM.GetDataByte
jsr SLIST.SetBlockByte
dex
bne .4
clc
rts
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
bcs .9
>LDYA ZPSListID
>LDYA SLIST.KeyID
ldx SLIST.KeyLen
.9 rts
@ -211,29 +252,29 @@ SLIST.Free sta .8+1
SLIST.Select jsr K.GetMemPtr
>STYA ZPSListIBlkPtr
ldy ZPSListID+1
sty SLIST.IndexOfs
ldy ZPSListKeyID+1
sty SLIST.BlockPtr
lda (ZPSListIBlkPtr),y
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
lda ZPSListID
sta SLIST.BlockOfs
lda ZPSListKeyID
sta SLIST.BytePtr
rts
*--------------------------------------
SLIST.Search jsr K.GetMemPtr
>STYA ZPSListIBlkPtr
stz SLIST.IndexOfs
stz ZPSListID+1
stz SLIST.BlockPtr
stz ZPSListKeyID+1
lda (ZPSListIBlkPtr)
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
stz SLIST.BlockOfs
stz ZPSListID
stz SLIST.BytePtr
stz ZPSListKeyID
ldy #$ff
@ -247,13 +288,15 @@ SLIST.Search jsr K.GetMemPtr
beq .9
.2 cmp SLIST.KeyLen
bne .4
bne .5
ldy #0
.3 jsr SLIST.GetNextBlockByte
cmp (ZPSListKeyPtr),y
bne .4
sta .4+1
jsr MEM.GetKeyCharY
.4 cmp #$ff SELF MODIFIED
bne .5
iny
cpy SLIST.KeyLen
@ -262,13 +305,7 @@ SLIST.Search jsr K.GetMemPtr
clc
rts
.4
jsr SLIST.GetNextBlockByte
ldx SLIST.IndexOfs
stx ZPSListID+1
ldx SLIST.BlockOfs
stx ZPSListID
.5 jsr SLIST.Next
jsr SLIST.GetBlockByte
bne .2
@ -277,29 +314,82 @@ SLIST.Search jsr K.GetMemPtr
sec
rts
*--------------------------------------
SLIST.Skip
SLIST.Next jsr SLIST.SkipKey
SLIST.SkipData jsr SLIST.GetDataLen
lda SLIST.DataLen
ldx SLIST.DataLen+1
SLIST.SkipDataAX
clc
adc SLIST.BytePtr
sta SLIST.BytePtr
txa
adc SLIST.BlockPtr
sta SLIST.BlockPtr
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
rts
*--------------------------------------
SLIST.SkipKey ldy SLIST.BytePtr
lda (ZPSListDBlkPtr),y Get KeyLen
sec
adc SLIST.BytePtr
sta SLIST.BytePtr
bcc .8
inc SLIST.BlockPtr
lda SLIST.BlockPtr
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
.8 rts
*--------------------------------------
SLIST.GetDataLen
jsr SLIST.GetNextByte Get DataLenLo
sta SLIST.DataLen
jsr SLIST.GetNextByte Get DataLenHI
sta SLIST.DataLen+1
rts
*--------------------------------------
SLIST.GetNextByte
ldy SLIST.BytePtr
lda (ZPSListDBlkPtr),y
inc SLIST.BytePtr
bne .8
pha
inc SLIST.BlockPtr
lda SLIST.BlockPtr
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
pla
.8 rts
*--------------------------------------
SLIST.GetNextBlockByte
phy
ldy SLIST.BlockOfs
ldy SLIST.BytePtr
iny
beq .1
lda (ZPSListDBlkPtr),y
sty SLIST.BlockOfs
sty SLIST.BlockPtr
ply
rts
.1 ldy SLIST.IndexOfs
.1 ldy SLIST.BytePtr
iny
lda (ZPSListIBlkPtr),y
beq .9 Exit with A=0
sty SLIST.IndexOfs
sty SLIST.BytePtr
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
stz SLIST.BlockOfs
stz SLIST.BlockPtr
lda (ZPSListDBlkPtr)
.9 ply
@ -307,16 +397,16 @@ SLIST.GetNextBlockByte
SLIST.GetBlockByte
phy
ldy SLIST.BlockOfs
ldy SLIST.BlockPtr
lda (ZPSListDBlkPtr),y
ply
rts
*--------------------------------------
SLIST.AddBlockByte
phy
ldy SLIST.BlockOfs
ldy SLIST.BytePtr
sta (ZPSListDBlkPtr),y
inc SLIST.BlockOfs
inc SLIST.BytePtr
bne .8
phx
@ -326,11 +416,11 @@ SLIST.AddBlockByte
>STYA ZPSListDBlkPtr
txa
inc SLIST.IndexOfs
ldy SLIST.IndexOfs
inc SLIST.BlockPtr
ldy SLIST.BlockPtr
sta (ZPSListIBlkPtr),y
* stz SLIST.BlockOfs
* stz SLIST.BytePtr
plx
@ -344,27 +434,31 @@ SLIST.AddBlockByte
rts
*--------------------------------------
SLIST.SetBlockByte
phy
ldy SLIST.BlockOfs
ldy SLIST.BlockPtr
sta (ZPSListDBlkPtr),y
inc SLIST.BlockOfs
inc SLIST.BlockPtr
bne .8
inc SLIST.IndexOfs
inc SLIST.BytePtr
ldy SLIST.IndexOfs
ldy SLIST.BytePtr
lda (ZPSListIBlkPtr),y
beq *
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
* stz SLIST.BlockOfs
* stz SLIST.BlockPtr
.8 ply
rts
*--------------------------------------
SLIST.KeyLen .BS 1
SLIST.IndexOfs .BS 1
SLIST.BlockOfs .BS 1
SLIST.DataLen .BS 2
SLIST.nDataCnt .BS 2
SLIST.nBufCnt .BS 2
SLIST.bStringMode .BS 1
SLIST.KeyID .EQ *
SLIST.BytePtr .BS 1
SLIST.BlockPtr .BS 1
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.SLIST